1788Speter /* Copyright (c) 1979 Regents of the University of California */ 2788Speter 3*5654Slinton static char sccsid[] = "@(#)yymain.c 1.3 02/02/82"; 4788Speter 5788Speter #include "whoami.h" 6788Speter #include "0.h" 7788Speter #include "yy.h" 8788Speter #include <a.out.h> 9788Speter #include "objfmt.h" 10788Speter #include <signal.h> 11788Speter 12788Speter /* 13788Speter * Yymain initializes each of the utility 14788Speter * clusters and then starts the processing 15788Speter * by calling yyparse. 16788Speter */ 17788Speter yymain() 18788Speter { 19788Speter 20*5654Slinton #ifdef OBJ 21*5654Slinton /* 22*5654Slinton * initialize symbol table temp files 23*5654Slinton */ 24*5654Slinton startnlfile(); 25*5654Slinton #endif 26788Speter /* 27788Speter * Initialize the scanner 28788Speter */ 29788Speter #ifdef PXP 30788Speter if (bracket == 0) { 31788Speter #endif 32788Speter if (getline() == -1) { 33788Speter Perror(filename, "No lines in file"); 34788Speter pexit(NOSTART); 35788Speter } 36788Speter #ifdef PXP 37788Speter } else 38788Speter yyline = 0; 39788Speter #endif 40788Speter 41788Speter #ifdef PI 42788Speter # ifdef OBJ 43788Speter magic(); 44788Speter # endif OBJ 45788Speter #endif 463086Smckusic line = 1; 473086Smckusic errpfx = 'E'; 48788Speter /* 49788Speter * Initialize the clusters 50788Speter * 51788Speter initstring(); 52788Speter */ 53788Speter inithash(); 54788Speter inittree(); 55788Speter #ifdef PI 56788Speter initnl(); 57788Speter #endif 58788Speter 59788Speter /* 60788Speter * Process the input 61788Speter */ 62788Speter yyparse(); 63788Speter #ifdef PI 64788Speter # ifdef OBJ 65*5654Slinton 66*5654Slinton /* 67*5654Slinton * save outermost block of namelist 68*5654Slinton */ 69*5654Slinton savenl(0); 70*5654Slinton 71788Speter magic2(); 72788Speter # endif OBJ 73788Speter # ifdef DEBUG 74788Speter dumpnl(0); 75788Speter # endif 76788Speter #endif 77*5654Slinton 78788Speter #ifdef PXP 79788Speter prttab(); 80788Speter if (onefile) { 81788Speter extern int outcol; 82788Speter 83788Speter if (outcol) 84788Speter pchr('\n'); 85788Speter flush(); 86788Speter if (eflg) { 87788Speter writef(2, "File not rewritten because of errors\n"); 88788Speter pexit(ERRS); 89788Speter } 90788Speter signal(SIGHUP, SIG_IGN); 91788Speter signal(SIGINT, SIG_IGN); 92788Speter copyfile(); 93788Speter } 94788Speter #endif 95788Speter pexit(eflg ? ERRS : AOK); 96788Speter } 97788Speter 98788Speter #ifdef PXP 99788Speter copyfile() 100788Speter { 101788Speter extern int fout[]; 102788Speter register int c; 103788Speter 104788Speter close(1); 105788Speter if (creat(firstname, 0644) != 1) { 106788Speter perror(firstname); 107788Speter pexit(ERRS); 108788Speter } 109788Speter lseek(fout[0], 0l, 0); 110788Speter while ((c = read(fout[0], &fout[3], 512)) > 0) { 111788Speter if (write(1, &fout[3], c) != c) { 112788Speter perror(firstname); 113788Speter pexit(ERRS); 114788Speter } 115788Speter } 116788Speter } 117788Speter #endif 118788Speter 119788Speter static 120788Speter struct exec magichdr; 121788Speter 122788Speter #ifdef PI 123788Speter #ifdef OBJ 124788Speter magic() 125788Speter { 126788Speter 127788Speter short buf[HEADER_BYTES / sizeof ( short )]; 128788Speter unsigned *ubuf = buf; 129788Speter register int hf, i; 130788Speter 131788Speter hf = open(PX_HEADER,0); 132788Speter if (hf >= 0 && read(hf, buf, HEADER_BYTES) > sizeof(struct exec)) { 133788Speter magichdr.a_magic = ubuf[0]; 134788Speter magichdr.a_text = ubuf[1]; 135788Speter magichdr.a_data = ubuf[2]; 136788Speter magichdr.a_bss = ubuf[3]; 137788Speter magichdr.a_syms = ubuf[4]; 138788Speter magichdr.a_entry = ubuf[5]; 139788Speter magichdr.a_trsize = ubuf[6]; 140788Speter magichdr.a_drsize = ubuf[7]; 141788Speter for (i = 0; i < HEADER_BYTES / sizeof ( short ); i++) 142788Speter word(buf[i]); 143788Speter } 144788Speter close(hf); 145788Speter } 146788Speter #endif OBJ 147788Speter 148788Speter #ifdef OBJ 149788Speter magic2() 150788Speter { 151788Speter struct pxhdr pxhd; 152788Speter 153788Speter if (magichdr.a_magic != 0407) 154788Speter panic ( "magic2" ); 155788Speter pflush(); 156788Speter magichdr.a_data = ( unsigned ) lc - magichdr.a_text; 157788Speter magichdr.a_data -= sizeof (struct exec); 158788Speter pxhd.objsize = ( ( unsigned ) lc) - HEADER_BYTES; 159*5654Slinton pxhd.symtabsize = nlhdrsize(); 160*5654Slinton magichdr.a_data += pxhd.symtabsize; 1613086Smckusic time(&pxhd.maketime); 162788Speter pxhd.magicnum = MAGICNUM; 163*5654Slinton lseek(ofil, 0l, 0); 164*5654Slinton write(ofil, &magichdr, sizeof(struct exec)); 165788Speter lseek(ofil, ( long ) ( HEADER_BYTES - sizeof ( pxhd ) ) , 0); 166788Speter write(ofil, &pxhd, sizeof (pxhd)); 167788Speter } 168788Speter #endif OBJ 169788Speter #endif 170788Speter 171788Speter #ifdef PXP 172788Speter writef(i, cp) 173788Speter { 174788Speter 175788Speter write(i, cp, strlen(cp)); 176788Speter } 177788Speter #endif 178