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