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