[ros-diffs] [fireball] 30932: - Sync with Wine.

fireball at svn.reactos.org fireball at svn.reactos.org
Sat Dec 1 16:56:04 CET 2007


Author: fireball
Date: Sat Dec  1 18:56:03 2007
New Revision: 30932

URL: http://svn.reactos.org/svn/reactos?rev=30932&view=rev
Log:
- Sync with Wine.

Modified:
    trunk/reactos/tools/wmc/lang.c
    trunk/reactos/tools/wmc/lang.h
    trunk/reactos/tools/wmc/mcl.c
    trunk/reactos/tools/wmc/mcy.tab.c
    trunk/reactos/tools/wmc/mcy.tab.h
    trunk/reactos/tools/wmc/mcy.y
    trunk/reactos/tools/wmc/utils.c
    trunk/reactos/tools/wmc/utils.h
    trunk/reactos/tools/wmc/wmc.c
    trunk/reactos/tools/wmc/wmc.h
    trunk/reactos/tools/wmc/wmctypes.h
    trunk/reactos/tools/wmc/write.c
    trunk/reactos/tools/wmc/write.h

Modified: trunk/reactos/tools/wmc/lang.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/lang.c?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/lang.c (original)
+++ trunk/reactos/tools/wmc/lang.c Sat Dec  1 18:56:03 2007
@@ -15,7 +15,7 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 #include <stdio.h>
 #include <stdlib.h>
@@ -33,7 +33,47 @@
  */
 static const language_t languages[] = {
 
-	{0x0000, 437, 1252, "Neutral", "Neutral"},
+	{0x0000, 437, 1252, "Neutral", NULL},
+	{0x0002, 866, 1251, "Bulgarian", NULL},
+	{0x0003, 850, 1252, "Catalan", NULL},
+	{0x0005, 852, 1250, "Czech", NULL},
+	{0x0006, 850, 1252, "Danish", NULL},
+	{0x0007, 850, 1252, "German", NULL},
+	{0x0008, 737, 1253, "Greek", NULL},
+	{0x0009, 437, 1252, "English", NULL},
+	{0x000A, 850, 1252, "Spanish - Traditional Sort", NULL},
+	{0x000B, 850, 1252, "Finnish", NULL},
+	{0x000C, 850, 1252, "French", NULL},
+	{0x000E, 852, 1250, "Hungarian", NULL},
+	{0x000F, 850, 1252, "Icelandic", NULL},
+	{0x0010, 850, 1252, "Italian", NULL},
+	{0x0011, 932,  932, "Japanese", NULL},
+	{0x0012, 949,  949, "Korean", NULL},
+	{0x0013, 850, 1252, "Dutch", NULL},
+	{0x0014, 850, 1252, "Norwegian (Bokmål)", NULL},
+	{0x0015, 852, 1250, "Polish", NULL},
+	{0x0016, 850, 1252, "Portuguese", NULL},
+	{0x0018, 852, 1250, "Romanian", NULL},
+	{0x0019, 866, 1251, "Russian", NULL},
+	{0x001A, 852, 1250, "Serbian", NULL},
+	{0x001B, 852, 1250, "Slovak", NULL},
+	{0x001C, 852, 1250, "Albanian", NULL},
+	{0x001D, 850, 1252, "Swedish", NULL},
+	{0x001F, 857, 1254, "Turkish", NULL},
+	{0x0021, 850, 1252, "Indonesian", NULL},
+	{0x0022, 866, 1251, "Ukrainian", NULL},
+	{0x0023, 866, 1251, "Belarusian", NULL},
+	{0x0024, 852, 1250, "Slovene", NULL},
+	{0x0025, 775, 1257, "Estonian", NULL},
+	{0x0026, 775, 1257, "Latvian", NULL},
+	{0x0027, 775, 1257, "Lithuanian", NULL},
+	{0x002A,1258, 1258, "Vietnamese", NULL},
+	{0x002D, 850, 1252, "Basque", NULL},
+	{0x002F, 866, 1251, "Macedonian", NULL},
+	{0x0036, 850, 1252, "Afrikaans", NULL},
+	{0x0038, 852, 1252, "Faroese", NULL},
+	{0x003C, 437, 1252, "Irish", NULL},
+	{0x003E, 850, 1252, "Malay", NULL},
 	{0x0402, 866, 1251, "Bulgarian", "Bulgaria"},
 	{0x0403, 850, 1252, "Catalan", "Spain"},
 	{0x0405, 852, 1250, "Czech", "Czech Republic"},
@@ -67,11 +107,11 @@
 	{0x0425, 775, 1257, "Estonian", "Estonia"},
 	{0x0426, 775, 1257, "Latvian", "Latvia"},
 	{0x0427, 775, 1257, "Lithuanian", "Lithuania"},
-/*	{0x042A,   ?,    ?, "Vietnamese", "Vietnam"},*/
+	{0x042A,1258, 1258, "Vietnamese", "Vietnam"},
 	{0x042D, 850, 1252, "Basque", "Spain"},
 	{0x042F, 866, 1251, "Macedonian", "Former Yugoslav Republic of Macedonia"},
 	{0x0436, 850, 1252, "Afrikaans", "South Africa"},
-/*	{0x0438, 852, 1252, "Faroese", "Faroe Islands"}, FIXME: Not sure about codepages */
+	{0x0438, 852, 1252, "Faroese", "Faroe Islands"},
 	{0x043C, 437, 1252, "Irish", "Ireland"},
 	{0x043E, 850, 1252, "Malay", "Malaysia"},
 /*	{0x048F,   ?,    ?, "Esperanto", "<none>"},*/
@@ -84,7 +124,7 @@
 	{0x0813, 850, 1252, "Dutch", "Belgium"},
 	{0x0814, 850, 1252, "Norwegian (Nynorsk)", "Norway"},
 	{0x0816, 850, 1252, "Portuguese", "Portugal"},
-/*	{0x081A,   ?,    ?, "Serbian (latin)", "Yugoslavia"},*/
+	{0x081A, 852, 1250, "Serbian (latin)", "Yugoslavia"},
 	{0x081D, 850, 1252, "Swedish (Finland)", "Finland"},
 	{0x0C07, 850, 1252, "German", "Austria"},
 	{0x0C09, 850, 1252, "English", "Australia"},
@@ -135,7 +175,7 @@
 			languages[i].doscp,
 			languages[i].wincp,
 			languages[i].name,
-			languages[i].country);
+			languages[i].country ? languages[i].country : "Neutral");
 }
 
 static int langcmp(const void *p1, const void *p2)

Modified: trunk/reactos/tools/wmc/lang.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/lang.h?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/lang.h (original)
+++ trunk/reactos/tools/wmc/lang.h Sat Dec  1 18:56:03 2007
@@ -15,7 +15,7 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
 #ifndef __WMC_LANG_H

Modified: trunk/reactos/tools/wmc/mcl.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/mcl.c?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/mcl.c (original)
+++ trunk/reactos/tools/wmc/mcl.c Sat Dec  1 18:56:03 2007
@@ -15,7 +15,7 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
 #include "config.h"
@@ -74,25 +74,25 @@
  * The 'Codepages' keyword is a wmc extension.
  */
 
-static WCHAR ustr_application[]	= { 'A', 'p', 'p', 'l', 'i', 'c', 'a', 't', 'i', 'o', 'n', 0 };
-static WCHAR ustr_codepages[]		= { 'C', 'o', 'd', 'e', 'p', 'a', 'g', 'e', 's', 0 };
-static WCHAR ustr_english[]		= { 'E', 'n', 'g', 'l', 'i', 's', 'h', 0 };
-static WCHAR ustr_error[]		= { 'E', 'r', 'r', 'o', 'r', 0 };
-static WCHAR ustr_facility[]		= { 'F', 'a', 'c', 'i', 'l', 'i', 't', 'y', 0 };
-static WCHAR ustr_facilitynames[]	= { 'F', 'a', 'c', 'i', 'l', 'i', 't', 'y', 'N', 'a', 'm', 'e', 's', 0 };
-static WCHAR ustr_informational[]	= { 'I', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n', 'a', 'l', 0 };
-static WCHAR ustr_language[]		= { 'L', 'a', 'n', 'g', 'u', 'a', 'g', 'e', 0};
-static WCHAR ustr_languagenames[]	= { 'L', 'a', 'n', 'g', 'u', 'a', 'g', 'e', 'N', 'a', 'm', 'e', 's', 0};
-static WCHAR ustr_messageid[]		= { 'M', 'e', 's', 's', 'a', 'g', 'e', 'I', 'd', 0 };
-static WCHAR ustr_messageidtypedef[]	= { 'M', 'e', 's', 's', 'a', 'g', 'e', 'I', 'd', 'T', 'y', 'p', 'e', 'd', 'e', 'f', 0 };
-static WCHAR ustr_outputbase[]	= { 'O', 'u', 't', 'p', 'u', 't', 'B', 'a', 's', 'e', 0 };
-static WCHAR ustr_severity[]		= { 'S', 'e', 'v', 'e', 'r', 'i', 't', 'y', 0 };
-static WCHAR ustr_severitynames[]	= { 'S', 'e', 'v', 'e', 'r', 'i', 't', 'y', 'N', 'a', 'm', 'e', 's', 0 };
-static WCHAR ustr_success[]		= { 'S', 'u', 'c', 'c', 'e', 's', 's', 0 };
-static WCHAR ustr_symbolicname[]	= { 'S', 'y', 'm', 'b', 'o', 'l', 'i', 'c', 'N', 'a', 'm', 'e', 0 };
-static WCHAR ustr_system[]		= { 'S', 'y', 's', 't', 'e', 'm', 0 };
-static WCHAR ustr_warning[]		= { 'W', 'a', 'r', 'n', 'i', 'n', 'g', 0 };
-static WCHAR ustr_msg00001[]		= { 'm', 's', 'g', '0', '0', '0', '0', '1', 0 };
+static const WCHAR ustr_application[]	= { 'A', 'p', 'p', 'l', 'i', 'c', 'a', 't', 'i', 'o', 'n', 0 };
+static const WCHAR ustr_codepages[]	= { 'C', 'o', 'd', 'e', 'p', 'a', 'g', 'e', 's', 0 };
+static const WCHAR ustr_english[]	= { 'E', 'n', 'g', 'l', 'i', 's', 'h', 0 };
+static const WCHAR ustr_error[]		= { 'E', 'r', 'r', 'o', 'r', 0 };
+static const WCHAR ustr_facility[]	= { 'F', 'a', 'c', 'i', 'l', 'i', 't', 'y', 0 };
+static const WCHAR ustr_facilitynames[]	= { 'F', 'a', 'c', 'i', 'l', 'i', 't', 'y', 'N', 'a', 'm', 'e', 's', 0 };
+static const WCHAR ustr_informational[]	= { 'I', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n', 'a', 'l', 0 };
+static const WCHAR ustr_language[]	= { 'L', 'a', 'n', 'g', 'u', 'a', 'g', 'e', 0};
+static const WCHAR ustr_languagenames[]	= { 'L', 'a', 'n', 'g', 'u', 'a', 'g', 'e', 'N', 'a', 'm', 'e', 's', 0};
+static const WCHAR ustr_messageid[]	= { 'M', 'e', 's', 's', 'a', 'g', 'e', 'I', 'd', 0 };
+static const WCHAR ustr_messageidtypedef[] = { 'M', 'e', 's', 's', 'a', 'g', 'e', 'I', 'd', 'T', 'y', 'p', 'e', 'd', 'e', 'f', 0 };
+static const WCHAR ustr_outputbase[]	= { 'O', 'u', 't', 'p', 'u', 't', 'B', 'a', 's', 'e', 0 };
+static const WCHAR ustr_severity[]	= { 'S', 'e', 'v', 'e', 'r', 'i', 't', 'y', 0 };
+static const WCHAR ustr_severitynames[]	= { 'S', 'e', 'v', 'e', 'r', 'i', 't', 'y', 'N', 'a', 'm', 'e', 's', 0 };
+static const WCHAR ustr_success[]	= { 'S', 'u', 'c', 'c', 'e', 's', 's', 0 };
+static const WCHAR ustr_symbolicname[]	= { 'S', 'y', 'm', 'b', 'o', 'l', 'i', 'c', 'N', 'a', 'm', 'e', 0 };
+static const WCHAR ustr_system[]	= { 'S', 'y', 's', 't', 'e', 'm', 0 };
+static const WCHAR ustr_warning[]	= { 'W', 'a', 'r', 'n', 'i', 'n', 'g', 0 };
+static const WCHAR ustr_msg00001[]	= { 'm', 's', 'g', '0', '0', '0', '0', '1', 0 };
 /*
  * This table is to beat any form of "expression building" to check for
  * correct filename characters. It is also used for ident checks.
@@ -156,7 +156,7 @@
 	codepage = cp;
 	codepage_def = find_codepage(codepage);
 	if(!codepage_def)
-		xyyerror("Codepage %d not found; cannot process", codepage);
+		xyyerror("Codepage %d not found; cannot process\n", codepage);
 }
 
 /*
@@ -187,7 +187,7 @@
 
 	if(!inputbuffer)
 	{
-		inputbuffer = xmalloc(INPUTBUFFER_SIZE);
+		inputbuffer = xmalloc(INPUTBUFFER_SIZE*sizeof(WCHAR));
 		xlatebuffer = xmalloc(INPUTBUFFER_SIZE);
 	}
 
@@ -203,7 +203,7 @@
 		assert(codepage_def != NULL);
 		n = wine_cp_mbstowcs(codepage_def, 0, xlatebuffer, strlen(xlatebuffer)+1, inputbuffer, INPUTBUFFER_SIZE);
 		if(n < 0)
-			internal_error(__FILE__, __LINE__, "Could not translate to unicode (%d)", n);
+			internal_error(__FILE__, __LINE__, "Could not translate to unicode (%d)\n", n);
 		if(n <= 1)
 			goto try_again;	/* Should not hapen */
 		n--;	/* Strip added conversion '\0' from input length */
@@ -224,7 +224,7 @@
 				if(!n && ferror(yyin))
 					xyyerror(err_fatalread);
 				else
-					xyyerror("Fatal: file to short to determine byteorder (should never happen)");
+					xyyerror("Fatal: file to short to determine byteorder (should never happen)\n");
 			}
 			if(isisochar(inputbuffer[0]) &&
 				isisochar(inputbuffer[1]) &&
@@ -249,7 +249,7 @@
 #endif
 			}
 			else
-				xyyerror("Fatal: cannot determine file's byteorder");
+				xyyerror("Fatal: cannot determine file's byteorder\n");
 			/* FIXME:
 			 * Determine the file-endian with the leader-bytes
 			 * "FF FE..."; can't remember the exact sequence.
@@ -302,7 +302,7 @@
 
 	if(!n)
 	{
-		yywarning("Re-read line (input was or converted to zilch)");
+		mcy_warning("Re-read line (input was or converted to zilch)\n");
 		goto try_again;	/* Should not happen, but could be due to stdin reading and a signal */
 	}
 
@@ -458,7 +458,7 @@
 	while(1)
 	{
 		if(!isisochar(ch))
-			xyyerror("Invalid digit");
+			xyyerror("Invalid digit\n");
 
 		switch(state)
 		{
@@ -472,7 +472,7 @@
 					state = 4;
 			}
 			else
-				internal_error(__FILE__, __LINE__, "Non-digit in first number-scanner state");
+				internal_error(__FILE__, __LINE__, "Non-digit in first number-scanner state\n");
 			break;
 		case 1:
 			if(ch == 'x' || ch == 'X')
@@ -486,11 +486,11 @@
 				state = 3;
 			}
 			else if(isalpha(ch) || ch == '_')
-				xyyerror("Invalid number digit");
+				xyyerror("Invalid number digit\n");
 			else
 			{
 				unget_unichar(ch);
-				yylval.num = 0;
+				mcy_lval.num = 0;
 				return tNUMBER;
 			}
 			break;
@@ -498,7 +498,7 @@
 			if(isxdigit(ch))
 				push_char(ch);
 			else if(isalpha(ch) || ch == '_' || !isxdigit(tos_char_stack()))
-				xyyerror("Invalid hex digit");
+				xyyerror("Invalid hex digit\n");
 			else
 			{
 				base = 16;
@@ -509,7 +509,7 @@
 			if(ch >= '0' && ch <= '7')
 				push_char(ch);
 			else if(isalnum(ch) || ch == '_')
-				xyyerror("Invalid octal digit");
+				xyyerror("Invalid octal digit\n");
 			else
 			{
 				base = 8;
@@ -520,7 +520,7 @@
 			if(isdigit(ch))
 				push_char(ch);
 			else if(isalnum(ch) || ch == '_')
-				xyyerror("Invalid decimal digit");
+				xyyerror("Invalid decimal digit\n");
 			else
 			{
 				base = 10;
@@ -528,14 +528,14 @@
 			}
 			break;
 		default:
-			internal_error(__FILE__, __LINE__, "Invalid state in number-scanner");
+			internal_error(__FILE__, __LINE__, "Invalid state in number-scanner\n");
 		}
 		ch = get_unichar();
 	}
 finish:
 	unget_unichar(ch);
 	push_char(0);
-	yylval.num = strtoul(get_char_stack(), NULL, base);
+	mcy_lval.num = strtoul(get_char_stack(), NULL, base);
 	return tNUMBER;
 }
 
@@ -586,7 +586,7 @@
  * The scanner
  *
  */
-int yylex(void)
+int mcy_lex(void)
 {
 	static const WCHAR ustr_dot1[] = { '.', '\n', 0 };
 	static const WCHAR ustr_dot2[] = { '.', '\r', '\n', 0 };
@@ -626,7 +626,7 @@
 			while((ch = get_unichar()) != '\n')
 			{
 				if(ch == EOF)
-					xyyerror("Unexpected EOF");
+					xyyerror("Unexpected EOF\n");
 				push_unichar(ch);
 			}
 			newline();
@@ -639,7 +639,7 @@
 				set_codepage(WMC_DEFAULT_CODEPAGE);
 				return tMSGEND;
 			}
-			yylval.str = xunistrdup(get_unichar_stack());
+			mcy_lval.str = xunistrdup(get_unichar_stack());
 			return tLINE;
 		}
 
@@ -677,7 +677,7 @@
 				unget_unichar(ch);
 				push_unichar(0);
 				want_file = 0;
-				yylval.str = xunistrdup(get_unichar_stack());
+				mcy_lval.str = xunistrdup(get_unichar_stack());
 				return tFILE;
 			}
 
@@ -693,7 +693,7 @@
 				push_unichar(0);
 				if(!(tok = lookup_token(get_unichar_stack())))
 				{
-					yylval.str = xunistrdup(get_unichar_stack());
+					mcy_lval.str = xunistrdup(get_unichar_stack());
 					return tIDENT;
 				}
 				switch(tok->type)
@@ -706,11 +706,11 @@
 					/* Fall through */
 				case tok_severity:
 				case tok_facility:
-					yylval.tok = tok;
+					mcy_lval.tok = tok;
 					return tTOKEN;
 
 				default:
-					internal_error(__FILE__, __LINE__, "Invalid token type encountered");
+					internal_error(__FILE__, __LINE__, "Invalid token type encountered\n");
 				}
 			}
 
@@ -738,10 +738,10 @@
 			newline();
 			push_unichar(ch);	/* Include the newline */
 			push_unichar(0);
-			yylval.str = xunistrdup(get_unichar_stack());
+			mcy_lval.str = xunistrdup(get_unichar_stack());
 			return tCOMMENT;
 		default:
-			xyyerror("Invalid character '%c' (0x%04x)", isisochar(ch) && isprint(ch) ? ch : '.', ch);
+			xyyerror("Invalid character '%c' (0x%04x)\n", isisochar(ch) && isprint(ch) ? ch : '.', ch);
 		}
 	}
 }

Modified: trunk/reactos/tools/wmc/mcy.tab.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/mcy.tab.c?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/mcy.tab.c (original)
+++ trunk/reactos/tools/wmc/mcy.tab.c Sat Dec  1 18:56:03 2007
@@ -1,7 +1,7 @@
-/* A Bison parser, made by GNU Bison 1.875c.  */
+/* A Bison parser, made by GNU Bison 2.1.  */
 
 /* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 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
@@ -15,8 +15,8 @@
 
    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.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, 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.
@@ -36,6 +36,9 @@
 /* Identify Bison output.  */
 #define YYBISON 1
 
+/* Bison version.  */
+#define YYBISON_VERSION "2.1"
+
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
 
@@ -45,6 +48,14 @@
 /* Using locations.  */
 #define YYLSP_NEEDED 0
 
+/* Substitute the variable and function names.  */
+#define yyparse mcy_parse
+#define yylex   mcy_lex
+#define yyerror mcy_error
+#define yylval  mcy_lval
+#define yychar  mcy_char
+#define yydebug mcy_debug
+#define yynerrs mcy_nerrs
 
 
 /* Tokens.  */
@@ -74,6 +85,7 @@
      tTOKEN = 276
    };
 #endif
+/* Tokens.  */
 #define tSEVNAMES 258
 #define tFACNAMES 259
 #define tLANNAMES 260
@@ -160,7 +172,7 @@
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
-# define YYDEBUG 1
+# define YYDEBUG 0
 #endif
 
 /* Enabling verbose error messages.  */
@@ -171,8 +183,13 @@
 # define YYERROR_VERBOSE 0
 #endif
 
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 99 "tools/wmc/mcy.y"
+#line 98 "tools/wmc/mcy.y"
 typedef union YYSTYPE {
 	WCHAR		*str;
 	unsigned	num;
@@ -181,8 +198,8 @@
 	msg_t		*msg;
 	lan_cp_t	lcp;
 } YYSTYPE;
-/* Line 191 of yacc.c.  */
-#line 186 "tools/wmc/mcy.tab.c"
+/* Line 196 of yacc.c.  */
+#line 203 "mcy.tab.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -193,30 +210,49 @@
 /* Copy the second part of user declarations.  */
 
 
-/* Line 214 of yacc.c.  */
-#line 198 "tools/wmc/mcy.tab.c"
+/* Line 219 of yacc.c.  */
+#line 215 "mcy.tab.c"
+
+#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) && (defined (__STDC__) || defined (__cplusplus))
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
-
-# ifndef YYFREE
-#  define YYFREE free
-# endif
-# ifndef YYMALLOC
-#  define YYMALLOC malloc
-# endif
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
 
 # ifdef YYSTACK_USE_ALLOCA
 #  if YYSTACK_USE_ALLOCA
-#   define YYSTACK_ALLOC alloca
-#  endif
-# else
-#  if defined (alloca) || defined (_ALLOCA_H)
-#   define YYSTACK_ALLOC alloca
-#  else
 #   ifdef __GNUC__
 #    define YYSTACK_ALLOC __builtin_alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if defined (__STDC__) || defined (__cplusplus)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     define YYINCLUDED_STDLIB_H
+#    endif
 #   endif
 #  endif
 # endif
@@ -224,13 +260,39 @@
 # ifdef YYSTACK_ALLOC
    /* Pacify GCC's `empty if-body' warning. */
 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
+#  endif
 # else
-#  if defined (__STDC__) || defined (__cplusplus)
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   define YYSIZE_T size_t
-#  endif
 #  define YYSTACK_ALLOC YYMALLOC
 #  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
+#  endif
+#  ifdef __cplusplus
+extern "C" {
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
+	&& (defined (__STDC__) || defined (__cplusplus)))
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
+	&& (defined (__STDC__) || defined (__cplusplus)))
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifdef __cplusplus
+}
+#  endif
 # endif
 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
 
@@ -242,7 +304,7 @@
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  short yyss;
+  short int yyss;
   YYSTYPE yyvs;
   };
 
@@ -252,7 +314,7 @@
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
+     ((N) * (sizeof (short int) + sizeof (YYSTYPE))			\
       + YYSTACK_GAP_MAXIMUM)
 
 /* Copy COUNT objects from FROM to TO.  The source and destination do
@@ -265,7 +327,7 @@
 #   define YYCOPY(To, From, Count)		\
       do					\
 	{					\
-	  register YYSIZE_T yyi;		\
+	  YYSIZE_T yyi;				\
 	  for (yyi = 0; yyi < (Count); yyi++)	\
 	    (To)[yyi] = (From)[yyi];		\
 	}					\
@@ -294,7 +356,7 @@
 #if defined (__STDC__) || defined (__cplusplus)
    typedef signed char yysigned_char;
 #else
-   typedef short yysigned_char;
+   typedef short int yysigned_char;
 #endif
 
 /* YYFINAL -- State number of the termination state. */
@@ -315,7 +377,7 @@
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   276
 
-#define YYTRANSLATE(YYX) 						\
+#define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
@@ -354,7 +416,7 @@
 #if YYDEBUG
 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    YYRHS.  */
-static const unsigned short yyprhs[] =
+static const unsigned short int yyprhs[] =
 {
        0,     0,     3,     5,     7,    10,    12,    14,    16,    18,
       24,    30,    34,    37,    43,    49,    53,    56,    62,    68,
@@ -411,24 +473,24 @@
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const unsigned short yyrline[] =
-{
-       0,   124,   124,   131,   132,   135,   136,   137,   138,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   172,
-     173,   179,   180,   181,   184,   191,   192,   198,   199,   200,
-     203,   210,   211,   214,   215,   216,   222,   223,   224,   227,
-     235,   236,   237,   238,   241,   242,   243,   249,   250,   251,
-     254,   264,   265,   266,   267,   270,   271,   281,   281,   284,
-     289,   292,   293,   294,   295,   298,   299,   300,   301,   304,
-     305,   306,   309,   317,   318,   321,   329,   330,   336,   337,
-     338,   341,   349,   378,   379,   380,   383,   384,   385,   386,
-     392,   393,   396,   399,   402
+static const unsigned short int yyrline[] =
+{
+       0,   123,   123,   130,   131,   134,   135,   136,   137,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   171,
+     172,   178,   179,   180,   183,   190,   191,   197,   198,   199,
+     202,   209,   210,   213,   214,   215,   221,   222,   223,   226,
+     234,   235,   236,   237,   240,   241,   242,   248,   249,   250,
+     253,   263,   264,   265,   266,   269,   270,   280,   280,   283,
+     288,   291,   292,   293,   294,   297,   298,   299,   300,   303,
+     304,   305,   308,   316,   317,   320,   328,   329,   335,   336,
+     337,   340,   348,   377,   378,   379,   382,   383,   384,   385,
+     391,   392,   395,   398,   401
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE
-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
 static const char *const yytname[] =
 {
@@ -447,7 +509,7 @@
 # ifdef YYPRINT
 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
    token YYLEX-NUM.  */
-static const unsigned short yytoknum[] =
+static const unsigned short int yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
@@ -511,7 +573,7 @@
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
-static const short yydefgoto[] =
+static const short int yydefgoto[] =
 {
       -1,    10,    11,    12,    13,    58,    59,    62,    63,   131,
       66,    67,   152,    72,    73,    74,    14,    51,    15,    47,
@@ -522,7 +584,7 @@
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
 #define YYPACT_NINF -37
-static const short yypact[] =
+static const short int yypact[] =
 {
      132,   -37,    18,    44,    46,    47,    48,    49,    50,   -37,
       10,   113,   -37,   -37,   -37,   -37,   -37,    11,   -37,    14,
@@ -556,7 +618,7 @@
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
 #define YYTABLE_NINF -105
-static const short yytable[] =
+static const short int yytable[] =
 {
       64,   133,    68,   135,    83,   149,   147,    45,    88,    93,
       30,    84,    33,    46,   148,    35,   103,    84,    98,    16,
@@ -620,22 +682,6 @@
       18,    25,    39,     1,    20
 };
 
-#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)
@@ -665,25 +711,58 @@
       goto yybackup;						\
     }								\
   else								\
-    { 								\
-      yyerror ("syntax error: cannot back up");\
+    {								\
+      yyerror (YY_("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).  */
-
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
 #ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)		\
-   ((Current).first_line   = (Rhs)[1].first_line,	\
-    (Current).first_column = (Rhs)[1].first_column,	\
-    (Current).last_line    = (Rhs)[N].last_line,	\
-    (Current).last_column  = (Rhs)[N].last_column)
-#endif
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (N)								\
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (0)
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+              (Loc).first_line, (Loc).first_column,	\
+              (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
 
 /* YYLEX -- calling `yylex' with the right arguments.  */
 
@@ -707,19 +786,13 @@
     YYFPRINTF Args;				\
 } while (0)
 
-# define YYDSYMPRINT(Args)			\
-do {						\
-  if (yydebug)					\
-    yysymprint Args;				\
-} while (0)
-
-# define YYDSYMPRINTF(Title, Token, Value, Location)		\
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)		\
 do {								\
   if (yydebug)							\
     {								\
       YYFPRINTF (stderr, "%s ", Title);				\
-      yysymprint (stderr, 					\
-                  Token, Value);	\
+      yysymprint (stderr,					\
+                  Type, Value);	\
       YYFPRINTF (stderr, "\n");					\
     }								\
 } while (0)
@@ -731,12 +804,12 @@
 
 #if defined (__STDC__) || defined (__cplusplus)
 static void
-yy_stack_print (short *bottom, short *top)
+yy_stack_print (short int *bottom, short int *top)
 #else
 static void
 yy_stack_print (bottom, top)
-    short *bottom;
-    short *top;
+    short int *bottom;
+    short int *top;
 #endif
 {
   YYFPRINTF (stderr, "Stack now");
@@ -766,13 +839,13 @@
 #endif
 {
   int yyi;
-  unsigned int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
              yyrule - 1, yylno);
   /* Print the symbols being reduced, and their result.  */
   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
+    YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+  YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
 }
 
 # define YY_REDUCE_PRINT(Rule)		\
@@ -786,8 +859,7 @@
 int yydebug;
 #else /* !YYDEBUG */
 # define YYDPRINTF(Args)
-# define YYDSYMPRINT(Args)
-# define YYDSYMPRINTF(Title, Token, Value, Location)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
@@ -802,12 +874,8 @@
    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)
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
    evaluated with infinite-precision integer arithmetic.  */
-
-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
-# undef YYMAXDEPTH
-#endif
 
 #ifndef YYMAXDEPTH
 # define YYMAXDEPTH 10000
@@ -830,7 +898,7 @@
      const char *yystr;
 #   endif
 {
-  register const char *yys = yystr;
+  const char *yys = yystr;
 
   while (*yys++ != '\0')
     continue;
@@ -855,8 +923,8 @@
      const char *yysrc;
 #   endif
 {
-  register char *yyd = yydest;
-  register const char *yys = yysrc;
+  char *yyd = yydest;
+  const char *yys = yysrc;
 
   while ((*yyd++ = *yys++) != '\0')
     continue;
@@ -866,7 +934,55 @@
 #  endif
 # endif
 
-#endif /* !YYERROR_VERBOSE */
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      size_t yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+#endif /* YYERROR_VERBOSE */
 
 
 
@@ -890,15 +1006,15 @@
   (void) yyvaluep;
 
   if (yytype < YYNTOKENS)
-    {
-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-# ifdef YYPRINT
-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# endif
-    }
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
   else
     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
 
+
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# endif
   switch (yytype)
     {
       default:
@@ -914,16 +1030,21 @@
 
 #if defined (__STDC__) || defined (__cplusplus)
 static void
-yydestruct (int yytype, YYSTYPE *yyvaluep)
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
 #else
 static void
-yydestruct (yytype, yyvaluep)
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
     int yytype;
     YYSTYPE *yyvaluep;
 #endif
 {
   /* Pacify ``unused variable'' warnings.  */
   (void) yyvaluep;
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
   switch (yytype)
     {
@@ -952,10 +1073,10 @@
 
 
 
-/* The lookahead symbol.  */
+/* The look-ahead symbol.  */
 int yychar;
 
-/* The semantic value of the lookahead symbol.  */
+/* The semantic value of the look-ahead symbol.  */
 YYSTYPE yylval;
 
 /* Number of syntax errors so far.  */
@@ -981,17 +1102,17 @@
 #else
 int
 yyparse ()
-
-#endif
-#endif
-{
-
-  register int yystate;
-  register int yyn;
+    ;
+#endif
+#endif
+{
+  
+  int yystate;
+  int yyn;
   int yyresult;
   /* Number of tokens to shift before error messages enabled.  */
   int yyerrstatus;
-  /* Lookahead token as an internal (translated) token number.  */
+  /* Look-ahead token as an internal (translated) token number.  */
   int yytoken = 0;
 
   /* Three stacks and their tools:
@@ -1003,14 +1124,14 @@
      to reallocate them elsewhere.  */
 
   /* The state stack.  */
-  short	yyssa[YYINITDEPTH];
-  short *yyss = yyssa;
-  register short *yyssp;
+  short int yyssa[YYINITDEPTH];
+  short int *yyss = yyssa;
+  short int *yyssp;
 
   /* The semantic value stack.  */
   YYSTYPE yyvsa[YYINITDEPTH];
   YYSTYPE *yyvs = yyvsa;
-  register YYSTYPE *yyvsp;
+  YYSTYPE *yyvsp;
 
 
 
@@ -1067,14 +1188,14 @@
 	   these so that the &'s don't force the real ones into
 	   memory.  */
 	YYSTYPE *yyvs1 = yyvs;
-	short *yyss1 = yyss;
+	short int *yyss1 = yyss;
 
 
 	/* Each stack pointer address is followed by the size of the
 	   data in use in that stack, in bytes.  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",
+	yyoverflow (YY_("memory exhausted"),
 		    &yyss1, yysize * sizeof (*yyssp),
 		    &yyvs1, yysize * sizeof (*yyvsp),
 
@@ -1085,21 +1206,21 @@
       }
 #else /* no yyoverflow */
 # ifndef YYSTACK_RELOCATE
-      goto yyoverflowlab;
+      goto yyexhaustedlab;
 # else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-	goto yyoverflowlab;
+	goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
 	yystacksize = YYMAXDEPTH;
 
       {
-	short *yyss1 = yyss;
+	short int *yyss1 = yyss;
 	union yyalloc *yyptr =
 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
 	if (! yyptr)
-	  goto yyoverflowlab;
+	  goto yyexhaustedlab;
 	YYSTACK_RELOCATE (yyss);
 	YYSTACK_RELOCATE (yyvs);
 
@@ -1131,18 +1252,18 @@
 yybackup:
 
 /* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
+/* Read a look-ahead token if we need one and don't already have one.  */
 /* yyresume: */
 
-  /* First try to decide what to do without reference to lookahead token.  */
+  /* First try to decide what to do without reference to look-ahead token.  */
 
   yyn = yypact[yystate];
   if (yyn == YYPACT_NINF)
     goto yydefault;
 
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
@@ -1157,7 +1278,7 @@
   else
     {
       yytoken = YYTRANSLATE (yychar);
-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
     }
 
   /* If the proper action on seeing token YYTOKEN is to reduce or to
@@ -1177,8 +1298,8 @@
   if (yyn == YYFINAL)
     YYACCEPT;
 
-  /* Shift the lookahead token.  */
-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
   /* Discard the token being shifted unless it is eof.  */
   if (yychar != YYEOF)
@@ -1228,457 +1349,457 @@
   switch (yyn)
     {
         case 2:
-#line 124 "tools/wmc/mcy.y"
+#line 123 "tools/wmc/mcy.y"
     {
 		if(!check_languages(nodehead))
-			xyyerror("No messages defined");
+			xyyerror("No messages defined\n");
 		lanblockhead = block_messages(nodehead);
 	;}
     break;
 
   case 6:
+#line 135 "tools/wmc/mcy.y"
+    { add_node(nd_msg, (yyvsp[0].msg)); ;}
+    break;
+
+  case 7:
 #line 136 "tools/wmc/mcy.y"
-    { add_node(nd_msg, yyvsp[0].msg); ;}
-    break;
-
-  case 7:
+    { add_node(nd_comment, (yyvsp[0].str)); ;}
+    break;
+
+  case 8:
 #line 137 "tools/wmc/mcy.y"
-    { add_node(nd_comment, yyvsp[0].str); ;}
-    break;
-
-  case 8:
-#line 138 "tools/wmc/mcy.y"
     { xyyerror(err_syntax); /* `Catch all' error */ ;}
     break;
 
   case 10:
+#line 141 "tools/wmc/mcy.y"
+    { xyyerror(err_pclose); ;}
+    break;
+
+  case 11:
 #line 142 "tools/wmc/mcy.y"
+    { xyyerror(err_popen); ;}
+    break;
+
+  case 12:
+#line 143 "tools/wmc/mcy.y"
+    { xyyerror(err_assign); ;}
+    break;
+
+  case 14:
+#line 145 "tools/wmc/mcy.y"
     { xyyerror(err_pclose); ;}
     break;
 
-  case 11:
-#line 143 "tools/wmc/mcy.y"
+  case 15:
+#line 146 "tools/wmc/mcy.y"
     { xyyerror(err_popen); ;}
     break;
 
-  case 12:
-#line 144 "tools/wmc/mcy.y"
+  case 16:
+#line 147 "tools/wmc/mcy.y"
     { xyyerror(err_assign); ;}
     break;
 
-  case 14:
-#line 146 "tools/wmc/mcy.y"
+  case 18:
+#line 149 "tools/wmc/mcy.y"
     { xyyerror(err_pclose); ;}
     break;
 
-  case 15:
-#line 147 "tools/wmc/mcy.y"
+  case 19:
+#line 150 "tools/wmc/mcy.y"
     { xyyerror(err_popen); ;}
     break;
 
-  case 16:
-#line 148 "tools/wmc/mcy.y"
+  case 20:
+#line 151 "tools/wmc/mcy.y"
     { xyyerror(err_assign); ;}
     break;
 
-  case 18:
-#line 150 "tools/wmc/mcy.y"
+  case 22:
+#line 153 "tools/wmc/mcy.y"
     { xyyerror(err_pclose); ;}
     break;
 
-  case 19:
-#line 151 "tools/wmc/mcy.y"
+  case 23:
+#line 154 "tools/wmc/mcy.y"
     { xyyerror(err_popen); ;}
     break;
 
-  case 20:
-#line 152 "tools/wmc/mcy.y"
+  case 24:
+#line 155 "tools/wmc/mcy.y"
     { xyyerror(err_assign); ;}
     break;
 
-  case 22:
-#line 154 "tools/wmc/mcy.y"
-    { xyyerror(err_pclose); ;}
-    break;
-
-  case 23:
-#line 155 "tools/wmc/mcy.y"
-    { xyyerror(err_popen); ;}
-    break;
-
-  case 24:
+  case 25:
 #line 156 "tools/wmc/mcy.y"
+    { cast = (yyvsp[0].str); ;}
+    break;
+
+  case 26:
+#line 157 "tools/wmc/mcy.y"
+    { xyyerror(err_number); ;}
+    break;
+
+  case 27:
+#line 158 "tools/wmc/mcy.y"
     { xyyerror(err_assign); ;}
     break;
 
-  case 25:
-#line 157 "tools/wmc/mcy.y"
-    { cast = yyvsp[0].str; ;}
-    break;
-
-  case 26:
-#line 158 "tools/wmc/mcy.y"
-    { xyyerror(err_number); ;}
-    break;
-
-  case 27:
+  case 28:
 #line 159 "tools/wmc/mcy.y"
-    { xyyerror(err_assign); ;}
-    break;
-
-  case 28:
-#line 160 "tools/wmc/mcy.y"
     {
 		switch(base)
 		{
 		case 8:
 		case 10:
 		case 16:
-			base = yyvsp[0].num;
+			base = (yyvsp[0].num);
 			break;
 		default:
-			xyyerror("Numberbase must be 8, 10 or 16");
+			xyyerror("Numberbase must be 8, 10 or 16\n");
 		}
 	;}
     break;
 
   case 29:
+#line 171 "tools/wmc/mcy.y"
+    { xyyerror(err_number); ;}
+    break;
+
+  case 30:
 #line 172 "tools/wmc/mcy.y"
+    { xyyerror(err_assign); ;}
+    break;
+
+  case 33:
+#line 180 "tools/wmc/mcy.y"
+    { xyyerror(err_ident); ;}
+    break;
+
+  case 34:
+#line 183 "tools/wmc/mcy.y"
+    {
+		(yyvsp[-3].tok)->token = (yyvsp[-1].num);
+		(yyvsp[-3].tok)->alias = (yyvsp[0].str);
+		if((yyvsp[-1].num) & (~0x3))
+			xyyerror("Severity value out of range (0x%08x > 0x3)\n", (yyvsp[-1].num));
+		do_add_token(tok_severity, (yyvsp[-3].tok), "severity");
+	;}
+    break;
+
+  case 35:
+#line 190 "tools/wmc/mcy.y"
     { xyyerror(err_number); ;}
     break;
 
-  case 30:
-#line 173 "tools/wmc/mcy.y"
+  case 36:
+#line 191 "tools/wmc/mcy.y"
     { xyyerror(err_assign); ;}
     break;
 
-  case 33:
-#line 181 "tools/wmc/mcy.y"
+  case 39:
+#line 199 "tools/wmc/mcy.y"
     { xyyerror(err_ident); ;}
     break;
 
-  case 34:
-#line 184 "tools/wmc/mcy.y"
+  case 40:
+#line 202 "tools/wmc/mcy.y"
     {
-		yyvsp[-3].tok->token = yyvsp[-1].num;
-		yyvsp[-3].tok->alias = yyvsp[0].str;
-		if(yyvsp[-1].num & (~0x3))
-			xyyerror("Severity value out of range (0x%08x > 0x3)", yyvsp[-1].num);
-		do_add_token(tok_severity, yyvsp[-3].tok, "severity");
+		(yyvsp[-3].tok)->token = (yyvsp[-1].num);
+		(yyvsp[-3].tok)->alias = (yyvsp[0].str);
+		if((yyvsp[-1].num) & (~0xfff))
+			xyyerror("Facility value out of range (0x%08x > 0xfff)\n", (yyvsp[-1].num));
+		do_add_token(tok_facility, (yyvsp[-3].tok), "facility");
 	;}
     break;
 
-  case 35:
-#line 191 "tools/wmc/mcy.y"
+  case 41:
+#line 209 "tools/wmc/mcy.y"
     { xyyerror(err_number); ;}
     break;
 
-  case 36:
-#line 192 "tools/wmc/mcy.y"
+  case 42:
+#line 210 "tools/wmc/mcy.y"
     { xyyerror(err_assign); ;}
     break;
 
-  case 39:
-#line 200 "tools/wmc/mcy.y"
+  case 43:
+#line 213 "tools/wmc/mcy.y"
+    { (yyval.str) = NULL; ;}
+    break;
+
+  case 44:
+#line 214 "tools/wmc/mcy.y"
+    { (yyval.str) = (yyvsp[0].str); ;}
+    break;
+
+  case 45:
+#line 215 "tools/wmc/mcy.y"
     { xyyerror(err_ident); ;}
     break;
 
-  case 40:
-#line 203 "tools/wmc/mcy.y"
+  case 48:
+#line 223 "tools/wmc/mcy.y"
+    { xyyerror(err_ident); ;}
+    break;
+
+  case 49:
+#line 226 "tools/wmc/mcy.y"
     {
-		yyvsp[-3].tok->token = yyvsp[-1].num;
-		yyvsp[-3].tok->alias = yyvsp[0].str;
-		if(yyvsp[-1].num & (~0xfff))
-			xyyerror("Facility value out of range (0x%08x > 0xfff)", yyvsp[-1].num);
-		do_add_token(tok_facility, yyvsp[-3].tok, "facility");
+		(yyvsp[-6].tok)->token = (yyvsp[-4].num);
+		(yyvsp[-6].tok)->alias = (yyvsp[-1].str);
+		(yyvsp[-6].tok)->codepage = (yyvsp[0].num);
+		do_add_token(tok_language, (yyvsp[-6].tok), "language");
+		if(!find_language((yyvsp[-4].num)) && !find_cpxlat((yyvsp[-4].num)))
+			mcy_warning("Language 0x%x not built-in, using codepage %d; use explicit codepage to override\n", (yyvsp[-4].num), WMC_DEFAULT_CODEPAGE);
 	;}
     break;
 
-  case 41:
-#line 210 "tools/wmc/mcy.y"
+  case 50:
+#line 234 "tools/wmc/mcy.y"
+    { xyyerror("Filename expected\n"); ;}
+    break;
+
+  case 51:
+#line 235 "tools/wmc/mcy.y"
+    { xyyerror(err_colon); ;}
+    break;
+
+  case 52:
+#line 236 "tools/wmc/mcy.y"
     { xyyerror(err_number); ;}
     break;
 
-  case 42:
-#line 211 "tools/wmc/mcy.y"
+  case 53:
+#line 237 "tools/wmc/mcy.y"
     { xyyerror(err_assign); ;}
     break;
 
-  case 43:
-#line 214 "tools/wmc/mcy.y"
-    { yyval.str = NULL; ;}
-    break;
-
-  case 44:
-#line 215 "tools/wmc/mcy.y"
-    { yyval.str = yyvsp[0].str; ;}
-    break;
-
-  case 45:
-#line 216 "tools/wmc/mcy.y"
+  case 54:
+#line 240 "tools/wmc/mcy.y"
+    { (yyval.num) = 0; ;}
+    break;
+
+  case 55:
+#line 241 "tools/wmc/mcy.y"
+    { (yyval.num) = (yyvsp[0].num); ;}
+    break;
+
+  case 56:
+#line 242 "tools/wmc/mcy.y"
+    { xyyerror("Codepage-number expected\n"); ;}
+    break;
+
+  case 59:
+#line 250 "tools/wmc/mcy.y"
     { xyyerror(err_ident); ;}
     break;
 
-  case 48:
-#line 224 "tools/wmc/mcy.y"
-    { xyyerror(err_ident); ;}
-    break;
-
-  case 49:
-#line 227 "tools/wmc/mcy.y"
-    {
-		yyvsp[-6].tok->token = yyvsp[-4].num;
-		yyvsp[-6].tok->alias = yyvsp[-1].str;
-		yyvsp[-6].tok->codepage = yyvsp[0].num;
-		do_add_token(tok_language, yyvsp[-6].tok, "language");
-		if(!find_language(yyvsp[-4].num) && !find_cpxlat(yyvsp[-4].num))
-			yywarning("Language 0x%x not built-in, using codepage %d; use explicit codepage to override", yyvsp[-4].num, WMC_DEFAULT_CODEPAGE);
-	;}
-    break;
-
-  case 50:
-#line 235 "tools/wmc/mcy.y"
-    { xyyerror("Filename expected"); ;}
-    break;
-
-  case 51:
-#line 236 "tools/wmc/mcy.y"
-    { xyyerror(err_colon); ;}
-    break;
-
-  case 52:
-#line 237 "tools/wmc/mcy.y"
-    { xyyerror(err_number); ;}
-    break;
-
-  case 53:
-#line 238 "tools/wmc/mcy.y"
-    { xyyerror(err_assign); ;}
-    break;
-
-  case 54:
-#line 241 "tools/wmc/mcy.y"
-    { yyval.num = 0; ;}
-    break;
-
-  case 55:
-#line 242 "tools/wmc/mcy.y"
-    { yyval.num = yyvsp[0].num; ;}
-    break;
-
-  case 56:
-#line 243 "tools/wmc/mcy.y"
-    { xyyerror("Codepage-number expected"); ;}
-    break;
-
-  case 59:
-#line 251 "tools/wmc/mcy.y"
-    { xyyerror(err_ident); ;}
-    break;
-
   case 60:
-#line 254 "tools/wmc/mcy.y"
+#line 253 "tools/wmc/mcy.y"
     {
 		static const char err_nocp[] = "Codepage %d not builtin; cannot convert";
-		if(find_cpxlat(yyvsp[-4].num))
-			xyyerror("Codepage translation already defined for language 0x%x", yyvsp[-4].num);
-		if(yyvsp[-2].num && !find_codepage(yyvsp[-2].num))
-			xyyerror(err_nocp, yyvsp[-2].num);
-		if(yyvsp[0].num && !find_codepage(yyvsp[0].num))
-			xyyerror(err_nocp, yyvsp[0].num);
-		add_cpxlat(yyvsp[-4].num, yyvsp[-2].num, yyvsp[0].num);
+		if(find_cpxlat((yyvsp[-4].num)))
+			xyyerror("Codepage translation already defined for language 0x%x\n", (yyvsp[-4].num));
+		if((yyvsp[-2].num) && !find_codepage((yyvsp[-2].num)))
+			xyyerror(err_nocp, (yyvsp[-2].num));
+		if((yyvsp[0].num) && !find_codepage((yyvsp[0].num)))
+			xyyerror(err_nocp, (yyvsp[0].num));
+		add_cpxlat((yyvsp[-4].num), (yyvsp[-2].num), (yyvsp[0].num));
 	;}
     break;
 
   case 61:
+#line 263 "tools/wmc/mcy.y"
+    { xyyerror(err_number); ;}
+    break;
+
+  case 62:
 #line 264 "tools/wmc/mcy.y"
+    { xyyerror(err_colon); ;}
+    break;
+
+  case 63:
+#line 265 "tools/wmc/mcy.y"
     { xyyerror(err_number); ;}
     break;
 
-  case 62:
-#line 265 "tools/wmc/mcy.y"
-    { xyyerror(err_colon); ;}
-    break;
-
-  case 63:
+  case 64:
 #line 266 "tools/wmc/mcy.y"
+    { xyyerror(err_assign); ;}
+    break;
+
+  case 65:
+#line 269 "tools/wmc/mcy.y"
+    { (yyval.num) = (yyvsp[0].num); ;}
+    break;
+
+  case 66:
+#line 270 "tools/wmc/mcy.y"
+    {
+		if((yyvsp[0].tok)->type != tok_language)
+			xyyerror("Language name or code expected\n");
+		(yyval.num) = (yyvsp[0].tok)->token;
+	;}
+    break;
+
+  case 67:
+#line 280 "tools/wmc/mcy.y"
+    { test_id((yyvsp[-1].num)); ;}
+    break;
+
+  case 68:
+#line 280 "tools/wmc/mcy.y"
+    { (yyval.msg) = complete_msg((yyvsp[0].msg), (yyvsp[-3].num)); ;}
+    break;
+
+  case 69:
+#line 283 "tools/wmc/mcy.y"
+    {
+		if((yyvsp[0].num) & (~0xffff))
+			xyyerror("Message ID value out of range (0x%08x > 0xffff)\n", (yyvsp[0].num));
+		(yyval.num) = (yyvsp[0].num);
+	;}
+    break;
+
+  case 70:
+#line 288 "tools/wmc/mcy.y"
+    { xyyerror(err_assign); ;}
+    break;
+
+  case 71:
+#line 291 "tools/wmc/mcy.y"
+    { (yyval.num) = ++last_id; ;}
+    break;
+
+  case 72:
+#line 292 "tools/wmc/mcy.y"
+    { (yyval.num) = last_id = (yyvsp[0].num); ;}
+    break;
+
+  case 73:
+#line 293 "tools/wmc/mcy.y"
+    { (yyval.num) = last_id += (yyvsp[0].num); ;}
+    break;
+
+  case 74:
+#line 294 "tools/wmc/mcy.y"
     { xyyerror(err_number); ;}
     break;
 
-  case 64:
-#line 267 "tools/wmc/mcy.y"
+  case 75:
+#line 297 "tools/wmc/mcy.y"
+    { have_sev = have_fac = have_sym = 0; ;}
+    break;
+
+  case 76:
+#line 298 "tools/wmc/mcy.y"
+    { if(have_sev) xyyerror("Severity already defined\n"); have_sev = 1; ;}
+    break;
+
+  case 77:
+#line 299 "tools/wmc/mcy.y"
+    { if(have_fac) xyyerror("Facility already defined\n"); have_fac = 1; ;}
+    break;
+
+  case 78:
+#line 300 "tools/wmc/mcy.y"
+    { if(have_sym) xyyerror("Symbolname already defined\n"); have_sym = 1; ;}
+    break;
+
+  case 79:
+#line 303 "tools/wmc/mcy.y"
+    { last_sym = (yyvsp[0].str); ;}
+    break;
+
+  case 80:
+#line 304 "tools/wmc/mcy.y"
+    { xyyerror(err_ident); ;}
+    break;
+
+  case 81:
+#line 305 "tools/wmc/mcy.y"
     { xyyerror(err_assign); ;}
     break;
 
-  case 65:
-#line 270 "tools/wmc/mcy.y"
-    { yyval.num = yyvsp[0].num; ;}
-    break;
-
-  case 66:
-#line 271 "tools/wmc/mcy.y"
+  case 82:
+#line 308 "tools/wmc/mcy.y"
     {
-		if(yyvsp[0].tok->type != tok_language)
-			xyyerror("Language name or code expected");
-		yyval.num = yyvsp[0].tok->token;
-	;}
-    break;
-
-  case 67:
-#line 281 "tools/wmc/mcy.y"
-    { test_id(yyvsp[-1].num); ;}
-    break;
-
-  case 68:
-#line 281 "tools/wmc/mcy.y"
-    { yyval.msg = complete_msg(yyvsp[0].msg, yyvsp[-3].num); ;}
-    break;
-
-  case 69:
-#line 284 "tools/wmc/mcy.y"
-    {
-		if(yyvsp[0].num & (~0xffff))
-			xyyerror("Message ID value out of range (0x%08x > 0xffff)", yyvsp[0].num);
-		yyval.num = yyvsp[0].num;
-	;}
-    break;
-
-  case 70:
-#line 289 "tools/wmc/mcy.y"
-    { xyyerror(err_assign); ;}
-    break;
-
-  case 71:
-#line 292 "tools/wmc/mcy.y"
-    { yyval.num = ++last_id; ;}
-    break;
-
-  case 72:
-#line 293 "tools/wmc/mcy.y"
-    { yyval.num = last_id = yyvsp[0].num; ;}
-    break;
-
-  case 73:
-#line 294 "tools/wmc/mcy.y"
-    { yyval.num = last_id += yyvsp[0].num; ;}
-    break;
-
-  case 74:
-#line 295 "tools/wmc/mcy.y"
-    { xyyerror(err_number); ;}
-    break;
-
-  case 75:
-#line 298 "tools/wmc/mcy.y"
-    { have_sev = have_fac = have_sym = 0; ;}
-    break;
-
-  case 76:
-#line 299 "tools/wmc/mcy.y"
-    { if(have_sev) xyyerror("Severity already defined"); have_sev = 1; ;}
-    break;
-
-  case 77:
-#line 300 "tools/wmc/mcy.y"
-    { if(have_fac) xyyerror("Facility already defined"); have_fac = 1; ;}
-    break;
-
-  case 78:
-#line 301 "tools/wmc/mcy.y"
-    { if(have_sym) xyyerror("Symbolname already defined"); have_sym = 1; ;}
-    break;
-
-  case 79:
-#line 304 "tools/wmc/mcy.y"
-    { last_sym = yyvsp[0].str; ;}
-    break;
-
-  case 80:
-#line 305 "tools/wmc/mcy.y"
-    { xyyerror(err_ident); ;}
-    break;
-
-  case 81:
-#line 306 "tools/wmc/mcy.y"
-    { xyyerror(err_assign); ;}
-    break;
-
-  case 82:
-#line 309 "tools/wmc/mcy.y"
-    {
-		token_t *tok = lookup_token(yyvsp[0].tok->name);
+		token_t *tok = lookup_token((yyvsp[0].tok)->name);
 		if(!tok)
-			xyyerror("Undefined severityname");
+			xyyerror("Undefined severityname\n");
 		if(tok->type != tok_severity)
-			xyyerror("Identifier is not of class 'severity'");
+			xyyerror("Identifier is not of class 'severity'\n");
 		last_sev = tok->token;
 	;}
     break;
 
   case 83:
+#line 316 "tools/wmc/mcy.y"
+    { xyyerror(err_ident); ;}
+    break;
+
+  case 84:
 #line 317 "tools/wmc/mcy.y"
-    { xyyerror(err_ident); ;}
-    break;
-
-  case 84:
-#line 318 "tools/wmc/mcy.y"
     { xyyerror(err_assign); ;}
     break;
 
   case 85:
-#line 321 "tools/wmc/mcy.y"
+#line 320 "tools/wmc/mcy.y"
     {
-		token_t *tok = lookup_token(yyvsp[0].tok->name);
+		token_t *tok = lookup_token((yyvsp[0].tok)->name);
 		if(!tok)
-			xyyerror("Undefined facilityname");
+			xyyerror("Undefined facilityname\n");
 		if(tok->type != tok_facility)
-			xyyerror("Identifier is not of class 'facility'");
+			xyyerror("Identifier is not of class 'facility'\n");
 		last_fac = tok->token;
 	;}
     break;
 
   case 86:
+#line 328 "tools/wmc/mcy.y"
+    { xyyerror(err_ident); ;}
+    break;
+
+  case 87:
 #line 329 "tools/wmc/mcy.y"
-    { xyyerror(err_ident); ;}
-    break;
-
-  case 87:
-#line 330 "tools/wmc/mcy.y"
     { xyyerror(err_assign); ;}
     break;
 
   case 88:
+#line 335 "tools/wmc/mcy.y"
+    { (yyval.msg) = add_lanmsg(NULL, (yyvsp[0].lmp)); ;}
+    break;
+
+  case 89:
 #line 336 "tools/wmc/mcy.y"
-    { yyval.msg = add_lanmsg(NULL, yyvsp[0].lmp); ;}
-    break;
-
-  case 89:
+    { (yyval.msg) = add_lanmsg((yyvsp[-1].msg), (yyvsp[0].lmp)); ;}
+    break;
+
+  case 90:
 #line 337 "tools/wmc/mcy.y"
-    { yyval.msg = add_lanmsg(yyvsp[-1].msg, yyvsp[0].lmp); ;}
-    break;
-
-  case 90:
-#line 338 "tools/wmc/mcy.y"
-    { xyyerror("'Language=...' (start of message text-definition) expected"); ;}
+    { xyyerror("'Language=...' (start of message text-definition) expected\n"); ;}
     break;
 
   case 91:
-#line 341 "tools/wmc/mcy.y"
-    { yyval.lmp = new_lanmsg(&yyvsp[-3].lcp, yyvsp[-1].str); ;}
+#line 340 "tools/wmc/mcy.y"
+    { (yyval.lmp) = new_lanmsg(&(yyvsp[-3].lcp), (yyvsp[-1].str)); ;}
     break;
 
   case 92:
-#line 349 "tools/wmc/mcy.y"
+#line 348 "tools/wmc/mcy.y"
     {
-		token_t *tok = lookup_token(yyvsp[-1].tok->name);
+		token_t *tok = lookup_token((yyvsp[-1].tok)->name);
 		cp_xlat_t *cpx;
 		if(!tok)
-			xyyerror("Undefined language");
+			xyyerror("Undefined language\n");
 		if(tok->type != tok_language)
-			xyyerror("Identifier is not of class 'language'");
+			xyyerror("Identifier is not of class 'language'\n");
 		if((cpx = find_cpxlat(tok->token)))
 		{
-			set_codepage(yyval.lcp.codepage = cpx->cpin);
+			set_codepage((yyval.lcp).codepage = cpx->cpin);
 		}
 		else if(!tok->codepage)
 		{
@@ -1686,85 +1807,86 @@
 			if(!lan)
 			{
 				/* Just set default; warning was given while parsing languagenames */
-				set_codepage(yyval.lcp.codepage = WMC_DEFAULT_CODEPAGE);
+				set_codepage((yyval.lcp).codepage = WMC_DEFAULT_CODEPAGE);
 			}
 			else
 			{
 				/* The default seems to be to use the DOS codepage... */
-				set_codepage(yyval.lcp.codepage = lan->doscp);
+				set_codepage((yyval.lcp).codepage = lan->doscp);
 			}
 		}
 		else
-			set_codepage(yyval.lcp.codepage = tok->codepage);
-		yyval.lcp.language = tok->token;
+			set_codepage((yyval.lcp).codepage = tok->codepage);
+		(yyval.lcp).language = tok->token;
 	;}
     break;
 
   case 93:
+#line 377 "tools/wmc/mcy.y"
+    { xyyerror("Missing newline\n"); ;}
+    break;
+
+  case 94:
 #line 378 "tools/wmc/mcy.y"
-    { xyyerror("Missing newline"); ;}
-    break;
-
-  case 94:
+    { xyyerror(err_ident); ;}
+    break;
+
+  case 95:
 #line 379 "tools/wmc/mcy.y"
-    { xyyerror(err_ident); ;}
-    break;
-
-  case 95:
-#line 380 "tools/wmc/mcy.y"
     { xyyerror(err_assign); ;}
     break;
 
   case 96:
+#line 382 "tools/wmc/mcy.y"
+    { (yyval.str) = (yyvsp[0].str); ;}
+    break;
+
+  case 97:
 #line 383 "tools/wmc/mcy.y"
-    { yyval.str = yyvsp[0].str; ;}
-    break;
-
-  case 97:
+    { (yyval.str) = merge((yyvsp[-1].str), (yyvsp[0].str)); ;}
+    break;
+
+  case 98:
 #line 384 "tools/wmc/mcy.y"
-    { yyval.str = merge(yyvsp[-1].str, yyvsp[0].str); ;}
-    break;
-
-  case 98:
+    { xyyerror(err_msg); ;}
+    break;
+
+  case 99:
 #line 385 "tools/wmc/mcy.y"
     { xyyerror(err_msg); ;}
     break;
 
-  case 99:
-#line 386 "tools/wmc/mcy.y"
-    { xyyerror(err_msg); ;}
-    break;
-
   case 100:
+#line 391 "tools/wmc/mcy.y"
+    { (yyval.tok) = xmalloc(sizeof(token_t)); memset((yyval.tok),0,sizeof(*(yyval.tok))); (yyval.tok)->name = (yyvsp[0].str); ;}
+    break;
+
+  case 101:
 #line 392 "tools/wmc/mcy.y"
-    { yyval.tok = xmalloc(sizeof(token_t)); yyval.tok->name = yyvsp[0].str; ;}
-    break;
-
-  case 101:
-#line 393 "tools/wmc/mcy.y"
-    { yyval.tok = yyvsp[0].tok; ;}
+    { (yyval.tok) = (yyvsp[0].tok); ;}
     break;
 
   case 102:
-#line 396 "tools/wmc/mcy.y"
+#line 395 "tools/wmc/mcy.y"
     { want_nl = 1; ;}
     break;
 
   case 103:
-#line 399 "tools/wmc/mcy.y"
+#line 398 "tools/wmc/mcy.y"
     { want_line = 1; ;}
     break;
 
   case 104:
-#line 402 "tools/wmc/mcy.y"
+#line 401 "tools/wmc/mcy.y"
     { want_file = 1; ;}
     break;
 
 
+      default: break;
     }
 
-/* Line 1000 of yacc.c.  */
-#line 1768 "tools/wmc/mcy.tab.c"
+/* Line 1126 of yacc.c.  */
+#line 1890 "mcy.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -1803,11 +1925,35 @@
 
       if (YYPACT_NINF < yyn && yyn < YYLAST)
 	{
-	  YYSIZE_T yysize = 0;
 	  int yytype = YYTRANSLATE (yychar);
-	  const char* yyprefix;
-	  char *yymsg;
+	  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+	  YYSIZE_T yysize = yysize0;
+	  YYSIZE_T yysize1;
+	  int yysize_overflow = 0;
+	  char *yymsg = 0;
+#	  define YYERROR_VERBOSE_ARGS_MAXIMUM 5
+	  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
 	  int yyx;
+
+#if 0
+	  /* This is so xgettext sees the translatable formats that are
+	     constructed on the fly.  */
+	  YY_("syntax error, unexpected %s");
+	  YY_("syntax error, unexpected %s, expecting %s");
+	  YY_("syntax error, unexpected %s, expecting %s or %s");
+	  YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+	  YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+#endif
+	  char *yyfmt;
+	  char const *yyf;
+	  static char const yyunexpected[] = "syntax error, unexpected %s";
+	  static char const yyexpecting[] = ", expecting %s";
+	  static char const yyor[] = " or %s";
+	  char yyformat[sizeof yyunexpected
+			+ sizeof yyexpecting - 1
+			+ ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+			   * (sizeof yyor - 1))];
+	  char const *yyprefix = yyexpecting;
 
 	  /* Start YYX at -YYN if negative to avoid negative indexes in
 	     YYCHECK.  */
@@ -1816,81 +1962,91 @@
 	  /* Stay within bounds of both yycheck and yytname.  */
 	  int yychecklim = YYLAST - yyn;
 	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-	  int yycount = 0;
-
-	  yyprefix = ", expecting ";
+	  int yycount = 1;
+
+	  yyarg[0] = yytname[yytype];
+	  yyfmt = yystpcpy (yyformat, yyunexpected);
+
 	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
 	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
 	      {
-		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
-		yycount += 1;
-		if (yycount == 5)
+		if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
 		  {
-		    yysize = 0;
+		    yycount = 1;
+		    yysize = yysize0;
+		    yyformat[sizeof yyunexpected - 1] = '\0';
 		    break;
 		  }
+		yyarg[yycount++] = yytname[yyx];
+		yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+		yysize_overflow |= yysize1 < yysize;
+		yysize = yysize1;
+		yyfmt = yystpcpy (yyfmt, yyprefix);
+		yyprefix = yyor;
 	      }
-	  yysize += (sizeof ("syntax error, unexpected ")
-		     + yystrlen (yytname[yytype]));
-	  yymsg = (char *) YYSTACK_ALLOC (yysize);
-	  if (yymsg != 0)
+
+	  yyf = YY_(yyformat);
+	  yysize1 = yysize + yystrlen (yyf);
+	  yysize_overflow |= yysize1 < yysize;
+	  yysize = yysize1;
+
+	  if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
+	    yymsg = (char *) YYSTACK_ALLOC (yysize);
+	  if (yymsg)
 	    {
-	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
-	      yyp = yystpcpy (yyp, yytname[yytype]);
-
-	      if (yycount < 5)
+	      /* Avoid sprintf, as that infringes on the user's name space.
+		 Don't have undefined behavior even if the translation
+		 produced a string with the wrong number of "%s"s.  */
+	      char *yyp = yymsg;
+	      int yyi = 0;
+	      while ((*yyp = *yyf))
 		{
-		  yyprefix = ", expecting ";
-		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-		      {
-			yyp = yystpcpy (yyp, yyprefix);
-			yyp = yystpcpy (yyp, yytname[yyx]);
-			yyprefix = " or ";
-		      }
+		  if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		    {
+		      yyp += yytnamerr (yyp, yyarg[yyi++]);
+		      yyf += 2;
+		    }
+		  else
+		    {
+		      yyp++;
+		      yyf++;
+		    }
 		}
 	      yyerror (yymsg);
 	      YYSTACK_FREE (yymsg);
 	    }
 	  else
-	    yyerror ("syntax error; also virtual memory exhausted");
+	    {
+	      yyerror (YY_("syntax error"));
+	      goto yyexhaustedlab;
+	    }
 	}
       else
 #endif /* YYERROR_VERBOSE */
-	yyerror ("syntax error");
+	yyerror (YY_("syntax error"));
     }
 
 
 
   if (yyerrstatus == 3)
     {
-      /* If just tried and failed to reuse lookahead token after an
+      /* If just tried and failed to reuse look-ahead token after an
 	 error, discard it.  */
 
       if (yychar <= YYEOF)
         {
-          /* If at end of input, pop the error token,
-	     then the rest of the stack, then return failure.  */
+	  /* Return failure if at end of input.  */
 	  if (yychar == YYEOF)
-	     for (;;)
-	       {
-		 YYPOPSTACK;
-		 if (yyssp == yyss)
-		   YYABORT;
-		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
-		 yydestruct (yystos[*yyssp], yyvsp);
-	       }
+	    YYABORT;
         }
       else
 	{
-	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
-	  yydestruct (yytoken, &yylval);
+	  yydestruct ("Error: discarding", yytoken, &yylval);
 	  yychar = YYEMPTY;
-
 	}
     }
 
-  /* Else will try to reuse lookahead token after shifting the error
+  /* Else will try to reuse look-ahead token after shifting the error
      token.  */
   goto yyerrlab1;
 
@@ -1900,14 +2056,13 @@
 `---------------------------------------------------*/
 yyerrorlab:
 
-#ifdef __GNUC__
-  /* Pacify GCC when the user code never invokes YYERROR and the label
-     yyerrorlab therefore never appears in user code.  */
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
   if (0)
      goto yyerrorlab;
-#endif
-
-  yyvsp -= yylen;
+
+yyvsp -= yylen;
   yyssp -= yylen;
   yystate = *yyssp;
   goto yyerrlab1;
@@ -1937,8 +2092,8 @@
       if (yyssp == yyss)
 	YYABORT;
 
-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
-      yydestruct (yystos[yystate], yyvsp);
+
+      yydestruct ("Error: popping", yystos[yystate], yyvsp);
       YYPOPSTACK;
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
@@ -1947,10 +2102,11 @@
   if (yyn == YYFINAL)
     YYACCEPT;
 
-  YYDPRINTF ((stderr, "Shifting error token, "));
-
   *++yyvsp = yylval;
 
+
+  /* Shift the error token. */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
@@ -1971,16 +2127,25 @@
   goto yyreturn;
 
 #ifndef yyoverflow
-/*----------------------------------------------.
-| yyoverflowlab -- parser overflow comes here.  |
-`----------------------------------------------*/
-yyoverflowlab:
-  yyerror ("parser stack overflow");
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
   yyresult = 2;
   /* Fall through.  */
 #endif
 
 yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+		 yytoken, &yylval);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK;
+    }
 #ifndef yyoverflow
   if (yyss != yyssa)
     YYSTACK_FREE (yyss);
@@ -1989,7 +2154,7 @@
 }
 
 
-#line 405 "tools/wmc/mcy.y"
+#line 404 "tools/wmc/mcy.y"
 
 
 static WCHAR *merge(WCHAR *s1, WCHAR *s2)
@@ -2008,12 +2173,12 @@
 	if(tp)
 	{
 		if(tok->type != type)
-			yywarning("Type change in token");
+			mcy_warning("Type change in token\n");
 		if(tp != tok)
-			xyyerror("Overlapping token not the same");
+			xyyerror("Overlapping token not the same\n");
 		/* else its already defined and changed */
 		if(tok->fixed)
-			xyyerror("Redefinition of %s", code);
+			xyyerror("Redefinition of %s\n", code);
 		tok->fixed = 1;
 	}
 	else
@@ -2025,13 +2190,13 @@
 
 static lanmsg_t *new_lanmsg(lan_cp_t *lcp, WCHAR *msg)
 {
-	lanmsg_t *lmp = (lanmsg_t *)xmalloc(sizeof(lanmsg_t));
+	lanmsg_t *lmp = xmalloc(sizeof(lanmsg_t));
 	lmp->lan = lcp->language;
 	lmp->cp  = lcp->codepage;
 	lmp->msg = msg;
 	lmp->len = unistrlen(msg) + 1;	/* Include termination */
 	if(lmp->len > 4096)
-		yywarning("Message exceptionally long; might be a missing termination");
+		mcy_warning("Message exceptionally long; might be a missing termination\n");
 	return lmp;
 }
 
@@ -2039,21 +2204,24 @@
 {
 	int i;
 	if(!msg)
+	{
 		msg = xmalloc(sizeof(msg_t));
+		memset( msg, 0, sizeof(*msg) );
+	}
 	msg->msgs = xrealloc(msg->msgs, (msg->nmsgs+1) * sizeof(*(msg->msgs)));
 	msg->msgs[msg->nmsgs] = lanmsg;
 	msg->nmsgs++;
 	for(i = 0; i < msg->nmsgs-1; i++)
 	{
 		if(msg->msgs[i]->lan == lanmsg->lan)
-			xyyerror("Message for language 0x%x already defined", lanmsg->lan);
+			xyyerror("Message for language 0x%x already defined\n", lanmsg->lan);
 	}
 	return msg;
 }
 
 static int sort_lanmsg(const void *p1, const void *p2)
 {
-	return (*(lanmsg_t **)p1)->lan - (*(lanmsg_t **)p2)->lan;
+	return (*(const lanmsg_t * const *)p1)->lan - (*(const lanmsg_t * const*)p2)->lan;
 }
 
 static msg_t *complete_msg(msg_t *mp, int id)
@@ -2063,7 +2231,7 @@
 	if(have_sym)
 		mp->sym = last_sym;
 	else
-		xyyerror("No symbolic name defined for message id %d", id);
+		xyyerror("No symbolic name defined for message id %d\n", id);
 	mp->sev = last_sev;
 	mp->fac = last_fac;
 	qsort(mp->msgs, mp->nmsgs, sizeof(*(mp->msgs)), sort_lanmsg);
@@ -2077,7 +2245,8 @@
 
 static void add_node(node_e type, void *p)
 {
-	node_t *ndp = (node_t *)xmalloc(sizeof(node_t));
+	node_t *ndp = xmalloc(sizeof(node_t));
+	memset( ndp, 0, sizeof(*ndp) );
 	ndp->type = type;
 	ndp->u.all = p;
 
@@ -2101,7 +2270,7 @@
 		if(ndp->type != nd_msg)
 			continue;
 		if(ndp->u.msg->id == id && ndp->u.msg->sev == last_sev && ndp->u.msg->fac == last_fac)
-			xyyerror("MessageId %d with facility 0x%x and severity 0x%x already defined", id, last_fac, last_sev);
+			xyyerror("MessageId %d with facility 0x%x and severity 0x%x already defined\n", id, last_fac, last_sev);
 	}
 }
 
@@ -2151,7 +2320,7 @@
 	return nm;
 }
 
-#define MSGRID(x)	((*(msg_t **)(x))->realid)
+#define MSGRID(x)	((*(const msg_t * const*)(x))->realid)
 static int sort_msg(const void *p1, const void *p2)
 {
 	return MSGRID(p1) > MSGRID(p2) ? 1 : (MSGRID(p1) == MSGRID(p2) ? 0 : -1);
@@ -2189,7 +2358,7 @@
 	for(nl = 0; nl < msgtab[0]->nmsgs; nl++)	/* This should be equal for all after check_languages() */
 	{
 		lbp = xmalloc(sizeof(lan_blk_t));
-
+		memset( lbp, 0, sizeof(*lbp) );
 		if(!lblktail)
 		{
 			lblkhead = lblktail = lbp;
@@ -2241,7 +2410,7 @@
 
 static int sc_xlat(const void *p1, const void *p2)
 {
-	return ((cp_xlat_t *)p1)->lan - ((cp_xlat_t *)p2)->lan;
+	return ((const cp_xlat_t *)p1)->lan - ((const cp_xlat_t *)p2)->lan;
 }
 
 static void add_cpxlat(int lan, int cpin, int cpout)

Modified: trunk/reactos/tools/wmc/mcy.tab.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/mcy.tab.h?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/mcy.tab.h (original)
+++ trunk/reactos/tools/wmc/mcy.tab.h Sat Dec  1 18:56:03 2007
@@ -1,7 +1,7 @@
-/* A Bison parser, made by GNU Bison 1.875c.  */
+/* A Bison parser, made by GNU Bison 2.1.  */
 
 /* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 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
@@ -15,8 +15,8 @@
 
    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.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, 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.
@@ -50,6 +50,7 @@
      tTOKEN = 276
    };
 #endif
+/* Tokens.  */
 #define tSEVNAMES 258
 #define tFACNAMES 259
 #define tLANNAMES 260
@@ -74,7 +75,7 @@
 
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 99 "tools/wmc/mcy.y"
+#line 98 "tools/wmc/mcy.y"
 typedef union YYSTYPE {
 	WCHAR		*str;
 	unsigned	num;
@@ -83,14 +84,14 @@
 	msg_t		*msg;
 	lan_cp_t	lcp;
 } YYSTYPE;
-/* Line 1275 of yacc.c.  */
-#line 88 "tools/wmc/mcy.tab.h"
+/* Line 1447 of yacc.c.  */
+#line 89 "tools/wmc/mcy.tab.h"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
 #endif
 
-extern YYSTYPE yylval;
+extern YYSTYPE mcy_lval;
 
 
 

Modified: trunk/reactos/tools/wmc/mcy.y
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/mcy.y?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/mcy.y (original)
+++ trunk/reactos/tools/wmc/mcy.y Sat Dec  1 18:56:03 2007
@@ -15,12 +15,12 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  *
  * NOTES:
  *
  * The basic grammar of the file is yet another example of, humpf,
- * design. There is is mix of context-insensitive and -sentitive
+ * design. There is a mix of context-insensitive and -sensitive
  * stuff, which makes it rather complicated.
  * The header definitions are all context-insensitive because they have
  * delimited arguments, whereas the message headers are (semi-) context-
@@ -95,7 +95,6 @@
 
 %}
 
-
 %union {
 	WCHAR		*str;
 	unsigned	num;
@@ -123,7 +122,7 @@
 %%
 file	: items	{
 		if(!check_languages(nodehead))
-			xyyerror("No messages defined");
+			xyyerror("No messages defined\n");
 		lanblockhead = block_messages(nodehead);
 	}
 	;
@@ -166,7 +165,7 @@
 			base = $3;
 			break;
 		default:
-			xyyerror("Numberbase must be 8, 10 or 16");
+			xyyerror("Numberbase must be 8, 10 or 16\n");
 		}
 	}
 	| tBASE '=' error		{ xyyerror(err_number); }
@@ -185,7 +184,7 @@
 		$1->token = $3;
 		$1->alias = $4;
 		if($3 & (~0x3))
-			xyyerror("Severity value out of range (0x%08x > 0x3)", $3);
+			xyyerror("Severity value out of range (0x%08x > 0x3)\n", $3);
 		do_add_token(tok_severity, $1, "severity");
 	}
 	| token '=' error	{ xyyerror(err_number); }
@@ -204,7 +203,7 @@
 		$1->token = $3;
 		$1->alias = $4;
 		if($3 & (~0xfff))
-			xyyerror("Facility value out of range (0x%08x > 0xfff)", $3);
+			xyyerror("Facility value out of range (0x%08x > 0xfff)\n", $3);
 		do_add_token(tok_facility, $1, "facility");
 	}
 	| token '=' error	{ xyyerror(err_number); }
@@ -230,9 +229,9 @@
 		$1->codepage = $7;
 		do_add_token(tok_language, $1, "language");
 		if(!find_language($3) && !find_cpxlat($3))
-			yywarning("Language 0x%x not built-in, using codepage %d; use explicit codepage to override", $3, WMC_DEFAULT_CODEPAGE);
-	}
-	| token '=' tNUMBER setfile ':' error	{ xyyerror("Filename expected"); }
+			mcy_warning("Language 0x%x not built-in, using codepage %d; use explicit codepage to override\n", $3, WMC_DEFAULT_CODEPAGE);
+	}
+	| token '=' tNUMBER setfile ':' error	{ xyyerror("Filename expected\n"); }
 	| token '=' tNUMBER error		{ xyyerror(err_colon); }
 	| token '=' error			{ xyyerror(err_number); }
 	| token error				{ xyyerror(err_assign); }
@@ -240,7 +239,7 @@
 
 optcp	: /* Empty */	{ $$ = 0; }
 	| ':' tNUMBER	{ $$ = $2; }
-	| ':' error	{ xyyerror("Codepage-number expected"); }
+	| ':' error	{ xyyerror("Codepage-number expected\n"); }
 	;
 
 /*----------------------------------------------------------------------
@@ -254,7 +253,7 @@
 cmap	: clan '=' tNUMBER ':' tNUMBER {
 		static const char err_nocp[] = "Codepage %d not builtin; cannot convert";
 		if(find_cpxlat($1))
-			xyyerror("Codepage translation already defined for language 0x%x", $1);
+			xyyerror("Codepage translation already defined for language 0x%x\n", $1);
 		if($3 && !find_codepage($3))
 			xyyerror(err_nocp, $3);
 		if($5 && !find_codepage($5))
@@ -270,7 +269,7 @@
 clan	: tNUMBER	{ $$ = $1; }
 	| tTOKEN	{
 		if($1->type != tok_language)
-			xyyerror("Language name or code expected");
+			xyyerror("Language name or code expected\n");
 		$$ = $1->token;
 	}
 	;
@@ -283,7 +282,7 @@
 
 msgid	: tMSGID '=' id	{
 		if($3 & (~0xffff))
-			xyyerror("Message ID value out of range (0x%08x > 0xffff)", $3);
+			xyyerror("Message ID value out of range (0x%08x > 0xffff)\n", $3);
 		$$ = $3;
 	}
 	| tMSGID error	{ xyyerror(err_assign); }
@@ -296,9 +295,9 @@
 	;
 
 sevfacsym: /* Empty */	{ have_sev = have_fac = have_sym = 0; }
-	| sevfacsym sev	{ if(have_sev) xyyerror("Severity already defined"); have_sev = 1; }
-	| sevfacsym fac	{ if(have_fac) xyyerror("Facility already defined"); have_fac = 1; }
-	| sevfacsym sym	{ if(have_sym) xyyerror("Symbolname already defined"); have_sym = 1; }
+	| sevfacsym sev	{ if(have_sev) xyyerror("Severity already defined\n"); have_sev = 1; }
+	| sevfacsym fac	{ if(have_fac) xyyerror("Facility already defined\n"); have_fac = 1; }
+	| sevfacsym sym	{ if(have_sym) xyyerror("Symbolname already defined\n"); have_sym = 1; }
 	;
 
 sym	: tSYMNAME '=' tIDENT	{ last_sym = $3; }
@@ -309,9 +308,9 @@
 sev	: tSEVERITY '=' token	{
 		token_t *tok = lookup_token($3->name);
 		if(!tok)
-			xyyerror("Undefined severityname");
+			xyyerror("Undefined severityname\n");
 		if(tok->type != tok_severity)
-			xyyerror("Identifier is not of class 'severity'");
+			xyyerror("Identifier is not of class 'severity'\n");
 		last_sev = tok->token;
 	}
 	| tSEVERITY '=' error	{ xyyerror(err_ident); }
@@ -321,9 +320,9 @@
 fac	: tFACILITY '=' token	{
 		token_t *tok = lookup_token($3->name);
 		if(!tok)
-			xyyerror("Undefined facilityname");
+			xyyerror("Undefined facilityname\n");
 		if(tok->type != tok_facility)
-			xyyerror("Identifier is not of class 'facility'");
+			xyyerror("Identifier is not of class 'facility'\n");
 		last_fac = tok->token;
 	}
 	| tFACILITY '=' error	{ xyyerror(err_ident); }
@@ -335,7 +334,7 @@
  */
 bodies	: body		{ $$ = add_lanmsg(NULL, $1); }
 	| bodies body	{ $$ = add_lanmsg($1, $2); }
-	| error		{ xyyerror("'Language=...' (start of message text-definition) expected"); }
+	| error		{ xyyerror("'Language=...' (start of message text-definition) expected\n"); }
 	;
 
 body	: lang setline lines tMSGEND	{ $$ = new_lanmsg(&$1, $3); }
@@ -350,9 +349,9 @@
 		token_t *tok = lookup_token($4->name);
 		cp_xlat_t *cpx;
 		if(!tok)
-			xyyerror("Undefined language");
+			xyyerror("Undefined language\n");
 		if(tok->type != tok_language)
-			xyyerror("Identifier is not of class 'language'");
+			xyyerror("Identifier is not of class 'language'\n");
 		if((cpx = find_cpxlat(tok->token)))
 		{
 			set_codepage($$.codepage = cpx->cpin);
@@ -375,7 +374,7 @@
 			set_codepage($$.codepage = tok->codepage);
 		$$.language = tok->token;
 	}
-	| tLANGUAGE setnl '=' token error	{ xyyerror("Missing newline"); }
+	| tLANGUAGE setnl '=' token error	{ xyyerror("Missing newline\n"); }
 	| tLANGUAGE setnl '=' error		{ xyyerror(err_ident); }
 	| tLANGUAGE error			{ xyyerror(err_assign); }
 	;
@@ -389,7 +388,7 @@
 /*----------------------------------------------------------------------
  * Helper rules
  */
-token	: tIDENT	{ $$ = xmalloc(sizeof(token_t)); $$->name = $1; }
+token	: tIDENT	{ $$ = xmalloc(sizeof(token_t)); memset($$,0,sizeof(*$$)); $$->name = $1; }
 	| tTOKEN	{ $$ = $1; }
 	;
 
@@ -420,12 +419,12 @@
 	if(tp)
 	{
 		if(tok->type != type)
-			yywarning("Type change in token");
+			mcy_warning("Type change in token\n");
 		if(tp != tok)
-			xyyerror("Overlapping token not the same");
+			xyyerror("Overlapping token not the same\n");
 		/* else its already defined and changed */
 		if(tok->fixed)
-			xyyerror("Redefinition of %s", code);
+			xyyerror("Redefinition of %s\n", code);
 		tok->fixed = 1;
 	}
 	else
@@ -437,13 +436,13 @@
 
 static lanmsg_t *new_lanmsg(lan_cp_t *lcp, WCHAR *msg)
 {
-	lanmsg_t *lmp = (lanmsg_t *)xmalloc(sizeof(lanmsg_t));
+	lanmsg_t *lmp = xmalloc(sizeof(lanmsg_t));
 	lmp->lan = lcp->language;
 	lmp->cp  = lcp->codepage;
 	lmp->msg = msg;
 	lmp->len = unistrlen(msg) + 1;	/* Include termination */
 	if(lmp->len > 4096)
-		yywarning("Message exceptionally long; might be a missing termination");
+		mcy_warning("Message exceptionally long; might be a missing termination\n");
 	return lmp;
 }
 
@@ -451,21 +450,24 @@
 {
 	int i;
 	if(!msg)
+	{
 		msg = xmalloc(sizeof(msg_t));
+		memset( msg, 0, sizeof(*msg) );
+	}
 	msg->msgs = xrealloc(msg->msgs, (msg->nmsgs+1) * sizeof(*(msg->msgs)));
 	msg->msgs[msg->nmsgs] = lanmsg;
 	msg->nmsgs++;
 	for(i = 0; i < msg->nmsgs-1; i++)
 	{
 		if(msg->msgs[i]->lan == lanmsg->lan)
-			xyyerror("Message for language 0x%x already defined", lanmsg->lan);
+			xyyerror("Message for language 0x%x already defined\n", lanmsg->lan);
 	}
 	return msg;
 }
 
 static int sort_lanmsg(const void *p1, const void *p2)
 {
-	return (*(lanmsg_t **)p1)->lan - (*(lanmsg_t **)p2)->lan;
+	return (*(const lanmsg_t * const *)p1)->lan - (*(const lanmsg_t * const*)p2)->lan;
 }
 
 static msg_t *complete_msg(msg_t *mp, int id)
@@ -475,7 +477,7 @@
 	if(have_sym)
 		mp->sym = last_sym;
 	else
-		xyyerror("No symbolic name defined for message id %d", id);
+		xyyerror("No symbolic name defined for message id %d\n", id);
 	mp->sev = last_sev;
 	mp->fac = last_fac;
 	qsort(mp->msgs, mp->nmsgs, sizeof(*(mp->msgs)), sort_lanmsg);
@@ -489,7 +491,8 @@
 
 static void add_node(node_e type, void *p)
 {
-	node_t *ndp = (node_t *)xmalloc(sizeof(node_t));
+	node_t *ndp = xmalloc(sizeof(node_t));
+	memset( ndp, 0, sizeof(*ndp) );
 	ndp->type = type;
 	ndp->u.all = p;
 
@@ -513,7 +516,7 @@
 		if(ndp->type != nd_msg)
 			continue;
 		if(ndp->u.msg->id == id && ndp->u.msg->sev == last_sev && ndp->u.msg->fac == last_fac)
-			xyyerror("MessageId %d with facility 0x%x and severity 0x%x already defined", id, last_fac, last_sev);
+			xyyerror("MessageId %d with facility 0x%x and severity 0x%x already defined\n", id, last_fac, last_sev);
 	}
 }
 
@@ -563,7 +566,7 @@
 	return nm;
 }
 
-#define MSGRID(x)	((*(msg_t **)(x))->realid)
+#define MSGRID(x)	((*(const msg_t * const*)(x))->realid)
 static int sort_msg(const void *p1, const void *p2)
 {
 	return MSGRID(p1) > MSGRID(p2) ? 1 : (MSGRID(p1) == MSGRID(p2) ? 0 : -1);
@@ -601,7 +604,7 @@
 	for(nl = 0; nl < msgtab[0]->nmsgs; nl++)	/* This should be equal for all after check_languages() */
 	{
 		lbp = xmalloc(sizeof(lan_blk_t));
-
+		memset( lbp, 0, sizeof(*lbp) );
 		if(!lblktail)
 		{
 			lblkhead = lblktail = lbp;
@@ -653,7 +656,7 @@
 
 static int sc_xlat(const void *p1, const void *p2)
 {
-	return ((cp_xlat_t *)p1)->lan - ((cp_xlat_t *)p2)->lan;
+	return ((const cp_xlat_t *)p1)->lan - ((const cp_xlat_t *)p2)->lan;
 }
 
 static void add_cpxlat(int lan, int cpin, int cpout)

Modified: trunk/reactos/tools/wmc/utils.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/utils.c?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/utils.c (original)
+++ trunk/reactos/tools/wmc/utils.c Sat Dec  1 18:56:03 2007
@@ -15,7 +15,7 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
 #include "config.h"
@@ -36,9 +36,8 @@
 
 static void generic_msg(const char *s, const char *t, va_list ap)
 {
-	fprintf(stderr, "%s %s: %d, %d: ", t, input_name ? input_name : "stdin", line_number, char_number);
-	vfprintf(stderr, s, ap);
-	fprintf(stderr, "\n");
+	fprintf(stderr, "%s:%d:%d: %s: ", input_name ? input_name : "stdin", line_number, char_number, t);
+	vfprintf(stderr, s, ap);
 }
 
 /*
@@ -49,7 +48,7 @@
  * The extra routine 'xyyerror' is used to exit after giving a real
  * message.
  */
-int yyerror(const char *s, ...)
+int mcy_error(const char *s, ...)
 {
 #ifndef SUPPRESS_YACC_ERROR_MESSAGE
 	va_list ap;
@@ -70,7 +69,7 @@
 	return 1;
 }
 
-int yywarning(const char *s, ...)
+int mcy_warning(const char *s, ...)
 {
 	va_list ap;
 	va_start(ap, s);
@@ -85,7 +84,6 @@
 	va_start(ap, s);
 	fprintf(stderr, "Internal error (please report) %s %d: ", file, line);
 	vfprintf(stderr, s, ap);
-	fprintf(stderr, "\n");
 	va_end(ap);
 	exit(3);
 }
@@ -96,7 +94,6 @@
 	va_start(ap, s);
 	fprintf(stderr, "Error: ");
 	vfprintf(stderr, s, ap);
-	fprintf(stderr, "\n");
 	va_end(ap);
 	exit(2);
 }
@@ -107,7 +104,6 @@
 	va_start(ap, s);
 	fprintf(stderr, "Warning: ");
 	vfprintf(stderr, s, ap);
-	fprintf(stderr, "\n");
 	va_end(ap);
 }
 
@@ -128,7 +124,7 @@
 	namelen = strlen(name);
 
 	/* +4 for later extension and +1 for '\0' */
-	base = (char *)xmalloc(namelen +4 +1);
+	base = xmalloc(namelen +4 +1);
 	strcpy(base, name);
 	if(!strcasecmp(name + namelen-extlen, ext))
 	{
@@ -148,12 +144,7 @@
     {
 	error("Virtual memory exhausted.\n");
     }
-    /*
-     * We set it to 0.
-     * This is *paramount* because we depend on it
-     * just about everywhere in the rest of the code.
-     */
-    memset(res, 0, size);
+    memset(res, 0x55, size);
     return res;
 }
 
@@ -177,7 +168,7 @@
 	char *s;
 
 	assert(str != NULL);
-	s = (char *)xmalloc(strlen(str)+1);
+	s = xmalloc(strlen(str)+1);
 	return strcpy(s, str);
 }
 
@@ -203,7 +194,7 @@
 	WCHAR *s;
 
 	assert(str != NULL);
-	s = (WCHAR *)xmalloc((unistrlen(str)+1) * sizeof(WCHAR));
+	s = xmalloc((unistrlen(str)+1) * sizeof(WCHAR));
 	return unistrcpy(s, str);
 }
 
@@ -220,7 +211,7 @@
 			if(!once)
 			{
 				once++;
-				yywarning(warn);
+				mcy_warning(warn);
 			}
 			i = *s1++ - *s2++;
 		}
@@ -233,7 +224,7 @@
 	if((*s1 & 0xffff) > 0x7f || (*s2 & 0xffff) > 0x7f)
 	{
 		if(!once)
-			yywarning(warn);
+			mcy_warning(warn);
 		return *s1 - *s2;
 	}
 	else

Modified: trunk/reactos/tools/wmc/utils.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/utils.h?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/utils.h (original)
+++ trunk/reactos/tools/wmc/utils.h Sat Dec  1 18:56:03 2007
@@ -15,7 +15,7 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
 #ifndef __WMC_UTILS_H
@@ -33,9 +33,9 @@
 #define __attribute__(X)
 #endif
 
-int yyerror(const char *s, ...) __attribute__((format (printf, 1, 2)));
+int mcy_error(const char *s, ...) __attribute__((format (printf, 1, 2)));
 int xyyerror(const char *s, ...) __attribute__((format (printf, 1, 2)));
-int yywarning(const char *s, ...) __attribute__((format (printf, 1, 2)));
+int mcy_warning(const char *s, ...) __attribute__((format (printf, 1, 2)));
 void internal_error(const char *file, int line, const char *s, ...) __attribute__((format (printf, 3, 4)));
 void error(const char *s, ...) __attribute__((format (printf, 1, 2)));
 void warning(const char *s, ...) __attribute__((format (printf, 1, 2)));

Modified: trunk/reactos/tools/wmc/wmc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/wmc.c?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/wmc.c (original)
+++ trunk/reactos/tools/wmc/wmc.c Sat Dec  1 18:56:03 2007
@@ -15,7 +15,7 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
 #include "config.h"
@@ -31,7 +31,7 @@
 #include "lang.h"
 #include "write.h"
 
-static char usage[] =
+static const char usage[] =
 	"Usage: wmc [options...] [inputfile.mc]\n"
 	"   -B x        Set output byte-order x={n[ative], l[ittle], b[ig]}\n"
 	"               (default is n[ative] which equals "
@@ -58,7 +58,7 @@
 	"bytes read, which should be 0x0000..0x00ff.\n"
 	;
 
-static char version_string[] =
+static const char version_string[] =
 	"Wine Message Compiler version " PACKAGE_VERSION "\n"
 	"Copyright 2000 Bertho A. Stultiens\n"
 	;
@@ -113,8 +113,21 @@
 char *cmdline;			/* The entire commandline */
 time_t now;			/* The time of start of wmc */
 
+int mcy_debug;
+
 int getopt (int argc, char *const *argv, const char *optstring);
 static void segvhandler(int sig);
+
+static void cleanup_files(void)
+{
+    if (output_name) unlink( output_name );
+    if (header_name) unlink( header_name );
+}
+
+static void exit_on_signal( int sig )
+{
+    exit(1);  /* this will call the atexit functions */
+}
 
 int main(int argc,char *argv[])
 {
@@ -126,7 +139,13 @@
 	int i;
 	int cmdlen;
 
+	atexit( cleanup_files );
 	signal(SIGSEGV, segvhandler);
+	signal( SIGTERM, exit_on_signal );
+	signal( SIGINT, exit_on_signal );
+#ifdef SIGHUP
+	signal( SIGHUP, exit_on_signal );
+#endif
 
 	now = time(NULL);
 
@@ -220,7 +239,7 @@
 		return 1;
 	}
 
-	yydebug = dodebug;
+	mcy_debug = dodebug;
 	if(dodebug)
 	{
 		setbuf(stdout, 0);
@@ -254,7 +273,7 @@
 	else
 		yyin = stdin;
 
-	ret = yyparse();
+	ret = mcy_parse();
 
 	if(input_name)
 		fclose(yyin);
@@ -269,7 +288,8 @@
 	write_rc_file(output_name);
 	if(!rcinline)
 		write_bin_files();
-
+	output_name = NULL;
+	header_name = NULL;
 	return 0;
 }
 

Modified: trunk/reactos/tools/wmc/wmc.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/wmc.h?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/wmc.h (original)
+++ trunk/reactos/tools/wmc/wmc.h Sat Dec  1 18:56:03 2007
@@ -15,7 +15,7 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
 #ifndef __WMC_WMC_H
@@ -56,15 +56,15 @@
 extern int line_number;
 extern int char_number;
 
-int yyparse(void);
-extern int yydebug;
+int mcy_parse(void);
+extern int mcy_debug;
 extern int want_nl;
 extern int want_line;
 extern int want_file;
 extern node_t *nodehead;
 extern lan_blk_t *lanblockhead;
 
-int yylex(void);
+int mcy_lex(void);
 FILE *yyin;
 void set_codepage(int cp);
 

Modified: trunk/reactos/tools/wmc/wmctypes.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/wmctypes.h?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/wmctypes.h (original)
+++ trunk/reactos/tools/wmc/wmctypes.h Sat Dec  1 18:56:03 2007
@@ -15,7 +15,7 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
 #ifndef __WMC_WMCTYPES_H

Modified: trunk/reactos/tools/wmc/write.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/write.c?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/write.c (original)
+++ trunk/reactos/tools/wmc/write.c Sat Dec  1 18:56:03 2007
@@ -15,7 +15,7 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
 #include "config.h"
@@ -87,7 +87,7 @@
  * for normal character strings and 1 for unicode strings.
  */
 
-static char str_header[] =
+static const char str_header[] =
 	"/* This file is generated with wmc version " PACKAGE_VERSION ". Do not edit! */\n"
 	"/* Source : %s */\n"
 	"/* Cmdline: %s */\n"
@@ -101,11 +101,11 @@
 	char *cptr;
 	const union cptable *cpdef = find_codepage(cp);
 	if(!cpdef)
-		internal_error(__FILE__, __LINE__, "Codepage %d not found (vanished?)", cp);
+		internal_error(__FILE__, __LINE__, "Codepage %d not found (vanished?)\n", cp);
 	len = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, NULL, 0, NULL, NULL);
 	cptr = xmalloc(len);
 	if((len = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, cptr, len, NULL, NULL)) < 0)
-		internal_error(__FILE__, __LINE__, "Buffer overflow? code %d.", len);
+		internal_error(__FILE__, __LINE__, "Buffer overflow? code %d\n", len);
 	return cptr;
 }
 
@@ -271,14 +271,14 @@
 					fprintf(fp, "#define %s\t0x%08xL\n\n", cptr, ndp->u.msg->realid);
 				break;
 			default:
-				internal_error(__FILE__, __LINE__, "Invalid base for number print");
+				internal_error(__FILE__, __LINE__, "Invalid base for number print\n");
 			}
 			free(cptr);
 			if(cast)
 				free(cast);
 			break;
 		default:
-			internal_error(__FILE__, __LINE__, "Invalid node type %d", ndp->type);
+			internal_error(__FILE__, __LINE__, "Invalid node type %d\n", ndp->type);
 		}
 	}
 	fprintf(fp, "\n#endif\n");
@@ -308,7 +308,7 @@
 			}
 		}
 		if(!cptr)
-			internal_error(__FILE__, __LINE__, "Filename vanished for language 0x%0x", lbp->lan);
+			internal_error(__FILE__, __LINE__, "Filename vanished for language 0x%0x\n", lbp->lan);
 		fprintf(fp, "1 MESSAGETABLE \"%s.bin\"\n", cptr);
 		free(cptr);
 	}
@@ -390,7 +390,7 @@
 		mlen = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, NULL, 0, NULL, NULL);
 		cc = tmp = xmalloc(mlen);
 		if((i = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, tmp, mlen, NULL, NULL)) < 0)
-			internal_error(__FILE__, __LINE__, "Buffer overflow? code %d.", i);
+			internal_error(__FILE__, __LINE__, "Buffer overflow? code %d\n", i);
 		*cptr++ = ' ';
 		*cptr++ = '"';
 		for(i = b = 0; i < len; i++, cc++)

Modified: trunk/reactos/tools/wmc/write.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/wmc/write.h?rev=30932&r1=30931&r2=30932&view=diff
==============================================================================
--- trunk/reactos/tools/wmc/write.h (original)
+++ trunk/reactos/tools/wmc/write.h Sat Dec  1 18:56:03 2007
@@ -15,7 +15,7 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 #ifndef __WMC_WRITE_H
 #define __WMC_WRITE_H




More information about the Ros-diffs mailing list