Linux Audio

Check our new training course

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