1 7f11104a 2003-12-11 devnull #include <u.h>
2 7f11104a 2003-12-11 devnull #include <libc.h>
3 7f11104a 2003-12-11 devnull #include <bio.h>
4 7f11104a 2003-12-11 devnull #include "libString.h"
6 7f11104a 2003-12-11 devnull /* Append an input line to a String.
8 7f11104a 2003-12-11 devnull * Returns a pointer to the character string (or 0).
9 7f11104a 2003-12-11 devnull * Leading whitespace and newlines are removed.
11 7f11104a 2003-12-11 devnull * Empty lines and lines starting with '#' are ignored.
13 7f11104a 2003-12-11 devnull extern char *
14 7f11104a 2003-12-11 devnull s_getline(Biobuf *fp, String *to)
17 7f11104a 2003-12-11 devnull int len=0;
19 7f11104a 2003-12-11 devnull s_terminate(to);
21 7f11104a 2003-12-11 devnull /* end of input */
22 7f11104a 2003-12-11 devnull if ((c = Bgetc(fp)) < 0)
23 7f11104a 2003-12-11 devnull return 0;
25 7f11104a 2003-12-11 devnull /* take care of inconsequentials */
26 7f11104a 2003-12-11 devnull for(;;) {
27 7f11104a 2003-12-11 devnull /* eat leading white */
28 7f11104a 2003-12-11 devnull while(c==' ' || c=='\t' || c=='\n' || c=='\r')
29 7f11104a 2003-12-11 devnull c = Bgetc(fp);
31 7f11104a 2003-12-11 devnull if(c < 0)
32 7f11104a 2003-12-11 devnull return 0;
34 7f11104a 2003-12-11 devnull /* take care of comments */
35 7f11104a 2003-12-11 devnull if(c == '#'){
37 7f11104a 2003-12-11 devnull c = Bgetc(fp);
38 7f11104a 2003-12-11 devnull if(c < 0)
39 7f11104a 2003-12-11 devnull return 0;
40 7f11104a 2003-12-11 devnull } while(c != '\n');
41 7f11104a 2003-12-11 devnull continue;
44 7f11104a 2003-12-11 devnull /* if we got here, we've gotten something useful */
48 7f11104a 2003-12-11 devnull /* gather up a line */
49 7f11104a 2003-12-11 devnull for(;;) {
51 7f11104a 2003-12-11 devnull switch(c) {
53 7f11104a 2003-12-11 devnull s_terminate(to);
54 7f11104a 2003-12-11 devnull return len ? to->ptr-len : 0;
55 7f11104a 2003-12-11 devnull case '\\':
56 7f11104a 2003-12-11 devnull c = Bgetc(fp);
57 7f11104a 2003-12-11 devnull if (c != '\n') {
58 7f11104a 2003-12-11 devnull s_putc(to, '\\');
59 7f11104a 2003-12-11 devnull s_putc(to, c);
62 7f11104a 2003-12-11 devnull case '\n':
63 7f11104a 2003-12-11 devnull s_terminate(to);
64 7f11104a 2003-12-11 devnull return len ? to->ptr-len : 0;
66 7f11104a 2003-12-11 devnull s_putc(to, c);
69 7f11104a 2003-12-11 devnull c = Bgetc(fp);
71 7f11104a 2003-12-11 devnull return 0;