113637Ssam #ifndef lint 2*17767Sralph static char sccsid[] = "@(#)cfgets.c 5.2 (Berkeley) 01/22/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 1513637Ssam char * 16*17767Sralph cfgets(buf, siz, fil) 1713637Ssam register char *buf; 1813637Ssam int siz; 1913637Ssam FILE *fil; 2013637Ssam { 2113637Ssam register char *s; 2213637Ssam register i, c, len; 2313637Ssam char *fgets(); 2413637Ssam 25*17767Sralph for (i=0,s=buf; i = (fgets(s, siz-i, fil) != NULL); i = s - buf) { 2613637Ssam 2713637Ssam /* get last character of line */ 28*17767Sralph c = s[len = (strlen(s) - 1)]; 2913637Ssam 3013637Ssam /* skip comments; make sure end of comment line seen */ 3113637Ssam if (*s == COMMENT) { 3213637Ssam while (c != EOLN && c != EOF) 33*17767Sralph c = getc(fil); 3413637Ssam *s = EOS; 3513637Ssam } 3613637Ssam 3713637Ssam /* skip blank lines */ 3813637Ssam else if (*s != EOLN) { 3913637Ssam s += len; 4013637Ssam 4113637Ssam /* continue lines ending with CONTINUE */ 4213637Ssam if (c != EOLN || *--s != CONTINUE) 4313637Ssam break; 4413637Ssam } 4513637Ssam } 4613637Ssam 47*17767Sralph return i ? buf : NULL; 4813637Ssam } 4913637Ssam 5013637Ssam #ifdef TEST 5113637Ssam main() 5213637Ssam { 5313637Ssam char buf[512]; 5413637Ssam 55*17767Sralph while (cfgets(buf, sizeof buf, stdin)) 56*17767Sralph fputs(buf, stdout); 5713637Ssam } 5813637Ssam #endif TEST 59