1788Speter /* Copyright (c) 1979 Regents of the University of California */ 2788Speter 3*6627Speter static char sccsid[] = "@(#)yymain.c 1.4 05/06/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> 11*6627Speter #include "config.h" 12788Speter 13788Speter /* 14788Speter * Yymain initializes each of the utility 15788Speter * clusters and then starts the processing 16788Speter * by calling yyparse. 17788Speter */ 18788Speter yymain() 19788Speter { 20788Speter 215654Slinton #ifdef OBJ 225654Slinton /* 235654Slinton * initialize symbol table temp files 245654Slinton */ 255654Slinton startnlfile(); 265654Slinton #endif 27788Speter /* 28788Speter * Initialize the scanner 29788Speter */ 30788Speter #ifdef PXP 31788Speter if (bracket == 0) { 32788Speter #endif 33788Speter if (getline() == -1) { 34788Speter Perror(filename, "No lines in file"); 35788Speter pexit(NOSTART); 36788Speter } 37788Speter #ifdef PXP 38788Speter } else 39788Speter yyline = 0; 40788Speter #endif 41788Speter 42788Speter #ifdef PI 43788Speter # ifdef OBJ 44788Speter magic(); 45788Speter # endif OBJ 46788Speter #endif 473086Smckusic line = 1; 483086Smckusic errpfx = 'E'; 49788Speter /* 50788Speter * Initialize the clusters 51788Speter * 52788Speter initstring(); 53788Speter */ 54788Speter inithash(); 55788Speter inittree(); 56788Speter #ifdef PI 57788Speter initnl(); 58788Speter #endif 59788Speter 60788Speter /* 61788Speter * Process the input 62788Speter */ 63788Speter yyparse(); 64788Speter #ifdef PI 65788Speter # ifdef OBJ 665654Slinton 675654Slinton /* 685654Slinton * save outermost block of namelist 695654Slinton */ 705654Slinton savenl(0); 715654Slinton 72788Speter magic2(); 73788Speter # endif OBJ 74788Speter # ifdef DEBUG 75788Speter dumpnl(0); 76788Speter # endif 77788Speter #endif 785654Slinton 79788Speter #ifdef PXP 80788Speter prttab(); 81788Speter if (onefile) { 82788Speter extern int outcol; 83788Speter 84788Speter if (outcol) 85788Speter pchr('\n'); 86788Speter flush(); 87788Speter if (eflg) { 88788Speter writef(2, "File not rewritten because of errors\n"); 89788Speter pexit(ERRS); 90788Speter } 91788Speter signal(SIGHUP, SIG_IGN); 92788Speter signal(SIGINT, SIG_IGN); 93788Speter copyfile(); 94788Speter } 95788Speter #endif 96788Speter pexit(eflg ? ERRS : AOK); 97788Speter } 98788Speter 99788Speter #ifdef PXP 100788Speter copyfile() 101788Speter { 102788Speter extern int fout[]; 103788Speter register int c; 104788Speter 105788Speter close(1); 106788Speter if (creat(firstname, 0644) != 1) { 107788Speter perror(firstname); 108788Speter pexit(ERRS); 109788Speter } 110788Speter lseek(fout[0], 0l, 0); 111788Speter while ((c = read(fout[0], &fout[3], 512)) > 0) { 112788Speter if (write(1, &fout[3], c) != c) { 113788Speter perror(firstname); 114788Speter pexit(ERRS); 115788Speter } 116788Speter } 117788Speter } 118788Speter #endif 119788Speter 120788Speter static 121788Speter struct exec magichdr; 122788Speter 123788Speter #ifdef PI 124788Speter #ifdef OBJ 125788Speter magic() 126788Speter { 127788Speter 128788Speter short buf[HEADER_BYTES / sizeof ( short )]; 129788Speter unsigned *ubuf = buf; 130788Speter register int hf, i; 131788Speter 132*6627Speter hf = open(px_header,0); 133788Speter if (hf >= 0 && read(hf, buf, HEADER_BYTES) > sizeof(struct exec)) { 134788Speter magichdr.a_magic = ubuf[0]; 135788Speter magichdr.a_text = ubuf[1]; 136788Speter magichdr.a_data = ubuf[2]; 137788Speter magichdr.a_bss = ubuf[3]; 138788Speter magichdr.a_syms = ubuf[4]; 139788Speter magichdr.a_entry = ubuf[5]; 140788Speter magichdr.a_trsize = ubuf[6]; 141788Speter magichdr.a_drsize = ubuf[7]; 142788Speter for (i = 0; i < HEADER_BYTES / sizeof ( short ); i++) 143788Speter word(buf[i]); 144788Speter } 145788Speter close(hf); 146788Speter } 147788Speter #endif OBJ 148788Speter 149788Speter #ifdef OBJ 150788Speter magic2() 151788Speter { 152788Speter struct pxhdr pxhd; 153788Speter 154788Speter if (magichdr.a_magic != 0407) 155788Speter panic ( "magic2" ); 156788Speter pflush(); 157788Speter magichdr.a_data = ( unsigned ) lc - magichdr.a_text; 158788Speter magichdr.a_data -= sizeof (struct exec); 159788Speter pxhd.objsize = ( ( unsigned ) lc) - HEADER_BYTES; 1605654Slinton pxhd.symtabsize = nlhdrsize(); 1615654Slinton magichdr.a_data += pxhd.symtabsize; 1623086Smckusic time(&pxhd.maketime); 163788Speter pxhd.magicnum = MAGICNUM; 1645654Slinton lseek(ofil, 0l, 0); 1655654Slinton write(ofil, &magichdr, sizeof(struct exec)); 166788Speter lseek(ofil, ( long ) ( HEADER_BYTES - sizeof ( pxhd ) ) , 0); 167788Speter write(ofil, &pxhd, sizeof (pxhd)); 168788Speter } 169788Speter #endif OBJ 170788Speter #endif 171788Speter 172788Speter #ifdef PXP 173788Speter writef(i, cp) 174788Speter { 175788Speter 176788Speter write(i, cp, strlen(cp)); 177788Speter } 178788Speter #endif 179