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