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