1*22208Sdist /* 2*22208Sdist * Copyright (c) 1980 Regents of the University of California. 3*22208Sdist * All rights reserved. The Berkeley software License Agreement 4*22208Sdist * specifies the terms and conditions for redistribution. 5*22208Sdist */ 6788Speter 714748Sthien #ifndef lint 8*22208Sdist static char sccsid[] = "@(#)yymain.c 5.1 (Berkeley) 06/05/85"; 9*22208Sdist #endif not lint 10788Speter 11788Speter #include "whoami.h" 12788Speter #include "0.h" 1314748Sthien #include "tree_ty.h" /* must be included for yy.h */ 14788Speter #include "yy.h" 15788Speter #include <a.out.h> 16788Speter #include "objfmt.h" 17788Speter #include <signal.h> 186627Speter #include "config.h" 19788Speter 20788Speter /* 21788Speter * Yymain initializes each of the utility 22788Speter * clusters and then starts the processing 23788Speter * by calling yyparse. 24788Speter */ 25788Speter yymain() 26788Speter { 27788Speter 285654Slinton #ifdef OBJ 295654Slinton /* 305654Slinton * initialize symbol table temp files 315654Slinton */ 325654Slinton startnlfile(); 335654Slinton #endif 34788Speter /* 35788Speter * Initialize the scanner 36788Speter */ 37788Speter #ifdef PXP 38788Speter if (bracket == 0) { 39788Speter #endif 40788Speter if (getline() == -1) { 41788Speter Perror(filename, "No lines in file"); 42788Speter pexit(NOSTART); 43788Speter } 44788Speter #ifdef PXP 45788Speter } else 46788Speter yyline = 0; 47788Speter #endif 48788Speter 49788Speter #ifdef PI 50788Speter # ifdef OBJ 51788Speter magic(); 52788Speter # endif OBJ 53788Speter #endif 543086Smckusic line = 1; 553086Smckusic errpfx = 'E'; 56788Speter /* 57788Speter * Initialize the clusters 58788Speter * 59788Speter initstring(); 60788Speter */ 61788Speter inithash(); 62788Speter inittree(); 63788Speter #ifdef PI 64788Speter initnl(); 65788Speter #endif 66788Speter 67788Speter /* 68788Speter * Process the input 69788Speter */ 70788Speter yyparse(); 71788Speter #ifdef PI 72788Speter # ifdef OBJ 735654Slinton 745654Slinton /* 755654Slinton * save outermost block of namelist 765654Slinton */ 7714748Sthien savenl(NLNIL); 785654Slinton 79788Speter magic2(); 80788Speter # endif OBJ 81788Speter # ifdef DEBUG 8214748Sthien dumpnl(NLNIL); 83788Speter # endif 84788Speter #endif 855654Slinton 86788Speter #ifdef PXP 87788Speter prttab(); 88788Speter if (onefile) { 89788Speter extern int outcol; 90788Speter 91788Speter if (outcol) 92788Speter pchr('\n'); 93788Speter flush(); 94788Speter if (eflg) { 95788Speter writef(2, "File not rewritten because of errors\n"); 96788Speter pexit(ERRS); 97788Speter } 9814748Sthien (void) signal(SIGHUP, SIG_IGN); 9914748Sthien (void) signal(SIGINT, SIG_IGN); 100788Speter copyfile(); 101788Speter } 102788Speter #endif 103788Speter pexit(eflg ? ERRS : AOK); 104788Speter } 105788Speter 106788Speter #ifdef PXP 107788Speter copyfile() 108788Speter { 109788Speter extern int fout[]; 110788Speter register int c; 111788Speter 11214748Sthien (void) close(1); 113788Speter if (creat(firstname, 0644) != 1) { 114788Speter perror(firstname); 115788Speter pexit(ERRS); 116788Speter } 11714748Sthien (void) lseek(fout[0], 0l, 0); 118788Speter while ((c = read(fout[0], &fout[3], 512)) > 0) { 119788Speter if (write(1, &fout[3], c) != c) { 120788Speter perror(firstname); 121788Speter pexit(ERRS); 122788Speter } 123788Speter } 124788Speter } 125788Speter #endif 126788Speter 12714748Sthien 12814748Sthien #ifdef PI 12914748Sthien #ifdef OBJ 13014748Sthien 131788Speter static 132788Speter struct exec magichdr; 133788Speter 134788Speter magic() 135788Speter { 136788Speter 137788Speter short buf[HEADER_BYTES / sizeof ( short )]; 13814748Sthien unsigned *ubuf = (unsigned *) buf; 139788Speter register int hf, i; 140788Speter 1416627Speter hf = open(px_header,0); 14214748Sthien if (hf >= 0 && read(hf, (char *) buf, HEADER_BYTES) > sizeof(struct exec)) { 143788Speter magichdr.a_magic = ubuf[0]; 144788Speter magichdr.a_text = ubuf[1]; 145788Speter magichdr.a_data = ubuf[2]; 146788Speter magichdr.a_bss = ubuf[3]; 147788Speter magichdr.a_syms = ubuf[4]; 148788Speter magichdr.a_entry = ubuf[5]; 149788Speter magichdr.a_trsize = ubuf[6]; 150788Speter magichdr.a_drsize = ubuf[7]; 151788Speter for (i = 0; i < HEADER_BYTES / sizeof ( short ); i++) 152788Speter word(buf[i]); 153788Speter } 15414748Sthien (void) close(hf); 155788Speter } 156788Speter #endif OBJ 157788Speter 158788Speter #ifdef OBJ 159788Speter magic2() 160788Speter { 161788Speter struct pxhdr pxhd; 16214748Sthien extern long lseek(); 163788Speter 164788Speter if (magichdr.a_magic != 0407) 165788Speter panic ( "magic2" ); 166788Speter pflush(); 167788Speter magichdr.a_data = ( unsigned ) lc - magichdr.a_text; 168788Speter magichdr.a_data -= sizeof (struct exec); 169788Speter pxhd.objsize = ( ( unsigned ) lc) - HEADER_BYTES; 1705654Slinton pxhd.symtabsize = nlhdrsize(); 1715654Slinton magichdr.a_data += pxhd.symtabsize; 17214748Sthien (void) time((long *) (&pxhd.maketime)); 173788Speter pxhd.magicnum = MAGICNUM; 17414748Sthien (void) lseek(ofil, 0l, 0); 17514748Sthien write(ofil, (char *) (&magichdr), sizeof(struct exec)); 17614748Sthien (void) lseek(ofil, ( long ) ( HEADER_BYTES - sizeof ( pxhd ) ) , 0); 17714748Sthien write(ofil, (char *) (&pxhd), sizeof (pxhd)); 178788Speter } 179788Speter #endif OBJ 180788Speter #endif 181788Speter 182788Speter #ifdef PXP 183788Speter writef(i, cp) 184788Speter { 185788Speter 186788Speter write(i, cp, strlen(cp)); 187788Speter } 188788Speter #endif 189