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

Defined variables

Recovery defined in line 197; used 1 times
all defined in line 76; used 2 times
cbn defined in line 234; used 20 times
cnts defined in line 337; used 6 times
core defined in line 76; used 4 times
errpfx defined in line 203; used 12 times
errtrace defined in line 83; used 1 times
firstname defined in line 81; used 3 times
full defined in line 76; used 6 times
fulltrace defined in line 83; used 1 times
gocnt defined in line 336; used 5 times
lastbn defined in line 234; used 5 times
lastname defined in line 301; used 5 times
nojunk defined in line 105; used 2 times
onefile defined in line 77; used 3 times
opts defined in line 120; used 4 times
optstk defined in line 121; used 4 times
pfcnt defined in line 298; used 4 times
pfcnts defined in line 321; used 2 times
pflist defined in line 296; used 1 times
pflstc defined in line 297; used 3 times
pmain defined in line 76; never used
printed defined in line 304; used 13 times
ptvec defined in line 303; used 2 times
testtrace defined in line 83; used 1 times
tvec defined in line 302; used 1 times
typetest defined in line 83; used 1 times
underline defined in line 76; used 2 times
yyunique defined in line 83; used 1 times

Defined struct's

cstruct defined in line 271; never used
pxcnt defined in line 316; used 18 times

Defined macros

AOK defined in line 192; used 1 times
CHAR defined in line 10; used 2 times
DSPLYSZ defined in line 248; used 1 times
HASHINC defined in line 137; never used
HEX defined in line 286; used 1 times
IHASH defined in line 149; never used
ITREE defined in line 148; never used
MAXDEPTH defined in line 178; never used
MAXHASH defined in line 166; never used
MAXTREE defined in line 167; never used
NOCON defined in line 223; never used
OCT defined in line 285; used 2 times
PRFN defined in line 329; used 8 times
SAWCON defined in line 224; never used
STACK_MULTIPLIER defined in line 176; used 1 times
STRINC defined in line 135; never used
TABLE_MULTIPLIER defined in line 164; used 2 times
TRINC defined in line 136; never used
TR_NIL defined in line 265; never used
continuation defined in line 211; never used
quit defined in line 210; never used
recovered defined in line 209; never used
setpfx defined in line 205; used 7 times
standard defined in line 207; never used
warning defined in line 208; never used

Usage of this include

Last modified: 1985-06-06
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1880
Valid CSS Valid XHTML 1.0 Strict