12861Speter /* 222234Sdist * Copyright (c) 1980 Regents of the University of California. 322234Sdist * All rights reserved. The Berkeley software License Agreement 422234Sdist * specifies the terms and conditions for redistribution. 522234Sdist */ 622234Sdist 722234Sdist #ifndef lint 8*30650Slepreau static char sccsid[] = "@(#)pp.c 5.2 (Berkeley) 03/17/87"; 922234Sdist #endif not lint 1022234Sdist 1122234Sdist /* 122861Speter * pxp - Pascal execution profiler 132861Speter * 142861Speter * Bill Joy UCB 152861Speter * Version 1.2 January 1979 162861Speter */ 172861Speter 182861Speter #include "0.h" 192861Speter 202861Speter #define noprint() nopflg 212861Speter 222861Speter int pplev[3]; /* STAT, DECL, PRFN */ 232861Speter int nopflg; 242861Speter 252861Speter setprint() 262861Speter { 272861Speter 282861Speter if (profile == 0) { 292861Speter if (table) 302861Speter nopflg = 1; 312861Speter else 322861Speter nopflg = 0; 332861Speter return; 342861Speter } 352861Speter nopflg = !all && nowcnt() == 0 || !opt('z'); 362861Speter } 372861Speter 382861Speter printon() 392861Speter { 402861Speter 412861Speter if (profile == 0) { 422861Speter if (table) 432861Speter nopflg = 1; 442861Speter return; 452861Speter } 462861Speter nopflg = 0; 472861Speter } 482861Speter 492861Speter printoff() 502861Speter { 512861Speter 522861Speter nopflg = 1; 532861Speter } 542861Speter 552861Speter ppkw(s) 562861Speter register char *s; 572861Speter { 582861Speter register char *cp, i; 592861Speter 602861Speter if (noprint()) 612861Speter return; 622861Speter /* 632861Speter * First real thing printed 642861Speter * is always a keyword 652861Speter * or includes an "id" (if a comment) 662861Speter * (See ppnl below) 672861Speter */ 682861Speter hadsome = 1; 692861Speter if (underline) { 702861Speter for (cp = s; *cp; cp++) 712861Speter putchar('_'); 722861Speter for (cp = s; *cp; cp++) 732861Speter putchar('\b'); 742861Speter } 752861Speter printf(s); 762861Speter } 772861Speter 782861Speter ppid(s) 792861Speter register char *s; 802861Speter { 812861Speter 822861Speter if (noprint()) 832861Speter return; 842861Speter hadsome = 1; 852861Speter if (s == NIL) 862861Speter s = "{identifier}"; 872861Speter printf(s); 882861Speter } 892861Speter 902861Speter ppbra(s) 912861Speter char *s; 922861Speter { 932861Speter 942861Speter if (noprint()) 952861Speter return; 962861Speter if (s != NIL) 972861Speter printf(s); 982861Speter } 992861Speter 1002861Speter ppsep(s) 1012861Speter char *s; 1022861Speter { 1032861Speter 1042861Speter if (noprint()) 1052861Speter return; 1062861Speter printf(s); 1072861Speter } 1082861Speter 1092861Speter ppket(s) 1102861Speter char *s; 1112861Speter { 1122861Speter 1132861Speter if (noprint()) 1142861Speter return; 1152861Speter if (s != NIL) 1162861Speter printf(s); 1172861Speter } 1182861Speter 1192861Speter char killsp; 1202861Speter 1212861Speter ppunspac() 1222861Speter { 1232861Speter 1242861Speter killsp = 1; 1252861Speter } 1262861Speter 1272861Speter ppspac() 1282861Speter { 1292861Speter 1302861Speter if (killsp) { 1312861Speter killsp = 0; 1322861Speter return; 1332861Speter } 1342861Speter if (noprint()) 1352861Speter return; 1362861Speter putchar(' '); 1372861Speter } 1382861Speter 1392861Speter ppitem() 1402861Speter { 1412861Speter 1422861Speter if (noprint()) 1432861Speter return; 1442861Speter ppnl(); 1452861Speter indent(); 1462861Speter } 1472861Speter 1482861Speter int owenl, owenlb; 1492861Speter 1502861Speter ppsnlb() 1512861Speter { 1522861Speter 1532861Speter if (nopflg) 1542861Speter return; 1552861Speter owenlb++; 1562861Speter } 1572861Speter 1582861Speter ppsnl() 1592861Speter { 1602861Speter 1612861Speter if (nopflg) 1622861Speter return; 1632861Speter owenl++; 1642861Speter } 1652861Speter 1662861Speter pppay() 1672861Speter { 1682861Speter 1692861Speter while (owenl || owenlb) { 1702861Speter putchar('\n'); 1712861Speter if (owenlb) { 1722861Speter putchar(' '); 1732861Speter owenlb--; 1742861Speter } else 1752861Speter owenl--; 1762861Speter } 1772861Speter } 1782861Speter 1792861Speter ppnl() 1802861Speter { 1812861Speter 1822861Speter if (noprint()) 1832861Speter return; 1842861Speter if (hadsome == 0) 1852861Speter return; 1862861Speter pppay(); 1872861Speter putchar('\n'); 1882861Speter } 1892861Speter 1902861Speter indent() 1912861Speter { 1922861Speter register i; 1932861Speter 1942861Speter if (noprint()) 1952861Speter return; 1962861Speter linopr(); 1972861Speter if (profile == 0) { 1982861Speter indent1(pplev[PRFN] + pplev[DECL] + pplev[STAT]); 1992861Speter return; 2002861Speter } 2012861Speter indent1(pplev[PRFN] + pplev[STAT]); 2022861Speter switch (i = shudpcnt()) { 2032861Speter case 1: 20410729Smckusick printf("%7ld.", nowcnt()); 2052861Speter dashes('-'); 2062861Speter putchar('|'); 2072861Speter break; 2082861Speter case 0: 2092861Speter case -1: 2102861Speter printf(" "); 2112861Speter dashes(' '); 2122861Speter putchar(i == 0 ? '|' : ' '); 2132861Speter break; 2142861Speter } 2152861Speter indent1(pplev[DECL]); 2162861Speter } 2172861Speter 2182861Speter dashes(c) 2192861Speter char c; 2202861Speter { 2212861Speter register i; 2222861Speter 2232861Speter for (i = unit - 1; i != 0; i--) 2242861Speter putchar(c); 2252861Speter } 2262861Speter 2272861Speter indent1(in) 2282861Speter int in; 2292861Speter { 2302861Speter register i; 2312861Speter 2322861Speter if (noprint()) 2332861Speter return; 2342861Speter i = in; 2352861Speter if (profile == 0) 2362861Speter while (i >= 8) { 2372861Speter putchar('\t'); 2382861Speter i =- 8; 2392861Speter } 2402861Speter while (i > 0) { 2412861Speter putchar(' '); 2422861Speter i--; 2432861Speter } 2442861Speter } 2452861Speter 2462861Speter linopr() 2472861Speter { 2482861Speter 2492861Speter if (noprint()) 2502861Speter return; 2512861Speter if (profile) { 2522861Speter if (line < 0) 2532861Speter line = -line; 2542861Speter printf("%6d ", line); 2552861Speter } 2562861Speter } 2572861Speter 2582861Speter indentlab() 2592861Speter { 2602861Speter 2612861Speter indent1(pplev[PRFN]); 2622861Speter } 2632861Speter 2642861Speter ppop(s) 2652861Speter char *s; 2662861Speter { 2672861Speter 2682861Speter if (noprint()) 2692861Speter return; 2702861Speter printf(s); 2712861Speter } 2722861Speter 2732861Speter ppnumb(s) 2742861Speter char *s; 2752861Speter { 2762861Speter 2772861Speter if (noprint()) 2782861Speter return; 2792861Speter if (s == NIL) 2802861Speter s = "{number}"; 2812861Speter printf(s); 2822861Speter } 2832861Speter 2842861Speter ppgoin(lv) 2852861Speter { 2862861Speter 287*30650Slepreau pplev[lv] += unit; 2882861Speter } 2892861Speter 2902861Speter ppgoout(lv) 2912861Speter { 2922861Speter 2932861Speter pplev[lv] =- unit; 2942861Speter if (pplev[lv] < 0) 2952861Speter panic("pplev"); 2962861Speter } 2972861Speter 2982861Speter ppstr(s) 2992861Speter char *s; 3002861Speter { 3012861Speter register char *cp; 3022861Speter 3032861Speter if (noprint()) 3042861Speter return; 3052861Speter if (s == NIL) { 3062861Speter printf("{string}"); 3072861Speter return; 3082861Speter } 3092861Speter putchar('\''); 3102861Speter cp = s; 3112861Speter while (*cp) { 3122861Speter putchar(*cp); 3132861Speter if (*cp == '\'') 3142861Speter putchar('\''); 3152861Speter cp++; 3162861Speter } 3172861Speter putchar('\''); 3182861Speter } 3192861Speter 3202861Speter pplab(s) 3212861Speter char *s; 3222861Speter { 3232861Speter 3242861Speter if (noprint()) 3252861Speter return; 3262861Speter if (s == NIL) 3272861Speter s = "{integer label}"; 3282861Speter printf(s); 3292861Speter } 3302861Speter 3312861Speter int outcol; 3322861Speter 3332861Speter 3342861Speter putchar(c) 3352861Speter char c; 3362861Speter { 3372861Speter 3382861Speter putc(c, stdout); 3392861Speter if (ferror(stdout)) 3402861Speter outerr(); 3412861Speter switch (c) { 3422861Speter case '\n': 3432861Speter outcol = 0; 3442861Speter flush(); 3452861Speter break; 3462861Speter case '\t': 347*30650Slepreau outcol += 8; 348*30650Slepreau outcol &= ~07; 3492861Speter break; 3502861Speter case '\b': 3512861Speter if (outcol) 3522861Speter outcol--; 3532861Speter break; 3542861Speter default: 3552861Speter outcol++; 3562861Speter case '\f': 3572861Speter break; 3582861Speter } 3592861Speter } 3602861Speter 3612861Speter flush() 3622861Speter { 3632861Speter 3642861Speter fflush(stdout); 3652861Speter if (ferror(stdout)) 3662861Speter outerr(); 3672861Speter } 3682861Speter 3692861Speter pptab() 3702861Speter { 3712861Speter register int i; 3722861Speter 3732861Speter if (noprint()) 3742861Speter return; 3752861Speter i = pplev[PRFN] + profile ? 44 + unit : 28; 3762861Speter /* 3772861Speter if (outcol > i + 8) { 3782861Speter ppnl(); 3792861Speter i =+ 8; 3802861Speter } 3812861Speter */ 3822861Speter do 3832861Speter putchar('\t'); 3842861Speter while (outcol < i); 3852861Speter } 3862861Speter 3872861Speter outerr() 3882861Speter { 3892861Speter 3902861Speter perror(stdoutn); 3912861Speter pexit(DIED); 3922861Speter } 393