1*788Speter /* Copyright (c) 1979 Regents of the University of California */ 2*788Speter 3*788Speter static char sccsid[] = "@(#)yymain.c 1.1 08/27/80"; 4*788Speter 5*788Speter #include "whoami.h" 6*788Speter #include "0.h" 7*788Speter #include "yy.h" 8*788Speter #include <a.out.h> 9*788Speter #include "objfmt.h" 10*788Speter #include <signal.h> 11*788Speter 12*788Speter short line = 1; 13*788Speter 14*788Speter /* 15*788Speter * Yymain initializes each of the utility 16*788Speter * clusters and then starts the processing 17*788Speter * by calling yyparse. 18*788Speter */ 19*788Speter yymain() 20*788Speter { 21*788Speter 22*788Speter /* 23*788Speter * Initialize the scanner 24*788Speter */ 25*788Speter #ifdef PXP 26*788Speter if (bracket == 0) { 27*788Speter #endif 28*788Speter if (getline() == -1) { 29*788Speter Perror(filename, "No lines in file"); 30*788Speter pexit(NOSTART); 31*788Speter } 32*788Speter #ifdef PXP 33*788Speter } else 34*788Speter yyline = 0; 35*788Speter #endif 36*788Speter 37*788Speter #ifdef PI 38*788Speter # ifdef OBJ 39*788Speter magic(); 40*788Speter # endif OBJ 41*788Speter #endif 42*788Speter /* 43*788Speter * Initialize the clusters 44*788Speter * 45*788Speter initstring(); 46*788Speter */ 47*788Speter inithash(); 48*788Speter inittree(); 49*788Speter #ifdef PI 50*788Speter initnl(); 51*788Speter #endif 52*788Speter 53*788Speter /* 54*788Speter * Process the input 55*788Speter */ 56*788Speter yyparse(); 57*788Speter #ifdef PI 58*788Speter # ifdef OBJ 59*788Speter magic2(); 60*788Speter # endif OBJ 61*788Speter # ifdef DEBUG 62*788Speter dumpnl(0); 63*788Speter # endif 64*788Speter #endif 65*788Speter #ifdef PXP 66*788Speter prttab(); 67*788Speter if (onefile) { 68*788Speter extern int outcol; 69*788Speter 70*788Speter if (outcol) 71*788Speter pchr('\n'); 72*788Speter flush(); 73*788Speter if (eflg) { 74*788Speter writef(2, "File not rewritten because of errors\n"); 75*788Speter pexit(ERRS); 76*788Speter } 77*788Speter signal(SIGHUP, SIG_IGN); 78*788Speter signal(SIGINT, SIG_IGN); 79*788Speter copyfile(); 80*788Speter } 81*788Speter #endif 82*788Speter pexit(eflg ? ERRS : AOK); 83*788Speter } 84*788Speter 85*788Speter #ifdef PXP 86*788Speter copyfile() 87*788Speter { 88*788Speter extern int fout[]; 89*788Speter register int c; 90*788Speter 91*788Speter close(1); 92*788Speter if (creat(firstname, 0644) != 1) { 93*788Speter perror(firstname); 94*788Speter pexit(ERRS); 95*788Speter } 96*788Speter lseek(fout[0], 0l, 0); 97*788Speter while ((c = read(fout[0], &fout[3], 512)) > 0) { 98*788Speter if (write(1, &fout[3], c) != c) { 99*788Speter perror(firstname); 100*788Speter pexit(ERRS); 101*788Speter } 102*788Speter } 103*788Speter } 104*788Speter #endif 105*788Speter 106*788Speter static 107*788Speter struct exec magichdr; 108*788Speter 109*788Speter #ifdef PI 110*788Speter #ifdef OBJ 111*788Speter magic() 112*788Speter { 113*788Speter 114*788Speter short buf[HEADER_BYTES / sizeof ( short )]; 115*788Speter unsigned *ubuf = buf; 116*788Speter register int hf, i; 117*788Speter 118*788Speter hf = open(PX_HEADER,0); 119*788Speter if (hf >= 0 && read(hf, buf, HEADER_BYTES) > sizeof(struct exec)) { 120*788Speter magichdr.a_magic = ubuf[0]; 121*788Speter magichdr.a_text = ubuf[1]; 122*788Speter magichdr.a_data = ubuf[2]; 123*788Speter magichdr.a_bss = ubuf[3]; 124*788Speter magichdr.a_syms = ubuf[4]; 125*788Speter magichdr.a_entry = ubuf[5]; 126*788Speter magichdr.a_trsize = ubuf[6]; 127*788Speter magichdr.a_drsize = ubuf[7]; 128*788Speter for (i = 0; i < HEADER_BYTES / sizeof ( short ); i++) 129*788Speter word(buf[i]); 130*788Speter } 131*788Speter close(hf); 132*788Speter } 133*788Speter #endif OBJ 134*788Speter 135*788Speter #ifdef OBJ 136*788Speter magic2() 137*788Speter { 138*788Speter struct pxhdr pxhd; 139*788Speter 140*788Speter if (magichdr.a_magic != 0407) 141*788Speter panic ( "magic2" ); 142*788Speter pflush(); 143*788Speter lseek(ofil, 0l, 0); 144*788Speter magichdr.a_data = ( unsigned ) lc - magichdr.a_text; 145*788Speter magichdr.a_data -= sizeof (struct exec); 146*788Speter write(ofil, &magichdr, sizeof(struct exec)); 147*788Speter pxhd.objsize = ( ( unsigned ) lc) - HEADER_BYTES; 148*788Speter pxhd.maketime = time(0); 149*788Speter pxhd.magicnum = MAGICNUM; 150*788Speter lseek(ofil, ( long ) ( HEADER_BYTES - sizeof ( pxhd ) ) , 0); 151*788Speter write(ofil, &pxhd, sizeof (pxhd)); 152*788Speter } 153*788Speter #endif OBJ 154*788Speter #endif 155*788Speter 156*788Speter #ifdef PXP 157*788Speter writef(i, cp) 158*788Speter { 159*788Speter 160*788Speter write(i, cp, strlen(cp)); 161*788Speter } 162*788Speter #endif 163