13e12c5d1SDavid du Colombier /* te.c: error message control, input line count */
23e12c5d1SDavid du Colombier # include "t.h"
33e12c5d1SDavid du Colombier
43e12c5d1SDavid du Colombier void
error(char * s)53e12c5d1SDavid du Colombier error(char *s)
63e12c5d1SDavid du Colombier {
7*7dd7cddfSDavid du Colombier fprint(2, "\n%s:%d: %s\n", ifile, iline, s);
8219b2ee8SDavid du Colombier fprint(2, "tbl quits\n");
93e12c5d1SDavid du Colombier exits(s);
103e12c5d1SDavid du Colombier }
113e12c5d1SDavid du Colombier
123e12c5d1SDavid du Colombier
133e12c5d1SDavid du Colombier char *
gets1(char * s,int size)143e12c5d1SDavid du Colombier gets1(char *s, int size)
153e12c5d1SDavid du Colombier {
163e12c5d1SDavid du Colombier char *p, *ns;
173e12c5d1SDavid du Colombier int nbl;
183e12c5d1SDavid du Colombier
193e12c5d1SDavid du Colombier iline++;
203e12c5d1SDavid du Colombier ns = s;
21219b2ee8SDavid du Colombier p = Brdline(tabin, '\n');
223e12c5d1SDavid du Colombier while (p == 0) {
233e12c5d1SDavid du Colombier if (swapin() == 0)
243e12c5d1SDavid du Colombier return(0);
25219b2ee8SDavid du Colombier p = Brdline(tabin, '\n');
263e12c5d1SDavid du Colombier }
27219b2ee8SDavid du Colombier nbl = Blinelen(tabin)-1;
28219b2ee8SDavid du Colombier if(nbl >= size)
29219b2ee8SDavid du Colombier error("input buffer too small");
30219b2ee8SDavid du Colombier p[nbl] = 0;
31219b2ee8SDavid du Colombier strcpy(s, p);
32219b2ee8SDavid du Colombier s += nbl;
33219b2ee8SDavid du Colombier for (nbl = 0; *s == '\\' && s > ns; s--)
343e12c5d1SDavid du Colombier nbl++;
353e12c5d1SDavid du Colombier if (linstart && nbl % 2) /* fold escaped nl if in table */
363e12c5d1SDavid du Colombier gets1(s + 1, size - (s-ns));
373e12c5d1SDavid du Colombier
383e12c5d1SDavid du Colombier return(p);
393e12c5d1SDavid du Colombier }
403e12c5d1SDavid du Colombier
413e12c5d1SDavid du Colombier
423e12c5d1SDavid du Colombier # define BACKMAX 500
433e12c5d1SDavid du Colombier char backup[BACKMAX];
443e12c5d1SDavid du Colombier char *backp = backup;
453e12c5d1SDavid du Colombier
463e12c5d1SDavid du Colombier void
un1getc(int c)473e12c5d1SDavid du Colombier un1getc(int c)
483e12c5d1SDavid du Colombier {
493e12c5d1SDavid du Colombier if (c == '\n')
503e12c5d1SDavid du Colombier iline--;
513e12c5d1SDavid du Colombier *backp++ = c;
523e12c5d1SDavid du Colombier if (backp >= backup + BACKMAX)
533e12c5d1SDavid du Colombier error("too much backup");
543e12c5d1SDavid du Colombier }
553e12c5d1SDavid du Colombier
563e12c5d1SDavid du Colombier
573e12c5d1SDavid du Colombier int
get1char(void)583e12c5d1SDavid du Colombier get1char(void)
593e12c5d1SDavid du Colombier {
603e12c5d1SDavid du Colombier int c;
613e12c5d1SDavid du Colombier if (backp > backup)
623e12c5d1SDavid du Colombier c = *--backp;
633e12c5d1SDavid du Colombier else
64219b2ee8SDavid du Colombier c = Bgetc(tabin);
65219b2ee8SDavid du Colombier if (c == 0) /* EOF */ {
663e12c5d1SDavid du Colombier if (swapin() == 0)
673e12c5d1SDavid du Colombier error("unexpected EOF");
68219b2ee8SDavid du Colombier c = Bgetc(tabin);
693e12c5d1SDavid du Colombier }
703e12c5d1SDavid du Colombier if (c == '\n')
713e12c5d1SDavid du Colombier iline++;
723e12c5d1SDavid du Colombier return(c);
733e12c5d1SDavid du Colombier }
743e12c5d1SDavid du Colombier
753e12c5d1SDavid du Colombier
76