1*13637Ssam #ifndef lint 2*13637Ssam static char sccsid[] = "@(#)cfgets.c 5.1 (Berkeley) 07/02/83"; 3*13637Ssam #endif 4*13637Ssam 5*13637Ssam /* 6*13637Ssam * get nonblank, non-comment, (possibly continued) line. Alan S. Watt 7*13637Ssam */ 8*13637Ssam 9*13637Ssam #include <stdio.h> 10*13637Ssam #define COMMENT '#' 11*13637Ssam #define CONTINUE '\\' 12*13637Ssam #define EOLN '\n' 13*13637Ssam #define EOS '\0' 14*13637Ssam 15*13637Ssam char * 16*13637Ssam cfgets (buf, siz, fil) 17*13637Ssam register char *buf; 18*13637Ssam int siz; 19*13637Ssam FILE *fil; 20*13637Ssam { 21*13637Ssam register char *s; 22*13637Ssam register i, c, len; 23*13637Ssam char *fgets(); 24*13637Ssam 25*13637Ssam for (i=0,s=buf; i = (fgets (s, siz-i, fil) != NULL); i = s - buf) { 26*13637Ssam 27*13637Ssam /* get last character of line */ 28*13637Ssam c = s[len = (strlen (s) - 1)]; 29*13637Ssam 30*13637Ssam /* skip comments; make sure end of comment line seen */ 31*13637Ssam if (*s == COMMENT) { 32*13637Ssam while (c != EOLN && c != EOF) 33*13637Ssam c = fgetc (fil); 34*13637Ssam *s = EOS; 35*13637Ssam } 36*13637Ssam 37*13637Ssam /* skip blank lines */ 38*13637Ssam else if (*s != EOLN) { 39*13637Ssam s += len; 40*13637Ssam 41*13637Ssam /* continue lines ending with CONTINUE */ 42*13637Ssam if (c != EOLN || *--s != CONTINUE) 43*13637Ssam break; 44*13637Ssam } 45*13637Ssam } 46*13637Ssam 47*13637Ssam return (i ? buf : NULL); 48*13637Ssam } 49*13637Ssam 50*13637Ssam #ifdef TEST 51*13637Ssam main() 52*13637Ssam { 53*13637Ssam char buf[512]; 54*13637Ssam 55*13637Ssam while (cfgets (buf, sizeof buf, stdin)) 56*13637Ssam fputs (buf, stdout); 57*13637Ssam } 58*13637Ssam #endif TEST 59