1 /* Copyright (c) 1982 Regents of the University of California */
2 
3 static char sccsid[] = "@(#)printerror.c 1.2 01/23/82";
4 
5 /*
6  * Print out an execution time error.
7  */
8 
9 #include "defs.h"
10 #include <signal.h>
11 #include "machine.h"
12 #include "sym.h"
13 #include "process.h"
14 #include "source.h"
15 #include "object.h"
16 #include "mappings.h"
17 #include "pxerrors.h"
18 #include "process/process.rep"
19 
20 printerror()
21 {
22 	register PROCESS *p;
23 	char *filename;
24 	int c;
25 
26 	p = process;
27 	if (p->signo != ESIGNAL && p->signo != SIGINT) {
28 		error("signal %d at px pc %d, lc %d", p->signo, p->pc, pc);
29 	}
30 	curline = srcline(pc);
31 	curfunc = whatblock(pc);
32 	if ((filename = srcfilename(pc)) != cursource) {
33 		skimsource(filename);
34 	}
35 	if (p->signo == ESIGNAL) {
36 		printf("\nerror at line %d", curline);
37 		if (nlhdr.nfiles > 1) {
38 			printf("in file %s", cursource);
39 		}
40 		if (errnum != 0) {
41 			printf(":  %s", pxerrmsg[errnum]);
42 		}
43 	} else {
44 		printf("\n\ninterrupt at line %d", curline);
45 		if (nlhdr.nfiles > 1) {
46 			printf(" in file %s", cursource);
47 		}
48 	}
49 	putchar('\n');
50 	printlines(curline, curline);
51 	erecover();
52 }
53