blob: 4f5bcfb457f472267398aedee9d54c4111f316f4 [file] [log] [blame]
Eric Andersen72d8e442003-08-05 02:18:25 +00001/* A Bison parser, made by GNU Bison 1.875a. */
Eric Andersenc9f20d92002-12-05 08:41:41 +00002
3/* Skeleton parser for Yacc-like parsing with Bison,
Eric Andersen72d8e442003-08-05 02:18:25 +00004 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Eric Andersenc9f20d92002-12-05 08:41:41 +00005
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
25
26/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
28
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
Eric Andersen72d8e442003-08-05 02:18:25 +000037#define YYBISON 1
38
39/* Skeleton name. */
40#define YYSKELETON_NAME "yacc.c"
Eric Andersenc9f20d92002-12-05 08:41:41 +000041
42/* Pure parsers. */
Eric Andersen72d8e442003-08-05 02:18:25 +000043#define YYPURE 0
Eric Andersenc9f20d92002-12-05 08:41:41 +000044
45/* Using locations. */
46#define YYLSP_NEEDED 0
47
48/* If NAME_PREFIX is specified substitute the variables and functions
49 names. */
50#define yyparse zconfparse
51#define yylex zconflex
52#define yyerror zconferror
53#define yylval zconflval
54#define yychar zconfchar
55#define yydebug zconfdebug
56#define yynerrs zconfnerrs
57
58
59/* Tokens. */
60#ifndef YYTOKENTYPE
61# define YYTOKENTYPE
62 /* Put the tokens into the symbol table, so that GDB and other debuggers
63 know about them. */
64 enum yytokentype {
65 T_MAINMENU = 258,
66 T_MENU = 259,
67 T_ENDMENU = 260,
68 T_SOURCE = 261,
69 T_CHOICE = 262,
70 T_ENDCHOICE = 263,
71 T_COMMENT = 264,
72 T_CONFIG = 265,
Eric Andersen72d8e442003-08-05 02:18:25 +000073 T_MENUCONFIG = 266,
74 T_HELP = 267,
75 T_HELPTEXT = 268,
76 T_IF = 269,
77 T_ENDIF = 270,
78 T_DEPENDS = 271,
79 T_REQUIRES = 272,
80 T_OPTIONAL = 273,
81 T_PROMPT = 274,
82 T_DEFAULT = 275,
83 T_TRISTATE = 276,
84 T_DEF_TRISTATE = 277,
85 T_BOOLEAN = 278,
86 T_DEF_BOOLEAN = 279,
Eric Andersenc9f20d92002-12-05 08:41:41 +000087 T_STRING = 280,
Eric Andersen72d8e442003-08-05 02:18:25 +000088 T_INT = 281,
89 T_HEX = 282,
90 T_WORD = 283,
91 T_WORD_QUOTE = 284,
92 T_UNEQUAL = 285,
93 T_EOF = 286,
94 T_EOL = 287,
95 T_CLOSE_PAREN = 288,
96 T_OPEN_PAREN = 289,
97 T_ON = 290,
98 T_SELECT = 291,
99 T_RANGE = 292,
100 T_OR = 293,
101 T_AND = 294,
102 T_EQUAL = 295,
103 T_NOT = 296
Eric Andersenc9f20d92002-12-05 08:41:41 +0000104 };
105#endif
106#define T_MAINMENU 258
107#define T_MENU 259
108#define T_ENDMENU 260
109#define T_SOURCE 261
110#define T_CHOICE 262
111#define T_ENDCHOICE 263
112#define T_COMMENT 264
113#define T_CONFIG 265
Eric Andersen72d8e442003-08-05 02:18:25 +0000114#define T_MENUCONFIG 266
115#define T_HELP 267
116#define T_HELPTEXT 268
117#define T_IF 269
118#define T_ENDIF 270
119#define T_DEPENDS 271
120#define T_REQUIRES 272
121#define T_OPTIONAL 273
122#define T_PROMPT 274
123#define T_DEFAULT 275
124#define T_TRISTATE 276
125#define T_DEF_TRISTATE 277
126#define T_BOOLEAN 278
127#define T_DEF_BOOLEAN 279
Eric Andersenc9f20d92002-12-05 08:41:41 +0000128#define T_STRING 280
Eric Andersen72d8e442003-08-05 02:18:25 +0000129#define T_INT 281
130#define T_HEX 282
131#define T_WORD 283
132#define T_WORD_QUOTE 284
133#define T_UNEQUAL 285
134#define T_EOF 286
135#define T_EOL 287
136#define T_CLOSE_PAREN 288
137#define T_OPEN_PAREN 289
138#define T_ON 290
139#define T_SELECT 291
140#define T_RANGE 292
141#define T_OR 293
142#define T_AND 294
143#define T_EQUAL 295
144#define T_NOT 296
Eric Andersenc9f20d92002-12-05 08:41:41 +0000145
146
147
148
149/* Copy the first part of user declarations. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000150
Eric Andersenc9f20d92002-12-05 08:41:41 +0000151
152/*
153 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
154 * Released under the terms of the GNU GPL v2.0.
155 */
156
157#include <ctype.h>
158#include <stdarg.h>
159#include <stdio.h>
160#include <stdlib.h>
161#include <string.h>
162#include <stdbool.h>
163
164#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
165
166#define PRINTD 0x0001
167#define DEBUG_PARSE 0x0002
168
169int cdebug = PRINTD;
170
171extern int zconflex(void);
172static void zconfprint(const char *err, ...);
173static void zconferror(const char *err);
174static bool zconf_endtoken(int token, int starttoken, int endtoken);
175
176struct symbol *symbol_hash[257];
177
178#define YYERROR_VERBOSE
179
180
181/* Enabling traces. */
182#ifndef YYDEBUG
Eric Andersen72d8e442003-08-05 02:18:25 +0000183# define YYDEBUG 0
Eric Andersenc9f20d92002-12-05 08:41:41 +0000184#endif
185
186/* Enabling verbose error messages. */
187#ifdef YYERROR_VERBOSE
188# undef YYERROR_VERBOSE
189# define YYERROR_VERBOSE 1
190#else
191# define YYERROR_VERBOSE 0
192#endif
193
Eric Andersen72d8e442003-08-05 02:18:25 +0000194#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
195
196typedef union YYSTYPE {
Eric Andersenc9f20d92002-12-05 08:41:41 +0000197 int token;
198 char *string;
199 struct symbol *symbol;
200 struct expr *expr;
201 struct menu *menu;
Eric Andersen72d8e442003-08-05 02:18:25 +0000202} YYSTYPE;
203/* Line 191 of yacc.c. */
204
205# define yystype YYSTYPE /* obsolescent; will be withdrawn */
206# define YYSTYPE_IS_DECLARED 1
Eric Andersenc9f20d92002-12-05 08:41:41 +0000207# define YYSTYPE_IS_TRIVIAL 1
208#endif
209
Eric Andersen72d8e442003-08-05 02:18:25 +0000210
Eric Andersenc9f20d92002-12-05 08:41:41 +0000211
212/* Copy the second part of user declarations. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000213
Eric Andersenc9f20d92002-12-05 08:41:41 +0000214
215#define LKC_DIRECT_LINK
216#include "lkc.h"
217
218
Eric Andersen72d8e442003-08-05 02:18:25 +0000219/* Line 214 of yacc.c. */
220
Eric Andersenc9f20d92002-12-05 08:41:41 +0000221
222#if ! defined (yyoverflow) || YYERROR_VERBOSE
223
224/* The parser invokes alloca or malloc; define the necessary symbols. */
225
226# if YYSTACK_USE_ALLOCA
227# define YYSTACK_ALLOC alloca
228# else
229# ifndef YYSTACK_USE_ALLOCA
230# if defined (alloca) || defined (_ALLOCA_H)
231# define YYSTACK_ALLOC alloca
232# else
233# ifdef __GNUC__
234# define YYSTACK_ALLOC __builtin_alloca
235# endif
236# endif
237# endif
238# endif
239
240# ifdef YYSTACK_ALLOC
241 /* Pacify GCC's `empty if-body' warning. */
242# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
243# else
244# if defined (__STDC__) || defined (__cplusplus)
245# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
246# define YYSIZE_T size_t
247# endif
248# define YYSTACK_ALLOC malloc
249# define YYSTACK_FREE free
250# endif
251#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
252
253
254#if (! defined (yyoverflow) \
255 && (! defined (__cplusplus) \
Eric Andersen72d8e442003-08-05 02:18:25 +0000256 || (YYSTYPE_IS_TRIVIAL)))
Eric Andersenc9f20d92002-12-05 08:41:41 +0000257
258/* A type that is properly aligned for any stack member. */
259union yyalloc
260{
261 short yyss;
262 YYSTYPE yyvs;
263 };
264
265/* The size of the maximum gap between one aligned stack and the next. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000266# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000267
268/* The size of an array large to enough to hold all stacks, each with
269 N elements. */
270# define YYSTACK_BYTES(N) \
271 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
Eric Andersen72d8e442003-08-05 02:18:25 +0000272 + YYSTACK_GAP_MAXIMUM)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000273
274/* Copy COUNT objects from FROM to TO. The source and destination do
275 not overlap. */
276# ifndef YYCOPY
277# if 1 < __GNUC__
278# define YYCOPY(To, From, Count) \
279 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
280# else
281# define YYCOPY(To, From, Count) \
282 do \
283 { \
284 register YYSIZE_T yyi; \
285 for (yyi = 0; yyi < (Count); yyi++) \
Eric Andersen72d8e442003-08-05 02:18:25 +0000286 (To)[yyi] = (From)[yyi]; \
Eric Andersenc9f20d92002-12-05 08:41:41 +0000287 } \
288 while (0)
289# endif
290# endif
291
292/* Relocate STACK from its old location to the new one. The
293 local variables YYSIZE and YYSTACKSIZE give the old and new number of
294 elements in the stack, and YYPTR gives the new location of the
295 stack. Advance YYPTR to a properly aligned location for the next
296 stack. */
297# define YYSTACK_RELOCATE(Stack) \
298 do \
299 { \
300 YYSIZE_T yynewbytes; \
301 YYCOPY (&yyptr->Stack, Stack, yysize); \
302 Stack = &yyptr->Stack; \
Eric Andersen72d8e442003-08-05 02:18:25 +0000303 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
Eric Andersenc9f20d92002-12-05 08:41:41 +0000304 yyptr += yynewbytes / sizeof (*yyptr); \
305 } \
306 while (0)
307
308#endif
309
310#if defined (__STDC__) || defined (__cplusplus)
311 typedef signed char yysigned_char;
312#else
313 typedef short yysigned_char;
314#endif
315
316/* YYFINAL -- State number of the termination state. */
317#define YYFINAL 2
Eric Andersen72d8e442003-08-05 02:18:25 +0000318/* YYLAST -- Last index in YYTABLE. */
319#define YYLAST 201
Eric Andersenc9f20d92002-12-05 08:41:41 +0000320
321/* YYNTOKENS -- Number of terminals. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000322#define YYNTOKENS 42
Eric Andersenc9f20d92002-12-05 08:41:41 +0000323/* YYNNTS -- Number of nonterminals. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000324#define YYNNTS 41
Eric Andersenc9f20d92002-12-05 08:41:41 +0000325/* YYNRULES -- Number of rules. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000326#define YYNRULES 104
Eric Andersenc9f20d92002-12-05 08:41:41 +0000327/* YYNRULES -- Number of states. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000328#define YYNSTATES 182
Eric Andersenc9f20d92002-12-05 08:41:41 +0000329
330/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
331#define YYUNDEFTOK 2
Eric Andersen72d8e442003-08-05 02:18:25 +0000332#define YYMAXUTOK 296
Eric Andersenc9f20d92002-12-05 08:41:41 +0000333
Eric Andersen72d8e442003-08-05 02:18:25 +0000334#define YYTRANSLATE(YYX) \
335 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000336
337/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
338static const unsigned char yytranslate[] =
339{
340 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
341 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
342 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
343 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
344 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
345 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
346 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
347 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
348 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
349 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
350 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
351 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
352 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
353 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
354 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
355 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
356 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
357 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
358 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
359 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
360 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
361 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
362 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
363 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
364 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
365 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
366 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
367 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
368 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
Eric Andersen72d8e442003-08-05 02:18:25 +0000369 35, 36, 37, 38, 39, 40, 41
Eric Andersenc9f20d92002-12-05 08:41:41 +0000370};
371
372#if YYDEBUG
373/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
374 YYRHS. */
375static const unsigned short yyprhs[] =
376{
377 0, 0, 3, 4, 7, 9, 11, 13, 17, 19,
Eric Andersen72d8e442003-08-05 02:18:25 +0000378 21, 23, 26, 28, 30, 32, 34, 36, 38, 42,
379 45, 49, 52, 53, 56, 59, 62, 65, 69, 74,
380 78, 83, 87, 91, 95, 100, 105, 110, 116, 119,
381 122, 124, 128, 131, 132, 135, 138, 141, 144, 149,
382 153, 157, 160, 165, 166, 169, 173, 175, 179, 182,
383 183, 186, 189, 192, 196, 199, 201, 205, 208, 209,
384 212, 215, 218, 222, 226, 228, 232, 235, 238, 241,
385 242, 245, 248, 253, 257, 261, 262, 265, 267, 269,
386 272, 275, 278, 280, 282, 283, 286, 288, 292, 296,
387 300, 303, 307, 311, 313
Eric Andersenc9f20d92002-12-05 08:41:41 +0000388};
389
390/* YYRHS -- A `-1'-separated list of the rules' RHS. */
391static const yysigned_char yyrhs[] =
392{
Eric Andersen72d8e442003-08-05 02:18:25 +0000393 43, 0, -1, -1, 43, 44, -1, 45, -1, 55,
394 -1, 66, -1, 3, 77, 79, -1, 5, -1, 15,
395 -1, 8, -1, 1, 79, -1, 61, -1, 71, -1,
396 47, -1, 49, -1, 69, -1, 79, -1, 10, 28,
397 32, -1, 46, 50, -1, 11, 28, 32, -1, 48,
398 50, -1, -1, 50, 51, -1, 50, 75, -1, 50,
399 73, -1, 50, 32, -1, 21, 76, 32, -1, 22,
400 81, 80, 32, -1, 23, 76, 32, -1, 24, 81,
401 80, 32, -1, 26, 76, 32, -1, 27, 76, 32,
402 -1, 25, 76, 32, -1, 19, 77, 80, 32, -1,
403 20, 81, 80, 32, -1, 36, 28, 80, 32, -1,
404 37, 82, 82, 80, 32, -1, 7, 32, -1, 52,
405 56, -1, 78, -1, 53, 58, 54, -1, 53, 58,
406 -1, -1, 56, 57, -1, 56, 75, -1, 56, 73,
407 -1, 56, 32, -1, 19, 77, 80, 32, -1, 21,
408 76, 32, -1, 23, 76, 32, -1, 18, 32, -1,
409 20, 28, 80, 32, -1, -1, 58, 45, -1, 14,
410 81, 32, -1, 78, -1, 59, 62, 60, -1, 59,
411 62, -1, -1, 62, 45, -1, 62, 66, -1, 62,
412 55, -1, 4, 77, 32, -1, 63, 74, -1, 78,
413 -1, 64, 67, 65, -1, 64, 67, -1, -1, 67,
414 45, -1, 67, 66, -1, 67, 55, -1, 67, 1,
415 32, -1, 6, 77, 32, -1, 68, -1, 9, 77,
416 32, -1, 70, 74, -1, 12, 32, -1, 72, 13,
417 -1, -1, 74, 75, -1, 74, 32, -1, 16, 35,
418 81, 32, -1, 16, 81, 32, -1, 17, 81, 32,
419 -1, -1, 77, 80, -1, 28, -1, 29, -1, 5,
420 79, -1, 8, 79, -1, 15, 79, -1, 32, -1,
421 31, -1, -1, 14, 81, -1, 82, -1, 82, 40,
422 82, -1, 82, 30, 82, -1, 34, 81, 33, -1,
423 41, 81, -1, 81, 38, 81, -1, 81, 39, 81,
424 -1, 28, -1, 29, -1
Eric Andersenc9f20d92002-12-05 08:41:41 +0000425};
426
427/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
428static const unsigned short yyrline[] =
429{
Eric Andersen72d8e442003-08-05 02:18:25 +0000430 0, 94, 94, 95, 98, 99, 100, 101, 102, 103,
431 104, 105, 109, 110, 111, 112, 113, 114, 120, 128,
432 134, 142, 152, 154, 155, 156, 157, 160, 166, 173,
433 179, 186, 192, 198, 204, 210, 216, 222, 230, 239,
434 245, 254, 255, 261, 263, 264, 265, 266, 269, 275,
435 281, 287, 293, 299, 301, 306, 315, 324, 325, 331,
436 333, 334, 335, 340, 347, 353, 362, 363, 369, 371,
437 372, 373, 374, 377, 383, 390, 397, 404, 410, 417,
438 418, 419, 422, 427, 432, 440, 442, 447, 448, 451,
439 452, 453, 457, 457, 459, 460, 463, 464, 465, 466,
440 467, 468, 469, 472, 473
Eric Andersenc9f20d92002-12-05 08:41:41 +0000441};
442#endif
443
444#if YYDEBUG || YYERROR_VERBOSE
445/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
446 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
447static const char *const yytname[] =
448{
449 "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU",
450 "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
Eric Andersen72d8e442003-08-05 02:18:25 +0000451 "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
452 "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_DEFAULT", "T_TRISTATE",
453 "T_DEF_TRISTATE", "T_BOOLEAN", "T_DEF_BOOLEAN", "T_STRING", "T_INT",
454 "T_HEX", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL", "T_EOF", "T_EOL",
455 "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_ON", "T_SELECT", "T_RANGE", "T_OR",
456 "T_AND", "T_EQUAL", "T_NOT", "$accept", "input", "block",
457 "common_block", "config_entry_start", "config_stmt",
458 "menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
Eric Andersenc9f20d92002-12-05 08:41:41 +0000459 "config_option", "choice", "choice_entry", "choice_end", "choice_stmt",
460 "choice_option_list", "choice_option", "choice_block", "if", "if_end",
461 "if_stmt", "if_block", "menu", "menu_entry", "menu_end", "menu_stmt",
462 "menu_block", "source", "source_stmt", "comment", "comment_stmt",
463 "help_start", "help", "depends_list", "depends", "prompt_stmt_opt",
464 "prompt", "end", "nl_or_eof", "if_expr", "expr", "symbol", 0
465};
466#endif
467
468# ifdef YYPRINT
469/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
470 token YYLEX-NUM. */
471static const unsigned short yytoknum[] =
472{
473 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
474 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
475 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
Eric Andersen72d8e442003-08-05 02:18:25 +0000476 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
477 295, 296
Eric Andersenc9f20d92002-12-05 08:41:41 +0000478};
479# endif
480
481/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
482static const unsigned char yyr1[] =
483{
Eric Andersen72d8e442003-08-05 02:18:25 +0000484 0, 42, 43, 43, 44, 44, 44, 44, 44, 44,
485 44, 44, 45, 45, 45, 45, 45, 45, 46, 47,
486 48, 49, 50, 50, 50, 50, 50, 51, 51, 51,
487 51, 51, 51, 51, 51, 51, 51, 51, 52, 53,
488 54, 55, 55, 56, 56, 56, 56, 56, 57, 57,
489 57, 57, 57, 58, 58, 59, 60, 61, 61, 62,
490 62, 62, 62, 63, 64, 65, 66, 66, 67, 67,
491 67, 67, 67, 68, 69, 70, 71, 72, 73, 74,
492 74, 74, 75, 75, 75, 76, 76, 77, 77, 78,
493 78, 78, 79, 79, 80, 80, 81, 81, 81, 81,
494 81, 81, 81, 82, 82
Eric Andersenc9f20d92002-12-05 08:41:41 +0000495};
496
497/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
498static const unsigned char yyr2[] =
499{
500 0, 2, 0, 2, 1, 1, 1, 3, 1, 1,
Eric Andersen72d8e442003-08-05 02:18:25 +0000501 1, 2, 1, 1, 1, 1, 1, 1, 3, 2,
502 3, 2, 0, 2, 2, 2, 2, 3, 4, 3,
503 4, 3, 3, 3, 4, 4, 4, 5, 2, 2,
504 1, 3, 2, 0, 2, 2, 2, 2, 4, 3,
505 3, 2, 4, 0, 2, 3, 1, 3, 2, 0,
506 2, 2, 2, 3, 2, 1, 3, 2, 0, 2,
507 2, 2, 3, 3, 1, 3, 2, 2, 2, 0,
508 2, 2, 4, 3, 3, 0, 2, 1, 1, 2,
509 2, 2, 1, 1, 0, 2, 1, 3, 3, 3,
510 2, 3, 3, 1, 1
Eric Andersenc9f20d92002-12-05 08:41:41 +0000511};
512
513/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
514 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
515 means the default is an error. */
516static const unsigned char yydefact[] =
517{
Eric Andersen72d8e442003-08-05 02:18:25 +0000518 2, 0, 1, 0, 0, 0, 8, 0, 0, 10,
519 0, 0, 0, 0, 9, 93, 92, 3, 4, 22,
520 14, 22, 15, 43, 53, 5, 59, 12, 79, 68,
521 6, 74, 16, 79, 13, 17, 11, 87, 88, 0,
522 0, 0, 38, 0, 0, 0, 103, 104, 0, 0,
523 0, 96, 19, 21, 39, 42, 58, 64, 0, 76,
524 7, 63, 73, 75, 18, 20, 0, 100, 55, 0,
525 0, 0, 0, 0, 0, 0, 0, 0, 85, 0,
526 85, 0, 85, 85, 85, 26, 0, 0, 23, 0,
527 25, 24, 0, 0, 0, 85, 85, 47, 44, 46,
528 45, 0, 0, 0, 54, 41, 40, 60, 62, 57,
529 61, 56, 81, 80, 0, 69, 71, 66, 70, 65,
530 99, 101, 102, 98, 97, 77, 0, 0, 0, 94,
531 94, 0, 94, 94, 0, 94, 0, 0, 0, 94,
532 0, 78, 51, 94, 94, 0, 0, 89, 90, 91,
533 72, 0, 83, 84, 0, 0, 0, 27, 86, 0,
534 29, 0, 33, 31, 32, 0, 94, 0, 0, 49,
535 50, 82, 95, 34, 35, 28, 30, 36, 0, 48,
536 52, 37
Eric Andersenc9f20d92002-12-05 08:41:41 +0000537};
538
539/* YYDEFGOTO[NTERM-NUM]. */
540static const short yydefgoto[] =
541{
Eric Andersen72d8e442003-08-05 02:18:25 +0000542 -1, 1, 17, 18, 19, 20, 21, 22, 52, 88,
543 23, 24, 105, 25, 54, 98, 55, 26, 109, 27,
544 56, 28, 29, 117, 30, 58, 31, 32, 33, 34,
545 89, 90, 57, 91, 131, 132, 106, 35, 155, 50,
546 51
Eric Andersenc9f20d92002-12-05 08:41:41 +0000547};
548
549/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
550 STATE-NUM. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000551#define YYPACT_NINF -99
Eric Andersenc9f20d92002-12-05 08:41:41 +0000552static const short yypact[] =
553{
Eric Andersen72d8e442003-08-05 02:18:25 +0000554 -99, 48, -99, 38, 46, 46, -99, 46, -29, -99,
555 46, -17, -3, -11, -99, -99, -99, -99, -99, -99,
556 -99, -99, -99, -99, -99, -99, -99, -99, -99, -99,
557 -99, -99, -99, -99, -99, -99, -99, -99, -99, 38,
558 12, 15, -99, 18, 51, 62, -99, -99, -11, -11,
559 4, -24, 138, 138, 160, 121, 110, -4, 81, -4,
560 -99, -99, -99, -99, -99, -99, -19, -99, -99, -11,
561 -11, 70, 70, 73, 32, -11, 46, -11, 46, -11,
562 46, -11, 46, 46, 46, -99, 36, 70, -99, 95,
563 -99, -99, 96, 46, 106, 46, 46, -99, -99, -99,
564 -99, 38, 38, 38, -99, -99, -99, -99, -99, -99,
565 -99, -99, -99, -99, 112, -99, -99, -99, -99, -99,
566 -99, 117, -99, -99, -99, -99, -11, 33, 65, 131,
567 1, 119, 131, 1, 136, 1, 153, 154, 155, 131,
568 70, -99, -99, 131, 131, 156, 157, -99, -99, -99,
569 -99, 101, -99, -99, -11, 158, 159, -99, -99, 161,
570 -99, 162, -99, -99, -99, 163, 131, 164, 165, -99,
571 -99, -99, 99, -99, -99, -99, -99, -99, 166, -99,
572 -99, -99
Eric Andersenc9f20d92002-12-05 08:41:41 +0000573};
574
575/* YYPGOTO[NTERM-NUM]. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000576static const short yypgoto[] =
Eric Andersenc9f20d92002-12-05 08:41:41 +0000577{
Eric Andersen72d8e442003-08-05 02:18:25 +0000578 -99, -99, -99, 111, -99, -99, -99, -99, 178, -99,
579 -99, -99, -99, 91, -99, -99, -99, -99, -99, -99,
580 -99, -99, -99, -99, 115, -99, -99, -99, -99, -99,
581 -99, 146, 168, 89, 27, 0, 126, -1, -98, -48,
582 -63
Eric Andersenc9f20d92002-12-05 08:41:41 +0000583};
584
585/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
586 positive, shift that token. If negative, reduce the rule which
587 number is the opposite. If zero, do what YYDEFACT says.
Eric Andersen72d8e442003-08-05 02:18:25 +0000588 If YYTABLE_NINF, syntax error. */
589#define YYTABLE_NINF -68
Eric Andersenc9f20d92002-12-05 08:41:41 +0000590static const short yytable[] =
591{
Eric Andersen72d8e442003-08-05 02:18:25 +0000592 66, 67, 36, 42, 39, 40, 71, 41, 123, 124,
593 43, 44, 74, 75, 120, 154, 72, 46, 47, 69,
594 70, 121, 122, 48, 140, 45, 127, 128, 112, 130,
595 49, 133, 156, 135, 158, 159, 68, 161, 60, 69,
596 70, 165, 69, 70, 61, 167, 168, 62, 2, 3,
597 63, 4, 5, 6, 7, 8, 9, 10, 11, 12,
598 46, 47, 13, 14, 139, 152, 48, 126, 178, 15,
599 16, 69, 70, 49, 37, 38, 129, 166, 151, 15,
600 16, -67, 114, 64, -67, 5, 101, 7, 8, 102,
601 10, 11, 12, 143, 65, 13, 103, 153, 46, 47,
602 147, 148, 149, 69, 70, 125, 172, 134, 141, 136,
603 137, 138, 15, 16, 5, 101, 7, 8, 102, 10,
604 11, 12, 145, 146, 13, 103, 101, 7, 142, 102,
605 10, 11, 12, 171, 144, 13, 103, 69, 70, 69,
606 70, 15, 16, 100, 150, 154, 113, 108, 113, 116,
607 73, 157, 15, 16, 74, 75, 70, 76, 77, 78,
608 79, 80, 81, 82, 83, 84, 104, 107, 160, 115,
609 85, 110, 73, 118, 86, 87, 74, 75, 92, 93,
610 94, 95, 111, 96, 119, 162, 163, 164, 169, 170,
611 173, 174, 97, 175, 176, 177, 179, 180, 181, 53,
612 99, 59
Eric Andersenc9f20d92002-12-05 08:41:41 +0000613};
614
615static const unsigned char yycheck[] =
616{
Eric Andersen72d8e442003-08-05 02:18:25 +0000617 48, 49, 3, 32, 4, 5, 30, 7, 71, 72,
618 10, 28, 16, 17, 33, 14, 40, 28, 29, 38,
619 39, 69, 70, 34, 87, 28, 74, 75, 32, 77,
620 41, 79, 130, 81, 132, 133, 32, 135, 39, 38,
621 39, 139, 38, 39, 32, 143, 144, 32, 0, 1,
622 32, 3, 4, 5, 6, 7, 8, 9, 10, 11,
623 28, 29, 14, 15, 28, 32, 34, 35, 166, 31,
624 32, 38, 39, 41, 28, 29, 76, 140, 126, 31,
625 32, 0, 1, 32, 3, 4, 5, 6, 7, 8,
626 9, 10, 11, 93, 32, 14, 15, 32, 28, 29,
627 101, 102, 103, 38, 39, 32, 154, 80, 13, 82,
628 83, 84, 31, 32, 4, 5, 6, 7, 8, 9,
629 10, 11, 95, 96, 14, 15, 5, 6, 32, 8,
630 9, 10, 11, 32, 28, 14, 15, 38, 39, 38,
631 39, 31, 32, 54, 32, 14, 57, 56, 59, 58,
632 12, 32, 31, 32, 16, 17, 39, 19, 20, 21,
633 22, 23, 24, 25, 26, 27, 55, 56, 32, 58,
634 32, 56, 12, 58, 36, 37, 16, 17, 18, 19,
635 20, 21, 56, 23, 58, 32, 32, 32, 32, 32,
636 32, 32, 32, 32, 32, 32, 32, 32, 32, 21,
637 54, 33
Eric Andersenc9f20d92002-12-05 08:41:41 +0000638};
639
640/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
641 symbol of state STATE-NUM. */
642static const unsigned char yystos[] =
643{
Eric Andersen72d8e442003-08-05 02:18:25 +0000644 0, 43, 0, 1, 3, 4, 5, 6, 7, 8,
645 9, 10, 11, 14, 15, 31, 32, 44, 45, 46,
646 47, 48, 49, 52, 53, 55, 59, 61, 63, 64,
647 66, 68, 69, 70, 71, 79, 79, 28, 29, 77,
648 77, 77, 32, 77, 28, 28, 28, 29, 34, 41,
649 81, 82, 50, 50, 56, 58, 62, 74, 67, 74,
650 79, 32, 32, 32, 32, 32, 81, 81, 32, 38,
651 39, 30, 40, 12, 16, 17, 19, 20, 21, 22,
652 23, 24, 25, 26, 27, 32, 36, 37, 51, 72,
653 73, 75, 18, 19, 20, 21, 23, 32, 57, 73,
654 75, 5, 8, 15, 45, 54, 78, 45, 55, 60,
655 66, 78, 32, 75, 1, 45, 55, 65, 66, 78,
656 33, 81, 81, 82, 82, 32, 35, 81, 81, 77,
657 81, 76, 77, 81, 76, 81, 76, 76, 76, 28,
658 82, 13, 32, 77, 28, 76, 76, 79, 79, 79,
659 32, 81, 32, 32, 14, 80, 80, 32, 80, 80,
660 32, 80, 32, 32, 32, 80, 82, 80, 80, 32,
661 32, 32, 81, 32, 32, 32, 32, 32, 80, 32,
662 32, 32
Eric Andersenc9f20d92002-12-05 08:41:41 +0000663};
664
665#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
666# define YYSIZE_T __SIZE_TYPE__
667#endif
668#if ! defined (YYSIZE_T) && defined (size_t)
669# define YYSIZE_T size_t
670#endif
671#if ! defined (YYSIZE_T)
672# if defined (__STDC__) || defined (__cplusplus)
673# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
674# define YYSIZE_T size_t
675# endif
676#endif
677#if ! defined (YYSIZE_T)
678# define YYSIZE_T unsigned int
679#endif
680
681#define yyerrok (yyerrstatus = 0)
682#define yyclearin (yychar = YYEMPTY)
Eric Andersen72d8e442003-08-05 02:18:25 +0000683#define YYEMPTY (-2)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000684#define YYEOF 0
685
686#define YYACCEPT goto yyacceptlab
687#define YYABORT goto yyabortlab
688#define YYERROR goto yyerrlab1
689
Eric Andersen72d8e442003-08-05 02:18:25 +0000690
Eric Andersenc9f20d92002-12-05 08:41:41 +0000691/* Like YYERROR except do call yyerror. This remains here temporarily
692 to ease the transition to the new meaning of YYERROR, for GCC.
693 Once GCC version 2 has supplanted version 1, this can go. */
694
695#define YYFAIL goto yyerrlab
696
697#define YYRECOVERING() (!!yyerrstatus)
698
699#define YYBACKUP(Token, Value) \
700do \
701 if (yychar == YYEMPTY && yylen == 1) \
702 { \
703 yychar = (Token); \
704 yylval = (Value); \
Eric Andersen72d8e442003-08-05 02:18:25 +0000705 yytoken = YYTRANSLATE (yychar); \
Eric Andersenc9f20d92002-12-05 08:41:41 +0000706 YYPOPSTACK; \
707 goto yybackup; \
708 } \
709 else \
710 { \
Eric Andersen72d8e442003-08-05 02:18:25 +0000711 yyerror ("syntax error: cannot back up");\
Eric Andersenc9f20d92002-12-05 08:41:41 +0000712 YYERROR; \
713 } \
714while (0)
715
716#define YYTERROR 1
717#define YYERRCODE 256
718
719/* YYLLOC_DEFAULT -- Compute the default location (before the actions
720 are run). */
721
722#ifndef YYLLOC_DEFAULT
Eric Andersen72d8e442003-08-05 02:18:25 +0000723# define YYLLOC_DEFAULT(Current, Rhs, N) \
Eric Andersenc9f20d92002-12-05 08:41:41 +0000724 Current.first_line = Rhs[1].first_line; \
725 Current.first_column = Rhs[1].first_column; \
726 Current.last_line = Rhs[N].last_line; \
727 Current.last_column = Rhs[N].last_column;
728#endif
729
730/* YYLEX -- calling `yylex' with the right arguments. */
731
Eric Andersen72d8e442003-08-05 02:18:25 +0000732#ifdef YYLEX_PARAM
733# define YYLEX yylex (YYLEX_PARAM)
734#else
735# define YYLEX yylex ()
736#endif
Eric Andersenc9f20d92002-12-05 08:41:41 +0000737
738/* Enable debugging if requested. */
739#if YYDEBUG
740
741# ifndef YYFPRINTF
742# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
743# define YYFPRINTF fprintf
744# endif
745
746# define YYDPRINTF(Args) \
747do { \
748 if (yydebug) \
749 YYFPRINTF Args; \
750} while (0)
Eric Andersen72d8e442003-08-05 02:18:25 +0000751
Eric Andersenc9f20d92002-12-05 08:41:41 +0000752# define YYDSYMPRINT(Args) \
753do { \
754 if (yydebug) \
755 yysymprint Args; \
756} while (0)
Eric Andersen72d8e442003-08-05 02:18:25 +0000757
758# define YYDSYMPRINTF(Title, Token, Value, Location) \
759do { \
760 if (yydebug) \
761 { \
762 YYFPRINTF (stderr, "%s ", Title); \
763 yysymprint (stderr, \
764 Token, Value); \
765 YYFPRINTF (stderr, "\n"); \
766 } \
767} while (0)
768
769/*------------------------------------------------------------------.
770| yy_stack_print -- Print the state stack from its BOTTOM up to its |
771| TOP (cinluded). |
772`------------------------------------------------------------------*/
773
774#if defined (__STDC__) || defined (__cplusplus)
775static void
776yy_stack_print (short *bottom, short *top)
777#else
778static void
779yy_stack_print (bottom, top)
780 short *bottom;
781 short *top;
782#endif
783{
784 YYFPRINTF (stderr, "Stack now");
785 for (/* Nothing. */; bottom <= top; ++bottom)
786 YYFPRINTF (stderr, " %d", *bottom);
787 YYFPRINTF (stderr, "\n");
788}
789
790# define YY_STACK_PRINT(Bottom, Top) \
791do { \
792 if (yydebug) \
793 yy_stack_print ((Bottom), (Top)); \
794} while (0)
795
796
797/*------------------------------------------------.
798| Report that the YYRULE is going to be reduced. |
799`------------------------------------------------*/
800
801#if defined (__STDC__) || defined (__cplusplus)
802static void
803yy_reduce_print (int yyrule)
804#else
805static void
806yy_reduce_print (yyrule)
807 int yyrule;
808#endif
809{
810 int yyi;
811 unsigned int yylineno = yyrline[yyrule];
812 YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
813 yyrule - 1, yylineno);
814 /* Print the symbols being reduced, and their result. */
815 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
816 YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
817 YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
818}
819
820# define YY_REDUCE_PRINT(Rule) \
821do { \
822 if (yydebug) \
823 yy_reduce_print (Rule); \
824} while (0)
825
Eric Andersenc9f20d92002-12-05 08:41:41 +0000826/* Nonzero means print parse trace. It is left uninitialized so that
827 multiple parsers can coexist. */
828int yydebug;
829#else /* !YYDEBUG */
830# define YYDPRINTF(Args)
831# define YYDSYMPRINT(Args)
Eric Andersen72d8e442003-08-05 02:18:25 +0000832# define YYDSYMPRINTF(Title, Token, Value, Location)
833# define YY_STACK_PRINT(Bottom, Top)
834# define YY_REDUCE_PRINT(Rule)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000835#endif /* !YYDEBUG */
836
Eric Andersen72d8e442003-08-05 02:18:25 +0000837
Eric Andersenc9f20d92002-12-05 08:41:41 +0000838/* YYINITDEPTH -- initial size of the parser's stacks. */
839#ifndef YYINITDEPTH
840# define YYINITDEPTH 200
841#endif
842
843/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
844 if the built-in stack extension method is used).
845
846 Do not make this value too large; the results are undefined if
847 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
848 evaluated with infinite-precision integer arithmetic. */
849
850#if YYMAXDEPTH == 0
851# undef YYMAXDEPTH
852#endif
853
854#ifndef YYMAXDEPTH
855# define YYMAXDEPTH 10000
856#endif
857
858
859
860#if YYERROR_VERBOSE
861
862# ifndef yystrlen
863# if defined (__GLIBC__) && defined (_STRING_H)
864# define yystrlen strlen
865# else
866/* Return the length of YYSTR. */
867static YYSIZE_T
868# if defined (__STDC__) || defined (__cplusplus)
869yystrlen (const char *yystr)
870# else
871yystrlen (yystr)
872 const char *yystr;
873# endif
874{
875 register const char *yys = yystr;
876
877 while (*yys++ != '\0')
878 continue;
879
880 return yys - yystr - 1;
881}
882# endif
883# endif
884
885# ifndef yystpcpy
886# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
887# define yystpcpy stpcpy
888# else
889/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
890 YYDEST. */
891static char *
892# if defined (__STDC__) || defined (__cplusplus)
893yystpcpy (char *yydest, const char *yysrc)
894# else
895yystpcpy (yydest, yysrc)
896 char *yydest;
897 const char *yysrc;
898# endif
899{
900 register char *yyd = yydest;
901 register const char *yys = yysrc;
902
903 while ((*yyd++ = *yys++) != '\0')
904 continue;
905
906 return yyd - 1;
907}
908# endif
909# endif
910
911#endif /* !YYERROR_VERBOSE */
912
913
914
915#if YYDEBUG
Eric Andersen72d8e442003-08-05 02:18:25 +0000916/*--------------------------------.
917| Print this symbol on YYOUTPUT. |
918`--------------------------------*/
Eric Andersenc9f20d92002-12-05 08:41:41 +0000919
Eric Andersenc9f20d92002-12-05 08:41:41 +0000920#if defined (__STDC__) || defined (__cplusplus)
Eric Andersen72d8e442003-08-05 02:18:25 +0000921static void
922yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000923#else
Eric Andersen72d8e442003-08-05 02:18:25 +0000924static void
925yysymprint (yyoutput, yytype, yyvaluep)
926 FILE *yyoutput;
Eric Andersenc9f20d92002-12-05 08:41:41 +0000927 int yytype;
Eric Andersen72d8e442003-08-05 02:18:25 +0000928 YYSTYPE *yyvaluep;
Eric Andersenc9f20d92002-12-05 08:41:41 +0000929#endif
930{
931 /* Pacify ``unused variable'' warnings. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000932 (void) yyvaluep;
Eric Andersenc9f20d92002-12-05 08:41:41 +0000933
934 if (yytype < YYNTOKENS)
935 {
Eric Andersen72d8e442003-08-05 02:18:25 +0000936 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
Eric Andersenc9f20d92002-12-05 08:41:41 +0000937# ifdef YYPRINT
Eric Andersen72d8e442003-08-05 02:18:25 +0000938 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
Eric Andersenc9f20d92002-12-05 08:41:41 +0000939# endif
940 }
941 else
Eric Andersen72d8e442003-08-05 02:18:25 +0000942 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
Eric Andersenc9f20d92002-12-05 08:41:41 +0000943
944 switch (yytype)
945 {
946 default:
947 break;
948 }
Eric Andersen72d8e442003-08-05 02:18:25 +0000949 YYFPRINTF (yyoutput, ")");
Eric Andersenc9f20d92002-12-05 08:41:41 +0000950}
Eric Andersenc9f20d92002-12-05 08:41:41 +0000951
Eric Andersen72d8e442003-08-05 02:18:25 +0000952#endif /* ! YYDEBUG */
Eric Andersenc9f20d92002-12-05 08:41:41 +0000953/*-----------------------------------------------.
954| Release the memory associated to this symbol. |
955`-----------------------------------------------*/
956
Eric Andersenc9f20d92002-12-05 08:41:41 +0000957#if defined (__STDC__) || defined (__cplusplus)
Eric Andersen72d8e442003-08-05 02:18:25 +0000958static void
959yydestruct (int yytype, YYSTYPE *yyvaluep)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000960#else
Eric Andersen72d8e442003-08-05 02:18:25 +0000961static void
962yydestruct (yytype, yyvaluep)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000963 int yytype;
Eric Andersen72d8e442003-08-05 02:18:25 +0000964 YYSTYPE *yyvaluep;
Eric Andersenc9f20d92002-12-05 08:41:41 +0000965#endif
966{
967 /* Pacify ``unused variable'' warnings. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000968 (void) yyvaluep;
Eric Andersenc9f20d92002-12-05 08:41:41 +0000969
970 switch (yytype)
971 {
Eric Andersen72d8e442003-08-05 02:18:25 +0000972
Eric Andersenc9f20d92002-12-05 08:41:41 +0000973 default:
974 break;
975 }
976}
Eric Andersenc9f20d92002-12-05 08:41:41 +0000977
978
Eric Andersen72d8e442003-08-05 02:18:25 +0000979/* Prevent warnings from -Wmissing-prototypes. */
Eric Andersenc9f20d92002-12-05 08:41:41 +0000980
981#ifdef YYPARSE_PARAM
982# if defined (__STDC__) || defined (__cplusplus)
Eric Andersen72d8e442003-08-05 02:18:25 +0000983int yyparse (void *YYPARSE_PARAM);
Eric Andersenc9f20d92002-12-05 08:41:41 +0000984# else
Eric Andersen72d8e442003-08-05 02:18:25 +0000985int yyparse ();
Eric Andersenc9f20d92002-12-05 08:41:41 +0000986# endif
Eric Andersen72d8e442003-08-05 02:18:25 +0000987#else /* ! YYPARSE_PARAM */
988#if defined (__STDC__) || defined (__cplusplus)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000989int yyparse (void);
Eric Andersen72d8e442003-08-05 02:18:25 +0000990#else
991int yyparse ();
Eric Andersenc9f20d92002-12-05 08:41:41 +0000992#endif
Eric Andersen72d8e442003-08-05 02:18:25 +0000993#endif /* ! YYPARSE_PARAM */
994
Eric Andersenc9f20d92002-12-05 08:41:41 +0000995
996
997/* The lookahead symbol. */
998int yychar;
999
1000/* The semantic value of the lookahead symbol. */
1001YYSTYPE yylval;
1002
Eric Andersen72d8e442003-08-05 02:18:25 +00001003/* Number of syntax errors so far. */
Eric Andersenc9f20d92002-12-05 08:41:41 +00001004int yynerrs;
1005
1006
Eric Andersen72d8e442003-08-05 02:18:25 +00001007
1008/*----------.
1009| yyparse. |
1010`----------*/
1011
1012#ifdef YYPARSE_PARAM
1013# if defined (__STDC__) || defined (__cplusplus)
1014int yyparse (void *YYPARSE_PARAM)
1015# else
1016int yyparse (YYPARSE_PARAM)
1017 void *YYPARSE_PARAM;
1018# endif
1019#else /* ! YYPARSE_PARAM */
1020#if defined (__STDC__) || defined (__cplusplus)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001021int
Eric Andersen72d8e442003-08-05 02:18:25 +00001022yyparse (void)
1023#else
1024int
1025yyparse ()
1026
1027#endif
1028#endif
Eric Andersenc9f20d92002-12-05 08:41:41 +00001029{
1030
1031 register int yystate;
1032 register int yyn;
1033 int yyresult;
1034 /* Number of tokens to shift before error messages enabled. */
1035 int yyerrstatus;
1036 /* Lookahead token as an internal (translated) token number. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001037 int yytoken = 0;
Eric Andersenc9f20d92002-12-05 08:41:41 +00001038
1039 /* Three stacks and their tools:
1040 `yyss': related to states,
1041 `yyvs': related to semantic values,
1042 `yyls': related to locations.
1043
1044 Refer to the stacks thru separate pointers, to allow yyoverflow
1045 to reallocate them elsewhere. */
1046
1047 /* The state stack. */
1048 short yyssa[YYINITDEPTH];
1049 short *yyss = yyssa;
1050 register short *yyssp;
1051
1052 /* The semantic value stack. */
1053 YYSTYPE yyvsa[YYINITDEPTH];
1054 YYSTYPE *yyvs = yyvsa;
1055 register YYSTYPE *yyvsp;
1056
1057
1058
1059#define YYPOPSTACK (yyvsp--, yyssp--)
1060
1061 YYSIZE_T yystacksize = YYINITDEPTH;
1062
1063 /* The variables used to return semantic value and location from the
1064 action routines. */
1065 YYSTYPE yyval;
1066
1067
1068 /* When reducing, the number of symbols on the RHS of the reduced
1069 rule. */
1070 int yylen;
1071
1072 YYDPRINTF ((stderr, "Starting parse\n"));
1073
1074 yystate = 0;
1075 yyerrstatus = 0;
1076 yynerrs = 0;
1077 yychar = YYEMPTY; /* Cause a token to be read. */
1078
1079 /* Initialize stack pointers.
1080 Waste one element of value and location stack
1081 so that they stay on the same level as the state stack.
1082 The wasted elements are never initialized. */
1083
1084 yyssp = yyss;
1085 yyvsp = yyvs;
1086
1087 goto yysetstate;
1088
1089/*------------------------------------------------------------.
1090| yynewstate -- Push a new state, which is found in yystate. |
1091`------------------------------------------------------------*/
1092 yynewstate:
1093 /* In all cases, when you get here, the value and location stacks
1094 have just been pushed. so pushing a state here evens the stacks.
1095 */
1096 yyssp++;
1097
1098 yysetstate:
1099 *yyssp = yystate;
1100
Eric Andersen72d8e442003-08-05 02:18:25 +00001101 if (yyss + yystacksize - 1 <= yyssp)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001102 {
1103 /* Get the current used size of the three stacks, in elements. */
1104 YYSIZE_T yysize = yyssp - yyss + 1;
1105
1106#ifdef yyoverflow
1107 {
1108 /* Give user a chance to reallocate the stack. Use copies of
1109 these so that the &'s don't force the real ones into
1110 memory. */
1111 YYSTYPE *yyvs1 = yyvs;
1112 short *yyss1 = yyss;
1113
1114
1115 /* Each stack pointer address is followed by the size of the
1116 data in use in that stack, in bytes. This used to be a
1117 conditional around just the two extra args, but that might
1118 be undefined if yyoverflow is a macro. */
1119 yyoverflow ("parser stack overflow",
1120 &yyss1, yysize * sizeof (*yyssp),
1121 &yyvs1, yysize * sizeof (*yyvsp),
1122
1123 &yystacksize);
1124
1125 yyss = yyss1;
1126 yyvs = yyvs1;
1127 }
1128#else /* no yyoverflow */
1129# ifndef YYSTACK_RELOCATE
1130 goto yyoverflowlab;
1131# else
1132 /* Extend the stack our own way. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001133 if (YYMAXDEPTH <= yystacksize)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001134 goto yyoverflowlab;
1135 yystacksize *= 2;
Eric Andersen72d8e442003-08-05 02:18:25 +00001136 if (YYMAXDEPTH < yystacksize)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001137 yystacksize = YYMAXDEPTH;
1138
1139 {
1140 short *yyss1 = yyss;
1141 union yyalloc *yyptr =
1142 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1143 if (! yyptr)
1144 goto yyoverflowlab;
1145 YYSTACK_RELOCATE (yyss);
1146 YYSTACK_RELOCATE (yyvs);
1147
1148# undef YYSTACK_RELOCATE
1149 if (yyss1 != yyssa)
1150 YYSTACK_FREE (yyss1);
1151 }
1152# endif
1153#endif /* no yyoverflow */
1154
1155 yyssp = yyss + yysize - 1;
1156 yyvsp = yyvs + yysize - 1;
1157
1158
1159 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1160 (unsigned long int) yystacksize));
1161
Eric Andersen72d8e442003-08-05 02:18:25 +00001162 if (yyss + yystacksize - 1 <= yyssp)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001163 YYABORT;
1164 }
1165
1166 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1167
1168 goto yybackup;
1169
1170/*-----------.
1171| yybackup. |
1172`-----------*/
1173yybackup:
1174
1175/* Do appropriate processing given the current state. */
1176/* Read a lookahead token if we need one and don't already have one. */
1177/* yyresume: */
1178
1179 /* First try to decide what to do without reference to lookahead token. */
1180
1181 yyn = yypact[yystate];
1182 if (yyn == YYPACT_NINF)
1183 goto yydefault;
1184
1185 /* Not known => get a lookahead token if don't already have one. */
1186
Eric Andersen72d8e442003-08-05 02:18:25 +00001187 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
Eric Andersenc9f20d92002-12-05 08:41:41 +00001188 if (yychar == YYEMPTY)
1189 {
1190 YYDPRINTF ((stderr, "Reading a token: "));
1191 yychar = YYLEX;
1192 }
1193
Eric Andersen72d8e442003-08-05 02:18:25 +00001194 if (yychar <= YYEOF)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001195 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001196 yychar = yytoken = YYEOF;
Eric Andersenc9f20d92002-12-05 08:41:41 +00001197 YYDPRINTF ((stderr, "Now at end of input.\n"));
1198 }
1199 else
1200 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001201 yytoken = YYTRANSLATE (yychar);
1202 YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001203 }
1204
Eric Andersen72d8e442003-08-05 02:18:25 +00001205 /* If the proper action on seeing token YYTOKEN is to reduce or to
Eric Andersenc9f20d92002-12-05 08:41:41 +00001206 detect an error, take that action. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001207 yyn += yytoken;
1208 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001209 goto yydefault;
1210 yyn = yytable[yyn];
1211 if (yyn <= 0)
1212 {
1213 if (yyn == 0 || yyn == YYTABLE_NINF)
1214 goto yyerrlab;
1215 yyn = -yyn;
1216 goto yyreduce;
1217 }
1218
1219 if (yyn == YYFINAL)
1220 YYACCEPT;
1221
1222 /* Shift the lookahead token. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001223 YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
Eric Andersenc9f20d92002-12-05 08:41:41 +00001224
1225 /* Discard the token being shifted unless it is eof. */
1226 if (yychar != YYEOF)
1227 yychar = YYEMPTY;
1228
1229 *++yyvsp = yylval;
1230
1231
1232 /* Count tokens shifted since error; after three, turn off error
1233 status. */
1234 if (yyerrstatus)
1235 yyerrstatus--;
1236
1237 yystate = yyn;
1238 goto yynewstate;
1239
1240
1241/*-----------------------------------------------------------.
1242| yydefault -- do the default action for the current state. |
1243`-----------------------------------------------------------*/
1244yydefault:
1245 yyn = yydefact[yystate];
1246 if (yyn == 0)
1247 goto yyerrlab;
1248 goto yyreduce;
1249
1250
1251/*-----------------------------.
1252| yyreduce -- Do a reduction. |
1253`-----------------------------*/
1254yyreduce:
1255 /* yyn is the number of a rule to reduce with. */
1256 yylen = yyr2[yyn];
1257
1258 /* If YYLEN is nonzero, implement the default value of the action:
1259 `$$ = $1'.
1260
1261 Otherwise, the following line sets YYVAL to garbage.
1262 This behavior is undocumented and Bison
1263 users should not rely upon it. Assigning to YYVAL
1264 unconditionally makes the parser a bit smaller, and it avoids a
1265 GCC warning that YYVAL may be used uninitialized. */
1266 yyval = yyvsp[1-yylen];
1267
1268
Eric Andersen72d8e442003-08-05 02:18:25 +00001269 YY_REDUCE_PRINT (yyn);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001270 switch (yyn)
1271 {
1272 case 8:
Eric Andersen72d8e442003-08-05 02:18:25 +00001273
1274 { zconfprint("unexpected 'endmenu' statement"); ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001275 break;
1276
1277 case 9:
Eric Andersen72d8e442003-08-05 02:18:25 +00001278
1279 { zconfprint("unexpected 'endif' statement"); ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001280 break;
1281
1282 case 10:
Eric Andersen72d8e442003-08-05 02:18:25 +00001283
1284 { zconfprint("unexpected 'endchoice' statement"); ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001285 break;
1286
1287 case 11:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001288
Eric Andersen72d8e442003-08-05 02:18:25 +00001289 { zconfprint("syntax error"); yyerrok; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001290 break;
1291
1292 case 18:
Eric Andersen72d8e442003-08-05 02:18:25 +00001293
1294 {
1295 struct symbol *sym = sym_lookup(yyvsp[-1].string, 0);
1296 sym->flags |= SYMBOL_OPTIONAL;
1297 menu_add_entry(sym);
1298 printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
1299;}
1300 break;
1301
1302 case 19:
1303
Eric Andersenc9f20d92002-12-05 08:41:41 +00001304 {
1305 menu_end_entry();
1306 printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
Eric Andersen72d8e442003-08-05 02:18:25 +00001307;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001308 break;
1309
Eric Andersen72d8e442003-08-05 02:18:25 +00001310 case 20:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001311
Eric Andersenc9f20d92002-12-05 08:41:41 +00001312 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001313 struct symbol *sym = sym_lookup(yyvsp[-1].string, 0);
1314 sym->flags |= SYMBOL_OPTIONAL;
1315 menu_add_entry(sym);
1316 printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
1317;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001318 break;
1319
Eric Andersen72d8e442003-08-05 02:18:25 +00001320 case 21:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001321
Eric Andersenc9f20d92002-12-05 08:41:41 +00001322 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001323 if (current_entry->prompt)
1324 current_entry->prompt->type = P_MENU;
1325 else
1326 zconfprint("warning: menuconfig statement without prompt");
1327 menu_end_entry();
1328 printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1329;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001330 break;
1331
1332 case 27:
Eric Andersen72d8e442003-08-05 02:18:25 +00001333
Eric Andersenc9f20d92002-12-05 08:41:41 +00001334 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001335 menu_set_type(S_TRISTATE);
1336 printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
1337;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001338 break;
1339
1340 case 28:
Eric Andersen72d8e442003-08-05 02:18:25 +00001341
Eric Andersenc9f20d92002-12-05 08:41:41 +00001342 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001343 menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
1344 menu_set_type(S_TRISTATE);
1345 printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
1346;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001347 break;
1348
1349 case 29:
Eric Andersen72d8e442003-08-05 02:18:25 +00001350
Eric Andersenc9f20d92002-12-05 08:41:41 +00001351 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001352 menu_set_type(S_BOOLEAN);
1353 printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
1354;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001355 break;
1356
1357 case 30:
Eric Andersen72d8e442003-08-05 02:18:25 +00001358
Eric Andersenc9f20d92002-12-05 08:41:41 +00001359 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001360 menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
1361 menu_set_type(S_BOOLEAN);
1362 printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
1363;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001364 break;
1365
1366 case 31:
Eric Andersen72d8e442003-08-05 02:18:25 +00001367
1368 {
1369 menu_set_type(S_INT);
1370 printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno());
1371;}
1372 break;
1373
1374 case 32:
1375
1376 {
1377 menu_set_type(S_HEX);
1378 printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno());
1379;}
1380 break;
1381
1382 case 33:
1383
1384 {
1385 menu_set_type(S_STRING);
1386 printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno());
1387;}
1388 break;
1389
1390 case 34:
1391
1392 {
1393 menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr);
1394 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1395;}
1396 break;
1397
1398 case 35:
1399
1400 {
1401 menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
1402 printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
1403;}
1404 break;
1405
1406 case 36:
1407
1408 {
1409 menu_add_symbol(P_SELECT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr);
1410 printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
1411;}
1412 break;
1413
1414 case 37:
1415
1416 {
1417 menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,yyvsp[-3].symbol, yyvsp[-2].symbol), yyvsp[-1].expr);
1418 printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
1419;}
1420 break;
1421
1422 case 38:
1423
Eric Andersenc9f20d92002-12-05 08:41:41 +00001424 {
1425 struct symbol *sym = sym_lookup(NULL, 0);
1426 sym->flags |= SYMBOL_CHOICE;
1427 menu_add_entry(sym);
Eric Andersen72d8e442003-08-05 02:18:25 +00001428 menu_add_expr(P_CHOICE, NULL, NULL);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001429 printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
Eric Andersen72d8e442003-08-05 02:18:25 +00001430;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001431 break;
1432
Eric Andersen72d8e442003-08-05 02:18:25 +00001433 case 39:
1434
Eric Andersenc9f20d92002-12-05 08:41:41 +00001435 {
1436 menu_end_entry();
1437 menu_add_menu();
Eric Andersen72d8e442003-08-05 02:18:25 +00001438;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001439 break;
1440
Eric Andersen72d8e442003-08-05 02:18:25 +00001441 case 40:
1442
Eric Andersenc9f20d92002-12-05 08:41:41 +00001443 {
1444 if (zconf_endtoken(yyvsp[0].token, T_CHOICE, T_ENDCHOICE)) {
1445 menu_end_menu();
1446 printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
1447 }
Eric Andersen72d8e442003-08-05 02:18:25 +00001448;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001449 break;
1450
1451 case 42:
Eric Andersen72d8e442003-08-05 02:18:25 +00001452
1453 {
1454 printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno);
1455 zconfnerrs++;
1456;}
1457 break;
1458
1459 case 48:
1460
1461 {
1462 menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr);
1463 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1464;}
1465 break;
1466
1467 case 49:
1468
1469 {
1470 menu_set_type(S_TRISTATE);
1471 printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
1472;}
1473 break;
1474
1475 case 50:
1476
1477 {
1478 menu_set_type(S_BOOLEAN);
1479 printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
1480;}
1481 break;
1482
1483 case 51:
1484
Eric Andersenc9f20d92002-12-05 08:41:41 +00001485 {
1486 current_entry->sym->flags |= SYMBOL_OPTIONAL;
1487 printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
Eric Andersen72d8e442003-08-05 02:18:25 +00001488;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001489 break;
1490
Eric Andersen72d8e442003-08-05 02:18:25 +00001491 case 52:
1492
Eric Andersenc9f20d92002-12-05 08:41:41 +00001493 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001494 menu_add_symbol(P_DEFAULT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001495 printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
Eric Andersen72d8e442003-08-05 02:18:25 +00001496;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001497 break;
1498
Eric Andersen72d8e442003-08-05 02:18:25 +00001499 case 55:
1500
Eric Andersenc9f20d92002-12-05 08:41:41 +00001501 {
1502 printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
1503 menu_add_entry(NULL);
Eric Andersen72d8e442003-08-05 02:18:25 +00001504 menu_add_dep(yyvsp[-1].expr);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001505 menu_end_entry();
1506 menu_add_menu();
Eric Andersen72d8e442003-08-05 02:18:25 +00001507;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001508 break;
1509
Eric Andersen72d8e442003-08-05 02:18:25 +00001510 case 56:
1511
Eric Andersenc9f20d92002-12-05 08:41:41 +00001512 {
1513 if (zconf_endtoken(yyvsp[0].token, T_IF, T_ENDIF)) {
1514 menu_end_menu();
1515 printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
1516 }
Eric Andersen72d8e442003-08-05 02:18:25 +00001517;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001518 break;
1519
Eric Andersen72d8e442003-08-05 02:18:25 +00001520 case 58:
1521
Eric Andersenc9f20d92002-12-05 08:41:41 +00001522 {
1523 printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno);
1524 zconfnerrs++;
Eric Andersen72d8e442003-08-05 02:18:25 +00001525;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001526 break;
1527
Eric Andersen72d8e442003-08-05 02:18:25 +00001528 case 63:
1529
Eric Andersenc9f20d92002-12-05 08:41:41 +00001530 {
1531 menu_add_entry(NULL);
Eric Andersen72d8e442003-08-05 02:18:25 +00001532 menu_add_prop(P_MENU, yyvsp[-1].string, NULL, NULL);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001533 printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
Eric Andersen72d8e442003-08-05 02:18:25 +00001534;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001535 break;
1536
Eric Andersen72d8e442003-08-05 02:18:25 +00001537 case 64:
1538
Eric Andersenc9f20d92002-12-05 08:41:41 +00001539 {
1540 menu_end_entry();
1541 menu_add_menu();
Eric Andersen72d8e442003-08-05 02:18:25 +00001542;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001543 break;
1544
Eric Andersen72d8e442003-08-05 02:18:25 +00001545 case 65:
1546
Eric Andersenc9f20d92002-12-05 08:41:41 +00001547 {
1548 if (zconf_endtoken(yyvsp[0].token, T_MENU, T_ENDMENU)) {
1549 menu_end_menu();
1550 printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
1551 }
Eric Andersen72d8e442003-08-05 02:18:25 +00001552;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001553 break;
1554
1555 case 67:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001556
Eric Andersenc9f20d92002-12-05 08:41:41 +00001557 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001558 printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno);
1559 zconfnerrs++;
1560;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001561 break;
1562
1563 case 72:
Eric Andersen72d8e442003-08-05 02:18:25 +00001564
1565 { zconfprint("invalid menu option"); yyerrok; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001566 break;
1567
1568 case 73:
Eric Andersen72d8e442003-08-05 02:18:25 +00001569
Eric Andersenc9f20d92002-12-05 08:41:41 +00001570 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001571 yyval.string = yyvsp[-1].string;
1572 printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
1573;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001574 break;
1575
1576 case 74:
Eric Andersen72d8e442003-08-05 02:18:25 +00001577
Eric Andersenc9f20d92002-12-05 08:41:41 +00001578 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001579 zconf_nextfile(yyvsp[0].string);
1580;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001581 break;
1582
1583 case 75:
Eric Andersen72d8e442003-08-05 02:18:25 +00001584
Eric Andersenc9f20d92002-12-05 08:41:41 +00001585 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001586 menu_add_entry(NULL);
1587 menu_add_prop(P_COMMENT, yyvsp[-1].string, NULL, NULL);
1588 printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
1589;}
1590 break;
1591
1592 case 76:
1593
1594 {
1595 menu_end_entry();
1596;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001597 break;
1598
1599 case 77:
Eric Andersen72d8e442003-08-05 02:18:25 +00001600
Eric Andersenc9f20d92002-12-05 08:41:41 +00001601 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001602 printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
1603 zconf_starthelp();
1604;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001605 break;
1606
1607 case 78:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001608
Eric Andersen72d8e442003-08-05 02:18:25 +00001609 {
1610 current_entry->sym->help = yyvsp[0].string;
1611;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001612 break;
1613
1614 case 82:
Eric Andersen72d8e442003-08-05 02:18:25 +00001615
1616 {
1617 menu_add_dep(yyvsp[-1].expr);
1618 printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
1619;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001620 break;
1621
1622 case 83:
Eric Andersen72d8e442003-08-05 02:18:25 +00001623
1624 {
1625 menu_add_dep(yyvsp[-1].expr);
1626 printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno());
1627;}
1628 break;
1629
1630 case 84:
1631
1632 {
1633 menu_add_dep(yyvsp[-1].expr);
1634 printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno());
1635;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001636 break;
1637
1638 case 86:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001639
Eric Andersen72d8e442003-08-05 02:18:25 +00001640 {
1641 menu_add_prop(P_PROMPT, yyvsp[-1].string, NULL, yyvsp[0].expr);
1642;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001643 break;
1644
1645 case 89:
Eric Andersen72d8e442003-08-05 02:18:25 +00001646
1647 { yyval.token = T_ENDMENU; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001648 break;
1649
1650 case 90:
Eric Andersen72d8e442003-08-05 02:18:25 +00001651
1652 { yyval.token = T_ENDCHOICE; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001653 break;
1654
1655 case 91:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001656
Eric Andersen72d8e442003-08-05 02:18:25 +00001657 { yyval.token = T_ENDIF; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001658 break;
1659
1660 case 94:
Eric Andersen72d8e442003-08-05 02:18:25 +00001661
1662 { yyval.expr = NULL; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001663 break;
1664
1665 case 95:
Eric Andersen72d8e442003-08-05 02:18:25 +00001666
1667 { yyval.expr = yyvsp[0].expr; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001668 break;
1669
1670 case 96:
Eric Andersen72d8e442003-08-05 02:18:25 +00001671
1672 { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); ;}
1673 break;
1674
1675 case 97:
1676
1677 { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
1678 break;
1679
1680 case 98:
1681
1682 { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
1683 break;
1684
1685 case 99:
1686
1687 { yyval.expr = yyvsp[-1].expr; ;}
1688 break;
1689
1690 case 100:
1691
1692 { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); ;}
1693 break;
1694
1695 case 101:
1696
1697 { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); ;}
1698 break;
1699
1700 case 102:
1701
1702 { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); ;}
1703 break;
1704
1705 case 103:
1706
1707 { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;}
1708 break;
1709
1710 case 104:
1711
1712 { yyval.symbol = sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001713 break;
1714
1715
1716 }
1717
Eric Andersen72d8e442003-08-05 02:18:25 +00001718/* Line 999 of yacc.c. */
1719
Eric Andersenc9f20d92002-12-05 08:41:41 +00001720
1721 yyvsp -= yylen;
1722 yyssp -= yylen;
1723
1724
Eric Andersen72d8e442003-08-05 02:18:25 +00001725 YY_STACK_PRINT (yyss, yyssp);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001726
1727 *++yyvsp = yyval;
1728
1729
1730 /* Now `shift' the result of the reduction. Determine what state
1731 that goes to, based on the state we popped back to and the rule
1732 number reduced by. */
1733
1734 yyn = yyr1[yyn];
1735
1736 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1737 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1738 yystate = yytable[yystate];
1739 else
1740 yystate = yydefgoto[yyn - YYNTOKENS];
1741
1742 goto yynewstate;
1743
1744
1745/*------------------------------------.
1746| yyerrlab -- here on detecting error |
1747`------------------------------------*/
1748yyerrlab:
1749 /* If not already recovering from an error, report this error. */
1750 if (!yyerrstatus)
1751 {
1752 ++yynerrs;
1753#if YYERROR_VERBOSE
1754 yyn = yypact[yystate];
1755
1756 if (YYPACT_NINF < yyn && yyn < YYLAST)
1757 {
1758 YYSIZE_T yysize = 0;
1759 int yytype = YYTRANSLATE (yychar);
1760 char *yymsg;
1761 int yyx, yycount;
1762
1763 yycount = 0;
1764 /* Start YYX at -YYN if negative to avoid negative indexes in
1765 YYCHECK. */
1766 for (yyx = yyn < 0 ? -yyn : 0;
1767 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
1768 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1769 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
Eric Andersen72d8e442003-08-05 02:18:25 +00001770 yysize += yystrlen ("syntax error, unexpected ") + 1;
Eric Andersenc9f20d92002-12-05 08:41:41 +00001771 yysize += yystrlen (yytname[yytype]);
1772 yymsg = (char *) YYSTACK_ALLOC (yysize);
1773 if (yymsg != 0)
1774 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001775 char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
Eric Andersenc9f20d92002-12-05 08:41:41 +00001776 yyp = yystpcpy (yyp, yytname[yytype]);
1777
1778 if (yycount < 5)
1779 {
1780 yycount = 0;
1781 for (yyx = yyn < 0 ? -yyn : 0;
1782 yyx < (int) (sizeof (yytname) / sizeof (char *));
1783 yyx++)
1784 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1785 {
1786 const char *yyq = ! yycount ? ", expecting " : " or ";
1787 yyp = yystpcpy (yyp, yyq);
1788 yyp = yystpcpy (yyp, yytname[yyx]);
1789 yycount++;
1790 }
1791 }
1792 yyerror (yymsg);
1793 YYSTACK_FREE (yymsg);
1794 }
1795 else
Eric Andersen72d8e442003-08-05 02:18:25 +00001796 yyerror ("syntax error; also virtual memory exhausted");
Eric Andersenc9f20d92002-12-05 08:41:41 +00001797 }
1798 else
1799#endif /* YYERROR_VERBOSE */
Eric Andersen72d8e442003-08-05 02:18:25 +00001800 yyerror ("syntax error");
Eric Andersenc9f20d92002-12-05 08:41:41 +00001801 }
Eric Andersenc9f20d92002-12-05 08:41:41 +00001802
1803
Eric Andersen72d8e442003-08-05 02:18:25 +00001804
Eric Andersenc9f20d92002-12-05 08:41:41 +00001805 if (yyerrstatus == 3)
1806 {
1807 /* If just tried and failed to reuse lookahead token after an
1808 error, discard it. */
1809
1810 /* Return failure if at end of input. */
1811 if (yychar == YYEOF)
1812 {
1813 /* Pop the error token. */
1814 YYPOPSTACK;
1815 /* Pop the rest of the stack. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001816 while (yyss < yyssp)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001817 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001818 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1819 yydestruct (yystos[*yyssp], yyvsp);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001820 YYPOPSTACK;
1821 }
1822 YYABORT;
1823 }
1824
Eric Andersen72d8e442003-08-05 02:18:25 +00001825 YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
1826 yydestruct (yytoken, &yylval);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001827 yychar = YYEMPTY;
Eric Andersen72d8e442003-08-05 02:18:25 +00001828
Eric Andersenc9f20d92002-12-05 08:41:41 +00001829 }
1830
1831 /* Else will try to reuse lookahead token after shifting the error
1832 token. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001833 goto yyerrlab1;
Eric Andersenc9f20d92002-12-05 08:41:41 +00001834
Eric Andersen72d8e442003-08-05 02:18:25 +00001835
1836/*----------------------------------------------------.
1837| yyerrlab1 -- error raised explicitly by an action. |
1838`----------------------------------------------------*/
1839yyerrlab1:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001840 yyerrstatus = 3; /* Each real token shifted decrements this. */
1841
1842 for (;;)
1843 {
1844 yyn = yypact[yystate];
1845 if (yyn != YYPACT_NINF)
1846 {
1847 yyn += YYTERROR;
1848 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
1849 {
1850 yyn = yytable[yyn];
1851 if (0 < yyn)
1852 break;
1853 }
1854 }
1855
1856 /* Pop the current state because it cannot handle the error token. */
1857 if (yyssp == yyss)
1858 YYABORT;
1859
Eric Andersen72d8e442003-08-05 02:18:25 +00001860 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1861 yydestruct (yystos[yystate], yyvsp);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001862 yyvsp--;
1863 yystate = *--yyssp;
1864
Eric Andersen72d8e442003-08-05 02:18:25 +00001865 YY_STACK_PRINT (yyss, yyssp);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001866 }
1867
1868 if (yyn == YYFINAL)
1869 YYACCEPT;
1870
1871 YYDPRINTF ((stderr, "Shifting error token, "));
1872
1873 *++yyvsp = yylval;
1874
1875
1876 yystate = yyn;
1877 goto yynewstate;
1878
1879
1880/*-------------------------------------.
1881| yyacceptlab -- YYACCEPT comes here. |
1882`-------------------------------------*/
1883yyacceptlab:
1884 yyresult = 0;
1885 goto yyreturn;
1886
1887/*-----------------------------------.
1888| yyabortlab -- YYABORT comes here. |
1889`-----------------------------------*/
1890yyabortlab:
1891 yyresult = 1;
1892 goto yyreturn;
1893
1894#ifndef yyoverflow
1895/*----------------------------------------------.
1896| yyoverflowlab -- parser overflow comes here. |
1897`----------------------------------------------*/
1898yyoverflowlab:
1899 yyerror ("parser stack overflow");
1900 yyresult = 2;
1901 /* Fall through. */
1902#endif
1903
1904yyreturn:
1905#ifndef yyoverflow
1906 if (yyss != yyssa)
1907 YYSTACK_FREE (yyss);
1908#endif
1909 return yyresult;
1910}
1911
1912
Eric Andersen72d8e442003-08-05 02:18:25 +00001913
Eric Andersenc9f20d92002-12-05 08:41:41 +00001914
1915
1916void conf_parse(const char *name)
1917{
Eric Andersen72d8e442003-08-05 02:18:25 +00001918 struct symbol *sym;
1919 int i;
1920
Eric Andersenc9f20d92002-12-05 08:41:41 +00001921 zconf_initscan(name);
1922
1923 sym_init();
1924 menu_init();
Eric Andersen72d8e442003-08-05 02:18:25 +00001925 modules_sym = sym_lookup("MODULES", 0);
Eric Andersen70014802003-08-05 05:59:48 +00001926 rootmenu.prompt = menu_add_prop(P_MENU, "BusyBox Configuration", NULL, NULL);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001927
1928 //zconfdebug = 1;
1929 zconfparse();
1930 if (zconfnerrs)
1931 exit(1);
1932 menu_finalize(&rootmenu);
Eric Andersen72d8e442003-08-05 02:18:25 +00001933 for_all_symbols(i, sym) {
1934 if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym))
1935 printf("\n");
1936 else
1937 sym->flags |= SYMBOL_CHECK_DONE;
1938 }
Eric Andersenc9f20d92002-12-05 08:41:41 +00001939
1940 sym_change_count = 1;
1941}
1942
1943const char *zconf_tokenname(int token)
1944{
1945 switch (token) {
1946 case T_MENU: return "menu";
1947 case T_ENDMENU: return "endmenu";
1948 case T_CHOICE: return "choice";
1949 case T_ENDCHOICE: return "endchoice";
1950 case T_IF: return "if";
1951 case T_ENDIF: return "endif";
1952 }
1953 return "<token>";
Eric Andersen72d8e442003-08-05 02:18:25 +00001954}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001955
1956static bool zconf_endtoken(int token, int starttoken, int endtoken)
1957{
1958 if (token != endtoken) {
1959 zconfprint("unexpected '%s' within %s block", zconf_tokenname(token), zconf_tokenname(starttoken));
1960 zconfnerrs++;
1961 return false;
1962 }
1963 if (current_menu->file != current_file) {
1964 zconfprint("'%s' in different file than '%s'", zconf_tokenname(token), zconf_tokenname(starttoken));
1965 zconfprint("location of the '%s'", zconf_tokenname(starttoken));
1966 zconfnerrs++;
1967 return false;
1968 }
1969 return true;
1970}
1971
1972static void zconfprint(const char *err, ...)
1973{
1974 va_list ap;
1975
Eric Andersen72d8e442003-08-05 02:18:25 +00001976 fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001977 va_start(ap, err);
1978 vfprintf(stderr, err, ap);
1979 va_end(ap);
1980 fprintf(stderr, "\n");
1981}
1982
1983static void zconferror(const char *err)
1984{
Eric Andersen72d8e442003-08-05 02:18:25 +00001985 fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001986}
1987
1988void print_quoted_string(FILE *out, const char *str)
1989{
1990 const char *p;
1991 int len;
1992
1993 putc('"', out);
1994 while ((p = strchr(str, '"'))) {
1995 len = p - str;
1996 if (len)
1997 fprintf(out, "%.*s", len, str);
1998 fputs("\\\"", out);
1999 str = p + 1;
2000 }
2001 fputs(str, out);
2002 putc('"', out);
2003}
2004
2005void print_symbol(FILE *out, struct menu *menu)
2006{
2007 struct symbol *sym = menu->sym;
2008 struct property *prop;
2009
Eric Andersenc9f20d92002-12-05 08:41:41 +00002010 if (sym_is_choice(sym))
2011 fprintf(out, "choice\n");
2012 else
2013 fprintf(out, "config %s\n", sym->name);
2014 switch (sym->type) {
2015 case S_BOOLEAN:
2016 fputs(" boolean\n", out);
2017 break;
2018 case S_TRISTATE:
2019 fputs(" tristate\n", out);
2020 break;
2021 case S_STRING:
2022 fputs(" string\n", out);
2023 break;
2024 case S_INT:
2025 fputs(" integer\n", out);
2026 break;
2027 case S_HEX:
2028 fputs(" hex\n", out);
2029 break;
2030 default:
2031 fputs(" ???\n", out);
2032 break;
2033 }
Eric Andersenc9f20d92002-12-05 08:41:41 +00002034 for (prop = sym->prop; prop; prop = prop->next) {
2035 if (prop->menu != menu)
2036 continue;
2037 switch (prop->type) {
2038 case P_PROMPT:
2039 fputs(" prompt ", out);
2040 print_quoted_string(out, prop->text);
Eric Andersen72d8e442003-08-05 02:18:25 +00002041 if (!expr_is_yes(prop->visible.expr)) {
Eric Andersenc9f20d92002-12-05 08:41:41 +00002042 fputs(" if ", out);
Eric Andersen72d8e442003-08-05 02:18:25 +00002043 expr_fprint(prop->visible.expr, out);
Eric Andersenc9f20d92002-12-05 08:41:41 +00002044 }
2045 fputc('\n', out);
2046 break;
2047 case P_DEFAULT:
2048 fputs( " default ", out);
Eric Andersen72d8e442003-08-05 02:18:25 +00002049 expr_fprint(prop->expr, out);
2050 if (!expr_is_yes(prop->visible.expr)) {
Eric Andersenc9f20d92002-12-05 08:41:41 +00002051 fputs(" if ", out);
Eric Andersen72d8e442003-08-05 02:18:25 +00002052 expr_fprint(prop->visible.expr, out);
Eric Andersenc9f20d92002-12-05 08:41:41 +00002053 }
2054 fputc('\n', out);
2055 break;
2056 case P_CHOICE:
2057 fputs(" #choice value\n", out);
2058 break;
2059 default:
2060 fprintf(out, " unknown prop %d!\n", prop->type);
2061 break;
2062 }
2063 }
2064 if (sym->help) {
2065 int len = strlen(sym->help);
2066 while (sym->help[--len] == '\n')
2067 sym->help[len] = 0;
2068 fprintf(out, " help\n%s\n", sym->help);
2069 }
2070 fputc('\n', out);
2071}
2072
2073void zconfdump(FILE *out)
2074{
Eric Andersenc9f20d92002-12-05 08:41:41 +00002075 struct property *prop;
2076 struct symbol *sym;
2077 struct menu *menu;
2078
2079 menu = rootmenu.list;
2080 while (menu) {
2081 if ((sym = menu->sym))
2082 print_symbol(out, menu);
2083 else if ((prop = menu->prompt)) {
2084 switch (prop->type) {
Eric Andersenc9f20d92002-12-05 08:41:41 +00002085 case P_COMMENT:
2086 fputs("\ncomment ", out);
2087 print_quoted_string(out, prop->text);
2088 fputs("\n", out);
2089 break;
2090 case P_MENU:
2091 fputs("\nmenu ", out);
2092 print_quoted_string(out, prop->text);
2093 fputs("\n", out);
2094 break;
Eric Andersenc9f20d92002-12-05 08:41:41 +00002095 default:
2096 ;
2097 }
Eric Andersen72d8e442003-08-05 02:18:25 +00002098 if (!expr_is_yes(prop->visible.expr)) {
Eric Andersenc9f20d92002-12-05 08:41:41 +00002099 fputs(" depends ", out);
Eric Andersen72d8e442003-08-05 02:18:25 +00002100 expr_fprint(prop->visible.expr, out);
Eric Andersenc9f20d92002-12-05 08:41:41 +00002101 fputc('\n', out);
2102 }
2103 fputs("\n", out);
2104 }
2105
2106 if (menu->list)
2107 menu = menu->list;
2108 else if (menu->next)
2109 menu = menu->next;
2110 else while ((menu = menu->parent)) {
2111 if (menu->prompt && menu->prompt->type == P_MENU)
2112 fputs("\nendmenu\n", out);
2113 if (menu->next) {
2114 menu = menu->next;
2115 break;
2116 }
2117 }
2118 }
2119}
2120
2121#include "lex.zconf.c"
2122#include "confdata.c"
2123#include "expr.c"
2124#include "symbol.c"
2125#include "menu.c"
2126
Eric Andersen72d8e442003-08-05 02:18:25 +00002127