Annotation of 42BSD/ucb/pascal/pxp/pp.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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