15480Slinton /* Copyright (c) 1982 Regents of the University of California */
25480Slinton 
3*5764Slinton static char sccsid[] = "@(#)printerror.c 1.3 02/11/82";
45480Slinton 
55480Slinton /*
65606Slinton  * 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 {
22*5764Slinton     register PROCESS *p;
23*5764Slinton     char *filename;
24*5764Slinton     int c;
255480Slinton 
26*5764Slinton     p = process;
27*5764Slinton     if (p->signo != ESIGNAL && p->signo != SIGINT) {
28*5764Slinton 	error("signal %d at px pc %d, lc %d", p->signo, p->pc, pc);
29*5764Slinton     }
30*5764Slinton     curline = srcline(pc);
31*5764Slinton     curfunc = whatblock(pc);
32*5764Slinton     skimsource(srcfilename(pc));
33*5764Slinton     if (p->signo == ESIGNAL) {
34*5764Slinton 	printf("\nerror at ");
35*5764Slinton 	printwhere(curline, cursource);
36*5764Slinton 	if (errnum != 0) {
37*5764Slinton 	    printf(":  %s", pxerrmsg[errnum]);
385480Slinton 	}
39*5764Slinton     } else {
40*5764Slinton 	printf("\n\ninterrupt at ");
41*5764Slinton 	printwhere(curline, cursource);
42*5764Slinton     }
43*5764Slinton     putchar('\n');
44*5764Slinton     printlines(curline, curline);
45*5764Slinton     erecover();
465480Slinton }
47