xref: /csrg-svn/usr.bin/pascal/pxp/error.c (revision 62189)
148112Sbostic /*-
2*62189Sbostic  * Copyright (c) 1980, 1993
3*62189Sbostic  *	The Regents of the University of California.  All rights reserved.
448112Sbostic  *
548112Sbostic  * %sccs.include.redist.c%
622227Sdist  */
722227Sdist 
822227Sdist #ifndef lint
9*62189Sbostic static char sccsid[] = "@(#)error.c	8.1 (Berkeley) 06/06/93";
1048112Sbostic #endif /* not lint */
1122227Sdist 
1222227Sdist /*
132853Speter  * pi - Pascal interpreter code translator
142853Speter  *
152853Speter  * Charles Haley, Bill Joy UCB
162853Speter  * Version 1.2 January 1979
172853Speter  *
182853Speter  *
192853Speter  * pxp - Pascal execution profiler
202853Speter  *
212853Speter  * Bill Joy UCB
222853Speter  * Version 1.2 January 1979
232853Speter  */
242853Speter 
2512391Speter #include "whoami.h"
262853Speter #include "0.h"
272853Speter #include "yy.h"
282853Speter 
292853Speter #ifdef PXP
302853Speter extern	int yyline;
312853Speter extern	char errout;
322853Speter #endif
332853Speter 
343050Smckusic char	errpfx	= 'E';
352853Speter extern	int yyline;
362853Speter /*
372853Speter  * Panic is called when impossible
382853Speter  * (supposedly, anyways) situations
392853Speter  * are encountered.
402853Speter #ifdef PI
412853Speter  * Panic messages should be short
422853Speter  * as they do not go to the message
432853Speter  * file.
442853Speter #endif
452853Speter  */
panic(s)462853Speter panic(s)
472853Speter 	char *s;
482853Speter {
492853Speter 
502853Speter #ifdef DEBUG
512853Speter 	fprintf(stderr, "Snark (%s) line=%d yyline=%d\n", s, line, yyline);
522853Speter #endif
532853Speter #ifdef PXP
542853Speter 	Perror( "Snark in pxp", s);
552853Speter #endif
562853Speter #ifdef PI
572853Speter 	Perror( "Snark in pi", s);
582853Speter #endif
592853Speter 	pexit(DIED);
602853Speter }
612853Speter 
622853Speter extern	char *errfile;
632853Speter /*
642853Speter  * Error is called for
652853Speter  * semantic errors and
662853Speter  * prints the error and
672853Speter  * a line number.
682853Speter  */
error(a1,a2,a3,a4)692853Speter error(a1, a2, a3, a4)
702853Speter {
712853Speter #ifdef PI
722853Speter 	char buf[256];
732853Speter 	register int i;
742853Speter #endif
752853Speter #ifdef PXP
762853Speter /*
772853Speter 	int ofout;
782853Speter */
792853Speter #endif
802853Speter 
812913Speter 	if (errpfx == 'w' && opt('w') != 0) {
822913Speter 		errpfx == 'E';
832853Speter 		return;
842913Speter 	}
852853Speter #ifdef PXP
862853Speter /*
872853Speter 	flush();
882853Speter 	ofout = fout[0];
892853Speter 	fout[0] = errout;
902853Speter */
912853Speter #endif
922853Speter #ifdef PI
932853Speter 	Enocascade = 0;
942853Speter 	geterr(a1, buf);
952853Speter 	a1 = buf;
962853Speter #endif
972853Speter 	if (line < 0)
982853Speter 		line = -line;
992853Speter 	yySsync();
1002853Speter 	yysetfile(filename);
1012853Speter #ifdef PI
1022853Speter 	if (errpfx == ' ') {
1032853Speter 		printf("  ");
10432761Sbostic 		for (i = line; i >= 10; i /= 10)
1052853Speter 			putchar(' ');
1062853Speter 		printf("... ");
1072853Speter 	} else if (Enoline)
1082853Speter 		printf("  %c - ", errpfx);
1092853Speter 	else
1102853Speter #endif
1112853Speter 		fprintf(stderr, "%c %d - ", errpfx, line);
1122853Speter 	fprintf(stderr, a1, a2, a3, a4);
1132853Speter 	if (errpfx == 'E')
1142853Speter #ifdef PI
1152853Speter 		eflg++, cgenflg++;
1162853Speter #endif
1172853Speter #ifdef PXP
1182853Speter 		eflg++;
1192853Speter #endif
1202853Speter 	errpfx = 'E';
1212853Speter #ifdef PI
1222853Speter 	if (Eholdnl)
1232853Speter 		Eholdnl = 0;
1242853Speter 	else
1252853Speter #endif
1262853Speter 		putc('\n', stderr);
1272853Speter #ifdef PXP
1282853Speter /*
1292853Speter 	flush();
1302853Speter 	fout[0] = ofout;
1312853Speter */
1322853Speter #endif
1332853Speter }
1342853Speter 
1352853Speter #ifdef PI
cerror(a1,a2,a3,a4)1362853Speter cerror(a1, a2, a3, a4)
1372853Speter {
1382853Speter 
1392853Speter 	if (Enocascade)
1402853Speter 		return;
1412853Speter 	setpfx(' ');
1422853Speter 	error(a1, a2, a3, a4);
1432853Speter }
1442853Speter #endif
145