xref: /csrg-svn/usr.bin/pascal/src/error.c (revision 62205)
148116Sbostic /*-
2*62205Sbostic  * Copyright (c) 1980, 1993
3*62205Sbostic  *	The Regents of the University of California.  All rights reserved.
448116Sbostic  *
548116Sbostic  * %sccs.include.redist.c%
622162Sdist  */
7751Speter 
815228Sthien #ifndef lint
9*62205Sbostic static char sccsid[] = "@(#)error.c	8.1 (Berkeley) 06/06/93";
1048116Sbostic #endif /* not lint */
11751Speter 
12751Speter #include "whoami.h"
13751Speter #include "0.h"
14751Speter #ifndef PI1
1515228Sthien #include "tree_ty.h"		/* must be included for yy.h */
16751Speter #include "yy.h"
17751Speter #endif
18751Speter 
19751Speter char	errpfx	= 'E';
20751Speter extern	int yyline;
21751Speter /*
22751Speter  * Panic is called when impossible
23751Speter  * (supposedly, anyways) situations
24751Speter  * are encountered.
25751Speter  * Panic messages should be short
26751Speter  * as they do not go to the message
27751Speter  * file.
28751Speter  */
panic(s)29751Speter panic(s)
30751Speter 	char *s;
31751Speter {
32751Speter 
33751Speter #ifdef DEBUG
34751Speter #ifdef PI1
35751Speter 	printf("Snark (%s) line=%d\n", s, line);
36751Speter 	abort();
37751Speter #else
38751Speter 	printf("Snark (%s) line=%d, yyline=%d\n", s, line, yyline);
39751Speter 	abort () ;	/* die horribly */
40751Speter #endif
41751Speter #endif
42751Speter #ifdef PI1
43751Speter 	Perror( "Snark in pi1", s);
44751Speter #else
45751Speter 	Perror( "Snark in pi", s);
46751Speter #endif
47751Speter 	pexit(DIED);
48751Speter }
49751Speter 
50751Speter /*
51751Speter  * Error is called for
52751Speter  * semantic errors and
53751Speter  * prints the error and
54751Speter  * a line number.
55751Speter  */
56751Speter 
5715228Sthien /*VARARGS1*/
58751Speter 
error(a1,a2,a3,a4,a5)593298Smckusic error(a1, a2, a3, a4, a5)
60751Speter 	register char *a1;
61751Speter {
62751Speter 	char errbuf[256]; 		/* was extern. why? ...pbk */
63751Speter 	register int i;
64751Speter 
65751Speter 	if (errpfx == 'w' && opt('w') != 0) {
66751Speter 		errpfx = 'E';
67751Speter 		return;
68751Speter 	}
6915228Sthien 	Enocascade = FALSE;
7015228Sthien 	geterr((int) a1, errbuf);
71751Speter 	a1 = errbuf;
72751Speter 	if (line < 0)
73751Speter 		line = -line;
74751Speter #ifndef PI1
75751Speter 	if (opt('l'))
76751Speter 		yyoutline();
77751Speter #endif
78751Speter 	yysetfile(filename);
79751Speter 	if (errpfx == ' ') {
80751Speter 		printf("  ");
81751Speter 		for (i = line; i >= 10; i /= 10)
82751Speter 			pchr( ' ' );
83751Speter 		printf("... ");
84751Speter 	} else if (Enoline)
85751Speter 		printf("  %c - ", errpfx);
86751Speter 	else
87751Speter 		printf("%c %d - ", errpfx, line);
883298Smckusic 	printf(a1, a2, a3, a4, a5);
89751Speter 	if (errpfx == 'E')
90751Speter #ifndef PI0
913073Smckusic 		eflg = TRUE, codeoff();
92751Speter #else
933073Smckusic 		eflg = TRUE;
94751Speter #endif
95751Speter 	errpfx = 'E';
96751Speter 	if (Eholdnl)
9715228Sthien 		Eholdnl = FALSE;
98751Speter 	else
99751Speter 		pchr( '\n' );
100751Speter }
101751Speter 
10215228Sthien /*VARARGS1*/
103751Speter 
cerror(a1,a2,a3,a4,a5)1043298Smckusic cerror(a1, a2, a3, a4, a5)
10515228Sthien     char *a1;
106751Speter {
107751Speter 
108751Speter 	if (Enocascade)
109751Speter 		return;
110751Speter 	setpfx(' ');
1113298Smckusic 	error(a1, a2, a3, a4, a5);
112751Speter }
113751Speter 
114751Speter #ifdef PI1
115751Speter 
116751Speter /*VARARGS*/
117751Speter 
derror(a1,a2,a3,a4,a5)1183298Smckusic derror(a1, a2, a3, a4, a5)
11915228Sthien     char *a1, *a2, *a3, *a4, *a5;
120751Speter {
121751Speter 
122751Speter 	if (!holdderr)
1233298Smckusic 		error(a1, a2, a3, a4, a5);
124751Speter 	errpfx = 'E';
125751Speter }
126751Speter 
127751Speter char	*lastname, printed, hadsome;
128751Speter 
129751Speter     /*
130751Speter      *	this yysetfile for PI1 only.
131751Speter      *	the real yysetfile is in yyput.c
132751Speter      */
yysetfile(name)133751Speter yysetfile(name)
134751Speter 	char *name;
135751Speter {
136751Speter 
137751Speter 	if (lastname == name)
138751Speter 		return;
13932764Sbostic 	printed |= 1;
140751Speter 	gettime( name );
141751Speter 	printf("%s  %s:\n" , myctime( &tvec ) , name );
142751Speter 	lastname = name;
143751Speter }
144751Speter #endif
145