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