home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Distributions / ucb / spencer_2bsd.tar.gz / 2bsd.tar / src / pxp / 0.h next >
C/C++ Source or Header  |  1980-02-17  |  7KB  |  297 lines

  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.  
  61. char    all, core, nodecl, full, justify, pmain, stripcomm, table, underline;
  62. char    profile, onefile;
  63. char    *firstname, *stdoutn;
  64. #ifdef DEBUG
  65. char    fulltrace, errtrace, testtrace, yyunique, typetest;
  66. #endif
  67. int    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.  */
  87. char    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.  */
  102. char    opts[26];
  103. int    optstk[26];
  104.  
  105. #define opt(c) opts[c-'a']
  106.  
  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.  
  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.  
  160. char    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.  */
  165. int    eflg;
  166. char    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.  
  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.  */
  196. int    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.  */
  203. int    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.  
  212. /*
  213.  * Routines which need types
  214.  * other than "integer" to be
  215.  * assumed by the compiler.
  216.  */
  217. int    *tree();
  218. int    *hash();
  219. char    *alloc();
  220. long    cntof();
  221. long    nowcnt();
  222.  
  223. /*
  224.  * Funny structures to use
  225.  * pointers in wild and wooly ways
  226.  */
  227. struct {
  228.     char    pchar;
  229. };
  230. struct {
  231.     int    pint;
  232.     int    pint2;
  233. };
  234. struct {
  235.     long    plong;
  236. };
  237. struct {
  238.     double    pdouble;
  239. };
  240.  
  241. #define    OCT    1
  242. #define    HEX    2
  243.  
  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.  */
  252. char    **pflist;
  253. int    pflstc;
  254. int    pfcnt;
  255.  
  256. char    *filename;        /* current source file name */
  257. char    *lastname;        /* last file name printed */
  258. int    tvec[2];        /* mod time of the source file */
  259. int    ptvec[2];        /* time profiled */
  260. char    printed;        /* current file has been printed */
  261. char    hadsome;        /* had some output */
  262.  
  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.  */
  272. struct 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.  */
  292. int    gocnt;
  293. int    cnts;
  294.  
  295. int    fout[259];
  296. int    flush(), putchar();
  297.