1*12391Speter static char *sccsid = "@(#)yymain.c 1.2 (Berkeley) 05/11/83"; 22870Speter /* Copyright (c) 1979 Regents of the University of California */ 32870Speter # 42870Speter /* 52870Speter * pi - Pascal interpreter code translator 62870Speter * 72870Speter * Charles Haley, Bill Joy UCB 82870Speter * Version 1.2 November 1978 92870Speter * 102870Speter * 112870Speter * pxp - Pascal execution profiler 122870Speter * 132870Speter * Bill Joy UCB 142870Speter * Version 1.2 November 1978 152870Speter */ 162870Speter 17*12391Speter #include "whoami.h" 182870Speter #include "0.h" 192870Speter #include "yy.h" 202870Speter 212870Speter int line = 1; 222870Speter 232870Speter /* 242870Speter * Yymain initializes each of the utility 252870Speter * clusters and then starts the processing 262870Speter * by calling yyparse. 272870Speter */ 282870Speter yymain() 292870Speter { 302870Speter 312870Speter /* 322870Speter * Initialize the scanner 332870Speter */ 342870Speter #ifdef PXP 352870Speter if (bracket == 0) { 362870Speter #endif 372870Speter if (getline() == -1) { 382870Speter Perror(filename, "No lines in file"); 392870Speter pexit(NOSTART); 402870Speter } 412870Speter #ifdef PXP 422870Speter } else 432870Speter yyline = 0; 442870Speter #endif 452870Speter 462870Speter #ifdef PI 472870Speter magic(); 482870Speter 492870Speter #endif 502870Speter /* 512870Speter * Initialize the clusters 522870Speter * 532870Speter initstring(); 542870Speter */ 552870Speter inithash(); 562870Speter inittree(); 572870Speter #ifdef PI 582870Speter initnl(); 592870Speter #endif 602870Speter 612870Speter /* 622870Speter * Process the input 632870Speter */ 642870Speter yyparse(); 652870Speter #ifdef PI 662870Speter magic2(); 672870Speter #ifdef DEBUG 682870Speter dumpnl(0); 692870Speter #endif 702870Speter #endif 712870Speter #ifdef PXP 722870Speter prttab(); 732870Speter if (onefile) { 742870Speter extern int outcol; 752870Speter 762870Speter if (outcol) 772870Speter putchar('\n'); 782870Speter flush(); 792870Speter if (eflg) { 802870Speter writef(2, "File not rewritten because of errors\n"); 812870Speter pexit(ERRS); 822870Speter } 832870Speter signal(1, 1); 842870Speter signal(2, 1); 852870Speter copyfile(); 862870Speter } 872870Speter #endif 882870Speter pexit(eflg ? ERRS : AOK); 892870Speter } 902870Speter 912870Speter #ifdef PXP 922870Speter copyfile() 932870Speter { 942870Speter register int c; 952870Speter char buf[BUFSIZ]; 962870Speter 972870Speter if (freopen(stdoutn, "r", stdin) == NULL) { 982870Speter perror(stdoutn); 992870Speter pexit(ERRS); 1002870Speter } 1012870Speter if (freopen(firstname, "w", stdout) == NULL) { 1022870Speter perror(firstname); 1032870Speter pexit(ERRS); 1042870Speter } 1052870Speter while ((c = getchar()) > 0) 1062870Speter putchar(c); 1072870Speter if (ferror(stdout)) 1082870Speter perror(stdout); 1092870Speter } 1102870Speter #endif 1112870Speter 1122870Speter static 1132870Speter struct { 1142870Speter int magic; 1152870Speter unsigned txt_size; 1162870Speter unsigned data_size; 1172870Speter unsigned bss_size; 1182870Speter unsigned syms_size; 1192870Speter unsigned entry_point; 1202870Speter unsigned tr_size; 1212870Speter unsigned dr_size; 1222870Speter } header; 1232870Speter 1242870Speter #ifdef PI 1252870Speter magic() 1262870Speter { 1272870Speter 1282870Speter /* 1292870Speter * this is the size of /usr/lib/npxheader 1302870Speter */ 1312870Speter #define HEAD_BYTES 1024 1322870Speter short buf[HEAD_BYTES / sizeof ( short )]; 1332870Speter unsigned *ubuf = buf; 1342870Speter register int hf, i; 1352870Speter 1362870Speter hf = open("/usr/lib/npx_header", 0); 1372870Speter if (hf >= 0 && read(hf, buf, HEAD_BYTES) > sizeof header) { 1382870Speter header.magic = ubuf[0]; 1392870Speter header.txt_size = ubuf[1]; 1402870Speter header.data_size = ubuf[2]; 1412870Speter header.bss_size = ubuf[3]; 1422870Speter header.syms_size = ubuf[4]; 1432870Speter header.entry_point = ubuf[5]; 1442870Speter header.tr_size = ubuf[6]; 1452870Speter header.dr_size = ubuf[7]; 1462870Speter for (i = 0; i < HEAD_BYTES / sizeof ( short ); i++) 1472870Speter word(buf[i]); 1482870Speter } 1492870Speter close(hf); 1502870Speter word(0404); 1512870Speter } 1522870Speter 1532870Speter magic2() 1542870Speter { 1552870Speter short i; 1562870Speter 1572870Speter if (header.magic != 0407) 1582870Speter panic ( "magic2" ); 1592870Speter pflush(); 1602870Speter lseek(ofil, 0l, 0); 1612870Speter header.data_size = ( unsigned ) lc - header.txt_size; 1622870Speter header.data_size =- sizeof header; 1632870Speter write(ofil, &header, sizeof header); 1642870Speter lseek(ofil, ( long ) ( HEAD_BYTES - sizeof ( short ) ) , 0); 1652870Speter i = ( ( unsigned ) lc) - HEAD_BYTES; 1662870Speter write(ofil, &i, 2); 1672870Speter } 1682870Speter #endif 1692870Speter 1702870Speter #ifdef PXP 1712870Speter writef(i, cp) 1722870Speter { 1732870Speter 1742870Speter write(i, cp, strlen(cp)); 1752870Speter } 1762870Speter #endif 177