15480Slinton /* Copyright (c) 1982 Regents of the University of California */
25480Slinton 
3*5606Slinton static char sccsid[] = "@(#)printerror.c 1.2 01/23/82";
45480Slinton 
55480Slinton /*
6*5606Slinton  * Print out an execution time error.
75480Slinton  */
85480Slinton 
95480Slinton #include "defs.h"
105480Slinton #include <signal.h>
115480Slinton #include "machine.h"
125480Slinton #include "sym.h"
135480Slinton #include "process.h"
145480Slinton #include "source.h"
155480Slinton #include "object.h"
165480Slinton #include "mappings.h"
175480Slinton #include "pxerrors.h"
185480Slinton #include "process/process.rep"
195480Slinton 
205480Slinton printerror()
215480Slinton {
225480Slinton 	register PROCESS *p;
235480Slinton 	char *filename;
245480Slinton 	int c;
255480Slinton 
265480Slinton 	p = process;
275480Slinton 	if (p->signo != ESIGNAL && p->signo != SIGINT) {
285480Slinton 		error("signal %d at px pc %d, lc %d", p->signo, p->pc, pc);
295480Slinton 	}
305480Slinton 	curline = srcline(pc);
315480Slinton 	curfunc = whatblock(pc);
325480Slinton 	if ((filename = srcfilename(pc)) != cursource) {
335480Slinton 		skimsource(filename);
345480Slinton 	}
355480Slinton 	if (p->signo == ESIGNAL) {
365480Slinton 		printf("\nerror at line %d", curline);
375480Slinton 		if (nlhdr.nfiles > 1) {
385480Slinton 			printf("in file %s", cursource);
395480Slinton 		}
405480Slinton 		if (errnum != 0) {
415480Slinton 			printf(":  %s", pxerrmsg[errnum]);
425480Slinton 		}
435480Slinton 	} else {
445480Slinton 		printf("\n\ninterrupt at line %d", curline);
455480Slinton 		if (nlhdr.nfiles > 1) {
465480Slinton 			printf(" in file %s", cursource);
475480Slinton 		}
485480Slinton 	}
495480Slinton 	putchar('\n');
505480Slinton 	printlines(curline, curline);
515480Slinton 	erecover();
525480Slinton }
53