|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: */ ! 6: ! 7: #ifndef lint ! 8: static char sccsid[] = "@(#)yymain.c 5.1 (Berkeley) 6/5/85"; ! 9: #endif not lint ! 10: ! 11: #include "whoami.h" ! 12: #include "0.h" ! 13: #include "tree_ty.h" /* must be included for yy.h */ ! 14: #include "yy.h" ! 15: #include <a.out.h> ! 16: #include "objfmt.h" ! 17: #include <signal.h> ! 18: #include "config.h" ! 19: ! 20: /* ! 21: * Yymain initializes each of the utility ! 22: * clusters and then starts the processing ! 23: * by calling yyparse. ! 24: */ ! 25: yymain() ! 26: { ! 27: ! 28: #ifdef OBJ ! 29: /* ! 30: * initialize symbol table temp files ! 31: */ ! 32: startnlfile(); ! 33: #endif ! 34: /* ! 35: * Initialize the scanner ! 36: */ ! 37: #ifdef PXP ! 38: if (bracket == 0) { ! 39: #endif ! 40: if (getline() == -1) { ! 41: Perror(filename, "No lines in file"); ! 42: pexit(NOSTART); ! 43: } ! 44: #ifdef PXP ! 45: } else ! 46: yyline = 0; ! 47: #endif ! 48: ! 49: #ifdef PI ! 50: # ifdef OBJ ! 51: magic(); ! 52: # endif OBJ ! 53: #endif ! 54: line = 1; ! 55: errpfx = 'E'; ! 56: /* ! 57: * Initialize the clusters ! 58: * ! 59: initstring(); ! 60: */ ! 61: inithash(); ! 62: inittree(); ! 63: #ifdef PI ! 64: initnl(); ! 65: #endif ! 66: ! 67: /* ! 68: * Process the input ! 69: */ ! 70: yyparse(); ! 71: #ifdef PI ! 72: # ifdef OBJ ! 73: ! 74: /* ! 75: * save outermost block of namelist ! 76: */ ! 77: savenl(NLNIL); ! 78: ! 79: magic2(); ! 80: # endif OBJ ! 81: # ifdef DEBUG ! 82: dumpnl(NLNIL); ! 83: # endif ! 84: #endif ! 85: ! 86: #ifdef PXP ! 87: prttab(); ! 88: if (onefile) { ! 89: extern int outcol; ! 90: ! 91: if (outcol) ! 92: pchr('\n'); ! 93: flush(); ! 94: if (eflg) { ! 95: writef(2, "File not rewritten because of errors\n"); ! 96: pexit(ERRS); ! 97: } ! 98: (void) signal(SIGHUP, SIG_IGN); ! 99: (void) signal(SIGINT, SIG_IGN); ! 100: copyfile(); ! 101: } ! 102: #endif ! 103: pexit(eflg ? ERRS : AOK); ! 104: } ! 105: ! 106: #ifdef PXP ! 107: copyfile() ! 108: { ! 109: extern int fout[]; ! 110: register int c; ! 111: ! 112: (void) close(1); ! 113: if (creat(firstname, 0644) != 1) { ! 114: perror(firstname); ! 115: pexit(ERRS); ! 116: } ! 117: (void) lseek(fout[0], 0l, 0); ! 118: while ((c = read(fout[0], &fout[3], 512)) > 0) { ! 119: if (write(1, &fout[3], c) != c) { ! 120: perror(firstname); ! 121: pexit(ERRS); ! 122: } ! 123: } ! 124: } ! 125: #endif ! 126: ! 127: ! 128: #ifdef PI ! 129: #ifdef OBJ ! 130: ! 131: static ! 132: struct exec magichdr; ! 133: ! 134: magic() ! 135: { ! 136: ! 137: short buf[HEADER_BYTES / sizeof ( short )]; ! 138: unsigned *ubuf = (unsigned *) buf; ! 139: register int hf, i; ! 140: ! 141: hf = open(px_header,0); ! 142: if (hf >= 0 && read(hf, (char *) buf, HEADER_BYTES) > sizeof(struct exec)) { ! 143: magichdr.a_magic = ubuf[0]; ! 144: magichdr.a_text = ubuf[1]; ! 145: magichdr.a_data = ubuf[2]; ! 146: magichdr.a_bss = ubuf[3]; ! 147: magichdr.a_syms = ubuf[4]; ! 148: magichdr.a_entry = ubuf[5]; ! 149: magichdr.a_trsize = ubuf[6]; ! 150: magichdr.a_drsize = ubuf[7]; ! 151: for (i = 0; i < HEADER_BYTES / sizeof ( short ); i++) ! 152: word(buf[i]); ! 153: } ! 154: (void) close(hf); ! 155: } ! 156: #endif OBJ ! 157: ! 158: #ifdef OBJ ! 159: magic2() ! 160: { ! 161: struct pxhdr pxhd; ! 162: extern long lseek(); ! 163: ! 164: if (magichdr.a_magic != 0407) ! 165: panic ( "magic2" ); ! 166: pflush(); ! 167: magichdr.a_data = ( unsigned ) lc - magichdr.a_text; ! 168: magichdr.a_data -= sizeof (struct exec); ! 169: pxhd.objsize = ( ( unsigned ) lc) - HEADER_BYTES; ! 170: pxhd.symtabsize = nlhdrsize(); ! 171: magichdr.a_data += pxhd.symtabsize; ! 172: (void) time((long *) (&pxhd.maketime)); ! 173: pxhd.magicnum = MAGICNUM; ! 174: (void) lseek(ofil, 0l, 0); ! 175: write(ofil, (char *) (&magichdr), sizeof(struct exec)); ! 176: (void) lseek(ofil, ( long ) ( HEADER_BYTES - sizeof ( pxhd ) ) , 0); ! 177: write(ofil, (char *) (&pxhd), sizeof (pxhd)); ! 178: } ! 179: #endif OBJ ! 180: #endif ! 181: ! 182: #ifdef PXP ! 183: writef(i, cp) ! 184: { ! 185: ! 186: write(i, cp, strlen(cp)); ! 187: } ! 188: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.