Blame


1 564ca709 2004-04-19 devnull %{
2 564ca709 2004-04-19 devnull #include <u.h>
3 564ca709 2004-04-19 devnull #include <libc.h>
4 564ca709 2004-04-19 devnull #include <bio.h>
5 564ca709 2004-04-19 devnull #include <mach.h>
6 564ca709 2004-04-19 devnull #define Extern extern
7 564ca709 2004-04-19 devnull #include "acid.h"
8 564ca709 2004-04-19 devnull %}
9 564ca709 2004-04-19 devnull
10 564ca709 2004-04-19 devnull %union
11 564ca709 2004-04-19 devnull {
12 564ca709 2004-04-19 devnull Node *node;
13 564ca709 2004-04-19 devnull Lsym *sym;
14 4a000a28 2012-03-05 rsc u64int ival;
15 564ca709 2004-04-19 devnull float fval;
16 564ca709 2004-04-19 devnull String *string;
17 564ca709 2004-04-19 devnull }
18 564ca709 2004-04-19 devnull
19 564ca709 2004-04-19 devnull %type <node> expr monexpr term stmnt name args zexpr slist
20 564ca709 2004-04-19 devnull %type <node> member members mname castexpr idlist
21 564ca709 2004-04-19 devnull %type <sym> zname
22 564ca709 2004-04-19 devnull
23 564ca709 2004-04-19 devnull %left ';'
24 564ca709 2004-04-19 devnull %right '='
25 564ca709 2004-04-19 devnull %left Tfmt
26 564ca709 2004-04-19 devnull %left Toror
27 564ca709 2004-04-19 devnull %left Tandand
28 564ca709 2004-04-19 devnull %left '|'
29 564ca709 2004-04-19 devnull %left '^'
30 564ca709 2004-04-19 devnull %left '&'
31 564ca709 2004-04-19 devnull %left Teq Tneq
32 564ca709 2004-04-19 devnull %left '<' '>' Tleq Tgeq
33 564ca709 2004-04-19 devnull %left Tlsh Trsh
34 564ca709 2004-04-19 devnull %left '+' '-'
35 564ca709 2004-04-19 devnull %left '*' '/' '%'
36 564ca709 2004-04-19 devnull %right Tdec Tinc Tindir '.' '[' '('
37 564ca709 2004-04-19 devnull
38 564ca709 2004-04-19 devnull %token <sym> Tid
39 564ca709 2004-04-19 devnull %token <ival> Tconst Tfmt
40 564ca709 2004-04-19 devnull %token <fval> Tfconst
41 564ca709 2004-04-19 devnull %token <string> Tstring
42 564ca709 2004-04-19 devnull %token Tif Tdo Tthen Telse Twhile Tloop Thead Ttail Tappend Tfn Tret Tlocal
43 564ca709 2004-04-19 devnull %token Tcomplex Twhat Tdelete Teval Tbuiltin
44 564ca709 2004-04-19 devnull
45 564ca709 2004-04-19 devnull %%
46 564ca709 2004-04-19 devnull
47 564ca709 2004-04-19 devnull prog :
48 564ca709 2004-04-19 devnull | prog bigstmnt
49 564ca709 2004-04-19 devnull ;
50 564ca709 2004-04-19 devnull
51 564ca709 2004-04-19 devnull bigstmnt : stmnt
52 564ca709 2004-04-19 devnull {
53 564ca709 2004-04-19 devnull /* hold on to current command for gc */
54 564ca709 2004-04-19 devnull mkvar("_thiscmd")->proc = $1;
55 564ca709 2004-04-19 devnull execute($1);
56 564ca709 2004-04-19 devnull gc();
57 564ca709 2004-04-19 devnull if(interactive && nlcount){
58 564ca709 2004-04-19 devnull Bprint(bout, "acid; ");
59 564ca709 2004-04-19 devnull nlcount = 0;
60 564ca709 2004-04-19 devnull }
61 564ca709 2004-04-19 devnull }
62 564ca709 2004-04-19 devnull | Tfn Tid '(' args ')' zsemi '{' slist '}'
63 564ca709 2004-04-19 devnull {
64 564ca709 2004-04-19 devnull $2->proc = an(OLIST, $4, $8);
65 564ca709 2004-04-19 devnull }
66 564ca709 2004-04-19 devnull | Tfn Tid
67 564ca709 2004-04-19 devnull {
68 564ca709 2004-04-19 devnull $2->proc = nil;
69 564ca709 2004-04-19 devnull }
70 564ca709 2004-04-19 devnull | Tcomplex name '{' members '}' ';'
71 564ca709 2004-04-19 devnull {
72 564ca709 2004-04-19 devnull defcomplex($2, $4);
73 564ca709 2004-04-19 devnull }
74 564ca709 2004-04-19 devnull ;
75 564ca709 2004-04-19 devnull
76 564ca709 2004-04-19 devnull zsemi :
77 564ca709 2004-04-19 devnull | ';' zsemi
78 564ca709 2004-04-19 devnull
79 564ca709 2004-04-19 devnull members : member
80 564ca709 2004-04-19 devnull | members member
81 564ca709 2004-04-19 devnull {
82 564ca709 2004-04-19 devnull $$ = an(OLIST, $1, $2);
83 564ca709 2004-04-19 devnull }
84 564ca709 2004-04-19 devnull ;
85 564ca709 2004-04-19 devnull
86 564ca709 2004-04-19 devnull mname : Tid
87 564ca709 2004-04-19 devnull {
88 564ca709 2004-04-19 devnull $$ = an(ONAME, ZN, ZN);
89 564ca709 2004-04-19 devnull $$->sym = $1;
90 564ca709 2004-04-19 devnull }
91 564ca709 2004-04-19 devnull ;
92 564ca709 2004-04-19 devnull
93 564ca709 2004-04-19 devnull member : Tconst Tconst mname ';'
94 564ca709 2004-04-19 devnull {
95 564ca709 2004-04-19 devnull $3->store.u.ival = $2;
96 564ca709 2004-04-19 devnull $3->store.fmt = $1;
97 564ca709 2004-04-19 devnull $$ = $3;
98 564ca709 2004-04-19 devnull }
99 564ca709 2004-04-19 devnull | Tconst mname Tconst mname ';'
100 564ca709 2004-04-19 devnull {
101 564ca709 2004-04-19 devnull $4->store.u.ival = $3;
102 564ca709 2004-04-19 devnull $4->store.fmt = $1;
103 564ca709 2004-04-19 devnull $4->right = $2;
104 564ca709 2004-04-19 devnull $$ = $4;
105 564ca709 2004-04-19 devnull }
106 564ca709 2004-04-19 devnull | mname Tconst mname ';'
107 564ca709 2004-04-19 devnull {
108 564ca709 2004-04-19 devnull $3->store.u.ival = $2;
109 564ca709 2004-04-19 devnull $3->left = $1;
110 564ca709 2004-04-19 devnull $$ = $3;
111 564ca709 2004-04-19 devnull }
112 564ca709 2004-04-19 devnull | '{' members '}' ';'
113 564ca709 2004-04-19 devnull {
114 564ca709 2004-04-19 devnull $$ = an(OCTRUCT, $2, ZN);
115 564ca709 2004-04-19 devnull }
116 564ca709 2004-04-19 devnull ;
117 564ca709 2004-04-19 devnull
118 564ca709 2004-04-19 devnull zname :
119 564ca709 2004-04-19 devnull { $$ = 0; }
120 564ca709 2004-04-19 devnull | Tid
121 564ca709 2004-04-19 devnull ;
122 564ca709 2004-04-19 devnull
123 564ca709 2004-04-19 devnull slist : stmnt
124 564ca709 2004-04-19 devnull | slist stmnt
125 564ca709 2004-04-19 devnull {
126 564ca709 2004-04-19 devnull $$ = an(OLIST, $1, $2);
127 564ca709 2004-04-19 devnull }
128 564ca709 2004-04-19 devnull ;
129 564ca709 2004-04-19 devnull
130 564ca709 2004-04-19 devnull stmnt : zexpr ';'
131 564ca709 2004-04-19 devnull | '{' slist '}'
132 564ca709 2004-04-19 devnull {
133 564ca709 2004-04-19 devnull $$ = $2;
134 564ca709 2004-04-19 devnull }
135 564ca709 2004-04-19 devnull | Tif expr Tthen stmnt
136 564ca709 2004-04-19 devnull {
137 564ca709 2004-04-19 devnull $$ = an(OIF, $2, $4);
138 564ca709 2004-04-19 devnull }
139 564ca709 2004-04-19 devnull | Tif expr Tthen stmnt Telse stmnt
140 564ca709 2004-04-19 devnull {
141 564ca709 2004-04-19 devnull $$ = an(OIF, $2, an(OELSE, $4, $6));
142 564ca709 2004-04-19 devnull }
143 564ca709 2004-04-19 devnull | Tloop expr ',' expr Tdo stmnt
144 564ca709 2004-04-19 devnull {
145 564ca709 2004-04-19 devnull $$ = an(ODO, an(OLIST, $2, $4), $6);
146 564ca709 2004-04-19 devnull }
147 564ca709 2004-04-19 devnull | Twhile expr Tdo stmnt
148 564ca709 2004-04-19 devnull {
149 564ca709 2004-04-19 devnull $$ = an(OWHILE, $2, $4);
150 564ca709 2004-04-19 devnull }
151 564ca709 2004-04-19 devnull | Tret expr ';'
152 564ca709 2004-04-19 devnull {
153 564ca709 2004-04-19 devnull $$ = an(ORET, $2, ZN);
154 564ca709 2004-04-19 devnull }
155 564ca709 2004-04-19 devnull | Tlocal idlist
156 564ca709 2004-04-19 devnull {
157 564ca709 2004-04-19 devnull $$ = an(OLOCAL, $2, ZN);
158 564ca709 2004-04-19 devnull }
159 564ca709 2004-04-19 devnull | Tcomplex Tid name ';'
160 564ca709 2004-04-19 devnull {
161 564ca709 2004-04-19 devnull $$ = an(OCOMPLEX, $3, ZN);
162 564ca709 2004-04-19 devnull $$->sym = $2;
163 564ca709 2004-04-19 devnull }
164 564ca709 2004-04-19 devnull ;
165 564ca709 2004-04-19 devnull
166 564ca709 2004-04-19 devnull idlist : Tid
167 564ca709 2004-04-19 devnull {
168 564ca709 2004-04-19 devnull $$ = an(ONAME, ZN, ZN);
169 564ca709 2004-04-19 devnull $$->sym = $1;
170 564ca709 2004-04-19 devnull }
171 564ca709 2004-04-19 devnull | idlist ',' Tid
172 564ca709 2004-04-19 devnull {
173 564ca709 2004-04-19 devnull $$ = an(ONAME, $1, ZN);
174 564ca709 2004-04-19 devnull $$->sym = $3;
175 564ca709 2004-04-19 devnull }
176 564ca709 2004-04-19 devnull ;
177 564ca709 2004-04-19 devnull
178 564ca709 2004-04-19 devnull zexpr :
179 564ca709 2004-04-19 devnull { $$ = 0; }
180 564ca709 2004-04-19 devnull | expr
181 564ca709 2004-04-19 devnull ;
182 564ca709 2004-04-19 devnull
183 564ca709 2004-04-19 devnull expr : castexpr
184 564ca709 2004-04-19 devnull | expr '*' expr
185 564ca709 2004-04-19 devnull {
186 564ca709 2004-04-19 devnull $$ = an(OMUL, $1, $3);
187 564ca709 2004-04-19 devnull }
188 564ca709 2004-04-19 devnull | expr '/' expr
189 564ca709 2004-04-19 devnull {
190 564ca709 2004-04-19 devnull $$ = an(ODIV, $1, $3);
191 564ca709 2004-04-19 devnull }
192 564ca709 2004-04-19 devnull | expr '%' expr
193 564ca709 2004-04-19 devnull {
194 564ca709 2004-04-19 devnull $$ = an(OMOD, $1, $3);
195 564ca709 2004-04-19 devnull }
196 564ca709 2004-04-19 devnull | expr '+' expr
197 564ca709 2004-04-19 devnull {
198 564ca709 2004-04-19 devnull $$ = an(OADD, $1, $3);
199 564ca709 2004-04-19 devnull }
200 564ca709 2004-04-19 devnull | expr '-' expr
201 564ca709 2004-04-19 devnull {
202 564ca709 2004-04-19 devnull $$ = an(OSUB, $1, $3);
203 564ca709 2004-04-19 devnull }
204 564ca709 2004-04-19 devnull | expr Trsh expr
205 564ca709 2004-04-19 devnull {
206 564ca709 2004-04-19 devnull $$ = an(ORSH, $1, $3);
207 564ca709 2004-04-19 devnull }
208 564ca709 2004-04-19 devnull | expr Tlsh expr
209 564ca709 2004-04-19 devnull {
210 564ca709 2004-04-19 devnull $$ = an(OLSH, $1, $3);
211 564ca709 2004-04-19 devnull }
212 564ca709 2004-04-19 devnull | expr '<' expr
213 564ca709 2004-04-19 devnull {
214 564ca709 2004-04-19 devnull $$ = an(OLT, $1, $3);
215 564ca709 2004-04-19 devnull }
216 564ca709 2004-04-19 devnull | expr '>' expr
217 564ca709 2004-04-19 devnull {
218 564ca709 2004-04-19 devnull $$ = an(OGT, $1, $3);
219 564ca709 2004-04-19 devnull }
220 564ca709 2004-04-19 devnull | expr Tleq expr
221 564ca709 2004-04-19 devnull {
222 564ca709 2004-04-19 devnull $$ = an(OLEQ, $1, $3);
223 564ca709 2004-04-19 devnull }
224 564ca709 2004-04-19 devnull | expr Tgeq expr
225 564ca709 2004-04-19 devnull {
226 564ca709 2004-04-19 devnull $$ = an(OGEQ, $1, $3);
227 564ca709 2004-04-19 devnull }
228 564ca709 2004-04-19 devnull | expr Teq expr
229 564ca709 2004-04-19 devnull {
230 564ca709 2004-04-19 devnull $$ = an(OEQ, $1, $3);
231 564ca709 2004-04-19 devnull }
232 564ca709 2004-04-19 devnull | expr Tneq expr
233 564ca709 2004-04-19 devnull {
234 564ca709 2004-04-19 devnull $$ = an(ONEQ, $1, $3);
235 564ca709 2004-04-19 devnull }
236 564ca709 2004-04-19 devnull | expr '&' expr
237 564ca709 2004-04-19 devnull {
238 564ca709 2004-04-19 devnull $$ = an(OLAND, $1, $3);
239 564ca709 2004-04-19 devnull }
240 564ca709 2004-04-19 devnull | expr '^' expr
241 564ca709 2004-04-19 devnull {
242 564ca709 2004-04-19 devnull $$ = an(OXOR, $1, $3);
243 564ca709 2004-04-19 devnull }
244 564ca709 2004-04-19 devnull | expr '|' expr
245 564ca709 2004-04-19 devnull {
246 564ca709 2004-04-19 devnull $$ = an(OLOR, $1, $3);
247 564ca709 2004-04-19 devnull }
248 564ca709 2004-04-19 devnull | expr Tandand expr
249 564ca709 2004-04-19 devnull {
250 564ca709 2004-04-19 devnull $$ = an(OCAND, $1, $3);
251 564ca709 2004-04-19 devnull }
252 564ca709 2004-04-19 devnull | expr Toror expr
253 564ca709 2004-04-19 devnull {
254 564ca709 2004-04-19 devnull $$ = an(OCOR, $1, $3);
255 564ca709 2004-04-19 devnull }
256 564ca709 2004-04-19 devnull | expr '=' expr
257 564ca709 2004-04-19 devnull {
258 564ca709 2004-04-19 devnull $$ = an(OASGN, $1, $3);
259 564ca709 2004-04-19 devnull }
260 564ca709 2004-04-19 devnull | expr Tfmt
261 564ca709 2004-04-19 devnull {
262 564ca709 2004-04-19 devnull $$ = an(OFMT, $1, con($2));
263 564ca709 2004-04-19 devnull }
264 564ca709 2004-04-19 devnull ;
265 564ca709 2004-04-19 devnull
266 564ca709 2004-04-19 devnull castexpr : monexpr
267 564ca709 2004-04-19 devnull | '(' Tid ')' monexpr
268 564ca709 2004-04-19 devnull {
269 564ca709 2004-04-19 devnull $$ = an(OCAST, $4, ZN);
270 564ca709 2004-04-19 devnull $$->sym = $2;
271 564ca709 2004-04-19 devnull }
272 564ca709 2004-04-19 devnull ;
273 564ca709 2004-04-19 devnull
274 564ca709 2004-04-19 devnull monexpr : term
275 564ca709 2004-04-19 devnull | '*' monexpr
276 564ca709 2004-04-19 devnull {
277 564ca709 2004-04-19 devnull $$ = an(OINDM, $2, ZN);
278 564ca709 2004-04-19 devnull }
279 564ca709 2004-04-19 devnull | '@' monexpr
280 564ca709 2004-04-19 devnull {
281 564ca709 2004-04-19 devnull $$ = an(OINDC, $2, ZN);
282 564ca709 2004-04-19 devnull }
283 564ca709 2004-04-19 devnull | '+' monexpr
284 564ca709 2004-04-19 devnull {
285 4f2ac1b7 2005-01-23 devnull $$ = an(OUPLUS, $2, ZN);
286 564ca709 2004-04-19 devnull }
287 564ca709 2004-04-19 devnull | '-' monexpr
288 564ca709 2004-04-19 devnull {
289 564ca709 2004-04-19 devnull $$ = con(0);
290 564ca709 2004-04-19 devnull $$ = an(OSUB, $$, $2);
291 564ca709 2004-04-19 devnull }
292 564ca709 2004-04-19 devnull | Tdec monexpr
293 564ca709 2004-04-19 devnull {
294 564ca709 2004-04-19 devnull $$ = an(OEDEC, $2, ZN);
295 564ca709 2004-04-19 devnull }
296 564ca709 2004-04-19 devnull | Tinc monexpr
297 564ca709 2004-04-19 devnull {
298 564ca709 2004-04-19 devnull $$ = an(OEINC, $2, ZN);
299 564ca709 2004-04-19 devnull }
300 564ca709 2004-04-19 devnull | Thead monexpr
301 564ca709 2004-04-19 devnull {
302 564ca709 2004-04-19 devnull $$ = an(OHEAD, $2, ZN);
303 564ca709 2004-04-19 devnull }
304 564ca709 2004-04-19 devnull | Ttail monexpr
305 564ca709 2004-04-19 devnull {
306 564ca709 2004-04-19 devnull $$ = an(OTAIL, $2, ZN);
307 564ca709 2004-04-19 devnull }
308 564ca709 2004-04-19 devnull | Tappend monexpr ',' monexpr
309 564ca709 2004-04-19 devnull {
310 564ca709 2004-04-19 devnull $$ = an(OAPPEND, $2, $4);
311 564ca709 2004-04-19 devnull }
312 564ca709 2004-04-19 devnull | Tdelete monexpr ',' monexpr
313 564ca709 2004-04-19 devnull {
314 564ca709 2004-04-19 devnull $$ = an(ODELETE, $2, $4);
315 564ca709 2004-04-19 devnull }
316 564ca709 2004-04-19 devnull | '!' monexpr
317 564ca709 2004-04-19 devnull {
318 564ca709 2004-04-19 devnull $$ = an(ONOT, $2, ZN);
319 564ca709 2004-04-19 devnull }
320 564ca709 2004-04-19 devnull | '~' monexpr
321 564ca709 2004-04-19 devnull {
322 564ca709 2004-04-19 devnull $$ = an(OXOR, $2, con(-1));
323 564ca709 2004-04-19 devnull }
324 564ca709 2004-04-19 devnull | Teval monexpr
325 564ca709 2004-04-19 devnull {
326 564ca709 2004-04-19 devnull $$ = an(OEVAL, $2, ZN);
327 564ca709 2004-04-19 devnull }
328 564ca709 2004-04-19 devnull ;
329 564ca709 2004-04-19 devnull
330 564ca709 2004-04-19 devnull term : '(' expr ')'
331 564ca709 2004-04-19 devnull {
332 564ca709 2004-04-19 devnull $$ = $2;
333 564ca709 2004-04-19 devnull }
334 564ca709 2004-04-19 devnull | '{' args '}'
335 564ca709 2004-04-19 devnull {
336 564ca709 2004-04-19 devnull $$ = an(OCTRUCT, $2, ZN);
337 564ca709 2004-04-19 devnull }
338 564ca709 2004-04-19 devnull | term '[' expr ']'
339 564ca709 2004-04-19 devnull {
340 564ca709 2004-04-19 devnull $$ = an(OINDEX, $1, $3);
341 564ca709 2004-04-19 devnull }
342 564ca709 2004-04-19 devnull | term Tdec
343 564ca709 2004-04-19 devnull {
344 564ca709 2004-04-19 devnull $$ = an(OPDEC, $1, ZN);
345 564ca709 2004-04-19 devnull }
346 564ca709 2004-04-19 devnull | term '.' Tid
347 564ca709 2004-04-19 devnull {
348 564ca709 2004-04-19 devnull $$ = an(ODOT, $1, ZN);
349 564ca709 2004-04-19 devnull $$->sym = $3;
350 564ca709 2004-04-19 devnull }
351 564ca709 2004-04-19 devnull | term Tindir Tid
352 564ca709 2004-04-19 devnull {
353 564ca709 2004-04-19 devnull $$ = an(ODOT, an(OINDM, $1, ZN), ZN);
354 564ca709 2004-04-19 devnull $$->sym = $3;
355 564ca709 2004-04-19 devnull }
356 564ca709 2004-04-19 devnull | term Tinc
357 564ca709 2004-04-19 devnull {
358 564ca709 2004-04-19 devnull $$ = an(OPINC, $1, ZN);
359 564ca709 2004-04-19 devnull }
360 564ca709 2004-04-19 devnull | name '(' args ')'
361 564ca709 2004-04-19 devnull {
362 564ca709 2004-04-19 devnull $$ = an(OCALL, $1, $3);
363 564ca709 2004-04-19 devnull }
364 564ca709 2004-04-19 devnull | Tbuiltin name '(' args ')'
365 564ca709 2004-04-19 devnull {
366 564ca709 2004-04-19 devnull $$ = an(OCALL, $2, $4);
367 564ca709 2004-04-19 devnull $$->builtin = 1;
368 564ca709 2004-04-19 devnull }
369 564ca709 2004-04-19 devnull | name
370 564ca709 2004-04-19 devnull | Tconst
371 564ca709 2004-04-19 devnull {
372 564ca709 2004-04-19 devnull $$ = con($1);
373 564ca709 2004-04-19 devnull }
374 564ca709 2004-04-19 devnull | Tfconst
375 564ca709 2004-04-19 devnull {
376 564ca709 2004-04-19 devnull $$ = an(OCONST, ZN, ZN);
377 564ca709 2004-04-19 devnull $$->type = TFLOAT;
378 564ca709 2004-04-19 devnull $$->store.fmt = 'f';
379 564ca709 2004-04-19 devnull $$->store.u.fval = $1;
380 564ca709 2004-04-19 devnull }
381 564ca709 2004-04-19 devnull | Tstring
382 564ca709 2004-04-19 devnull {
383 564ca709 2004-04-19 devnull $$ = an(OCONST, ZN, ZN);
384 564ca709 2004-04-19 devnull $$->type = TSTRING;
385 564ca709 2004-04-19 devnull $$->store.u.string = $1;
386 564ca709 2004-04-19 devnull $$->store.fmt = 's';
387 564ca709 2004-04-19 devnull }
388 564ca709 2004-04-19 devnull | Twhat zname
389 564ca709 2004-04-19 devnull {
390 564ca709 2004-04-19 devnull $$ = an(OWHAT, ZN, ZN);
391 564ca709 2004-04-19 devnull $$->sym = $2;
392 564ca709 2004-04-19 devnull }
393 564ca709 2004-04-19 devnull ;
394 564ca709 2004-04-19 devnull
395 564ca709 2004-04-19 devnull name : Tid
396 564ca709 2004-04-19 devnull {
397 564ca709 2004-04-19 devnull $$ = an(ONAME, ZN, ZN);
398 564ca709 2004-04-19 devnull $$->sym = $1;
399 564ca709 2004-04-19 devnull }
400 564ca709 2004-04-19 devnull | Tid ':' name
401 564ca709 2004-04-19 devnull {
402 564ca709 2004-04-19 devnull $$ = an(OFRAME, $3, ZN);
403 564ca709 2004-04-19 devnull $$->sym = $1;
404 564ca709 2004-04-19 devnull }
405 564ca709 2004-04-19 devnull ;
406 564ca709 2004-04-19 devnull
407 564ca709 2004-04-19 devnull args : zexpr
408 564ca709 2004-04-19 devnull | args ',' zexpr
409 564ca709 2004-04-19 devnull {
410 564ca709 2004-04-19 devnull $$ = an(OLIST, $1, $3);
411 564ca709 2004-04-19 devnull }
412 564ca709 2004-04-19 devnull ;