1b85afe43Sbostic /*-
2*b99f9a68Sbostic * Copyright (c) 1980, 1993
3*b99f9a68Sbostic * The Regents of the University of California. All rights reserved.
4b85afe43Sbostic *
5b85afe43Sbostic * %sccs.include.redist.c%
6986f48a8Sdist */
7eab9c3e1Speter
88df67763Sthien #ifndef lint
9*b99f9a68Sbostic static char sccsid[] = "@(#)error.c 8.1 (Berkeley) 06/06/93";
10b85afe43Sbostic #endif /* not lint */
11eab9c3e1Speter
12eab9c3e1Speter #include "whoami.h"
13eab9c3e1Speter #include "0.h"
14eab9c3e1Speter #ifndef PI1
158df67763Sthien #include "tree_ty.h" /* must be included for yy.h */
16eab9c3e1Speter #include "yy.h"
17eab9c3e1Speter #endif
18eab9c3e1Speter
19eab9c3e1Speter char errpfx = 'E';
20eab9c3e1Speter extern int yyline;
21eab9c3e1Speter /*
22eab9c3e1Speter * Panic is called when impossible
23eab9c3e1Speter * (supposedly, anyways) situations
24eab9c3e1Speter * are encountered.
25eab9c3e1Speter * Panic messages should be short
26eab9c3e1Speter * as they do not go to the message
27eab9c3e1Speter * file.
28eab9c3e1Speter */
panic(s)29eab9c3e1Speter panic(s)
30eab9c3e1Speter char *s;
31eab9c3e1Speter {
32eab9c3e1Speter
33eab9c3e1Speter #ifdef DEBUG
34eab9c3e1Speter #ifdef PI1
35eab9c3e1Speter printf("Snark (%s) line=%d\n", s, line);
36eab9c3e1Speter abort();
37eab9c3e1Speter #else
38eab9c3e1Speter printf("Snark (%s) line=%d, yyline=%d\n", s, line, yyline);
39eab9c3e1Speter abort () ; /* die horribly */
40eab9c3e1Speter #endif
41eab9c3e1Speter #endif
42eab9c3e1Speter #ifdef PI1
43eab9c3e1Speter Perror( "Snark in pi1", s);
44eab9c3e1Speter #else
45eab9c3e1Speter Perror( "Snark in pi", s);
46eab9c3e1Speter #endif
47eab9c3e1Speter pexit(DIED);
48eab9c3e1Speter }
49eab9c3e1Speter
50eab9c3e1Speter /*
51eab9c3e1Speter * Error is called for
52eab9c3e1Speter * semantic errors and
53eab9c3e1Speter * prints the error and
54eab9c3e1Speter * a line number.
55eab9c3e1Speter */
56eab9c3e1Speter
578df67763Sthien /*VARARGS1*/
58eab9c3e1Speter
error(a1,a2,a3,a4,a5)592458b484Smckusic error(a1, a2, a3, a4, a5)
60eab9c3e1Speter register char *a1;
61eab9c3e1Speter {
62eab9c3e1Speter char errbuf[256]; /* was extern. why? ...pbk */
63eab9c3e1Speter register int i;
64eab9c3e1Speter
65eab9c3e1Speter if (errpfx == 'w' && opt('w') != 0) {
66eab9c3e1Speter errpfx = 'E';
67eab9c3e1Speter return;
68eab9c3e1Speter }
698df67763Sthien Enocascade = FALSE;
708df67763Sthien geterr((int) a1, errbuf);
71eab9c3e1Speter a1 = errbuf;
72eab9c3e1Speter if (line < 0)
73eab9c3e1Speter line = -line;
74eab9c3e1Speter #ifndef PI1
75eab9c3e1Speter if (opt('l'))
76eab9c3e1Speter yyoutline();
77eab9c3e1Speter #endif
78eab9c3e1Speter yysetfile(filename);
79eab9c3e1Speter if (errpfx == ' ') {
80eab9c3e1Speter printf(" ");
81eab9c3e1Speter for (i = line; i >= 10; i /= 10)
82eab9c3e1Speter pchr( ' ' );
83eab9c3e1Speter printf("... ");
84eab9c3e1Speter } else if (Enoline)
85eab9c3e1Speter printf(" %c - ", errpfx);
86eab9c3e1Speter else
87eab9c3e1Speter printf("%c %d - ", errpfx, line);
882458b484Smckusic printf(a1, a2, a3, a4, a5);
89eab9c3e1Speter if (errpfx == 'E')
90eab9c3e1Speter #ifndef PI0
919c5eb5e0Smckusic eflg = TRUE, codeoff();
92eab9c3e1Speter #else
939c5eb5e0Smckusic eflg = TRUE;
94eab9c3e1Speter #endif
95eab9c3e1Speter errpfx = 'E';
96eab9c3e1Speter if (Eholdnl)
978df67763Sthien Eholdnl = FALSE;
98eab9c3e1Speter else
99eab9c3e1Speter pchr( '\n' );
100eab9c3e1Speter }
101eab9c3e1Speter
1028df67763Sthien /*VARARGS1*/
103eab9c3e1Speter
cerror(a1,a2,a3,a4,a5)1042458b484Smckusic cerror(a1, a2, a3, a4, a5)
1058df67763Sthien char *a1;
106eab9c3e1Speter {
107eab9c3e1Speter
108eab9c3e1Speter if (Enocascade)
109eab9c3e1Speter return;
110eab9c3e1Speter setpfx(' ');
1112458b484Smckusic error(a1, a2, a3, a4, a5);
112eab9c3e1Speter }
113eab9c3e1Speter
114eab9c3e1Speter #ifdef PI1
115eab9c3e1Speter
116eab9c3e1Speter /*VARARGS*/
117eab9c3e1Speter
derror(a1,a2,a3,a4,a5)1182458b484Smckusic derror(a1, a2, a3, a4, a5)
1198df67763Sthien char *a1, *a2, *a3, *a4, *a5;
120eab9c3e1Speter {
121eab9c3e1Speter
122eab9c3e1Speter if (!holdderr)
1232458b484Smckusic error(a1, a2, a3, a4, a5);
124eab9c3e1Speter errpfx = 'E';
125eab9c3e1Speter }
126eab9c3e1Speter
127eab9c3e1Speter char *lastname, printed, hadsome;
128eab9c3e1Speter
129eab9c3e1Speter /*
130eab9c3e1Speter * this yysetfile for PI1 only.
131eab9c3e1Speter * the real yysetfile is in yyput.c
132eab9c3e1Speter */
yysetfile(name)133eab9c3e1Speter yysetfile(name)
134eab9c3e1Speter char *name;
135eab9c3e1Speter {
136eab9c3e1Speter
137eab9c3e1Speter if (lastname == name)
138eab9c3e1Speter return;
139982f73c3Sbostic printed |= 1;
140eab9c3e1Speter gettime( name );
141eab9c3e1Speter printf("%s %s:\n" , myctime( &tvec ) , name );
142eab9c3e1Speter lastname = name;
143eab9c3e1Speter }
144eab9c3e1Speter #endif
145