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