Release 960218

Sun Feb 18 16:35:54 1996  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [controls/desktop.c]
	Look for the wallpaper file in the Windows directory.

	* [controls/menu.c]
	Fixed swapped parameters in SetMenuItemBitmaps().
	Create a separator in MENU_SetItemData() when the string is NULL.

	* [file/dosfs.c]
	DOSFS_FindNext: don't return '.' and '..' in a drive root dir.

	* [files/file.c]
	Added a DOS_FILE structure to store per-file information (not
	really used yet).
	Fixed _lread and _hread to check the size of the buffer before
	calling Unix read() to avoid EFAULT error.

	* [misc/exec.c]
	Return TRUE in WinHelp() for HELP_QUIT to quiet Notepad on exit.

	* [miscemu/instr.c]
	Call DOSMEM_Alarm() in INSTR_ReplaceSelector(). This should fix
 	programs that poll the BIOS counter, provided they reload the
 	selector on every read.

	* [miscemu/int21.c]
	Re-implemented FindFirst/FindNext for FCB calls.

	* [windows/message.c] [windows/winpos.c]
	Merged MSG_GetWindowForEvent() and WINPOS_WindowFromPoint().

	* [windows/nonclient.c] [windows/win.c] [include/windows.h]
	Added a per-window WIN_MANAGED flag; only windows that have a
	dialog frame or a sizing border are managed.

Sat Feb 17 18:25:00 1996  Thomas Sandford <tdgsandf@prds-grn.demon.co.uk>

	* [if1632/Makefile.in]
	Added -g flag to compilation of .c files generated from *32.spec.

	* [if1632/gdi32.spec]
	Numerous additional functions implemented.

	* if1632/user32.spec]
	wsprintfA maps to vsprintf not wsprintf
	Numerous additional functions implemented.

	* [include/gdi.h] [objects/gdiobj.c]
	New #define MAGIC_DONTCARE added. This is used in
	GDI_GetObjPtr to enable getting a pointer to a GDI object of
	unknow type.

	* [win32/gdi32.c]
	New file.

	* [win32/param32.c]
	WIN32_MoveToEx() - handle NULL pointer argument.

	* [win32/user32.c]
	USER32_InvalidateRect - handle passing of a NULL pointer.
	USER32_SetTimer - New function.

	* [files/directory.c]
	Fixed DIR_Init() (off by one in allocation of space for
	environment variables).

	* [files/drive.c]
	Added <sys/types.h> to #includes (prerequisite for <sys/stat.h>
	on FreeBSD).

Fri Feb 16 10:26:56 1996  Andreas Kirschbaum <ank@rbg.informatik.th-darmstadt.de>

	* [controls/menu.c]
	Memory leak plugged.

	* [controls/edit.c]
	Erase space with function ExtTextOut(). This eliminates the use of
 	xmalloc().  Memory leak in EDIT_WriteText plugged.

	* [debugger/db_disasm.c]
	Operand for scas now is di.

	* [files/profile.c]
	PROFILE_GetSection was copying too much data.
	PROFILE_GetSection now returns the correct value. It was returning
 	the number of unused instead of used bytes.

	* [objects/dc.c]
	Corrected two typos in comments.

	* [objects/font.c]
	FONT_MatchFont didn't return if it couldn't find any font.

	* [objects/oembitmap.c]
	Free object only if it has been allocated.

	* [windows/scroll.c]
	Memory leak in ScrollDC plugged.

Tue Feb 13 11:17:00 1996 William Magro  <wmagro@tc.cornell.edu>

	* [controls/edit.c]
	Implemented ES_NOHIDESEL style, shift+click selection,
 	shift+{arrow,home,end,pgup,pgdn} selection.  Optimized
	(de)selection drawing.  Changed selection drawing to use correct
 	system colors instead of inverting.  Fixed deleting or backspacing
 	across a '\r\n' end of line pair.  Selection now anchors
 	correctly. Fixed text leaking and extra garbage problem bug
 	uncovered by change in class style in wine960131.

	* [controls/widgets.c]
	Class flags now match those of Windows.

Mon Feb 12 21:28:19 1996  Martin von Loewis <loewis@informatik.hu-berlin.de>

	* [controls/widgets.c]
	WIDGETS_Init: RELAY32_GetEntryPoint does not take a string anymore.

	* [if1632/Makefile.in][if1632/relay32.c][include/relay32.h]
	comctl32.spec ole32.spec winspool.spec: new files.
	RELAY32_Init: call initialization of new DLLs.
	RELAY32_GetEntryPoint: expects WIN32_builtin* now.
	RELAY32_MakeFakeModule: new function.

	* [if1632/gdi32.spec][if1632/kernel32.spec][if1632/user32.spec]
	Added Win95 functions. Ordinals now differ from both NT and Win95
	HeapCreate, CreateDialogIndirectParamA, CreateDialogIndirectParamW,
	CreateDialogParamA, CreateDialogParamW, DialogBoxIndirectParamA
	DialogBoxIndirectParamW, DialogBoxParamA, DialogBoxParamW:
	new relays.

	* [if1632/shell32.spec]
	shell32.spec: renumbered all functions to take into account ordinals.
	These seem to be identical between NT and Win95.

	* [include/dialog.h][windows/dialog.c]
	xBaseUnit,yBaseUnit,DIALOG_DoDialogBox: made non-static.

	* [include/handle32.h]
	New handle types VRANGE, HEAP, HEAPITEM.

	* [include/pe_image.h][loader/pe_image.c]
	struct w_files: new field builtin.
	PE_FindExportedFunction: support ordinals.
	PE_GetProcAddress: call RELAY32_GetEntryPoint for builtins.
	fixup_imports: support ordinals.
	PE_LoadImage: prefer directories over segments.

	* [include/resource.h][win32/resource.c]
	FindResource32: changed parameter from LPCTSTR to LPCWSTR
		check LANG_NEUTRAL if LANG_ENGLISH fails.
	LoadAcceleratorsW,SizeofResource32,AccessResource32: 
		disabled because it's broken.
	Casted to and from LPWSTR at various places.

	* [include/string32.h][win32/string32.c]
	Changed prototypes to take const arguments where appropriate.

	* [include/struct32.h]
	New structures DLGTEMPLATE32, DLGITEMTEMPLATE32.

	* [tools/build.c]
	BuildSpec32Files: generate Base value into code, generate call to
	RELAY32_MakeFakeModule.
	
	* [win32/heap.c]
	This is still not finished and needs rework.
	HeapAlloc: renamed to SIMPLE_HeapAlloc, implemented HeapAlloc.
	HeapCreate: implemented on top of VirtualAlloc, which does not work yet
	HeapDestroy, HEAP_GrowHeap, HeapFree: new functions.

	* [win32/memory.c]
	Support for VRANGE_OBJECT. This is not yet called from any place,
	and needs more platform specific support
	MEMORY_FindVrange, MEMORY_IsVrangeFree, MEMORY_InsertVrange,
	MEMORY_AllocVrange, MEMORY_ReleaseVrange: new functions.

	* [win32/user32.c]
	WIN32_CreateWindowExA: don't GlobalAlloc for integer class and window
	names, as in dialogs.
	Implemented dialog functions (see user32.spec).

	* [windows/caret.c]
	CARET_Initialize: call RELAY32_GetBuiltinDLL.

Mon Feb 12 18:52:40 1996  Jim Peterson <jspeter@birch.ee.vt.edu>

	* [controls/edit.c]
	Removed commented out #ifdefs for WINELIB.

	* [tools/makehtml.pl]
	Put in error checking when trying to open a file.

	* [libtest/Makefile.in] [libtest/new.c] [libtest/hello4.c]
	Added two new targets: hello4 and new.

	* [include/windows.h]
	Added definition of DEVMODE structure, although it's not yet used.
  	Modified various API functions from CreateDC() to Escape(), in
 	order to make them more compliant with the strict API definitions.

	* [include/wintypes.h]
	Added 'typedef char TCHAR'.  It probably should be defined as
	'short', but then we would have to support such characters.  Also did
	'typedef const TCHAR* LPCTSTR' and 'typedef TCHAR* LPTSTR'.
	Also defined WNDENUMPROC, FONTENUMPROC, GOBJENUMPROC, PROPENUMPROC
	MFENUMPROC, and HGDIOBJ.

Mon Feb  5 16:42:07 1996  Frans van Dorsselaer <dorssel@rulhm1.leidenuniv.nl>

	* [misc/commdlg.c]
	Patched a bug that occurred in the internal COMMDLG module for the
 	FileOpen(), FileSave() and FileSaveAs() functions.  The file-type
 	combobox is now handled correctly.

Fri Feb  2 22:52:58 1996  Roman Dolejsi  <roman@sorry.vse.cz>

	* [resources/sysres_Cz.rc]
	Added support for Czech [Cz] language.

Thu Feb  1 00:35:04 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* [objects/font.c]
	FONT_matchfont : for fixed-spacing fonts, allow 'c' if 'm' fails;
	for variable-spacing fonts : allow '*' if 'p' fails; if asked lfHeight
	is -1, assume 0.
	CreateFontIndirect : if font parameter is NULL, issue an error message.
	CreateFont : null-terminate lfFaceName.
	ParseFontParms : debug code turned off : too verbose.
	InitFontsList : recognize *-c-* fonts as fixed-spacing fonts.

	* [objects/color.c]
	ColorToPhysical : admit 0xff...... COLORREF's as 0x00...... ones.
diff --git a/include/debug.h b/include/debug.h
index 82e08eb..1d72191 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -28,6 +28,7 @@
 #undef DEBUG_CLIPPING
 #undef DEBUG_COMBO
 #undef DEBUG_COMM
+#undef DEBUG_COMMDLG
 #undef DEBUG_CURSOR
 #undef DEBUG_DC
 #undef DEBUG_DDE
@@ -106,6 +107,7 @@
 #define DEBUG_CLIPPING
 #define DEBUG_COMBO
 #define DEBUG_COMM
+#define DEBUG_COMMDLG
 #define DEBUG_CURSOR
 #define DEBUG_DC
 #define DEBUG_DDE
@@ -234,6 +236,11 @@
 #else
     0,
 #endif
+#ifdef DEBUG_COMMDLG
+    1,
+#else
+    0,
+#endif
 #ifdef DEBUG_CURSOR
     1,
 #else
@@ -713,8 +720,21 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_cursor if(!debug_msg_enabled[12]) ; else fprintf
-#define debugging_cursor debug_msg_enabled[12]
+#define dprintf_commdlg if(!debug_msg_enabled[12]) ; else fprintf
+#define debugging_commdlg debug_msg_enabled[12]
+#else
+#ifdef DEBUG_COMMDLG
+#define dprintf_commdlg fprintf
+#define debugging_commdlg 1
+#else
+#define dprintf_commdlg while(0) fprintf
+#define debugging_commdlg 0
+#endif
+#endif
+
+#ifdef DEBUG_RUNTIME
+#define dprintf_cursor if(!debug_msg_enabled[13]) ; else fprintf
+#define debugging_cursor debug_msg_enabled[13]
 #else
 #ifdef DEBUG_CURSOR
 #define dprintf_cursor fprintf
@@ -726,8 +746,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_dc if(!debug_msg_enabled[13]) ; else fprintf
-#define debugging_dc debug_msg_enabled[13]
+#define dprintf_dc if(!debug_msg_enabled[14]) ; else fprintf
+#define debugging_dc debug_msg_enabled[14]
 #else
 #ifdef DEBUG_DC
 #define dprintf_dc fprintf
@@ -739,8 +759,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_dde if(!debug_msg_enabled[14]) ; else fprintf
-#define debugging_dde debug_msg_enabled[14]
+#define dprintf_dde if(!debug_msg_enabled[15]) ; else fprintf
+#define debugging_dde debug_msg_enabled[15]
 #else
 #ifdef DEBUG_DDE
 #define dprintf_dde fprintf
@@ -752,8 +772,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_dialog if(!debug_msg_enabled[15]) ; else fprintf
-#define debugging_dialog debug_msg_enabled[15]
+#define dprintf_dialog if(!debug_msg_enabled[16]) ; else fprintf
+#define debugging_dialog debug_msg_enabled[16]
 #else
 #ifdef DEBUG_DIALOG
 #define dprintf_dialog fprintf
@@ -765,8 +785,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_dll if(!debug_msg_enabled[16]) ; else fprintf
-#define debugging_dll debug_msg_enabled[16]
+#define dprintf_dll if(!debug_msg_enabled[17]) ; else fprintf
+#define debugging_dll debug_msg_enabled[17]
 #else
 #ifdef DEBUG_DLL
 #define dprintf_dll fprintf
@@ -778,8 +798,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_dosfs if(!debug_msg_enabled[17]) ; else fprintf
-#define debugging_dosfs debug_msg_enabled[17]
+#define dprintf_dosfs if(!debug_msg_enabled[18]) ; else fprintf
+#define debugging_dosfs debug_msg_enabled[18]
 #else
 #ifdef DEBUG_DOSFS
 #define dprintf_dosfs fprintf
@@ -791,8 +811,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_driver if(!debug_msg_enabled[18]) ; else fprintf
-#define debugging_driver debug_msg_enabled[18]
+#define dprintf_driver if(!debug_msg_enabled[19]) ; else fprintf
+#define debugging_driver debug_msg_enabled[19]
 #else
 #ifdef DEBUG_DRIVER
 #define dprintf_driver fprintf
@@ -804,8 +824,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_edit if(!debug_msg_enabled[19]) ; else fprintf
-#define debugging_edit debug_msg_enabled[19]
+#define dprintf_edit if(!debug_msg_enabled[20]) ; else fprintf
+#define debugging_edit debug_msg_enabled[20]
 #else
 #ifdef DEBUG_EDIT
 #define dprintf_edit fprintf
@@ -817,8 +837,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_enum if(!debug_msg_enabled[20]) ; else fprintf
-#define debugging_enum debug_msg_enabled[20]
+#define dprintf_enum if(!debug_msg_enabled[21]) ; else fprintf
+#define debugging_enum debug_msg_enabled[21]
 #else
 #ifdef DEBUG_ENUM
 #define dprintf_enum fprintf
@@ -830,8 +850,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_env if(!debug_msg_enabled[21]) ; else fprintf
-#define debugging_env debug_msg_enabled[21]
+#define dprintf_env if(!debug_msg_enabled[22]) ; else fprintf
+#define debugging_env debug_msg_enabled[22]
 #else
 #ifdef DEBUG_ENV
 #define dprintf_env fprintf
@@ -843,8 +863,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_event if(!debug_msg_enabled[22]) ; else fprintf
-#define debugging_event debug_msg_enabled[22]
+#define dprintf_event if(!debug_msg_enabled[23]) ; else fprintf
+#define debugging_event debug_msg_enabled[23]
 #else
 #ifdef DEBUG_EVENT
 #define dprintf_event fprintf
@@ -856,8 +876,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_exec if(!debug_msg_enabled[23]) ; else fprintf
-#define debugging_exec debug_msg_enabled[23]
+#define dprintf_exec if(!debug_msg_enabled[24]) ; else fprintf
+#define debugging_exec debug_msg_enabled[24]
 #else
 #ifdef DEBUG_EXEC
 #define dprintf_exec fprintf
@@ -869,8 +889,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_file if(!debug_msg_enabled[24]) ; else fprintf
-#define debugging_file debug_msg_enabled[24]
+#define dprintf_file if(!debug_msg_enabled[25]) ; else fprintf
+#define debugging_file debug_msg_enabled[25]
 #else
 #ifdef DEBUG_FILE
 #define dprintf_file fprintf
@@ -882,8 +902,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_fixup if(!debug_msg_enabled[25]) ; else fprintf
-#define debugging_fixup debug_msg_enabled[25]
+#define dprintf_fixup if(!debug_msg_enabled[26]) ; else fprintf
+#define debugging_fixup debug_msg_enabled[26]
 #else
 #ifdef DEBUG_FIXUP
 #define dprintf_fixup fprintf
@@ -895,8 +915,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_font if(!debug_msg_enabled[26]) ; else fprintf
-#define debugging_font debug_msg_enabled[26]
+#define dprintf_font if(!debug_msg_enabled[27]) ; else fprintf
+#define debugging_font debug_msg_enabled[27]
 #else
 #ifdef DEBUG_FONT
 #define dprintf_font fprintf
@@ -908,8 +928,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_gdi if(!debug_msg_enabled[27]) ; else fprintf
-#define debugging_gdi debug_msg_enabled[27]
+#define dprintf_gdi if(!debug_msg_enabled[28]) ; else fprintf
+#define debugging_gdi debug_msg_enabled[28]
 #else
 #ifdef DEBUG_GDI
 #define dprintf_gdi fprintf
@@ -921,8 +941,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_global if(!debug_msg_enabled[28]) ; else fprintf
-#define debugging_global debug_msg_enabled[28]
+#define dprintf_global if(!debug_msg_enabled[29]) ; else fprintf
+#define debugging_global debug_msg_enabled[29]
 #else
 #ifdef DEBUG_GLOBAL
 #define dprintf_global fprintf
@@ -934,8 +954,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_graphics if(!debug_msg_enabled[29]) ; else fprintf
-#define debugging_graphics debug_msg_enabled[29]
+#define dprintf_graphics if(!debug_msg_enabled[30]) ; else fprintf
+#define debugging_graphics debug_msg_enabled[30]
 #else
 #ifdef DEBUG_GRAPHICS
 #define dprintf_graphics fprintf
@@ -947,8 +967,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_hook if(!debug_msg_enabled[30]) ; else fprintf
-#define debugging_hook debug_msg_enabled[30]
+#define dprintf_hook if(!debug_msg_enabled[31]) ; else fprintf
+#define debugging_hook debug_msg_enabled[31]
 #else
 #ifdef DEBUG_HOOK
 #define dprintf_hook fprintf
@@ -960,8 +980,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_icon if(!debug_msg_enabled[31]) ; else fprintf
-#define debugging_icon debug_msg_enabled[31]
+#define dprintf_icon if(!debug_msg_enabled[32]) ; else fprintf
+#define debugging_icon debug_msg_enabled[32]
 #else
 #ifdef DEBUG_ICON
 #define dprintf_icon fprintf
@@ -973,8 +993,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_int if(!debug_msg_enabled[32]) ; else fprintf
-#define debugging_int debug_msg_enabled[32]
+#define dprintf_int if(!debug_msg_enabled[33]) ; else fprintf
+#define debugging_int debug_msg_enabled[33]
 #else
 #ifdef DEBUG_INT
 #define dprintf_int fprintf
@@ -986,8 +1006,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_key if(!debug_msg_enabled[33]) ; else fprintf
-#define debugging_key debug_msg_enabled[33]
+#define dprintf_key if(!debug_msg_enabled[34]) ; else fprintf
+#define debugging_key debug_msg_enabled[34]
 #else
 #ifdef DEBUG_KEY
 #define dprintf_key fprintf
@@ -999,8 +1019,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_keyboard if(!debug_msg_enabled[34]) ; else fprintf
-#define debugging_keyboard debug_msg_enabled[34]
+#define dprintf_keyboard if(!debug_msg_enabled[35]) ; else fprintf
+#define debugging_keyboard debug_msg_enabled[35]
 #else
 #ifdef DEBUG_KEYBOARD
 #define dprintf_keyboard fprintf
@@ -1012,8 +1032,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_ldt if(!debug_msg_enabled[35]) ; else fprintf
-#define debugging_ldt debug_msg_enabled[35]
+#define dprintf_ldt if(!debug_msg_enabled[36]) ; else fprintf
+#define debugging_ldt debug_msg_enabled[36]
 #else
 #ifdef DEBUG_LDT
 #define dprintf_ldt fprintf
@@ -1025,8 +1045,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_listbox if(!debug_msg_enabled[36]) ; else fprintf
-#define debugging_listbox debug_msg_enabled[36]
+#define dprintf_listbox if(!debug_msg_enabled[37]) ; else fprintf
+#define debugging_listbox debug_msg_enabled[37]
 #else
 #ifdef DEBUG_LISTBOX
 #define dprintf_listbox fprintf
@@ -1038,8 +1058,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_local if(!debug_msg_enabled[37]) ; else fprintf
-#define debugging_local debug_msg_enabled[37]
+#define dprintf_local if(!debug_msg_enabled[38]) ; else fprintf
+#define debugging_local debug_msg_enabled[38]
 #else
 #ifdef DEBUG_LOCAL
 #define dprintf_local fprintf
@@ -1051,8 +1071,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mci if(!debug_msg_enabled[38]) ; else fprintf
-#define debugging_mci debug_msg_enabled[38]
+#define dprintf_mci if(!debug_msg_enabled[39]) ; else fprintf
+#define debugging_mci debug_msg_enabled[39]
 #else
 #ifdef DEBUG_MCI
 #define dprintf_mci fprintf
@@ -1064,8 +1084,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mcianim if(!debug_msg_enabled[39]) ; else fprintf
-#define debugging_mcianim debug_msg_enabled[39]
+#define dprintf_mcianim if(!debug_msg_enabled[40]) ; else fprintf
+#define debugging_mcianim debug_msg_enabled[40]
 #else
 #ifdef DEBUG_MCIANIM
 #define dprintf_mcianim fprintf
@@ -1077,8 +1097,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mciwave if(!debug_msg_enabled[40]) ; else fprintf
-#define debugging_mciwave debug_msg_enabled[40]
+#define dprintf_mciwave if(!debug_msg_enabled[41]) ; else fprintf
+#define debugging_mciwave debug_msg_enabled[41]
 #else
 #ifdef DEBUG_MCIWAVE
 #define dprintf_mciwave fprintf
@@ -1090,8 +1110,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mdi if(!debug_msg_enabled[41]) ; else fprintf
-#define debugging_mdi debug_msg_enabled[41]
+#define dprintf_mdi if(!debug_msg_enabled[42]) ; else fprintf
+#define debugging_mdi debug_msg_enabled[42]
 #else
 #ifdef DEBUG_MDI
 #define dprintf_mdi fprintf
@@ -1103,8 +1123,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_menu if(!debug_msg_enabled[42]) ; else fprintf
-#define debugging_menu debug_msg_enabled[42]
+#define dprintf_menu if(!debug_msg_enabled[43]) ; else fprintf
+#define debugging_menu debug_msg_enabled[43]
 #else
 #ifdef DEBUG_MENU
 #define dprintf_menu fprintf
@@ -1116,8 +1136,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_message if(!debug_msg_enabled[43]) ; else fprintf
-#define debugging_message debug_msg_enabled[43]
+#define dprintf_message if(!debug_msg_enabled[44]) ; else fprintf
+#define debugging_message debug_msg_enabled[44]
 #else
 #ifdef DEBUG_MESSAGE
 #define dprintf_message fprintf
@@ -1129,8 +1149,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_metafile if(!debug_msg_enabled[44]) ; else fprintf
-#define debugging_metafile debug_msg_enabled[44]
+#define dprintf_metafile if(!debug_msg_enabled[45]) ; else fprintf
+#define debugging_metafile debug_msg_enabled[45]
 #else
 #ifdef DEBUG_METAFILE
 #define dprintf_metafile fprintf
@@ -1142,8 +1162,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_midi if(!debug_msg_enabled[45]) ; else fprintf
-#define debugging_midi debug_msg_enabled[45]
+#define dprintf_midi if(!debug_msg_enabled[46]) ; else fprintf
+#define debugging_midi debug_msg_enabled[46]
 #else
 #ifdef DEBUG_MIDI
 #define dprintf_midi fprintf
@@ -1155,8 +1175,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mmio if(!debug_msg_enabled[46]) ; else fprintf
-#define debugging_mmio debug_msg_enabled[46]
+#define dprintf_mmio if(!debug_msg_enabled[47]) ; else fprintf
+#define debugging_mmio debug_msg_enabled[47]
 #else
 #ifdef DEBUG_MMIO
 #define dprintf_mmio fprintf
@@ -1168,8 +1188,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mmsys if(!debug_msg_enabled[47]) ; else fprintf
-#define debugging_mmsys debug_msg_enabled[47]
+#define dprintf_mmsys if(!debug_msg_enabled[48]) ; else fprintf
+#define debugging_mmsys debug_msg_enabled[48]
 #else
 #ifdef DEBUG_MMSYS
 #define dprintf_mmsys fprintf
@@ -1181,8 +1201,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mmtime if(!debug_msg_enabled[48]) ; else fprintf
-#define debugging_mmtime debug_msg_enabled[48]
+#define dprintf_mmtime if(!debug_msg_enabled[49]) ; else fprintf
+#define debugging_mmtime debug_msg_enabled[49]
 #else
 #ifdef DEBUG_MMTIME
 #define dprintf_mmtime fprintf
@@ -1194,8 +1214,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_module if(!debug_msg_enabled[49]) ; else fprintf
-#define debugging_module debug_msg_enabled[49]
+#define dprintf_module if(!debug_msg_enabled[50]) ; else fprintf
+#define debugging_module debug_msg_enabled[50]
 #else
 #ifdef DEBUG_MODULE
 #define dprintf_module fprintf
@@ -1207,8 +1227,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_msg if(!debug_msg_enabled[50]) ; else fprintf
-#define debugging_msg debug_msg_enabled[50]
+#define dprintf_msg if(!debug_msg_enabled[51]) ; else fprintf
+#define debugging_msg debug_msg_enabled[51]
 #else
 #ifdef DEBUG_MSG
 #define dprintf_msg fprintf
@@ -1220,8 +1240,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_nonclient if(!debug_msg_enabled[51]) ; else fprintf
-#define debugging_nonclient debug_msg_enabled[51]
+#define dprintf_nonclient if(!debug_msg_enabled[52]) ; else fprintf
+#define debugging_nonclient debug_msg_enabled[52]
 #else
 #ifdef DEBUG_NONCLIENT
 #define dprintf_nonclient fprintf
@@ -1233,8 +1253,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_ole if(!debug_msg_enabled[52]) ; else fprintf
-#define debugging_ole debug_msg_enabled[52]
+#define dprintf_ole if(!debug_msg_enabled[53]) ; else fprintf
+#define debugging_ole debug_msg_enabled[53]
 #else
 #ifdef DEBUG_OLE
 #define dprintf_ole fprintf
@@ -1246,8 +1266,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_palette if(!debug_msg_enabled[53]) ; else fprintf
-#define debugging_palette debug_msg_enabled[53]
+#define dprintf_palette if(!debug_msg_enabled[54]) ; else fprintf
+#define debugging_palette debug_msg_enabled[54]
 #else
 #ifdef DEBUG_PALETTE
 #define dprintf_palette fprintf
@@ -1259,8 +1279,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_profile if(!debug_msg_enabled[54]) ; else fprintf
-#define debugging_profile debug_msg_enabled[54]
+#define dprintf_profile if(!debug_msg_enabled[55]) ; else fprintf
+#define debugging_profile debug_msg_enabled[55]
 #else
 #ifdef DEBUG_PROFILE
 #define dprintf_profile fprintf
@@ -1272,8 +1292,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_prop if(!debug_msg_enabled[55]) ; else fprintf
-#define debugging_prop debug_msg_enabled[55]
+#define dprintf_prop if(!debug_msg_enabled[56]) ; else fprintf
+#define debugging_prop debug_msg_enabled[56]
 #else
 #ifdef DEBUG_PROP
 #define dprintf_prop fprintf
@@ -1285,8 +1305,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_reg if(!debug_msg_enabled[56]) ; else fprintf
-#define debugging_reg debug_msg_enabled[56]
+#define dprintf_reg if(!debug_msg_enabled[57]) ; else fprintf
+#define debugging_reg debug_msg_enabled[57]
 #else
 #ifdef DEBUG_REG
 #define dprintf_reg fprintf
@@ -1298,8 +1318,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_region if(!debug_msg_enabled[57]) ; else fprintf
-#define debugging_region debug_msg_enabled[57]
+#define dprintf_region if(!debug_msg_enabled[58]) ; else fprintf
+#define debugging_region debug_msg_enabled[58]
 #else
 #ifdef DEBUG_REGION
 #define dprintf_region fprintf
@@ -1311,8 +1331,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_relay if(!debug_msg_enabled[58]) ; else fprintf
-#define debugging_relay debug_msg_enabled[58]
+#define dprintf_relay if(!debug_msg_enabled[59]) ; else fprintf
+#define debugging_relay debug_msg_enabled[59]
 #else
 #ifdef DEBUG_RELAY
 #define dprintf_relay fprintf
@@ -1324,8 +1344,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_resource if(!debug_msg_enabled[59]) ; else fprintf
-#define debugging_resource debug_msg_enabled[59]
+#define dprintf_resource if(!debug_msg_enabled[60]) ; else fprintf
+#define debugging_resource debug_msg_enabled[60]
 #else
 #ifdef DEBUG_RESOURCE
 #define dprintf_resource fprintf
@@ -1337,8 +1357,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_scroll if(!debug_msg_enabled[60]) ; else fprintf
-#define debugging_scroll debug_msg_enabled[60]
+#define dprintf_scroll if(!debug_msg_enabled[61]) ; else fprintf
+#define debugging_scroll debug_msg_enabled[61]
 #else
 #ifdef DEBUG_SCROLL
 #define dprintf_scroll fprintf
@@ -1350,8 +1370,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_selector if(!debug_msg_enabled[61]) ; else fprintf
-#define debugging_selector debug_msg_enabled[61]
+#define dprintf_selector if(!debug_msg_enabled[62]) ; else fprintf
+#define debugging_selector debug_msg_enabled[62]
 #else
 #ifdef DEBUG_SELECTOR
 #define dprintf_selector fprintf
@@ -1363,8 +1383,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_sem if(!debug_msg_enabled[62]) ; else fprintf
-#define debugging_sem debug_msg_enabled[62]
+#define dprintf_sem if(!debug_msg_enabled[63]) ; else fprintf
+#define debugging_sem debug_msg_enabled[63]
 #else
 #ifdef DEBUG_SEM
 #define dprintf_sem fprintf
@@ -1376,8 +1396,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_shm if(!debug_msg_enabled[63]) ; else fprintf
-#define debugging_shm debug_msg_enabled[63]
+#define dprintf_shm if(!debug_msg_enabled[64]) ; else fprintf
+#define debugging_shm debug_msg_enabled[64]
 #else
 #ifdef DEBUG_SHM
 #define dprintf_shm fprintf
@@ -1389,8 +1409,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_stress if(!debug_msg_enabled[64]) ; else fprintf
-#define debugging_stress debug_msg_enabled[64]
+#define dprintf_stress if(!debug_msg_enabled[65]) ; else fprintf
+#define debugging_stress debug_msg_enabled[65]
 #else
 #ifdef DEBUG_STRESS
 #define dprintf_stress fprintf
@@ -1402,8 +1422,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_syscolor if(!debug_msg_enabled[65]) ; else fprintf
-#define debugging_syscolor debug_msg_enabled[65]
+#define dprintf_syscolor if(!debug_msg_enabled[66]) ; else fprintf
+#define debugging_syscolor debug_msg_enabled[66]
 #else
 #ifdef DEBUG_SYSCOLOR
 #define dprintf_syscolor fprintf
@@ -1415,8 +1435,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_task if(!debug_msg_enabled[66]) ; else fprintf
-#define debugging_task debug_msg_enabled[66]
+#define dprintf_task if(!debug_msg_enabled[67]) ; else fprintf
+#define debugging_task debug_msg_enabled[67]
 #else
 #ifdef DEBUG_TASK
 #define dprintf_task fprintf
@@ -1428,8 +1448,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_text if(!debug_msg_enabled[67]) ; else fprintf
-#define debugging_text debug_msg_enabled[67]
+#define dprintf_text if(!debug_msg_enabled[68]) ; else fprintf
+#define debugging_text debug_msg_enabled[68]
 #else
 #ifdef DEBUG_TEXT
 #define dprintf_text fprintf
@@ -1441,8 +1461,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_timer if(!debug_msg_enabled[68]) ; else fprintf
-#define debugging_timer debug_msg_enabled[68]
+#define dprintf_timer if(!debug_msg_enabled[69]) ; else fprintf
+#define debugging_timer debug_msg_enabled[69]
 #else
 #ifdef DEBUG_TIMER
 #define dprintf_timer fprintf
@@ -1454,8 +1474,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_toolhelp if(!debug_msg_enabled[69]) ; else fprintf
-#define debugging_toolhelp debug_msg_enabled[69]
+#define dprintf_toolhelp if(!debug_msg_enabled[70]) ; else fprintf
+#define debugging_toolhelp debug_msg_enabled[70]
 #else
 #ifdef DEBUG_TOOLHELP
 #define dprintf_toolhelp fprintf
@@ -1467,8 +1487,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_utility if(!debug_msg_enabled[70]) ; else fprintf
-#define debugging_utility debug_msg_enabled[70]
+#define dprintf_utility if(!debug_msg_enabled[71]) ; else fprintf
+#define debugging_utility debug_msg_enabled[71]
 #else
 #ifdef DEBUG_UTILITY
 #define dprintf_utility fprintf
@@ -1480,8 +1500,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_vxd if(!debug_msg_enabled[71]) ; else fprintf
-#define debugging_vxd debug_msg_enabled[71]
+#define dprintf_vxd if(!debug_msg_enabled[72]) ; else fprintf
+#define debugging_vxd debug_msg_enabled[72]
 #else
 #ifdef DEBUG_VXD
 #define dprintf_vxd fprintf
@@ -1493,8 +1513,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_win if(!debug_msg_enabled[72]) ; else fprintf
-#define debugging_win debug_msg_enabled[72]
+#define dprintf_win if(!debug_msg_enabled[73]) ; else fprintf
+#define debugging_win debug_msg_enabled[73]
 #else
 #ifdef DEBUG_WIN
 #define dprintf_win fprintf
@@ -1506,8 +1526,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_win32 if(!debug_msg_enabled[73]) ; else fprintf
-#define debugging_win32 debug_msg_enabled[73]
+#define dprintf_win32 if(!debug_msg_enabled[74]) ; else fprintf
+#define debugging_win32 debug_msg_enabled[74]
 #else
 #ifdef DEBUG_WIN32
 #define dprintf_win32 fprintf
@@ -1519,8 +1539,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_winsock if(!debug_msg_enabled[74]) ; else fprintf
-#define debugging_winsock debug_msg_enabled[74]
+#define dprintf_winsock if(!debug_msg_enabled[75]) ; else fprintf
+#define debugging_winsock debug_msg_enabled[75]
 #else
 #ifdef DEBUG_WINSOCK
 #define dprintf_winsock fprintf
@@ -1547,6 +1567,7 @@
     "clipping",
     "combo",
     "comm",
+    "commdlg",
     "cursor",
     "dc",
     "dde",
diff --git a/include/dialog.h b/include/dialog.h
index 772074e..2eb2d8f 100644
--- a/include/dialog.h
+++ b/include/dialog.h
@@ -70,4 +70,7 @@
 
 #pragma pack(4)
 
+extern WORD xBaseUnit,yBaseUnit;
+int DIALOG_DoDialogBox( HWND hwnd, HWND owner );
+
 #endif  /* DIALOG_H */
diff --git a/include/file.h b/include/file.h
index 1c585a4..9a4e0e4 100644
--- a/include/file.h
+++ b/include/file.h
@@ -10,7 +10,7 @@
 #include "windows.h"
 
 extern void FILE_SetDosError(void);
-extern int FILE_GetUnixHandle( HFILE handle );
+extern int FILE_GetUnixTaskHandle( HFILE handle );
 extern void FILE_CloseAllFiles( HANDLE hPDB );
 extern int FILE_Open( LPCSTR path, int mode );
 extern int FILE_Create( LPCSTR path, int mode, int unique );
@@ -24,6 +24,7 @@
 extern HFILE FILE_Dup( HFILE hFile );
 extern HFILE FILE_Dup2( HFILE hFile1, HFILE hFile2 );
 extern int FILE_OpenFile( LPCSTR name, OFSTRUCT *ofs, UINT mode );
+extern LONG FILE_Read( HFILE hFile, LPSTR buffer, LONG count );
 extern INT _lcreat_uniq( LPCSTR path, INT attr );
 
 #endif  /* __WINE_FILE_H */
diff --git a/include/gdi.h b/include/gdi.h
index a8f1899..16a631c 100644
--- a/include/gdi.h
+++ b/include/gdi.h
@@ -26,6 +26,7 @@
 #define META_DC_MAGIC         0x4f4f
 #define METAFILE_MAGIC        0x4f50
 #define METAFILE_DC_MAGIC     0x4f51
+#define MAGIC_DONTCARE	      0xffff
 
 #ifndef WINELIB
 #pragma pack(1)
diff --git a/include/handle32.h b/include/handle32.h
index e6d07a7..08ab132 100644
--- a/include/handle32.h
+++ b/include/handle32.h
@@ -2,6 +2,7 @@
 #define __WINE_HANDLE32_H
 
 #include <malloc.h>
+#include "wintypes.h"
 
 /* The _*_OBJECT structures contain information needed about each
  * particular type of handle.  This information is a combination of
@@ -61,6 +62,31 @@
     KERNEL_OBJECT       common;
 } REGKEY_OBJECT;
 
+typedef struct _VRANGE_OBJECT{
+	KERNEL_OBJECT		common;
+	DWORD				start;
+	DWORD				size;
+	struct _VRANGE_OBJECT *next;
+} VRANGE_OBJECT;
+
+struct _HEAPITEM_OBJECT;
+typedef struct{
+	KERNEL_OBJECT		common;
+	LPVOID	start;
+	DWORD	size;
+	DWORD	maximum;
+	DWORD	flags;
+	struct _HEAPITEM_OBJECT *first,*last;
+} HEAP_OBJECT;
+
+typedef struct _HEAPITEM_OBJECT{
+	KERNEL_OBJECT	common;
+	HEAP_OBJECT	*heap;
+	DWORD size;		/* size including header */
+	struct _HEAPITEM_OBJECT *next,*prev;
+} HEAPITEM_OBJECT;
+
+
 /* Object number definitions.  These numbers are used to
  * validate the kernel object by comparison against the
  * object's 'magic' value.
@@ -73,6 +99,9 @@
 #define KERNEL_OBJECT_EVENT     (KERNEL_OBJECT_UNUSED + 5)
 #define KERNEL_OBJECT_REGKEY    (KERNEL_OBJECT_UNUSED + 6)
 #define KERNEL_OBJECT_FILEMAP   (KERNEL_OBJECT_UNUSED + 7)
+#define KERNEL_OBJECT_VRANGE    (KERNEL_OBJECT_UNUSED + 8)
+#define KERNEL_OBJECT_HEAP      (KERNEL_OBJECT_UNUSED + 9)
+#define KERNEL_OBJECT_HEAPITEM  (KERNEL_OBJECT_UNUSED + 10)
 
 /* Define the invalid handle value
  */
diff --git a/include/miscemu.h b/include/miscemu.h
index 33d7648..af6b061 100644
--- a/include/miscemu.h
+++ b/include/miscemu.h
@@ -12,6 +12,7 @@
 
   /* miscemu/dosmem.c */
 extern BOOL DOSMEM_Init(void);
+extern void DOSMEM_Alarm(void);
 extern void DOSMEM_FillBiosSegment(void);
 extern HANDLE DOSMEM_BiosSeg;
 
diff --git a/include/msdos.h b/include/msdos.h
index e399be1..094c680 100644
--- a/include/msdos.h
+++ b/include/msdos.h
@@ -5,21 +5,6 @@
 #include <windows.h>
 #include "comm.h"
 
-#define WINE_PATH_LENGTH 256
-struct dosdirent {
-	int  inuse;
-	DIR *ds;
-	char unixpath[WINE_PATH_LENGTH];
-	char filename[WINE_PATH_LENGTH];
-	char filemask[13];
-	char attribute;
-	char search_attribute;
-	long filesize;
-	long filetime;
-        short entnum;           /* Directory entry number */
-        struct dosdirent *next;
-};
-
 struct fcb {
         BYTE drive;
 	char name[8];
@@ -48,6 +33,26 @@
     char   filename[13];         /* 1e file name + extension */
 } FINDFILE_DTA;
 
+/* FCB layout for FindFirstFCB/FindNextFCB */
+typedef struct
+{
+    BYTE   drive;                /* 00 drive letter */
+    char   filename[11];         /* 01 filename 8+3 format */
+    int    count;                /* 0c entry count (was: reserved) */
+    char  *unixPath;             /* 10 unix path (was: reserved) */
+} FINDFILE_FCB;
+
+/* DOS directory entry for FindFirstFCB/FindNextFCB */
+typedef struct
+{
+    char   filename[11];         /* 00 filename 8+3 format */
+    BYTE   fileattr;             /* 0b file attributes */
+    BYTE   reserved[10];         /* 0c reserved */
+    WORD   filetime;             /* 16 file time */
+    WORD   filedate;             /* 18 file date */
+    WORD   cluster;              /* 1a file first cluster */
+    DWORD  filesize;             /* 1c file size */
+} DOS_DIRENTRY_LAYOUT;
 
 #define DOSVERSION 0x1606      /* Major version in low byte: DOS 6.22 */
 #define WINDOSVER  0x0616      /* Windows reports the DOS version reversed */
@@ -55,8 +60,6 @@
 
 #define MAX_DOS_DRIVES	26
 
-extern WORD ExtendedError;
-extern BYTE ErrorClass, Action, ErrorLocus;
 extern struct DosDeviceStruct COM[MAX_PORTS];
 extern struct DosDeviceStruct LPT[MAX_PORTS];
 
diff --git a/include/options.h b/include/options.h
index 684aa6b..a646908 100644
--- a/include/options.h
+++ b/include/options.h
@@ -16,7 +16,8 @@
     LANG_No,  /* Norwegian */
     LANG_Fr,  /* French */
     LANG_Fi,  /* Finnish */
-    LANG_Da   /* Danish */
+    LANG_Da,  /* Danish */
+    LANG_Cz   /* Czech */
 } WINE_LANGUAGE;
 
 struct options
diff --git a/include/pe_image.h b/include/pe_image.h
index 220f5b2..944d2ff 100644
--- a/include/pe_image.h
+++ b/include/pe_image.h
@@ -1,6 +1,7 @@
 #ifndef __WINE_PE_IMAGE_H
 #define __WINE_PE_IMAGE_H
 
+#include <sys/types.h>
 #include "windows.h"
 
 struct pe_data {
@@ -16,6 +17,21 @@
 	int resource_offset; /* offset to resource typedirectory in file */
 };
 
+typedef struct _WIN32_function{
+    char *name;
+    void *definition;
+} WIN32_function;
+
+typedef struct _WIN32_builtin{
+    char *name;
+    WIN32_function *functions;
+    int size;
+	int base;
+    struct _WIN32_builtin *next;
+} WIN32_builtin;
+
+extern WIN32_builtin *WIN32_builtin_list;
+
 struct w_files
 {
     struct w_files  * next;
@@ -29,6 +45,7 @@
     struct pe_data *pe;
 	OFSTRUCT ofs;
     unsigned int load_addr;
+	WIN32_builtin* builtin;
 };
 
 
@@ -38,18 +55,4 @@
 extern void my_wcstombs(char * result, u_short * source, int len);
 extern struct w_files *wine_files;
 
-typedef struct _WIN32_function{
-    char *name;
-    void *definition;
-} WIN32_function;
-
-typedef struct _WIN32_builtin{
-    char *name;
-    WIN32_function *functions;
-    int size;
-    struct _WIN32_builtin *next;
-} WIN32_builtin;
-
-extern WIN32_builtin *WIN32_builtin_list;
-
 #endif /* __WINE_PE_IMAGE_H */
diff --git a/include/relay32.h b/include/relay32.h
index 2736089..0fd7680 100644
--- a/include/relay32.h
+++ b/include/relay32.h
@@ -4,8 +4,13 @@
  * Copyright 1995 Martin von Loewis
  */
 
+#ifndef _RELAY32_H
+#define _RELAY32_H
+#include "pe_image.h"
+
 void RELAY32_Unimplemented(char *dll, int item);
-void *RELAY32_GetEntryPoint(char *dll_name, char *item, int hint);
+WIN32_builtin *RELAY32_GetBuiltinDLL(char *name);
+void *RELAY32_GetEntryPoint(WIN32_builtin *dll, char *item, int hint);
 LONG RELAY32_CallWindowProc(WNDPROC,int,int,int,int);
 void RELAY32_DebugEnter(char *dll,char *name);
 
@@ -58,3 +63,5 @@
 BOOL USER32_GetMessageA(struct WIN32_MSG* lpmsg,DWORD hwnd,DWORD min,DWORD max);
 HDC USER32_BeginPaint(DWORD hwnd,struct WIN32_PAINTSTRUCT *lpps);
 BOOL USER32_EndPaint(DWORD hwnd,struct WIN32_PAINTSTRUCT *lpps);
+#endif
+
diff --git a/include/resource32.h b/include/resource32.h
index bcddc21..c47d50e 100644
--- a/include/resource32.h
+++ b/include/resource32.h
@@ -10,7 +10,7 @@
 
 #include <stddef.h>
 
-HANDLE32 FindResource32( HINSTANCE hModule, LPCTSTR name, LPCTSTR type );
+HANDLE32 FindResource32( HINSTANCE hModule, LPCWSTR name, LPCWSTR type );
 HANDLE32 LoadResource32( HINSTANCE hModule, HANDLE32 hRsrc );
 LPVOID LockResource32( HANDLE32 handle );
 BOOL FreeResource32( HANDLE32 handle );
@@ -45,4 +45,9 @@
 	WCHAR NameString[1];
 } IMAGE_RESOURCE_DIR_STRING_U, *PIMAGE_RESOURCE_DIR_STRING_U;
 
+HMENU WIN32_LoadMenuIndirectW(void *menu);
+HMENU WIN32_LoadMenuW(HANDLE instance, LPCWSTR name);
+HMENU WIN32_LoadMenuIndirectA(void *menu);
+HMENU WIN32_LoadMenuA(HANDLE instance,LPCSTR name);
+
 #endif  /* __WINE_RESOURCE32_H */
diff --git a/include/stddebug.h b/include/stddebug.h
index 54cc9d2..452812a 100644
--- a/include/stddebug.h
+++ b/include/stddebug.h
@@ -88,6 +88,7 @@
 #undef DEBUG_CLIPPING
 #undef DEBUG_COMBO
 #undef DEBUG_COMM
+#undef DEBUG_COMMDLG
 #undef DEBUG_CURSOR
 #undef DEBUG_DC
 #undef DEBUG_DDE
@@ -166,6 +167,7 @@
 #define DEBUG_CLIPPING
 #define DEBUG_COMBO
 #define DEBUG_COMM
+#define DEBUG_COMMDLG
 #define DEBUG_CURSOR
 #define DEBUG_DC
 #define DEBUG_DDE
diff --git a/include/string32.h b/include/string32.h
index b598c0e..a50bb01 100644
--- a/include/string32.h
+++ b/include/string32.h
@@ -13,8 +13,10 @@
 int STRING32_UniLen(LPWSTR s);
 void STRING32_UniToAnsi(LPSTR dest,LPCWSTR src);
 void STRING32_AnsiToUni(LPWSTR dest,LPCSTR src);
-LPSTR STRING32_DupUniToAnsi(LPWSTR src);
-LPWSTR STRING32_DupAnsiToUni(LPSTR src);
-LPWSTR STRING32_lstrcmpnW(LPCWSTR a,LPCWSTR b,DWORD len);
+LPSTR STRING32_DupUniToAnsi(LPCWSTR src);
+LPWSTR STRING32_DupAnsiToUni(LPCSTR src);
+int STRING32_lstrcmpnW(LPCWSTR a,LPCWSTR b,DWORD len);
+int STRING32_lstrcmpniW(LPCWSTR a,LPCWSTR b,DWORD len);
+DWORD STRING32_lstrlenW(LPCWSTR);
 
 #endif
diff --git a/include/struct32.h b/include/struct32.h
index f9394cd..a7d4dfa 100644
--- a/include/struct32.h
+++ b/include/struct32.h
@@ -22,4 +22,26 @@
 void PARAM32_POINT32to16(const POINT32*,POINT*);
 void PARAM32_POINT16to32(const POINT*,POINT32*);
 
+typedef struct {
+	DWORD style;
+	DWORD dwExtendedStyle;
+	WORD noOfItems;
+	short x;
+	short y;
+	WORD cx;
+	WORD cy;
+} DLGTEMPLATE32;
+
+typedef struct {
+	DWORD style;
+	DWORD dwExtendedStyle;
+	short x;
+	short y;
+	short cx;
+	short cy;
+	WORD id;
+} DLGITEMTEMPLATE32;
+
+#define CW_USEDEFAULT32	0x80000000
+
 #endif
diff --git a/include/win.h b/include/win.h
index f5f7ba1..37184a7 100644
--- a/include/win.h
+++ b/include/win.h
@@ -60,14 +60,15 @@
 } WND;
 
   /* WND flags values */
-#define WIN_NEEDS_BEGINPAINT    0x01  /* WM_PAINT sent to window */
-#define WIN_NEEDS_ERASEBKGND    0x02  /* WM_ERASEBKGND must be sent to window*/
-#define WIN_NEEDS_NCPAINT       0x04  /* WM_NCPAINT must be sent to window */
-#define WIN_RESTORE_MAX         0x08  /* Maximize when restoring */
-#define WIN_INTERNAL_PAINT      0x10  /* Internal WM_PAINT message pending */
-#define WIN_NO_REDRAW           0x20  /* WM_SETREDRAW called for this window */
-#define WIN_GOT_SIZEMSG         0x40  /* WM_SIZE has been sent to the window */
-#define WIN_NCACTIVATED		0x80  /* last WM_NCACTIVATE was positive */
+#define WIN_NEEDS_BEGINPAINT   0x0001 /* WM_PAINT sent to window */
+#define WIN_NEEDS_ERASEBKGND   0x0002 /* WM_ERASEBKGND must be sent to window*/
+#define WIN_NEEDS_NCPAINT      0x0004 /* WM_NCPAINT must be sent to window */
+#define WIN_RESTORE_MAX        0x0008 /* Maximize when restoring */
+#define WIN_INTERNAL_PAINT     0x0010 /* Internal WM_PAINT message pending */
+#define WIN_NO_REDRAW          0x0020 /* WM_SETREDRAW called for this window */
+#define WIN_GOT_SIZEMSG        0x0040 /* WM_SIZE has been sent to the window */
+#define WIN_NCACTIVATED        0x0080 /* last WM_NCACTIVATE was positive */
+#define WIN_MANAGED            0x0100 /* Window managed by the X wm */
 
 #define WIN_CLASS_INFO(wndPtr)   (CLASS_FindClassPtr((wndPtr)->hClass)->wc)
 #define WIN_CLASS_STYLE(wndPtr)  (WIN_CLASS_INFO(wndPtr).style)
diff --git a/include/windows.h b/include/windows.h
index 0e2ce32..22a0cd2 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -10,23 +10,14 @@
 #endif
 
 #ifdef WINELIB32
-typedef struct { LONG x,y; } POINT;
 typedef struct { SHORT x,y; } POINTS;
-typedef struct { LONG cx,cy; } SIZE, *LPSIZE;
-typedef struct { LONG left, top, right, bottom; } RECT;
 #define MAKEPOINTS(l) (*((POINTS *)&(l)))
 #else
-typedef struct { INT x,y; } POINT;
-typedef struct { INT cx,cy; } SIZE, *LPSIZE;
-typedef struct { INT left, top, right, bottom; } RECT;
 #define MAKEPOINT(l) (*((POINT *)&(l)))
 #endif
-typedef POINT *PPOINT;
-typedef POINT *NPPOINT;
-typedef POINT *LPPOINT;
-typedef RECT *LPRECT;
-typedef RECT *NPRECT;
-typedef RECT *PRECT;
+typedef struct { INT cx,cy; } SIZE, *LPSIZE;
+typedef struct { INT x,y; } POINT, *PPOINT, *NPPOINT, *LPPOINT;
+typedef struct { INT left, top, right, bottom; } RECT, *LPRECT;
 
 #ifdef WINELIB32
 #define MAKEWPARAM(low, high) ((LONG)(((WORD)(low)) | \
@@ -1751,32 +1742,33 @@
 #define TPM_CENTERALIGN 0x0004
 #define TPM_RIGHTALIGN  0x0008
 
-#define MF_INSERT 0
-#define MF_CHANGE 0x0080
-#define MF_APPEND 0x0100
-#define MF_DELETE 0x0200
-#define MF_REMOVE 0x1000
-#define MF_BYCOMMAND 0
-#define MF_BYPOSITION 0x0400
-#define MF_SEPARATOR 0x0800
-#define MF_ENABLED 0
-#define MF_GRAYED 0x0001
-#define MF_DISABLED 0x0002
-#define MF_UNCHECKED 0
-#define MF_CHECKED 0x0008
+#define MF_INSERT          0x0000
+#define MF_CHANGE          0x0080
+#define MF_APPEND          0x0100
+#define MF_DELETE          0x0200
+#define MF_REMOVE          0x1000
+#define MF_END             0x0080
+
+#define MF_ENABLED         0x0000
+#define MF_GRAYED          0x0001
+#define MF_DISABLED        0x0002
+#define MF_STRING          0x0000
+#define MF_BITMAP          0x0004
+#define MF_UNCHECKED       0x0000
+#define MF_CHECKED         0x0008
+#define MF_POPUP           0x0010
+#define MF_MENUBARBREAK    0x0020
+#define MF_MENUBREAK       0x0040
+#define MF_UNHILITE        0x0000
+#define MF_HILITE          0x0080
+#define MF_OWNERDRAW       0x0100
 #define MF_USECHECKBITMAPS 0x0200
-#define MF_STRING 0
-#define MF_BITMAP 0x0004
-#define MF_OWNERDRAW 0x0100
-#define MF_POPUP 0x0010
-#define MF_MENUBARBREAK 0x0020
-#define MF_MENUBREAK 0x0040
-#define MF_UNHILITE 0
-#define MF_HILITE 0x0080
-#define MF_SYSMENU 0x2000
-#define MF_HELP 0x4000
-#define MF_MOUSESELECT 0x8000
-#define MF_END 0x0080
+#define MF_BYCOMMAND       0x0000
+#define MF_BYPOSITION      0x0400
+#define MF_SEPARATOR       0x0800
+#define MF_SYSMENU         0x2000
+#define MF_HELP            0x4000
+#define MF_MOUSESELECT     0x8000
 
 #ifndef NOWINOFFSETS
 #define GCW_HBRBACKGROUND (-10)
@@ -2566,6 +2558,35 @@
 #define HELP_MULTIKEY       0x0201
 #define HELP_SETWINPOS      0x0203
 
+typedef struct {
+        TCHAR  dmDeviceName[32];
+        WORD   dmSpecVersion;
+        WORD   dmDriverVersion;
+        WORD   dmSize;
+        WORD   dmDriverExtra;
+        DWORD  dmFields;
+        short  dmOrientation;
+        short  dmPaperSize;
+        short  dmPaperLength;
+        short  dmPaperWidth;
+        short  dmScale;
+        short  dmCopies;
+        short  dmDefaultSource;
+        short  dmPrintQuality;
+        short  dmColor;
+        short  dmDuplex;
+        short  dmYResolution;
+        short  dmTTOption;
+        short  dmCollate;
+        TCHAR  dmFormName[32];
+        WORD   dmUnusedPadding;
+        WORD   dmBitsPerPel;
+        DWORD  dmPelsWidth;
+        DWORD  dmPelsHeight;
+        DWORD  dmDisplayFlags;
+        DWORD  dmDisplayFrequency;
+} DEVMODE;
+
 #ifndef WINELIB
 #pragma pack(4)
 #endif
@@ -2638,95 +2659,95 @@
 BOOL       CreateCaret(HWND,HBITMAP,INT,INT);
 HBITMAP    CreateCompatibleBitmap(HDC,INT,INT);
 HDC        CreateCompatibleDC(HDC);
-HCURSOR    CreateCursor(HANDLE,INT,INT,INT,INT,LPVOID,LPVOID);
-HANDLE     CreateCursorIconIndirect(HANDLE,CURSORICONINFO*,LPSTR,LPSTR);
-HDC        CreateDC(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+HCURSOR    CreateCursor(HANDLE,INT,INT,INT,INT,const BYTE*,const BYTE*);
+HANDLE     CreateCursorIconIndirect(HANDLE,CURSORICONINFO*,const BYTE*,const BYTE*);
+HDC        CreateDC(LPCTSTR,LPCTSTR,LPCTSTR,const DEVMODE*);
 HBRUSH     CreateDIBPatternBrush(HGLOBAL,UINT);
 HBITMAP    CreateDIBitmap(HDC,BITMAPINFOHEADER*,DWORD,LPVOID,BITMAPINFO*,UINT);
-HWND       CreateDialog(HANDLE,SEGPTR,HWND,DLGPROC);
-HWND       CreateDialogIndirect(HANDLE,SEGPTR,HWND,DLGPROC);
-HWND       CreateDialogIndirectParam(HANDLE,SEGPTR,HWND,DLGPROC,LPARAM);
-HWND       CreateDialogParam(HANDLE,SEGPTR,HWND,DLGPROC,LPARAM);
+HWND       CreateDialog(HINSTANCE,SEGPTR,HWND,DLGPROC);
+HWND       CreateDialogIndirect(HINSTANCE,SEGPTR,HWND,DLGPROC);
+HWND       CreateDialogIndirectParam(HINSTANCE,SEGPTR,HWND,DLGPROC,LPARAM);
+HWND       CreateDialogParam(HINSTANCE,SEGPTR,HWND,DLGPROC,LPARAM);
 HBITMAP    CreateDiscardableBitmap(HDC,INT,INT);
 HRGN       CreateEllipticRgn(INT,INT,INT,INT);
 HRGN       CreateEllipticRgnIndirect(LPRECT);
 HFONT      CreateFont(INT,INT,INT,INT,INT,BYTE,BYTE,BYTE,BYTE,BYTE,BYTE,BYTE,BYTE,LPCSTR);
 HFONT      CreateFontIndirect(const LOGFONT*);
 HBRUSH     CreateHatchBrush(INT,COLORREF);
-HDC        CreateIC(LPSTR,LPSTR,LPSTR,LPSTR);
-HICON      CreateIcon(HANDLE,INT,INT,BYTE,BYTE,LPSTR,LPSTR);
+HDC        CreateIC(LPCTSTR,LPCTSTR,LPCTSTR,const DEVMODE*);
+HICON      CreateIcon(HINSTANCE,INT,INT,BYTE,BYTE,const BYTE*,const BYTE*);
 HMENU      CreateMenu(void);
-HANDLE     CreateMetaFile(LPSTR);
-HPALETTE   CreatePalette(LPLOGPALETTE);
+HDC        CreateMetaFile(LPCTSTR);
+HPALETTE   CreatePalette(const LOGPALETTE*);
 HBRUSH     CreatePatternBrush(HBITMAP);
 HPEN       CreatePen(INT,INT,COLORREF);
-HPEN       CreatePenIndirect(LOGPEN*);
-HRGN       CreatePolyPolygonRgn(LPPOINT,LPINT,INT,INT);
-HRGN       CreatePolygonRgn(LPPOINT,INT,INT);
+HPEN       CreatePenIndirect(const LOGPEN*);
+HRGN       CreatePolyPolygonRgn(const POINT*,const INT*,INT,INT);
+HRGN       CreatePolygonRgn(const POINT*,INT,INT);
 HMENU      CreatePopupMenu(void);
-HRGN       CreateRectRgn(short,short,short,short);
-HRGN       CreateRectRgnIndirect(LPRECT);
-HRGN       CreateRoundRectRgn(short,short,short,short,short,short);
-HBRUSH     CreateSolidBrush(DWORD);
+HRGN       CreateRectRgn(INT,INT,INT,INT);
+HRGN       CreateRectRgnIndirect(const RECT*);
+HRGN       CreateRoundRectRgn(INT,INT,INT,INT,INT,INT);
+HBRUSH     CreateSolidBrush(COLORREF);
 HWND       CreateWindow(SEGPTR,SEGPTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,SEGPTR);
 HWND       CreateWindowEx(DWORD,SEGPTR,SEGPTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,SEGPTR);
-BOOL       DPtoLP(HDC,LPPOINT,int);
+BOOL       DPtoLP(HDC,LPPOINT,INT);
 void       DebugBreak(void);
-LONG       DefDlgProc(HWND,UINT,WPARAM,LPARAM);
-LONG       DefFrameProc(HWND,HWND,UINT,WPARAM,LPARAM);
+LRESULT    DefDlgProc(HWND,UINT,WPARAM,LPARAM);
+LRESULT    DefFrameProc(HWND,HWND,UINT,WPARAM,LPARAM);
 DWORD      DefHookProc(short,WORD,DWORD,HHOOK*);
-LONG       DefMDIChildProc(HWND,UINT,WPARAM,LPARAM);
+LRESULT    DefMDIChildProc(HWND,UINT,WPARAM,LPARAM);
 LRESULT    DefWindowProc(HWND,UINT,WPARAM,LPARAM);
-HDWP       DeferWindowPos(HDWP,HWND,HWND,INT,INT,INT,INT,WORD);
+HDWP       DeferWindowPos(HDWP,HWND,HWND,INT,INT,INT,INT,UINT);
 ATOM       DeleteAtom(ATOM);
 BOOL       DeleteDC(HDC);
 BOOL       DeleteMenu(HMENU,UINT,UINT);
 BOOL       DeleteMetaFile(HMETAFILE);
-BOOL       DeleteObject(HANDLE);
-void       DestroyCaret(void);
+BOOL       DeleteObject(HGDIOBJ);
+BOOL       DestroyCaret(void);
 BOOL       DestroyCursor(HCURSOR);
 BOOL       DestroyIcon(HICON);
 BOOL       DestroyMenu(HMENU);
 BOOL       DestroyWindow(HWND);
-int        DialogBox(HINSTANCE,SEGPTR,HWND,WNDPROC);
-int        DialogBoxIndirect(HANDLE,HANDLE,HWND,WNDPROC);
-int        DialogBoxIndirectParam(HANDLE,HANDLE,HWND,WNDPROC,LONG);
-int        DialogBoxParam(HANDLE,SEGPTR,HWND,WNDPROC,LONG);
+INT        DialogBox(HINSTANCE,SEGPTR,HWND,DLGPROC);
+INT        DialogBoxIndirect(HINSTANCE,HANDLE,HWND,DLGPROC);
+INT        DialogBoxIndirectParam(HINSTANCE,HANDLE,HWND,DLGPROC,LONG);
+INT        DialogBoxParam(HINSTANCE,SEGPTR,HWND,DLGPROC,LONG);
 HANDLE     DirectResAlloc(HANDLE,WORD,WORD);
 void       DirectedYield(HTASK);
-LONG       DispatchMessage(LPMSG);
-INT        DlgDirList(HWND,SEGPTR,INT,INT,WORD);
-INT        DlgDirListComboBox(HWND,SEGPTR,INT,INT,WORD);
-BOOL       DlgDirSelect(HWND,LPSTR,int);
-BOOL       DlgDirSelectComboBox(HWND,LPSTR,int);
+LONG       DispatchMessage(const MSG*);
+INT        DlgDirList(HWND,SEGPTR,INT,INT,UINT);
+INT        DlgDirListComboBox(HWND,SEGPTR,INT,INT,UINT);
+BOOL       DlgDirSelect(HWND,LPSTR,INT);
+BOOL       DlgDirSelectComboBox(HWND,LPSTR,INT);
 BOOL       DragDetect(HWND,POINT);
 DWORD      DragObject(HWND, HWND, WORD, HANDLE, WORD, HCURSOR);
-void       DrawFocusRect(HDC,LPRECT);
-BOOL       DrawIcon(HDC,short,short,HICON);
+void       DrawFocusRect(HDC,const RECT*);
+BOOL       DrawIcon(HDC,INT,INT,HICON);
 void       DrawMenuBar(HWND);
-int        DrawText(HDC,LPCSTR,int,LPRECT,WORD);
+INT        DrawText(HDC,LPCTSTR,INT,LPRECT,UINT);
 DWORD      DumpIcon(SEGPTR,WORD*,SEGPTR*,SEGPTR*);
 BOOL       Ellipse(HDC,INT,INT,INT,INT);
 BOOL       EmptyClipboard(void);
 BOOL       EnableHardwareInput(BOOL);
 BOOL       EnableMenuItem(HMENU,UINT,UINT);
-BOOL       EnableScrollBar(HWND,INT,UINT);
+BOOL       EnableScrollBar(HWND,UINT,UINT);
 BOOL       EnableWindow(HWND,BOOL);
 BOOL       EndDeferWindowPos(HDWP);
-void       EndDialog(HWND,short);
-void       EndPaint(HWND,LPPAINTSTRUCT);
-BOOL       EnumChildWindows(HWND,FARPROC,LONG);
-WORD       EnumClipboardFormats(WORD);
-int        EnumFontFamilies(HDC,LPSTR,FONTENUMPROC,LPARAM);
-int        EnumFonts(HDC,LPSTR,FARPROC,LPSTR);
-BOOL       EnumMetaFile(HDC,LOCALHANDLE,FARPROC,BYTE*);
-int        EnumObjects(HDC,int,FARPROC,LPARAM);
-int        EnumProps(HWND,FARPROC);
-BOOL       EnumTaskWindows(HANDLE,FARPROC,LONG);
-BOOL       EnumWindows(FARPROC,LONG);
-BOOL       EqualRect(LPRECT,LPRECT);
+BOOL       EndDialog(HWND,INT);
+BOOL       EndPaint(HWND,const PAINTSTRUCT*);
+BOOL       EnumChildWindows(HWND,WNDENUMPROC,LPARAM);
+UINT       EnumClipboardFormats(UINT);
+INT        EnumFontFamilies(HDC,LPCTSTR,FONTENUMPROC,LPARAM);
+INT        EnumFonts(HDC,LPCTSTR,FONTENUMPROC,LPARAM);
+BOOL       EnumMetaFile(HDC,HMETAFILE,MFENUMPROC,LPARAM);
+INT        EnumObjects(HDC,INT,GOBJENUMPROC,LPARAM);
+INT        EnumProps(HWND,PROPENUMPROC);
+BOOL       EnumTaskWindows(HTASK,WNDENUMPROC,LPARAM);
+BOOL       EnumWindows(WNDENUMPROC,LPARAM);
+BOOL       EqualRect(const RECT*,const RECT*);
 BOOL       EqualRgn(HRGN,HRGN);
-int        Escape(HDC,int,int,LPSTR,LPSTR);
+INT        Escape(HDC,INT,INT,LPCSTR,LPVOID);
 LONG       EscapeCommFunction(int,int);
 int        ExcludeClipRect(HDC,short,short,short,short);
 int        ExcludeUpdateRgn(HDC,HWND);
@@ -3269,13 +3290,13 @@
 BOOL       WritePrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
 BOOL       WriteProfileString(LPCSTR,LPCSTR,LPCSTR);
 void       Yield(void);
-LONG       _hread(HFILE,LPSTR,LONG);
+LONG       _hread(HFILE,SEGPTR,LONG);
 LONG       _hwrite(HFILE,LPCSTR,LONG);
 HFILE      _lclose(HFILE);
 HFILE      _lcreat(LPCSTR,INT);
 LONG       _llseek(HFILE,LONG,INT);
 HFILE      _lopen(LPCSTR,INT);
-INT        _lread(HFILE,LPSTR,WORD);
+INT        _lread(HFILE,SEGPTR,WORD);
 INT        _lwrite(HFILE,LPCSTR,WORD);
 void       hmemcpy(LPVOID,LPCVOID,LONG);
 SEGPTR     lstrcat(SEGPTR,SEGPTR);
diff --git a/include/winpos.h b/include/winpos.h
index 8660036..33ee4bb 100644
--- a/include/winpos.h
+++ b/include/winpos.h
@@ -34,5 +34,6 @@
 				   RECT *oldClientRect, WINDOWPOS *winpos,
 				   RECT *newClientRect );
 extern LONG WINPOS_HandleWindowPosChanging( WINDOWPOS *winpos );
+extern INT WINPOS_WindowFromPoint( POINT pt, HWND *phwnd );
 
 #endif  /* WINPOS_H */
diff --git a/include/wintypes.h b/include/wintypes.h
index 30da778..77b33fe 100644
--- a/include/wintypes.h
+++ b/include/wintypes.h
@@ -39,6 +39,9 @@
 #define UIFMT "%u"
 #define NPFMT "%p"
 #define SPFMT "%p"
+
+/* Should probably eventually be unsigned short, but not now */
+typedef char TCHAR;
 #else
 typedef short INT;
 typedef unsigned short UINT;
@@ -49,6 +52,9 @@
 #define UIFMT "%hu"
 #define NPFMT "%04x"
 #define SPFMT "%08lx"
+
+/* TCHAR is just char in Win16 */
+typedef char TCHAR;
 #endif
 typedef LONG LPARAM;
 typedef LONG LRESULT;
@@ -56,7 +62,8 @@
 typedef DWORD HHOOK;
 typedef char *LPSTR;
 typedef const char *LPCSTR;
-typedef LPCSTR LPCTSTR;
+typedef TCHAR *LPTSTR;
+typedef const TCHAR *LPCTSTR;
 typedef WCHAR *LPWSTR;
 typedef const WCHAR *LPCWSTR;
 typedef char *NPSTR;
@@ -81,6 +88,7 @@
 DECLARE_HANDLE(HDRVR);
 DECLARE_HANDLE(HDWP);
 DECLARE_HANDLE(HFONT);
+DECLARE_HANDLE(HGDIOBJ);
 DECLARE_HANDLE(HGLOBAL);
 DECLARE_HANDLE(HICON);
 DECLARE_HANDLE(HINSTANCE);
@@ -107,12 +115,23 @@
 #ifdef WINELIB
 typedef long (*FARPROC)();
 typedef LRESULT (*WNDPROC)(HWND,UINT,WPARAM,LPARAM);
+typedef LRESULT (*WNDENUMPROC)(HWND,LPARAM);
+/*typedef int (*FONTENUMPROC)(const LOGFONT*,const TEXTMETRIC*,DWORD,LPARAM);*/
+typedef int (*FONTENUMPROC)(const void*,const void*,DWORD,LPARAM);
+typedef int (*GOBJENUMPROC)(LPVOID,LPARAM);
+typedef BOOL (*PROPENUMPROC)(HWND,LPCTSTR,HANDLE);
+/*typedef int (*MFENUMPROC)(HDC,HANDLETABLE*,METARECORD*,int,LPARAM);*/
+typedef int (*MFENUMPROC)(HDC,void*,void*,int,LPARAM);
 #else
 typedef SEGPTR FARPROC;
 typedef SEGPTR WNDPROC;
+typedef SEGPTR WNDENUMPROC;
+typedef SEGPTR FONTENUMPROC;
+typedef SEGPTR GOBJENUMPROC;
+typedef SEGPTR PROPENUMPROC;
+typedef SEGPTR MFENUMPROC;
 #endif
 typedef FARPROC DLGPROC;
-typedef FARPROC FONTENUMPROC;
 typedef FARPROC HOOKPROC;
 
 #define TRUE 1