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