1*22366Sdist /*
2*22366Sdist  * Copyright (c) 1980 Regents of the University of California.
3*22366Sdist  * All rights reserved.  The Berkeley software License Agreement
4*22366Sdist  * specifies the terms and conditions for redistribution.
5*22366Sdist  */
65480Slinton 
7*22366Sdist #ifndef lint
8*22366Sdist static char sccsid[] = "@(#)printerror.c	5.1 (Berkeley) 06/06/85";
9*22366Sdist #endif not lint
105480Slinton 
115480Slinton /*
125606Slinton  * Print out an execution time error.
135480Slinton  */
145480Slinton 
155480Slinton #include "defs.h"
165480Slinton #include <signal.h>
175480Slinton #include "machine.h"
185480Slinton #include "sym.h"
195480Slinton #include "process.h"
205480Slinton #include "source.h"
215480Slinton #include "object.h"
225480Slinton #include "mappings.h"
235480Slinton #include "pxerrors.h"
245480Slinton #include "process/process.rep"
255480Slinton 
265480Slinton printerror()
275480Slinton {
285764Slinton     register PROCESS *p;
295764Slinton     char *filename;
305764Slinton     int c;
315480Slinton 
325764Slinton     p = process;
335764Slinton     if (p->signo != ESIGNAL && p->signo != SIGINT) {
345764Slinton 	error("signal %d at px pc %d, lc %d", p->signo, p->pc, pc);
355764Slinton     }
365764Slinton     curline = srcline(pc);
375764Slinton     curfunc = whatblock(pc);
385764Slinton     skimsource(srcfilename(pc));
395764Slinton     if (p->signo == ESIGNAL) {
405764Slinton 	printf("\nerror at ");
415764Slinton 	printwhere(curline, cursource);
425764Slinton 	if (errnum != 0) {
435764Slinton 	    printf(":  %s", pxerrmsg[errnum]);
445480Slinton 	}
455764Slinton     } else {
465764Slinton 	printf("\n\ninterrupt at ");
475764Slinton 	printwhere(curline, cursource);
485764Slinton     }
495764Slinton     putchar('\n');
505764Slinton     printlines(curline, curline);
515764Slinton     erecover();
525480Slinton }
53