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