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