[MINI2440] Initial board support
[openwrt/mini2440.git] / scripts / config / zconf.tab.c_shipped
blob77f392a961bf4536659302d409ab4f2c492ef0c8
1 /* A Bison parser, made by GNU Bison 1.875d.  */
3 /* Skeleton parser for Yacc-like parsing with Bison,
4    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
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.
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.
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.  */
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.  */
26 /* Written by Richard Stallman by simplifying the original so called
27    ``semantic'' parser.  */
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.  */
36 /* Identify Bison output.  */
37 #define YYBISON 1
39 /* Skeleton name.  */
40 #define YYSKELETON_NAME "yacc.c"
42 /* Pure parsers.  */
43 #define YYPURE 0
45 /* Using locations.  */
46 #define YYLSP_NEEDED 0
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
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
139 /* Copy the first part of user declarations.  */
143  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
144  * Released under the terms of the GNU GPL v2.0.
145  */
147 #include <ctype.h>
148 #include <stdarg.h>
149 #include <stdio.h>
150 #include <stdlib.h>
151 #include <string.h>
152 #include <stdbool.h>
154 #define LKC_DIRECT_LINK
155 #include "lkc.h"
157 #include "zconf.hash.c"
159 #define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
161 #define PRINTD          0x0001
162 #define DEBUG_PARSE     0x0002
164 int cdebug = PRINTD;
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);
172 struct symbol *symbol_hash[257];
174 static struct menu *current_menu, *current_entry;
176 #define YYDEBUG 0
177 #if YYDEBUG
178 #define YYERROR_VERBOSE
179 #endif
182 /* Enabling traces.  */
183 #ifndef YYDEBUG
184 # define YYDEBUG 0
185 #endif
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
195 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
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.  */
207 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
208 # define YYSTYPE_IS_DECLARED 1
209 # define YYSTYPE_IS_TRIVIAL 1
210 #endif
214 /* Copy the second part of user declarations.  */
217 /* Line 214 of yacc.c.  */
220 #if ! defined (yyoverflow) || YYERROR_VERBOSE
222 # ifndef YYFREE
223 #  define YYFREE free
224 # endif
225 # ifndef YYMALLOC
226 #  define YYMALLOC malloc
227 # endif
229 /* The parser invokes alloca or malloc; define the necessary symbols.  */
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
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 */
259 #if (! defined (yyoverflow) \
260      && (! defined (__cplusplus) \
261          || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
263 /* A type that is properly aligned for any stack member.  */
264 union yyalloc
266   short int yyss;
267   YYSTYPE yyvs;
268   };
270 /* The size of the maximum gap between one aligned stack and the next.  */
271 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
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)
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
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)
313 #endif
315 #if defined (__STDC__) || defined (__cplusplus)
316    typedef signed char yysigned_char;
317 #else
318    typedef short int yysigned_char;
319 #endif
321 /* YYFINAL -- State number of the termination state. */
322 #define YYFINAL  3
323 /* YYLAST -- Last index in YYTABLE.  */
324 #define YYLAST   285
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
335 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
336 #define YYUNDEFTOK  2
337 #define YYMAXUTOK   291
339 #define YYTRANSLATE(YYX)                                                \
340   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
342 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
343 static const unsigned char yytranslate[] =
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
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[] =
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
395 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
396 static const yysigned_char yyrhs[] =
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
433 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
434 static const unsigned short int yyrline[] =
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
448 #endif
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[] =
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
472 #endif
474 # ifdef YYPRINT
475 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
476    token YYLEX-NUM.  */
477 static const unsigned short int yytoknum[] =
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
484 # endif
486 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
487 static const unsigned char yyr1[] =
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
502 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
503 static const unsigned char yyr2[] =
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
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[] =
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
544 /* YYDEFGOTO[NTERM-NUM]. */
545 static const short int yydefgoto[] =
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
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[] =
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
580 /* YYPGOTO[NTERM-NUM].  */
581 static const short int yypgoto[] =
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
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[] =
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
628 static const short int yycheck[] =
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
661 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
662    symbol of state STATE-NUM.  */
663 static const unsigned char yystos[] =
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
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
702 #define yyerrok         (yyerrstatus = 0)
703 #define yyclearin       (yychar = YYEMPTY)
704 #define YYEMPTY         (-2)
705 #define YYEOF           0
707 #define YYACCEPT        goto yyacceptlab
708 #define YYABORT         goto yyabortlab
709 #define YYERROR         goto yyerrorlab
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.  */
716 #define YYFAIL          goto yyerrlab
718 #define YYRECOVERING()  (!!yyerrstatus)
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)
737 #define YYTERROR        1
738 #define YYERRCODE       256
740 /* YYLLOC_DEFAULT -- Compute the default location (before the actions
741    are run).  */
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
751 /* YYLEX -- calling `yylex' with the right arguments.  */
753 #ifdef YYLEX_PARAM
754 # define YYLEX yylex (YYLEX_PARAM)
755 #else
756 # define YYLEX yylex ()
757 #endif
759 /* Enable debugging if requested.  */
760 #if YYDEBUG
762 # ifndef YYFPRINTF
763 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
764 #  define YYFPRINTF fprintf
765 # endif
767 # define YYDPRINTF(Args)                        \
768 do {                                            \
769   if (yydebug)                                  \
770     YYFPRINTF Args;                             \
771 } while (0)
773 # define YYDSYMPRINT(Args)                      \
774 do {                                            \
775   if (yydebug)                                  \
776     yysymprint Args;                            \
777 } while (0)
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)
790 /*------------------------------------------------------------------.
791 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
792 | TOP (included).                                                   |
793 `------------------------------------------------------------------*/
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
805   YYFPRINTF (stderr, "Stack now");
806   for (/* Nothing. */; bottom <= top; ++bottom)
807     YYFPRINTF (stderr, " %d", *bottom);
808   YYFPRINTF (stderr, "\n");
811 # define YY_STACK_PRINT(Bottom, Top)                            \
812 do {                                                            \
813   if (yydebug)                                                  \
814     yy_stack_print ((Bottom), (Top));                           \
815 } while (0)
818 /*------------------------------------------------.
819 | Report that the YYRULE is going to be reduced.  |
820 `------------------------------------------------*/
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
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]]);
841 # define YY_REDUCE_PRINT(Rule)          \
842 do {                                    \
843   if (yydebug)                          \
844     yy_reduce_print (Rule);             \
845 } while (0)
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 */
859 /* YYINITDEPTH -- initial size of the parser's stacks.  */
860 #ifndef YYINITDEPTH
861 # define YYINITDEPTH 200
862 #endif
864 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
865    if the built-in stack extension method is used).
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.  */
871 #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
872 # undef YYMAXDEPTH
873 #endif
875 #ifndef YYMAXDEPTH
876 # define YYMAXDEPTH 10000
877 #endif
881 #if YYERROR_VERBOSE
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
896   register const char *yys = yystr;
898   while (*yys++ != '\0')
899     continue;
901   return yys - yystr - 1;
903 #  endif
904 # endif
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
921   register char *yyd = yydest;
922   register const char *yys = yysrc;
924   while ((*yyd++ = *yys++) != '\0')
925     continue;
927   return yyd - 1;
929 #  endif
930 # endif
932 #endif /* !YYERROR_VERBOSE */
936 #if YYDEBUG
937 /*--------------------------------.
938 | Print this symbol on YYOUTPUT.  |
939 `--------------------------------*/
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
952   /* Pacify ``unused variable'' warnings.  */
953   (void) yyvaluep;
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]);
965   switch (yytype)
966     {
967       default:
968         break;
969     }
970   YYFPRINTF (yyoutput, ")");
973 #endif /* ! YYDEBUG */
974 /*-----------------------------------------------.
975 | Release the memory associated to this symbol.  |
976 `-----------------------------------------------*/
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
988   /* Pacify ``unused variable'' warnings.  */
989   (void) yyvaluep;
991   switch (yytype)
992     {
993       case 50: /* choice_entry */
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();
1002         break;
1003       case 56: /* if_entry */
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();
1012         break;
1013       case 61: /* menu_entry */
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();
1022         break;
1024       default:
1025         break;
1026     }
1030 /* Prevent warnings from -Wmissing-prototypes.  */
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 */
1048 /* The lookahead symbol.  */
1049 int yychar;
1051 /* The semantic value of the lookahead symbol.  */
1052 YYSTYPE yylval;
1054 /* Number of syntax errors so far.  */
1055 int yynerrs;
1059 /*----------.
1060 | yyparse.  |
1061 `----------*/
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)
1073 yyparse (void)
1074 #else
1076 yyparse ()
1078 #endif
1079 #endif
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;
1090   /* Three stacks and their tools:
1091      `yyss': related to states,
1092      `yyvs': related to semantic values,
1093      `yyls': related to locations.
1095      Refer to the stacks thru separate pointers, to allow yyoverflow
1096      to reallocate them elsewhere.  */
1098   /* The state stack.  */
1099   short int yyssa[YYINITDEPTH];
1100   short int *yyss = yyssa;
1101   register short int *yyssp;
1103   /* The semantic value stack.  */
1104   YYSTYPE yyvsa[YYINITDEPTH];
1105   YYSTYPE *yyvs = yyvsa;
1106   register YYSTYPE *yyvsp;
1110 #define YYPOPSTACK   (yyvsp--, yyssp--)
1112   YYSIZE_T yystacksize = YYINITDEPTH;
1114   /* The variables used to return semantic value and location from the
1115      action routines.  */
1116   YYSTYPE yyval;
1119   /* When reducing, the number of symbols on the RHS of the reduced
1120      rule.  */
1121   int yylen;
1123   YYDPRINTF ((stderr, "Starting parse\n"));
1125   yystate = 0;
1126   yyerrstatus = 0;
1127   yynerrs = 0;
1128   yychar = YYEMPTY;             /* Cause a token to be read.  */
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.  */
1135   yyssp = yyss;
1136   yyvsp = yyvs;
1139   goto yysetstate;
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++;
1150  yysetstate:
1151   *yyssp = yystate;
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;
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;
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),
1175                     &yystacksize);
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;
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);
1200 #  undef YYSTACK_RELOCATE
1201         if (yyss1 != yyssa)
1202           YYSTACK_FREE (yyss1);
1203       }
1204 # endif
1205 #endif /* no yyoverflow */
1207       yyssp = yyss + yysize - 1;
1208       yyvsp = yyvs + yysize - 1;
1211       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1212                   (unsigned long int) yystacksize));
1214       if (yyss + yystacksize - 1 <= yyssp)
1215         YYABORT;
1216     }
1218   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1220   goto yybackup;
1222 /*-----------.
1223 | yybackup.  |
1224 `-----------*/
1225 yybackup:
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: */
1231   /* First try to decide what to do without reference to lookahead token.  */
1233   yyn = yypact[yystate];
1234   if (yyn == YYPACT_NINF)
1235     goto yydefault;
1237   /* Not known => get a lookahead token if don't already have one.  */
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     }
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     }
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     }
1271   if (yyn == YYFINAL)
1272     YYACCEPT;
1274   /* Shift the lookahead token.  */
1275   YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
1277   /* Discard the token being shifted unless it is eof.  */
1278   if (yychar != YYEOF)
1279     yychar = YYEMPTY;
1281   *++yyvsp = yylval;
1284   /* Count tokens shifted since error; after three, turn off error
1285      status.  */
1286   if (yyerrstatus)
1287     yyerrstatus--;
1289   yystate = yyn;
1290   goto yynewstate;
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;
1303 /*-----------------------------.
1304 | yyreduce -- Do a reduction.  |
1305 `-----------------------------*/
1306 yyreduce:
1307   /* yyn is the number of a rule to reduce with.  */
1308   yylen = yyr2[yyn];
1310   /* If YYLEN is nonzero, implement the default value of the action:
1311      `$$ = $1'.
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];
1321   YY_REDUCE_PRINT (yyn);
1322   switch (yyn)
1323     {
1324         case 8:
1326     { zconf_error("unexpected end statement"); ;}
1327     break;
1329   case 9:
1331     { zconf_error("unknown statement \"%s\"", yyvsp[-2].string); ;}
1332     break;
1334   case 10:
1336     {
1337         zconf_error("unexpected option \"%s\"", kconf_id_strings + yyvsp[-2].id->name);
1339     break;
1341   case 11:
1343     { zconf_error("invalid statement"); ;}
1344     break;
1346   case 27:
1348     { zconf_error("unknown option \"%s\"", yyvsp[-2].string); ;}
1349     break;
1351   case 28:
1353     { zconf_error("invalid option"); ;}
1354     break;
1356   case 29:
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);
1364     break;
1366   case 30:
1368     {
1369         menu_end_entry();
1370         printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1372     break;
1374   case 31:
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);
1382     break;
1384   case 32:
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());
1394     break;
1396   case 39:
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);
1404     break;
1406   case 40:
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());
1412     break;
1414   case 41:
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);
1424     break;
1426   case 42:
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());
1432     break;
1434   case 43:
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());
1440     break;
1442   case 44:
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());
1448     break;
1450   case 45:
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());
1459     break;
1461   case 46:
1463     {
1464         yyval.menu = menu_add_menu();
1466     break;
1468   case 47:
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         }
1476     break;
1478   case 55:
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());
1484     break;
1486   case 56:
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;
1497     break;
1499   case 57:
1501     {
1502         current_entry->sym->flags |= SYMBOL_OPTIONAL;
1503         printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
1505     break;
1507   case 58:
1509     {
1510         menu_add_prop(P_RESET, NULL, NULL, yyvsp[-1].expr);
1512     break;
1514   case 59:
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;
1524     break;
1526   case 62:
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();
1534     break;
1536   case 63:
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         }
1544     break;
1546   case 69:
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());
1553     break;
1555   case 70:
1557     {
1558         yyval.menu = menu_add_menu();
1560     break;
1562   case 71:
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         }
1570     break;
1572   case 77:
1574     {
1575         printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
1576         zconf_nextfile(yyvsp[-1].string);
1578     break;
1580   case 78:
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());
1587     break;
1589   case 79:
1591     {
1592         menu_end_entry();
1594     break;
1596   case 80:
1598     {
1599         printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
1600         zconf_starthelp();
1602     break;
1604   case 81:
1606     {
1607         current_entry->sym->help = yyvsp[0].string;
1609     break;
1611   case 86:
1613     {
1614         menu_add_dep(yyvsp[-1].expr);
1615         printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
1617     break;
1619   case 87:
1621     {
1622         menu_add_dep(yyvsp[-1].expr);
1623         printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno());
1625     break;
1627   case 88:
1629     {
1630         menu_add_dep(yyvsp[-1].expr);
1631         printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno());
1633     break;
1635   case 90:
1637     {
1638         menu_add_prompt(P_PROMPT, yyvsp[-1].string, yyvsp[0].expr);
1640     break;
1642   case 93:
1644     { yyval.id = yyvsp[-1].id; ;}
1645     break;
1647   case 94:
1649     { yyval.id = yyvsp[-1].id; ;}
1650     break;
1652   case 95:
1654     { yyval.id = yyvsp[-1].id; ;}
1655     break;
1657   case 98:
1659     { yyval.expr = NULL; ;}
1660     break;
1662   case 99:
1664     { yyval.expr = yyvsp[0].expr; ;}
1665     break;
1667   case 100:
1669     { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); ;}
1670     break;
1672   case 101:
1674     { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
1675     break;
1677   case 102:
1679     { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
1680     break;
1682   case 103:
1684     { yyval.expr = yyvsp[-1].expr; ;}
1685     break;
1687   case 104:
1689     { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); ;}
1690     break;
1692   case 105:
1694     { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); ;}
1695     break;
1697   case 106:
1699     { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); ;}
1700     break;
1702   case 107:
1704     { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;}
1705     break;
1707   case 108:
1709     { yyval.symbol = sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); ;}
1710     break;
1713     }
1715 /* Line 1010 of yacc.c.  */
1718   yyvsp -= yylen;
1719   yyssp -= yylen;
1722   YY_STACK_PRINT (yyss, yyssp);
1724   *++yyvsp = yyval;
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.  */
1731   yyn = yyr1[yyn];
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];
1739   goto yynewstate;
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];
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;
1761           /* Start YYX at -YYN if negative to avoid negative indexes in
1762              YYCHECK.  */
1763           int yyxbegin = yyn < 0 ? -yyn : 0;
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;
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]);
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     }
1814   if (yyerrstatus == 3)
1815     {
1816       /* If just tried and failed to reuse lookahead token after an
1817          error, discard it.  */
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;
1839         }
1840     }
1842   /* Else will try to reuse lookahead token after shifting the error
1843      token.  */
1844   goto yyerrlab1;
1847 /*---------------------------------------------------.
1848 | yyerrorlab -- error raised explicitly by YYERROR.  |
1849 `---------------------------------------------------*/
1850 yyerrorlab:
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
1859   yyvsp -= yylen;
1860   yyssp -= yylen;
1861   yystate = *yyssp;
1862   goto yyerrlab1;
1865 /*-------------------------------------------------------------.
1866 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
1867 `-------------------------------------------------------------*/
1868 yyerrlab1:
1869   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
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         }
1885       /* Pop the current state because it cannot handle the error token.  */
1886       if (yyssp == yyss)
1887         YYABORT;
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     }
1896   if (yyn == YYFINAL)
1897     YYACCEPT;
1899   YYDPRINTF ((stderr, "Shifting error token, "));
1901   *++yyvsp = yylval;
1904   yystate = yyn;
1905   goto yynewstate;
1908 /*-------------------------------------.
1909 | yyacceptlab -- YYACCEPT comes here.  |
1910 `-------------------------------------*/
1911 yyacceptlab:
1912   yyresult = 0;
1913   goto yyreturn;
1915 /*-----------------------------------.
1916 | yyabortlab -- YYABORT comes here.  |
1917 `-----------------------------------*/
1918 yyabortlab:
1919   yyresult = 1;
1920   goto yyreturn;
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
1932 yyreturn:
1933 #ifndef yyoverflow
1934   if (yyss != yyssa)
1935     YYSTACK_FREE (yyss);
1936 #endif
1937   return yyresult;
1944 void conf_parse(const char *name)
1946         struct symbol *sym;
1947         int i;
1949         zconf_initscan(name);
1951         sym_init();
1952         menu_init();
1953         modules_sym = sym_lookup("MODULES", 0);
1954         rootmenu.prompt = menu_add_prompt(P_MENU, "OpenWrt Configuration", NULL);
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         }
1968         sym_change_count = 1;
1971 const char *zconf_tokenname(int token)
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>";
1985 static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
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;
2005 static void zconfprint(const char *err, ...)
2007         va_list ap;
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");
2016 static void zconf_error(const char *err, ...)
2018         va_list ap;
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");
2028 static void zconferror(const char *err)
2030 #if YYDEBUG
2031         fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
2032 #endif
2035 void print_quoted_string(FILE *out, const char *str)
2037         const char *p;
2038         int len;
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);
2052 void print_symbol(FILE *out, struct menu *menu)
2054         struct symbol *sym = menu->sym;
2055         struct property *prop;
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);
2120 void zconfdump(FILE *out)
2122         struct property *prop;
2123         struct symbol *sym;
2124         struct menu *menu;
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                 }
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         }
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"