|
|
1.1 ! root 1: /* Copyright (c) 1979 Regents of the University of California */ ! 2: ! 3: static char sccsid[] = "@(#)utilities.c 1.4 3/6/81"; ! 4: ! 5: #include "whoami.h" ! 6: #include "vars.h" ! 7: #include "panics.h" ! 8: #include "h02opcs.h" ! 9: ! 10: stats() ! 11: { ! 12: struct { ! 13: long usr_time; ! 14: long sys_time; ! 15: long child_usr_time; ! 16: long child_sys_time; ! 17: } tbuf; ! 18: register double l; ! 19: register long count; ! 20: # ifdef PROFILE ! 21: # define proffile "/vb/grad/mckusick/px/profile/pcnt.out" ! 22: struct cntrec { ! 23: double counts[NUMOPS]; /* instruction counts */ ! 24: long runs; /* number of interpreter runs */ ! 25: long startdate; /* date profile started */ ! 26: long usrtime; /* total user time consumed */ ! 27: long systime; /* total system time consumed */ ! 28: double stmts; /* number of pascal stmts executed */ ! 29: } profdata; ! 30: FILE *datafile; ! 31: # endif PROFILE ! 32: ! 33: if (_nodump) ! 34: return(0); ! 35: times(&tbuf); ! 36: # ifdef PROFILE ! 37: datafile = fopen(proffile,"r"); ! 38: if (datafile == NULL) ! 39: goto skipprof; ! 40: count = fread(&profdata,1,sizeof(profdata),datafile); ! 41: if (count != sizeof(profdata)) ! 42: goto skipprof; ! 43: for (count = 0; count < NUMOPS; count++) ! 44: profdata.counts[count] += _profcnts[count]; ! 45: profdata.runs += 1; ! 46: profdata.stmts += _stcnt; ! 47: profdata.usrtime += tbuf.usr_time; ! 48: profdata.systime += tbuf.sys_time; ! 49: datafile = freopen(proffile,"w",datafile); ! 50: if (datafile == NULL) ! 51: goto skipprof; ! 52: count = fwrite(&profdata,1,sizeof(profdata),datafile); ! 53: if (count != sizeof(profdata)) ! 54: goto skipprof; ! 55: fclose(datafile); ! 56: skipprof: ! 57: # endif PROFILE ! 58: l = tbuf.usr_time; ! 59: l = l / HZ; ! 60: fprintf(stderr, ! 61: "\n%1ld statements executed in %04.2f seconds cpu time.\n", ! 62: _stcnt,l); ! 63: } ! 64: ! 65: backtrace(errnum) ! 66: int errnum; ! 67: { ! 68: register struct disp *mydp; ! 69: register struct stack *ap; ! 70: register char *cp; ! 71: register long i, linum; ! 72: struct disply disp; ! 73: ! 74: if (_lino <= 0) { ! 75: fprintf(stderr,"Program was not executed.\n"); ! 76: return; ! 77: } ! 78: disp = _display; ! 79: if (errnum == PINTR) ! 80: fprintf(stderr,"\n\tInterrupted in \""); ! 81: else if (errnum == PHALT) ! 82: fprintf(stderr,"\n\tHalted in \""); ! 83: else ! 84: fprintf(stderr,"\n\tError in \""); ! 85: mydp = _dp; ! 86: linum = _lino; ! 87: for (;;) { ! 88: ap = mydp->stp; ! 89: i = linum - (((ap)->entry)->offset & 0177777); ! 90: fprintf(stderr,"%s\"",(ap->entry)->name); ! 91: if (_nodump == FALSE) ! 92: fprintf(stderr,"+%D near line %D.",i,linum); ! 93: fputc('\n',stderr); ! 94: *mydp = (ap)->odisp; ! 95: if (mydp <= &_display.frame[1]){ ! 96: _display = disp; ! 97: psexit(errnum); ! 98: } ! 99: mydp = (ap)->dp; ! 100: linum = (ap)->lino; ! 101: fprintf(stderr,"\tCalled by \""); ! 102: } ! 103: } ! 104: ! 105: psexit(code) ! 106: ! 107: int code; ! 108: { ! 109: if (_pcpcount != 0) ! 110: PMFLUSH(_cntrs, _rtns, _pcpcount); ! 111: if (_mode == PIX) { ! 112: fprintf(stderr,"Execution terminated"); ! 113: if (code) ! 114: fprintf(stderr," abnormally"); ! 115: fputc('.',stderr); ! 116: fputc('\n',stderr); ! 117: } ! 118: stats(); ! 119: exit(code); ! 120: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.