|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.