OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [scripts/] [kconfig/] [zconf.tab.c_shipped] - Blame information for rev 62

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.