new copyright; att/bsd/shared
[unix-history] / usr / src / usr.bin / pascal / pxp / yyerror.c
CommitLineData
0fc6e47b
KB
1/*-
2 * Copyright (c) 1980 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * %sccs.include.redist.c%
252367af
DF
6 */
7
8#ifndef lint
0fc6e47b
KB
9static char sccsid[] = "@(#)yyerror.c 5.2 (Berkeley) %G%";
10#endif /* not lint */
252367af 11
0da4719d
PK
12/*
13 * pi - Pascal interpreter code translator
14 *
15 * Charles Haley, Bill Joy UCB
16 * Version 1.2 January 1979
17 *
18 *
19 * pxp - Pascal execution profiler
20 *
21 * Bill Joy UCB
22 * Version 1.2 January 1979
23 */
24
84ef74c0 25#include "whoami.h"
0da4719d
PK
26#include "0.h"
27#include "yy.h"
28
29/*
30 * Yerror prints an error
31 * message and then returns
32 * NIL for the tree if needed.
33 * The error is flagged on the
34 * current line which is printed
35 * if the listing is turned off.
36#ifdef PXP
37 *
38 * As is obvious from the fooling around
39 * with fout below, the Pascal system should
40 * be changed to use the new library "lS".
41#endif
42 */
43yerror(s, a1, a2, a3, a4, a5)
44 char *s;
45{
46#ifdef PI
47 char buf[256];
48#endif
49 register int i, j;
50 static yySerrs;
51#ifdef PXP
52/*
53 int ofout;
54*/
55#endif
56
57 if (errpfx == 'w' && opt('w') != 0)
58 return;
59#ifdef PXP
60/*
61 flush();
62 ofout = fout[0];
63 fout[0] = errout;
64*/
65#endif
66 yyResume = 0;
67#ifdef PI
68 geterr(s, buf);
69 s = buf;
70#endif
71 yysync();
72 putc(errpfx, stderr);
73 putc(' ', stderr);
74 for (i = 3; i < yyecol; i++)
75 putc('-', stderr);
76 fprintf(stderr, "^--- ");
77/*
78 if (yyecol > 60)
79 printf("\n\t");
80*/
81 fprintf(stderr, s, a1, a2, a3, a4, a5);
82 putc('\n', stderr);
83 if (errpfx == 'E')
84#ifdef PI
85 eflg++, cgenflg++;
86#endif
87#ifdef PXP
88 eflg++;
89#endif
90 errpfx = 'E';
91 yySerrs++;
92 if (yySerrs >= MAXSYNERR) {
93 yySerrs = 0;
94 yerror("Too many syntax errors - QUIT");
95 pexit(ERRS);
96 }
97#ifdef PXP
98/*
99 flush();
100 fout[0] = ofout;
101*/
102 return (0);
103#endif
104}
105
106/*
107 * A bracketing error message
108 */
109brerror(where, what)
110 int where;
111 char *what;
112{
113
114 if (where == 0) {
115 line = yyeline;
116 setpfx(' ');
117 error("End matched %s on line %d", what, where);
118 return;
119 }
120 if (where < 0)
121 where = -where;
122 yerror("Inserted keyword end matching %s on line %d", what, where);
123}