Annotation of researchv10dc/cmd/pascal/px/utilities.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.