xref: /csrg-svn/usr.bin/uucp/libuu/cfgets.c (revision 23587)
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