Blame


1 5cedca1b 2004-05-15 devnull /* te.c: error message control, input line count */
2 5cedca1b 2004-05-15 devnull # include "t.h"
3 5cedca1b 2004-05-15 devnull
4 5cedca1b 2004-05-15 devnull void
5 5cedca1b 2004-05-15 devnull error(char *s)
6 5cedca1b 2004-05-15 devnull {
7 c5561c23 2004-05-16 devnull fprintf(stderr, "\n%s:%d: %s\n", ifile, iline, s);
8 c5561c23 2004-05-16 devnull fprintf(stderr, "tbl quits\n");
9 c5561c23 2004-05-16 devnull exit(1);
10 5cedca1b 2004-05-15 devnull }
11 5cedca1b 2004-05-15 devnull
12 5cedca1b 2004-05-15 devnull
13 5cedca1b 2004-05-15 devnull char *
14 5cedca1b 2004-05-15 devnull gets1(char *s, int size)
15 5cedca1b 2004-05-15 devnull {
16 5cedca1b 2004-05-15 devnull char *p, *ns;
17 5cedca1b 2004-05-15 devnull int nbl;
18 5cedca1b 2004-05-15 devnull
19 5cedca1b 2004-05-15 devnull iline++;
20 5cedca1b 2004-05-15 devnull ns = s;
21 c5561c23 2004-05-16 devnull p = fgetln(tabin, &nbl);
22 5cedca1b 2004-05-15 devnull while (p == 0) {
23 5cedca1b 2004-05-15 devnull if (swapin() == 0)
24 5cedca1b 2004-05-15 devnull return(0);
25 c5561c23 2004-05-16 devnull p = fgetln(tabin, &nbl);
26 5cedca1b 2004-05-15 devnull }
27 c5561c23 2004-05-16 devnull if(p != 0 && p[nbl-1] == '\n')
28 c5561c23 2004-05-16 devnull nbl--;
29 5cedca1b 2004-05-15 devnull if(nbl >= size)
30 5cedca1b 2004-05-15 devnull error("input buffer too small");
31 5cedca1b 2004-05-15 devnull p[nbl] = 0;
32 5cedca1b 2004-05-15 devnull strcpy(s, p);
33 5cedca1b 2004-05-15 devnull s += nbl;
34 5cedca1b 2004-05-15 devnull for (nbl = 0; *s == '\\' && s > ns; s--)
35 5cedca1b 2004-05-15 devnull nbl++;
36 5cedca1b 2004-05-15 devnull if (linstart && nbl % 2) /* fold escaped nl if in table */
37 5cedca1b 2004-05-15 devnull gets1(s + 1, size - (s-ns));
38 5cedca1b 2004-05-15 devnull
39 5cedca1b 2004-05-15 devnull return(p);
40 5cedca1b 2004-05-15 devnull }
41 5cedca1b 2004-05-15 devnull
42 5cedca1b 2004-05-15 devnull
43 5cedca1b 2004-05-15 devnull # define BACKMAX 500
44 5cedca1b 2004-05-15 devnull char backup[BACKMAX];
45 5cedca1b 2004-05-15 devnull char *backp = backup;
46 5cedca1b 2004-05-15 devnull
47 5cedca1b 2004-05-15 devnull void
48 5cedca1b 2004-05-15 devnull un1getc(int c)
49 5cedca1b 2004-05-15 devnull {
50 5cedca1b 2004-05-15 devnull if (c == '\n')
51 5cedca1b 2004-05-15 devnull iline--;
52 5cedca1b 2004-05-15 devnull *backp++ = c;
53 5cedca1b 2004-05-15 devnull if (backp >= backup + BACKMAX)
54 5cedca1b 2004-05-15 devnull error("too much backup");
55 5cedca1b 2004-05-15 devnull }
56 5cedca1b 2004-05-15 devnull
57 5cedca1b 2004-05-15 devnull
58 5cedca1b 2004-05-15 devnull int
59 5cedca1b 2004-05-15 devnull get1char(void)
60 5cedca1b 2004-05-15 devnull {
61 5cedca1b 2004-05-15 devnull int c;
62 5cedca1b 2004-05-15 devnull if (backp > backup)
63 5cedca1b 2004-05-15 devnull c = *--backp;
64 5cedca1b 2004-05-15 devnull else
65 c5561c23 2004-05-16 devnull c = fgetc(tabin);
66 5cedca1b 2004-05-15 devnull if (c == 0) /* EOF */ {
67 5cedca1b 2004-05-15 devnull if (swapin() == 0)
68 5cedca1b 2004-05-15 devnull error("unexpected EOF");
69 c5561c23 2004-05-16 devnull c = fgetc(tabin);
70 5cedca1b 2004-05-15 devnull }
71 5cedca1b 2004-05-15 devnull if (c == '\n')
72 5cedca1b 2004-05-15 devnull iline++;
73 5cedca1b 2004-05-15 devnull return(c);
74 5cedca1b 2004-05-15 devnull }
75 5cedca1b 2004-05-15 devnull
76 5cedca1b 2004-05-15 devnull