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 8a3cbc15 2004-05-17 devnull fprint(2, "\n%s:%d: %s\n", ifile, iline, s);
8 8a3cbc15 2004-05-17 devnull fprint(2, "tbl quits\n");
9 8a3cbc15 2004-05-17 devnull exits(s);
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 8a3cbc15 2004-05-17 devnull p = Brdline(tabin, '\n');
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 8a3cbc15 2004-05-17 devnull p = Brdline(tabin, '\n');
26 5cedca1b 2004-05-15 devnull }
27 8a3cbc15 2004-05-17 devnull nbl = Blinelen(tabin)-1;
28 5cedca1b 2004-05-15 devnull if(nbl >= size)
29 5cedca1b 2004-05-15 devnull error("input buffer too small");
30 5cedca1b 2004-05-15 devnull p[nbl] = 0;
31 5cedca1b 2004-05-15 devnull strcpy(s, p);
32 5cedca1b 2004-05-15 devnull s += nbl;
33 5cedca1b 2004-05-15 devnull for (nbl = 0; *s == '\\' && s > ns; s--)
34 5cedca1b 2004-05-15 devnull nbl++;
35 5cedca1b 2004-05-15 devnull if (linstart && nbl % 2) /* fold escaped nl if in table */
36 5cedca1b 2004-05-15 devnull gets1(s + 1, size - (s-ns));
37 5cedca1b 2004-05-15 devnull
38 5cedca1b 2004-05-15 devnull return(p);
39 5cedca1b 2004-05-15 devnull }
40 5cedca1b 2004-05-15 devnull
41 5cedca1b 2004-05-15 devnull
42 5cedca1b 2004-05-15 devnull # define BACKMAX 500
43 5cedca1b 2004-05-15 devnull char backup[BACKMAX];
44 5cedca1b 2004-05-15 devnull char *backp = backup;
45 5cedca1b 2004-05-15 devnull
46 5cedca1b 2004-05-15 devnull void
47 5cedca1b 2004-05-15 devnull un1getc(int c)
48 5cedca1b 2004-05-15 devnull {
49 5cedca1b 2004-05-15 devnull if (c == '\n')
50 5cedca1b 2004-05-15 devnull iline--;
51 5cedca1b 2004-05-15 devnull *backp++ = c;
52 5cedca1b 2004-05-15 devnull if (backp >= backup + BACKMAX)
53 5cedca1b 2004-05-15 devnull error("too much backup");
54 5cedca1b 2004-05-15 devnull }
55 5cedca1b 2004-05-15 devnull
56 5cedca1b 2004-05-15 devnull
57 5cedca1b 2004-05-15 devnull int
58 5cedca1b 2004-05-15 devnull get1char(void)
59 5cedca1b 2004-05-15 devnull {
60 5cedca1b 2004-05-15 devnull int c;
61 5cedca1b 2004-05-15 devnull if (backp > backup)
62 5cedca1b 2004-05-15 devnull c = *--backp;
63 5cedca1b 2004-05-15 devnull else
64 8a3cbc15 2004-05-17 devnull c = Bgetc(tabin);
65 5cedca1b 2004-05-15 devnull if (c == 0) /* EOF */ {
66 5cedca1b 2004-05-15 devnull if (swapin() == 0)
67 5cedca1b 2004-05-15 devnull error("unexpected EOF");
68 8a3cbc15 2004-05-17 devnull c = Bgetc(tabin);
69 5cedca1b 2004-05-15 devnull }
70 5cedca1b 2004-05-15 devnull if (c == '\n')
71 5cedca1b 2004-05-15 devnull iline++;
72 5cedca1b 2004-05-15 devnull return(c);
73 5cedca1b 2004-05-15 devnull }