1*784Speter /* Copyright (c) 1979 Regents of the University of California */
2*784Speter 
3*784Speter static	char sccsid[] = "@(#)yyerror.c 1.1 08/27/80";
4*784Speter 
5*784Speter #include "whoami.h"
6*784Speter #include "0.h"
7*784Speter #include "yy.h"
8*784Speter 
9*784Speter /*
10*784Speter  * Yerror prints an error
11*784Speter  * message and then returns
12*784Speter  * NIL for the tree if needed.
13*784Speter  * The error is flagged on the
14*784Speter  * current line which is printed
15*784Speter  * if the listing is turned off.
16*784Speter #ifdef PXP
17*784Speter  *
18*784Speter  * As is obvious from the fooling around
19*784Speter  * with fout below, the Pascal system should
20*784Speter  * be changed to use the new library "lS".
21*784Speter #endif
22*784Speter  */
23*784Speter yerror(s, a1, a2, a3, a4, a5)
24*784Speter 	char *s;
25*784Speter {
26*784Speter #ifdef PI
27*784Speter 	char buf[256];
28*784Speter #endif
29*784Speter 	register int i, j;
30*784Speter 	static yySerrs;
31*784Speter #ifdef PXP
32*784Speter 	int ofout;
33*784Speter #endif
34*784Speter 
35*784Speter 	if (errpfx == 'w' && opt('w') != 0) {
36*784Speter 		errpfx = 'E';
37*784Speter 		return;
38*784Speter 	}
39*784Speter #ifdef PXP
40*784Speter 	flush();
41*784Speter 	ofout = fout[0];
42*784Speter 	fout[0] = errout;
43*784Speter #endif
44*784Speter 	yyResume = 0;
45*784Speter #ifdef PI
46*784Speter 	geterr(s, buf);
47*784Speter 	s = buf;
48*784Speter #endif
49*784Speter 	yysync();
50*784Speter 	pchr(errpfx);
51*784Speter 	pchr(' ');
52*784Speter 	for (i = 3; i < yyecol; i++)
53*784Speter 		pchr('-');
54*784Speter 	printf("^--- ");
55*784Speter /*
56*784Speter 	if (yyecol > 60)
57*784Speter 		printf("\n\t");
58*784Speter */
59*784Speter 	printf(s, a1, a2, a3, a4, a5);
60*784Speter 	pchr('\n');
61*784Speter 	if (errpfx == 'E')
62*784Speter #ifdef PI
63*784Speter 		eflg++, codeoff();
64*784Speter #endif
65*784Speter #ifdef PXP
66*784Speter 		eflg++;
67*784Speter #endif
68*784Speter 	errpfx = 'E';
69*784Speter 	yySerrs++;
70*784Speter 	if (yySerrs >= MAXSYNERR) {
71*784Speter 		yySerrs = 0;
72*784Speter 		yerror("Too many syntax errors - QUIT");
73*784Speter 		pexit(ERRS);
74*784Speter 	}
75*784Speter #ifdef PXP
76*784Speter 	flush();
77*784Speter 	fout[0] = ofout;
78*784Speter 	return (0);
79*784Speter #endif
80*784Speter }
81*784Speter 
82*784Speter /*
83*784Speter  * A bracketing error message
84*784Speter  */
85*784Speter brerror(where, what)
86*784Speter 	int where;
87*784Speter 	char *what;
88*784Speter {
89*784Speter 
90*784Speter 	if (where == 0) {
91*784Speter 		line = yyeline;
92*784Speter 		setpfx(' ');
93*784Speter 		error("End matched %s on line %d", what, where);
94*784Speter 		return;
95*784Speter 	}
96*784Speter 	if (where < 0)
97*784Speter 		where = -where;
98*784Speter 	yerror("Inserted keyword end matching %s on line %d", what, where);
99*784Speter }
100