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