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

##### Functions

    copyfile          X
    magic             X
    magic2            X
    writef            X
    yymain            X

##### Variables

    line              X

##### Macros

    HEAD_BYTES        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: static char sccsid[] = "@(#)yymain.c	5.2 (Berkeley) 6/21/85";
       9: #endif not lint
      10:
      11: /*
      12:  * pi - Pascal interpreter code translator
      13:  *
      14:  * Charles Haley, Bill Joy UCB
      15:  * Version 1.2 November 1978
      16:  *
      17:  *
      18:  * pxp - Pascal execution profiler
      19:  *
      20:  * Bill Joy UCB
      21:  * Version 1.2 November 1978
      22:  */
      23:
      24: #include "whoami.h"
      25: #include "0.h"
      26: #include "yy.h"
      27:
      28: int line = 1;
      29:
      30: /*
      31:  * Yymain initializes each of the utility
      32:  * clusters and then starts the processing
      33:  * by calling yyparse.
      34:  */
      35: yymain()
      36: {
      37:
      38:     /*
      39: 	 * Initialize the scanner
      40: 	 */
      41: #ifdef PXP
      42:     if (bracket == 0) {
      43: #endif
      44:         if (getline() == -1) {
      45:             Perror(filename, "No lines in file");
      46:             pexit(NOSTART);
      47:         }
      48: #ifdef PXP
      49:     } else
      50:         yyline = 0;
      51: #endif
      52:
      53: #ifdef PI
      54:     magic();
      55:
      56: #endif
      57:     /*
      58: 	 * Initialize the clusters
      59: 	 *
      60: 	initstring();
      61: 	 */
      62:     inithash();
      63:     inittree();
      64: #ifdef PI
      65:     initnl();
      66: #endif
      67:
      68:     /*
      69: 	 * Process the input
      70: 	 */
      71:     yyparse();
      72: #ifdef PI
      73:     magic2();
      74: #ifdef DEBUG
      75:     dumpnl(0);
      76: #endif
      77: #endif
      78: #ifdef PXP
      79:     prttab();
      80:     if (onefile) {
      81:         extern int outcol;
      82:
      83:         if (outcol)
      84:             putchar('\n');
      85:         flush();
      86:         if (eflg) {
      87:             writef(2, "File not rewritten because of errors\n");
      88:             pexit(ERRS);
      89:         }
      90:         signal(1, 1);
      91:         signal(2, 1);
      92:         copyfile();
      93:     }
      94: #endif
      95:     pexit(eflg ? ERRS : AOK);
      96: }
      97:
      98: #ifdef PXP
      99: copyfile()
     100: {
     101:     register int c;
     102:     char buf[BUFSIZ];
     103:
     104:     if (freopen(stdoutn, "r", stdin) == NULL) {
     105:         perror(stdoutn);
     106:         pexit(ERRS);
     107:     }
     108:     if (freopen(firstname, "w", stdout) == NULL) {
     109:         perror(firstname);
     110:         pexit(ERRS);
     111:     }
     112:     while ((c = getchar()) > 0)
     113:         putchar(c);
     114:     if (ferror(stdout))
     115:         perror(stdout);
     116: }
     117: #endif
     118:
     119: static
     120: struct {
     121:     int     magic;
     122:     unsigned    txt_size;
     123:     unsigned    data_size;
     124:     unsigned    bss_size;
     125:     unsigned    syms_size;
     126:     unsigned    entry_point;
     127:     unsigned    tr_size;
     128:     unsigned    dr_size;
     129: } header;
     130:
     131: #ifdef PI
     132: magic()
     133: {
     134:
     135:     /*
     136:      *	this is the size of /usr/lib/npxheader
     137:      */
     138: #define HEAD_BYTES  1024
     139:     short       buf[HEAD_BYTES / sizeof ( short )];
     140:     unsigned    *ubuf = buf;
     141:     register int    hf, i;
     142:
     143:     hf = open("/usr/lib/npx_header", 0);
     144:     if (hf >= 0 && read(hf, buf, HEAD_BYTES) > sizeof header) {
     145:         header.magic = ubuf[0];
     146:         header.txt_size = ubuf[1];
     147:         header.data_size = ubuf[2];
     148:         header.bss_size = ubuf[3];
     149:         header.syms_size = ubuf[4];
     150:         header.entry_point = ubuf[5];
     151:         header.tr_size = ubuf[6];
     152:         header.dr_size = ubuf[7];
     153:         for (i = 0; i < HEAD_BYTES / sizeof ( short ); i++)
     154:             word(buf[i]);
     155:     }
     156:     close(hf);
     157:     word(0404);
     158: }
     159:
     160: magic2()
     161: {
     162:     short i;
     163:
     164:     if  (header.magic != 0407)
     165:         panic ( "magic2" );
     166:     pflush();
     167:     lseek(ofil, 0l, 0);
     168:     header.data_size = ( unsigned ) lc - header.txt_size;
     169:     header.data_size =- sizeof header;
     170:     write(ofil, &header, sizeof header);
     171:     lseek(ofil, ( long ) ( HEAD_BYTES - sizeof ( short ) ) , 0);
     172:     i = ( ( unsigned ) lc) - HEAD_BYTES;
     173:     write(ofil, &i, 2);
     174: }
     175: #endif
     176:
     177: #ifdef PXP
     178: writef(i, cp)
     179: {
     180:
     181:     write(i, cp, strlen(cp));
     182: }
     183: #endif

#### Defined functions

copyfile defined in line 99; used 1 times

- in line 92

magic defined in line 132; used 4 times

- in line 54, 121, 145, 164

magic2 defined in line 160; used 1 times

- in line 73

writef defined in line 178; used 1 times

- in line 87

yymain defined in line 35; used 1 times

- in /usr/src/ucb/PORT/pascal/pxp/main.c line 213

#### Defined variables

line defined in line 28; never used
sccsid defined in line 8; never used

#### Defined macros

HEAD_BYTES defined in line 138; used 5 times

- in line 139-144(2), 153, 171-172(2)

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