148096Sbostic /*-
2*62144Sbostic  * Copyright (c) 1980, 1993
3*62144Sbostic  *	The Regents of the University of California.  All rights reserved.
448096Sbostic  *
548096Sbostic  * %sccs.include.redist.c%
622509Sdist  */
75503Slinton 
822509Sdist #ifndef lint
9*62144Sbostic static char sccsid[] = "@(#)pstatus.c	8.1 (Berkeley) 06/06/93";
1048096Sbostic #endif /* not lint */
1148096Sbostic 
125503Slinton /*
135503Slinton  * process status routines
145503Slinton  */
155503Slinton 
165503Slinton #include "defs.h"
175503Slinton #include <signal.h>
185503Slinton #include "process.h"
195503Slinton #include "machine.h"
205503Slinton #include "breakpoint.h"
215503Slinton #include "source.h"
225503Slinton #include "object.h"
235503Slinton #include "process.rep"
245503Slinton 
255503Slinton /*
265503Slinton  * Print the status of the process.
275503Slinton  * This routine does not return.
285503Slinton  */
295503Slinton 
printstatus()305503Slinton printstatus()
315503Slinton {
325761Slinton     if (process->signo == SIGINT) {
335761Slinton 	isstopped = TRUE;
345761Slinton 	printerror();
355761Slinton     }
365761Slinton     if (isbperr() && isstopped) {
375761Slinton 	skimsource(srcfilename(pc));
385761Slinton 	printf("stopped at ");
395761Slinton 	printwhere(curline, cursource);
405761Slinton 	putchar('\n');
415761Slinton 	if (curline > 0) {
425761Slinton 	    printlines(curline, curline);
435761Slinton 	} else {
445761Slinton 	    printinst(pc, pc);
455503Slinton 	}
465761Slinton 	erecover();
475761Slinton     } else {
485761Slinton 	isstopped = FALSE;
495761Slinton 	fixbps();
505761Slinton 	fixintr();
515761Slinton 	if (process->status == FINISHED) {
525761Slinton 	    quit(0);
535503Slinton 	} else {
545761Slinton 	    printerror();
555503Slinton 	}
565761Slinton     }
575503Slinton }
585503Slinton 
595761Slinton 
605503Slinton /*
615761Slinton  * Print out the "line N [in file F]" information that accompanies
625761Slinton  * messages in various places.
635761Slinton  */
645761Slinton 
printwhere(lineno,filename)655761Slinton printwhere(lineno, filename)
665761Slinton LINENO lineno;
675761Slinton char *filename;
685761Slinton {
695761Slinton     if (lineno > 0) {
705761Slinton 	printf("line %d", lineno);
715761Slinton 	if (nlhdr.nfiles > 1) {
725761Slinton 	    printf(" in file %s", filename);
735761Slinton 	}
745761Slinton     } else {
755761Slinton 	    printf("location %d\n", pc);
765761Slinton     }
775761Slinton }
785761Slinton 
795761Slinton /*
805503Slinton  * Return TRUE if the process is finished.
815503Slinton  */
825503Slinton 
isfinished(p)835503Slinton BOOLEAN isfinished(p)
845503Slinton PROCESS *p;
855503Slinton {
865761Slinton     return(p->status == FINISHED);
875503Slinton }
88