|
|
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.