add possibility to set default .config values
[openwrt.git] / scripts / config / zconf.tab.c_shipped
1 /* A Bison parser, made by GNU Bison 1.875d. */
2
3 /* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5
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. */
37 #define YYBISON 1
38
39 /* Skeleton name. */
40 #define YYSKELETON_NAME "yacc.c"
41
42 /* Pure parsers. */
43 #define YYPURE 0
44
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,
73 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_TYPE = 275,
83 T_DEFAULT = 276,
84 T_DESELECT = 277,
85 T_SELECT = 278,
86 T_RANGE = 279,
87 T_ON = 280,
88 T_RESET = 281,
89 T_WORD = 282,
90 T_WORD_QUOTE = 283,
91 T_UNEQUAL = 284,
92 T_CLOSE_PAREN = 285,
93 T_OPEN_PAREN = 286,
94 T_EOL = 287,
95 T_OR = 288,
96 T_AND = 289,
97 T_EQUAL = 290,
98 T_NOT = 291
99 };
100 #endif
101 #define T_MAINMENU 258
102 #define T_MENU 259
103 #define T_ENDMENU 260
104 #define T_SOURCE 261
105 #define T_CHOICE 262
106 #define T_ENDCHOICE 263
107 #define T_COMMENT 264
108 #define T_CONFIG 265
109 #define T_MENUCONFIG 266
110 #define T_HELP 267
111 #define T_HELPTEXT 268
112 #define T_IF 269
113 #define T_ENDIF 270
114 #define T_DEPENDS 271
115 #define T_REQUIRES 272
116 #define T_OPTIONAL 273
117 #define T_PROMPT 274
118 #define T_TYPE 275
119 #define T_DEFAULT 276
120 #define T_DESELECT 277
121 #define T_SELECT 278
122 #define T_RANGE 279
123 #define T_ON 280
124 #define T_RESET 281
125 #define T_WORD 282
126 #define T_WORD_QUOTE 283
127 #define T_UNEQUAL 284
128 #define T_CLOSE_PAREN 285
129 #define T_OPEN_PAREN 286
130 #define T_EOL 287
131 #define T_OR 288
132 #define T_AND 289
133 #define T_EQUAL 290
134 #define T_NOT 291
135
136
137
138
139 /* Copy the first part of user declarations. */
140
141
142 /*
143 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
144 * Released under the terms of the GNU GPL v2.0.
145 */
146
147 #include <ctype.h>
148 #include <stdarg.h>
149 #include <stdio.h>
150 #include <stdlib.h>
151 #include <string.h>
152 #include <stdbool.h>
153
154 #define LKC_DIRECT_LINK
155 #include "lkc.h"
156
157 #include "zconf.hash.c"
158
159 #define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
160
161 #define PRINTD 0x0001
162 #define DEBUG_PARSE 0x0002
163
164 int cdebug = PRINTD;
165
166 extern int zconflex(void);
167 static void zconfprint(const char *err, ...);
168 static void zconf_error(const char *err, ...);
169 static void zconferror(const char *err);
170 static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
171
172 struct symbol *symbol_hash[257];
173
174 static struct menu *current_menu, *current_entry;
175
176 #define YYDEBUG 0
177 #if YYDEBUG
178 #define YYERROR_VERBOSE
179 #endif
180
181
182 /* Enabling traces. */
183 #ifndef YYDEBUG
184 # define YYDEBUG 0
185 #endif
186
187 /* Enabling verbose error messages. */
188 #ifdef YYERROR_VERBOSE
189 # undef YYERROR_VERBOSE
190 # define YYERROR_VERBOSE 1
191 #else
192 # define YYERROR_VERBOSE 0
193 #endif
194
195 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
196
197 typedef union YYSTYPE {
198 char *string;
199 struct file *file;
200 struct symbol *symbol;
201 struct expr *expr;
202 struct menu *menu;
203 struct kconf_id *id;
204 } YYSTYPE;
205 /* Line 191 of yacc.c. */
206
207 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
208 # define YYSTYPE_IS_DECLARED 1
209 # define YYSTYPE_IS_TRIVIAL 1
210 #endif
211
212
213
214 /* Copy the second part of user declarations. */
215
216
217 /* Line 214 of yacc.c. */
218
219
220 #if ! defined (yyoverflow) || YYERROR_VERBOSE
221
222 # ifndef YYFREE
223 # define YYFREE free
224 # endif
225 # ifndef YYMALLOC
226 # define YYMALLOC malloc
227 # endif
228
229 /* The parser invokes alloca or malloc; define the necessary symbols. */
230
231 # ifdef YYSTACK_USE_ALLOCA
232 # if YYSTACK_USE_ALLOCA
233 # define YYSTACK_ALLOC alloca
234 # endif
235 # else
236 # if defined (alloca) || defined (_ALLOCA_H)
237 # define YYSTACK_ALLOC alloca
238 # else
239 # ifdef __GNUC__
240 # define YYSTACK_ALLOC __builtin_alloca
241 # endif
242 # endif
243 # endif
244
245 # ifdef YYSTACK_ALLOC
246 /* Pacify GCC's `empty if-body' warning. */
247 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
248 # else
249 # if defined (__STDC__) || defined (__cplusplus)
250 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
251 # define YYSIZE_T size_t
252 # endif
253 # define YYSTACK_ALLOC YYMALLOC
254 # define YYSTACK_FREE YYFREE
255 # endif
256 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
257
258
259 #if (! defined (yyoverflow) \
260 && (! defined (__cplusplus) \
261 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
262
263 /* A type that is properly aligned for any stack member. */
264 union yyalloc
265 {
266 short int yyss;
267 YYSTYPE yyvs;
268 };
269
270 /* The size of the maximum gap between one aligned stack and the next. */
271 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
272
273 /* The size of an array large to enough to hold all stacks, each with
274 N elements. */
275 # define YYSTACK_BYTES(N) \
276 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
277 + YYSTACK_GAP_MAXIMUM)
278
279 /* Copy COUNT objects from FROM to TO. The source and destination do
280 not overlap. */
281 # ifndef YYCOPY
282 # if defined (__GNUC__) && 1 < __GNUC__
283 # define YYCOPY(To, From, Count) \
284 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
285 # else
286 # define YYCOPY(To, From, Count) \
287 do \
288 { \
289 register YYSIZE_T yyi; \
290 for (yyi = 0; yyi < (Count); yyi++) \
291 (To)[yyi] = (From)[yyi]; \
292 } \
293 while (0)
294 # endif
295 # endif
296
297 /* Relocate STACK from its old location to the new one. The
298 local variables YYSIZE and YYSTACKSIZE give the old and new number of
299 elements in the stack, and YYPTR gives the new location of the
300 stack. Advance YYPTR to a properly aligned location for the next
301 stack. */
302 # define YYSTACK_RELOCATE(Stack) \
303 do \
304 { \
305 YYSIZE_T yynewbytes; \
306 YYCOPY (&yyptr->Stack, Stack, yysize); \
307 Stack = &yyptr->Stack; \
308 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
309 yyptr += yynewbytes / sizeof (*yyptr); \
310 } \
311 while (0)
312
313 #endif
314
315 #if defined (__STDC__) || defined (__cplusplus)
316 typedef signed char yysigned_char;
317 #else
318 typedef short int yysigned_char;
319 #endif
320
321 /* YYFINAL -- State number of the termination state. */
322 #define YYFINAL 3
323 /* YYLAST -- Last index in YYTABLE. */
324 #define YYLAST 285
325
326 /* YYNTOKENS -- Number of terminals. */
327 #define YYNTOKENS 37
328 /* YYNNTS -- Number of nonterminals. */
329 #define YYNNTS 42
330 /* YYNRULES -- Number of rules. */
331 #define YYNRULES 108
332 /* YYNRULES -- Number of states. */
333 #define YYNSTATES 184
334
335 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
336 #define YYUNDEFTOK 2
337 #define YYMAXUTOK 291
338
339 #define YYTRANSLATE(YYX) \
340 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
341
342 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
343 static const unsigned char yytranslate[] =
344 {
345 0, 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, 2, 2, 2, 2,
366 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
367 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
368 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
369 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
370 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
371 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
372 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
373 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
374 35, 36
375 };
376
377 #if YYDEBUG
378 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
379 YYRHS. */
380 static const unsigned short int yyprhs[] =
381 {
382 0, 0, 3, 5, 6, 9, 12, 15, 20, 23,
383 28, 33, 37, 39, 41, 43, 45, 47, 49, 51,
384 53, 55, 57, 59, 61, 63, 65, 67, 71, 74,
385 78, 81, 85, 88, 89, 92, 95, 98, 101, 104,
386 108, 113, 118, 123, 128, 134, 137, 140, 142, 146,
387 147, 150, 153, 156, 159, 162, 167, 171, 174, 178,
388 183, 184, 187, 191, 193, 197, 198, 201, 204, 207,
389 211, 214, 216, 220, 221, 224, 227, 230, 234, 238,
390 241, 244, 247, 248, 251, 254, 257, 262, 266, 270,
391 271, 274, 276, 278, 281, 284, 287, 289, 292, 293,
392 296, 298, 302, 306, 310, 313, 317, 321, 323
393 };
394
395 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
396 static const yysigned_char yyrhs[] =
397 {
398 38, 0, -1, 39, -1, -1, 39, 41, -1, 39,
399 52, -1, 39, 63, -1, 39, 3, 73, 75, -1,
400 39, 74, -1, 39, 27, 1, 32, -1, 39, 40,
401 1, 32, -1, 39, 1, 32, -1, 16, -1, 19,
402 -1, 20, -1, 22, -1, 23, -1, 18, -1, 24,
403 -1, 21, -1, 26, -1, 32, -1, 58, -1, 67,
404 -1, 44, -1, 46, -1, 65, -1, 27, 1, 32,
405 -1, 1, 32, -1, 10, 27, 32, -1, 43, 47,
406 -1, 11, 27, 32, -1, 45, 47, -1, -1, 47,
407 48, -1, 47, 71, -1, 47, 69, -1, 47, 42,
408 -1, 47, 32, -1, 20, 72, 32, -1, 19, 73,
409 76, 32, -1, 21, 77, 76, 32, -1, 22, 27,
410 76, 32, -1, 23, 27, 76, 32, -1, 24, 78,
411 78, 76, 32, -1, 7, 32, -1, 49, 53, -1,
412 74, -1, 50, 55, 51, -1, -1, 53, 54, -1,
413 53, 71, -1, 53, 69, -1, 53, 32, -1, 53,
414 42, -1, 19, 73, 76, 32, -1, 20, 72, 32,
415 -1, 18, 32, -1, 26, 76, 32, -1, 21, 27,
416 76, 32, -1, -1, 55, 41, -1, 14, 77, 75,
417 -1, 74, -1, 56, 59, 57, -1, -1, 59, 41,
418 -1, 59, 63, -1, 59, 52, -1, 4, 73, 32,
419 -1, 60, 70, -1, 74, -1, 61, 64, 62, -1,
420 -1, 64, 41, -1, 64, 63, -1, 64, 52, -1,
421 6, 73, 32, -1, 9, 73, 32, -1, 66, 70,
422 -1, 12, 32, -1, 68, 13, -1, -1, 70, 71,
423 -1, 70, 32, -1, 70, 42, -1, 16, 25, 77,
424 32, -1, 16, 77, 32, -1, 17, 77, 32, -1,
425 -1, 73, 76, -1, 27, -1, 28, -1, 5, 32,
426 -1, 8, 32, -1, 15, 32, -1, 32, -1, 75,
427 32, -1, -1, 14, 77, -1, 78, -1, 78, 35,
428 78, -1, 78, 29, 78, -1, 31, 77, 30, -1,
429 36, 77, -1, 77, 33, 77, -1, 77, 34, 77,
430 -1, 27, -1, 28, -1
431 };
432
433 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
434 static const unsigned short int yyrline[] =
435 {
436 0, 105, 105, 107, 109, 110, 111, 112, 113, 114,
437 115, 119, 123, 123, 123, 123, 123, 123, 123, 123,
438 123, 127, 128, 129, 130, 131, 132, 136, 137, 143,
439 151, 157, 165, 175, 177, 178, 179, 180, 181, 184,
440 192, 198, 208, 214, 220, 228, 237, 242, 250, 253,
441 255, 256, 257, 258, 259, 262, 268, 279, 285, 290,
442 300, 302, 307, 315, 323, 326, 328, 329, 330, 335,
443 342, 347, 355, 358, 360, 361, 362, 365, 373, 380,
444 387, 393, 400, 402, 403, 404, 407, 412, 417, 425,
445 427, 432, 433, 436, 437, 438, 442, 443, 446, 447,
446 450, 451, 452, 453, 454, 455, 456, 459, 460
447 };
448 #endif
449
450 #if YYDEBUG || YYERROR_VERBOSE
451 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
452 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
453 static const char *const yytname[] =
454 {
455 "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU",
456 "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
457 "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
458 "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT",
459 "T_DESELECT", "T_SELECT", "T_RANGE", "T_ON", "T_RESET", "T_WORD",
460 "T_WORD_QUOTE", "T_UNEQUAL", "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL",
461 "T_OR", "T_AND", "T_EQUAL", "T_NOT", "$accept", "input", "stmt_list",
462 "option_name", "common_stmt", "option_error", "config_entry_start",
463 "config_stmt", "menuconfig_entry_start", "menuconfig_stmt",
464 "config_option_list", "config_option", "choice", "choice_entry",
465 "choice_end", "choice_stmt", "choice_option_list", "choice_option",
466 "choice_block", "if_entry", "if_end", "if_stmt", "if_block", "menu",
467 "menu_entry", "menu_end", "menu_stmt", "menu_block", "source_stmt",
468 "comment", "comment_stmt", "help_start", "help", "depends_list",
469 "depends", "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr",
470 "symbol", 0
471 };
472 #endif
473
474 # ifdef YYPRINT
475 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
476 token YYLEX-NUM. */
477 static const unsigned short int yytoknum[] =
478 {
479 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
480 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
481 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
482 285, 286, 287, 288, 289, 290, 291
483 };
484 # endif
485
486 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
487 static const unsigned char yyr1[] =
488 {
489 0, 37, 38, 39, 39, 39, 39, 39, 39, 39,
490 39, 39, 40, 40, 40, 40, 40, 40, 40, 40,
491 40, 41, 41, 41, 41, 41, 41, 42, 42, 43,
492 44, 45, 46, 47, 47, 47, 47, 47, 47, 48,
493 48, 48, 48, 48, 48, 49, 50, 51, 52, 53,
494 53, 53, 53, 53, 53, 54, 54, 54, 54, 54,
495 55, 55, 56, 57, 58, 59, 59, 59, 59, 60,
496 61, 62, 63, 64, 64, 64, 64, 65, 66, 67,
497 68, 69, 70, 70, 70, 70, 71, 71, 71, 72,
498 72, 73, 73, 74, 74, 74, 75, 75, 76, 76,
499 77, 77, 77, 77, 77, 77, 77, 78, 78
500 };
501
502 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
503 static const unsigned char yyr2[] =
504 {
505 0, 2, 1, 0, 2, 2, 2, 4, 2, 4,
506 4, 3, 1, 1, 1, 1, 1, 1, 1, 1,
507 1, 1, 1, 1, 1, 1, 1, 3, 2, 3,
508 2, 3, 2, 0, 2, 2, 2, 2, 2, 3,
509 4, 4, 4, 4, 5, 2, 2, 1, 3, 0,
510 2, 2, 2, 2, 2, 4, 3, 2, 3, 4,
511 0, 2, 3, 1, 3, 0, 2, 2, 2, 3,
512 2, 1, 3, 0, 2, 2, 2, 3, 3, 2,
513 2, 2, 0, 2, 2, 2, 4, 3, 3, 0,
514 2, 1, 1, 2, 2, 2, 1, 2, 0, 2,
515 1, 3, 3, 3, 2, 3, 3, 1, 1
516 };
517
518 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
519 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
520 means the default is an error. */
521 static const unsigned char yydefact[] =
522 {
523 3, 0, 0, 1, 0, 0, 0, 0, 0, 0,
524 0, 0, 0, 0, 0, 0, 12, 17, 13, 14,
525 19, 15, 16, 18, 20, 0, 21, 0, 4, 33,
526 24, 33, 25, 49, 60, 5, 65, 22, 82, 73,
527 6, 26, 82, 23, 8, 11, 91, 92, 0, 0,
528 93, 0, 45, 94, 0, 0, 0, 107, 108, 0,
529 0, 0, 100, 95, 0, 0, 0, 0, 0, 0,
530 0, 0, 0, 0, 96, 7, 69, 77, 78, 29,
531 31, 0, 104, 0, 0, 62, 0, 0, 9, 10,
532 0, 0, 0, 0, 0, 89, 0, 0, 0, 0,
533 0, 38, 37, 34, 0, 36, 35, 0, 0, 89,
534 0, 98, 53, 54, 50, 52, 51, 61, 48, 47,
535 66, 68, 64, 67, 63, 84, 85, 83, 74, 76,
536 72, 75, 71, 97, 103, 105, 106, 102, 101, 28,
537 80, 0, 0, 0, 98, 0, 98, 98, 98, 98,
538 0, 0, 81, 57, 98, 0, 98, 0, 0, 0,
539 87, 88, 0, 39, 90, 0, 0, 0, 98, 27,
540 0, 56, 0, 99, 58, 86, 40, 41, 42, 43,
541 0, 55, 59, 44
542 };
543
544 /* YYDEFGOTO[NTERM-NUM]. */
545 static const short int yydefgoto[] =
546 {
547 -1, 1, 2, 27, 28, 102, 29, 30, 31, 32,
548 66, 103, 33, 34, 118, 35, 68, 114, 69, 36,
549 122, 37, 70, 38, 39, 130, 40, 72, 41, 42,
550 43, 104, 105, 71, 106, 145, 146, 44, 75, 158,
551 61, 62
552 };
553
554 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
555 STATE-NUM. */
556 #define YYPACT_NINF -80
557 static const short int yypact[] =
558 {
559 -80, 2, 164, -80, -22, 105, 105, -6, 105, 0,
560 7, 105, 17, 28, 70, 35, -80, -80, -80, -80,
561 -80, -80, -80, -80, -80, 69, -80, 78, -80, -80,
562 -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
563 -80, -80, -80, -80, -80, -80, -80, -80, 62, 68,
564 -80, 85, -80, -80, 97, 127, 144, -80, -80, 70,
565 70, 188, -8, -80, 149, 163, 42, 104, 192, 67,
566 221, 8, 221, 134, -80, 167, -80, -80, -80, -80,
567 -80, 50, -80, 70, 70, 167, 119, 119, -80, -80,
568 173, 184, 60, 70, 105, 105, 70, 65, 150, 119,
569 232, -80, -80, -80, 210, -80, -80, 202, 105, 105,
570 231, 224, -80, -80, -80, -80, -80, -80, -80, -80,
571 -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
572 -80, -80, -80, -80, -80, 226, -80, -80, -80, -80,
573 -80, 70, 211, 218, 224, 230, 224, -3, 224, 224,
574 119, 233, -80, -80, 224, 234, 224, 70, 235, 222,
575 -80, -80, 236, -80, -80, 237, 238, 239, 224, -80,
576 240, -80, 241, 129, -80, -80, -80, -80, -80, -80,
577 242, -80, -80, -80
578 };
579
580 /* YYPGOTO[NTERM-NUM]. */
581 static const short int yypgoto[] =
582 {
583 -80, -80, -80, -80, -36, 22, -80, -80, -80, -80,
584 244, -80, -80, -80, -80, 176, -80, -80, -80, -80,
585 -80, -80, -80, -80, -80, -80, 187, -80, -80, -80,
586 -80, -80, 195, 243, 121, 155, -5, 145, 215, 93,
587 -55, -79
588 };
589
590 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
591 positive, shift that token. If negative, reduce the rule which
592 number is the opposite. If zero, do what YYDEFACT says.
593 If YYTABLE_NINF, syntax error. */
594 #define YYTABLE_NINF -80
595 static const short int yytable[] =
596 {
597 48, 49, 3, 51, 81, 82, 54, 137, 138, 90,
598 45, 157, -70, -70, -70, -70, -70, -70, -70, -70,
599 150, 86, -70, -70, 92, 93, 50, 87, 135, 136,
600 83, 84, 52, 117, 120, 100, 128, 142, 143, 53,
601 125, 147, -30, 90, 55, -30, -30, -30, -30, -30,
602 -30, -30, -30, -30, 91, 56, -30, -30, 92, 93,
603 -30, 94, 95, 96, 97, 98, 99, 63, -30, 100,
604 64, 168, 7, 8, 101, 10, 11, 12, 13, 65,
605 134, 14, 15, 83, 84, 141, 159, 57, 58, 144,
606 113, 59, 148, 126, 74, 126, 60, 57, 58, 26,
607 76, 59, 173, 154, -32, 90, 60, -32, -32, -32,
608 -32, -32, -32, -32, -32, -32, 91, 77, -32, -32,
609 92, 93, -32, 94, 95, 96, 97, 98, 99, 78,
610 -32, 100, 46, 47, -79, 90, 101, -79, -79, -79,
611 -79, -79, -79, -79, -79, -79, 57, 58, -79, -79,
612 92, 93, -79, -79, -79, -79, -79, -79, -79, 79,
613 -79, 100, 83, 84, -2, 4, 125, 5, 6, 7,
614 8, 9, 10, 11, 12, 13, 80, 149, 14, 15,
615 16, 88, 17, 18, 19, 20, 21, 22, 23, 116,
616 24, 25, 127, 90, 127, 89, 26, -46, -46, 133,
617 -46, -46, -46, -46, 91, 139, -46, -46, 92, 93,
618 107, 108, 109, 110, 119, 124, 140, 132, 111, 100,
619 74, 83, 84, 152, 112, 6, 7, 8, 9, 10,
620 11, 12, 13, 151, 153, 14, 15, 162, 157, 164,
621 165, 166, 167, 160, 83, 84, 121, 170, 129, 172,
622 161, 83, 84, 26, 175, 83, 84, 123, 156, 131,
623 84, 180, 163, 115, 155, 169, 171, 174, 176, 177,
624 178, 179, 181, 182, 183, 67, 85, 0, 0, 0,
625 0, 0, 0, 0, 0, 73
626 };
627
628 static const short int yycheck[] =
629 {
630 5, 6, 0, 8, 59, 60, 11, 86, 87, 1,
631 32, 14, 4, 5, 6, 7, 8, 9, 10, 11,
632 99, 29, 14, 15, 16, 17, 32, 35, 83, 84,
633 33, 34, 32, 69, 70, 27, 72, 92, 93, 32,
634 32, 96, 0, 1, 27, 3, 4, 5, 6, 7,
635 8, 9, 10, 11, 12, 27, 14, 15, 16, 17,
636 18, 19, 20, 21, 22, 23, 24, 32, 26, 27,
637 1, 150, 5, 6, 32, 8, 9, 10, 11, 1,
638 30, 14, 15, 33, 34, 25, 141, 27, 28, 94,
639 68, 31, 27, 71, 32, 73, 36, 27, 28, 32,
640 32, 31, 157, 108, 0, 1, 36, 3, 4, 5,
641 6, 7, 8, 9, 10, 11, 12, 32, 14, 15,
642 16, 17, 18, 19, 20, 21, 22, 23, 24, 32,
643 26, 27, 27, 28, 0, 1, 32, 3, 4, 5,
644 6, 7, 8, 9, 10, 11, 27, 28, 14, 15,
645 16, 17, 18, 19, 20, 21, 22, 23, 24, 32,
646 26, 27, 33, 34, 0, 1, 32, 3, 4, 5,
647 6, 7, 8, 9, 10, 11, 32, 27, 14, 15,
648 16, 32, 18, 19, 20, 21, 22, 23, 24, 68,
649 26, 27, 71, 1, 73, 32, 32, 5, 6, 32,
650 8, 9, 10, 11, 12, 32, 14, 15, 16, 17,
651 18, 19, 20, 21, 69, 70, 32, 72, 26, 27,
652 32, 33, 34, 13, 32, 4, 5, 6, 7, 8,
653 9, 10, 11, 1, 32, 14, 15, 144, 14, 146,
654 147, 148, 149, 32, 33, 34, 70, 154, 72, 156,
655 32, 33, 34, 32, 32, 33, 34, 70, 27, 72,
656 34, 168, 32, 68, 109, 32, 32, 32, 32, 32,
657 32, 32, 32, 32, 32, 31, 61, -1, -1, -1,
658 -1, -1, -1, -1, -1, 42
659 };
660
661 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
662 symbol of state STATE-NUM. */
663 static const unsigned char yystos[] =
664 {
665 0, 38, 39, 0, 1, 3, 4, 5, 6, 7,
666 8, 9, 10, 11, 14, 15, 16, 18, 19, 20,
667 21, 22, 23, 24, 26, 27, 32, 40, 41, 43,
668 44, 45, 46, 49, 50, 52, 56, 58, 60, 61,
669 63, 65, 66, 67, 74, 32, 27, 28, 73, 73,
670 32, 73, 32, 32, 73, 27, 27, 27, 28, 31,
671 36, 77, 78, 32, 1, 1, 47, 47, 53, 55,
672 59, 70, 64, 70, 32, 75, 32, 32, 32, 32,
673 32, 77, 77, 33, 34, 75, 29, 35, 32, 32,
674 1, 12, 16, 17, 19, 20, 21, 22, 23, 24,
675 27, 32, 42, 48, 68, 69, 71, 18, 19, 20,
676 21, 26, 32, 42, 54, 69, 71, 41, 51, 74,
677 41, 52, 57, 63, 74, 32, 42, 71, 41, 52,
678 62, 63, 74, 32, 30, 77, 77, 78, 78, 32,
679 32, 25, 77, 77, 73, 72, 73, 77, 27, 27,
680 78, 1, 13, 32, 73, 72, 27, 14, 76, 77,
681 32, 32, 76, 32, 76, 76, 76, 76, 78, 32,
682 76, 32, 76, 77, 32, 32, 32, 32, 32, 32,
683 76, 32, 32, 32
684 };
685
686 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
687 # define YYSIZE_T __SIZE_TYPE__
688 #endif
689 #if ! defined (YYSIZE_T) && defined (size_t)
690 # define YYSIZE_T size_t
691 #endif
692 #if ! defined (YYSIZE_T)
693 # if defined (__STDC__) || defined (__cplusplus)
694 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
695 # define YYSIZE_T size_t
696 # endif
697 #endif
698 #if ! defined (YYSIZE_T)
699 # define YYSIZE_T unsigned int
700 #endif
701
702 #define yyerrok (yyerrstatus = 0)
703 #define yyclearin (yychar = YYEMPTY)
704 #define YYEMPTY (-2)
705 #define YYEOF 0
706
707 #define YYACCEPT goto yyacceptlab
708 #define YYABORT goto yyabortlab
709 #define YYERROR goto yyerrorlab
710
711
712 /* Like YYERROR except do call yyerror. This remains here temporarily
713 to ease the transition to the new meaning of YYERROR, for GCC.
714 Once GCC version 2 has supplanted version 1, this can go. */
715
716 #define YYFAIL goto yyerrlab
717
718 #define YYRECOVERING() (!!yyerrstatus)
719
720 #define YYBACKUP(Token, Value) \
721 do \
722 if (yychar == YYEMPTY && yylen == 1) \
723 { \
724 yychar = (Token); \
725 yylval = (Value); \
726 yytoken = YYTRANSLATE (yychar); \
727 YYPOPSTACK; \
728 goto yybackup; \
729 } \
730 else \
731 { \
732 yyerror ("syntax error: cannot back up");\
733 YYERROR; \
734 } \
735 while (0)
736
737 #define YYTERROR 1
738 #define YYERRCODE 256
739
740 /* YYLLOC_DEFAULT -- Compute the default location (before the actions
741 are run). */
742
743 #ifndef YYLLOC_DEFAULT
744 # define YYLLOC_DEFAULT(Current, Rhs, N) \
745 ((Current).first_line = (Rhs)[1].first_line, \
746 (Current).first_column = (Rhs)[1].first_column, \
747 (Current).last_line = (Rhs)[N].last_line, \
748 (Current).last_column = (Rhs)[N].last_column)
749 #endif
750
751 /* YYLEX -- calling `yylex' with the right arguments. */
752
753 #ifdef YYLEX_PARAM
754 # define YYLEX yylex (YYLEX_PARAM)
755 #else
756 # define YYLEX yylex ()
757 #endif
758
759 /* Enable debugging if requested. */
760 #if YYDEBUG
761
762 # ifndef YYFPRINTF
763 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
764 # define YYFPRINTF fprintf
765 # endif
766
767 # define YYDPRINTF(Args) \
768 do { \
769 if (yydebug) \
770 YYFPRINTF Args; \
771 } while (0)
772
773 # define YYDSYMPRINT(Args) \
774 do { \
775 if (yydebug) \
776 yysymprint Args; \
777 } while (0)
778
779 # define YYDSYMPRINTF(Title, Token, Value, Location) \
780 do { \
781 if (yydebug) \
782 { \
783 YYFPRINTF (stderr, "%s ", Title); \
784 yysymprint (stderr, \
785 Token, Value); \
786 YYFPRINTF (stderr, "\n"); \
787 } \
788 } while (0)
789
790 /*------------------------------------------------------------------.
791 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
792 | TOP (included). |
793 `------------------------------------------------------------------*/
794
795 #if defined (__STDC__) || defined (__cplusplus)
796 static void
797 yy_stack_print (short int *bottom, short int *top)
798 #else
799 static void
800 yy_stack_print (bottom, top)
801 short int *bottom;
802 short int *top;
803 #endif
804 {
805 YYFPRINTF (stderr, "Stack now");
806 for (/* Nothing. */; bottom <= top; ++bottom)
807 YYFPRINTF (stderr, " %d", *bottom);
808 YYFPRINTF (stderr, "\n");
809 }
810
811 # define YY_STACK_PRINT(Bottom, Top) \
812 do { \
813 if (yydebug) \
814 yy_stack_print ((Bottom), (Top)); \
815 } while (0)
816
817
818 /*------------------------------------------------.
819 | Report that the YYRULE is going to be reduced. |
820 `------------------------------------------------*/
821
822 #if defined (__STDC__) || defined (__cplusplus)
823 static void
824 yy_reduce_print (int yyrule)
825 #else
826 static void
827 yy_reduce_print (yyrule)
828 int yyrule;
829 #endif
830 {
831 int yyi;
832 unsigned int yylno = yyrline[yyrule];
833 YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
834 yyrule - 1, yylno);
835 /* Print the symbols being reduced, and their result. */
836 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
837 YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
838 YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
839 }
840
841 # define YY_REDUCE_PRINT(Rule) \
842 do { \
843 if (yydebug) \
844 yy_reduce_print (Rule); \
845 } while (0)
846
847 /* Nonzero means print parse trace. It is left uninitialized so that
848 multiple parsers can coexist. */
849 int yydebug;
850 #else /* !YYDEBUG */
851 # define YYDPRINTF(Args)
852 # define YYDSYMPRINT(Args)
853 # define YYDSYMPRINTF(Title, Token, Value, Location)
854 # define YY_STACK_PRINT(Bottom, Top)
855 # define YY_REDUCE_PRINT(Rule)
856 #endif /* !YYDEBUG */
857
858
859 /* YYINITDEPTH -- initial size of the parser's stacks. */
860 #ifndef YYINITDEPTH
861 # define YYINITDEPTH 200
862 #endif
863
864 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
865 if the built-in stack extension method is used).
866
867 Do not make this value too large; the results are undefined if
868 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
869 evaluated with infinite-precision integer arithmetic. */
870
871 #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
872 # undef YYMAXDEPTH
873 #endif
874
875 #ifndef YYMAXDEPTH
876 # define YYMAXDEPTH 10000
877 #endif
878
879 \f
880
881 #if YYERROR_VERBOSE
882
883 # ifndef yystrlen
884 # if defined (__GLIBC__) && defined (_STRING_H)
885 # define yystrlen strlen
886 # else
887 /* Return the length of YYSTR. */
888 static YYSIZE_T
889 # if defined (__STDC__) || defined (__cplusplus)
890 yystrlen (const char *yystr)
891 # else
892 yystrlen (yystr)
893 const char *yystr;
894 # endif
895 {
896 register const char *yys = yystr;
897
898 while (*yys++ != '\0')
899 continue;
900
901 return yys - yystr - 1;
902 }
903 # endif
904 # endif
905
906 # ifndef yystpcpy
907 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
908 # define yystpcpy stpcpy
909 # else
910 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
911 YYDEST. */
912 static char *
913 # if defined (__STDC__) || defined (__cplusplus)
914 yystpcpy (char *yydest, const char *yysrc)
915 # else
916 yystpcpy (yydest, yysrc)
917 char *yydest;
918 const char *yysrc;
919 # endif
920 {
921 register char *yyd = yydest;
922 register const char *yys = yysrc;
923
924 while ((*yyd++ = *yys++) != '\0')
925 continue;
926
927 return yyd - 1;
928 }
929 # endif
930 # endif
931
932 #endif /* !YYERROR_VERBOSE */
933
934 \f
935
936 #if YYDEBUG
937 /*--------------------------------.
938 | Print this symbol on YYOUTPUT. |
939 `--------------------------------*/
940
941 #if defined (__STDC__) || defined (__cplusplus)
942 static void
943 yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
944 #else
945 static void
946 yysymprint (yyoutput, yytype, yyvaluep)
947 FILE *yyoutput;
948 int yytype;
949 YYSTYPE *yyvaluep;
950 #endif
951 {
952 /* Pacify ``unused variable'' warnings. */
953 (void) yyvaluep;
954
955 if (yytype < YYNTOKENS)
956 {
957 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
958 # ifdef YYPRINT
959 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
960 # endif
961 }
962 else
963 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
964
965 switch (yytype)
966 {
967 default:
968 break;
969 }
970 YYFPRINTF (yyoutput, ")");
971 }
972
973 #endif /* ! YYDEBUG */
974 /*-----------------------------------------------.
975 | Release the memory associated to this symbol. |
976 `-----------------------------------------------*/
977
978 #if defined (__STDC__) || defined (__cplusplus)
979 static void
980 yydestruct (int yytype, YYSTYPE *yyvaluep)
981 #else
982 static void
983 yydestruct (yytype, yyvaluep)
984 int yytype;
985 YYSTYPE *yyvaluep;
986 #endif
987 {
988 /* Pacify ``unused variable'' warnings. */
989 (void) yyvaluep;
990
991 switch (yytype)
992 {
993 case 50: /* choice_entry */
994
995 {
996 fprintf(stderr, "%s:%d: missing end statement for this entry\n",
997 yyvaluep->menu->file->name, yyvaluep->menu->lineno);
998 if (current_menu == yyvaluep->menu)
999 menu_end_menu();
1000 };
1001
1002 break;
1003 case 56: /* if_entry */
1004
1005 {
1006 fprintf(stderr, "%s:%d: missing end statement for this entry\n",
1007 yyvaluep->menu->file->name, yyvaluep->menu->lineno);
1008 if (current_menu == yyvaluep->menu)
1009 menu_end_menu();
1010 };
1011
1012 break;
1013 case 61: /* menu_entry */
1014
1015 {
1016 fprintf(stderr, "%s:%d: missing end statement for this entry\n",
1017 yyvaluep->menu->file->name, yyvaluep->menu->lineno);
1018 if (current_menu == yyvaluep->menu)
1019 menu_end_menu();
1020 };
1021
1022 break;
1023
1024 default:
1025 break;
1026 }
1027 }
1028 \f
1029
1030 /* Prevent warnings from -Wmissing-prototypes. */
1031
1032 #ifdef YYPARSE_PARAM
1033 # if defined (__STDC__) || defined (__cplusplus)
1034 int yyparse (void *YYPARSE_PARAM);
1035 # else
1036 int yyparse ();
1037 # endif
1038 #else /* ! YYPARSE_PARAM */
1039 #if defined (__STDC__) || defined (__cplusplus)
1040 int yyparse (void);
1041 #else
1042 int yyparse ();
1043 #endif
1044 #endif /* ! YYPARSE_PARAM */
1045
1046
1047
1048 /* The lookahead symbol. */
1049 int yychar;
1050
1051 /* The semantic value of the lookahead symbol. */
1052 YYSTYPE yylval;
1053
1054 /* Number of syntax errors so far. */
1055 int yynerrs;
1056
1057
1058
1059 /*----------.
1060 | yyparse. |
1061 `----------*/
1062
1063 #ifdef YYPARSE_PARAM
1064 # if defined (__STDC__) || defined (__cplusplus)
1065 int yyparse (void *YYPARSE_PARAM)
1066 # else
1067 int yyparse (YYPARSE_PARAM)
1068 void *YYPARSE_PARAM;
1069 # endif
1070 #else /* ! YYPARSE_PARAM */
1071 #if defined (__STDC__) || defined (__cplusplus)
1072 int
1073 yyparse (void)
1074 #else
1075 int
1076 yyparse ()
1077
1078 #endif
1079 #endif
1080 {
1081
1082 register int yystate;
1083 register int yyn;
1084 int yyresult;
1085 /* Number of tokens to shift before error messages enabled. */
1086 int yyerrstatus;
1087 /* Lookahead token as an internal (translated) token number. */
1088 int yytoken = 0;
1089
1090 /* Three stacks and their tools:
1091 `yyss': related to states,
1092 `yyvs': related to semantic values,
1093 `yyls': related to locations.
1094
1095 Refer to the stacks thru separate pointers, to allow yyoverflow
1096 to reallocate them elsewhere. */
1097
1098 /* The state stack. */
1099 short int yyssa[YYINITDEPTH];
1100 short int *yyss = yyssa;
1101 register short int *yyssp;
1102
1103 /* The semantic value stack. */
1104 YYSTYPE yyvsa[YYINITDEPTH];
1105 YYSTYPE *yyvs = yyvsa;
1106 register YYSTYPE *yyvsp;
1107
1108
1109
1110 #define YYPOPSTACK (yyvsp--, yyssp--)
1111
1112 YYSIZE_T yystacksize = YYINITDEPTH;
1113
1114 /* The variables used to return semantic value and location from the
1115 action routines. */
1116 YYSTYPE yyval;
1117
1118
1119 /* When reducing, the number of symbols on the RHS of the reduced
1120 rule. */
1121 int yylen;
1122
1123 YYDPRINTF ((stderr, "Starting parse\n"));
1124
1125 yystate = 0;
1126 yyerrstatus = 0;
1127 yynerrs = 0;
1128 yychar = YYEMPTY; /* Cause a token to be read. */
1129
1130 /* Initialize stack pointers.
1131 Waste one element of value and location stack
1132 so that they stay on the same level as the state stack.
1133 The wasted elements are never initialized. */
1134
1135 yyssp = yyss;
1136 yyvsp = yyvs;
1137
1138
1139 goto yysetstate;
1140
1141 /*------------------------------------------------------------.
1142 | yynewstate -- Push a new state, which is found in yystate. |
1143 `------------------------------------------------------------*/
1144 yynewstate:
1145 /* In all cases, when you get here, the value and location stacks
1146 have just been pushed. so pushing a state here evens the stacks.
1147 */
1148 yyssp++;
1149
1150 yysetstate:
1151 *yyssp = yystate;
1152
1153 if (yyss + yystacksize - 1 <= yyssp)
1154 {
1155 /* Get the current used size of the three stacks, in elements. */
1156 YYSIZE_T yysize = yyssp - yyss + 1;
1157
1158 #ifdef yyoverflow
1159 {
1160 /* Give user a chance to reallocate the stack. Use copies of
1161 these so that the &'s don't force the real ones into
1162 memory. */
1163 YYSTYPE *yyvs1 = yyvs;
1164 short int *yyss1 = yyss;
1165
1166
1167 /* Each stack pointer address is followed by the size of the
1168 data in use in that stack, in bytes. This used to be a
1169 conditional around just the two extra args, but that might
1170 be undefined if yyoverflow is a macro. */
1171 yyoverflow ("parser stack overflow",
1172 &yyss1, yysize * sizeof (*yyssp),
1173 &yyvs1, yysize * sizeof (*yyvsp),
1174
1175 &yystacksize);
1176
1177 yyss = yyss1;
1178 yyvs = yyvs1;
1179 }
1180 #else /* no yyoverflow */
1181 # ifndef YYSTACK_RELOCATE
1182 goto yyoverflowlab;
1183 # else
1184 /* Extend the stack our own way. */
1185 if (YYMAXDEPTH <= yystacksize)
1186 goto yyoverflowlab;
1187 yystacksize *= 2;
1188 if (YYMAXDEPTH < yystacksize)
1189 yystacksize = YYMAXDEPTH;
1190
1191 {
1192 short int *yyss1 = yyss;
1193 union yyalloc *yyptr =
1194 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1195 if (! yyptr)
1196 goto yyoverflowlab;
1197 YYSTACK_RELOCATE (yyss);
1198 YYSTACK_RELOCATE (yyvs);
1199
1200 # undef YYSTACK_RELOCATE
1201 if (yyss1 != yyssa)
1202 YYSTACK_FREE (yyss1);
1203 }
1204 # endif
1205 #endif /* no yyoverflow */
1206
1207 yyssp = yyss + yysize - 1;
1208 yyvsp = yyvs + yysize - 1;
1209
1210
1211 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1212 (unsigned long int) yystacksize));
1213
1214 if (yyss + yystacksize - 1 <= yyssp)
1215 YYABORT;
1216 }
1217
1218 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1219
1220 goto yybackup;
1221
1222 /*-----------.
1223 | yybackup. |
1224 `-----------*/
1225 yybackup:
1226
1227 /* Do appropriate processing given the current state. */
1228 /* Read a lookahead token if we need one and don't already have one. */
1229 /* yyresume: */
1230
1231 /* First try to decide what to do without reference to lookahead token. */
1232
1233 yyn = yypact[yystate];
1234 if (yyn == YYPACT_NINF)
1235 goto yydefault;
1236
1237 /* Not known => get a lookahead token if don't already have one. */
1238
1239 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
1240 if (yychar == YYEMPTY)
1241 {
1242 YYDPRINTF ((stderr, "Reading a token: "));
1243 yychar = YYLEX;
1244 }
1245
1246 if (yychar <= YYEOF)
1247 {
1248 yychar = yytoken = YYEOF;
1249 YYDPRINTF ((stderr, "Now at end of input.\n"));
1250 }
1251 else
1252 {
1253 yytoken = YYTRANSLATE (yychar);
1254 YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
1255 }
1256
1257 /* If the proper action on seeing token YYTOKEN is to reduce or to
1258 detect an error, take that action. */
1259 yyn += yytoken;
1260 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1261 goto yydefault;
1262 yyn = yytable[yyn];
1263 if (yyn <= 0)
1264 {
1265 if (yyn == 0 || yyn == YYTABLE_NINF)
1266 goto yyerrlab;
1267 yyn = -yyn;
1268 goto yyreduce;
1269 }
1270
1271 if (yyn == YYFINAL)
1272 YYACCEPT;
1273
1274 /* Shift the lookahead token. */
1275 YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
1276
1277 /* Discard the token being shifted unless it is eof. */
1278 if (yychar != YYEOF)
1279 yychar = YYEMPTY;
1280
1281 *++yyvsp = yylval;
1282
1283
1284 /* Count tokens shifted since error; after three, turn off error
1285 status. */
1286 if (yyerrstatus)
1287 yyerrstatus--;
1288
1289 yystate = yyn;
1290 goto yynewstate;
1291
1292
1293 /*-----------------------------------------------------------.
1294 | yydefault -- do the default action for the current state. |
1295 `-----------------------------------------------------------*/
1296 yydefault:
1297 yyn = yydefact[yystate];
1298 if (yyn == 0)
1299 goto yyerrlab;
1300 goto yyreduce;
1301
1302
1303 /*-----------------------------.
1304 | yyreduce -- Do a reduction. |
1305 `-----------------------------*/
1306 yyreduce:
1307 /* yyn is the number of a rule to reduce with. */
1308 yylen = yyr2[yyn];
1309
1310 /* If YYLEN is nonzero, implement the default value of the action:
1311 `$$ = $1'.
1312
1313 Otherwise, the following line sets YYVAL to garbage.
1314 This behavior is undocumented and Bison
1315 users should not rely upon it. Assigning to YYVAL
1316 unconditionally makes the parser a bit smaller, and it avoids a
1317 GCC warning that YYVAL may be used uninitialized. */
1318 yyval = yyvsp[1-yylen];
1319
1320
1321 YY_REDUCE_PRINT (yyn);
1322 switch (yyn)
1323 {
1324 case 8:
1325
1326 { zconf_error("unexpected end statement"); ;}
1327 break;
1328
1329 case 9:
1330
1331 { zconf_error("unknown statement \"%s\"", yyvsp[-2].string); ;}
1332 break;
1333
1334 case 10:
1335
1336 {
1337 zconf_error("unexpected option \"%s\"", kconf_id_strings + yyvsp[-2].id->name);
1338 ;}
1339 break;
1340
1341 case 11:
1342
1343 { zconf_error("invalid statement"); ;}
1344 break;
1345
1346 case 27:
1347
1348 { zconf_error("unknown option \"%s\"", yyvsp[-2].string); ;}
1349 break;
1350
1351 case 28:
1352
1353 { zconf_error("invalid option"); ;}
1354 break;
1355
1356 case 29:
1357
1358 {
1359 struct symbol *sym = sym_lookup(yyvsp[-1].string, 0);
1360 sym->flags |= SYMBOL_OPTIONAL;
1361 menu_add_entry(sym);
1362 printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
1363 ;}
1364 break;
1365
1366 case 30:
1367
1368 {
1369 menu_end_entry();
1370 printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1371 ;}
1372 break;
1373
1374 case 31:
1375
1376 {
1377 struct symbol *sym = sym_lookup(yyvsp[-1].string, 0);
1378 sym->flags |= SYMBOL_OPTIONAL;
1379 menu_add_entry(sym);
1380 printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
1381 ;}
1382 break;
1383
1384 case 32:
1385
1386 {
1387 if (current_entry->prompt)
1388 current_entry->prompt->type = P_MENU;
1389 else
1390 zconfprint("warning: menuconfig statement without prompt");
1391 menu_end_entry();
1392 printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1393 ;}
1394 break;
1395
1396 case 39:
1397
1398 {
1399 menu_set_type(yyvsp[-2].id->stype);
1400 printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
1401 zconf_curname(), zconf_lineno(),
1402 yyvsp[-2].id->stype);
1403 ;}
1404 break;
1405
1406 case 40:
1407
1408 {
1409 menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr);
1410 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1411 ;}
1412 break;
1413
1414 case 41:
1415
1416 {
1417 menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
1418 if (yyvsp[-3].id->stype != S_UNKNOWN)
1419 menu_set_type(yyvsp[-3].id->stype);
1420 printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
1421 zconf_curname(), zconf_lineno(),
1422 yyvsp[-3].id->stype);
1423 ;}
1424 break;
1425
1426 case 42:
1427
1428 {
1429 menu_add_symbol(P_DESELECT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr);
1430 printd(DEBUG_PARSE, "%s:%d:deselect\n", zconf_curname(), zconf_lineno());
1431 ;}
1432 break;
1433
1434 case 43:
1435
1436 {
1437 menu_add_symbol(P_SELECT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr);
1438 printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
1439 ;}
1440 break;
1441
1442 case 44:
1443
1444 {
1445 menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,yyvsp[-3].symbol, yyvsp[-2].symbol), yyvsp[-1].expr);
1446 printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
1447 ;}
1448 break;
1449
1450 case 45:
1451
1452 {
1453 struct symbol *sym = sym_lookup(NULL, 0);
1454 sym->flags |= SYMBOL_CHOICE;
1455 menu_add_entry(sym);
1456 menu_add_expr(P_CHOICE, NULL, NULL);
1457 printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
1458 ;}
1459 break;
1460
1461 case 46:
1462
1463 {
1464 yyval.menu = menu_add_menu();
1465 ;}
1466 break;
1467
1468 case 47:
1469
1470 {
1471 if (zconf_endtoken(yyvsp[0].id, T_CHOICE, T_ENDCHOICE)) {
1472 menu_end_menu();
1473 printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
1474 }
1475 ;}
1476 break;
1477
1478 case 55:
1479
1480 {
1481 menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr);
1482 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1483 ;}
1484 break;
1485
1486 case 56:
1487
1488 {
1489 if (yyvsp[-2].id->stype == S_BOOLEAN || yyvsp[-2].id->stype == S_TRISTATE) {
1490 menu_set_type(yyvsp[-2].id->stype);
1491 printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
1492 zconf_curname(), zconf_lineno(),
1493 yyvsp[-2].id->stype);
1494 } else
1495 YYERROR;
1496 ;}
1497 break;
1498
1499 case 57:
1500
1501 {
1502 current_entry->sym->flags |= SYMBOL_OPTIONAL;
1503 printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
1504 ;}
1505 break;
1506
1507 case 58:
1508
1509 {
1510 menu_add_prop(P_RESET, NULL, NULL, yyvsp[-1].expr);
1511 ;}
1512 break;
1513
1514 case 59:
1515
1516 {
1517 if (yyvsp[-3].id->stype == S_UNKNOWN) {
1518 menu_add_symbol(P_DEFAULT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr);
1519 printd(DEBUG_PARSE, "%s:%d:default\n",
1520 zconf_curname(), zconf_lineno());
1521 } else
1522 YYERROR;
1523 ;}
1524 break;
1525
1526 case 62:
1527
1528 {
1529 printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
1530 menu_add_entry(NULL);
1531 menu_add_dep(yyvsp[-1].expr);
1532 yyval.menu = menu_add_menu();
1533 ;}
1534 break;
1535
1536 case 63:
1537
1538 {
1539 if (zconf_endtoken(yyvsp[0].id, T_IF, T_ENDIF)) {
1540 menu_end_menu();
1541 printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
1542 }
1543 ;}
1544 break;
1545
1546 case 69:
1547
1548 {
1549 menu_add_entry(NULL);
1550 menu_add_prompt(P_MENU, yyvsp[-1].string, NULL);
1551 printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
1552 ;}
1553 break;
1554
1555 case 70:
1556
1557 {
1558 yyval.menu = menu_add_menu();
1559 ;}
1560 break;
1561
1562 case 71:
1563
1564 {
1565 if (zconf_endtoken(yyvsp[0].id, T_MENU, T_ENDMENU)) {
1566 menu_end_menu();
1567 printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
1568 }
1569 ;}
1570 break;
1571
1572 case 77:
1573
1574 {
1575 printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
1576 zconf_nextfile(yyvsp[-1].string);
1577 ;}
1578 break;
1579
1580 case 78:
1581
1582 {
1583 menu_add_entry(NULL);
1584 menu_add_prompt(P_COMMENT, yyvsp[-1].string, NULL);
1585 printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
1586 ;}
1587 break;
1588
1589 case 79:
1590
1591 {
1592 menu_end_entry();
1593 ;}
1594 break;
1595
1596 case 80:
1597
1598 {
1599 printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
1600 zconf_starthelp();
1601 ;}
1602 break;
1603
1604 case 81:
1605
1606 {
1607 current_entry->sym->help = yyvsp[0].string;
1608 ;}
1609 break;
1610
1611 case 86:
1612
1613 {
1614 menu_add_dep(yyvsp[-1].expr);
1615 printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
1616 ;}
1617 break;
1618
1619 case 87:
1620
1621 {
1622 menu_add_dep(yyvsp[-1].expr);
1623 printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno());
1624 ;}
1625 break;
1626
1627 case 88:
1628
1629 {
1630 menu_add_dep(yyvsp[-1].expr);
1631 printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno());
1632 ;}
1633 break;
1634
1635 case 90:
1636
1637 {
1638 menu_add_prompt(P_PROMPT, yyvsp[-1].string, yyvsp[0].expr);
1639 ;}
1640 break;
1641
1642 case 93:
1643
1644 { yyval.id = yyvsp[-1].id; ;}
1645 break;
1646
1647 case 94:
1648
1649 { yyval.id = yyvsp[-1].id; ;}
1650 break;
1651
1652 case 95:
1653
1654 { yyval.id = yyvsp[-1].id; ;}
1655 break;
1656
1657 case 98:
1658
1659 { yyval.expr = NULL; ;}
1660 break;
1661
1662 case 99:
1663
1664 { yyval.expr = yyvsp[0].expr; ;}
1665 break;
1666
1667 case 100:
1668
1669 { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); ;}
1670 break;
1671
1672 case 101:
1673
1674 { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
1675 break;
1676
1677 case 102:
1678
1679 { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
1680 break;
1681
1682 case 103:
1683
1684 { yyval.expr = yyvsp[-1].expr; ;}
1685 break;
1686
1687 case 104:
1688
1689 { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); ;}
1690 break;
1691
1692 case 105:
1693
1694 { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); ;}
1695 break;
1696
1697 case 106:
1698
1699 { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); ;}
1700 break;
1701
1702 case 107:
1703
1704 { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;}
1705 break;
1706
1707 case 108:
1708
1709 { yyval.symbol = sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); ;}
1710 break;
1711
1712
1713 }
1714
1715 /* Line 1010 of yacc.c. */
1716
1717 \f
1718 yyvsp -= yylen;
1719 yyssp -= yylen;
1720
1721
1722 YY_STACK_PRINT (yyss, yyssp);
1723
1724 *++yyvsp = yyval;
1725
1726
1727 /* Now `shift' the result of the reduction. Determine what state
1728 that goes to, based on the state we popped back to and the rule
1729 number reduced by. */
1730
1731 yyn = yyr1[yyn];
1732
1733 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1734 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1735 yystate = yytable[yystate];
1736 else
1737 yystate = yydefgoto[yyn - YYNTOKENS];
1738
1739 goto yynewstate;
1740
1741
1742 /*------------------------------------.
1743 | yyerrlab -- here on detecting error |
1744 `------------------------------------*/
1745 yyerrlab:
1746 /* If not already recovering from an error, report this error. */
1747 if (!yyerrstatus)
1748 {
1749 ++yynerrs;
1750 #if YYERROR_VERBOSE
1751 yyn = yypact[yystate];
1752
1753 if (YYPACT_NINF < yyn && yyn < YYLAST)
1754 {
1755 YYSIZE_T yysize = 0;
1756 int yytype = YYTRANSLATE (yychar);
1757 const char* yyprefix;
1758 char *yymsg;
1759 int yyx;
1760
1761 /* Start YYX at -YYN if negative to avoid negative indexes in
1762 YYCHECK. */
1763 int yyxbegin = yyn < 0 ? -yyn : 0;
1764
1765 /* Stay within bounds of both yycheck and yytname. */
1766 int yychecklim = YYLAST - yyn;
1767 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1768 int yycount = 0;
1769
1770 yyprefix = ", expecting ";
1771 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1772 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1773 {
1774 yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
1775 yycount += 1;
1776 if (yycount == 5)
1777 {
1778 yysize = 0;
1779 break;
1780 }
1781 }
1782 yysize += (sizeof ("syntax error, unexpected ")
1783 + yystrlen (yytname[yytype]));
1784 yymsg = (char *) YYSTACK_ALLOC (yysize);
1785 if (yymsg != 0)
1786 {
1787 char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
1788 yyp = yystpcpy (yyp, yytname[yytype]);
1789
1790 if (yycount < 5)
1791 {
1792 yyprefix = ", expecting ";
1793 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1794 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1795 {
1796 yyp = yystpcpy (yyp, yyprefix);
1797 yyp = yystpcpy (yyp, yytname[yyx]);
1798 yyprefix = " or ";
1799 }
1800 }
1801 yyerror (yymsg);
1802 YYSTACK_FREE (yymsg);
1803 }
1804 else
1805 yyerror ("syntax error; also virtual memory exhausted");
1806 }
1807 else
1808 #endif /* YYERROR_VERBOSE */
1809 yyerror ("syntax error");
1810 }
1811
1812
1813
1814 if (yyerrstatus == 3)
1815 {
1816 /* If just tried and failed to reuse lookahead token after an
1817 error, discard it. */
1818
1819 if (yychar <= YYEOF)
1820 {
1821 /* If at end of input, pop the error token,
1822 then the rest of the stack, then return failure. */
1823 if (yychar == YYEOF)
1824 for (;;)
1825 {
1826 YYPOPSTACK;
1827 if (yyssp == yyss)
1828 YYABORT;
1829 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1830 yydestruct (yystos[*yyssp], yyvsp);
1831 }
1832 }
1833 else
1834 {
1835 YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
1836 yydestruct (yytoken, &yylval);
1837 yychar = YYEMPTY;
1838
1839 }
1840 }
1841
1842 /* Else will try to reuse lookahead token after shifting the error
1843 token. */
1844 goto yyerrlab1;
1845
1846
1847 /*---------------------------------------------------.
1848 | yyerrorlab -- error raised explicitly by YYERROR. |
1849 `---------------------------------------------------*/
1850 yyerrorlab:
1851
1852 #ifdef __GNUC__
1853 /* Pacify GCC when the user code never invokes YYERROR and the label
1854 yyerrorlab therefore never appears in user code. */
1855 if (0)
1856 goto yyerrorlab;
1857 #endif
1858
1859 yyvsp -= yylen;
1860 yyssp -= yylen;
1861 yystate = *yyssp;
1862 goto yyerrlab1;
1863
1864
1865 /*-------------------------------------------------------------.
1866 | yyerrlab1 -- common code for both syntax error and YYERROR. |
1867 `-------------------------------------------------------------*/
1868 yyerrlab1:
1869 yyerrstatus = 3; /* Each real token shifted decrements this. */
1870
1871 for (;;)
1872 {
1873 yyn = yypact[yystate];
1874 if (yyn != YYPACT_NINF)
1875 {
1876 yyn += YYTERROR;
1877 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
1878 {
1879 yyn = yytable[yyn];
1880 if (0 < yyn)
1881 break;
1882 }
1883 }
1884
1885 /* Pop the current state because it cannot handle the error token. */
1886 if (yyssp == yyss)
1887 YYABORT;
1888
1889 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1890 yydestruct (yystos[yystate], yyvsp);
1891 YYPOPSTACK;
1892 yystate = *yyssp;
1893 YY_STACK_PRINT (yyss, yyssp);
1894 }
1895
1896 if (yyn == YYFINAL)
1897 YYACCEPT;
1898
1899 YYDPRINTF ((stderr, "Shifting error token, "));
1900
1901 *++yyvsp = yylval;
1902
1903
1904 yystate = yyn;
1905 goto yynewstate;
1906
1907
1908 /*-------------------------------------.
1909 | yyacceptlab -- YYACCEPT comes here. |
1910 `-------------------------------------*/
1911 yyacceptlab:
1912 yyresult = 0;
1913 goto yyreturn;
1914
1915 /*-----------------------------------.
1916 | yyabortlab -- YYABORT comes here. |
1917 `-----------------------------------*/
1918 yyabortlab:
1919 yyresult = 1;
1920 goto yyreturn;
1921
1922 #ifndef yyoverflow
1923 /*----------------------------------------------.
1924 | yyoverflowlab -- parser overflow comes here. |
1925 `----------------------------------------------*/
1926 yyoverflowlab:
1927 yyerror ("parser stack overflow");
1928 yyresult = 2;
1929 /* Fall through. */
1930 #endif
1931
1932 yyreturn:
1933 #ifndef yyoverflow
1934 if (yyss != yyssa)
1935 YYSTACK_FREE (yyss);
1936 #endif
1937 return yyresult;
1938 }
1939
1940
1941
1942
1943
1944 void conf_parse(const char *name)
1945 {
1946 struct symbol *sym;
1947 int i;
1948
1949 zconf_initscan(name);
1950
1951 sym_init();
1952 menu_init();
1953 modules_sym = sym_lookup("MODULES", 0);
1954 rootmenu.prompt = menu_add_prompt(P_MENU, "OpenWrt Configuration", NULL);
1955
1956 #if YYDEBUG
1957 if (getenv("ZCONF_DEBUG"))
1958 zconfdebug = 1;
1959 #endif
1960 zconfparse();
1961 if (zconfnerrs)
1962 exit(1);
1963 menu_finalize(&rootmenu);
1964 for_all_symbols(i, sym) {
1965 sym_check_deps(sym);
1966 }
1967
1968 sym_change_count = 1;
1969 }
1970
1971 const char *zconf_tokenname(int token)
1972 {
1973 switch (token) {
1974 case T_MENU: return "menu";
1975 case T_ENDMENU: return "endmenu";
1976 case T_CHOICE: return "choice";
1977 case T_ENDCHOICE: return "endchoice";
1978 case T_IF: return "if";
1979 case T_ENDIF: return "endif";
1980 case T_DEPENDS: return "depends";
1981 }
1982 return "<token>";
1983 }
1984
1985 static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
1986 {
1987 if (id->token != endtoken) {
1988 zconf_error("unexpected '%s' within %s block",
1989 kconf_id_strings + id->name, zconf_tokenname(starttoken));
1990 zconfnerrs++;
1991 return false;
1992 }
1993 if (current_menu->file != current_file) {
1994 zconf_error("'%s' in different file than '%s'",
1995 kconf_id_strings + id->name, zconf_tokenname(starttoken));
1996 fprintf(stderr, "%s:%d: location of the '%s'\n",
1997 current_menu->file->name, current_menu->lineno,
1998 zconf_tokenname(starttoken));
1999 zconfnerrs++;
2000 return false;
2001 }
2002 return true;
2003 }
2004
2005 static void zconfprint(const char *err, ...)
2006 {
2007 va_list ap;
2008
2009 fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
2010 va_start(ap, err);
2011 vfprintf(stderr, err, ap);
2012 va_end(ap);
2013 fprintf(stderr, "\n");
2014 }
2015
2016 static void zconf_error(const char *err, ...)
2017 {
2018 va_list ap;
2019
2020 zconfnerrs++;
2021 fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
2022 va_start(ap, err);
2023 vfprintf(stderr, err, ap);
2024 va_end(ap);
2025 fprintf(stderr, "\n");
2026 }
2027
2028 static void zconferror(const char *err)
2029 {
2030 #if YYDEBUG
2031 fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
2032 #endif
2033 }
2034
2035 void print_quoted_string(FILE *out, const char *str)
2036 {
2037 const char *p;
2038 int len;
2039
2040 putc('"', out);
2041 while ((p = strchr(str, '"'))) {
2042 len = p - str;
2043 if (len)
2044 fprintf(out, "%.*s", len, str);
2045 fputs("\\\"", out);
2046 str = p + 1;
2047 }
2048 fputs(str, out);
2049 putc('"', out);
2050 }
2051
2052 void print_symbol(FILE *out, struct menu *menu)
2053 {
2054 struct symbol *sym = menu->sym;
2055 struct property *prop;
2056
2057 if (sym_is_choice(sym))
2058 fprintf(out, "choice\n");
2059 else
2060 fprintf(out, "config %s\n", sym->name);
2061 switch (sym->type) {
2062 case S_BOOLEAN:
2063 fputs(" boolean\n", out);
2064 break;
2065 case S_TRISTATE:
2066 fputs(" tristate\n", out);
2067 break;
2068 case S_STRING:
2069 fputs(" string\n", out);
2070 break;
2071 case S_INT:
2072 fputs(" integer\n", out);
2073 break;
2074 case S_HEX:
2075 fputs(" hex\n", out);
2076 break;
2077 default:
2078 fputs(" ???\n", out);
2079 break;
2080 }
2081 for (prop = sym->prop; prop; prop = prop->next) {
2082 if (prop->menu != menu)
2083 continue;
2084 switch (prop->type) {
2085 case P_PROMPT:
2086 fputs(" prompt ", out);
2087 print_quoted_string(out, prop->text);
2088 if (!expr_is_yes(prop->visible.expr)) {
2089 fputs(" if ", out);
2090 expr_fprint(prop->visible.expr, out);
2091 }
2092 fputc('\n', out);
2093 break;
2094 case P_DEFAULT:
2095 fputs( " default ", out);
2096 expr_fprint(prop->expr, out);
2097 if (!expr_is_yes(prop->visible.expr)) {
2098 fputs(" if ", out);
2099 expr_fprint(prop->visible.expr, out);
2100 }
2101 fputc('\n', out);
2102 break;
2103 case P_CHOICE:
2104 fputs(" #choice value\n", out);
2105 break;
2106 default:
2107 fprintf(out, " unknown prop %d!\n", prop->type);
2108 break;
2109 }
2110 }
2111 if (sym->help) {
2112 int len = strlen(sym->help);
2113 while (sym->help[--len] == '\n')
2114 sym->help[len] = 0;
2115 fprintf(out, " help\n%s\n", sym->help);
2116 }
2117 fputc('\n', out);
2118 }
2119
2120 void zconfdump(FILE *out)
2121 {
2122 struct property *prop;
2123 struct symbol *sym;
2124 struct menu *menu;
2125
2126 menu = rootmenu.list;
2127 while (menu) {
2128 if ((sym = menu->sym))
2129 print_symbol(out, menu);
2130 else if ((prop = menu->prompt)) {
2131 switch (prop->type) {
2132 case P_COMMENT:
2133 fputs("\ncomment ", out);
2134 print_quoted_string(out, prop->text);
2135 fputs("\n", out);
2136 break;
2137 case P_MENU:
2138 fputs("\nmenu ", out);
2139 print_quoted_string(out, prop->text);
2140 fputs("\n", out);
2141 break;
2142 default:
2143 ;
2144 }
2145 if (!expr_is_yes(prop->visible.expr)) {
2146 fputs(" depends ", out);
2147 expr_fprint(prop->visible.expr, out);
2148 fputc('\n', out);
2149 }
2150 fputs("\n", out);
2151 }
2152
2153 if (menu->list)
2154 menu = menu->list;
2155 else if (menu->next)
2156 menu = menu->next;
2157 else while ((menu = menu->parent)) {
2158 if (menu->prompt && menu->prompt->type == P_MENU)
2159 fputs("\nendmenu\n", out);
2160 if (menu->next) {
2161 menu = menu->next;
2162 break;
2163 }
2164 }
2165 }
2166 }
2167
2168 #include "lex.zconf.c"
2169 #include "util.c"
2170 #include "confdata.c"
2171 #include "expr.c"
2172 #include "symbol.c"
2173 #include "menu.c"
2174
2175
This page took 0.137317 seconds and 5 git commands to generate.