kconfig/zconf.tab.c_shipped
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 13 10:32:38 2008 +0000 (2008-07-13)
changeset 645 8e58024f8e37
parent 1 eeea35fbf182
permissions -rw-r--r--
Ioannis E. VENETIS <venetis@mail.capsl.udel.edu> pointed out that GMP and MPFR were not used by gcc.
Turned out that none could use GMP and MPFR as the config option changed its name, but the change was not propagated to all users.

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