|
|
1.1 root 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
8: static char sccsid[] = "@(#)error.c 5.1 (Berkeley) 6/5/85";
9: #endif not lint
10:
11: #include "whoami.h"
12: #include "0.h"
13: #ifndef PI1
14: #include "tree_ty.h" /* must be included for yy.h */
15: #include "yy.h"
16: #endif
17:
18: char errpfx = 'E';
19: extern int yyline;
20: /*
21: * Panic is called when impossible
22: * (supposedly, anyways) situations
23: * are encountered.
24: * Panic messages should be short
25: * as they do not go to the message
26: * file.
27: */
28: panic(s)
29: char *s;
30: {
31:
32: #ifdef DEBUG
33: #ifdef PI1
34: printf("Snark (%s) line=%d\n", s, line);
35: abort();
36: #else
37: printf("Snark (%s) line=%d, yyline=%d\n", s, line, yyline);
38: abort () ; /* die horribly */
39: #endif
40: #endif
41: #ifdef PI1
42: Perror( "Snark in pi1", s);
43: #else
44: Perror( "Snark in pi", s);
45: #endif
46: pexit(DIED);
47: }
48:
49: /*
50: * Error is called for
51: * semantic errors and
52: * prints the error and
53: * a line number.
54: */
55:
56: /*VARARGS1*/
57:
58: error(a1, a2, a3, a4, a5)
59: register char *a1;
60: {
61: char errbuf[256]; /* was extern. why? ...pbk */
62: register int i;
63:
64: if (errpfx == 'w' && opt('w') != 0) {
65: errpfx = 'E';
66: return;
67: }
68: Enocascade = FALSE;
69: geterr((int) a1, errbuf);
70: a1 = errbuf;
71: if (line < 0)
72: line = -line;
73: #ifndef PI1
74: if (opt('l'))
75: yyoutline();
76: #endif
77: yysetfile(filename);
78: if (errpfx == ' ') {
79: printf(" ");
80: for (i = line; i >= 10; i /= 10)
81: pchr( ' ' );
82: printf("... ");
83: } else if (Enoline)
84: printf(" %c - ", errpfx);
85: else
86: printf("%c %d - ", errpfx, line);
87: printf(a1, a2, a3, a4, a5);
88: if (errpfx == 'E')
89: #ifndef PI0
90: eflg = TRUE, codeoff();
91: #else
92: eflg = TRUE;
93: #endif
94: errpfx = 'E';
95: if (Eholdnl)
96: Eholdnl = FALSE;
97: else
98: pchr( '\n' );
99: }
100:
101: /*VARARGS1*/
102:
103: cerror(a1, a2, a3, a4, a5)
104: char *a1;
105: {
106:
107: if (Enocascade)
108: return;
109: setpfx(' ');
110: error(a1, a2, a3, a4, a5);
111: }
112:
113: #ifdef PI1
114:
115: /*VARARGS*/
116:
117: derror(a1, a2, a3, a4, a5)
118: char *a1, *a2, *a3, *a4, *a5;
119: {
120:
121: if (!holdderr)
122: error(a1, a2, a3, a4, a5);
123: errpfx = 'E';
124: }
125:
126: char *lastname, printed, hadsome;
127:
128: /*
129: * this yysetfile for PI1 only.
130: * the real yysetfile is in yyput.c
131: */
132: yysetfile(name)
133: char *name;
134: {
135:
136: if (lastname == name)
137: return;
138: printed =| 1;
139: gettime( name );
140: printf("%s %s:\n" , myctime( &tvec ) , name );
141: lastname = name;
142: }
143: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.