|
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: 2299 (0x8fb) Types: TextFile Names: »rd_buf.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/Lib/io/rd_buf.c«
/* rd_buf.c: low level line reading of Control and DR Txt Files */ # ifndef lint static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/io/RCS/rd_buf.c,v 5.0 90/09/20 16:06:38 pp Exp Locker: pp $"; # endif /* * $Header: /cs/research/pp/hubris/pp-beta/Lib/io/RCS/rd_buf.c,v 5.0 90/09/20 16:06:38 pp Exp Locker: pp $ * * $Log: rd_buf.c,v $ * Revision 5.0 90/09/20 16:06:38 pp * rcsforce : 5.0 public release * */ #include "head.h" #define COMMENTCHAR '#' int protocol_mode = 0; static int glinread (); /* --------------------- Begin Routines -------------------------------- */ int txt2buf (linebuf, fp) FILE *fp; char *linebuf; { int n; PP_DBG (("Lib/io/txt2buf()")); if ((n = glinread (fp, linebuf, BUFSIZ)) < 0) return (RP_EOF); if (n == 0) /* time for a resync */ return (RP_PARM); if (n == 1) return (RP_DONE); if (linebuf[--n] != '\n') return (RP_MECH); linebuf[n] = '\0'; return (RP_OK); } /* --------------------- Static Routines ------------------------------- */ static int glinread (fp, buf, size) register FILE *fp; char *buf; int size; { register int c; register int i; extern int protocol_mode; PP_DBG (("Lib/io/glinread()")); if (feof(fp)) return EOF; for (--size, i = 0; i < size; i++) switch (c = getc (fp)) { case EOF: return (EOF); case '\0': return (0); case '\n': *buf++ = c; if (protocol_mode == 0) { /* -- first char on next line -- */ (void) ungetc (c = getc (fp), fp); if (c == COMMENTCHAR) { /* check for comments within folding. Ignore everything up to and including new line character which is not followed by COMMENTCHAR, this could probably be recursive and clever - but what the hell */ while (42) { if ((c = getc (fp)) == '\n') { (void) ungetc (c = getc (fp), fp); if (c != COMMENTCHAR) break; } } } if (c == ' ' || c == '\t') { /* continuation line */ c = getc (fp); *(buf - 1) = ' '; break; } } *buf = 0; return (++i); default: *buf++ = c; } /* * if ever get here then line too long */ *buf = 0; return (i); }