BSD 3 development
[unix-history] / usr / src / cmd / pxp / 0.h
CommitLineData
391b70cb
BJ
1/* Copyright (c) 1979 Regents of the University of California */
2/* #define DEBUG */
3#define CHAR
4#define STATIC
5/*
6 * pxp - Pascal execution profiler
7 *
8 * Bill Joy
9 * University of California, Berkeley (UCB)
10 * Version 1.1 February 1978
11 */
12
13/*
14 * Option flags
15 *
16 * The following options are recognized on the command line by pxp.
17 * Only the u, w, and z options here have effect in comments in the
18 * program; the others are command line only, and unrelated
19 * to the options with the same designations in comments.
20 *
21 * a Print all routines in a profile; normally, routines
22 * which have never been executed have their bodies suppressed.
23 *
24 * c Extract profile data from the file core, or the file
25 * named after the last argument rather than the file 'pmon.out'.
26 * Must be used with z to have an effect.
27 *
28 * d Suppress declarations
29 *
30 * f Fully parenthesize expressions.
31 *
32 * j Left justify all procedures and functions rather than
33 * indenting them.
34 *
35 * n Eject a new page in the listing as each 'include' file
36 * is incorporated into the profile.
37 *
38 * o Put output prettyprint in first argument file
39 *
40 * p Pretty print a main program without processing
41 * the include statements.
42 *
43 * t Print a table summarizing procedure and function call counts.
44 *
45 * u Card image mode; only the first 72 chars on a line count.
46 *
47 * w Suppress certain warning diagnostics.
48 *
49 * z Generate an execution profile of the program.
50 * May also be followed by a list of procedure and function
51 * names mixed, if desired, with include file names.
52 * Only these procedures and functions, and the contents
53 * of the specified include files will then be profiled.
54 *
55 * [23456789] Use the specified number of spaces for the basic
56 * indenting unit in the program.
57 *
58 * _ Underline keywords in the output.
59 */
60
61char all, core, nodecl, full, justify, pmain, stripcomm, table, underline;
62char profile, onefile;
63char *firstname, *stdoutn;
64#ifdef DEBUG
65char fulltrace, errtrace, testtrace, yyunique, typetest;
66#endif
67int unit;
68
69/*
70 * The flag nojunk means that header lines
71 * of procedures and functions are to be suppressed
72 * when the z option is off.
73 * It is the default when command line z option
74 * control is specified.
75 *
76 * The flag noinclude indicates that include statements are not
77 * to be processed since we are pretty-printing the contents
78 * of a single file.
79 *
80 * The flag bracket indicates that the source code should be
81 * bracketed with lines of the form
82 * program x(output);
83 * and
84 * begin end.
85 * so that an include will pretty print without syntax errors.
86 */
87char nojunk, noinclude, bracket;
88
89/*
90 * IMPORTANT NOTE
91 *
92 * Many of the following globals are shared by pi and pxp.
93 * For more discussion of these see the available documentation
94 * on the structure of pi.
95 */
96
97/*
98 * Each option has a stack of 17 option values, with opts giving
99 * the current, top value, and optstk the value beneath it.
100 * One refers to option `l' as, e.g., opt('l') in the text for clarity.
101 */
102char opts[26];
103int optstk[26];
104
105#define opt(c) opts[c-'a']
106\f
107/*
108 * NOTES ON THE DYNAMIC NATURE OF THE DATA STRUCTURES
109 *
110 * Pxp uses expandable tables for its string table
111 * hash table, and parse tree space. The following
112 * definitions specify the size of the increments
113 * for these items in fundamental units so that
114 * each uses approximately 1024 bytes.
115 */
116
117#define STRINC 1024 /* string space increment */
118#define TRINC 512 /* tree space increment */
119#define HASHINC 509 /* hash table size in words, each increment */
120
121/*
122 * The initial sizes of the structures.
123 * These should be large enough to profile
124 * an "average" sized program so as to minimize
125 * storage requests.
126 * On a small system or and 11/34 or 11/40
127 * these numbers can be trimmed to make the
128 * profiler smaller.
129 */
130#define ITREE 2000
131#define IHASH 509
132
133/*
134 * The following limits on hash and tree tables currently
135 * allow approximately 1200 symbols and 20k words of tree
136 * space. The fundamental limit of 64k total data space
137 * should be exceeded well before these are full.
138 */
139#define MAXHASH 4
140#define MAXTREE 30
141#define MAXDEPTH 150
142\f
143/*
144 * ERROR RELATED DEFINITIONS
145 */
146
147/*
148 * Exit statuses to pexit
149 *
150 * AOK
151 * ERRS Compilation errors inhibit obj productin
152 * NOSTART Errors before we ever got started
153 * DIED We ran out of memory or some such
154 */
155#define AOK 0
156#define ERRS 1
157#define NOSTART 2
158#define DIED 3
159
160char Recovery;
161/*
162 * The flag eflg is set whenever we have a hard error.
163 * The character in errpfx will precede the next error message.
164 */
165int eflg;
166char errpfx;
167
168#define setpfx(x) errpfx = x
169
170#define standard() setpfx('s')
171#define warning() setpfx('w')
172#define recovered() setpfx('e')
173#define quit() setpfx('Q')
174\f
175/*
176 * SEMANTIC DEFINITIONS
177 */
178
179#define NIL 0
180
181/*
182 * NOCON and SAWCON are flags in the tree telling whether
183 * a constant set is part of an expression.
184 */
185#define NOCON 0
186#define SAWCON 1
187
188/*
189 * The variable cbn gives the current block number.
190 * The variable lastbn gives the block number before
191 * it last changed and is used to know that we were
192 * in a nested procedure so that we can print
193 * begin { solve }
194 * when solve has nested procedures or functions in it.
195 */
196int cbn, lastbn;
197
198/*
199 * The variable line is the current semantic
200 * line and is set in stat.c from the numbers
201 * embedded in statement type tree nodes.
202 */
203int line;
204
205/*
206 * The size of the display
207 * which defines the maximum nesting
208 * of procedures and functions allowed.
209 */
210#define DSPLYSZ 20
211\f
212/*
213 * Routines which need types
214 * other than "integer" to be
215 * assumed by the compiler.
216 */
217int *tree();
218int *hash();
219char *alloc();
220long cntof();
221long nowcnt();
222
223/*
224 * Funny structures to use
225 * pointers in wild and wooly ways
226 */
227struct {
228 char pchar;
229};
230struct {
231 int pint;
232 int pint2;
233};
234struct {
235 long plong;
236};
237struct {
238 double pdouble;
239};
240
241#define OCT 1
242#define HEX 2
243\f
244/*
245 * MAIN PROGRAM GLOBALS, MISCELLANY
246 */
247
248/*
249 * Variables forming a data base referencing
250 * the command line arguments with the "z" option.
251 */
252char **pflist;
253int pflstc;
254int pfcnt;
255
256char *filename; /* current source file name */
257char *lastname; /* last file name printed */
258long tvec; /* mod time of the source file */
259long ptvec; /* time profiled */
260char printed; /* current file has been printed */
261char hadsome; /* had some output */
262\f
263/*
264 * PROFILING AND FORMATTING DEFINITIONS
265 */
266
267/*
268 * The basic counter information recording structure.
269 * This is global only because people outside
270 * the cluster in pmon.c need to know its size.
271 */
272struct pxcnt {
273 long ntimes; /* the count this structure is all about */
274 int counter; /* a unique counter number for us */
275 int gos; /* global goto count when we hatched */
276 int printed; /* are we considered to have been printed? */
277} pfcnts[DSPLYSZ];
278
279/*
280 * The pieces we divide the output line indents into:
281 * line# PRFN label: STAT 999.---| DECL text
282 */
283#define STAT 0
284#define DECL 1
285#define PRFN 2
286
287/*
288 * Gocnt records the total number of goto's and
289 * cnts records the current counter for generating
290 * COUNT operators.
291 */
292int gocnt;
293int cnts;
294
295#include <stdio.h>
296
297#undef putchar