xref: /csrg-svn/old/tbl/te.c (revision 11039)
1*11039Sshannon /*	te.c	4.1	83/02/12	*/
2*11039Sshannon 
3*11039Sshannon  /* te.c: error message control, input line count */
4*11039Sshannon # include "t..c"
5*11039Sshannon error(s)
6*11039Sshannon 	char *s;
7*11039Sshannon {
8*11039Sshannon fprintf(stderr, "\n%s: line %d: %s\n", ifile, iline, s);
9*11039Sshannon # ifdef unix
10*11039Sshannon fprintf(stderr, "tbl quits\n");
11*11039Sshannon exit(1);
12*11039Sshannon # endif
13*11039Sshannon # ifdef gcos
14*11039Sshannon fprintf(stderr, "run terminated due to error condition detected by tbl preprocessor\n");
15*11039Sshannon exit(0);
16*11039Sshannon # endif
17*11039Sshannon }
18*11039Sshannon gets1(s)
19*11039Sshannon 	char *s;
20*11039Sshannon {
21*11039Sshannon char *p;
22*11039Sshannon int nbl = 0;
23*11039Sshannon iline++;
24*11039Sshannon p=fgets(s,BUFSIZ,tabin);
25*11039Sshannon while (p==0)
26*11039Sshannon 	{
27*11039Sshannon 	if (swapin()==0)
28*11039Sshannon 		return(0);
29*11039Sshannon 	p = fgets(s,BUFSIZ,tabin);
30*11039Sshannon 	}
31*11039Sshannon 
32*11039Sshannon while (*s) s++;
33*11039Sshannon s--;
34*11039Sshannon if (*s == '\n') *s-- =0;
35*11039Sshannon for(nbl=0; *s == '\\' && s>p; s--)
36*11039Sshannon 	nbl++;
37*11039Sshannon if (linstart && nbl % 2) /* fold escaped nl if in table */
38*11039Sshannon 	gets1(s+1);
39*11039Sshannon 
40*11039Sshannon return(p);
41*11039Sshannon }
42*11039Sshannon # define BACKMAX 500
43*11039Sshannon char backup[BACKMAX];
44*11039Sshannon char *backp = backup;
45*11039Sshannon un1getc(c)
46*11039Sshannon {
47*11039Sshannon if (c=='\n')
48*11039Sshannon 	iline--;
49*11039Sshannon *backp++ = c;
50*11039Sshannon if (backp >= backup+BACKMAX)
51*11039Sshannon 	error("too much backup");
52*11039Sshannon }
53*11039Sshannon get1char()
54*11039Sshannon {
55*11039Sshannon int c;
56*11039Sshannon if (backp>backup)
57*11039Sshannon 	c = *--backp;
58*11039Sshannon else
59*11039Sshannon 	c=getc(tabin);
60*11039Sshannon if (c== EOF) /* EOF */
61*11039Sshannon 	{
62*11039Sshannon 	if (swapin() ==0)
63*11039Sshannon 		error("unexpected EOF");
64*11039Sshannon 	c = getc(tabin);
65*11039Sshannon 	}
66*11039Sshannon if (c== '\n')
67*11039Sshannon 	iline++;
68*11039Sshannon return(c);
69*11039Sshannon }
70