xref: /csrg-svn/usr.bin/pascal/src/error.c (revision 22162)
1*22162Sdist /*
2*22162Sdist  * Copyright (c) 1980 Regents of the University of California.
3*22162Sdist  * All rights reserved.  The Berkeley software License Agreement
4*22162Sdist  * specifies the terms and conditions for redistribution.
5*22162Sdist  */
6751Speter 
715228Sthien #ifndef lint
8*22162Sdist static char sccsid[] = "@(#)error.c	5.1 (Berkeley) 06/05/85";
9*22162Sdist #endif not lint
10751Speter 
11751Speter #include "whoami.h"
12751Speter #include "0.h"
13751Speter #ifndef PI1
1415228Sthien #include "tree_ty.h"		/* must be included for yy.h */
15751Speter #include "yy.h"
16751Speter #endif
17751Speter 
18751Speter char	errpfx	= 'E';
19751Speter extern	int yyline;
20751Speter /*
21751Speter  * Panic is called when impossible
22751Speter  * (supposedly, anyways) situations
23751Speter  * are encountered.
24751Speter  * Panic messages should be short
25751Speter  * as they do not go to the message
26751Speter  * file.
27751Speter  */
28751Speter panic(s)
29751Speter 	char *s;
30751Speter {
31751Speter 
32751Speter #ifdef DEBUG
33751Speter #ifdef PI1
34751Speter 	printf("Snark (%s) line=%d\n", s, line);
35751Speter 	abort();
36751Speter #else
37751Speter 	printf("Snark (%s) line=%d, yyline=%d\n", s, line, yyline);
38751Speter 	abort () ;	/* die horribly */
39751Speter #endif
40751Speter #endif
41751Speter #ifdef PI1
42751Speter 	Perror( "Snark in pi1", s);
43751Speter #else
44751Speter 	Perror( "Snark in pi", s);
45751Speter #endif
46751Speter 	pexit(DIED);
47751Speter }
48751Speter 
49751Speter /*
50751Speter  * Error is called for
51751Speter  * semantic errors and
52751Speter  * prints the error and
53751Speter  * a line number.
54751Speter  */
55751Speter 
5615228Sthien /*VARARGS1*/
57751Speter 
583298Smckusic error(a1, a2, a3, a4, a5)
59751Speter 	register char *a1;
60751Speter {
61751Speter 	char errbuf[256]; 		/* was extern. why? ...pbk */
62751Speter 	register int i;
63751Speter 
64751Speter 	if (errpfx == 'w' && opt('w') != 0) {
65751Speter 		errpfx = 'E';
66751Speter 		return;
67751Speter 	}
6815228Sthien 	Enocascade = FALSE;
6915228Sthien 	geterr((int) a1, errbuf);
70751Speter 	a1 = errbuf;
71751Speter 	if (line < 0)
72751Speter 		line = -line;
73751Speter #ifndef PI1
74751Speter 	if (opt('l'))
75751Speter 		yyoutline();
76751Speter #endif
77751Speter 	yysetfile(filename);
78751Speter 	if (errpfx == ' ') {
79751Speter 		printf("  ");
80751Speter 		for (i = line; i >= 10; i /= 10)
81751Speter 			pchr( ' ' );
82751Speter 		printf("... ");
83751Speter 	} else if (Enoline)
84751Speter 		printf("  %c - ", errpfx);
85751Speter 	else
86751Speter 		printf("%c %d - ", errpfx, line);
873298Smckusic 	printf(a1, a2, a3, a4, a5);
88751Speter 	if (errpfx == 'E')
89751Speter #ifndef PI0
903073Smckusic 		eflg = TRUE, codeoff();
91751Speter #else
923073Smckusic 		eflg = TRUE;
93751Speter #endif
94751Speter 	errpfx = 'E';
95751Speter 	if (Eholdnl)
9615228Sthien 		Eholdnl = FALSE;
97751Speter 	else
98751Speter 		pchr( '\n' );
99751Speter }
100751Speter 
10115228Sthien /*VARARGS1*/
102751Speter 
1033298Smckusic cerror(a1, a2, a3, a4, a5)
10415228Sthien     char *a1;
105751Speter {
106751Speter 
107751Speter 	if (Enocascade)
108751Speter 		return;
109751Speter 	setpfx(' ');
1103298Smckusic 	error(a1, a2, a3, a4, a5);
111751Speter }
112751Speter 
113751Speter #ifdef PI1
114751Speter 
115751Speter /*VARARGS*/
116751Speter 
1173298Smckusic derror(a1, a2, a3, a4, a5)
11815228Sthien     char *a1, *a2, *a3, *a4, *a5;
119751Speter {
120751Speter 
121751Speter 	if (!holdderr)
1223298Smckusic 		error(a1, a2, a3, a4, a5);
123751Speter 	errpfx = 'E';
124751Speter }
125751Speter 
126751Speter char	*lastname, printed, hadsome;
127751Speter 
128751Speter     /*
129751Speter      *	this yysetfile for PI1 only.
130751Speter      *	the real yysetfile is in yyput.c
131751Speter      */
132751Speter yysetfile(name)
133751Speter 	char *name;
134751Speter {
135751Speter 
136751Speter 	if (lastname == name)
137751Speter 		return;
138751Speter 	printed =| 1;
139751Speter 	gettime( name );
140751Speter 	printf("%s  %s:\n" , myctime( &tvec ) , name );
141751Speter 	lastname = name;
142751Speter }
143751Speter #endif
144