148652Sbostic /*-
2*62386Sbostic * Copyright (c) 1985, 1993
3*62386Sbostic * The Regents of the University of California. All rights reserved.
448652Sbostic *
548652Sbostic * %sccs.include.proprietary.c%
648652Sbostic */
748652Sbostic
813637Ssam #ifndef lint
9*62386Sbostic static char sccsid[] = "@(#)cfgets.c 8.1 (Berkeley) 06/06/93";
1048652Sbostic #endif /* not lint */
1113637Ssam
1213637Ssam /*
1313637Ssam * get nonblank, non-comment, (possibly continued) line. Alan S. Watt
1413637Ssam */
1513637Ssam
1613637Ssam #include <stdio.h>
1713637Ssam #define COMMENT '#'
1813637Ssam #define CONTINUE '\\'
1913637Ssam #define EOLN '\n'
2013637Ssam #define EOS '\0'
2113637Ssam
2223587Sbloom /*LINTLIBRARY*/
2323587Sbloom
2413637Ssam char *
cfgets(buf,siz,fil)2517767Sralph cfgets(buf, siz, fil)
2613637Ssam register char *buf;
2713637Ssam int siz;
2813637Ssam FILE *fil;
2913637Ssam {
3013637Ssam register char *s;
3113637Ssam register i, c, len;
3213637Ssam char *fgets();
3313637Ssam
3417767Sralph for (i=0,s=buf; i = (fgets(s, siz-i, fil) != NULL); i = s - buf) {
3513637Ssam
3613637Ssam /* get last character of line */
3717767Sralph c = s[len = (strlen(s) - 1)];
3813637Ssam
3913637Ssam /* skip comments; make sure end of comment line seen */
4013637Ssam if (*s == COMMENT) {
4113637Ssam while (c != EOLN && c != EOF)
4217767Sralph c = getc(fil);
4313637Ssam *s = EOS;
4413637Ssam }
4513637Ssam
4613637Ssam /* skip blank lines */
4713637Ssam else if (*s != EOLN) {
4813637Ssam s += len;
4913637Ssam
5013637Ssam /* continue lines ending with CONTINUE */
5113637Ssam if (c != EOLN || *--s != CONTINUE)
5213637Ssam break;
5313637Ssam }
5413637Ssam }
5513637Ssam
5617767Sralph return i ? buf : NULL;
5713637Ssam }
5813637Ssam
5913637Ssam #ifdef TEST
main()6013637Ssam main()
6113637Ssam {
6213637Ssam char buf[512];
6313637Ssam
6417767Sralph while (cfgets(buf, sizeof buf, stdin))
6517767Sralph fputs(buf, stdout);
6613637Ssam }
6713637Ssam #endif TEST
68