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