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