#define BLKSIZ 512 #define MAXLINE 128 char *bfilnm 0; /* Buffered input file name */ int bfile 0; /* Buffered input file */ char *bufloc; /* Current read loc within buffer */ int bufnum; /* Number of chars left in buffer */ char ibuf[BLKSIZ]; char lbuf[MAXLINE]; bufopen(fnm, dflg) char *fnm; { if (dflg) printf("Bufopen: '%s'\n", fnm); if (bfile != 0) cerror("Buffer file already open"); bfilnm = fnm; bfile = open(fnm, 0); if (bfile < 0) serror("Can't open buffer file"); bufnum = 0; } bufstart(dflg) { if (dflg) printf("Bufstart: '%s'\n", bfilnm); if (bfile == 0) cerror("Buffer file not open"); if (seek(bfile, 0, 0) < 0) serror("Can't seek buffer file"); bufnum = 0; } bufclose(dflg) { if (dflg) printf("Bufclose: '%s'\n", bfilnm); if (bfile == 0) cerror("Buffer file already closed"); if (close(bfile) < 0) serror("Can't close buffer file"); bfile = 0; bufnum = 0; } rdline() { register char *bp, *lp; int i; char c; bp = bufloc; lp = &lbuf[0]; i = 0; while (i++ < MAXLINE) { if (bufnum == 0) { bufnum = read(bfile, &ibuf[0], BLKSIZ); if (bufnum < 0) serror("Buffer file read error"); if (bufnum == 0) return(i); bp = &ibuf[0]; } *lp++ = (c = *bp++); bufnum--; if (c == '\n') { *--lp = '\0'; bufloc = bp; return(i); } } cerror("Line too long"); }