wrc vendor drop
Added: vendor/wine/tools/wrc/
Added: vendor/wine/tools/wrc/current/
Added: vendor/wine/tools/wrc/current/CHANGES
Added: vendor/wine/tools/wrc/current/Makefile.in
Added: vendor/wine/tools/wrc/current/dumpres.c
Added: vendor/wine/tools/wrc/current/dumpres.h
Added: vendor/wine/tools/wrc/current/genres.c
Added: vendor/wine/tools/wrc/current/genres.h
Added: vendor/wine/tools/wrc/current/newstruc.c
Added: vendor/wine/tools/wrc/current/newstruc.h
Added: vendor/wine/tools/wrc/current/parser.h
Added: vendor/wine/tools/wrc/current/parser.l
Added: vendor/wine/tools/wrc/current/parser.y
Added: vendor/wine/tools/wrc/current/readres.c
Added: vendor/wine/tools/wrc/current/readres.h
Added: vendor/wine/tools/wrc/current/translation.c
Added: vendor/wine/tools/wrc/current/utils.c
Added: vendor/wine/tools/wrc/current/utils.h
Added: vendor/wine/tools/wrc/current/wrc.c
Added: vendor/wine/tools/wrc/current/wrc.doc
Added: vendor/wine/tools/wrc/current/wrc.h
Added: vendor/wine/tools/wrc/current/wrc.man
Added: vendor/wine/tools/wrc/current/wrctypes.h
Added: vendor/wine/tools/wrc/current/writeres.c

Added: vendor/wine/tools/wrc/current/CHANGES
--- vendor/wine/tools/wrc/current/CHANGES	2005-02-19 22:18:00 UTC (rev 13648)
+++ vendor/wine/tools/wrc/current/CHANGES	2005-02-19 22:19:39 UTC (rev 13649)
@@ -0,0 +1,336 @@
+---------------------------------------------------------------------------
+Version 1.1.9 (31-Dec-2000)
+
+Ulrich Weigand <weigand@informatik.uni-erlangen.de>
+- Fixed a byteorder conversion problem with message tables.
+- Carefully read and write (possibly) misaligned data elements
+  to avoid crashes on architectures where this is not allowed.
+
+---------------------------------------------------------------------------
+Version 1.1.8 (24-Aug-2000)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Fixed a LALR(2) problem while scanning usertype resources which
+  had identifiers for both name and type.
+
+---------------------------------------------------------------------------
+Version 1.1.7 (24-Jul-2000)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Implemented a bug-work-arround for Berkeley yacc (byacc) which
+  does not generate proper default transition rules for non-terminals.
+  See comments in parser.y how the fix works.
+- Changed the error-line/char position to make emacs happy parsing
+  the position of the error.
+- Added comments in the documentation in which order the line-numer
+  and character-position of the error is written.
+
+---------------------------------------------------------------------------
+Version 1.1.6 (05-Jun-2000)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Bugfix: Macro expansion of strings would assert an internal error
+  or a segfault due to a lacking '\0' in the expansion.
+- Bugfix: Prevent buffer overflow in reallocation of macro expansion
+  buffers.
+- Bugfix: Wrc's version information was not passed as numerical to the
+  preprocessor due to an error in the definition of the macro.
+- Relaxed the newline constraint in global LANGUAGE statements, which
+  was introduced in version 1.1.3, so that some fancy preprocessor
+  constructs can work.
+- Removed the gcc-style #line handling from the resource-parser to the
+  resource-scanner so that it is possible to include files at any stage
+  of the source, independent of the parser-state.
+- Bugfix: Stringtables were not correctly searched for duplicates
+  because the language comparison disregarded the sublanguage.
+- Eliminated a repetitive warning when writing stringtables with zero
+  length string entries. These are perfectly valid (but make no sense:-).
+  Warning are now only generated during parse in pedantic mode.
+
+---------------------------------------------------------------------------
+Version 1.1.5 (12-Jun-2000)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Bugfix: Corrected "off by one" error in the linenumber while parsing
+  resource.
+- Bugfix: A segfault would occur if messagetables were parsed without
+  memory options attached. Also added buffer-overflow safeguard while
+  converting between byteorders.
+- Finished remapping usertype resources onto standars types by tricking
+  the parser into accepting a different token. The remapping can be
+  disabled with a new commandline option '-m'.
+- Resolved some warning about chars used as index on SGI O2 machine
+  (the ctype isXXX() routines are macros there).
+
+---------------------------------------------------------------------------
+Version 1.1.4 (07-Jun-2000)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Implemented MESSAGETABLE resource type.
+- Usertype resources that cause a type-clash with defined resources
+  are now detected and a warning is generated. Some types should be
+  rerouted through other code so that they will be (re-)interpreted.
+- Bugfix: Line-continuation in strings in resources include a newline.
+  This `feature' got deleted with the builtin preprocessor, but has been
+  put back into place (see last changes comment from version 1.1.0).
+- Bugfix: The preprocessor now correctly will see "\\\r\n" as a line-
+  continuation.
+- Bugfix: Assemblers on some platforms do not use 16bit quantities
+  for `.word'. This directive is now changed into `.short'.
+- All types that accept inline data definitions (a la RCDATA) now
+  also accept a file specification. This unifies the structure a bit.
+
+---------------------------------------------------------------------------
+Version 1.1.3 (21-May-2000)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Implemented animated cursors and icons resource types.
+- Added partial support for font resources (user supplied fontdir is
+  required).
+- All resources with inline data (a la RCDATA) now support language,
+  version and characteristics data.
+- Implemented resource name duplicate checks. It is now an error if
+  two resources of the same type have the same name.
+- Bugfix: Language propagation was not correct when .res files were
+  generated.
+- Bugfix: VERSIONINFO now handles memory options.
+- Bugfix: resource names and the resource type may be equal (e.g. MENU
+  MENU {...}). This support was mistakingly deleted in the upgrade to
+  the builtin preprocessor.
+  The standalone LANGUAGE setting became context sensitive as a consequence
+  of this. Now it *must* end with a newline *after* both expressions and
+  no newlines are allowed within the line (the statement must fit on one
+  line). This is no practical problem though.
+
+Patrik Stridvall <ps@leissner.se>
+- Fixed byte order on Solaris and FreeBSD.
+
+---------------------------------------------------------------------------
+Version 1.1.2 (08-May-2000)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Bugfix: Corrected a SEGV in the rawdata handling. Mistakingly took the
+  address of a pointer instead of its value. This probably slipped in
+  during the merge of my tree into the winetree.
+  Lesson learned: always double check.
+- Verified most resources so that win16 compile also generates correct
+  output for reversed endian.
+
+---------------------------------------------------------------------------
+Version 1.1.1 (07-May-2000)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Implemented byte-ordering for resources. All resources can be forced
+  to be little-, big- or native endian with command-line option -B.
+- Reading resources from .res-files are only accepted in native byte-
+  ordering so that no additional semantic analysis is required.
+- Resource directory is still written in native-only format, including
+  the strings.
+- Wrc is now installed through the makefile with 'make install' and also
+  uninstalled with 'make uninstall'.
+- Wrote a man-page for better reference. The manpage also gets installed
+  and uninstalled.
+- Cleaned up the namespace a bit by more agressive use of static.
+
+---------------------------------------------------------------------------
+Version 1.1.0 (01-May-2000)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Implemented a new preprocessor that is (nearly) ANSI-C compliant. The
+  old parser has been stripped from the old preprocessor-code which 
+  cleaned up both resource-scanner and -parser.
+- Standard defines have been introduced (see README.wrc)
+- Both preprocessor- and resource-scanner have been optimized slightly
+  so that no backing up is required (one char lookahead is enough).
+- Filename-scanning has been cleaned up, though not perfect yet.
+- User-type resources are compatible now.
+- Line-continuation in strings is corrected so that it does not
+  introduce a newline in the output.
+
+---------------------------------------------------------------------------
+Version 1.0.18 (28-Dec-1999)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Bugfix: The named resources were not named correctly for indirectly
+  addressable resources, which resulted in an undefined variable. The
+  previous fix was incomplete (I was probably sleeping while I made it).
+
+---------------------------------------------------------------------------
+Version 1.0.17 (20-Dec-1999)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Bugfix: Named resources of different types generated the same assembly-
+  label twice, resulting in a compile failure.
+
+---------------------------------------------------------------------------
+Version 1.0.16 (6-Nov-1999)
+
+Juergen.Schmied@debitel.net
+- Bugfix: Styles were evaluated as expressions. The NOT in combination
+  with style flags was not overwriting the default styles like WS_VISIBLE.
+  Solved by introducing own rules for parsing styles.
+
+---------------------------------------------------------------------------
+Version 1.0.15 (13-Aug-1999)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Bugfix: IDs were not checked which resulted in numbers > 2^16-1 being
+  accepted as IDs. This resulted in duplicate IDs and all other sort of
+  trouble.
+
+---------------------------------------------------------------------------
+Version 1.0.14 (08-Aug-1999)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Deeply ashamed that I thought that flex had a bug. Of course my own fault
+  not recognizing unmatched text in start condition yyrcd and pp_strip[ps].
+  There is a catch all rule now in the flexer with a warning to mark the
+  condition and promptly revealed errors in the wine-headers.
+
+---------------------------------------------------------------------------
+Version 1.0.13 (08-Aug-1999)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Fixed uppercase conversion of titles in dialog controls which was
+  introduced with the icon changes.
+- Fixed strings longer than 1024 bytes/shorts by autosizing the array. A
+  warning is issued whenever more than 64k is allocated.
+- Made a workarround for a flex bug where an ECHO put '\\' and '\n'
+  characters on the screen.
+
+---------------------------------------------------------------------------
+Version 1.0.12 (18-Jul-1999)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Generalized the distinction between 2 and 4 byte integers slightly through
+  a new parser state. The is now a warning when a 2 byte integer is larger
+  than 16 bit (and is truncated).
+- Fixed a couple of cosmetic things in the DLGINIT stuff so that dumping of
+  this type will work as expected.
+- Added generalized language/version/characteristics support to the DLGINIT
+  resource type.
+
+Ulrich Czekalla <ulrichc@corel.ca>
+- Added support for DLGINIT resource-type.
+- Added string continuation and embedded quoting.
+- Added numeric IDs for icons in controls.
+
+Eric Pouech <Eric.Pouech@wanadoo.fr>
+- Bugfix: Distinguish between 2 and 4 byte integers in RCDATA.
+
+---------------------------------------------------------------------------
+Version 1.0.11 (22-Apr-1999)
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Fixed a counting bug in the win32 count and sort routine.
+- Fixed sort order of resources (must be name before ordinal).
+- Shuffled a couple of global variables so that built-in dlls now can
+  load resources through the proper PE interface.
+
+---------------------------------------------------------------------------
+Version 1.0.10 (18-Feb-1999)
+
+Alexandre Julliard <julliard@lrc.epfl.ch>
+- Fixed the TIME_LONG ugliness.
+
+David Luyer <luyer@ucs.uwa.edu.au>
+- Added string.h include in newstruc.c for compilation on 64bit platforms.
+- Added TIME_LONG to support time_t==int in printf formats on alpha
+  platforms.
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Added some more use of TIME_LONG in implicit format used in header-file
+  generation.
+- Removed the windows.h include and replaced it with wintypes.h in
+  wrctypes.h and added winuser.h in two other sources. This cuts compilation
+  time by a factor of 2 and final executable size with debug by a factor 2.5.
+
+---------------------------------------------------------------------------
+Version 1.0.9 (01-Feb-1999)
+
+Albert den Haan <albertd@corel.ca>:
+- Fixed wrong order of res_ico and res_bmp which must be in RT_xxx order.
+
+---------------------------------------------------------------------------
+Version 1.0.8 (10-Jan-1999)
+
+Albert den Haan <albertd@corel.ca>:
+- Added TOOLBAR support.
+- Buffer overflow fix in strncpyWtoA.
+- Open embedded files in resource definitions through the include path from
+  the commandline.
+- Support named icons in dialogs with unquoted names
+
+Bertho Stultiens <bertho@akhphd.au.dk>
+- Fixed a major bug in the language propagation in the parser. The parser
+  did not copy the current language while binding it to a resource structure
+  causing wrong sorting if multiple global languages were in use and was a
+  potential segfault because the pointer might not be valid.
+- Added language/version/characteristics support for toolbar.
+- Moved some defines from wrc.h to wrctypes.h to support in toolbars.
+- Removed function stricmp from source and replaced with native function
+  strcasecmp.
+- Allocate cursor and icon ordinals according to the language of the item to
+  decrease the amount of ordinals in use. This reduces the resource
+  directory size by reducing the tree size.
+- Versions 1.0.5 through 1.0.7 were never commited to cvs but were available
+  for download from an alternate site for elf-dll test generation.
+
+---------------------------------------------------------------------------
+Version 1.0.7 (19-Dec-1998)
+- Changed a couple of labels that are used by dllglue. Also reversed a patch
+  that made wrc's generated code dependent on dllglue's code.
+
+---------------------------------------------------------------------------
+Version 1.0.6 (12-Dec-1998)
+- Fixed the _PEResTab table where incorrect RVA's were put in the table.
+  The dllglue should now be merged into wrc for correct labels and the least
+  number of loadtime fixups.
+
+---------------------------------------------------------------------------
+Version 1.0.5 (12-Dec-1998)
+- Fixed an omited .globl statement for dllglue linking.
+
+---------------------------------------------------------------------------
+Version 1.0.4 (10-Dec-1998)
+- Added a global label for elf-dll linking and a long with the resource
+  size and a long with the directory size.
+- Killed an annoying warning since version 1.0.0 in parser.y about a
+  var being used before init.
+
+---------------------------------------------------------------------------
+Version 1.0.3 (02-Nov-1998)
+- Bugfix in write_name_str() [writeres.c] where the length byte/word was
+  wrongly counted in the length of the string.
+  Thanks to Ulrich Weigand <weigand@informatik.uni-erlangen.de>
+
+---------------------------------------------------------------------------
+Version 1.0.2 (20-Jun-1998)
+- Started this file
+- Fixed a bug in filename scanning when they are double quoted. The code now
+  is compatible with MS' rc and Borland's brc. There is a compromise in the
+  filenames because of case-sensitivity under *nix.
+- Backslashes in a filepath are now converted to forward slashes and double
+- Fixed a bug in printing the filename if loading of a file should fail.
+  backslashes are converted to single forward slash.
+- Added -L option to prevent conversion to lower case for embedded filenames
+  in resource statements.
+- Added language posibilities to icons and cursors so that the current
+  language is put into the .res ans .s file.
+- Added character position indication of an error.
+- Fixed CLASS statement so that it accepts double quoted strings as class
+  argument. This seems to be the correct behaviour (see SDK). The unquoted
+  class-name is still supported because it seems a reasonable option.
+- Fixed accelerators with CONTROL option set so that they generate correct
+  code instead of generating an error.
+- Added testing for flex version 2.5 or better because wrc needs the
+  yy_scan* functions to do preprocessing.
+
+---------------------------------------------------------------------------
+Version  1.0.1 (08-Jun-1998)
+- Added -A commandline option to generate autoregister code for the winelib
+  programs.
+
+---------------------------------------------------------------------------
+Version 1.0.0 (28-May-1998)
+- Initial release

Added: vendor/wine/tools/wrc/current/Makefile.in
--- vendor/wine/tools/wrc/current/Makefile.in	2005-02-19 22:18:00 UTC (rev 13648)
+++ vendor/wine/tools/wrc/current/Makefile.in	2005-02-19 22:19:39 UTC (rev 13649)
@@ -0,0 +1,53 @@
+DEFS      = -DINCLUDEDIR="\"$(includedir)\""
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+LEXOPT    = -Cf #-w -b
+YACCOPT   = #-v
+EXEEXT    = @EXEEXT@
+
+PROGRAMS = wrc$(EXEEXT)
+MODULE   = none
+
+C_SRCS = \
+	dumpres.c \
+	genres.c \
+	newstruc.c \
+	readres.c \
+	translation.c \
+	utils.c \
+	wrc.c \
+	writeres.c
+
+EXTRA_SRCS = parser.y parser.l
+EXTRA_OBJS = y.tab.o @LEX_OUTPUT_ROOT@.o
+
+all: $(PROGRAMS)
+
+@MAKE_RULES@
+
+wrc$(EXEEXT): $(OBJS) $(LIBDIR)/wpp/libwpp.a
+	$(CC) $(CFLAGS) -o $@ $(OBJS) -L$(LIBDIR) -lwpp -lwine_unicode -lwine_port $(LEXLIB) $(LDFLAGS)
+
+y.tab.c y.tab.h: parser.y
+	$(YACC) $(YACCOPT) -d -t $(SRCDIR)/parser.y
+
+# hack to allow parallel make
+y.tab.h: y.tab.c
+y.tab.o: y.tab.h
+
+@LEX_OUTPUT_ROOT@.c: parser.l
+	$(LEX) $(LEXOPT) -d -8 $(SRCDIR)/parser.l
+
+@LEX_OUTPUT_ROOT@.o: y.tab.h
+
+install:: $(PROGRAMS)
+	$(MKINSTALLDIRS) $(bindir) $(mandir)/man$(prog_manext)
+	$(INSTALL_DATA) $(SRCDIR)/wrc.man $(mandir)/man$(prog_manext)/wrc.$(prog_manext)
+	$(INSTALL_PROGRAM) wrc$(EXEEXT) $(bindir)/wrc$(EXEEXT)
+
+uninstall::
+	$(RM) $(bindir)/wrc$(EXEEXT) $(mandir)/man$(prog_manext)/wrc.$(prog_manext)
+
+### Dependencies:
Property changes on: vendor/wine/tools/wrc/current/Makefile.in
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: vendor/wine/tools/wrc/current/dumpres.c
--- vendor/wine/tools/wrc/current/dumpres.c	2005-02-19 22:18:00 UTC (rev 13648)
+++ vendor/wine/tools/wrc/current/dumpres.c	2005-02-19 22:19:39 UTC (rev 13649)
@@ -0,0 +1,1038 @@
+/*
+ * Copyright 1998 Bertho A. Stultiens (BS)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "config.h"
+
+#include <assert.h>
+#include <stdio.h>
+#include <ctype.h>
+
+#include "wrc.h"
+#include "dumpres.h"
+
+/*
+ *****************************************************************************
+ * Function	: get_typename
+ * Syntax	: char *get_typename(resource_t* r)
+ * Input	:
+ *	r	- Resource description
+ * Output	: A pointer to a string representing the resource type
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+const char *get_typename(const resource_t* r)
+{
+	switch(r->type){
+	case res_acc:	return "ACCELERATOR";
+	case res_bmp:	return "BITMAP";
+	case res_cur:	return "CURSOR";
+	case res_curg:	return "GROUP_CURSOR";
+	case res_dlg:	return "DIALOG";
+	case res_dlgex:	return "DIALOGEX";
+	case res_fnt:	return "FONT";
+	case res_ico:	return "ICON";
+	case res_icog:	return "GROUP_ICON";
+	case res_men:	return "MENU";
+	case res_menex:	return "MENUEX";
+	case res_rdt:	return "RCDATA";
+	case res_stt:	return "STRINGTABLE";
+	case res_usr:   return "UserResource";
+	case res_msg:	return "MESSAGETABLE";
+	case res_ver:	return "VERSIONINFO";
+	case res_dlginit: return "DLGINIT";
+	case res_toolbar: return "TOOLBAR";
+	case res_anicur:  return "CURSOR (animated)";
+	case res_aniico:  return "ICON (animated)";
+	default: 	return "Unknown";
+	}
+}
+
+/*
+ *****************************************************************************
+ * Function	: strncpyWtoA
+ * Syntax	: char *strncpyWtoA(char *cs, short *ws, int maxlen)
+ * Input	:
+ *	cs	- Pointer to buffer to receive result
+ *	ws	- Source wide-string
+ *	maxlen	- Max chars to copy
+ * Output	: 'cs'
+ * Description	: Copy a unicode string to ascii. Copying stops after the
+ *		  first occurring '\0' or when maxlen-1 chars are copied. The
+ *		  String is always nul terminated.
+ * Remarks	: No codepage translation is done.
+ *****************************************************************************
+*/
+static char *strncpyWtoA(char *cs, const short *ws, int maxlen)
+{
+	char *cptr = cs;
+	const short *wsMax = ws + maxlen - 1;
+	while(*ws && ws < wsMax)
+	{
+		if(*ws < -128 || *ws > 127)
+			fprintf(stderr, "***Warning: Unicode string contains non-printable chars***\n");
+		*cptr++ = (char)*ws++;
+	}
+	*cptr = '\0';
+	return cs;
+}
+
+/*
+ *****************************************************************************
+ * Function	: print_string
+ * Syntax	: void print_string(string_t *str)
+ * Input	:
+ * Output	:
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void print_string(const string_t *str)
+{
+	char buffer[512];
+	if(!str)
+		printf("<none>");
+	else if(str->type == str_char)
+		printf("\"%s\"", str->str.cstr);
+	else
+	{
+		strncpyWtoA(buffer, str->str.wstr, sizeof(buffer));
+		printf("L\"%s\"", buffer);
+	}
+}
+
+/*
+ *****************************************************************************
+ * Function	: get_nameid_str
+ * Syntax	: const char *get_nameid_str(const name_id_t *n)
+ * Input	:
+ *	n	- nameid to convert to text
+ * Output	: A pointer to the name.
+ * Description	:
+ * Remarks	: Not reentrant because of static buffer
+ *****************************************************************************
+*/
+const char *get_nameid_str(const name_id_t *n)
+{
+	static char buffer[256];
+
+	if(!n)
+		return "<none>";
+
+	if(n->type == name_ord)
+	{
+		sprintf(buffer, "%d", n->name.i_name);
+		return buffer;
+	}
+	else if(n->type == name_str)
+	{
+		if(n->name.s_name->type == str_char)
+			return n->name.s_name->str.cstr;
+		else
+		{
+			strncpyWtoA(buffer, n->name.s_name->str.wstr, sizeof(buffer));
+			return buffer;
+		}
+	}
+	else
+		return "Hoooo, report this: wrong type in nameid";
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_memopt
+ * Syntax	: void dump_memopt(DWORD memopt)
+ * Input	:
+ *	memopt	- flag bits of the options set
+ * Output	:
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_memopt(DWORD memopt)
+{
+	printf("Memory/load options: ");
+	if(memopt & 0x0040)
+		printf("PRELOAD ");
+	else
+		printf("LOADONCALL ");
+	if(memopt & 0x0010)
+		printf("MOVEABLE ");
+	else
+		printf("FIXED ");
+	if(memopt & 0x0020)
+		printf("PURE ");
+	else
+		printf("IMPURE ");
+	if(memopt & 0x1000)
+		printf("DISCARDABLE");
+	printf("\n");
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_lvc
+ * Syntax	: void dump_lvc(const lvc_t *l)
+ * Input	:
+ *	l	- pointer to lvc structure
+ * Output	:
+ * Description	: Dump language, version and characteristics
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_lvc(const lvc_t *l)
+{
+	if(l->language)
+		printf("LANGUAGE %04x, %04x\n", l->language->id, l->language->sub);
+	else
+		printf("LANGUAGE <not set>\n");
+
+	if(l->version)
+		printf("VERSION %08lx\n", *(l->version));
+	else
+		printf("VERSION <not set>\n");
+
+	if(l->characts)
+		printf("CHARACTERISTICS %08lx\n", *(l->characts));
+	else
+		printf("CHARACTERISTICS <not set>\n");
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_raw_data
+ * Syntax	: void dump_raw_data(const raw_data_t *d)
+ * Input	:
+ *	d	- Raw data descriptor
+ * Output	:
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_raw_data(const raw_data_t *d)
+{
+	unsigned int n;
+	int i;
+	int j;
+
+	if(!d)
+	{
+		printf("<none>");
+		return;
+	}
+	printf("Rawdata size: %d\n", d->size);
+	if(debuglevel < 2)
+		return;
+
+	for(n = 0; n < d->size; n++)
+	{
+		if((n % 16) == 0)
+                {
+			if(n)
+			{
+				printf("- ");
+				for(i = 0; i < 16; i++)
+					printf("%c", isprint(d->data[n-16+i] & 0xff) ? d->data[n-16+i] : '.');
+				printf("\n%08x: ", n);
+			}
+			else
+				printf("%08x: ", n);
+                }
+		printf("%02x ", d->data[n] & 0xff);
+	}
+	printf("- ");
+	j = d->size % 16;
+	if(!j)
+		j = 16;
+	for(i = 0; i < j; i++)
+		printf("%c", isprint(d->data[n-j+i] & 0xff) ? d->data[n-j+i] : '.');
+	printf("\n");
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_accelerator
+ * Syntax	: void dump_accelerator(const accelerator_t *acc)
+ * Input	:
+ *	acc	- Accelerator resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_accelerator(const accelerator_t *acc)
+{
+	event_t *ev = acc->events;
+
+	dump_memopt(acc->memopt);
+	dump_lvc(&(acc->lvc));
+
+	printf("Events: %s\n", ev ? "" : "<none>");
+	while(ev)
+	{
+		printf("Key=");
+		if(isprint(ev->key))
+			printf("\"%c\"", ev->key);
+		else if(iscntrl(ev->key))
+			printf("\"^%c\"", ev->key +'@');
+		else
+			printf("\\x%02x", ev->key & 0xff);
+
+		printf(" Id=%d flags=%04x\n", ev->id, ev->flags);
+		ev = ev->next;
+	}
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_cursor
+ * Syntax	: void dump_cursor(const cursor_t *cur)
+ * Input	:
+ *	cur	- Cursor resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_cursor(const cursor_t *cur)
+{
+	printf("Id: %d\n", cur->id);
+	printf("Width: %d\n", cur->width);
+	printf("Height: %d\n", cur->height);
+	printf("X Hotspot: %d\n", cur->xhot);
+	printf("Y Hotspot: %d\n", cur->yhot);
+	dump_raw_data(cur->data);
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_cursor_group
+ * Syntax	: void dump_cursor_group(const cursor_group_t *cur)
+ * Input	:
+ *	cur	- Cursor group resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_cursor_group(const cursor_group_t *curg)
+{
+	dump_memopt(curg->memopt);
+	printf("There are %d cursors in this group\n", curg->ncursor);
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_icon
+ * Syntax	: void dump_icon(const icon_t *ico)
+ * Input	:
+ *	ico	- Icon resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_icon(const icon_t *ico)
+{
+	printf("Id: %d\n", ico->id);
+	printf("Width: %d\n", ico->width);
+	printf("Height: %d\n", ico->height);
+	printf("NColor: %d\n", ico->nclr);
+	printf("NPlanes: %d\n", ico->planes);
+	printf("NBits: %d\n", ico->bits);
+	dump_raw_data(ico->data);
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_icon_group
+ * Syntax	: void dump_icon_group(const icon_group_t *ico)
+ * Input	:
+ *	ico	- Icon group resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_icon_group(const icon_group_t *icog)
+{
+	dump_memopt(icog->memopt);
+	printf("There are %d icons in this group\n", icog->nicon);
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_ani_curico
+ * Syntax	: void dump_ani_curico(const ani_curico_t *ani)
+ * Input	:
+ *	ani	- Animated object resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_ani_curico(const ani_curico_t *ani)
+{
+	dump_memopt(ani->memopt);
+	dump_lvc(&ani->data->lvc);
+	dump_raw_data(ani->data);
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_font
+ * Syntax	: void dump_font(const font_t *fnt)
+ * Input	:
+ *	fnt	- Font resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_font(const font_t *fnt)
+{
+	dump_memopt(fnt->memopt);
+	dump_lvc(&(fnt->data->lvc));
+	dump_raw_data(fnt->data);
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_bitmap
+ * Syntax	: void dump_bitmap(const bitmap_t *bmp)
+ * Input	:
+ *	bmp	- Bitmap resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_bitmap(const bitmap_t *bmp)
+{
+	dump_memopt(bmp->memopt);
+	dump_lvc(&(bmp->data->lvc));
+	dump_raw_data(bmp->data);
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_rcdata
+ * Syntax	: void dump_rcdata(const rcdata_t *rdt)
+ * Input	:
+ *	rdt	- RCData resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_rcdata(const rcdata_t *rdt)
+{
+	dump_memopt(rdt->memopt);
+	dump_lvc(&(rdt->data->lvc));
+	dump_raw_data(rdt->data);
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_user
+ * Syntax	: void dump_user(const user_t *usr)
+ * Input	:
+ *	usr	- User resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_user(const user_t *usr)
+{
+	dump_memopt(usr->memopt);
+	dump_lvc(&(usr->data->lvc));
+	printf("Class %s\n", get_nameid_str(usr->type));
+	dump_raw_data(usr->data);
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_messagetable
+ * Syntax	: void dump_messagetable(const messagetable_t *msg)
+ * Input	:
+ *	msg	- Messagetable resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_messagetable(const messagetable_t *msg)
+{
+	dump_memopt(msg->memopt);
+	dump_lvc(&(msg->data->lvc));
+	dump_raw_data(msg->data);
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_stringtable
+ * Syntax	: void dump_stringtable(const stringtable_t *stt)
+ * Input	:
+ *	stt	- Stringtable resource descriptor
+ * Output	: nop
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_stringtable(const stringtable_t *stt)
+{
+	int i;
+	for(; stt; stt = stt->next)
+	{
+		printf("{\n");
+		dump_memopt(stt->memopt);
+		dump_lvc(&(stt->lvc));
+		for(i = 0; i < stt->nentries; i++)
+		{
+			printf("Id=%-5d (%d) ", stt->idbase+i, stt->entries[i].id);
+			if(stt->entries[i].str)
+				print_string(stt->entries[i].str);
+			else
+				printf("<none>");
+			printf("\n");
+		}
+		printf("}\n");
+	}
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_control
+ * Syntax	: void dump_control(const control_t *ctrl)
+ * Input	:
+ *	ctrl	- Control resource descriptor
+ * Output	:
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_control(const control_t *ctrl)
+{
+	printf("Control {\n\tClass: %s\n", get_nameid_str(ctrl->ctlclass));
+	printf("\tText: "); get_nameid_str(ctrl->title); printf("\n");
+	printf("\tId: %d\n", ctrl->id);
+	printf("\tx, y, w, h: %d, %d, %d, %d\n", ctrl->x, ctrl->y, ctrl->width, ctrl->height);
+	if(ctrl->gotstyle)
+	{
+		assert(ctrl->style != NULL);
+		assert(ctrl->style->and_mask == 0);
+		printf("\tStyle: %08lx\n", ctrl->style->or_mask);
+	}
+	if(ctrl->gotexstyle)
+	{
+		assert(ctrl->exstyle != NULL);
+		assert(ctrl->exstyle->and_mask == 0);
+		printf("\tExStyle: %08lx\n", ctrl->exstyle->or_mask);
+	}
+	if(ctrl->gothelpid)
+		printf("\tHelpid: %ld\n", ctrl->helpid);
+	if(ctrl->extra)
+	{
+		printf("\t");
+		dump_raw_data(ctrl->extra);
+	}
+	printf("}\n");
+}
+
+/*
+ *****************************************************************************
+ * Function	: dump_dialog
+ * Syntax	: void dump_dialog(const dialog_t *dlg)
+ * Input	:
+ *	dlg	- Dialog resource descriptor
+ * Output	:
+ * Description	:
+ * Remarks	:
+ *****************************************************************************
+*/
+static void dump_dialog(const dialog_t *dlg)
+{
+	control_t *c = dlg->controls;
+
+	dump_memopt(dlg->memopt);
+	dump_lvc(&(dlg->lvc));
+	printf("x, y, w, h: %d, %d, %d, %d\n", dlg->x, dlg->y, dlg->width, dlg->height);
+	if(dlg->gotstyle)
+	{
+		assert(dlg->style != NULL);
+		assert(dlg->style->and_mask == 0);
+		printf("Style: %08lx\n", dlg->style->or_mask);
+
+	}
+	if(dlg->gotexstyle)
+	{
+		assert(dlg->exstyle != NULL);
+		assert(dlg->exstyle->and_mask == 0);
+		printf("ExStyle: %08lx\n", dlg->exstyle->or_mask);
+	}
+	printf("Menu: %s\n", get_nameid_str(dlg->menu));
+	printf("Class: %s\n", get_nameid_str(dlg->dlgclass));
[truncated at 1000 lines; 11461 more skipped]