1*48096Sbostic /*-
2*48096Sbostic  * Copyright (c) 1980 The Regents of the University of California.
3*48096Sbostic  * All rights reserved.
4*48096Sbostic  *
5*48096Sbostic  * %sccs.include.redist.c%
622509Sdist  */
75503Slinton 
822509Sdist #ifndef lint
9*48096Sbostic static char sccsid[] = "@(#)pstatus.c	5.3 (Berkeley) 04/16/91";
10*48096Sbostic #endif /* not lint */
11*48096Sbostic 
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 
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 
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 
835503Slinton BOOLEAN isfinished(p)
845503Slinton PROCESS *p;
855503Slinton {
865761Slinton     return(p->status == FINISHED);
875503Slinton }
88