/* A Bison parser, made from rcparse.y
   by GNU bison 1.35.  */

#define YYBISON 1  /* Identify Bison output.  */

# define	BEG	257
# define	END	258
# define	ACCELERATORS	259
# define	VIRTKEY	260
# define	ASCII	261
# define	NOINVERT	262
# define	SHIFT	263
# define	CONTROL	264
# define	ALT	265
# define	BITMAP	266
# define	CURSOR	267
# define	DIALOG	268
# define	DIALOGEX	269
# define	EXSTYLE	270
# define	CAPTION	271
# define	CLASS	272
# define	STYLE	273
# define	AUTO3STATE	274
# define	AUTOCHECKBOX	275
# define	AUTORADIOBUTTON	276
# define	CHECKBOX	277
# define	COMBOBOX	278
# define	CTEXT	279
# define	DEFPUSHBUTTON	280
# define	EDITTEXT	281
# define	GROUPBOX	282
# define	LISTBOX	283
# define	LTEXT	284
# define	PUSHBOX	285
# define	PUSHBUTTON	286
# define	RADIOBUTTON	287
# define	RTEXT	288
# define	SCROLLBAR	289
# define	STATE3	290
# define	USERBUTTON	291
# define	BEDIT	292
# define	HEDIT	293
# define	IEDIT	294
# define	FONT	295
# define	ICON	296
# define	LANGUAGE	297
# define	CHARACTERISTICS	298
# define	VERSIONK	299
# define	MENU	300
# define	MENUEX	301
# define	MENUITEM	302
# define	SEPARATOR	303
# define	POPUP	304
# define	CHECKED	305
# define	GRAYED	306
# define	HELP	307
# define	INACTIVE	308
# define	MENUBARBREAK	309
# define	MENUBREAK	310
# define	MESSAGETABLE	311
# define	RCDATA	312
# define	STRINGTABLE	313
# define	VERSIONINFO	314
# define	FILEVERSION	315
# define	PRODUCTVERSION	316
# define	FILEFLAGSMASK	317
# define	FILEFLAGS	318
# define	FILEOS	319
# define	FILETYPE	320
# define	FILESUBTYPE	321
# define	BLOCKSTRINGFILEINFO	322
# define	BLOCKVARFILEINFO	323
# define	VALUE	324
# define	BLOCK	325
# define	MOVEABLE	326
# define	FIXED	327
# define	PURE	328
# define	IMPURE	329
# define	PRELOAD	330
# define	LOADONCALL	331
# define	DISCARDABLE	332
# define	NOT	333
# define	QUOTEDSTRING	334
# define	STRING	335
# define	NUMBER	336
# define	SIZEDSTRING	337
# define	IGNORED_TOKEN	338
# define	NEG	339

#line 1 "rcparse.y"
 /* rcparse.y -- parser for Windows rc files
   Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
   Written by Ian Lance Taylor, Cygnus Support.

   This file is part of GNU Binutils.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.  */

/* This is a parser for Windows rc files.  It is based on the parser
   by Gunther Ebert <gunther.ebert@ixos-leipzig.de>.  */

#include "bfd.h"
#include "bucomm.h"
#include "libiberty.h"
#include "windres.h"
#include "safe-ctype.h"

/* The current language.  */

static unsigned short language;

/* The resource information during a sub statement.  */

static struct res_res_info sub_res_info;

/* Dialog information.  This is built by the nonterminals styles and
   controls.  */

static struct dialog dialog;

/* This is used when building a style.  It is modified by the
   nonterminal styleexpr.  */

static unsigned long style;

/* These are used when building a control.  They are set before using
   control_params.  */

static unsigned long base_style;
static unsigned long default_style;
static unsigned long class;


#line 58 "rcparse.y"
#ifndef YYSTYPE
typedef union
{
  struct accelerator acc;
  struct accelerator *pacc;
  struct dialog_control *dialog_control;
  struct menuitem *menuitem;
  struct
  {
    struct rcdata_item *first;
    struct rcdata_item *last;
  } rcdata;
  struct rcdata_item *rcdata_item;
  struct stringtable_data *stringtable;
  struct fixed_versioninfo *fixver;
  struct ver_info *verinfo;
  struct ver_stringinfo *verstring;
  struct ver_varinfo *vervar;
  struct res_id id;
  struct res_res_info res_info;
  struct
  {
    unsigned short on;
    unsigned short off;
  } memflags;
  struct
  {
    unsigned long val;
    /* Nonzero if this number was explicitly specified as long.  */
    int dword;
  } i;
  unsigned long il;
  unsigned short is;
  const char *s;
  struct
  {
    unsigned long length;
    const char *s;
  } ss;
} yystype;
# define YYSTYPE yystype
# define YYSTYPE_IS_TRIVIAL 1
#endif
#ifndef YYDEBUG
# define YYDEBUG 0
#endif



#define	YYFINAL		483
#define	YYFLAG		-32768
#define	YYNTBASE	99

/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
#define YYTRANSLATE(x) ((unsigned)(x) <= 339 ? yytranslate[x] : 189)

/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
static const char yytranslate[] =
{
       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,    92,    87,     2,
      97,    98,    90,    88,    95,    89,     2,    91,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,    96,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,    86,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,    85,     2,    93,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     1,     3,     4,     5,
       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
      76,    77,    78,    79,    80,    81,    82,    83,    84,    94
};

#if YYDEBUG
static const short yyprhs[] =
{
       0,     0,     1,     4,     7,    10,    13,    16,    19,    22,
      25,    28,    31,    34,    37,    40,    43,    46,    53,    54,
      57,    60,    65,    67,    69,    71,    75,    78,    80,    82,
      84,    86,    88,    90,    95,   100,   101,   115,   116,   130,
     131,   146,   147,   151,   152,   156,   160,   164,   168,   172,
     178,   185,   193,   202,   206,   210,   215,   219,   220,   223,
     224,   228,   229,   233,   234,   238,   239,   243,   244,   248,
     249,   253,   265,   278,   291,   305,   306,   310,   311,   315,
     316,   320,   321,   325,   326,   330,   337,   346,   357,   369,
     370,   374,   375,   379,   380,   384,   385,   389,   390,   394,
     395,   399,   400,   404,   405,   409,   410,   414,   415,   432,
     440,   450,   461,   462,   464,   467,   468,   472,   473,   477,
     478,   482,   483,   487,   492,   497,   501,   508,   509,   512,
     517,   520,   527,   528,   532,   535,   537,   539,   541,   543,
     545,   547,   554,   555,   558,   561,   565,   571,   574,   580,
     587,   595,   605,   610,   617,   618,   621,   622,   624,   626,
     628,   632,   636,   637,   644,   645,   649,   654,   661,   666,
     673,   674,   681,   688,   692,   696,   700,   704,   708,   709,
     718,   726,   727,   733,   734,   738,   740,   742,   744,   747,
     750,   753,   755,   756,   759,   763,   768,   772,   773,   776,
     777,   780,   782,   784,   786,   788,   790,   792,   794,   796,
     798,   800,   803,   807,   812,   814,   818,   819,   821,   824,
     826,   828,   832,   835,   838,   842,   846,   850,   854,   858,
     862,   866,   870,   873,   875,   877,   881,   884,   888,   892,
     896,   900,   904,   908,   912
};
static const short yyrhs[] =
{
      -1,    99,   100,     0,    99,   106,     0,    99,   107,     0,
      99,   108,     0,    99,   146,     0,    99,   147,     0,    99,
     148,     0,    99,   149,     0,    99,   154,     0,    99,   157,
       0,    99,   158,     0,    99,   163,     0,    99,   166,     0,
      99,   167,     0,    99,    84,     0,   172,     5,   175,     3,
     101,     4,     0,     0,   101,   102,     0,   103,   186,     0,
     103,   186,    95,   104,     0,    80,     0,   187,     0,   105,
       0,   104,    95,   105,     0,   104,   105,     0,     6,     0,
       7,     0,     8,     0,     9,     0,    10,     0,    11,     0,
     172,    12,   177,   179,     0,   172,    13,   176,   179,     0,
       0,   172,    14,   177,   112,   187,   183,   183,   183,   109,
     113,     3,   114,     4,     0,     0,   172,    15,   177,   112,
     187,   183,   183,   183,   110,   113,     3,   114,     4,     0,
       0,   172,    15,   177,   112,   187,   183,   183,   183,   183,
     111,   113,     3,   114,     4,     0,     0,    16,    96,   184,
       0,     0,   113,    17,    80,     0,   113,    18,   172,     0,
     113,    19,   180,     0,   113,    16,   184,     0,   113,    18,
      80,     0,   113,    41,   184,    95,    80,     0,   113,    41,
     184,    95,    80,   183,     0,   113,    41,   184,    95,    80,
     183,   183,     0,   113,    41,   184,    95,    80,   183,   183,
     183,     0,   113,    46,   172,     0,   113,    44,   184,     0,
     113,    43,   184,   183,     0,   113,    45,   184,     0,     0,
     114,   115,     0,     0,    20,   116,   137,     0,     0,    21,
     117,   137,     0,     0,    22,   118,   137,     0,     0,    38,
     119,   137,     0,     0,    23,   120,   137,     0,     0,    24,
     121,   137,     0,    10,   138,   184,   183,   140,   183,   183,
     183,   183,   182,   139,     0,    10,   138,   184,   183,   140,
     183,   183,   183,   183,   183,   183,   139,     0,    10,   138,
     184,    95,    80,   140,   183,   183,   183,   183,   182,   139,
       0,    10,   138,   184,    95,    80,   140,   183,   183,   183,
     183,   183,   183,   139,     0,     0,    25,   122,   137,     0,
       0,    26,   123,   137,     0,     0,    27,   124,   137,     0,
       0,    28,   125,   137,     0,     0,    39,   126,   137,     0,
      42,   174,   184,   183,   183,   139,     0,    42,   174,   184,
     183,   183,   183,   183,   139,     0,    42,   174,   184,   183,
     183,   183,   183,   142,   182,   139,     0,    42,   174,   184,
     183,   183,   183,   183,   142,   183,   183,   139,     0,     0,
      40,   127,   137,     0,     0,    29,   128,   137,     0,     0,
      30,   129,   137,     0,     0,    31,   130,   137,     0,     0,
      32,   131,   137,     0,     0,    33,   132,   137,     0,     0,
      34,   133,   137,     0,     0,    35,   134,   137,     0,     0,
      36,   135,   137,     0,     0,    37,    80,    95,   184,    95,
     184,    95,   184,    95,   184,    95,   184,    95,   136,   180,
     182,     0,   138,   184,   183,   183,   183,   183,   139,     0,
     138,   184,   183,   183,   183,   183,   144,   182,   139,     0,
     138,   184,   183,   183,   183,   183,   144,   183,   183,   139,
       0,     0,    80,     0,    80,    95,     0,     0,     3,   159,
       4,     0,     0,    95,   141,   180,     0,     0,    95,   143,
     180,     0,     0,    95,   145,   180,     0,   172,    41,   176,
     179,     0,   172,    42,   176,   179,     0,    43,   184,   183,
       0,   172,    46,   175,     3,   150,     4,     0,     0,   150,
     151,     0,    48,    80,   183,   152,     0,    48,    49,     0,
      50,    80,   152,     3,   150,     4,     0,     0,   152,    95,
     153,     0,   152,   153,     0,    51,     0,    52,     0,    53,
       0,    54,     0,    55,     0,    56,     0,   172,    47,   175,
       3,   155,     4,     0,     0,   155,   156,     0,    48,    80,
       0,    48,    80,   183,     0,    48,    80,   183,   183,   182,
       0,    48,    49,     0,    50,    80,     3,   155,     4,     0,
      50,    80,   183,     3,   155,     4,     0,    50,    80,   183,
     183,     3,   155,     4,     0,    50,    80,   183,   183,   183,
     182,     3,   155,     4,     0,   172,    57,   177,   179,     0,
     172,    58,   175,     3,   159,     4,     0,     0,   160,   161,
       0,     0,   162,     0,    83,     0,   185,     0,   162,    95,
      83,     0,   162,    95,   185,     0,     0,    59,   175,     3,
     164,   165,     4,     0,     0,   165,   184,    80,     0,   165,
     184,    95,    80,     0,   172,   172,   175,     3,   159,     4,
       0,   172,   172,   175,   179,     0,   172,    60,   168,     3,
     169,     4,     0,     0,   168,    61,   184,   183,   183,   183,
       0,   168,    62,   184,   183,   183,   183,     0,   168,    63,
     184,     0,   168,    64,   184,     0,   168,    65,   184,     0,
     168,    66,   184,     0,   168,    67,   184,     0,     0,   169,
      68,     3,    71,     3,   170,     4,     4,     0,   169,    69,
       3,    70,    80,   171,     4,     0,     0,   170,    70,    80,
      95,    80,     0,     0,   171,   183,   183,     0,   187,     0,
      81,     0,    80,     0,    80,    95,     0,    81,    95,     0,
     187,    95,     0,   173,     0,     0,   175,   178,     0,   175,
      44,   184,     0,   175,    43,   184,   183,     0,   175,    45,
     184,     0,     0,   176,   178,     0,     0,   177,   178,     0,
      72,     0,    73,     0,    74,     0,    75,     0,    76,     0,
      77,     0,    78,     0,    80,     0,    81,     0,   181,     0,
      79,   181,     0,   180,    85,   181,     0,   180,    85,    79,
     181,     0,    82,     0,    97,   184,    98,     0,     0,   183,
       0,    95,   184,     0,   185,     0,    82,     0,    97,   185,
      98,     0,    93,   185,     0,    89,   185,     0,   185,    90,
     185,     0,   185,    91,   185,     0,   185,    92,   185,     0,
     185,    88,   185,     0,   185,    89,   185,     0,   185,    87,
     185,     0,   185,    86,   185,     0,   185,    85,   185,     0,
      95,   187,     0,   188,     0,    82,     0,    97,   185,    98,
       0,    93,   185,     0,   188,    90,   185,     0,   188,    91,
     185,     0,   188,    92,   185,     0,   188,    88,   185,     0,
     188,    89,   185,     0,   188,    87,   185,     0,   188,    86,
     185,     0,   188,    85,   185,     0
};

#endif

#if YYDEBUG
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const short yyrline[] =
{
       0,   154,   156,   157,   158,   159,   160,   161,   162,   163,
     164,   165,   166,   167,   168,   169,   170,   175,   185,   190,
     210,   216,   227,   249,   258,   263,   268,   274,   279,   284,
     288,   292,   296,   304,   316,   328,   328,   354,   354,   381,
     381,   411,   416,   422,   424,   430,   434,   439,   443,   447,
     460,   475,   490,   505,   509,   513,   517,   523,   525,   535,
     535,   546,   546,   556,   556,   566,   566,   579,   579,   589,
     589,   599,   610,   619,   632,   643,   643,   653,   653,   663,
     663,   673,   673,   683,   683,   696,   701,   707,   713,   719,
     719,   732,   732,   742,   742,   752,   752,   762,   762,   772,
     772,   782,   782,   792,   792,   802,   802,   812,   812,   829,
     842,   853,   864,   869,   873,   879,   884,   892,   892,   898,
     898,   904,   904,   912,   924,   937,   946,   956,   961,   977,
     982,   986,   992,   997,  1001,  1007,  1012,  1016,  1020,  1024,
    1028,  1036,  1046,  1051,  1067,  1072,  1076,  1080,  1084,  1088,
    1092,  1096,  1105,  1117,  1130,  1130,  1141,  1147,  1153,  1162,
    1170,  1179,  1192,  1192,  1198,  1200,  1207,  1219,  1227,  1238,
    1248,  1255,  1261,  1267,  1272,  1277,  1282,  1287,  1300,  1305,
    1309,  1315,  1320,  1326,  1331,  1339,  1345,  1360,  1365,  1369,
    1376,  1382,  1398,  1406,  1412,  1417,  1422,  1431,  1438,  1448,
    1455,  1466,  1472,  1477,  1482,  1487,  1492,  1497,  1506,  1511,
    1527,  1532,  1536,  1540,  1546,  1551,  1559,  1564,  1572,  1581,
    1590,  1595,  1599,  1604,  1609,  1614,  1619,  1624,  1629,  1634,
    1639,  1644,  1654,  1663,  1674,  1679,  1683,  1688,  1693,  1698,
    1703,  1708,  1713,  1718,  1723
};
#endif


#if (YYDEBUG) || defined YYERROR_VERBOSE

/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
static const char *const yytname[] =
{
  "$", "error", "$undefined.", "BEG", "END", "ACCELERATORS", "VIRTKEY", 
  "ASCII", "NOINVERT", "SHIFT", "CONTROL", "ALT", "BITMAP", "CURSOR", 
  "DIALOG", "DIALOGEX", "EXSTYLE", "CAPTION", "CLASS", "STYLE", 
  "AUTO3STATE", "AUTOCHECKBOX", "AUTORADIOBUTTON", "CHECKBOX", "COMBOBOX", 
  "CTEXT", "DEFPUSHBUTTON", "EDITTEXT", "GROUPBOX", "LISTBOX", "LTEXT", 
  "PUSHBOX", "PUSHBUTTON", "RADIOBUTTON", "RTEXT", "SCROLLBAR", "STATE3", 
  "USERBUTTON", "BEDIT", "HEDIT", "IEDIT", "FONT", "ICON", "LANGUAGE", 
  "CHARACTERISTICS", "VERSIONK", "MENU", "MENUEX", "MENUITEM", 
  "SEPARATOR", "POPUP", "CHECKED", "GRAYED", "HELP", "INACTIVE", 
  "MENUBARBREAK", "MENUBREAK", "MESSAGETABLE", "RCDATA", "STRINGTABLE", 
  "VERSIONINFO", "FILEVERSION", "PRODUCTVERSION", "FILEFLAGSMASK", 
  "FILEFLAGS", "FILEOS", "FILETYPE", "FILESUBTYPE", "BLOCKSTRINGFILEINFO", 
  "BLOCKVARFILEINFO", "VALUE", "BLOCK", "MOVEABLE", "FIXED", "PURE", 
  "IMPURE", "PRELOAD", "LOADONCALL", "DISCARDABLE", "NOT", "QUOTEDSTRING", 
  "STRING", "NUMBER", "SIZEDSTRING", "IGNORED_TOKEN", "'|'", "'^'", "'&'", 
  "'+'", "'-'", "'*'", "'/'", "'%'", "'~'", "NEG", "','", "'='", "'('", 
  "')'", "input", "accelerator", "acc_entries", "acc_entry", "acc_event", 
  "acc_options", "acc_option", "bitmap", "cursor", "dialog", "@1", "@2", 
  "@3", "exstyle", "styles", "controls", "control", "@4", "@5", "@6", 
  "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", 
  "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", 
  "control_params", "optstringc", "opt_control_data", "control_styleexpr", 
  "@25", "icon_styleexpr", "@26", "control_params_styleexpr", "@27", 
  "font", "icon", "language", "menu", "menuitems", "menuitem", 
  "menuitem_flags", "menuitem_flag", "menuex", "menuexitems", 
  "menuexitem", "messagetable", "rcdata", "optrcdata_data", "@28", 
  "optrcdata_data_int", "rcdata_data", "stringtable", "@29", 
  "string_data", "user", "versioninfo", "fixedverinfo", "verblocks", 
  "vervals", "vertrans", "id", "resname", "resref", "suboptions", 
  "memflags_move_discard", "memflags_move", "memflag", "file_name", 
  "styleexpr", "parennumber", "optcnumexpr", "cnumexpr", "numexpr", 
  "sizednumexpr", "cposnumexpr", "posnumexpr", "sizedposnumexpr", 0
};
#endif

/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const short yyr1[] =
{
       0,    99,    99,    99,    99,    99,    99,    99,    99,    99,
      99,    99,    99,    99,    99,    99,    99,   100,   101,   101,
     102,   102,   103,   103,   104,   104,   104,   105,   105,   105,
     105,   105,   105,   106,   107,   109,   108,   110,   108,   111,
     108,   112,   112,   113,   113,   113,   113,   113,   113,   113,
     113,   113,   113,   113,   113,   113,   113,   114,   114,   116,
     115,   117,   115,   118,   115,   119,   115,   120,   115,   121,
     115,   115,   115,   115,   115,   122,   115,   123,   115,   124,
     115,   125,   115,   126,   115,   115,   115,   115,   115,   127,
     115,   128,   115,   129,   115,   130,   115,   131,   115,   132,
     115,   133,   115,   134,   115,   135,   115,   136,   115,   137,
     137,   137,   138,   138,   138,   139,   139,   141,   140,   143,
     142,   145,   144,   146,   147,   148,   149,   150,   150,   151,
     151,   151,   152,   152,   152,   153,   153,   153,   153,   153,
     153,   154,   155,   155,   156,   156,   156,   156,   156,   156,
     156,   156,   157,   158,   160,   159,   161,   161,   162,   162,
     162,   162,   164,   163,   165,   165,   165,   166,   166,   167,
     168,   168,   168,   168,   168,   168,   168,   168,   169,   169,
     169,   170,   170,   171,   171,   172,   172,   173,   173,   173,
     174,   174,   175,   175,   175,   175,   175,   176,   176,   177,
     177,   178,   178,   178,   178,   178,   178,   178,   179,   179,
     180,   180,   180,   180,   181,   181,   182,   182,   183,   184,
     185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
     185,   185,   186,   187,   188,   188,   188,   188,   188,   188,
     188,   188,   188,   188,   188
};

/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
static const short yyr2[] =
{
       0,     0,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     6,     0,     2,
       2,     4,     1,     1,     1,     3,     2,     1,     1,     1,
       1,     1,     1,     4,     4,     0,    13,     0,    13,     0,
      14,     0,     3,     0,     3,     3,     3,     3,     3,     5,
       6,     7,     8,     3,     3,     4,     3,     0,     2,     0,
       3,     0,     3,     0,     3,     0,     3,     0,     3,     0,
       3,    11,    12,    12,    13,     0,     3,     0,     3,     0,
       3,     0,     3,     0,     3,     6,     8,    10,    11,     0,
       3,     0,     3,     0,     3,     0,     3,     0,     3,     0,
       3,     0,     3,     0,     3,     0,     3,     0,    16,     7,
       9,    10,     0,     1,     2,     0,     3,     0,     3,     0,
       3,     0,     3,     4,     4,     3,     6,     0,     2,     4,
       2,     6,     0,     3,     2,     1,     1,     1,     1,     1,
       1,     6,     0,     2,     2,     3,     5,     2,     5,     6,
       7,     9,     4,     6,     0,     2,     0,     1,     1,     1,
       3,     3,     0,     6,     0,     3,     4,     6,     4,     6,
       0,     6,     6,     3,     3,     3,     3,     3,     0,     8,
       7,     0,     5,     0,     3,     1,     1,     1,     2,     2,
       2,     1,     0,     2,     3,     4,     3,     0,     2,     0,
       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
       1,     2,     3,     4,     1,     3,     0,     1,     2,     1,
       1,     3,     2,     2,     3,     3,     3,     3,     3,     3,
       3,     3,     2,     1,     1,     3,     2,     3,     3,     3,
       3,     3,     3,     3,     3
};

/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
   doesn't specify something else to do.  Zero means the default is an
   error. */
static const short yydefact[] =
{
       1,     0,     0,   192,   186,   234,    16,     0,     0,     2,
       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
      13,    14,    15,     0,   185,   233,   220,     0,     0,     0,
       0,   219,     0,   236,     0,   192,   199,   197,   199,   199,
     197,   197,   192,   192,   199,   192,   170,   192,     0,     0,
       0,     0,     0,     0,     0,     0,   223,   222,     0,     0,
     125,     0,     0,     0,     0,     0,     0,     0,     0,   162,
       0,     0,     0,   201,   202,   203,   204,   205,   206,   207,
     193,   235,     0,     0,     0,    41,    41,     0,     0,     0,
       0,     0,     0,     0,     0,   244,   243,   242,   240,   241,
     237,   238,   239,   221,   218,   231,   230,   229,   227,   228,
     224,   225,   226,   164,     0,   194,   196,    18,   208,   209,
     200,    33,   198,    34,     0,     0,     0,   123,   124,   127,
     142,   152,   154,   178,     0,     0,     0,     0,     0,     0,
       0,   154,   168,     0,   195,     0,     0,     0,     0,     0,
       0,     0,   156,     0,     0,     0,   173,   174,   175,   176,
     177,     0,   163,     0,    17,    22,    19,     0,    23,    42,
       0,     0,   126,     0,     0,   128,   141,     0,     0,   143,
     153,   158,   155,   157,   159,   169,     0,     0,     0,     0,
     167,   165,     0,     0,    20,     0,     0,   130,     0,   132,
     147,   144,     0,     0,     0,     0,     0,     0,   166,   232,
       0,    35,    37,   132,     0,   145,   142,     0,   160,   161,
       0,     0,   171,   172,    27,    28,    29,    30,    31,    32,
      21,    24,    43,    43,    39,   129,   127,   135,   136,   137,
     138,   139,   140,     0,   134,   216,     0,   142,     0,   181,
     183,     0,    26,     0,     0,    43,     0,   133,   146,   217,
     148,     0,   142,   216,     0,     0,    25,    57,     0,     0,
       0,     0,     0,     0,     0,     0,     0,    57,     0,   131,
     149,     0,     0,     0,     0,   180,     0,     0,    47,    44,
      48,    45,     0,   214,     0,    46,   210,     0,     0,    54,
      56,    53,     0,    57,   150,   142,   179,     0,   184,    36,
     112,    59,    61,    63,    67,    69,    75,    77,    79,    81,
      91,    93,    95,    97,    99,   101,   103,   105,     0,    65,
      83,    89,     0,    58,   211,     0,     0,     0,    55,    38,
       0,     0,     0,   113,     0,   112,   112,   112,   112,   112,
     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
     112,   112,     0,   112,   112,   112,   187,     0,   191,     0,
       0,   215,     0,   212,    49,    40,   151,   182,   114,     0,
      60,     0,    62,    64,    68,    70,    76,    78,    80,    82,
      92,    94,    96,    98,   100,   102,   104,   106,     0,    66,
      84,    90,   188,   189,     0,   190,   213,    50,     0,     0,
       0,     0,     0,    51,     0,   117,     0,     0,     0,   115,
      52,     0,     0,     0,     0,     0,   154,    85,     0,     0,
     118,     0,     0,     0,     0,   115,     0,     0,   115,     0,
     116,   119,    86,   216,     0,   216,   121,   109,   216,     0,
       0,   115,   217,   216,   115,   217,     0,   115,   217,     0,
     120,    87,   115,   115,   217,    71,   115,   122,   110,   115,
       0,    88,    73,   115,    72,   111,     0,    74,   107,     0,
     216,   108,     0,     0
};

static const short yydefgoto[] =
{
       1,     9,   145,   166,   167,   230,   231,    10,    11,    12,
     232,   233,   255,   125,   253,   287,   333,   345,   346,   347,
     363,   348,   349,   350,   351,   352,   353,   364,   365,   354,
     355,   356,   357,   358,   359,   360,   361,   479,   380,   381,
     427,   416,   422,   443,   450,   448,   456,    13,    14,    15,
      16,   149,   175,   214,   244,    17,   150,   179,    18,    19,
     151,   152,   182,   183,    20,   113,   143,    21,    22,    93,
     153,   264,   265,    23,   368,   369,    32,    84,    83,    80,
     121,   295,   296,   258,   259,   104,    31,   194,    24,    25
};

static const short yypact[] =
{
  -32768,    13,   412,-32768,-32768,-32768,-32768,   412,   412,-32768,
  -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,   111,-32768,   511,-32768,   412,   412,   412,
     -79,   600,   244,-32768,   562,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   412,   412,
     412,   412,   412,   412,   412,   412,-32768,-32768,   576,   412,
  -32768,   412,   412,   412,   412,   412,   412,   412,   412,-32768,
     412,   412,   412,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,   256,   603,   603,   297,   297,   603,   603,   280,
     337,   603,   345,   100,   231,   607,   613,   567,   172,   172,
  -32768,-32768,-32768,-32768,-32768,   607,   613,   567,   172,   172,
  -32768,-32768,-32768,-32768,   -79,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,   -60,    63,    63,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,   412,   412,   412,   412,   412,   412,
     412,-32768,-32768,     7,-32768,     5,   412,   -79,   -79,    33,
      34,    35,   254,    51,   -79,   -79,-32768,-32768,-32768,-32768,
  -32768,    36,-32768,    60,-32768,-32768,-32768,   -38,-32768,-32768,
     -79,   -79,-32768,   -39,    11,-32768,-32768,    59,    25,-32768,
  -32768,-32768,-32768,    27,   600,-32768,   127,   144,   -79,   -79,
  -32768,-32768,    74,    63,    87,   -79,   -79,-32768,   -79,-32768,
  -32768,   -79,    12,   294,   118,   128,   -79,   -79,-32768,-32768,
     700,-32768,   -79,-32768,    22,   -79,-32768,    14,-32768,   600,
     194,   121,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
      23,-32768,-32768,-32768,-32768,   309,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,   661,-32768,   -79,    38,-32768,    16,-32768,
  -32768,   700,-32768,   383,   472,-32768,    42,-32768,-32768,-32768,
  -32768,   124,-32768,   -79,    10,     4,-32768,-32768,   412,   126,
     187,    99,   412,   412,   412,   412,   200,-32768,   480,-32768,
  -32768,   125,   204,   207,   135,-32768,   -79,   510,-32768,-32768,
  -32768,-32768,    49,-32768,   412,   136,-32768,   133,   -79,-32768,
  -32768,-32768,   547,-32768,-32768,-32768,-32768,   134,-32768,-32768,
     152,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   153,-32768,
  -32768,-32768,   374,-32768,-32768,   140,   112,   157,-32768,-32768,
     584,   138,   160,   148,   412,   152,   152,   152,   152,   152,
     152,   152,   152,   152,   152,   152,   152,   152,   152,   152,
     152,   152,   158,   152,   152,   152,   161,   163,-32768,   412,
     165,-32768,    49,-32768,   -79,-32768,-32768,-32768,-32768,   170,
  -32768,   412,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   412,-32768,
  -32768,-32768,-32768,-32768,   -79,-32768,-32768,   -79,   123,   183,
     -79,   184,   -79,   -79,   183,-32768,   -79,   -79,   412,    17,
  -32768,   -79,    99,   -79,   -79,   190,-32768,-32768,   -79,   -79,
     136,   -79,   -79,   412,   248,    18,   -79,   -79,    19,   195,
  -32768,-32768,-32768,   -79,   -79,   -79,-32768,-32768,   -79,   412,
      99,   245,   -79,   -79,   245,   -79,    99,   245,   -79,   196,
     136,-32768,   245,   245,   -79,-32768,   245,   136,-32768,   245,
     412,-32768,-32768,   245,-32768,-32768,   201,-32768,-32768,    99,
      64,-32768,   295,-32768
};

static const short yypgoto[] =
{
  -32768,-32768,-32768,-32768,-32768,-32768,  -206,-32768,-32768,-32768,
  -32768,-32768,-32768,   212,   -85,  -259,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   281,    -8,
    -212,  -104,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  -32768,    78,-32768,   113,    92,-32768,  -204,-32768,-32768,-32768,
    -140,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,   -21,-32768,-32768,   350,   139,   175,   475,
     416,  -329,  -257,  -258,    29,    -2,    -1,-32768,  -122,-32768
};


#define	YYLAST		717


static const short yytable[] =
{
      30,   161,    47,   147,   148,   282,    33,    34,   285,   164,
     197,   162,   246,   482,   283,   216,    59,   247,   302,   262,
     426,   426,   426,   168,   252,   236,    56,    57,    58,   224,
     225,   226,   227,   228,   229,   334,   146,   172,   176,   180,
     190,   198,   260,   261,   340,   266,   279,    95,    96,    97,
      98,    99,   100,   101,   102,   185,     2,   193,   281,    60,
     105,   106,   107,   108,   109,   110,   111,   112,   114,   115,
     116,   209,     3,   237,   238,   239,   240,   241,   242,   373,
     284,   173,   177,   174,   178,   165,   177,     5,   178,    26,
     173,   199,   174,   430,     4,     5,    27,     6,     7,    59,
      28,   341,     8,   133,    29,   202,     7,    59,   200,    59,
       8,    59,    59,   441,   446,   406,    35,   243,   251,   186,
     187,   460,   203,    36,    37,    38,    39,   467,   280,   304,
     204,   293,   154,   155,   156,   157,   158,   159,   160,   201,
     191,   163,   376,   144,   169,     5,   294,   205,   254,   336,
     480,   184,    40,    41,   208,   192,     7,    42,    43,    59,
       8,   134,   135,   136,   137,   138,   139,   140,    44,    45,
     278,    46,   177,   177,   178,   178,   170,   171,   292,    87,
      88,   293,   210,   188,   189,   451,   177,   454,   178,   220,
     457,   372,     4,     5,   293,   463,   294,   249,   221,   195,
     196,   250,   219,   414,     7,    26,   289,   305,     8,   294,
     370,   306,    27,    85,    86,   307,    28,   206,   207,    91,
      29,   336,   481,   442,   211,   212,   447,   213,   337,   342,
     215,   217,   343,   362,   141,   222,   223,   374,   371,   461,
     377,   234,   465,   378,   245,   468,   248,    69,   426,   291,
     471,   472,   440,   398,   474,   301,   402,   475,   403,   117,
     405,   477,    66,    67,    68,   408,   288,   290,     4,     5,
     297,   298,   299,   300,    70,    71,    72,   263,   415,   418,
       7,     4,     5,   129,     8,   433,   434,    70,    71,    72,
     449,   470,   335,     7,   286,   483,   478,     8,   126,    70,
      71,    72,   344,    73,    74,    75,    76,    77,    78,    79,
     421,   118,   119,   124,   256,   308,    73,    74,    75,    76,
      77,    78,    79,    70,    71,    72,   235,   338,    73,    74,
      75,    76,    77,    78,    79,   257,    26,   181,     0,     0,
     130,     0,   379,    27,     0,     0,     0,    28,   132,     0,
       0,    29,    73,    74,    75,    76,    77,    78,    79,     0,
     237,   238,   239,   240,   241,   242,     0,   404,     0,    73,
      74,    75,    76,    77,    78,    79,    26,   218,     0,   410,
      70,    71,    72,    27,     0,    82,   267,    28,    70,    71,
      72,    29,    89,    90,     0,    92,   411,    94,     0,   268,
     269,   270,   271,   407,   243,     0,     0,     0,   409,    73,
      74,    75,    76,    77,    78,    79,   425,    73,    74,    75,
      76,    77,    78,    79,   272,     0,   273,   274,   275,   276,
       0,   439,     0,   412,     0,     0,   413,     0,     0,   417,
       0,   419,   420,     0,     0,   423,   424,   459,   428,     0,
     429,     0,   431,   432,   366,   367,     5,   435,   436,     0,
     437,   438,     0,     0,     0,   444,   445,     7,   476,     0,
       0,     8,   452,   453,   455,   277,     0,   458,     0,     0,
       0,   462,   464,   303,   466,     0,     0,   469,   268,   269,
     270,   271,     0,   473,    26,     0,   268,   269,   270,   271,
     123,    27,     0,   127,   128,    28,     0,   131,     0,    29,
     142,     0,     0,   272,   309,   273,   274,   275,   276,     0,
     310,   272,     0,   273,   274,   275,   276,     0,     0,     0,
     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
     331,   339,   332,     0,     0,     0,     0,   310,   120,   122,
     120,   120,   122,   122,     0,     0,   120,   311,   312,   313,
     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
     324,   325,   326,   327,   328,   329,   330,   331,   375,   332,
       0,     0,     0,     0,   310,     0,    48,    49,    50,    51,
      52,    53,    54,    55,   311,   312,   313,   314,   315,   316,
     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
     327,   328,   329,   330,   331,     0,   332,   382,   383,   384,
     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
     395,   396,   397,     0,   399,   400,   401,    61,    62,    63,
      64,    65,    66,    67,    68,    64,    65,    66,    67,    68,
      81,    61,    62,    63,    64,    65,    66,    67,    68,     0,
       0,     0,     0,     0,   103,    73,    74,    75,    76,    77,
      78,    79,     0,   118,   119,    61,    62,    63,    64,    65,
      66,    67,    68,    62,    63,    64,    65,    66,    67,    68,
      63,    64,    65,    66,    67,    68,   224,   225,   226,   227,
     228,   229,   237,   238,   239,   240,   241,   242
};

static const short yycheck[] =
{
       2,   141,    23,   125,   126,   263,     7,     8,     4,     4,
      49,     4,   216,     0,     4,     3,    95,     3,   277,     3,
       3,     3,     3,   145,   230,     3,    27,    28,    29,     6,
       7,     8,     9,    10,    11,   292,    96,     4,     4,     4,
       4,    80,     4,   247,   303,   251,     4,    48,    49,    50,
      51,    52,    53,    54,    55,     4,    43,    95,   262,    30,
      61,    62,    63,    64,    65,    66,    67,    68,    70,    71,
      72,   193,    59,    51,    52,    53,    54,    55,    56,   336,
      70,    48,    48,    50,    50,    80,    48,    82,    50,    82,
      48,    80,    50,   422,    81,    82,    89,    84,    93,    95,
      93,   305,    97,     3,    97,    80,    93,    95,    49,    95,
      97,    95,    95,    95,    95,   372,     5,    95,    95,    68,
      69,   450,    95,    12,    13,    14,    15,   456,     4,     4,
       3,    82,   134,   135,   136,   137,   138,   139,   140,    80,
      80,   143,     4,   114,   146,    82,    97,     3,   233,    85,
     479,   152,    41,    42,    80,    95,    93,    46,    47,    95,
      97,    61,    62,    63,    64,    65,    66,    67,    57,    58,
     255,    60,    48,    48,    50,    50,   147,   148,    79,    40,
      41,    82,    95,   154,   155,   443,    48,   445,    50,    71,
     448,    79,    81,    82,    82,   453,    97,     3,    70,   170,
     171,    80,   203,    80,    93,    82,    80,     3,    97,    97,
     332,     4,    89,    38,    39,    80,    93,   188,   189,    44,
      97,    85,   480,   435,   195,   196,   438,   198,    95,    95,
     201,   202,    80,    80,     3,   206,   207,    80,    98,   451,
      80,   212,   454,    95,   215,   457,   217,     3,     3,   270,
     462,   463,     4,    95,   466,   276,    95,   469,    95,     3,
      95,   473,    90,    91,    92,    95,   268,    80,    81,    82,
     272,   273,   274,   275,    43,    44,    45,   248,    95,    95,
      93,    81,    82,     3,    97,    95,   426,    43,    44,    45,
      95,    95,   294,    93,   265,     0,    95,    97,    86,    43,
      44,    45,   310,    72,    73,    74,    75,    76,    77,    78,
     414,    80,    81,    16,   236,   286,    72,    73,    74,    75,
      76,    77,    78,    43,    44,    45,   213,   298,    72,    73,
      74,    75,    76,    77,    78,   243,    82,    83,    -1,    -1,
       3,    -1,   344,    89,    -1,    -1,    -1,    93,     3,    -1,
      -1,    97,    72,    73,    74,    75,    76,    77,    78,    -1,
      51,    52,    53,    54,    55,    56,    -1,   369,    -1,    72,
      73,    74,    75,    76,    77,    78,    82,    83,    -1,   381,
      43,    44,    45,    89,    -1,    35,     3,    93,    43,    44,
      45,    97,    42,    43,    -1,    45,   398,    47,    -1,    16,
      17,    18,    19,   374,    95,    -1,    -1,    -1,   379,    72,
      73,    74,    75,    76,    77,    78,   418,    72,    73,    74,
      75,    76,    77,    78,    41,    -1,    43,    44,    45,    46,
      -1,   433,    -1,   404,    -1,    -1,   407,    -1,    -1,   410,
      -1,   412,   413,    -1,    -1,   416,   417,   449,   419,    -1,
     421,    -1,   423,   424,    80,    81,    82,   428,   429,    -1,
     431,   432,    -1,    -1,    -1,   436,   437,    93,   470,    -1,
      -1,    97,   443,   444,   445,     3,    -1,   448,    -1,    -1,
      -1,   452,   453,     3,   455,    -1,    -1,   458,    16,    17,
      18,    19,    -1,   464,    82,    -1,    16,    17,    18,    19,
      84,    89,    -1,    87,    88,    93,    -1,    91,    -1,    97,
      94,    -1,    -1,    41,     4,    43,    44,    45,    46,    -1,
      10,    41,    -1,    43,    44,    45,    46,    -1,    -1,    -1,
      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
      40,     4,    42,    -1,    -1,    -1,    -1,    10,    83,    84,
      85,    86,    87,    88,    -1,    -1,    91,    20,    21,    22,
      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
      33,    34,    35,    36,    37,    38,    39,    40,     4,    42,
      -1,    -1,    -1,    -1,    10,    -1,    85,    86,    87,    88,
      89,    90,    91,    92,    20,    21,    22,    23,    24,    25,
      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
      36,    37,    38,    39,    40,    -1,    42,   346,   347,   348,
     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
     359,   360,   361,    -1,   363,   364,   365,    85,    86,    87,
      88,    89,    90,    91,    92,    88,    89,    90,    91,    92,
      98,    85,    86,    87,    88,    89,    90,    91,    92,    -1,
      -1,    -1,    -1,    -1,    98,    72,    73,    74,    75,    76,
      77,    78,    -1,    80,    81,    85,    86,    87,    88,    89,
      90,    91,    92,    86,    87,    88,    89,    90,    91,    92,
      87,    88,    89,    90,    91,    92,     6,     7,     8,     9,
      10,    11,    51,    52,    53,    54,    55,    56
};
/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
#line 3 "/usr/share/bison-1.35/bison.simple"

/* Skeleton output parser for bison,

   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
   Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  */

/* As a special exception, when this file is copied by Bison into a
   Bison output file, you may use that output file without restriction.
   This special exception was added by the Free Software Foundation
   in version 1.24 of Bison.  */

/* This is the parser code that is written into each bison parser when
   the %semantic_parser declaration is not specified in the grammar.
   It was written by Richard Stallman by simplifying the hairy parser
   used when %semantic_parser is specified.  */

/* All symbols defined below should begin with yy or YY, to avoid
   infringing on user name space.  This should be done even for local
   variables, as they might otherwise be expanded by user macros.
   There are some unavoidable exceptions within include files to
   define necessary library symbols; they are noted "INFRINGES ON
   USER NAME SPACE" below.  */

#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)

/* The parser invokes alloca or malloc; define the necessary symbols.  */

# if YYSTACK_USE_ALLOCA
#  define YYSTACK_ALLOC alloca
# else
#  ifndef YYSTACK_USE_ALLOCA
#   if defined (alloca) || defined (_ALLOCA_H)
#    define YYSTACK_ALLOC alloca
#   else
#    ifdef __GNUC__
#     define YYSTACK_ALLOC __builtin_alloca
#    endif
#   endif
#  endif
# endif

# ifdef YYSTACK_ALLOC
   /* Pacify GCC's `empty if-body' warning. */
#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
# else
#  if defined (__STDC__) || defined (__cplusplus)
#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
#   define YYSIZE_T size_t
#  endif
#  define YYSTACK_ALLOC malloc
#  define YYSTACK_FREE free
# endif
#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */


#if (! defined (yyoverflow) \
     && (! defined (__cplusplus) \
	 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))

/* A type that is properly aligned for any stack member.  */
union yyalloc
{
  short yyss;
  YYSTYPE yyvs;
# if YYLSP_NEEDED
  YYLTYPE yyls;
# endif
};

/* The size of the maximum gap between one aligned stack and the next.  */
# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)

/* The size of an array large to enough to hold all stacks, each with
   N elements.  */
# if YYLSP_NEEDED
#  define YYSTACK_BYTES(N) \
     ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))	\
      + 2 * YYSTACK_GAP_MAX)
# else
#  define YYSTACK_BYTES(N) \
     ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
      + YYSTACK_GAP_MAX)
# endif

/* Copy COUNT objects from FROM to TO.  The source and destination do
   not overlap.  */
# ifndef YYCOPY
#  if 1 < __GNUC__
#   define YYCOPY(To, From, Count) \
      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
#  else
#   define YYCOPY(To, From, Count)		\
      do					\
	{					\
	  register YYSIZE_T yyi;		\
	  for (yyi = 0; yyi < (Count); yyi++)	\
	    (To)[yyi] = (From)[yyi];		\
	}					\
      while (0)
#  endif
# endif

/* Relocate STACK from its old location to the new one.  The
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
   elements in the stack, and YYPTR gives the new location of the
   stack.  Advance YYPTR to a properly aligned location for the next
   stack.  */
# define YYSTACK_RELOCATE(Stack)					\
    do									\
      {									\
	YYSIZE_T yynewbytes;						\
	YYCOPY (&yyptr->Stack, Stack, yysize);				\
	Stack = &yyptr->Stack;						\
	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX;	\
	yyptr += yynewbytes / sizeof (*yyptr);				\
      }									\
    while (0)

#endif


#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
#endif
#if ! defined (YYSIZE_T) && defined (size_t)
# define YYSIZE_T size_t
#endif
#if ! defined (YYSIZE_T)
# if defined (__STDC__) || defined (__cplusplus)
#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
#  define YYSIZE_T size_t
# endif
#endif
#if ! defined (YYSIZE_T)
# define YYSIZE_T unsigned int
#endif

#define yyerrok		(yyerrstatus = 0)
#define yyclearin	(yychar = YYEMPTY)
#define YYEMPTY		-2
#define YYEOF		0
#define YYACCEPT	goto yyacceptlab
#define YYABORT 	goto yyabortlab
#define YYERROR		goto yyerrlab1
/* Like YYERROR except do call yyerror.  This remains here temporarily
   to ease the transition to the new meaning of YYERROR, for GCC.
   Once GCC version 2 has supplanted version 1, this can go.  */
#define YYFAIL		goto yyerrlab
#define YYRECOVERING()  (!!yyerrstatus)
#define YYBACKUP(Token, Value)					\
do								\
  if (yychar == YYEMPTY && yylen == 1)				\
    {								\
      yychar = (Token);						\
      yylval = (Value);						\
      yychar1 = YYTRANSLATE (yychar);				\
      YYPOPSTACK;						\
      goto yybackup;						\
    }								\
  else								\
    { 								\
      yyerror ("syntax error: cannot back up");			\
      YYERROR;							\
    }								\
while (0)

#define YYTERROR	1
#define YYERRCODE	256


/* YYLLOC_DEFAULT -- Compute the default location (before the actions
   are run).

   When YYLLOC_DEFAULT is run, CURRENT is set the location of the
   first token.  By default, to implement support for ranges, extend
   its range to the last symbol.  */

#ifndef YYLLOC_DEFAULT
# define YYLLOC_DEFAULT(Current, Rhs, N)       	\
   Current.last_line   = Rhs[N].last_line;	\
   Current.last_column = Rhs[N].last_column;
#endif


/* YYLEX -- calling `yylex' with the right arguments.  */

#if YYPURE
# if YYLSP_NEEDED
#  ifdef YYLEX_PARAM
#   define YYLEX		yylex (&yylval, &yylloc, YYLEX_PARAM)
#  else
#   define YYLEX		yylex (&yylval, &yylloc)
#  endif
# else /* !YYLSP_NEEDED */
#  ifdef YYLEX_PARAM
#   define YYLEX		yylex (&yylval, YYLEX_PARAM)
#  else
#   define YYLEX		yylex (&yylval)
#  endif
# endif /* !YYLSP_NEEDED */
#else /* !YYPURE */
# define YYLEX			yylex ()
#endif /* !YYPURE */


/* Enable debugging if requested.  */
#if YYDEBUG

# ifndef YYFPRINTF
#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
#  define YYFPRINTF fprintf
# endif

# define YYDPRINTF(Args)			\
do {						\
  if (yydebug)					\
    YYFPRINTF Args;				\
} while (0)
/* Nonzero means print parse trace.  It is left uninitialized so that
   multiple parsers can coexist.  */
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
#endif /* !YYDEBUG */

/* YYINITDEPTH -- initial size of the parser's stacks.  */
#ifndef	YYINITDEPTH
# define YYINITDEPTH 200
#endif

/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
   if the built-in stack extension method is used).

   Do not make this value too large; the results are undefined if
   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
   evaluated with infinite-precision integer arithmetic.  */

#if YYMAXDEPTH == 0
# undef YYMAXDEPTH
#endif

#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif

#ifdef YYERROR_VERBOSE

# ifndef yystrlen
#  if defined (__GLIBC__) && defined (_STRING_H)
#   define yystrlen strlen
#  else
/* Return the length of YYSTR.  */
static YYSIZE_T
#   if defined (__STDC__) || defined (__cplusplus)
yystrlen (const char *yystr)
#   else
yystrlen (yystr)
     const char *yystr;
#   endif
{
  register const char *yys = yystr;

  while (*yys++ != '\0')
    continue;

  return yys - yystr - 1;
}
#  endif
# endif

# ifndef yystpcpy
#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
#   define yystpcpy stpcpy
#  else
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
   YYDEST.  */
static char *
#   if defined (__STDC__) || defined (__cplusplus)
yystpcpy (char *yydest, const char *yysrc)
#   else
yystpcpy (yydest, yysrc)
     char *yydest;
     const char *yysrc;
#   endif
{
  register char *yyd = yydest;
  register const char *yys = yysrc;

  while ((*yyd++ = *yys++) != '\0')
    continue;

  return yyd - 1;
}
#  endif
# endif
#endif

#line 315 "/usr/share/bison-1.35/bison.simple"


/* The user can define YYPARSE_PARAM as the name of an argument to be passed
   into yyparse.  The argument should have type void *.
   It should actually point to an object.
   Grammar actions can access the variable by casting it
   to the proper pointer type.  */

#ifdef YYPARSE_PARAM
# if defined (__STDC__) || defined (__cplusplus)
#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
#  define YYPARSE_PARAM_DECL
# else
#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
# endif
#else /* !YYPARSE_PARAM */
# define YYPARSE_PARAM_ARG
# define YYPARSE_PARAM_DECL
#endif /* !YYPARSE_PARAM */

/* Prevent warning if -Wstrict-prototypes.  */
#ifdef __GNUC__
# ifdef YYPARSE_PARAM
int yyparse (void *);
# else
int yyparse (void);
# endif
#endif

/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
   variables are global, or local to YYPARSE.  */

#define YY_DECL_NON_LSP_VARIABLES			\
/* The lookahead symbol.  */				\
int yychar;						\
							\
/* The semantic value of the lookahead symbol. */	\
YYSTYPE yylval;						\
							\
/* Number of parse errors so far.  */			\
int yynerrs;

#if YYLSP_NEEDED
# define YY_DECL_VARIABLES			\
YY_DECL_NON_LSP_VARIABLES			\
						\
/* Location data for the lookahead symbol.  */	\
YYLTYPE yylloc;
#else
# define YY_DECL_VARIABLES			\
YY_DECL_NON_LSP_VARIABLES
#endif


/* If nonreentrant, generate the variables here. */

#if !YYPURE
YY_DECL_VARIABLES
#endif  /* !YYPURE */

int
yyparse (YYPARSE_PARAM_ARG)
     YYPARSE_PARAM_DECL
{
  /* If reentrant, generate the variables here. */
#if YYPURE
  YY_DECL_VARIABLES
#endif  /* !YYPURE */

  register int yystate;
  register int yyn;
  int yyresult;
  /* Number of tokens to shift before error messages enabled.  */
  int yyerrstatus;
  /* Lookahead token as an internal (translated) token number.  */
  int yychar1 = 0;

  /* Three stacks and their tools:
     `yyss': related to states,
     `yyvs': related to semantic values,
     `yyls': related to locations.

     Refer to the stacks thru separate pointers, to allow yyoverflow
     to reallocate them elsewhere.  */

  /* The state stack. */
  short	yyssa[YYINITDEPTH];
  short *yyss = yyssa;
  register short *yyssp;

  /* The semantic value stack.  */
  YYSTYPE yyvsa[YYINITDEPTH];
  YYSTYPE *yyvs = yyvsa;
  register YYSTYPE *yyvsp;

#if YYLSP_NEEDED
  /* The location stack.  */
  YYLTYPE yylsa[YYINITDEPTH];
  YYLTYPE *yyls = yylsa;
  YYLTYPE *yylsp;
#endif

#if YYLSP_NEEDED
# define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
#else
# define YYPOPSTACK   (yyvsp--, yyssp--)
#endif

  YYSIZE_T yystacksize = YYINITDEPTH;


  /* The variables used to return semantic value and location from the
     action routines.  */
  YYSTYPE yyval;
#if YYLSP_NEEDED
  YYLTYPE yyloc;
#endif

  /* When reducing, the number of symbols on the RHS of the reduced
     rule. */
  int yylen;

  YYDPRINTF ((stderr, "Starting parse\n"));

  yystate = 0;
  yyerrstatus = 0;
  yynerrs = 0;
  yychar = YYEMPTY;		/* Cause a token to be read.  */

  /* Initialize stack pointers.
     Waste one element of value and location stack
     so that they stay on the same level as the state stack.
     The wasted elements are never initialized.  */

  yyssp = yyss;
  yyvsp = yyvs;
#if YYLSP_NEEDED
  yylsp = yyls;
#endif
  goto yysetstate;

/*------------------------------------------------------------.
| yynewstate -- Push a new state, which is found in yystate.  |
`------------------------------------------------------------*/
 yynewstate:
  /* In all cases, when you get here, the value and location stacks
     have just been pushed. so pushing a state here evens the stacks.
     */
  yyssp++;

 yysetstate:
  *yyssp = yystate;

  if (yyssp >= yyss + yystacksize - 1)
    {
      /* Get the current used size of the three stacks, in elements.  */
      YYSIZE_T yysize = yyssp - yyss + 1;

#ifdef yyoverflow
      {
	/* Give user a chance to reallocate the stack. Use copies of
	   these so that the &'s don't force the real ones into
	   memory.  */
	YYSTYPE *yyvs1 = yyvs;
	short *yyss1 = yyss;

	/* Each stack pointer address is followed by the size of the
	   data in use in that stack, in bytes.  */
# if YYLSP_NEEDED
	YYLTYPE *yyls1 = yyls;
	/* This used to be a conditional around just the two extra args,
	   but that might be undefined if yyoverflow is a macro.  */
	yyoverflow ("parser stack overflow",
		    &yyss1, yysize * sizeof (*yyssp),
		    &yyvs1, yysize * sizeof (*yyvsp),
		    &yyls1, yysize * sizeof (*yylsp),
		    &yystacksize);
	yyls = yyls1;
# else
	yyoverflow ("parser stack overflow",
		    &yyss1, yysize * sizeof (*yyssp),
		    &yyvs1, yysize * sizeof (*yyvsp),
		    &yystacksize);
# endif
	yyss = yyss1;
	yyvs = yyvs1;
      }
#else /* no yyoverflow */
# ifndef YYSTACK_RELOCATE
      goto yyoverflowlab;
# else
      /* Extend the stack our own way.  */
      if (yystacksize >= YYMAXDEPTH)
	goto yyoverflowlab;
      yystacksize *= 2;
      if (yystacksize > YYMAXDEPTH)
	yystacksize = YYMAXDEPTH;

      {
	short *yyss1 = yyss;
	union yyalloc *yyptr =
	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
	if (! yyptr)
	  goto yyoverflowlab;
	YYSTACK_RELOCATE (yyss);
	YYSTACK_RELOCATE (yyvs);
# if YYLSP_NEEDED
	YYSTACK_RELOCATE (yyls);
# endif
# undef YYSTACK_RELOCATE
	if (yyss1 != yyssa)
	  YYSTACK_FREE (yyss1);
      }
# endif
#endif /* no yyoverflow */

      yyssp = yyss + yysize - 1;
      yyvsp = yyvs + yysize - 1;
#if YYLSP_NEEDED
      yylsp = yyls + yysize - 1;
#endif

      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
		  (unsigned long int) yystacksize));

      if (yyssp >= yyss + yystacksize - 1)
	YYABORT;
    }

  YYDPRINTF ((stderr, "Entering state %d\n", yystate));

  goto yybackup;


/*-----------.
| yybackup.  |
`-----------*/
yybackup:

/* Do appropriate processing given the current state.  */
/* Read a lookahead token if we need one and don't already have one.  */
/* yyresume: */

  /* First try to decide what to do without reference to lookahead token.  */

  yyn = yypact[yystate];
  if (yyn == YYFLAG)
    goto yydefault;

  /* Not known => get a lookahead token if don't already have one.  */

  /* yychar is either YYEMPTY or YYEOF
     or a valid token in external form.  */

  if (yychar == YYEMPTY)
    {
      YYDPRINTF ((stderr, "Reading a token: "));
      yychar = YYLEX;
    }

  /* Convert token to internal form (in yychar1) for indexing tables with */

  if (yychar <= 0)		/* This means end of input. */
    {
      yychar1 = 0;
      yychar = YYEOF;		/* Don't call YYLEX any more */

      YYDPRINTF ((stderr, "Now at end of input.\n"));
    }
  else
    {
      yychar1 = YYTRANSLATE (yychar);

#if YYDEBUG
     /* We have to keep this `#if YYDEBUG', since we use variables
	which are defined only if `YYDEBUG' is set.  */
      if (yydebug)
	{
	  YYFPRINTF (stderr, "Next token is %d (%s",
		     yychar, yytname[yychar1]);
	  /* Give the individual parser a way to print the precise
	     meaning of a token, for further debugging info.  */
# ifdef YYPRINT
	  YYPRINT (stderr, yychar, yylval);
# endif
	  YYFPRINTF (stderr, ")\n");
	}
#endif
    }

  yyn += yychar1;
  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
    goto yydefault;

  yyn = yytable[yyn];

  /* yyn is what to do for this token type in this state.
     Negative => reduce, -yyn is rule number.
     Positive => shift, yyn is new state.
       New state is final state => don't bother to shift,
       just return success.
     0, or most negative number => error.  */

  if (yyn < 0)
    {
      if (yyn == YYFLAG)
	goto yyerrlab;
      yyn = -yyn;
      goto yyreduce;
    }
  else if (yyn == 0)
    goto yyerrlab;

  if (yyn == YYFINAL)
    YYACCEPT;

  /* Shift the lookahead token.  */
  YYDPRINTF ((stderr, "Shifting token %d (%s), ",
	      yychar, yytname[yychar1]));

  /* Discard the token being shifted unless it is eof.  */
  if (yychar != YYEOF)
    yychar = YYEMPTY;

  *++yyvsp = yylval;
#if YYLSP_NEEDED
  *++yylsp = yylloc;
#endif

  /* Count tokens shifted since error; after three, turn off error
     status.  */
  if (yyerrstatus)
    yyerrstatus--;

  yystate = yyn;
  goto yynewstate;


/*-----------------------------------------------------------.
| yydefault -- do the default action for the current state.  |
`-----------------------------------------------------------*/
yydefault:
  yyn = yydefact[yystate];
  if (yyn == 0)
    goto yyerrlab;
  goto yyreduce;


/*-----------------------------.
| yyreduce -- Do a reduction.  |
`-----------------------------*/
yyreduce:
  /* yyn is the number of a rule to reduce with.  */
  yylen = yyr2[yyn];

  /* If YYLEN is nonzero, implement the default value of the action:
     `$$ = $1'.

     Otherwise, the following line sets YYVAL to the semantic value of
     the lookahead token.  This behavior is undocumented and Bison
     users should not rely upon it.  Assigning to YYVAL
     unconditionally makes the parser a bit smaller, and it avoids a
     GCC warning that YYVAL may be used uninitialized.  */
  yyval = yyvsp[1-yylen];

#if YYLSP_NEEDED
  /* Similarly for the default location.  Let the user run additional
     commands if for instance locations are ranges.  */
  yyloc = yylsp[1-yylen];
  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
#endif

#if YYDEBUG
  /* We have to keep this `#if YYDEBUG', since we use variables which
     are defined only if `YYDEBUG' is set.  */
  if (yydebug)
    {
      int yyi;

      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
		 yyn, yyrline[yyn]);

      /* Print the symbols being reduced, and their result.  */
      for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
	YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
      YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
    }
#endif

  switch (yyn) {

case 17:
#line 177 "rcparse.y"
{
	    define_accelerator (yyvsp[-5].id, &yyvsp[-3].res_info, yyvsp[-1].pacc);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 18:
#line 187 "rcparse.y"
{
	    yyval.pacc = NULL;
	  }
    break;
case 19:
#line 191 "rcparse.y"
{
	    struct accelerator *a;

	    a = (struct accelerator *) res_alloc (sizeof *a);
	    *a = yyvsp[0].acc;
	    if (yyvsp[-1].pacc == NULL)
	      yyval.pacc = a;
	    else
	      {
		struct accelerator **pp;

		for (pp = &yyvsp[-1].pacc->next; *pp != NULL; pp = &(*pp)->next)
		  ;
		*pp = a;
		yyval.pacc = yyvsp[-1].pacc;
	      }
	  }
    break;
case 20:
#line 212 "rcparse.y"
{
	    yyval.acc = yyvsp[-1].acc;
	    yyval.acc.id = yyvsp[0].il;
	  }
    break;
case 21:
#line 217 "rcparse.y"
{
	    yyval.acc = yyvsp[-3].acc;
	    yyval.acc.id = yyvsp[-2].il;
	    yyval.acc.flags |= yyvsp[0].is;
	    if ((yyval.acc.flags & ACC_VIRTKEY) == 0
		&& (yyval.acc.flags & (ACC_SHIFT | ACC_CONTROL)) != 0)
	      rcparse_warning (_("inappropriate modifiers for non-VIRTKEY"));
	  }
    break;
case 22:
#line 229 "rcparse.y"
{
	    const char *s = yyvsp[0].s;
	    char ch;

	    yyval.acc.next = NULL;
	    yyval.acc.id = 0;
	    ch = *s;
	    if (ch != '^')
	      yyval.acc.flags = 0;
	    else
	      {
		yyval.acc.flags = ACC_CONTROL | ACC_VIRTKEY;
		++s;
		ch = *s;
		ch = TOUPPER (ch);
	      }
	    yyval.acc.key = ch;
	    if (s[1] != '\0')
	      rcparse_warning (_("accelerator should only be one character"));
	  }
    break;
case 23:
#line 250 "rcparse.y"
{
	    yyval.acc.next = NULL;
	    yyval.acc.flags = 0;
	    yyval.acc.id = 0;
	    yyval.acc.key = yyvsp[0].il;
	  }
    break;
case 24:
#line 260 "rcparse.y"
{
	    yyval.is = yyvsp[0].is;
	  }
    break;
case 25:
#line 264 "rcparse.y"
{
	    yyval.is = yyvsp[-2].is | yyvsp[0].is;
	  }
    break;
case 26:
#line 269 "rcparse.y"
{
	    yyval.is = yyvsp[-1].is | yyvsp[0].is;
	  }
    break;
case 27:
#line 276 "rcparse.y"
{
	    yyval.is = ACC_VIRTKEY;
	  }
    break;
case 28:
#line 280 "rcparse.y"
{
	    /* This is just the absence of VIRTKEY.  */
	    yyval.is = 0;
	  }
    break;
case 29:
#line 285 "rcparse.y"
{
	    yyval.is = ACC_NOINVERT;
	  }
    break;
case 30:
#line 289 "rcparse.y"
{
	    yyval.is = ACC_SHIFT;
	  }
    break;
case 31:
#line 293 "rcparse.y"
{
	    yyval.is = ACC_CONTROL;
	  }
    break;
case 32:
#line 297 "rcparse.y"
{
	    yyval.is = ACC_ALT;
	  }
    break;
case 33:
#line 306 "rcparse.y"
{
	    define_bitmap (yyvsp[-3].id, &yyvsp[-1].res_info, yyvsp[0].s);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 34:
#line 318 "rcparse.y"
{
	    define_cursor (yyvsp[-3].id, &yyvsp[-1].res_info, yyvsp[0].s);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 35:
#line 331 "rcparse.y"
{
	      memset (&dialog, 0, sizeof dialog);
	      dialog.x = yyvsp[-3].il;
	      dialog.y = yyvsp[-2].il;
	      dialog.width = yyvsp[-1].il;
	      dialog.height = yyvsp[0].il;
	      dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU;
	      dialog.exstyle = yyvsp[-4].il;
	      dialog.menu.named = 1;
	      dialog.class.named = 1;
	      dialog.font = NULL;
	      dialog.ex = NULL;
	      dialog.controls = NULL;
	      sub_res_info = yyvsp[-5].res_info;
	      style = 0;
	    }
    break;
case 36:
#line 348 "rcparse.y"
{
	    define_dialog (yyvsp[-12].id, &sub_res_info, &dialog);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 37:
#line 356 "rcparse.y"
{
	      memset (&dialog, 0, sizeof dialog);
	      dialog.x = yyvsp[-3].il;
	      dialog.y = yyvsp[-2].il;
	      dialog.width = yyvsp[-1].il;
	      dialog.height = yyvsp[0].il;
	      dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU;
	      dialog.exstyle = yyvsp[-4].il;
	      dialog.menu.named = 1;
	      dialog.class.named = 1;
	      dialog.font = NULL;
	      dialog.ex = ((struct dialog_ex *)
			   res_alloc (sizeof (struct dialog_ex)));
	      memset (dialog.ex, 0, sizeof (struct dialog_ex));
	      dialog.controls = NULL;
	      sub_res_info = yyvsp[-5].res_info;
	      style = 0;
	    }
    break;
case 38:
#line 375 "rcparse.y"
{
	    define_dialog (yyvsp[-12].id, &sub_res_info, &dialog);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 39:
#line 383 "rcparse.y"
{
	      memset (&dialog, 0, sizeof dialog);
	      dialog.x = yyvsp[-4].il;
	      dialog.y = yyvsp[-3].il;
	      dialog.width = yyvsp[-2].il;
	      dialog.height = yyvsp[-1].il;
	      dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU;
	      dialog.exstyle = yyvsp[-5].il;
	      dialog.menu.named = 1;
	      dialog.class.named = 1;
	      dialog.font = NULL;
	      dialog.ex = ((struct dialog_ex *)
			   res_alloc (sizeof (struct dialog_ex)));
	      memset (dialog.ex, 0, sizeof (struct dialog_ex));
	      dialog.ex->help = yyvsp[0].il;
	      dialog.controls = NULL;
	      sub_res_info = yyvsp[-6].res_info;
	      style = 0;
	    }
    break;
case 40:
#line 403 "rcparse.y"
{
	    define_dialog (yyvsp[-13].id, &sub_res_info, &dialog);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 41:
#line 413 "rcparse.y"
{
	    yyval.il = 0;
	  }
    break;
case 42:
#line 417 "rcparse.y"
{
	    yyval.il = yyvsp[0].il;
	  }
    break;
case 44:
#line 425 "rcparse.y"
{
	    dialog.style |= WS_CAPTION;
	    style |= WS_CAPTION;
	    unicode_from_ascii ((int *) NULL, &dialog.caption, yyvsp[0].s);
	  }
    break;
case 45:
#line 431 "rcparse.y"
{
	    dialog.class = yyvsp[0].id;
	  }
    break;
case 46:
#line 436 "rcparse.y"
{
	    dialog.style = style;
	  }
    break;
case 47:
#line 440 "rcparse.y"
{
	    dialog.exstyle = yyvsp[0].il;
	  }
    break;
case 48:
#line 444 "rcparse.y"
{
	    res_string_to_id (& dialog.class, yyvsp[0].s);
	  }
    break;
case 49:
#line 448 "rcparse.y"
{
	    dialog.style |= DS_SETFONT;
	    style |= DS_SETFONT;
	    dialog.pointsize = yyvsp[-2].il;
	    unicode_from_ascii ((int *) NULL, &dialog.font, yyvsp[0].s);
	    if (dialog.ex != NULL)
	      {
		dialog.ex->weight = 0;
		dialog.ex->italic = 0;
		dialog.ex->charset = 1;
	      }
	  }
    break;
case 50:
#line 461 "rcparse.y"
{
	    dialog.style |= DS_SETFONT;
	    style |= DS_SETFONT;
	    dialog.pointsize = yyvsp[-3].il;
	    unicode_from_ascii ((int *) NULL, &dialog.font, yyvsp[-1].s);
	    if (dialog.ex == NULL)
	      rcparse_warning (_("extended FONT requires DIALOGEX"));
	    else
	      {
		dialog.ex->weight = yyvsp[0].il;
		dialog.ex->italic = 0;
		dialog.ex->charset = 1;
	      }
	  }
    break;
case 51:
#line 476 "rcparse.y"
{
	    dialog.style |= DS_SETFONT;
	    style |= DS_SETFONT;
	    dialog.pointsize = yyvsp[-4].il;
	    unicode_from_ascii ((int *) NULL, &dialog.font, yyvsp[-2].s);
	    if (dialog.ex == NULL)
	      rcparse_warning (_("extended FONT requires DIALOGEX"));
	    else
	      {
		dialog.ex->weight = yyvsp[-1].il;
		dialog.ex->italic = yyvsp[0].il;
		dialog.ex->charset = 1;
	      }
	  }
    break;
case 52:
#line 491 "rcparse.y"
{
	    dialog.style |= DS_SETFONT;
	    style |= DS_SETFONT;
	    dialog.pointsize = yyvsp[-5].il;
	    unicode_from_ascii ((int *) NULL, &dialog.font, yyvsp[-3].s);
	    if (dialog.ex == NULL)
	      rcparse_warning (_("extended FONT requires DIALOGEX"));
	    else
	      {
		dialog.ex->weight = yyvsp[-2].il;
		dialog.ex->italic = yyvsp[-1].il;
		dialog.ex->charset = yyvsp[0].il;
	      }
	  }
    break;
case 53:
#line 506 "rcparse.y"
{
	    dialog.menu = yyvsp[0].id;
	  }
    break;
case 54:
#line 510 "rcparse.y"
{
	    sub_res_info.characteristics = yyvsp[0].il;
	  }
    break;
case 55:
#line 514 "rcparse.y"
{
	    sub_res_info.language = yyvsp[-1].il | (yyvsp[0].il << SUBLANG_SHIFT);
	  }
    break;
case 56:
#line 518 "rcparse.y"
{
	    sub_res_info.version = yyvsp[0].il;
	  }
    break;
case 58:
#line 526 "rcparse.y"
{
	    struct dialog_control **pp;

	    for (pp = &dialog.controls; *pp != NULL; pp = &(*pp)->next)
	      ;
	    *pp = yyvsp[0].dialog_control;
	  }
    break;
case 59:
#line 537 "rcparse.y"
{
	      default_style = BS_AUTO3STATE | WS_TABSTOP;
	      base_style = BS_AUTO3STATE;
	      class = CTL_BUTTON;
	    }
    break;
case 60:
#line 543 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 61:
#line 547 "rcparse.y"
{
	      default_style = BS_AUTOCHECKBOX | WS_TABSTOP;
	      base_style = BS_AUTOCHECKBOX;
	      class = CTL_BUTTON;
	    }
    break;
case 62:
#line 553 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 63:
#line 557 "rcparse.y"
{
	      default_style = BS_AUTORADIOBUTTON | WS_TABSTOP;
	      base_style = BS_AUTORADIOBUTTON;
	      class = CTL_BUTTON;
	    }
    break;
case 64:
#line 563 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 65:
#line 567 "rcparse.y"
{
	      default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
	      base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
	      class = CTL_EDIT;
	    }
    break;
case 66:
#line 573 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	    if (dialog.ex == NULL)
	      rcparse_warning (_("BEDIT requires DIALOGEX"));
	    res_string_to_id (&yyval.dialog_control->class, "BEDIT");
	  }
    break;
case 67:
#line 580 "rcparse.y"
{
	      default_style = BS_CHECKBOX | WS_TABSTOP;
	      base_style = BS_CHECKBOX | WS_TABSTOP;
	      class = CTL_BUTTON;
	    }
    break;
case 68:
#line 586 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 69:
#line 590 "rcparse.y"
{
	      default_style = CBS_SIMPLE | WS_TABSTOP;
	      base_style = 0;
	      class = CTL_COMBOBOX;
	    }
    break;
case 70:
#line 596 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 71:
#line 601 "rcparse.y"
{
	    yyval.dialog_control = define_control (yyvsp[-9].s, yyvsp[-8].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, yyvsp[-2].il, yyvsp[-7].il, style, yyvsp[-1].il);
	    if (yyvsp[0].rcdata_item != NULL)
	      {
		if (dialog.ex == NULL)
		  rcparse_warning (_("control data requires DIALOGEX"));
		yyval.dialog_control->data = yyvsp[0].rcdata_item;
	      }
	  }
    break;
case 72:
#line 612 "rcparse.y"
{
	    yyval.dialog_control = define_control (yyvsp[-10].s, yyvsp[-9].il, yyvsp[-6].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, yyvsp[-8].il, style, yyvsp[-2].il);
	    if (dialog.ex == NULL)
	      rcparse_warning (_("help ID requires DIALOGEX"));
	    yyval.dialog_control->help = yyvsp[-1].il;
	    yyval.dialog_control->data = yyvsp[0].rcdata_item;
	  }
    break;
case 73:
#line 621 "rcparse.y"
{
	    yyval.dialog_control = define_control (yyvsp[-10].s, yyvsp[-9].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, yyvsp[-2].il, 0, style, yyvsp[-1].il);
	    if (yyvsp[0].rcdata_item != NULL)
	      {
		if (dialog.ex == NULL)
		  rcparse_warning ("control data requires DIALOGEX");
		yyval.dialog_control->data = yyvsp[0].rcdata_item;
	      }
	    yyval.dialog_control->class.named = 1;
  	    unicode_from_ascii (&yyval.dialog_control->class.u.n.length, &yyval.dialog_control->class.u.n.name, yyvsp[-7].s);
	  }
    break;
case 74:
#line 634 "rcparse.y"
{
	    yyval.dialog_control = define_control (yyvsp[-11].s, yyvsp[-10].il, yyvsp[-6].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, 0, style, yyvsp[-2].il);
	    if (dialog.ex == NULL)
	      rcparse_warning ("help ID requires DIALOGEX");
	    yyval.dialog_control->help = yyvsp[-1].il;
	    yyval.dialog_control->data = yyvsp[0].rcdata_item;
	    yyval.dialog_control->class.named = 1;
  	    unicode_from_ascii (&yyval.dialog_control->class.u.n.length, &yyval.dialog_control->class.u.n.name, yyvsp[-8].s);
	  }
    break;
case 75:
#line 644 "rcparse.y"
{
	      default_style = SS_CENTER | WS_GROUP;
	      base_style = SS_CENTER;
	      class = CTL_STATIC;
	    }
    break;
case 76:
#line 650 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 77:
#line 654 "rcparse.y"
{
	      default_style = BS_DEFPUSHBUTTON | WS_TABSTOP;
	      base_style = BS_DEFPUSHBUTTON | WS_TABSTOP;
	      class = CTL_BUTTON;
	    }
    break;
case 78:
#line 660 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 79:
#line 664 "rcparse.y"
{
	      default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
	      base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
	      class = CTL_EDIT;
	    }
    break;
case 80:
#line 670 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 81:
#line 674 "rcparse.y"
{
	      default_style = BS_GROUPBOX;
	      base_style = BS_GROUPBOX;
	      class = CTL_BUTTON;
	    }
    break;
case 82:
#line 680 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 83:
#line 684 "rcparse.y"
{
	      default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
	      base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
	      class = CTL_EDIT;
	    }
    break;
case 84:
#line 690 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	    if (dialog.ex == NULL)
	      rcparse_warning (_("IEDIT requires DIALOGEX"));
	    res_string_to_id (&yyval.dialog_control->class, "HEDIT");
	  }
    break;
case 85:
#line 697 "rcparse.y"
{
	    yyval.dialog_control = define_icon_control (yyvsp[-4].id, yyvsp[-3].il, yyvsp[-2].il, yyvsp[-1].il, 0, 0, 0, yyvsp[0].rcdata_item,
				      dialog.ex);
          }
    break;
case 86:
#line 703 "rcparse.y"
{
	    yyval.dialog_control = define_icon_control (yyvsp[-6].id, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, 0, 0, 0, yyvsp[0].rcdata_item,
				      dialog.ex);
          }
    break;
case 87:
#line 709 "rcparse.y"
{
	    yyval.dialog_control = define_icon_control (yyvsp[-8].id, yyvsp[-7].il, yyvsp[-6].il, yyvsp[-5].il, style, yyvsp[-1].il, 0, yyvsp[0].rcdata_item,
				      dialog.ex);
          }
    break;
case 88:
#line 715 "rcparse.y"
{
	    yyval.dialog_control = define_icon_control (yyvsp[-9].id, yyvsp[-8].il, yyvsp[-7].il, yyvsp[-6].il, style, yyvsp[-2].il, yyvsp[-1].il, yyvsp[0].rcdata_item,
				      dialog.ex);
          }
    break;
case 89:
#line 720 "rcparse.y"
{
	      default_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
	      base_style = ES_LEFT | WS_BORDER | WS_TABSTOP;
	      class = CTL_EDIT;
	    }
    break;
case 90:
#line 726 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	    if (dialog.ex == NULL)
	      rcparse_warning (_("IEDIT requires DIALOGEX"));
	    res_string_to_id (&yyval.dialog_control->class, "IEDIT");
	  }
    break;
case 91:
#line 733 "rcparse.y"
{
	      default_style = LBS_NOTIFY | WS_BORDER;
	      base_style = LBS_NOTIFY | WS_BORDER;
	      class = CTL_LISTBOX;
	    }
    break;
case 92:
#line 739 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 93:
#line 743 "rcparse.y"
{
	      default_style = SS_LEFT | WS_GROUP;
	      base_style = SS_LEFT;
	      class = CTL_STATIC;
	    }
    break;
case 94:
#line 749 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 95:
#line 753 "rcparse.y"
{
	      default_style = BS_PUSHBOX | WS_TABSTOP;
	      base_style = BS_PUSHBOX;
	      class = CTL_BUTTON;
	    }
    break;
case 96:
#line 759 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 97:
#line 763 "rcparse.y"
{
	      default_style = BS_PUSHBUTTON | WS_TABSTOP;
	      base_style = BS_PUSHBUTTON | WS_TABSTOP;
	      class = CTL_BUTTON;
	    }
    break;
case 98:
#line 769 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 99:
#line 773 "rcparse.y"
{
	      default_style = BS_RADIOBUTTON | WS_TABSTOP;
	      base_style = BS_RADIOBUTTON;
	      class = CTL_BUTTON;
	    }
    break;
case 100:
#line 779 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 101:
#line 783 "rcparse.y"
{
	      default_style = SS_RIGHT | WS_GROUP;
	      base_style = SS_RIGHT;
	      class = CTL_STATIC;
	    }
    break;
case 102:
#line 789 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 103:
#line 793 "rcparse.y"
{
	      default_style = SBS_HORZ;
	      base_style = 0;
	      class = CTL_SCROLLBAR;
	    }
    break;
case 104:
#line 799 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 105:
#line 803 "rcparse.y"
{
	      default_style = BS_3STATE | WS_TABSTOP;
	      base_style = BS_3STATE;
	      class = CTL_BUTTON;
	    }
    break;
case 106:
#line 809 "rcparse.y"
{
	    yyval.dialog_control = yyvsp[0].dialog_control;
	  }
    break;
case 107:
#line 814 "rcparse.y"
{ style = WS_CHILD | WS_VISIBLE; }
    break;
case 108:
#line 816 "rcparse.y"
{
	    yyval.dialog_control = define_control (yyvsp[-14].s, yyvsp[-12].il, yyvsp[-10].il, yyvsp[-8].il, yyvsp[-6].il, yyvsp[-4].il, CTL_BUTTON,
				 style, yyvsp[0].il);
	  }
    break;
case 109:
#line 832 "rcparse.y"
{
	    yyval.dialog_control = define_control (yyvsp[-6].s, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, yyvsp[-2].il, yyvsp[-1].il, class,
				 default_style | WS_CHILD | WS_VISIBLE, 0);
	    if (yyvsp[0].rcdata_item != NULL)
	      {
		if (dialog.ex == NULL)
		  rcparse_warning (_("control data requires DIALOGEX"));
		yyval.dialog_control->data = yyvsp[0].rcdata_item;
	      }
	  }
    break;
case 110:
#line 844 "rcparse.y"
{
	    yyval.dialog_control = define_control (yyvsp[-8].s, yyvsp[-7].il, yyvsp[-6].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, class, style, yyvsp[-1].il);
	    if (yyvsp[0].rcdata_item != NULL)
	      {
		if (dialog.ex == NULL)
		  rcparse_warning (_("control data requires DIALOGEX"));
		yyval.dialog_control->data = yyvsp[0].rcdata_item;
	      }
	  }
    break;
case 111:
#line 855 "rcparse.y"
{
	    yyval.dialog_control = define_control (yyvsp[-9].s, yyvsp[-8].il, yyvsp[-7].il, yyvsp[-6].il, yyvsp[-5].il, yyvsp[-4].il, class, style, yyvsp[-2].il);
	    if (dialog.ex == NULL)
	      rcparse_warning (_("help ID requires DIALOGEX"));
	    yyval.dialog_control->help = yyvsp[-1].il;
	    yyval.dialog_control->data = yyvsp[0].rcdata_item;
	  }
    break;
case 112:
#line 866 "rcparse.y"
{
	    yyval.s = NULL;
	  }
    break;
case 113:
#line 870 "rcparse.y"
{
	    yyval.s = yyvsp[0].s;
	  }
    break;
case 114:
#line 874 "rcparse.y"
{
	    yyval.s = yyvsp[-1].s;
	  }
    break;
case 115:
#line 881 "rcparse.y"
{
	    yyval.rcdata_item = NULL;
	  }
    break;
case 116:
#line 885 "rcparse.y"
{
	    yyval.rcdata_item = yyvsp[-1].rcdata.first;
	  }
    break;
case 117:
#line 894 "rcparse.y"
{ style = WS_CHILD | WS_VISIBLE; }
    break;
case 119:
#line 900 "rcparse.y"
{ style = SS_ICON | WS_CHILD | WS_VISIBLE; }
    break;
case 121:
#line 906 "rcparse.y"
{ style = base_style | WS_CHILD | WS_VISIBLE; }
    break;
case 123:
#line 914 "rcparse.y"
{
	    define_font (yyvsp[-3].id, &yyvsp[-1].res_info, yyvsp[0].s);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 124:
#line 926 "rcparse.y"
{
	    define_icon (yyvsp[-3].id, &yyvsp[-1].res_info, yyvsp[0].s);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 125:
#line 939 "rcparse.y"
{
	    language = yyvsp[-1].il | (yyvsp[0].il << SUBLANG_SHIFT);
	  }
    break;
case 126:
#line 948 "rcparse.y"
{
	    define_menu (yyvsp[-5].id, &yyvsp[-3].res_info, yyvsp[-1].menuitem);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 127:
#line 958 "rcparse.y"
{
	    yyval.menuitem = NULL;
	  }
    break;
case 128:
#line 962 "rcparse.y"
{
	    if (yyvsp[-1].menuitem == NULL)
	      yyval.menuitem = yyvsp[0].menuitem;
	    else
	      {
		struct menuitem **pp;

		for (pp = &yyvsp[-1].menuitem->next; *pp != NULL; pp = &(*pp)->next)
		  ;
		*pp = yyvsp[0].menuitem;
		yyval.menuitem = yyvsp[-1].menuitem;
	      }
	  }
    break;
case 129:
#line 979 "rcparse.y"
{
	    yyval.menuitem = define_menuitem (yyvsp[-2].s, yyvsp[-1].il, yyvsp[0].is, 0, 0, NULL);
	  }
    break;
case 130:
#line 983 "rcparse.y"
{
	    yyval.menuitem = define_menuitem (NULL, 0, 0, 0, 0, NULL);
	  }
    break;
case 131:
#line 987 "rcparse.y"
{
	    yyval.menuitem = define_menuitem (yyvsp[-4].s, 0, yyvsp[-3].is, 0, 0, yyvsp[-1].menuitem);
	  }
    break;
case 132:
#line 994 "rcparse.y"
{
	    yyval.is = 0;
	  }
    break;
case 133:
#line 998 "rcparse.y"
{
	    yyval.is = yyvsp[-2].is | yyvsp[0].is;
	  }
    break;
case 134:
#line 1002 "rcparse.y"
{
	    yyval.is = yyvsp[-1].is | yyvsp[0].is;
	  }
    break;
case 135:
#line 1009 "rcparse.y"
{
	    yyval.is = MENUITEM_CHECKED;
	  }
    break;
case 136:
#line 1013 "rcparse.y"
{
	    yyval.is = MENUITEM_GRAYED;
	  }
    break;
case 137:
#line 1017 "rcparse.y"
{
	    yyval.is = MENUITEM_HELP;
	  }
    break;
case 138:
#line 1021 "rcparse.y"
{
	    yyval.is = MENUITEM_INACTIVE;
	  }
    break;
case 139:
#line 1025 "rcparse.y"
{
	    yyval.is = MENUITEM_MENUBARBREAK;
	  }
    break;
case 140:
#line 1029 "rcparse.y"
{
	    yyval.is = MENUITEM_MENUBREAK;
	  }
    break;
case 141:
#line 1038 "rcparse.y"
{
	    define_menu (yyvsp[-5].id, &yyvsp[-3].res_info, yyvsp[-1].menuitem);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 142:
#line 1048 "rcparse.y"
{
	    yyval.menuitem = NULL;
	  }
    break;
case 143:
#line 1052 "rcparse.y"
{
	    if (yyvsp[-1].menuitem == NULL)
	      yyval.menuitem = yyvsp[0].menuitem;
	    else
	      {
		struct menuitem **pp;

		for (pp = &yyvsp[-1].menuitem->next; *pp != NULL; pp = &(*pp)->next)
		  ;
		*pp = yyvsp[0].menuitem;
		yyval.menuitem = yyvsp[-1].menuitem;
	      }
	  }
    break;
case 144:
#line 1069 "rcparse.y"
{
	    yyval.menuitem = define_menuitem (yyvsp[0].s, 0, 0, 0, 0, NULL);
	  }
    break;
case 145:
#line 1073 "rcparse.y"
{
	    yyval.menuitem = define_menuitem (yyvsp[-1].s, yyvsp[0].il, 0, 0, 0, NULL);
	  }
    break;
case 146:
#line 1077 "rcparse.y"
{
	    yyval.menuitem = define_menuitem (yyvsp[-3].s, yyvsp[-2].il, yyvsp[-1].il, yyvsp[0].il, 0, NULL);
	  }
    break;
case 147:
#line 1081 "rcparse.y"
{
 	    yyval.menuitem = define_menuitem (NULL, 0, 0, 0, 0, NULL);
 	  }
    break;
case 148:
#line 1085 "rcparse.y"
{
	    yyval.menuitem = define_menuitem (yyvsp[-3].s, 0, 0, 0, 0, yyvsp[-1].menuitem);
	  }
    break;
case 149:
#line 1089 "rcparse.y"
{
	    yyval.menuitem = define_menuitem (yyvsp[-4].s, yyvsp[-3].il, 0, 0, 0, yyvsp[-1].menuitem);
	  }
    break;
case 150:
#line 1093 "rcparse.y"
{
	    yyval.menuitem = define_menuitem (yyvsp[-5].s, yyvsp[-4].il, yyvsp[-3].il, 0, 0, yyvsp[-1].menuitem);
	  }
    break;
case 151:
#line 1098 "rcparse.y"
{
	    yyval.menuitem = define_menuitem (yyvsp[-7].s, yyvsp[-6].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, yyvsp[-1].menuitem);
	  }
    break;
case 152:
#line 1107 "rcparse.y"
{
	    define_messagetable (yyvsp[-3].id, &yyvsp[-1].res_info, yyvsp[0].s);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 153:
#line 1119 "rcparse.y"
{
	    define_rcdata (yyvsp[-5].id, &yyvsp[-3].res_info, yyvsp[-1].rcdata.first);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 154:
#line 1131 "rcparse.y"
{
	    rcparse_rcdata ();
	  }
    break;
case 155:
#line 1135 "rcparse.y"
{
	    rcparse_normal ();
	    yyval.rcdata = yyvsp[0].rcdata;
	  }
    break;
case 156:
#line 1143 "rcparse.y"
{
	    yyval.rcdata.first = NULL;
	    yyval.rcdata.last = NULL;
	  }
    break;
case 157:
#line 1148 "rcparse.y"
{
	    yyval.rcdata = yyvsp[0].rcdata;
	  }
    break;
case 158:
#line 1155 "rcparse.y"
{
	    struct rcdata_item *ri;

	    ri = define_rcdata_string (yyvsp[0].ss.s, yyvsp[0].ss.length);
	    yyval.rcdata.first = ri;
	    yyval.rcdata.last = ri;
	  }
    break;
case 159:
#line 1163 "rcparse.y"
{
	    struct rcdata_item *ri;

	    ri = define_rcdata_number (yyvsp[0].i.val, yyvsp[0].i.dword);
	    yyval.rcdata.first = ri;
	    yyval.rcdata.last = ri;
	  }
    break;
case 160:
#line 1171 "rcparse.y"
{
	    struct rcdata_item *ri;

	    ri = define_rcdata_string (yyvsp[0].ss.s, yyvsp[0].ss.length);
	    yyval.rcdata.first = yyvsp[-2].rcdata.first;
	    yyvsp[-2].rcdata.last->next = ri;
	    yyval.rcdata.last = ri;
	  }
    break;
case 161:
#line 1180 "rcparse.y"
{
	    struct rcdata_item *ri;

	    ri = define_rcdata_number (yyvsp[0].i.val, yyvsp[0].i.dword);
	    yyval.rcdata.first = yyvsp[-2].rcdata.first;
	    yyvsp[-2].rcdata.last->next = ri;
	    yyval.rcdata.last = ri;
	  }
    break;
case 162:
#line 1194 "rcparse.y"
{ sub_res_info = yyvsp[-1].res_info; }
    break;
case 165:
#line 1201 "rcparse.y"
{
	    define_stringtable (&sub_res_info, yyvsp[-1].il, yyvsp[0].s);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 166:
#line 1208 "rcparse.y"
{
	    define_stringtable (&sub_res_info, yyvsp[-2].il, yyvsp[0].s);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 167:
#line 1221 "rcparse.y"
{
	    define_user_data (yyvsp[-5].id, yyvsp[-4].id, &yyvsp[-3].res_info, yyvsp[-1].rcdata.first);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 168:
#line 1228 "rcparse.y"
{
	    define_user_file (yyvsp[-3].id, yyvsp[-2].id, &yyvsp[-1].res_info, yyvsp[0].s);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 169:
#line 1240 "rcparse.y"
{
	    define_versioninfo (yyvsp[-5].id, language, yyvsp[-3].fixver, yyvsp[-1].verinfo);
	    if (yychar != YYEMPTY)
	      YYERROR;
	    rcparse_discard_strings ();
	  }
    break;
case 170:
#line 1250 "rcparse.y"
{
	    yyval.fixver = ((struct fixed_versioninfo *)
		  res_alloc (sizeof (struct fixed_versioninfo)));
	    memset (yyval.fixver, 0, sizeof (struct fixed_versioninfo));
	  }
    break;
case 171:
#line 1256 "rcparse.y"
{
	    yyvsp[-5].fixver->file_version_ms = (yyvsp[-3].il << 16) | yyvsp[-2].il;
	    yyvsp[-5].fixver->file_version_ls = (yyvsp[-1].il << 16) | yyvsp[0].il;
	    yyval.fixver = yyvsp[-5].fixver;
	  }
    break;
case 172:
#line 1262 "rcparse.y"
{
	    yyvsp[-5].fixver->product_version_ms = (yyvsp[-3].il << 16) | yyvsp[-2].il;
	    yyvsp[-5].fixver->product_version_ls = (yyvsp[-1].il << 16) | yyvsp[0].il;
	    yyval.fixver = yyvsp[-5].fixver;
	  }
    break;
case 173:
#line 1268 "rcparse.y"
{
	    yyvsp[-2].fixver->file_flags_mask = yyvsp[0].il;
	    yyval.fixver = yyvsp[-2].fixver;
	  }
    break;
case 174:
#line 1273 "rcparse.y"
{
	    yyvsp[-2].fixver->file_flags = yyvsp[0].il;
	    yyval.fixver = yyvsp[-2].fixver;
	  }
    break;
case 175:
#line 1278 "rcparse.y"
{
	    yyvsp[-2].fixver->file_os = yyvsp[0].il;
	    yyval.fixver = yyvsp[-2].fixver;
	  }
    break;
case 176:
#line 1283 "rcparse.y"
{
	    yyvsp[-2].fixver->file_type = yyvsp[0].il;
	    yyval.fixver = yyvsp[-2].fixver;
	  }
    break;
case 177:
#line 1288 "rcparse.y"
{
	    yyvsp[-2].fixver->file_subtype = yyvsp[0].il;
	    yyval.fixver = yyvsp[-2].fixver;
	  }
    break;
case 178:
#line 1302 "rcparse.y"
{
	    yyval.verinfo = NULL;
	  }
    break;
case 179:
#line 1306 "rcparse.y"
{
	    yyval.verinfo = append_ver_stringfileinfo (yyvsp[-7].verinfo, yyvsp[-4].s, yyvsp[-2].verstring);
	  }
    break;
case 180:
#line 1310 "rcparse.y"
{
	    yyval.verinfo = append_ver_varfileinfo (yyvsp[-6].verinfo, yyvsp[-2].s, yyvsp[-1].vervar);
	  }
    break;
case 181:
#line 1317 "rcparse.y"
{
	    yyval.verstring = NULL;
	  }
    break;
case 182:
#line 1321 "rcparse.y"
{
	    yyval.verstring = append_verval (yyvsp[-4].verstring, yyvsp[-2].s, yyvsp[0].s);
	  }
    break;
case 183:
#line 1328 "rcparse.y"
{
	    yyval.vervar = NULL;
	  }
    break;
case 184:
#line 1332 "rcparse.y"
{
	    yyval.vervar = append_vertrans (yyvsp[-2].vervar, yyvsp[-1].il, yyvsp[0].il);
	  }
    break;
case 185:
#line 1341 "rcparse.y"
{
	    yyval.id.named = 0;
	    yyval.id.u.id = yyvsp[0].il;
	  }
    break;
case 186:
#line 1346 "rcparse.y"
{
	    char *copy, *s;

	    /* It seems that resource ID's are forced to upper case.  */
	    copy = xstrdup (yyvsp[0].s);
	    for (s = copy; *s != '\0'; s++)
	      *s = TOUPPER (*s);
	    res_string_to_id (&yyval.id, copy);
	    free (copy);
	  }
    break;
case 187:
#line 1362 "rcparse.y"
{
	    yyval.s = yyvsp[0].s;
	  }
    break;
case 188:
#line 1366 "rcparse.y"
{
	    yyval.s = yyvsp[-1].s;
	  }
    break;
case 189:
#line 1370 "rcparse.y"
{
	    yyval.s = yyvsp[-1].s;
	  }
    break;
case 190:
#line 1378 "rcparse.y"
{
	    yyval.id.named = 0;
	    yyval.id.u.id = yyvsp[-1].il;
	  }
    break;
case 191:
#line 1383 "rcparse.y"
{
	    char *copy, *s;

	    /* It seems that resource ID's are forced to upper case.  */
	    copy = xstrdup (yyvsp[0].s);
	    for (s = copy; *s != '\0'; s++)
	      *s = TOUPPER (*s);
	    res_string_to_id (&yyval.id, copy);
	    free (copy);
	  }
    break;
case 192:
#line 1400 "rcparse.y"
{
	    memset (&yyval.res_info, 0, sizeof (struct res_res_info));
	    yyval.res_info.language = language;
	    /* FIXME: Is this the right default?  */
	    yyval.res_info.memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE;
	  }
    break;
case 193:
#line 1407 "rcparse.y"
{
	    yyval.res_info = yyvsp[-1].res_info;
	    yyval.res_info.memflags |= yyvsp[0].memflags.on;
	    yyval.res_info.memflags &=~ yyvsp[0].memflags.off;
	  }
    break;
case 194:
#line 1413 "rcparse.y"
{
	    yyval.res_info = yyvsp[-2].res_info;
	    yyval.res_info.characteristics = yyvsp[0].il;
	  }
    break;
case 195:
#line 1418 "rcparse.y"
{
	    yyval.res_info = yyvsp[-3].res_info;
	    yyval.res_info.language = yyvsp[-1].il | (yyvsp[0].il << SUBLANG_SHIFT);
	  }
    break;
case 196:
#line 1423 "rcparse.y"
{
	    yyval.res_info = yyvsp[-2].res_info;
	    yyval.res_info.version = yyvsp[0].il;
	  }
    break;
case 197:
#line 1433 "rcparse.y"
{
	    memset (&yyval.res_info, 0, sizeof (struct res_res_info));
	    yyval.res_info.language = language;
	    yyval.res_info.memflags = MEMFLAG_MOVEABLE | MEMFLAG_DISCARDABLE;
	  }
    break;
case 198:
#line 1439 "rcparse.y"
{
	    yyval.res_info = yyvsp[-1].res_info;
	    yyval.res_info.memflags |= yyvsp[0].memflags.on;
	    yyval.res_info.memflags &=~ yyvsp[0].memflags.off;
	  }
    break;
case 199:
#line 1450 "rcparse.y"
{
	    memset (&yyval.res_info, 0, sizeof (struct res_res_info));
	    yyval.res_info.language = language;
	    yyval.res_info.memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE;
	  }
    break;
case 200:
#line 1456 "rcparse.y"
{
	    yyval.res_info = yyvsp[-1].res_info;
	    yyval.res_info.memflags |= yyvsp[0].memflags.on;
	    yyval.res_info.memflags &=~ yyvsp[0].memflags.off;
	  }
    break;
case 201:
#line 1468 "rcparse.y"
{
	    yyval.memflags.on = MEMFLAG_MOVEABLE;
	    yyval.memflags.off = 0;
	  }
    break;
case 202:
#line 1473 "rcparse.y"
{
	    yyval.memflags.on = 0;
	    yyval.memflags.off = MEMFLAG_MOVEABLE;
	  }
    break;
case 203:
#line 1478 "rcparse.y"
{
	    yyval.memflags.on = MEMFLAG_PURE;
	    yyval.memflags.off = 0;
	  }
    break;
case 204:
#line 1483 "rcparse.y"
{
	    yyval.memflags.on = 0;
	    yyval.memflags.off = MEMFLAG_PURE;
	  }
    break;
case 205:
#line 1488 "rcparse.y"
{
	    yyval.memflags.on = MEMFLAG_PRELOAD;
	    yyval.memflags.off = 0;
	  }
    break;
case 206:
#line 1493 "rcparse.y"
{
	    yyval.memflags.on = 0;
	    yyval.memflags.off = MEMFLAG_PRELOAD;
	  }
    break;
case 207:
#line 1498 "rcparse.y"
{
	    yyval.memflags.on = MEMFLAG_DISCARDABLE;
	    yyval.memflags.off = 0;
	  }
    break;
case 208:
#line 1508 "rcparse.y"
{
	    yyval.s = yyvsp[0].s;
	  }
    break;
case 209:
#line 1512 "rcparse.y"
{
	    yyval.s = yyvsp[0].s;
	  }
    break;
case 210:
#line 1529 "rcparse.y"
{
	    style |= yyvsp[0].il;
	  }
    break;
case 211:
#line 1533 "rcparse.y"
{
	    style &=~ yyvsp[0].il;
	  }
    break;
case 212:
#line 1537 "rcparse.y"
{
	    style |= yyvsp[0].il;
	  }
    break;
case 213:
#line 1541 "rcparse.y"
{
	    style &=~ yyvsp[0].il;
	  }
    break;
case 214:
#line 1548 "rcparse.y"
{
	    yyval.il = yyvsp[0].i.val;
	  }
    break;
case 215:
#line 1552 "rcparse.y"
{
	    yyval.il = yyvsp[-1].il;
	  }
    break;
case 216:
#line 1561 "rcparse.y"
{
	    yyval.il = 0;
	  }
    break;
case 217:
#line 1565 "rcparse.y"
{
	    yyval.il = yyvsp[0].il;
	  }
    break;
case 218:
#line 1574 "rcparse.y"
{
	    yyval.il = yyvsp[0].il;
	  }
    break;
case 219:
#line 1583 "rcparse.y"
{
	    yyval.il = yyvsp[0].i.val;
	  }
    break;
case 220:
#line 1592 "rcparse.y"
{
	    yyval.i = yyvsp[0].i;
	  }
    break;
case 221:
#line 1596 "rcparse.y"
{
	    yyval.i = yyvsp[-1].i;
	  }
    break;
case 222:
#line 1600 "rcparse.y"
{
	    yyval.i.val = ~ yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[0].i.dword;
	  }
    break;
case 223:
#line 1605 "rcparse.y"
{
	    yyval.i.val = - yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[0].i.dword;
	  }
    break;
case 224:
#line 1610 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val * yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 225:
#line 1615 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val / yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 226:
#line 1620 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val % yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 227:
#line 1625 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val + yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 228:
#line 1630 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val - yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 229:
#line 1635 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val & yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 230:
#line 1640 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val ^ yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 231:
#line 1645 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val | yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 232:
#line 1656 "rcparse.y"
{
	    yyval.il = yyvsp[0].il;
	  }
    break;
case 233:
#line 1665 "rcparse.y"
{
	    yyval.il = yyvsp[0].i.val;
	  }
    break;
case 234:
#line 1676 "rcparse.y"
{
	    yyval.i = yyvsp[0].i;
	  }
    break;
case 235:
#line 1680 "rcparse.y"
{
	    yyval.i = yyvsp[-1].i;
	  }
    break;
case 236:
#line 1684 "rcparse.y"
{
	    yyval.i.val = ~ yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[0].i.dword;
	  }
    break;
case 237:
#line 1689 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val * yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 238:
#line 1694 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val / yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 239:
#line 1699 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val % yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 240:
#line 1704 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val + yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 241:
#line 1709 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val - yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 242:
#line 1714 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val & yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 243:
#line 1719 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val ^ yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
case 244:
#line 1724 "rcparse.y"
{
	    yyval.i.val = yyvsp[-2].i.val | yyvsp[0].i.val;
	    yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword;
	  }
    break;
}

#line 705 "/usr/share/bison-1.35/bison.simple"


  yyvsp -= yylen;
  yyssp -= yylen;
#if YYLSP_NEEDED
  yylsp -= yylen;
#endif

#if YYDEBUG
  if (yydebug)
    {
      short *yyssp1 = yyss - 1;
      YYFPRINTF (stderr, "state stack now");
      while (yyssp1 != yyssp)
	YYFPRINTF (stderr, " %d", *++yyssp1);
      YYFPRINTF (stderr, "\n");
    }
#endif

  *++yyvsp = yyval;
#if YYLSP_NEEDED
  *++yylsp = yyloc;
#endif

  /* Now `shift' the result of the reduction.  Determine what state
     that goes to, based on the state we popped back to and the rule
     number reduced by.  */

  yyn = yyr1[yyn];

  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
    yystate = yytable[yystate];
  else
    yystate = yydefgoto[yyn - YYNTBASE];

  goto yynewstate;


/*------------------------------------.
| yyerrlab -- here on detecting error |
`------------------------------------*/
yyerrlab:
  /* If not already recovering from an error, report this error.  */
  if (!yyerrstatus)
    {
      ++yynerrs;

#ifdef YYERROR_VERBOSE
      yyn = yypact[yystate];

      if (yyn > YYFLAG && yyn < YYLAST)
	{
	  YYSIZE_T yysize = 0;
	  char *yymsg;
	  int yyx, yycount;

	  yycount = 0;
	  /* Start YYX at -YYN if negative to avoid negative indexes in
	     YYCHECK.  */
	  for (yyx = yyn < 0 ? -yyn : 0;
	       yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
	    if (yycheck[yyx + yyn] == yyx)
	      yysize += yystrlen (yytname[yyx]) + 15, yycount++;
	  yysize += yystrlen ("parse error, unexpected ") + 1;
	  yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
	  yymsg = (char *) YYSTACK_ALLOC (yysize);
	  if (yymsg != 0)
	    {
	      char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
	      yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);

	      if (yycount < 5)
		{
		  yycount = 0;
		  for (yyx = yyn < 0 ? -yyn : 0;
		       yyx < (int) (sizeof (yytname) / sizeof (char *));
		       yyx++)
		    if (yycheck[yyx + yyn] == yyx)
		      {
			const char *yyq = ! yycount ? ", expecting " : " or ";
			yyp = yystpcpy (yyp, yyq);
			yyp = yystpcpy (yyp, yytname[yyx]);
			yycount++;
		      }
		}
	      yyerror (yymsg);
	      YYSTACK_FREE (yymsg);
	    }
	  else
	    yyerror ("parse error; also virtual memory exhausted");
	}
      else
#endif /* defined (YYERROR_VERBOSE) */
	yyerror ("parse error");
    }
  goto yyerrlab1;


/*--------------------------------------------------.
| yyerrlab1 -- error raised explicitly by an action |
`--------------------------------------------------*/
yyerrlab1:
  if (yyerrstatus == 3)
    {
      /* If just tried and failed to reuse lookahead token after an
	 error, discard it.  */

      /* return failure if at end of input */
      if (yychar == YYEOF)
	YYABORT;
      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
		  yychar, yytname[yychar1]));
      yychar = YYEMPTY;
    }

  /* Else will try to reuse lookahead token after shifting the error
     token.  */

  yyerrstatus = 3;		/* Each real token shifted decrements this */

  goto yyerrhandle;


/*-------------------------------------------------------------------.
| yyerrdefault -- current state does not do anything special for the |
| error token.                                                       |
`-------------------------------------------------------------------*/
yyerrdefault:
#if 0
  /* This is wrong; only states that explicitly want error tokens
     should shift them.  */

  /* If its default is to accept any token, ok.  Otherwise pop it.  */
  yyn = yydefact[yystate];
  if (yyn)
    goto yydefault;
#endif


/*---------------------------------------------------------------.
| yyerrpop -- pop the current state because it cannot handle the |
| error token                                                    |
`---------------------------------------------------------------*/
yyerrpop:
  if (yyssp == yyss)
    YYABORT;
  yyvsp--;
  yystate = *--yyssp;
#if YYLSP_NEEDED
  yylsp--;
#endif

#if YYDEBUG
  if (yydebug)
    {
      short *yyssp1 = yyss - 1;
      YYFPRINTF (stderr, "Error: state stack now");
      while (yyssp1 != yyssp)
	YYFPRINTF (stderr, " %d", *++yyssp1);
      YYFPRINTF (stderr, "\n");
    }
#endif

/*--------------.
| yyerrhandle.  |
`--------------*/
yyerrhandle:
  yyn = yypact[yystate];
  if (yyn == YYFLAG)
    goto yyerrdefault;

  yyn += YYTERROR;
  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
    goto yyerrdefault;

  yyn = yytable[yyn];
  if (yyn < 0)
    {
      if (yyn == YYFLAG)
	goto yyerrpop;
      yyn = -yyn;
      goto yyreduce;
    }
  else if (yyn == 0)
    goto yyerrpop;

  if (yyn == YYFINAL)
    YYACCEPT;

  YYDPRINTF ((stderr, "Shifting error token, "));

  *++yyvsp = yylval;
#if YYLSP_NEEDED
  *++yylsp = yylloc;
#endif

  yystate = yyn;
  goto yynewstate;


/*-------------------------------------.
| yyacceptlab -- YYACCEPT comes here.  |
`-------------------------------------*/
yyacceptlab:
  yyresult = 0;
  goto yyreturn;

/*-----------------------------------.
| yyabortlab -- YYABORT comes here.  |
`-----------------------------------*/
yyabortlab:
  yyresult = 1;
  goto yyreturn;

/*---------------------------------------------.
| yyoverflowab -- parser overflow comes here.  |
`---------------------------------------------*/
yyoverflowlab:
  yyerror ("parser stack overflow");
  yyresult = 2;
  /* Fall through.  */

yyreturn:
#ifndef yyoverflow
  if (yyss != yyssa)
    YYSTACK_FREE (yyss);
#endif
  return yyresult;
}
#line 1730 "rcparse.y"


/* Set the language from the command line.  */

void
rcparse_set_language (lang)
     int lang;
{
  language = lang;
}
