113637Ssam #ifndef lint 2*23587Sbloom static char sccsid[] = "@(#)cfgets.c 5.3 (Berkeley) 06/19/85"; 313637Ssam #endif 413637Ssam 513637Ssam /* 613637Ssam * get nonblank, non-comment, (possibly continued) line. Alan S. Watt 713637Ssam */ 813637Ssam 913637Ssam #include <stdio.h> 1013637Ssam #define COMMENT '#' 1113637Ssam #define CONTINUE '\\' 1213637Ssam #define EOLN '\n' 1313637Ssam #define EOS '\0' 1413637Ssam 15*23587Sbloom /*LINTLIBRARY*/ 16*23587Sbloom 1713637Ssam char * 1817767Sralph cfgets(buf, siz, fil) 1913637Ssam register char *buf; 2013637Ssam int siz; 2113637Ssam FILE *fil; 2213637Ssam { 2313637Ssam register char *s; 2413637Ssam register i, c, len; 2513637Ssam char *fgets(); 2613637Ssam 2717767Sralph for (i=0,s=buf; i = (fgets(s, siz-i, fil) != NULL); i = s - buf) { 2813637Ssam 2913637Ssam /* get last character of line */ 3017767Sralph c = s[len = (strlen(s) - 1)]; 3113637Ssam 3213637Ssam /* skip comments; make sure end of comment line seen */ 3313637Ssam if (*s == COMMENT) { 3413637Ssam while (c != EOLN && c != EOF) 3517767Sralph c = getc(fil); 3613637Ssam *s = EOS; 3713637Ssam } 3813637Ssam 3913637Ssam /* skip blank lines */ 4013637Ssam else if (*s != EOLN) { 4113637Ssam s += len; 4213637Ssam 4313637Ssam /* continue lines ending with CONTINUE */ 4413637Ssam if (c != EOLN || *--s != CONTINUE) 4513637Ssam break; 4613637Ssam } 4713637Ssam } 4813637Ssam 4917767Sralph return i ? buf : NULL; 5013637Ssam } 5113637Ssam 5213637Ssam #ifdef TEST 5313637Ssam main() 5413637Ssam { 5513637Ssam char buf[512]; 5613637Ssam 5717767Sralph while (cfgets(buf, sizeof buf, stdin)) 5817767Sralph fputs(buf, stdout); 5913637Ssam } 6013637Ssam #endif TEST 61