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