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