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