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