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

##### Functions

    copyfile          X
    magic             X
    magic2            X
    writef            X
    yymain            X

##### Variables

    line              X

##### Macros

    HEAD_BYTES        X

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

#### Defined functions

copyfile defined in line 96; used 1 times

- in line 89

magic defined in line 129; used 4 times

- in line 51, 118, 142, 161

magic2 defined in line 157; used 1 times

- in line 70

writef defined in line 175; used 1 times

- in line 84

yymain defined in line 32; used 1 times

- in /usr/src/ucb/pascal/pi/main.c line 181

#### Defined variables

line defined in line 25; never used

#### Defined macros

HEAD_BYTES defined in line 135; used 5 times

- in line 136-141(2), 150, 168-169(2)

Last modified: 1996-10-24 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 708 |