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()305503Slintonprintstatus() 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)655761Slintonprintwhere(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)835503SlintonBOOLEAN isfinished(p) 845503Slinton PROCESS *p; 855503Slinton { 865761Slinton return(p->status == FINISHED); 875503Slinton } 88