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