Commit in reactos/lib/msi on MAIN
cond.tab.c+2022added 1.1
cond.tab.h+40added 1.1
sql.tab.c+2180added 1.1
sql.tab.h+165added 1.1
Makefile.ros-template+11-71.1 -> 1.2
action.c+3-31.1 -> 1.2
msi.c+31.1 -> 1.2
+4424-10
4 added + 3 modified, total 7 files
Fix and add missing files, and will allow the use of bison as an option of choice.

reactos/lib/msi
cond.tab.c added at 1.1
diff -N cond.tab.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cond.tab.c	3 Dec 2004 06:21:44 -0000	1.1
@@ -0,0 +1,2022 @@
+/* A Bison parser, made from ./cond.y
+   by GNU bison 1.35.  */
+
+#define YYBISON 1  /* Identify Bison output.  */
+
+#define yyparse COND_parse
+#define yylex COND_lex
+#define yyerror COND_error
+#define yylval COND_lval
+#define yychar COND_char
+#define yydebug COND_debug
+#define yynerrs COND_nerrs
+# define	COND_SPACE	257
+# define	COND_EOF	258
+# define	COND_OR	259
+# define	COND_AND	260
+# define	COND_NOT	261
+# define	COND_LT	262
+# define	COND_GT	263
+# define	COND_EQ	264
+# define	COND_LPAR	265
+# define	COND_RPAR	266
+# define	COND_TILDA	267
+# define	COND_PERCENT	268
+# define	COND_DOLLARS	269
+# define	COND_QUESTION	270
+# define	COND_AMPER	271
+# define	COND_EXCLAM	272
+# define	COND_IDENT	273
+# define	COND_NUMBER	274
+# define	COND_LITER	275
+# define	COND_ERROR	276
+
+#line 1 "./cond.y"
+
+
+/*
+ * Implementation of the Microsoft Installer (msi.dll)
+ *
+ * Copyright 2003 Mike McCormack for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "config.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+#include "wine/unicode.h"
+
+#include "msi.h"
+#include "msiquery.h"
+#include "msipriv.h"
+
+#define YYLEX_PARAM info
+#define YYPARSE_PARAM info
+
+static int COND_error(char *str);
+
+WINE_DEFAULT_DEBUG_CHANNEL(msi);
+
+typedef struct tag_yyinput
+{
+    MSIPACKAGE *package;
+    LPCWSTR str;
+    INT    n;
+    MSICONDITION result;
+} COND_input;
+
+struct cond_str {
+    LPCWSTR data;
+    INT len;
+};
+
+static LPWSTR COND_GetString( struct cond_str *str );
+static LPWSTR COND_GetLiteral( struct cond_str *str );
+static int COND_lex( void *COND_lval, COND_input *info);
+
+typedef INT (*comp_int)(INT a, INT b);
+typedef INT (*comp_str)(LPWSTR a, LPWSTR b, BOOL caseless);
+typedef INT (*comp_m1)(LPWSTR a,int b);
+typedef INT (*comp_m2)(int a,LPWSTR b);
+
+static INT comp_lt_i(INT a, INT b);
+static INT comp_gt_i(INT a, INT b);
+static INT comp_le_i(INT a, INT b);
+static INT comp_ge_i(INT a, INT b);
+static INT comp_eq_i(INT a, INT b);
+static INT comp_ne_i(INT a, INT b);
+static INT comp_bitand(INT a, INT b);
+static INT comp_highcomp(INT a, INT b);
+static INT comp_lowcomp(INT a, INT b);
+
+static INT comp_eq_s(LPWSTR a, LPWSTR b, BOOL casless);
+static INT comp_ne_s(LPWSTR a, LPWSTR b, BOOL casless);
+static INT comp_lt_s(LPWSTR a, LPWSTR b, BOOL casless);
+static INT comp_gt_s(LPWSTR a, LPWSTR b, BOOL casless);
+static INT comp_le_s(LPWSTR a, LPWSTR b, BOOL casless);
+static INT comp_ge_s(LPWSTR a, LPWSTR b, BOOL casless);
+static INT comp_substring(LPWSTR a, LPWSTR b, BOOL casless);
+static INT comp_start(LPWSTR a, LPWSTR b, BOOL casless);
+static INT comp_end(LPWSTR a, LPWSTR b, BOOL casless);
+
+static INT comp_eq_m1(LPWSTR a, INT b);
+static INT comp_ne_m1(LPWSTR a, INT b);
+static INT comp_lt_m1(LPWSTR a, INT b);
+static INT comp_gt_m1(LPWSTR a, INT b);
+static INT comp_le_m1(LPWSTR a, INT b);
+static INT comp_ge_m1(LPWSTR a, INT b);
+
+static INT comp_eq_m2(INT a, LPWSTR b);
+static INT comp_ne_m2(INT a, LPWSTR b);
+static INT comp_lt_m2(INT a, LPWSTR b);
+static INT comp_gt_m2(INT a, LPWSTR b);
+static INT comp_le_m2(INT a, LPWSTR b);
+static INT comp_ge_m2(INT a, LPWSTR b);
+
+
+#line 105 "./cond.y"
+#ifndef YYSTYPE
+typedef union
+{
+    struct cond_str str;
+    LPWSTR    string;
+    INT       value;
+    comp_int  fn_comp_int;
+    comp_str  fn_comp_str;
+    comp_m1   fn_comp_m1;
+    comp_m2   fn_comp_m2;
+} yystype;
+# define YYSTYPE yystype
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+
+
+#define	YYFINAL		74
+#define	YYFLAG		-32768
+#define	YYNTBASE	23
+
+/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
+#define YYTRANSLATE(x) ((unsigned)(x) <= 276 ? yytranslate[x] : 39)
+
+/* 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,     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,     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
+};
+
+#if YYDEBUG
+static const short yyprhs[] =
+{
+       0,     0,     2,     4,     8,    10,    14,    16,    19,    21,
+      23,    27,    31,    36,    40,    44,    48,    50,    53,    55,
+      57,    60,    63,    66,    69,    72,    74,    77,    79,    81,
+      84,    87,    90,    93,    96,    98,   101,   103,   105,   108,
+     111,   114,   117,   120,   122,   125,   127,   129,   132,   135,
+     138,   141,   144,   146,   148,   150,   152,   154,   157,   160,
+     163,   166,   168,   171,   173
+};
+static const short yyrhs[] =
+{
+      24,     0,    25,     0,    25,     5,    24,     0,    26,     0,
+      25,     6,    26,     0,    27,     0,     7,    27,     0,    32,
+       0,    33,     0,    32,    28,    32,     0,    33,    29,    33,
+       0,    33,    13,    29,    33,     0,    33,    30,    32,     0,
+      32,    31,    33,     0,    11,    24,    12,     0,    10,     0,
+       8,     9,     0,     8,     0,     9,     0,     8,    10,     0,
+       9,    10,     0,     9,     8,     0,     8,     8,     0,     9,
+       9,     0,    10,     0,     8,     9,     0,     8,     0,     9,
+       0,     8,    10,     0,     9,    10,     0,     9,     8,     0,
+       8,     8,     0,     9,     9,     0,    10,     0,     8,     9,
+       0,     8,     0,     9,     0,     8,    10,     0,     9,    10,
+       0,     9,     8,     0,     8,     8,     0,     9,     9,     0,
+      10,     0,     8,     9,     0,     8,     0,     9,     0,     8,
+      10,     0,     9,    10,     0,     9,     8,     0,     8,     8,
+       0,     9,     9,     0,    35,     0,    38,     0,    36,     0,
+      34,     0,    21,     0,    15,    37,     0,    16,    37,     0,
+      17,    37,     0,    18,    37,     0,    37,     0,    14,    37,
+       0,    19,     0,    20,     0
+};
+
+#endif
+
+#if YYDEBUG
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const short yyrline[] =
+{
+       0,   135,   143,   148,   154,   159,   165,   170,   177,   182,
+     186,   190,   194,   198,   202,   206,   212,   218,   222,   226,
+     230,   234,   239,   243,   247,   253,   259,   263,   267,   271,
+     275,   280,   284,   288,   294,   300,   304,   308,   312,   316,
+     321,   325,   329,   335,   341,   345,   349,   353,   357,   362,
+     366,   370,   376,   381,   387,   392,   398,   407,   417,   426,
+     435,   446,   462,   475,   484
+};
+#endif
+
+
+#if (YYDEBUG) || defined YYERROR_VERBOSE
+
+/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
+static const char *const yytname[] =
+{
+  "$", "error", "$undefined.", "COND_SPACE", "COND_EOF", "COND_OR", 
+  "COND_AND", "COND_NOT", "COND_LT", "COND_GT", "COND_EQ", "COND_LPAR", 
+  "COND_RPAR", "COND_TILDA", "COND_PERCENT", "COND_DOLLARS", 
+  "COND_QUESTION", "COND_AMPER", "COND_EXCLAM", "COND_IDENT", 
+  "COND_NUMBER", "COND_LITER", "COND_ERROR", "condition", "expression", 
+  "boolean_term", "boolean_factor", "term", "comp_op_i", "comp_op_s", 
+  "comp_op_m1", "comp_op_m2", "value_i", "value_s", "literal", "symbol_i", 
+  "symbol_s", "identifier", "integer", 0
+};
+#endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const short yyr1[] =
+{
+       0,    23,    24,    24,    25,    25,    26,    26,    27,    27,
+      27,    27,    27,    27,    27,    27,    28,    28,    28,    28,
+      28,    28,    28,    28,    28,    29,    29,    29,    29,    29,
+      29,    29,    29,    29,    30,    30,    30,    30,    30,    30,
+      30,    30,    30,    31,    31,    31,    31,    31,    31,    31,
+      31,    31,    32,    32,    33,    33,    34,    35,    35,    35,
+      35,    36,    36,    37,    38
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const short yyr2[] =
+{
+       0,     1,     1,     3,     1,     3,     1,     2,     1,     1,
+       3,     3,     4,     3,     3,     3,     1,     2,     1,     1,
+       2,     2,     2,     2,     2,     1,     2,     1,     1,     2,
+       2,     2,     2,     2,     1,     2,     1,     1,     2,     2,
+       2,     2,     2,     1,     2,     1,     1,     2,     2,     2,
+       2,     2,     1,     1,     1,     1,     1,     2,     2,     2,
+       2,     1,     2,     1,     1
+};
+
+/* 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[] =
+{
+       0,     0,     0,     0,     0,     0,     0,     0,    63,    64,
+      56,     1,     2,     4,     6,     8,     9,    55,    52,    54,
+      61,    53,     7,     0,    62,    57,    58,    59,    60,     0,
+       0,    18,    19,    16,     0,     0,    36,    37,    34,     0,
+       0,     0,    15,     3,     5,    23,    17,    20,    22,    24,
+      21,    10,    14,    41,    35,    38,    40,    42,    39,    27,
+      28,    25,     0,    11,    13,    32,    26,    29,    31,    33,
+      30,    12,     0,     0,     0
+};
+
+static const short yydefgoto[] =
+{
+      72,    11,    12,    13,    14,    34,    40,    41,    35,    15,
+      16,    17,    18,    19,    20,    21
+};
+
+static const short yypact[] =
+{
+      -5,    50,    -5,   -12,   -12,   -12,   -12,   -12,-32768,-32768,
+  -32768,-32768,    -2,-32768,-32768,    48,   123,-32768,-32768,-32768,
+  -32768,-32768,-32768,    -4,-32768,-32768,-32768,-32768,-32768,    -5,
+      -5,    10,    24,    33,   110,    58,    27,    41,    59,   135,
+      58,   110,-32768,-32768,-32768,    62,    68,    71,    72,    80,
+      81,-32768,-32768,    84,    90,    93,    94,   102,   103,   138,
+     141,-32768,    58,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+  -32768,-32768,    17,    21,-32768
+};
+
+static const short yypgoto[] =
+{
+  -32768,    -1,-32768,    -8,    25,-32768,   -14,-32768,-32768,   -11,
+     -35,-32768,-32768,-32768,   134,-32768
+};
+
+
+#define	YYLAST		151
+
+
+static const short yytable[] =
+{
+      52,    23,     1,    29,    30,    63,     2,     8,    42,     3,
+       4,     5,     6,     7,     8,     9,    10,    73,    45,    46,
+      47,    74,    44,    51,   -45,    62,    22,    71,    43,   -45,
+      64,   -45,    48,    49,    50,    53,    54,    55,   -46,     0,
+       0,   -27,     0,   -46,     0,   -46,   -27,   -43,   -27,    56,
+      57,    58,   -43,     0,   -43,   -28,    31,    32,    33,     0,
+     -28,     2,   -28,     0,     3,     4,     5,     6,     7,     8,
+       9,    10,     3,   -25,     0,     0,   -50,     8,   -25,    10,
+     -25,   -50,   -44,   -50,     0,   -47,   -49,   -44,     0,   -44,
+     -47,   -49,   -47,   -49,   -51,   -48,     0,     0,   -32,   -51,
+     -48,   -51,   -48,   -32,   -26,   -32,     0,   -29,   -31,   -26,
+       0,   -26,   -29,   -31,   -29,   -31,   -33,   -30,     0,     0,
+       0,   -33,   -30,   -33,   -30,     4,     5,     6,     7,     0,
+       9,    36,    37,    38,     0,     0,    39,    24,    25,    26,
+      27,    28,     0,    59,    60,    61,    65,    66,    67,    68,
+      69,    70
+};
+
+static const short yycheck[] =
+{
+      35,     2,     7,     5,     6,    40,    11,    19,    12,    14,
+      15,    16,    17,    18,    19,    20,    21,     0,     8,     9,
+      10,     0,    30,    34,    14,    39,     1,    62,    29,    19,
+      41,    21,     8,     9,    10,     8,     9,    10,    14,    -1,
+      -1,    14,    -1,    19,    -1,    21,    19,    14,    21,     8,
+       9,    10,    19,    -1,    21,    14,     8,     9,    10,    -1,
+      19,    11,    21,    -1,    14,    15,    16,    17,    18,    19,
+      20,    21,    14,    14,    -1,    -1,    14,    19,    19,    21,
+      21,    19,    14,    21,    -1,    14,    14,    19,    -1,    21,
+      19,    19,    21,    21,    14,    14,    -1,    -1,    14,    19,
+      19,    21,    21,    19,    14,    21,    -1,    14,    14,    19,
+      -1,    21,    19,    19,    21,    21,    14,    14,    -1,    -1,
+      -1,    19,    19,    21,    21,    15,    16,    17,    18,    -1,
+      20,     8,     9,    10,    -1,    -1,    13,     3,     4,     5,
+       6,     7,    -1,     8,     9,    10,     8,     9,    10,     8,
+       9,    10
+};
+#define YYPURE 1
+
+/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+#line 3 "/usr/share/bison/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/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;
+    }
[truncated at 1000 lines; 1026 more skipped]

reactos/lib/msi
cond.tab.h added at 1.1
diff -N cond.tab.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cond.tab.h	3 Dec 2004 06:21:44 -0000	1.1
@@ -0,0 +1,40 @@
+#ifndef BISON_COND_TAB_H
+# define BISON_COND_TAB_H
+
+#ifndef YYSTYPE
+typedef union
+{
+    struct cond_str str;
+    LPWSTR    string;
+    INT       value;
+    comp_int  fn_comp_int;
+    comp_str  fn_comp_str;
+    comp_m1   fn_comp_m1;
+    comp_m2   fn_comp_m2;
+} yystype;
+# define YYSTYPE yystype
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+# define	COND_SPACE	257
+# define	COND_EOF	258
+# define	COND_OR	259
+# define	COND_AND	260
+# define	COND_NOT	261
+# define	COND_LT	262
+# define	COND_GT	263
+# define	COND_EQ	264
+# define	COND_LPAR	265
+# define	COND_RPAR	266
+# define	COND_TILDA	267
+# define	COND_PERCENT	268
+# define	COND_DOLLARS	269
+# define	COND_QUESTION	270
+# define	COND_AMPER	271
+# define	COND_EXCLAM	272
+# define	COND_IDENT	273
+# define	COND_NUMBER	274
+# define	COND_LITER	275
+# define	COND_ERROR	276
+
+
+#endif /* not BISON_COND_TAB_H */

reactos/lib/msi
sql.tab.c added at 1.1
diff -N sql.tab.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ sql.tab.c	3 Dec 2004 06:21:44 -0000	1.1
@@ -0,0 +1,2180 @@
+/* A Bison parser, made from ./sql.y
+   by GNU bison 1.35.  */
+
+#define YYBISON 1  /* Identify Bison output.  */
+
+#define yyparse SQL_parse
+#define yylex SQL_lex
+#define yyerror SQL_error
+#define yylval SQL_lval
+#define yychar SQL_char
+#define yydebug SQL_debug
+#define yynerrs SQL_nerrs
+# define	TK_ABORT	257
+# define	TK_AFTER	258
+# define	TK_AGG_FUNCTION	259
+# define	TK_ALL	260
+# define	TK_AND	261
+# define	TK_AS	262
+# define	TK_ASC	263
+# define	TK_BEFORE	264
+# define	TK_BEGIN	265
+# define	TK_BETWEEN	266
+# define	TK_BITAND	267
+# define	TK_BITNOT	268
+# define	TK_BITOR	269
+# define	TK_BY	270
+# define	TK_CASCADE	271
+# define	TK_CASE	272
+# define	TK_CHAR	273
+# define	TK_CHECK	274
+# define	TK_CLUSTER	275
+# define	TK_COLLATE	276
+# define	TK_COLUMN	277
+# define	TK_COMMA	278
+# define	TK_COMMENT	279
+# define	TK_COMMIT	280
+# define	TK_CONCAT	281
+# define	TK_CONFLICT	282
+# define	TK_CONSTRAINT	283
+# define	TK_COPY	284
+# define	TK_CREATE	285
+# define	TK_DEFAULT	286
+# define	TK_DEFERRABLE	287
+# define	TK_DEFERRED	288
+# define	TK_DELETE	289
+# define	TK_DELIMITERS	290
+# define	TK_DESC	291
+# define	TK_DISTINCT	292
+# define	TK_DOT	293
+# define	TK_DROP	294
+# define	TK_EACH	295
+# define	TK_ELSE	296
+# define	TK_END	297
+# define	TK_END_OF_FILE	298
+# define	TK_EQ	299
+# define	TK_EXCEPT	300
+# define	TK_EXPLAIN	301
+# define	TK_FAIL	302
+# define	TK_FLOAT	303
+# define	TK_FOR	304
+# define	TK_FOREIGN	305
+# define	TK_FROM	306
+# define	TK_FUNCTION	307
+# define	TK_GE	308
+# define	TK_GLOB	309
+# define	TK_GROUP	310
+# define	TK_GT	311
+# define	TK_HAVING	312
+# define	TK_HOLD	313
+# define	TK_IGNORE	314
+# define	TK_ILLEGAL	315
+# define	TK_IMMEDIATE	316
+# define	TK_IN	317
+# define	TK_INDEX	318
+# define	TK_INITIALLY	319
+# define	TK_ID	320
+# define	TK_INSERT	321
+# define	TK_INSTEAD	322
+# define	TK_INT	323
+# define	TK_INTEGER	324
+# define	TK_INTERSECT	325
+# define	TK_INTO	326
+# define	TK_IS	327
+# define	TK_ISNULL	328
+# define	TK_JOIN	329
+# define	TK_JOIN_KW	330
+# define	TK_KEY	331
+# define	TK_LE	332
+# define	TK_LIKE	333
+# define	TK_LIMIT	334
+# define	TK_LONG	335
+# define	TK_LONGCHAR	336
+# define	TK_LP	337
+# define	TK_LSHIFT	338
+# define	TK_LT	339
+# define	TK_LOCALIZABLE	340
+# define	TK_MATCH	341
+# define	TK_MINUS	342
+# define	TK_NE	343
+# define	TK_NOT	344
+# define	TK_NOTNULL	345
+# define	TK_NULL	346
+# define	TK_OBJECT	347
+# define	TK_OF	348
+# define	TK_OFFSET	349
+# define	TK_ON	350
+# define	TK_OR	351
+# define	TK_ORACLE_OUTER_JOIN	352
+# define	TK_ORDER	353
+# define	TK_PLUS	354
+# define	TK_PRAGMA	355
+# define	TK_PRIMARY	356
+# define	TK_RAISE	357
+# define	TK_REFERENCES	358
+# define	TK_REM	359
+# define	TK_REPLACE	360
+# define	TK_RESTRICT	361
+# define	TK_ROLLBACK	362
+# define	TK_ROW	363
+# define	TK_RP	364
+# define	TK_RSHIFT	365
+# define	TK_SELECT	366
+# define	TK_SEMI	367
+# define	TK_SET	368
+# define	TK_SHORT	369
+# define	TK_SLASH	370
+# define	TK_SPACE	371
+# define	TK_STAR	372
+# define	TK_STATEMENT	373
+# define	TK_STRING	374
+# define	TK_TABLE	375
+# define	TK_TEMP	376
+# define	TK_THEN	377
+# define	TK_TRANSACTION	378
+# define	TK_TRIGGER	379
+# define	TK_UMINUS	380
+# define	TK_UNCLOSED_STRING	381
+# define	TK_UNION	382
+# define	TK_UNIQUE	383
+# define	TK_UPDATE	384
+# define	TK_UPLUS	385
+# define	TK_USING	386
+# define	TK_VACUUM	387
+# define	TK_VALUES	388
+# define	TK_VIEW	389
+# define	TK_WHEN	390
+# define	TK_WHERE	391
+# define	TK_WILDCARD	392
+# define	END_OF_FILE	393
+# define	ILLEGAL	394
+# define	SPACE	395
+# define	UNCLOSED_STRING	396
+# define	COMMENT	397
+# define	FUNCTION	398
+# define	COLUMN	399
+
+#line 1 "./sql.y"
+
+
+/*
+ * Implementation of the Microsoft Installer (msi.dll)
+ *
+ * Copyright 2002-2004 Mike McCormack for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#include "config.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "query.h"
+#include "wine/debug.h"
+#include "wine/unicode.h"
+
+#define YYLEX_PARAM info
+#define YYPARSE_PARAM info
+
+extern int SQL_error(const char *str);
+
+WINE_DEFAULT_DEBUG_CHANNEL(msi);
+
+typedef struct tag_SQL_input
+{
+    MSIDATABASE *db;
+    LPCWSTR command;
+    DWORD n, len;
+    MSIVIEW **view;  /* view structure for the resulting query */
+} SQL_input;
+
+static LPWSTR SQL_getstring( struct sql_str *str );
+static INT SQL_getint( SQL_input *sql );
+static int SQL_lex( void *SQL_lval, SQL_input *info);
+
+static MSIVIEW *do_one_select( MSIDATABASE *db, MSIVIEW *in, 
+                               string_list *columns );
+static MSIVIEW *do_order_by( MSIDATABASE *db, MSIVIEW *in, 
+                             string_list *columns );
+
+static BOOL SQL_MarkPrimaryKeys( create_col_info *cols,
+                                 string_list *keys);
+
+static struct expr * EXPR_complex( struct expr *l, UINT op, struct expr *r );
+static struct expr * EXPR_column( LPWSTR );
+static struct expr * EXPR_ival( struct sql_str *);
+static struct expr * EXPR_sval( struct sql_str *);
+static struct expr * EXPR_wildcard();
+
+
+#line 73 "./sql.y"
+#ifndef YYSTYPE
+typedef union
+{
+    struct sql_str str;
+    LPWSTR string;
+    string_list *column_list;
+    value_list *val_list;
+    MSIVIEW *query;
+    struct expr *expr;
+    USHORT column_type;
+    create_col_info *column_info;
+    column_assignment update_col_info;
+} yystype;
+# define YYSTYPE yystype
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+
+
+#define	YYFINAL		121
+#define	YYFLAG		-32768
+#define	YYNTBASE	147
+
+/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
+#define YYTRANSLATE(x) ((unsigned)(x) <= 400 ? yytranslate[x] : 171)
+
+/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
+static const short 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,     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,     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,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146
+};
+
+#if YYDEBUG
+static const short yyprhs[] =
+{
+       0,     0,     2,     4,     6,     8,    19,    31,    38,    46,
+      53,    58,    63,    66,    68,    71,    73,    77,    79,    84,
+      86,    88,    90,    92,    94,    96,   101,   103,   107,   112,
+     114,   118,   120,   123,   128,   132,   136,   140,   144,   148,
+     152,   156,   160,   164,   168,   172,   177,   179,   181,   183,
+     187,   189,   193,   197,   199,   201,   203,   205,   209,   211,
+     213,   215
+};
+static const short yyrhs[] =
+{
+     157,     0,   149,     0,   148,     0,   150,     0,    67,    72,
+     169,    83,   159,   110,   134,    83,   163,   110,     0,    67,
+      72,   169,    83,   159,   110,   134,    83,   163,   110,   122,
+       0,    31,   121,   169,    83,   151,   110,     0,    31,   121,
+     169,    83,   151,   110,    59,     0,   130,   169,   114,   164,
+     137,   161,     0,   152,   102,    77,   159,     0,   152,    24,
+     168,   153,     0,   168,   153,     0,   154,     0,   154,    86,
+       0,   155,     0,   155,    90,    92,     0,    19,     0,    19,
+      83,   156,   110,     0,    82,     0,   115,     0,    69,     0,
+      81,     0,    93,     0,    70,     0,   158,    99,    16,   159,
+       0,   158,     0,   112,   159,   160,     0,   112,    38,   159,
+     160,     0,   168,     0,   168,    24,   159,     0,   118,     0,
+      52,   169,     0,    52,   169,   137,   161,     0,    83,   161,
+     110,     0,   167,    45,   167,     0,   161,     7,   161,     0,
+     161,    97,   161,     0,   167,    45,   162,     0,   167,    57,
+     162,     0,   167,    85,   162,     0,   167,    78,   162,     0,
+     167,    54,   162,     0,   167,    89,   162,     0,   167,    73,
+      92,     0,   167,    73,    90,    92,     0,   167,     0,   166,
+       0,   166,     0,   163,    24,   166,     0,   165,     0,   165,
+      24,   164,     0,   168,    45,   166,     0,    70,     0,   120,
+       0,   138,     0,   168,     0,   169,    39,   170,     0,   170,
+       0,   170,     0,    66,     0,   120,     0
+};
+
+#endif
+
+#if YYDEBUG
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const short yyrline[] =
+{
+       0,   141,   147,   152,   157,   164,   173,   183,   194,   206,
+     217,   227,   247,   258,   263,   270,   275,   281,   286,   290,
+     294,   298,   302,   306,   312,   323,   335,   338,   353,   370,
+     384,   397,   403,   415,   433,   438,   442,   446,   450,   454,
+     458,   462,   466,   470,   474,   478,   484,   486,   489,   502,
+     517,   519,   527,   543,   548,   552,   558,   565,   570,   576,
+     583,   588
+};
+#endif
+
+
+#if (YYDEBUG) || defined YYERROR_VERBOSE
+
+/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
+static const char *const yytname[] =
+{
+  "$", "error", "$undefined.", "TK_ABORT", "TK_AFTER", "TK_AGG_FUNCTION", 
+  "TK_ALL", "TK_AND", "TK_AS", "TK_ASC", "TK_BEFORE", "TK_BEGIN", 
+  "TK_BETWEEN", "TK_BITAND", "TK_BITNOT", "TK_BITOR", "TK_BY", 
+  "TK_CASCADE", "TK_CASE", "TK_CHAR", "TK_CHECK", "TK_CLUSTER", 
+  "TK_COLLATE", "TK_COLUMN", "TK_COMMA", "TK_COMMENT", "TK_COMMIT", 
+  "TK_CONCAT", "TK_CONFLICT", "TK_CONSTRAINT", "TK_COPY", "TK_CREATE", 
+  "TK_DEFAULT", "TK_DEFERRABLE", "TK_DEFERRED", "TK_DELETE", 
+  "TK_DELIMITERS", "TK_DESC", "TK_DISTINCT", "TK_DOT", "TK_DROP", 
+  "TK_EACH", "TK_ELSE", "TK_END", "TK_END_OF_FILE", "TK_EQ", "TK_EXCEPT", 
+  "TK_EXPLAIN", "TK_FAIL", "TK_FLOAT", "TK_FOR", "TK_FOREIGN", "TK_FROM", 
+  "TK_FUNCTION", "TK_GE", "TK_GLOB", "TK_GROUP", "TK_GT", "TK_HAVING", 
+  "TK_HOLD", "TK_IGNORE", "TK_ILLEGAL", "TK_IMMEDIATE", "TK_IN", 
+  "TK_INDEX", "TK_INITIALLY", "TK_ID", "TK_INSERT", "TK_INSTEAD", 
+  "TK_INT", "TK_INTEGER", "TK_INTERSECT", "TK_INTO", "TK_IS", "TK_ISNULL", 
+  "TK_JOIN", "TK_JOIN_KW", "TK_KEY", "TK_LE", "TK_LIKE", "TK_LIMIT", 
+  "TK_LONG", "TK_LONGCHAR", "TK_LP", "TK_LSHIFT", "TK_LT", 
+  "TK_LOCALIZABLE", "TK_MATCH", "TK_MINUS", "TK_NE", "TK_NOT", 
+  "TK_NOTNULL", "TK_NULL", "TK_OBJECT", "TK_OF", "TK_OFFSET", "TK_ON", 
+  "TK_OR", "TK_ORACLE_OUTER_JOIN", "TK_ORDER", "TK_PLUS", "TK_PRAGMA", 
+  "TK_PRIMARY", "TK_RAISE", "TK_REFERENCES", "TK_REM", "TK_REPLACE", 
+  "TK_RESTRICT", "TK_ROLLBACK", "TK_ROW", "TK_RP", "TK_RSHIFT", 
+  "TK_SELECT", "TK_SEMI", "TK_SET", "TK_SHORT", "TK_SLASH", "TK_SPACE", 
+  "TK_STAR", "TK_STATEMENT", "TK_STRING", "TK_TABLE", "TK_TEMP", 
+  "TK_THEN", "TK_TRANSACTION", "TK_TRIGGER", "TK_UMINUS", 
+  "TK_UNCLOSED_STRING", "TK_UNION", "TK_UNIQUE", "TK_UPDATE", "TK_UPLUS", 
+  "TK_USING", "TK_VACUUM", "TK_VALUES", "TK_VIEW", "TK_WHEN", "TK_WHERE", 
+  "TK_WILDCARD", "END_OF_FILE", "ILLEGAL", "SPACE", "UNCLOSED_STRING", 
+  "COMMENT", "FUNCTION", "COLUMN", "AGG_FUNCTION.", "onequery", 
+  "oneinsert", "onecreate", "oneupdate", "table_def", "column_def", 
+  "column_type", "data_type_l", "data_type", "data_count", "oneselect", 
+  "unorderedsel", "selcollist", "from", "expr", "val", "constlist", 
+  "update_assign_list", "column_assignment", "const_val", "column_val", 
+  "column", "table", "string_or_id", 0
+};
+#endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const short yyr1[] =
+{
+       0,   147,   147,   147,   147,   148,   148,   149,   149,   150,
+     151,   152,   152,   153,   153,   154,   154,   155,   155,   155,
+     155,   155,   155,   155,   156,   157,   157,   158,   158,   159,
+     159,   159,   160,   160,   161,   161,   161,   161,   161,   161,
+     161,   161,   161,   161,   161,   161,   162,   162,   163,   163,
+     164,   164,   165,   166,   166,   166,   167,   168,   168,   169,
+     170,   170
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const short yyr2[] =
+{
+       0,     1,     1,     1,     1,    10,    11,     6,     7,     6,
+       4,     4,     2,     1,     2,     1,     3,     1,     4,     1,
+       1,     1,     1,     1,     1,     4,     1,     3,     4,     1,
+       3,     1,     2,     4,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     4,     1,     1,     1,     3,
+       1,     3,     3,     1,     1,     1,     1,     3,     1,     1,
+       1,     1
+};
+
+/* 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[] =
+{
+       0,     0,     0,     0,     0,     3,     2,     4,     1,    26,
+       0,     0,     0,    60,    31,    61,     0,    29,     0,    58,
+       0,    59,     0,     0,     0,     0,     0,    27,     0,     0,
+       0,     0,     0,     0,    28,    32,    30,    57,     0,    50,
+       0,    25,     0,     0,     0,     0,     0,     0,     0,     0,
+       7,     0,     0,    17,    21,    22,    19,    23,    20,    12,
+      13,    15,     0,     0,    33,     0,    56,     9,    51,    53,
+      54,    55,    52,     8,     0,     0,     0,    14,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      11,    10,    24,     0,    16,     0,    34,    36,    37,    54,
+      38,    47,    35,    42,    46,    39,     0,    44,    41,    40,
+      43,    18,     0,    48,    45,     0,     5,    49,     6,     0,
+       0,     0
+};
+
+static const short yydefgoto[] =
+{
+     119,     5,     6,     7,    42,    43,    59,    60,    61,    93,
+       8,     9,    16,    27,    64,   100,   112,    38,    39,   101,
+      65,    66,    18,    19
+};
+
+static const short yypact[] =
+{
+     -30,  -113,   -49,   -34,   -50,-32768,-32768,-32768,-32768,   -79,
+     -50,   -50,   -52,-32768,-32768,-32768,   -25,     4,   -10,     0,
+     -72,-32768,    30,   -36,   -35,   -25,   -50,-32768,   -52,   -50,
+     -50,   -52,   -50,   -52,-32768,   -87,-32768,-32768,   -84,    33,
+      13,-32768,   -51,   -15,   -17,   -41,   -53,   -53,   -50,   -58,
+       1,   -50,    -5,    -8,-32768,-32768,-32768,-32768,-32768,-32768,
+     -13,    -9,   -57,   -53,    -4,    47,-32768,    -4,-32768,-32768,
+  -32768,-32768,-32768,-32768,   -17,   -52,    18,-32768,    -3,    11,
+      -7,   -53,   -53,   -59,   -59,   -59,   -71,   -59,   -59,   -59,
+  -32768,-32768,-32768,   -14,-32768,   -58,-32768,    -4,    -4,    56,
+  -32768,-32768,-32768,-32768,-32768,-32768,     5,-32768,-32768,-32768,
+  -32768,-32768,   -19,-32768,-32768,   -58,   -23,-32768,-32768,   102,
+     108,-32768
+};
+
+static const short yypgoto[] =
+{
+  -32768,-32768,-32768,-32768,-32768,-32768,    40,-32768,-32768,-32768,
+  -32768,-32768,    10,    93,   -37,    28,-32768,    71,-32768,   -32,
+      22,     3,    14,    45
+};
+
+
+#define	YYLAST		136
+
+
+static const short yytable[] =
+{
+      81,     1,    53,    81,    12,   115,    17,    13,    10,    51,
+      67,    69,    69,    13,    13,    17,    13,    72,    20,   106,
+      22,   107,    25,    11,    23,    24,    80,    26,    28,    29,
+      63,    17,    13,    40,    17,    44,    17,     2,    36,   -59,
+      35,    41,    30,    45,    97,    98,    31,    32,    33,    21,
+      46,    40,    54,    47,    74,    21,    21,    48,    49,    50,
+      73,    99,    70,   113,    55,    56,    14,    15,    15,    62,
+      15,    21,    75,    77,    37,    76,    57,    79,    17,    71,
+      71,    78,     3,   117,    14,    91,    15,    52,    92,    94,
+      82,   116,    83,    82,    95,   -61,   111,   114,    58,   118,
+       4,    84,   120,    96,    85,   102,   104,   104,   121,   104,
+     104,   104,   103,   105,    90,   108,   109,   110,    34,    68,
+      86,     0,     0,     0,     0,    87,     0,     0,     0,     0,
+       0,     0,    88,     0,     0,     0,    89
+};
+
+static const short yycheck[] =
+{
+       7,    31,    19,     7,    38,    24,     3,    66,   121,    24,
+      47,    70,    70,    66,    66,    12,    66,    49,     4,    90,
+      99,    92,    12,    72,    10,    11,    63,    52,    24,    39,
+      83,    28,    66,    30,    31,    32,    33,    67,    28,    39,
+      26,    31,   114,    33,    81,    82,    16,    83,    83,     4,
+     137,    48,    69,   137,    51,    10,    11,    24,    45,   110,
+      59,   120,   120,    95,    81,    82,   118,   120,   120,   110,
+     120,    26,    77,    86,    29,    83,    93,   134,    75,   138,
+     138,    90,   112,   115,   118,    75,   120,   102,    70,    92,
+      97,   110,    45,    97,    83,    39,   110,    92,   115,   122,
+     130,    54,     0,   110,    57,    83,    84,    85,     0,    87,
+      88,    89,    84,    85,    74,    87,    88,    89,    25,    48,
+      73,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,
+      -1,    -1,    85,    -1,    -1,    -1,    89
+};
+#define YYPURE 1
+
+/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+#line 3 "/usr/share/bison/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/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
[truncated at 1000 lines; 1184 more skipped]

reactos/lib/msi
sql.tab.h added at 1.1
diff -N sql.tab.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ sql.tab.h	3 Dec 2004 06:21:44 -0000	1.1
@@ -0,0 +1,165 @@
+#ifndef BISON_SQL_TAB_H
+# define BISON_SQL_TAB_H
+
+#ifndef YYSTYPE
+typedef union
+{
+    struct sql_str str;
+    LPWSTR string;
+    string_list *column_list;
+    value_list *val_list;
+    MSIVIEW *query;
+    struct expr *expr;
+    USHORT column_type;
+    create_col_info *column_info;
+    column_assignment update_col_info;
+} yystype;
+# define YYSTYPE yystype
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+# define	TK_ABORT	257
+# define	TK_AFTER	258
+# define	TK_AGG_FUNCTION	259
+# define	TK_ALL	260
+# define	TK_AND	261
+# define	TK_AS	262
+# define	TK_ASC	263
+# define	TK_BEFORE	264
+# define	TK_BEGIN	265
+# define	TK_BETWEEN	266
+# define	TK_BITAND	267
+# define	TK_BITNOT	268
+# define	TK_BITOR	269
+# define	TK_BY	270
+# define	TK_CASCADE	271
+# define	TK_CASE	272
+# define	TK_CHAR	273
+# define	TK_CHECK	274
+# define	TK_CLUSTER	275
+# define	TK_COLLATE	276
+# define	TK_COLUMN	277
+# define	TK_COMMA	278
+# define	TK_COMMENT	279
+# define	TK_COMMIT	280
+# define	TK_CONCAT	281
+# define	TK_CONFLICT	282
+# define	TK_CONSTRAINT	283
+# define	TK_COPY	284
+# define	TK_CREATE	285
+# define	TK_DEFAULT	286
+# define	TK_DEFERRABLE	287
+# define	TK_DEFERRED	288
+# define	TK_DELETE	289
+# define	TK_DELIMITERS	290
+# define	TK_DESC	291
+# define	TK_DISTINCT	292
+# define	TK_DOT	293
+# define	TK_DROP	294
+# define	TK_EACH	295
+# define	TK_ELSE	296
+# define	TK_END	297
+# define	TK_END_OF_FILE	298
+# define	TK_EQ	299
+# define	TK_EXCEPT	300
+# define	TK_EXPLAIN	301
+# define	TK_FAIL	302
+# define	TK_FLOAT	303
+# define	TK_FOR	304
+# define	TK_FOREIGN	305
+# define	TK_FROM	306
+# define	TK_FUNCTION	307
+# define	TK_GE	308
+# define	TK_GLOB	309
+# define	TK_GROUP	310
+# define	TK_GT	311
+# define	TK_HAVING	312
+# define	TK_HOLD	313
+# define	TK_IGNORE	314
+# define	TK_ILLEGAL	315
+# define	TK_IMMEDIATE	316
+# define	TK_IN	317
+# define	TK_INDEX	318
+# define	TK_INITIALLY	319
+# define	TK_ID	320
+# define	TK_INSERT	321
+# define	TK_INSTEAD	322
+# define	TK_INT	323
+# define	TK_INTEGER	324
+# define	TK_INTERSECT	325
+# define	TK_INTO	326
+# define	TK_IS	327
+# define	TK_ISNULL	328
+# define	TK_JOIN	329
+# define	TK_JOIN_KW	330
+# define	TK_KEY	331
+# define	TK_LE	332
+# define	TK_LIKE	333
+# define	TK_LIMIT	334
+# define	TK_LONG	335
+# define	TK_LONGCHAR	336
+# define	TK_LP	337
+# define	TK_LSHIFT	338
+# define	TK_LT	339
+# define	TK_LOCALIZABLE	340
+# define	TK_MATCH	341
+# define	TK_MINUS	342
+# define	TK_NE	343
+# define	TK_NOT	344
+# define	TK_NOTNULL	345
+# define	TK_NULL	346
+# define	TK_OBJECT	347
+# define	TK_OF	348
+# define	TK_OFFSET	349
+# define	TK_ON	350
+# define	TK_OR	351
+# define	TK_ORACLE_OUTER_JOIN	352
+# define	TK_ORDER	353
+# define	TK_PLUS	354
+# define	TK_PRAGMA	355
+# define	TK_PRIMARY	356
+# define	TK_RAISE	357
+# define	TK_REFERENCES	358
+# define	TK_REM	359
+# define	TK_REPLACE	360
+# define	TK_RESTRICT	361
+# define	TK_ROLLBACK	362
+# define	TK_ROW	363
+# define	TK_RP	364
+# define	TK_RSHIFT	365
+# define	TK_SELECT	366
+# define	TK_SEMI	367
+# define	TK_SET	368
+# define	TK_SHORT	369
+# define	TK_SLASH	370
+# define	TK_SPACE	371
+# define	TK_STAR	372
+# define	TK_STATEMENT	373
+# define	TK_STRING	374
+# define	TK_TABLE	375
+# define	TK_TEMP	376
+# define	TK_THEN	377
+# define	TK_TRANSACTION	378
+# define	TK_TRIGGER	379
+# define	TK_UMINUS	380
+# define	TK_UNCLOSED_STRING	381
+# define	TK_UNION	382
+# define	TK_UNIQUE	383
+# define	TK_UPDATE	384
+# define	TK_UPLUS	385
+# define	TK_USING	386
+# define	TK_VACUUM	387
+# define	TK_VALUES	388
+# define	TK_VIEW	389
+# define	TK_WHEN	390
+# define	TK_WHERE	391
+# define	TK_WILDCARD	392
+# define	END_OF_FILE	393
+# define	ILLEGAL	394
+# define	SPACE	395
+# define	UNCLOSED_STRING	396
+# define	COMMENT	397
+# define	FUNCTION	398
+# define	COLUMN	399
+
+
+#endif /* not BISON_SQL_TAB_H */

reactos/lib/msi
Makefile.ros-template 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- Makefile.ros-template	30 Nov 2004 19:10:50 -0000	1.1
+++ Makefile.ros-template	3 Dec 2004 06:21:44 -0000	1.2
@@ -4,9 +4,9 @@
 
 TARGET_OBJECTS = @C_SRCS@ @EXTRA_OBJS@
 
-TARGET_CFLAGS = -D__REACTOS__ @EXTRADEFS@
+TARGET_CFLAGS = @EXTRADEFS@ -D__REACTOS__
 
-TARGET_SDKLIBS = @IMPORTS@ libwine.a wine_uuid.a ntdll.a
+TARGET_SDKLIBS = @IMPORTS@ winmm.a libwine.a wine_uuid.a libwine_unicode.a ntdll.a
 
 TARGET_BASE = $(TARGET_BASE_LIB_WINMM)
 
@@ -14,7 +14,7 @@
 TARGET_RC_BINSRC = @RC_BINSRC@
 TARGET_RC_BINARIES = @RC_BINARIES@
 
-TARGET_CLEAN = *.tab.c *.tab.h
+#TARGET_CLEAN = *.tab.c *.tab.h
 
 default: all
 
@@ -23,13 +23,17 @@
 include $(TOOLS_PATH)/depend.mk
 
 #
+#	Optional use of bison, this will allow independent building from
+#	Wine.
+#
 #	Bison is requiered for building msi.dll. If MingW32 for windows,
 #	download bison from http://gnuwin32.sourceforge.net/
 #	Make sure bison.exe is placed in your command path for execution.
 #
 #
-sql.tab.c sql.tab.h: sql.y
-	bison -p SQL_ -d ./sql.y -o sql.tab.c
 
-cond.tab.c cond.tab.h: cond.y
-	bison -p COND_ -d ./cond.y -o cond.tab.c
+#sql.tab.c sql.tab.h: sql.y
+#	bison -p SQL_ -d ./sql.y -o sql.tab.c
+
+#cond.tab.c cond.tab.h: cond.y
+#	bison -p COND_ -d ./cond.y -o cond.tab.c

reactos/lib/msi
action.c 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- action.c	30 Nov 2004 19:10:50 -0000	1.1
+++ action.c	3 Dec 2004 06:21:44 -0000	1.2
@@ -3478,7 +3478,7 @@
             continue;
         }
 
-//        res = LoadTypeLib(package->files[index].TargetPath,&ptLib);
+        res = LoadTypeLib(package->files[index].TargetPath,&ptLib);
         if (SUCCEEDED(res))
         {
             WCHAR help[MAX_PATH];
@@ -3489,7 +3489,7 @@
 
             resolve_folder(package,helpid,help,FALSE,FALSE,NULL);
 
-//            res = RegisterTypeLib(ptLib,package->files[index].TargetPath,help);
+            res = RegisterTypeLib(ptLib,package->files[index].TargetPath,help);
             if (!SUCCEEDED(res))
                 ERR("Failed to register type library %s\n",
                      debugstr_w(package->files[index].TargetPath));
@@ -3505,7 +3505,7 @@
             }
 
             if (ptLib){
-                //ITypeLib_Release(ptLib);
+                ITypeLib_Release(ptLib);
                 }
         }
         else

reactos/lib/msi
msi.c 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- msi.c	30 Nov 2004 19:10:50 -0000	1.1
+++ msi.c	3 Dec 2004 06:21:44 -0000	1.2
@@ -40,6 +40,9 @@
 
 #include "initguid.h"
 
+UINT WINAPI MsiGetFileVersionW(LPCWSTR szFilePath, LPWSTR lpVersionBuf, DWORD* pcchVersionBuf, LPWSTR lpLangBuf, DWORD* pcchLangBuf);
+
+
 WINE_DEFAULT_DEBUG_CHANNEL(msi);
 
 /*
CVSspam 0.2.8