15503Slinton /* Copyright (c) 1982 Regents of the University of California */
25503Slinton 
3*5761Slinton static char sccsid[] = "@(#)pstatus.c 1.3 02/11/82";
45503Slinton 
55503Slinton /*
65503Slinton  * process status routines
75503Slinton  */
85503Slinton 
95503Slinton #include "defs.h"
105503Slinton #include <signal.h>
115503Slinton #include "process.h"
125503Slinton #include "machine.h"
135503Slinton #include "breakpoint.h"
145503Slinton #include "source.h"
155503Slinton #include "object.h"
165503Slinton #include "process.rep"
175503Slinton 
185503Slinton /*
195503Slinton  * Print the status of the process.
205503Slinton  * This routine does not return.
215503Slinton  */
225503Slinton 
235503Slinton printstatus()
245503Slinton {
25*5761Slinton     if (process->signo == SIGINT) {
26*5761Slinton 	isstopped = TRUE;
27*5761Slinton 	printerror();
28*5761Slinton     }
29*5761Slinton     if (isbperr() && isstopped) {
30*5761Slinton 	skimsource(srcfilename(pc));
31*5761Slinton 	printf("stopped at ");
32*5761Slinton 	printwhere(curline, cursource);
33*5761Slinton 	putchar('\n');
34*5761Slinton 	if (curline > 0) {
35*5761Slinton 	    printlines(curline, curline);
36*5761Slinton 	} else {
37*5761Slinton 	    printinst(pc, pc);
385503Slinton 	}
39*5761Slinton 	erecover();
40*5761Slinton     } else {
41*5761Slinton 	isstopped = FALSE;
42*5761Slinton 	fixbps();
43*5761Slinton 	fixintr();
44*5761Slinton 	if (process->status == FINISHED) {
45*5761Slinton 	    quit(0);
465503Slinton 	} else {
47*5761Slinton 	    printerror();
485503Slinton 	}
49*5761Slinton     }
505503Slinton }
515503Slinton 
52*5761Slinton 
535503Slinton /*
54*5761Slinton  * Print out the "line N [in file F]" information that accompanies
55*5761Slinton  * messages in various places.
56*5761Slinton  */
57*5761Slinton 
58*5761Slinton printwhere(lineno, filename)
59*5761Slinton LINENO lineno;
60*5761Slinton char *filename;
61*5761Slinton {
62*5761Slinton     if (lineno > 0) {
63*5761Slinton 	printf("line %d", lineno);
64*5761Slinton 	if (nlhdr.nfiles > 1) {
65*5761Slinton 	    printf(" in file %s", filename);
66*5761Slinton 	}
67*5761Slinton     } else {
68*5761Slinton #	if (isvaxpx)
69*5761Slinton 	    printf("location %d\n", pc);
70*5761Slinton #	else
71*5761Slinton 	    printf("location 0x%x\n", pc);
72*5761Slinton #	endif
73*5761Slinton     }
74*5761Slinton }
75*5761Slinton 
76*5761Slinton /*
775503Slinton  * Return TRUE if the process is finished.
785503Slinton  */
795503Slinton 
805503Slinton BOOLEAN isfinished(p)
815503Slinton PROCESS *p;
825503Slinton {
83*5761Slinton     return(p->status == FINISHED);
845503Slinton }
85