1788Speter /* Copyright (c) 1979 Regents of the University of California */ 2788Speter 3*14748Sthien #ifndef lint 4*14748Sthien static char sccsid[] = "@(#)yymain.c 1.5 08/19/83"; 5*14748Sthien #endif 6788Speter 7788Speter #include "whoami.h" 8788Speter #include "0.h" 9*14748Sthien #include "tree_ty.h" /* must be included for yy.h */ 10788Speter #include "yy.h" 11788Speter #include <a.out.h> 12788Speter #include "objfmt.h" 13788Speter #include <signal.h> 146627Speter #include "config.h" 15788Speter 16788Speter /* 17788Speter * Yymain initializes each of the utility 18788Speter * clusters and then starts the processing 19788Speter * by calling yyparse. 20788Speter */ 21788Speter yymain() 22788Speter { 23788Speter 245654Slinton #ifdef OBJ 255654Slinton /* 265654Slinton * initialize symbol table temp files 275654Slinton */ 285654Slinton startnlfile(); 295654Slinton #endif 30788Speter /* 31788Speter * Initialize the scanner 32788Speter */ 33788Speter #ifdef PXP 34788Speter if (bracket == 0) { 35788Speter #endif 36788Speter if (getline() == -1) { 37788Speter Perror(filename, "No lines in file"); 38788Speter pexit(NOSTART); 39788Speter } 40788Speter #ifdef PXP 41788Speter } else 42788Speter yyline = 0; 43788Speter #endif 44788Speter 45788Speter #ifdef PI 46788Speter # ifdef OBJ 47788Speter magic(); 48788Speter # endif OBJ 49788Speter #endif 503086Smckusic line = 1; 513086Smckusic errpfx = 'E'; 52788Speter /* 53788Speter * Initialize the clusters 54788Speter * 55788Speter initstring(); 56788Speter */ 57788Speter inithash(); 58788Speter inittree(); 59788Speter #ifdef PI 60788Speter initnl(); 61788Speter #endif 62788Speter 63788Speter /* 64788Speter * Process the input 65788Speter */ 66788Speter yyparse(); 67788Speter #ifdef PI 68788Speter # ifdef OBJ 695654Slinton 705654Slinton /* 715654Slinton * save outermost block of namelist 725654Slinton */ 73*14748Sthien savenl(NLNIL); 745654Slinton 75788Speter magic2(); 76788Speter # endif OBJ 77788Speter # ifdef DEBUG 78*14748Sthien dumpnl(NLNIL); 79788Speter # endif 80788Speter #endif 815654Slinton 82788Speter #ifdef PXP 83788Speter prttab(); 84788Speter if (onefile) { 85788Speter extern int outcol; 86788Speter 87788Speter if (outcol) 88788Speter pchr('\n'); 89788Speter flush(); 90788Speter if (eflg) { 91788Speter writef(2, "File not rewritten because of errors\n"); 92788Speter pexit(ERRS); 93788Speter } 94*14748Sthien (void) signal(SIGHUP, SIG_IGN); 95*14748Sthien (void) signal(SIGINT, SIG_IGN); 96788Speter copyfile(); 97788Speter } 98788Speter #endif 99788Speter pexit(eflg ? ERRS : AOK); 100788Speter } 101788Speter 102788Speter #ifdef PXP 103788Speter copyfile() 104788Speter { 105788Speter extern int fout[]; 106788Speter register int c; 107788Speter 108*14748Sthien (void) close(1); 109788Speter if (creat(firstname, 0644) != 1) { 110788Speter perror(firstname); 111788Speter pexit(ERRS); 112788Speter } 113*14748Sthien (void) lseek(fout[0], 0l, 0); 114788Speter while ((c = read(fout[0], &fout[3], 512)) > 0) { 115788Speter if (write(1, &fout[3], c) != c) { 116788Speter perror(firstname); 117788Speter pexit(ERRS); 118788Speter } 119788Speter } 120788Speter } 121788Speter #endif 122788Speter 123*14748Sthien 124*14748Sthien #ifdef PI 125*14748Sthien #ifdef OBJ 126*14748Sthien 127788Speter static 128788Speter struct exec magichdr; 129788Speter 130788Speter magic() 131788Speter { 132788Speter 133788Speter short buf[HEADER_BYTES / sizeof ( short )]; 134*14748Sthien unsigned *ubuf = (unsigned *) buf; 135788Speter register int hf, i; 136788Speter 1376627Speter hf = open(px_header,0); 138*14748Sthien if (hf >= 0 && read(hf, (char *) buf, HEADER_BYTES) > sizeof(struct exec)) { 139788Speter magichdr.a_magic = ubuf[0]; 140788Speter magichdr.a_text = ubuf[1]; 141788Speter magichdr.a_data = ubuf[2]; 142788Speter magichdr.a_bss = ubuf[3]; 143788Speter magichdr.a_syms = ubuf[4]; 144788Speter magichdr.a_entry = ubuf[5]; 145788Speter magichdr.a_trsize = ubuf[6]; 146788Speter magichdr.a_drsize = ubuf[7]; 147788Speter for (i = 0; i < HEADER_BYTES / sizeof ( short ); i++) 148788Speter word(buf[i]); 149788Speter } 150*14748Sthien (void) close(hf); 151788Speter } 152788Speter #endif OBJ 153788Speter 154788Speter #ifdef OBJ 155788Speter magic2() 156788Speter { 157788Speter struct pxhdr pxhd; 158*14748Sthien extern long lseek(); 159788Speter 160788Speter if (magichdr.a_magic != 0407) 161788Speter panic ( "magic2" ); 162788Speter pflush(); 163788Speter magichdr.a_data = ( unsigned ) lc - magichdr.a_text; 164788Speter magichdr.a_data -= sizeof (struct exec); 165788Speter pxhd.objsize = ( ( unsigned ) lc) - HEADER_BYTES; 1665654Slinton pxhd.symtabsize = nlhdrsize(); 1675654Slinton magichdr.a_data += pxhd.symtabsize; 168*14748Sthien (void) time((long *) (&pxhd.maketime)); 169788Speter pxhd.magicnum = MAGICNUM; 170*14748Sthien (void) lseek(ofil, 0l, 0); 171*14748Sthien write(ofil, (char *) (&magichdr), sizeof(struct exec)); 172*14748Sthien (void) lseek(ofil, ( long ) ( HEADER_BYTES - sizeof ( pxhd ) ) , 0); 173*14748Sthien write(ofil, (char *) (&pxhd), sizeof (pxhd)); 174788Speter } 175788Speter #endif OBJ 176788Speter #endif 177788Speter 178788Speter #ifdef PXP 179788Speter writef(i, cp) 180788Speter { 181788Speter 182788Speter write(i, cp, strlen(cp)); 183788Speter } 184788Speter #endif 185