1*22509Sdist /*
2*22509Sdist  * Copyright (c) 1980 Regents of the University of California.
3*22509Sdist  * All rights reserved.  The Berkeley software License Agreement
4*22509Sdist  * specifies the terms and conditions for redistribution.
5*22509Sdist  */
65503Slinton 
7*22509Sdist #ifndef lint
8*22509Sdist static char sccsid[] = "@(#)pstatus.c	5.1 (Berkeley) 06/06/85";
9*22509Sdist #endif not lint
105503Slinton /*
115503Slinton  * process status routines
125503Slinton  */
135503Slinton 
145503Slinton #include "defs.h"
155503Slinton #include <signal.h>
165503Slinton #include "process.h"
175503Slinton #include "machine.h"
185503Slinton #include "breakpoint.h"
195503Slinton #include "source.h"
205503Slinton #include "object.h"
215503Slinton #include "process.rep"
225503Slinton 
235503Slinton /*
245503Slinton  * Print the status of the process.
255503Slinton  * This routine does not return.
265503Slinton  */
275503Slinton 
285503Slinton printstatus()
295503Slinton {
305761Slinton     if (process->signo == SIGINT) {
315761Slinton 	isstopped = TRUE;
325761Slinton 	printerror();
335761Slinton     }
345761Slinton     if (isbperr() && isstopped) {
355761Slinton 	skimsource(srcfilename(pc));
365761Slinton 	printf("stopped at ");
375761Slinton 	printwhere(curline, cursource);
385761Slinton 	putchar('\n');
395761Slinton 	if (curline > 0) {
405761Slinton 	    printlines(curline, curline);
415761Slinton 	} else {
425761Slinton 	    printinst(pc, pc);
435503Slinton 	}
445761Slinton 	erecover();
455761Slinton     } else {
465761Slinton 	isstopped = FALSE;
475761Slinton 	fixbps();
485761Slinton 	fixintr();
495761Slinton 	if (process->status == FINISHED) {
505761Slinton 	    quit(0);
515503Slinton 	} else {
525761Slinton 	    printerror();
535503Slinton 	}
545761Slinton     }
555503Slinton }
565503Slinton 
575761Slinton 
585503Slinton /*
595761Slinton  * Print out the "line N [in file F]" information that accompanies
605761Slinton  * messages in various places.
615761Slinton  */
625761Slinton 
635761Slinton printwhere(lineno, filename)
645761Slinton LINENO lineno;
655761Slinton char *filename;
665761Slinton {
675761Slinton     if (lineno > 0) {
685761Slinton 	printf("line %d", lineno);
695761Slinton 	if (nlhdr.nfiles > 1) {
705761Slinton 	    printf(" in file %s", filename);
715761Slinton 	}
725761Slinton     } else {
735761Slinton #	if (isvaxpx)
745761Slinton 	    printf("location %d\n", pc);
755761Slinton #	else
765761Slinton 	    printf("location 0x%x\n", pc);
775761Slinton #	endif
785761Slinton     }
795761Slinton }
805761Slinton 
815761Slinton /*
825503Slinton  * Return TRUE if the process is finished.
835503Slinton  */
845503Slinton 
855503Slinton BOOLEAN isfinished(p)
865503Slinton PROCESS *p;
875503Slinton {
885761Slinton     return(p->status == FINISHED);
895503Slinton }
90