# 2.11BSD#431 - /usr/src/ucb/PORT/pascal/pxp/main.c

##### Functions

    header            X
    main              X
    onintr            X
    pexit             X
    puthedr           X

##### Variables

    copyright         X
    howfile           X
    stdoutn           X
    ugh               X
    unit              X
    usagestr          X

       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:
       7: #ifndef lint
       8: char copyright[] =
       9: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
      10:  All rights reserved.\n";
      11: #endif not lint
      12:
      13: #ifndef lint
      14: static char sccsid[] = "@(#)main.c	5.1 (Berkeley) 6/5/85";
      15: #endif not lint
      16:
      17: /*
      18:  * pxp - Pascal execution profiler
      19:  *
      20:  * Bill Joy UCB
      21:  * Version 1.2 January 1979
      22:  */
      23:
      24: #include "0.h"
      25:
      26: /*
      27:  * This program is described in detail in the "PXP 1.0 Implementation Notes"
      28:  *
      29:  * The structure of pxp is very similar to that of the translator pi.
      30:  * The major new pieces here are a set of profile data maintenance
      31:  * routines in the file pmon.c and a set of pretty printing utility
      32:  * routines in the file pp.c.
      33:  * The semantic routines of pi have been rewritten to do a simple
      34:  * reformatting tree walk, the parsing and scanning remains
      35:  * the same.
      36:  *
      37:  * This version does not place more than one statement per line and
      38:  * is not very intelligent about folding long lines, with only
      39:  * an ad hoc way of folding case label list and enumerated type
      40:  * declarations being implemented.
      41:  */
      42:
      43: char    usagestr[] =
      44:     "pxp [ -acdefjntuw_ ] [ -23456789 ] [ -z [ name ... ] ] name.p";
      45: char    *howfile =  "/usr/lib/how_pxp";
      46: char    *stdoutn =  "Standard output";
      47:
      48: int unit =  4;
      49:
      50: FILE    *ibuf;
      51: extern  char errout;
      52:
      53: /*
      54:  * Main program for pxp.
      55:  * Process options, then call yymain
      56:  * to do all the real work.
      57:  */
      58: FILE *ibp;
      59: main(argc, argv)
      60:     int argc;
      61:     char *argv[];
      62: {
      63:     register char *cp;
      64:     register c;
      65:
      66:     if (argv[0][0] == 'a')
      67:         howfile =+ 9;
      68:     argc--, argv++;
      69:     if (argc == 0) {
      70:         execl("/bin/cat", "cat", howfile, 0);
      71:         goto usage;
      72:     }
      73:     while (argc > 0) {
      74:         cp = argv[0];
      75:         if (*cp++ != '-')
      76:             break;
      77:         while (c = *cp++) switch (c) {
      78: #ifdef DEBUG
      79:             case 'T':
      80:                 typetest++;
      81:                 continue;
      82:             case 'A':
      83:                 testtrace++;
      84:             case 'F':
      85:                 fulltrace++;
      86:             case 'E':
      87:                 errtrace++;
      88:                 continue;
      89:             case 'C':
      90:                 yycosts();
      91:                 pexit(NOSTART);
      92:             case 'U':
      93:                 yyunique++;
      94:                 continue;
      95: #endif
      96:             case 'a':
      97:                 all++;
      98:                 continue;
      99:             case 'c':
     100:                 core++;
     101:                 continue;
     102:             case 'd':
     103:                 nodecl++;
     104:                 continue;
     105:             case 'e':
     106:                 noinclude = -1;
     107:                 continue;
     108:             case 'f':
     109:                 full++;
     110:                 continue;
     111:             case 'j':
     112:                 justify++;
     113:                 continue;
     114:             case 'l':
     115:             case 'n':
     116:                 togopt(c);
     117:                 continue;
     118:             case 'o':
     119:                 onefile++;
     120:                 continue;
     121:             case 's':
     122:                 stripcomm++;
     123:                 continue;
     124:             case 't':
     125:                 table++;
     126:                 continue;
     127:             case 'u':
     128:             case 'w':
     129:                 togopt(c);
     130:                 continue;
     131:             case 'z':
     132:                 profile++;
     133:                 pflist = argv + 1;
     134:                 pflstc = 0;
     135:                 while (argc > 1) {
     136:                     if (dotted(argv[1], 'p'))
     137:                         break;
     138:                     pflstc++, argc--, argv++;
     139:                 }
     140:                 if (pflstc == 0)
     141:                     togopt(c);
     142:                 else
     143:                     nojunk++;
     144:                 continue;
     145:             case '_':
     146:                 underline++;
     147:                 continue;
     148: #			ifdef RMOTHERS
     149:             case 'O':
     150:                 rmothers++;
     151:                 continue;
     152: #			endif RMOTHERS
     153:             default:
     154:                 if (c >= '2' && c <= '9') {
     155:                     unit = c - '0';
     156:                     continue;
     157:                 }
     158: usage:
     159:                 Perror("Usage", usagestr);
     160:                 exit(1);
     161:         }
     162:         argc--, argv++;
     163:     }
     164:     if (core && !profile && !table)
     165:         profile++;
     166:     if (argc == 0 || argc > 2)
     167:         goto usage;
     168:     if (profile || table) {
     169:         noinclude = 0;
     170:         if (argc == 2) {
     171:             argc--;
     172:             getit(argv[1]);
     173:         } else
     174:             getit(core ? "core" : "pmon.out");
     175:     } else
     176:         noinclude++;
     177:     if (argc != 1)
     178:         goto usage;
     179:     firstname = filename = argv[0];
     180:     if (dotted(filename, 'i')) {
     181:         if (profile || table)
     182:             goto usage;
     183:         noinclude = 1;
     184:         bracket++;
     185:     } else if (!dotted(filename, 'p')) {
     186:         Perror(filename, "Name must end in '.p'");
     187:         exit(1);
     188:     }
     189:     if ((ibuf = fopen(filename, "r")) == NULL)
     190:         perror(filename), pexit(NOSTART);
     191:     ibp = ibuf;
     192:     if (onefile) {
     193:         int onintr();
     194:
     195:         cp = (stdoutn = "/tmp/pxp00000") + 13;
     196:         signal(2, onintr);
     197:         for (c = getpid(); c; c =/ 10)
     198:             *--cp =| (c % 10);
     199:         if (freopen(stdoutn, "w", stdout) == NULL)
     200: bad:
     201:             perror(stdoutn), exit(1);
     202:     } else {
     203:         extern char _sobuf[BUFSIZ];
     204:         setbuf(stdout, _sobuf);
     205:     }
     206:     if (profile || opt('l')) {
     207:         opt('n')++;
     208:         yysetfile(filename);
     209:         opt('n')--;
     210:     } else
     211:         lastname = filename;
     212:     errout = 2;
     213:     yymain();
     214:     /* No return */
     215: }
     216:
     217: /*
     218:  * Put a header on a top of a page
     219:  */
     220: header()
     221: {
     222:     extern char version[];
     223:     static char reenter;
     224:     extern int outcol;
     225:
     226:     gettime(filename);
     227:     if (reenter) {
     228:         if (outcol)
     229:             putchar('\n');
     230:         putchar('\f');
     231:     }
     232:     reenter++;
     233:     if (profile || table) {
     234:         printf("Berkeley Pascal PXP -- Version %s\n\n%s  %s\n\n",
     235:             version, myctime(&tvec), filename);
     236:         printf("Profiled %s\n\n", myctime(&ptvec));
     237:     }
     238: }
     239:
     240: char    ugh[] = "Fatal error in pxp\n";
     241: /*
     242:  * Exit from the Pascal system.
     243:  * We throw in an ungraceful termination
     244:  * message if c > 1 indicating a severe
     245:  * error such as running out of memory
     246:  * or an internal inconsistency.
     247:  */
     248: pexit(c)
     249:     int c;
     250: {
     251:     register char *cp;
     252:     extern int outcol;
     253:
     254:     if (stdoutn[0] == '/')
     255:         unlink(stdoutn);
     256:     if (outcol)
     257:         putchar('\n');
     258:     flush();
     259:     if (c == DIED)
     260:         write(2, ugh, sizeof ugh);
     261:     exit(c);
     262: }
     263:
     264: onintr()
     265: {
     266:
     267:     pexit(DIED);
     268: }
     269:
     270: puthedr()
     271: {
     272:
     273:     yysetfile(filename);
     274: }

#### Defined functions

header defined in line 220; used 2 times

- in /usr/src/ucb/PORT/pascal/pxp/pmon.c line 225
- in /usr/src/ucb/PORT/pascal/pxp/yyput.c line 264

main defined in line 59; never used
onintr defined in line 264; used 2 times

- in line 193-196(2)

pexit defined in line 248; used 17 times

- in line 91, 190, 267
- in /usr/src/ucb/PORT/pascal/pxp/error.c line 58
- in /usr/src/ucb/PORT/pascal/pxp/pmon.c line 81, 97, 124, 361
- in /usr/src/ucb/PORT/pascal/pxp/pp.c line 391
- in /usr/src/ucb/PORT/pascal/pxp/yycomm.c line 227
- in /usr/src/ucb/PORT/pascal/pxp/yyerror.c line 94
- in /usr/src/ucb/PORT/pascal/pxp/yymain.c line 46, 88, 95, 106-110(2)
- in /usr/src/ucb/PORT/pascal/pxp/yyput.c line 164

puthedr defined in line 270; used 6 times

- in /usr/src/ucb/PORT/pascal/pxp/const.c line 33
- in /usr/src/ucb/PORT/pascal/pxp/fdec.c line 47, 201
- in /usr/src/ucb/PORT/pascal/pxp/lab.c line 30
- in /usr/src/ucb/PORT/pascal/pxp/type.c line 32
- in /usr/src/ucb/PORT/pascal/pxp/var.c line 32

#### Defined variables

copyright defined in line 8; never used
howfile defined in line 45; used 2 times

- in line 67-70(2)

sccsid defined in line 14; never used
stdoutn defined in line 46; used 5 times

- in line 195-201(3), 254-255(2)

ugh defined in line 240; used 2 times

- in line 260(2)

unit defined in line 48; used 1 times

- in line 155

usagestr defined in line 43; used 1 times

- in line 159

Last modified: 1985-06-06 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1508 |