1788Speter /* Copyright (c) 1979 Regents of the University of California */ 2788Speter 3*3086Smckusic static char sccsid[] = "@(#)yymain.c 1.2 03/08/81"; 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 20788Speter /* 21788Speter * Initialize the scanner 22788Speter */ 23788Speter #ifdef PXP 24788Speter if (bracket == 0) { 25788Speter #endif 26788Speter if (getline() == -1) { 27788Speter Perror(filename, "No lines in file"); 28788Speter pexit(NOSTART); 29788Speter } 30788Speter #ifdef PXP 31788Speter } else 32788Speter yyline = 0; 33788Speter #endif 34788Speter 35788Speter #ifdef PI 36788Speter # ifdef OBJ 37788Speter magic(); 38788Speter # endif OBJ 39788Speter #endif 40*3086Smckusic line = 1; 41*3086Smckusic errpfx = 'E'; 42788Speter /* 43788Speter * Initialize the clusters 44788Speter * 45788Speter initstring(); 46788Speter */ 47788Speter inithash(); 48788Speter inittree(); 49788Speter #ifdef PI 50788Speter initnl(); 51788Speter #endif 52788Speter 53788Speter /* 54788Speter * Process the input 55788Speter */ 56788Speter yyparse(); 57788Speter #ifdef PI 58788Speter # ifdef OBJ 59788Speter magic2(); 60788Speter # endif OBJ 61788Speter # ifdef DEBUG 62788Speter dumpnl(0); 63788Speter # endif 64788Speter #endif 65788Speter #ifdef PXP 66788Speter prttab(); 67788Speter if (onefile) { 68788Speter extern int outcol; 69788Speter 70788Speter if (outcol) 71788Speter pchr('\n'); 72788Speter flush(); 73788Speter if (eflg) { 74788Speter writef(2, "File not rewritten because of errors\n"); 75788Speter pexit(ERRS); 76788Speter } 77788Speter signal(SIGHUP, SIG_IGN); 78788Speter signal(SIGINT, SIG_IGN); 79788Speter copyfile(); 80788Speter } 81788Speter #endif 82788Speter pexit(eflg ? ERRS : AOK); 83788Speter } 84788Speter 85788Speter #ifdef PXP 86788Speter copyfile() 87788Speter { 88788Speter extern int fout[]; 89788Speter register int c; 90788Speter 91788Speter close(1); 92788Speter if (creat(firstname, 0644) != 1) { 93788Speter perror(firstname); 94788Speter pexit(ERRS); 95788Speter } 96788Speter lseek(fout[0], 0l, 0); 97788Speter while ((c = read(fout[0], &fout[3], 512)) > 0) { 98788Speter if (write(1, &fout[3], c) != c) { 99788Speter perror(firstname); 100788Speter pexit(ERRS); 101788Speter } 102788Speter } 103788Speter } 104788Speter #endif 105788Speter 106788Speter static 107788Speter struct exec magichdr; 108788Speter 109788Speter #ifdef PI 110788Speter #ifdef OBJ 111788Speter magic() 112788Speter { 113788Speter 114788Speter short buf[HEADER_BYTES / sizeof ( short )]; 115788Speter unsigned *ubuf = buf; 116788Speter register int hf, i; 117788Speter 118788Speter hf = open(PX_HEADER,0); 119788Speter if (hf >= 0 && read(hf, buf, HEADER_BYTES) > sizeof(struct exec)) { 120788Speter magichdr.a_magic = ubuf[0]; 121788Speter magichdr.a_text = ubuf[1]; 122788Speter magichdr.a_data = ubuf[2]; 123788Speter magichdr.a_bss = ubuf[3]; 124788Speter magichdr.a_syms = ubuf[4]; 125788Speter magichdr.a_entry = ubuf[5]; 126788Speter magichdr.a_trsize = ubuf[6]; 127788Speter magichdr.a_drsize = ubuf[7]; 128788Speter for (i = 0; i < HEADER_BYTES / sizeof ( short ); i++) 129788Speter word(buf[i]); 130788Speter } 131788Speter close(hf); 132788Speter } 133788Speter #endif OBJ 134788Speter 135788Speter #ifdef OBJ 136788Speter magic2() 137788Speter { 138788Speter struct pxhdr pxhd; 139788Speter 140788Speter if (magichdr.a_magic != 0407) 141788Speter panic ( "magic2" ); 142788Speter pflush(); 143788Speter lseek(ofil, 0l, 0); 144788Speter magichdr.a_data = ( unsigned ) lc - magichdr.a_text; 145788Speter magichdr.a_data -= sizeof (struct exec); 146788Speter write(ofil, &magichdr, sizeof(struct exec)); 147788Speter pxhd.objsize = ( ( unsigned ) lc) - HEADER_BYTES; 148*3086Smckusic time(&pxhd.maketime); 149788Speter pxhd.magicnum = MAGICNUM; 150788Speter lseek(ofil, ( long ) ( HEADER_BYTES - sizeof ( pxhd ) ) , 0); 151788Speter write(ofil, &pxhd, sizeof (pxhd)); 152788Speter } 153788Speter #endif OBJ 154788Speter #endif 155788Speter 156788Speter #ifdef PXP 157788Speter writef(i, cp) 158788Speter { 159788Speter 160788Speter write(i, cp, strlen(cp)); 161788Speter } 162788Speter #endif 163