share subr.c and string.c with pi/pc
[unix-history] / usr / src / usr.bin / pascal / pxp / error.c
CommitLineData
ebd61f12 1static char *sccsid = "@(#)error.c 2.1 (Berkeley) %G%";
6ef1487c
PK
2/* Copyright (c) 1979 Regents of the University of California */
3/*
4 * pi - Pascal interpreter code translator
5 *
6 * Charles Haley, Bill Joy UCB
7 * Version 1.2 January 1979
8 *
9 *
10 * pxp - Pascal execution profiler
11 *
12 * Bill Joy UCB
13 * Version 1.2 January 1979
14 */
15
84ef74c0 16#include "whoami.h"
6ef1487c
PK
17#include "0.h"
18#include "yy.h"
19
20#ifdef PXP
21extern int yyline;
22extern char errout;
23#endif
24
f4e01610 25char errpfx = 'E';
6ef1487c
PK
26extern int yyline;
27/*
28 * Panic is called when impossible
29 * (supposedly, anyways) situations
30 * are encountered.
31#ifdef PI
32 * Panic messages should be short
33 * as they do not go to the message
34 * file.
35#endif
36 */
37panic(s)
38 char *s;
39{
40
41#ifdef DEBUG
42 fprintf(stderr, "Snark (%s) line=%d yyline=%d\n", s, line, yyline);
43#endif
44#ifdef PXP
45 Perror( "Snark in pxp", s);
46#endif
47#ifdef PI
48 Perror( "Snark in pi", s);
49#endif
50 pexit(DIED);
51}
52
53extern char *errfile;
54/*
55 * Error is called for
56 * semantic errors and
57 * prints the error and
58 * a line number.
59 */
60error(a1, a2, a3, a4)
61{
62#ifdef PI
63 char buf[256];
64 register int i;
65#endif
66#ifdef PXP
67/*
68 int ofout;
69*/
70#endif
71
8e00b863
PK
72 if (errpfx == 'w' && opt('w') != 0) {
73 errpfx == 'E';
6ef1487c 74 return;
8e00b863 75 }
6ef1487c
PK
76#ifdef PXP
77/*
78 flush();
79 ofout = fout[0];
80 fout[0] = errout;
81*/
82#endif
83#ifdef PI
84 Enocascade = 0;
85 geterr(a1, buf);
86 a1 = buf;
87#endif
88 if (line < 0)
89 line = -line;
90 yySsync();
91 yysetfile(filename);
92#ifdef PI
93 if (errpfx == ' ') {
94 printf(" ");
95 for (i = line; i >= 10; i =/ 10)
96 putchar(' ');
97 printf("... ");
98 } else if (Enoline)
99 printf(" %c - ", errpfx);
100 else
101#endif
102 fprintf(stderr, "%c %d - ", errpfx, line);
103 fprintf(stderr, a1, a2, a3, a4);
104 if (errpfx == 'E')
105#ifdef PI
106 eflg++, cgenflg++;
107#endif
108#ifdef PXP
109 eflg++;
110#endif
111 errpfx = 'E';
112#ifdef PI
113 if (Eholdnl)
114 Eholdnl = 0;
115 else
116#endif
117 putc('\n', stderr);
118#ifdef PXP
119/*
120 flush();
121 fout[0] = ofout;
122*/
123#endif
124}
125
126#ifdef PI
127cerror(a1, a2, a3, a4)
128{
129
130 if (Enocascade)
131 return;
132 setpfx(' ');
133 error(a1, a2, a3, a4);
134}
135#endif