|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T r
Length: 1185 (0x4a1)
Types: TextFile
Names: »readline.c«
└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen
└─⟦this⟧ »cph85dist/stat/src/readline.c«
/* LINTLIBRARY */
#include "unixstat.h"
FUN(reasline,read a line frlom a file,5.0,1985)
/* fills buf with next line from ioptr so that line continuations are allowed */
/* a line continues if the first character on the next line is ' ' or '\t' */
/* a backslash at the visible end of line reads the next line; blanks ignored */
/* returns EOF or the string length. Trailing newlines are removed */
readline (buf, ioptr)
char *buf;
FILE *ioptr;
{
int C;
char *bufptr;
if (fgets (bufptr = buf, BUFSIZ, ioptr) == NULL) return (EOF);
getline:
while (*bufptr) bufptr++;
while (bufptr > buf && isspace (*(bufptr-1))) bufptr--;
if (bufptr > buf && *(bufptr-1) == '\\')
bufptr--;
else
{
*bufptr = '\0';
C = getc (ioptr);
ungetc (C, ioptr);
if (C != ' ' && C != '\t') return (bufptr-buf);
}
*bufptr++ = ' ';
while ((C = getc (ioptr)) == ' ' || C == '\t');
*bufptr++ = (C == EOF) ? '\0' : C;
if (fgets (bufptr, BUFSIZ - (bufptr - buf), ioptr) == NULL)
bufptr = '\0';
goto getline;
}
#ifdef STANDALONE
main ()
{
char line[BUFSIZ];
int len;
while ((len = readline (line, stdin)) != EOF)
{
printf ("%d\n", len);
puts (line);
}
exit (0);
}
#endif