Annotation of 43BSDReno/pgrm/pascal/pxp/pp.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1980 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  */
                      6: 
                      7: #ifndef lint
                      8: static char sccsid[] = "@(#)pp.c       5.3 (Berkeley) 10/16/87";
                      9: #endif not lint
                     10: 
                     11: /*
                     12:  * pxp - Pascal execution profiler
                     13:  *
                     14:  * Bill Joy UCB
                     15:  * Version 1.2 January 1979
                     16:  */
                     17: 
                     18: #include "0.h"
                     19: 
                     20: #define noprint() nopflg
                     21: 
                     22: int    pplev[3];       /* STAT, DECL, PRFN */
                     23: int    nopflg;
                     24: 
                     25: setprint()
                     26: {
                     27: 
                     28:        if (profile == 0) {
                     29:                if (table)
                     30:                        nopflg = 1;
                     31:                else
                     32:                        nopflg = 0;
                     33:                return;
                     34:        }
                     35:        nopflg = !all && nowcnt() == 0 || !opt('z');
                     36: }
                     37: 
                     38: printon()
                     39: {
                     40: 
                     41:        if (profile == 0) {
                     42:                if (table)
                     43:                        nopflg = 1;
                     44:                return;
                     45:        }
                     46:        nopflg = 0;
                     47: }
                     48: 
                     49: printoff()
                     50: {
                     51: 
                     52:        nopflg = 1;
                     53: }
                     54: 
                     55: ppkw(s)
                     56:        register char *s;
                     57: {
                     58:        register char *cp, i;
                     59: 
                     60:        if (noprint())
                     61:                return;
                     62:        /*
                     63:         * First real thing printed
                     64:         * is always a keyword
                     65:         * or includes an "id" (if a comment)
                     66:         * (See ppnl below)
                     67:         */
                     68:        hadsome = 1;
                     69:        if (underline) {
                     70:                for (cp = s; *cp; cp++)
                     71:                        putchar('_');
                     72:                for (cp = s; *cp; cp++)
                     73:                        putchar('\b');
                     74:        }
                     75:        printf(s);
                     76: }
                     77: 
                     78: ppid(s)
                     79:        register char *s;
                     80: {
                     81: 
                     82:        if (noprint())
                     83:                return;
                     84:        hadsome = 1;
                     85:        if (s == NIL)
                     86:                s = "{identifier}";
                     87:        printf(s);
                     88: }
                     89: 
                     90: ppbra(s)
                     91:        char *s;
                     92: {
                     93: 
                     94:        if (noprint())
                     95:                return;
                     96:        if (s != NIL)
                     97:                printf(s);
                     98: }
                     99: 
                    100: ppsep(s)
                    101:        char *s;
                    102: {
                    103: 
                    104:        if (noprint())
                    105:                return;
                    106:        printf(s);
                    107: }
                    108: 
                    109: ppket(s)
                    110:        char *s;
                    111: {
                    112: 
                    113:        if (noprint())
                    114:                return;
                    115:        if (s != NIL)
                    116:                printf(s);
                    117: }
                    118: 
                    119: char   killsp;
                    120: 
                    121: ppunspac()
                    122: {
                    123: 
                    124:        killsp = 1;
                    125: }
                    126: 
                    127: ppspac()
                    128: {
                    129: 
                    130:        if (killsp) {
                    131:                killsp = 0;
                    132:                return;
                    133:        }
                    134:        if (noprint())
                    135:                return;
                    136:        putchar(' ');
                    137: }
                    138: 
                    139: ppitem()
                    140: {
                    141: 
                    142:        if (noprint())
                    143:                return;
                    144:        ppnl();
                    145:        indent();
                    146: }
                    147: 
                    148: int    owenl, owenlb;
                    149: 
                    150: ppsnlb()
                    151: {
                    152: 
                    153:        if (nopflg)
                    154:                return;
                    155:        owenlb++;
                    156: }
                    157: 
                    158: ppsnl()
                    159: {
                    160: 
                    161:        if (nopflg)
                    162:                return;
                    163:        owenl++;
                    164: }
                    165: 
                    166: pppay()
                    167: {
                    168: 
                    169:        while (owenl || owenlb) {
                    170:                putchar('\n');
                    171:                if (owenlb) {
                    172:                        putchar(' ');
                    173:                        owenlb--;
                    174:                } else
                    175:                        owenl--;
                    176:        }
                    177: }
                    178: 
                    179: ppnl()
                    180: {
                    181: 
                    182:        if (noprint())
                    183:                return;
                    184:        if (hadsome == 0)
                    185:                return;
                    186:        pppay();
                    187:        putchar('\n');
                    188: }
                    189: 
                    190: indent()
                    191: {
                    192:        register i;
                    193: 
                    194:        if (noprint())
                    195:                return;
                    196:        linopr();
                    197:        if (profile == 0) {
                    198:                indent1(pplev[PRFN] + pplev[DECL] + pplev[STAT]);
                    199:                return;
                    200:        }
                    201:        indent1(pplev[PRFN] + pplev[STAT]);
                    202:        switch (i = shudpcnt()) {
                    203:                case 1:
                    204:                        printf("%7ld.", nowcnt());
                    205:                        dashes('-');
                    206:                        putchar('|');
                    207:                        break;
                    208:                case 0:
                    209:                case -1:
                    210:                        printf("        ");
                    211:                        dashes(' ');
                    212:                        putchar(i == 0 ? '|' : ' ');
                    213:                        break;
                    214:        }
                    215:        indent1(pplev[DECL]);
                    216: }
                    217: 
                    218: dashes(c)
                    219:        char c;
                    220: {
                    221:        register i;
                    222: 
                    223:        for (i = unit - 1; i != 0; i--)
                    224:                putchar(c);
                    225: }
                    226: 
                    227: indent1(in)
                    228:        int in;
                    229: {
                    230:        register i;
                    231: 
                    232:        if (noprint())
                    233:                return;
                    234:        i = in;
                    235:        if (profile == 0)
                    236:                while (i >= 8) {
                    237:                        putchar('\t');
                    238:                        i -= 8;
                    239:                }
                    240:        while (i > 0) {
                    241:                putchar(' ');
                    242:                i--;
                    243:        }
                    244: }
                    245: 
                    246: linopr()
                    247: {
                    248: 
                    249:        if (noprint())
                    250:                return;
                    251:        if (profile) {
                    252:                if (line < 0)
                    253:                        line = -line;
                    254:                printf("%6d  ", line);
                    255:        }
                    256: }
                    257: 
                    258: indentlab()
                    259: {
                    260: 
                    261:        indent1(pplev[PRFN]);
                    262: }
                    263: 
                    264: ppop(s)
                    265:        char *s;
                    266: {
                    267: 
                    268:        if (noprint())
                    269:                return;
                    270:        printf(s);
                    271: }
                    272: 
                    273: ppnumb(s)
                    274:        char *s;
                    275: {
                    276: 
                    277:        if (noprint())
                    278:                return;
                    279:        if (s == NIL)
                    280:                s = "{number}";
                    281:        printf(s);
                    282: }
                    283: 
                    284: ppgoin(lv)
                    285: {
                    286: 
                    287:        pplev[lv] += unit;
                    288: }
                    289: 
                    290: ppgoout(lv)
                    291: {
                    292: 
                    293:        pplev[lv] -= unit;
                    294:        if (pplev[lv] < 0)
                    295:                panic("pplev");
                    296: }
                    297: 
                    298: ppstr(s)
                    299:        char *s;
                    300: {
                    301:        register char *cp;
                    302: 
                    303:        if (noprint())
                    304:                return;
                    305:        if (s == NIL) {
                    306:                printf("{string}");
                    307:                return;
                    308:        }
                    309:        putchar('\'');
                    310:        cp = s;
                    311:        while (*cp) {
                    312:                putchar(*cp);
                    313:                if (*cp == '\'')
                    314:                        putchar('\'');
                    315:                cp++;
                    316:        }
                    317:        putchar('\'');
                    318: }
                    319: 
                    320: pplab(s)
                    321:        char *s;
                    322: {
                    323: 
                    324:        if (noprint())
                    325:                return;
                    326:        if (s == NIL)
                    327:                s = "{integer label}";
                    328:        printf(s);
                    329: }
                    330: 
                    331: int    outcol;
                    332: 
                    333: 
                    334: putchar(c)
                    335:        char c;
                    336: {
                    337: 
                    338:        putc(c, stdout);
                    339:        if (ferror(stdout))
                    340:                outerr();
                    341:        switch (c) {
                    342:                case '\n':
                    343:                        outcol = 0;
                    344:                        flush();
                    345:                        break;
                    346:                case '\t':
                    347:                        outcol += 8;
                    348:                        outcol &= ~07;
                    349:                        break;
                    350:                case '\b':
                    351:                        if (outcol)
                    352:                                outcol--;
                    353:                        break;
                    354:                default:
                    355:                        outcol++;
                    356:                case '\f':
                    357:                        break;
                    358:        }
                    359: }
                    360: 
                    361: flush()
                    362: {
                    363: 
                    364:        fflush(stdout);
                    365:        if (ferror(stdout))
                    366:                outerr();
                    367: }
                    368: 
                    369: pptab()
                    370: {
                    371:        register int i;
                    372: 
                    373:        if (noprint())
                    374:                return;
                    375:        i = pplev[PRFN] + profile ? 44 + unit : 28;
                    376: /*
                    377:        if (outcol > i + 8) {
                    378:                ppnl();
                    379:                i += 8;
                    380:        }
                    381: */
                    382:        do
                    383:                putchar('\t');
                    384:        while (outcol < i);
                    385: }
                    386: 
                    387: outerr()
                    388: {
                    389: 
                    390:        perror(stdoutn);
                    391:        pexit(DIED);
                    392: }

unix.superglobalmegacorp.com

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