1*aca3beaaSApple OSS Distributions /*
2*aca3beaaSApple OSS Distributions * Mach Operating System
3*aca3beaaSApple OSS Distributions * Copyright (c) 1990 Carnegie-Mellon University
4*aca3beaaSApple OSS Distributions * Copyright (c) 1989 Carnegie-Mellon University
5*aca3beaaSApple OSS Distributions * Copyright (c) 1988 Carnegie-Mellon University
6*aca3beaaSApple OSS Distributions * Copyright (c) 1987 Carnegie-Mellon University
7*aca3beaaSApple OSS Distributions * All rights reserved. The CMU software License Agreement specifies
8*aca3beaaSApple OSS Distributions * the terms and conditions for use and redistribution.
9*aca3beaaSApple OSS Distributions */
10*aca3beaaSApple OSS Distributions
11*aca3beaaSApple OSS Distributions /*
12*aca3beaaSApple OSS Distributions * Copyright (c) 1988 Regents of the University of California.
13*aca3beaaSApple OSS Distributions * All rights reserved.
14*aca3beaaSApple OSS Distributions *
15*aca3beaaSApple OSS Distributions * Redistribution and use in source and binary forms are permitted
16*aca3beaaSApple OSS Distributions * provided that the above copyright notice and this paragraph are
17*aca3beaaSApple OSS Distributions * duplicated in all such forms and that any documentation,
18*aca3beaaSApple OSS Distributions * advertising materials, and other materials related to such
19*aca3beaaSApple OSS Distributions * distribution and use acknowledge that the software was developed
20*aca3beaaSApple OSS Distributions * by the University of California, Berkeley. The name of the
21*aca3beaaSApple OSS Distributions * University may not be used to endorse or promote products derived
22*aca3beaaSApple OSS Distributions * from this software without specific prior written permission.
23*aca3beaaSApple OSS Distributions * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
24*aca3beaaSApple OSS Distributions * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
25*aca3beaaSApple OSS Distributions * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
26*aca3beaaSApple OSS Distributions *
27*aca3beaaSApple OSS Distributions * @(#)config.y 5.8 (Berkeley) 6/18/88
28*aca3beaaSApple OSS Distributions */
29*aca3beaaSApple OSS Distributions
30*aca3beaaSApple OSS Distributions %union {
31*aca3beaaSApple OSS Distributions char *str;
32*aca3beaaSApple OSS Distributions int val;
33*aca3beaaSApple OSS Distributions struct file_list *file;
34*aca3beaaSApple OSS Distributions struct idlst *lst;
35*aca3beaaSApple OSS Distributions }
36*aca3beaaSApple OSS Distributions
37*aca3beaaSApple OSS Distributions %token BUILDDIR
38*aca3beaaSApple OSS Distributions %token COMMA
39*aca3beaaSApple OSS Distributions %token EQUALS
40*aca3beaaSApple OSS Distributions %token INIT
41*aca3beaaSApple OSS Distributions %token MACHINE
42*aca3beaaSApple OSS Distributions %token OBJECTDIR
43*aca3beaaSApple OSS Distributions %token OPTIONS
44*aca3beaaSApple OSS Distributions %token MAKEOPTIONS
45*aca3beaaSApple OSS Distributions %token PSEUDO_DEVICE
46*aca3beaaSApple OSS Distributions %token SEMICOLON
47*aca3beaaSApple OSS Distributions %token SOURCEDIR
48*aca3beaaSApple OSS Distributions %token TRACE
49*aca3beaaSApple OSS Distributions
50*aca3beaaSApple OSS Distributions %token <str> ID
51*aca3beaaSApple OSS Distributions %token <val> NUMBER
52*aca3beaaSApple OSS Distributions
53*aca3beaaSApple OSS Distributions %type <str> Save_id
54*aca3beaaSApple OSS Distributions %type <str> Opt_value
55*aca3beaaSApple OSS Distributions %type <str> Dev
56*aca3beaaSApple OSS Distributions
57*aca3beaaSApple OSS Distributions %{
58*aca3beaaSApple OSS Distributions
59*aca3beaaSApple OSS Distributions #include "config.h"
60*aca3beaaSApple OSS Distributions #include <ctype.h>
61*aca3beaaSApple OSS Distributions #include <stdio.h>
62*aca3beaaSApple OSS Distributions
63*aca3beaaSApple OSS Distributions struct device cur;
64*aca3beaaSApple OSS Distributions struct device *curp = 0;
65*aca3beaaSApple OSS Distributions char *temp_id;
66*aca3beaaSApple OSS Distributions char *val_id;
67*aca3beaaSApple OSS Distributions /* char *malloc(); */
68*aca3beaaSApple OSS Distributions
69*aca3beaaSApple OSS Distributions int yylex(void);
70*aca3beaaSApple OSS Distributions
71*aca3beaaSApple OSS Distributions void deverror(const char *systemname, const char *devtype);
72*aca3beaaSApple OSS Distributions
73*aca3beaaSApple OSS Distributions %}
74*aca3beaaSApple OSS Distributions %%
75*aca3beaaSApple OSS Distributions Configuration:
76*aca3beaaSApple OSS Distributions Many_specs
77*aca3beaaSApple OSS Distributions ;
78*aca3beaaSApple OSS Distributions
79*aca3beaaSApple OSS Distributions Many_specs:
80*aca3beaaSApple OSS Distributions Many_specs Spec
81*aca3beaaSApple OSS Distributions |
82*aca3beaaSApple OSS Distributions /* lambda */
83*aca3beaaSApple OSS Distributions ;
84*aca3beaaSApple OSS Distributions
85*aca3beaaSApple OSS Distributions Spec:
86*aca3beaaSApple OSS Distributions Device_spec SEMICOLON
87*aca3beaaSApple OSS Distributions { newdev(&cur); } |
88*aca3beaaSApple OSS Distributions Config_spec SEMICOLON
89*aca3beaaSApple OSS Distributions |
90*aca3beaaSApple OSS Distributions TRACE SEMICOLON
91*aca3beaaSApple OSS Distributions { do_trace = !do_trace; } |
92*aca3beaaSApple OSS Distributions SEMICOLON
93*aca3beaaSApple OSS Distributions |
94*aca3beaaSApple OSS Distributions error SEMICOLON
95*aca3beaaSApple OSS Distributions ;
96*aca3beaaSApple OSS Distributions
97*aca3beaaSApple OSS Distributions Config_spec:
98*aca3beaaSApple OSS Distributions MACHINE Save_id
99*aca3beaaSApple OSS Distributions { machinename = ns($2); }
100*aca3beaaSApple OSS Distributions |
101*aca3beaaSApple OSS Distributions OPTIONS Opt_list
102*aca3beaaSApple OSS Distributions |
103*aca3beaaSApple OSS Distributions MAKEOPTIONS Mkopt_list
104*aca3beaaSApple OSS Distributions |
105*aca3beaaSApple OSS Distributions BUILDDIR Save_id
106*aca3beaaSApple OSS Distributions { build_directory = ns($2); }
107*aca3beaaSApple OSS Distributions |
108*aca3beaaSApple OSS Distributions OBJECTDIR Save_id
109*aca3beaaSApple OSS Distributions { object_directory = ns($2); }
110*aca3beaaSApple OSS Distributions |
111*aca3beaaSApple OSS Distributions SOURCEDIR Save_id
112*aca3beaaSApple OSS Distributions { source_directory = ns($2); }
113*aca3beaaSApple OSS Distributions ;
114*aca3beaaSApple OSS Distributions
115*aca3beaaSApple OSS Distributions
116*aca3beaaSApple OSS Distributions Opt_list:
117*aca3beaaSApple OSS Distributions Opt_list COMMA Option
118*aca3beaaSApple OSS Distributions |
119*aca3beaaSApple OSS Distributions Option
120*aca3beaaSApple OSS Distributions ;
121*aca3beaaSApple OSS Distributions
122*aca3beaaSApple OSS Distributions Option:
123*aca3beaaSApple OSS Distributions Save_id
124*aca3beaaSApple OSS Distributions {
125*aca3beaaSApple OSS Distributions struct opt *op = (struct opt *)malloc(sizeof (struct opt));
126*aca3beaaSApple OSS Distributions op->op_name = ns($1);
127*aca3beaaSApple OSS Distributions op->op_next = (struct opt *) 0;
128*aca3beaaSApple OSS Distributions op->op_value = 0;
129*aca3beaaSApple OSS Distributions if (opt == (struct opt *) 0)
130*aca3beaaSApple OSS Distributions opt = op;
131*aca3beaaSApple OSS Distributions else
132*aca3beaaSApple OSS Distributions opt_tail->op_next = op;
133*aca3beaaSApple OSS Distributions opt_tail = op;
134*aca3beaaSApple OSS Distributions free(temp_id);
135*aca3beaaSApple OSS Distributions } |
136*aca3beaaSApple OSS Distributions Save_id EQUALS Opt_value
137*aca3beaaSApple OSS Distributions {
138*aca3beaaSApple OSS Distributions struct opt *op = (struct opt *)malloc(sizeof (struct opt));
139*aca3beaaSApple OSS Distributions op->op_name = ns($1);
140*aca3beaaSApple OSS Distributions op->op_next = (struct opt *) 0;
141*aca3beaaSApple OSS Distributions op->op_value = ns($3);
142*aca3beaaSApple OSS Distributions if (opt == (struct opt *) 0)
143*aca3beaaSApple OSS Distributions opt = op;
144*aca3beaaSApple OSS Distributions else
145*aca3beaaSApple OSS Distributions opt_tail->op_next = op;
146*aca3beaaSApple OSS Distributions opt_tail = op;
147*aca3beaaSApple OSS Distributions free(temp_id);
148*aca3beaaSApple OSS Distributions if (val_id)
149*aca3beaaSApple OSS Distributions free(val_id);
150*aca3beaaSApple OSS Distributions } ;
151*aca3beaaSApple OSS Distributions
152*aca3beaaSApple OSS Distributions Opt_value:
153*aca3beaaSApple OSS Distributions ID
154*aca3beaaSApple OSS Distributions { $$ = val_id = ns($1); } |
155*aca3beaaSApple OSS Distributions NUMBER
156*aca3beaaSApple OSS Distributions { char nb[16];
157*aca3beaaSApple OSS Distributions (void) sprintf(nb, "%u", $1);
158*aca3beaaSApple OSS Distributions $$ = val_id = ns(nb);
159*aca3beaaSApple OSS Distributions } |
160*aca3beaaSApple OSS Distributions /* lambda from MIPS -- WHY */
161*aca3beaaSApple OSS Distributions { $$ = val_id = ns(""); }
162*aca3beaaSApple OSS Distributions ;
163*aca3beaaSApple OSS Distributions
164*aca3beaaSApple OSS Distributions Save_id:
165*aca3beaaSApple OSS Distributions ID
166*aca3beaaSApple OSS Distributions { $$ = temp_id = ns($1); }
167*aca3beaaSApple OSS Distributions ;
168*aca3beaaSApple OSS Distributions
169*aca3beaaSApple OSS Distributions Mkopt_list:
170*aca3beaaSApple OSS Distributions Mkopt_list COMMA Mkoption
171*aca3beaaSApple OSS Distributions |
172*aca3beaaSApple OSS Distributions Mkoption
173*aca3beaaSApple OSS Distributions ;
174*aca3beaaSApple OSS Distributions
175*aca3beaaSApple OSS Distributions Mkoption:
176*aca3beaaSApple OSS Distributions Save_id
177*aca3beaaSApple OSS Distributions {
178*aca3beaaSApple OSS Distributions struct opt *op = (struct opt *)malloc(sizeof (struct opt));
179*aca3beaaSApple OSS Distributions op->op_name = ns($1);
180*aca3beaaSApple OSS Distributions op->op_next = (struct opt *) 0;
181*aca3beaaSApple OSS Distributions op->op_value = 0;
182*aca3beaaSApple OSS Distributions mkopt = op;
183*aca3beaaSApple OSS Distributions free(temp_id);
184*aca3beaaSApple OSS Distributions } |
185*aca3beaaSApple OSS Distributions Save_id EQUALS Opt_value
186*aca3beaaSApple OSS Distributions {
187*aca3beaaSApple OSS Distributions struct opt *op = (struct opt *)malloc(sizeof (struct opt));
188*aca3beaaSApple OSS Distributions op->op_name = ns($1);
189*aca3beaaSApple OSS Distributions op->op_next = (struct opt *) 0;
190*aca3beaaSApple OSS Distributions op->op_value = ns($3);
191*aca3beaaSApple OSS Distributions if (mkopt == (struct opt *) 0)
192*aca3beaaSApple OSS Distributions mkopt = op;
193*aca3beaaSApple OSS Distributions else
194*aca3beaaSApple OSS Distributions mkopt_tail->op_next = op;
195*aca3beaaSApple OSS Distributions mkopt_tail = op;
196*aca3beaaSApple OSS Distributions free(temp_id);
197*aca3beaaSApple OSS Distributions if (val_id)
198*aca3beaaSApple OSS Distributions free(val_id);
199*aca3beaaSApple OSS Distributions } ;
200*aca3beaaSApple OSS Distributions
201*aca3beaaSApple OSS Distributions Dev:
202*aca3beaaSApple OSS Distributions ID
203*aca3beaaSApple OSS Distributions { $$ = ns($1); }
204*aca3beaaSApple OSS Distributions ;
205*aca3beaaSApple OSS Distributions
206*aca3beaaSApple OSS Distributions Device_spec:
207*aca3beaaSApple OSS Distributions PSEUDO_DEVICE Init_dev Dev
208*aca3beaaSApple OSS Distributions {
209*aca3beaaSApple OSS Distributions cur.d_name = $3;
210*aca3beaaSApple OSS Distributions cur.d_type = PSEUDO_DEVICE;
211*aca3beaaSApple OSS Distributions } |
212*aca3beaaSApple OSS Distributions PSEUDO_DEVICE Init_dev Dev NUMBER
213*aca3beaaSApple OSS Distributions {
214*aca3beaaSApple OSS Distributions cur.d_name = $3;
215*aca3beaaSApple OSS Distributions cur.d_type = PSEUDO_DEVICE;
216*aca3beaaSApple OSS Distributions cur.d_slave = $4;
217*aca3beaaSApple OSS Distributions } |
218*aca3beaaSApple OSS Distributions PSEUDO_DEVICE Init_dev Dev INIT ID
219*aca3beaaSApple OSS Distributions {
220*aca3beaaSApple OSS Distributions cur.d_name = $3;
221*aca3beaaSApple OSS Distributions cur.d_type = PSEUDO_DEVICE;
222*aca3beaaSApple OSS Distributions cur.d_init = ns($5);
223*aca3beaaSApple OSS Distributions } |
224*aca3beaaSApple OSS Distributions PSEUDO_DEVICE Init_dev Dev NUMBER INIT ID
225*aca3beaaSApple OSS Distributions {
226*aca3beaaSApple OSS Distributions cur.d_name = $3;
227*aca3beaaSApple OSS Distributions cur.d_type = PSEUDO_DEVICE;
228*aca3beaaSApple OSS Distributions cur.d_slave = $4;
229*aca3beaaSApple OSS Distributions cur.d_init = ns($6);
230*aca3beaaSApple OSS Distributions };
231*aca3beaaSApple OSS Distributions
232*aca3beaaSApple OSS Distributions Init_dev:
233*aca3beaaSApple OSS Distributions /* lambda */
234*aca3beaaSApple OSS Distributions { init_dev(&cur); };
235*aca3beaaSApple OSS Distributions
236*aca3beaaSApple OSS Distributions %%
237*aca3beaaSApple OSS Distributions
238*aca3beaaSApple OSS Distributions void
239*aca3beaaSApple OSS Distributions yyerror(const char *s)
240*aca3beaaSApple OSS Distributions {
241*aca3beaaSApple OSS Distributions fprintf(stderr, "config: line %d: %s\n", yyline, s);
242*aca3beaaSApple OSS Distributions }
243*aca3beaaSApple OSS Distributions
244*aca3beaaSApple OSS Distributions /*
245*aca3beaaSApple OSS Distributions * return the passed string in a new space
246*aca3beaaSApple OSS Distributions */
247*aca3beaaSApple OSS Distributions char *
ns(const char * str)248*aca3beaaSApple OSS Distributions ns(const char *str)
249*aca3beaaSApple OSS Distributions {
250*aca3beaaSApple OSS Distributions register char *cp;
251*aca3beaaSApple OSS Distributions
252*aca3beaaSApple OSS Distributions cp = malloc((unsigned)(strlen(str)+1));
253*aca3beaaSApple OSS Distributions (void) strcpy(cp, str);
254*aca3beaaSApple OSS Distributions return (cp);
255*aca3beaaSApple OSS Distributions }
256*aca3beaaSApple OSS Distributions
257*aca3beaaSApple OSS Distributions /*
258*aca3beaaSApple OSS Distributions * add a device to the list of devices
259*aca3beaaSApple OSS Distributions */
260*aca3beaaSApple OSS Distributions void
newdev(struct device * dp)261*aca3beaaSApple OSS Distributions newdev(struct device *dp)
262*aca3beaaSApple OSS Distributions {
263*aca3beaaSApple OSS Distributions register struct device *np;
264*aca3beaaSApple OSS Distributions
265*aca3beaaSApple OSS Distributions np = (struct device *) malloc(sizeof *np);
266*aca3beaaSApple OSS Distributions *np = *dp;
267*aca3beaaSApple OSS Distributions if (curp == 0)
268*aca3beaaSApple OSS Distributions dtab = np;
269*aca3beaaSApple OSS Distributions else
270*aca3beaaSApple OSS Distributions curp->d_next = np;
271*aca3beaaSApple OSS Distributions curp = np;
272*aca3beaaSApple OSS Distributions curp->d_next = 0;
273*aca3beaaSApple OSS Distributions }
274*aca3beaaSApple OSS Distributions
275*aca3beaaSApple OSS Distributions void
init_dev(struct device * dp)276*aca3beaaSApple OSS Distributions init_dev(struct device *dp)
277*aca3beaaSApple OSS Distributions {
278*aca3beaaSApple OSS Distributions
279*aca3beaaSApple OSS Distributions dp->d_name = "OHNO!!!";
280*aca3beaaSApple OSS Distributions dp->d_type = PSEUDO_DEVICE;
281*aca3beaaSApple OSS Distributions dp->d_flags = 0;
282*aca3beaaSApple OSS Distributions dp->d_slave = UNKNOWN;
283*aca3beaaSApple OSS Distributions dp->d_init = 0;
284*aca3beaaSApple OSS Distributions }
285*aca3beaaSApple OSS Distributions
286*aca3beaaSApple OSS Distributions void
deverror(const char * systemname,const char * devtype)287*aca3beaaSApple OSS Distributions deverror(const char *systemname, const char *devtype)
288*aca3beaaSApple OSS Distributions {
289*aca3beaaSApple OSS Distributions
290*aca3beaaSApple OSS Distributions fprintf(stderr, "config: %s: %s device not configured\n",
291*aca3beaaSApple OSS Distributions systemname, devtype);
292*aca3beaaSApple OSS Distributions }
293