Release 950319

Sun Mar 19 16:30:20 1995  Alexandre Julliard  (julliard@sunsite.unc.edu)

	* [*/*]
	Implemented a new memory mapping scheme. There's no longer a
	one-to-one mapping between 16-bit and 32-bit pointers. Please see
	file DEVELOPERS-HINTS for technical details.

	* [controls/scroll.c]
	Fixed bug when dragging mouse in horizontal scrollbars.

	* [tools/build.c] [if1632/*.spec]
	Removed support for C callback functions and for re-ordering
	of the 32-bit arguments, as these were never used. This should
	allow a more efficient callback scheme to be implemented.

	* [if1632/olecli.spec]
	Reduced the number of entries to make the 16-bit code fit in 64k.
	This limitation will soon be removed.

	* [loader/ldt.c]
	Rewrote LDT manipulation functions and implemented LDT_GetEntry().

	* [memory/global.c]
	Rewrote Global*() routines to use the new selector allocation
	mechanism.

	* [memory/local.c]
	Rewrote local heap handling to use a Windows-compatible layout
	(not really finished yet).
	Implemented TOOLHELP heap-walking routines.

	* [memory/selector.c]
	Implemented LDT manipulation API functions.

Tue Mar 14 19:50:28 EST 1995 William Magro (wmagro@tc.cornell.edu)

	* [windows/defdlg.c]
	Fixed problem where dialogs closed using the System menu 
        ('Close' item or double click on close box) would
	hang Wine.

Sun Mar 12 14:28:13 1995  Michael Patra <micky@marie.physik.TU-Berlin.DE>

	* [controls/listbox.c]
	Removed most of the statements for sending a notification message
	ListBoxDirectory(), DlgDirSelect(), DlgDirList(): Improved the
	code; Borland's standard file open dialog will work now.
	
	* [misc/main.c], [misc/file.c], [miscemu/int21.c]
	Added support for new command line option "-allowreadonly". If set
	an attempt to open a read only file in write mode will be converted 
	to opening it read only (many programs try to open all files in 
	read/write mode even if they only intend to read it - this might 
	cause a few under problems under an unix-like environment where most 
	files are read only for a "normal" user)

	* [loader/selector.c]
	GetMemoryReference(): Added support for __AHIncr and __AHShift

	* [misc/dos_fs.c]
	DOS_SimplifyPath(): This routine simplifies path names ( e.g., it
	will change "/usr///local/bin/../lib//a" to "/usr/local/lib/a" )
	match(): rewritten
	
	* [objects/text.c]
	TEXT_NextLine(): Removed a bug in the handling of LF's

	* [miscemu/int21.c]
	GetFileDateTime(): Fixed. SetFileDateTime() is still broken.

Sat Mar 11 19:46:19 1995  Martin von Loewis  <loewis@informatik.hu-berlin.de>

	* [controls/menu.c]
	ChangeMenu: defaults to MF_INSERT
	InsertMenu: allow insertion even if position is one after last item

	* [if1632/Imakefile] [if1632/compobj.spec] [if1632/relay.c]
	  [if1632/storage.spec] [include/dlls.h]
	Added stubs for STORAGE.DLL and COMPOBJ.DLL

	* [if1632/user.spec] [windows/message.c]
	InSendMessage: new function

	* [include/neexe.h][include/ne_image.c]
	NE_FixupSegment: fixed handling of additive records

	* [loader/selector.c]
	GetEntryDLLName: return NULL instead of pointer to DLL.0 if not found

	* [loader/signal.c]
	win_fault: Enter debugger on SIGFPE, too

Wed Mar  1 21:47:42 1995  Cameron Heide  (heide@ee.ualberta.ca)

        * [miscemu/int*.c]
        Various minor modifications to the clock tick counter,
        FindFirst/FindNext funcs, and DPB handling.
diff --git a/include/atom.h b/include/atom.h
index 0336837..045c343 100644
--- a/include/atom.h
+++ b/include/atom.h
@@ -28,10 +28,7 @@
 #ifdef WINELIB
 #define LocalAlign(flags,bytes) LocalAlloc (flags|LMEM_WINE_ALIGN,bytes)
 #else
-#define LocalAlign(flags,bytes) WIN16_LocalAlloc((flags),(bytes))
-#define LocalAlloc		WIN16_LocalAlloc
-#define LocalLock		WIN16_LocalLock
-#define LocalFree		WIN16_LocalFree
+#define LocalAlign(flags,bytes) LocalAlloc((flags),(bytes))
 #endif
 
 #endif  /* ATOM_H */
diff --git a/include/dce.h b/include/dce.h
index d95c781..e38c194 100644
--- a/include/dce.h
+++ b/include/dce.h
@@ -29,6 +29,7 @@
 } DCE;
 
 
+extern void DCE_Init(void);
 extern HANDLE DCE_AllocDCE( DCE_TYPE type );
 extern void DCE_FreeDCE( HANDLE hdce );
 
diff --git a/include/debug.h b/include/debug.h
index 15c0b3a..34493c8 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -32,6 +32,7 @@
 #undef DEBUG_FIXUP
 #undef DEBUG_FONT
 #undef DEBUG_GDI
+#undef DEBUG_GLOBAL
 #undef DEBUG_GRAPHICS
 #undef DEBUG_HEAP
 #undef DEBUG_ICON
@@ -40,6 +41,7 @@
 #undef DEBUG_KEYBOARD
 #undef DEBUG_LDT
 #undef DEBUG_LISTBOX
+#undef DEBUG_LOCAL
 #undef DEBUG_MALLOC
 #undef DEBUG_MCI
 #undef DEBUG_MCIANIM
@@ -65,6 +67,7 @@
 #undef DEBUG_RELAY
 #undef DEBUG_RESOURCE
 #undef DEBUG_SCROLL
+#undef DEBUG_SELECTOR
 #undef DEBUG_SELECTORS
 #undef DEBUG_STACK
 #undef DEBUG_STRESS
@@ -72,6 +75,7 @@
 #undef DEBUG_TASK
 #undef DEBUG_TEXT
 #undef DEBUG_TIMER
+#undef DEBUG_TOOLHELP
 #undef DEBUG_UTILITY
 #undef DEBUG_WIN
 #undef DEBUG_WINSOCK
@@ -104,6 +108,7 @@
 #define DEBUG_FIXUP
 #define DEBUG_FONT
 #define DEBUG_GDI
+#define DEBUG_GLOBAL
 #define DEBUG_GRAPHICS
 #define DEBUG_HEAP
 #define DEBUG_ICON
@@ -112,6 +117,7 @@
 #define DEBUG_KEYBOARD
 #define DEBUG_LDT
 #define DEBUG_LISTBOX
+#define DEBUG_LOCAL
 #define DEBUG_MALLOC
 #define DEBUG_MCI
 #define DEBUG_MCIANIM
@@ -137,6 +143,7 @@
 #define DEBUG_RELAY
 #define DEBUG_RESOURCE
 #define DEBUG_SCROLL
+#define DEBUG_SELECTOR
 #define DEBUG_SELECTORS
 #define DEBUG_STACK
 #define DEBUG_STRESS
@@ -144,6 +151,7 @@
 #define DEBUG_TASK
 #define DEBUG_TEXT
 #define DEBUG_TIMER
+#define DEBUG_TOOLHELP
 #define DEBUG_UTILITY
 #define DEBUG_WIN
 #define DEBUG_WINSOCK
@@ -282,6 +290,11 @@
 #else
     0,
 #endif
+#ifdef DEBUG_GLOBAL
+    1,
+#else
+    0,
+#endif
 #ifdef DEBUG_GRAPHICS
     1,
 #else
@@ -322,6 +335,11 @@
 #else
     0,
 #endif
+#ifdef DEBUG_LOCAL
+    1,
+#else
+    0,
+#endif
 #ifdef DEBUG_MALLOC
     1,
 #else
@@ -447,6 +465,11 @@
 #else
     0,
 #endif
+#ifdef DEBUG_SELECTOR
+    1,
+#else
+    0,
+#endif
 #ifdef DEBUG_SELECTORS
     1,
 #else
@@ -482,6 +505,11 @@
 #else
     0,
 #endif
+#ifdef DEBUG_TOOLHELP
+    1,
+#else
+    0,
+#endif
 #ifdef DEBUG_UTILITY
     1,
 #else
@@ -843,8 +871,21 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_graphics if(!debug_msg_enabled[26]) ; else fprintf
-#define debugging_graphics debug_msg_enabled[26]
+#define dprintf_global if(!debug_msg_enabled[26]) ; else fprintf
+#define debugging_global debug_msg_enabled[26]
+#else
+#ifdef DEBUG_GLOBAL
+#define dprintf_global fprintf
+#define debugging_global 1
+#else
+#define dprintf_global while(0) fprintf
+#define debugging_global 0
+#endif
+#endif
+
+#ifdef DEBUG_RUNTIME
+#define dprintf_graphics if(!debug_msg_enabled[27]) ; else fprintf
+#define debugging_graphics debug_msg_enabled[27]
 #else
 #ifdef DEBUG_GRAPHICS
 #define dprintf_graphics fprintf
@@ -856,8 +897,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_heap if(!debug_msg_enabled[27]) ; else fprintf
-#define debugging_heap debug_msg_enabled[27]
+#define dprintf_heap if(!debug_msg_enabled[28]) ; else fprintf
+#define debugging_heap debug_msg_enabled[28]
 #else
 #ifdef DEBUG_HEAP
 #define dprintf_heap fprintf
@@ -869,8 +910,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_icon if(!debug_msg_enabled[28]) ; else fprintf
-#define debugging_icon debug_msg_enabled[28]
+#define dprintf_icon if(!debug_msg_enabled[29]) ; else fprintf
+#define debugging_icon debug_msg_enabled[29]
 #else
 #ifdef DEBUG_ICON
 #define dprintf_icon fprintf
@@ -882,8 +923,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_int if(!debug_msg_enabled[29]) ; else fprintf
-#define debugging_int debug_msg_enabled[29]
+#define dprintf_int if(!debug_msg_enabled[30]) ; else fprintf
+#define debugging_int debug_msg_enabled[30]
 #else
 #ifdef DEBUG_INT
 #define dprintf_int fprintf
@@ -895,8 +936,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_key if(!debug_msg_enabled[30]) ; else fprintf
-#define debugging_key debug_msg_enabled[30]
+#define dprintf_key if(!debug_msg_enabled[31]) ; else fprintf
+#define debugging_key debug_msg_enabled[31]
 #else
 #ifdef DEBUG_KEY
 #define dprintf_key fprintf
@@ -908,8 +949,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_keyboard if(!debug_msg_enabled[31]) ; else fprintf
-#define debugging_keyboard debug_msg_enabled[31]
+#define dprintf_keyboard if(!debug_msg_enabled[32]) ; else fprintf
+#define debugging_keyboard debug_msg_enabled[32]
 #else
 #ifdef DEBUG_KEYBOARD
 #define dprintf_keyboard fprintf
@@ -921,8 +962,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_ldt if(!debug_msg_enabled[32]) ; else fprintf
-#define debugging_ldt debug_msg_enabled[32]
+#define dprintf_ldt if(!debug_msg_enabled[33]) ; else fprintf
+#define debugging_ldt debug_msg_enabled[33]
 #else
 #ifdef DEBUG_LDT
 #define dprintf_ldt fprintf
@@ -934,8 +975,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_listbox if(!debug_msg_enabled[33]) ; else fprintf
-#define debugging_listbox debug_msg_enabled[33]
+#define dprintf_listbox if(!debug_msg_enabled[34]) ; else fprintf
+#define debugging_listbox debug_msg_enabled[34]
 #else
 #ifdef DEBUG_LISTBOX
 #define dprintf_listbox fprintf
@@ -947,8 +988,21 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_malloc if(!debug_msg_enabled[34]) ; else fprintf
-#define debugging_malloc debug_msg_enabled[34]
+#define dprintf_local if(!debug_msg_enabled[35]) ; else fprintf
+#define debugging_local debug_msg_enabled[35]
+#else
+#ifdef DEBUG_LOCAL
+#define dprintf_local fprintf
+#define debugging_local 1
+#else
+#define dprintf_local while(0) fprintf
+#define debugging_local 0
+#endif
+#endif
+
+#ifdef DEBUG_RUNTIME
+#define dprintf_malloc if(!debug_msg_enabled[36]) ; else fprintf
+#define debugging_malloc debug_msg_enabled[36]
 #else
 #ifdef DEBUG_MALLOC
 #define dprintf_malloc fprintf
@@ -960,8 +1014,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mci if(!debug_msg_enabled[35]) ; else fprintf
-#define debugging_mci debug_msg_enabled[35]
+#define dprintf_mci if(!debug_msg_enabled[37]) ; else fprintf
+#define debugging_mci debug_msg_enabled[37]
 #else
 #ifdef DEBUG_MCI
 #define dprintf_mci fprintf
@@ -973,8 +1027,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mcianim if(!debug_msg_enabled[36]) ; else fprintf
-#define debugging_mcianim debug_msg_enabled[36]
+#define dprintf_mcianim if(!debug_msg_enabled[38]) ; else fprintf
+#define debugging_mcianim debug_msg_enabled[38]
 #else
 #ifdef DEBUG_MCIANIM
 #define dprintf_mcianim fprintf
@@ -986,8 +1040,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mciwave if(!debug_msg_enabled[37]) ; else fprintf
-#define debugging_mciwave debug_msg_enabled[37]
+#define dprintf_mciwave if(!debug_msg_enabled[39]) ; else fprintf
+#define debugging_mciwave debug_msg_enabled[39]
 #else
 #ifdef DEBUG_MCIWAVE
 #define dprintf_mciwave fprintf
@@ -999,8 +1053,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mdi if(!debug_msg_enabled[38]) ; else fprintf
-#define debugging_mdi debug_msg_enabled[38]
+#define dprintf_mdi if(!debug_msg_enabled[40]) ; else fprintf
+#define debugging_mdi debug_msg_enabled[40]
 #else
 #ifdef DEBUG_MDI
 #define dprintf_mdi fprintf
@@ -1012,8 +1066,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_menu if(!debug_msg_enabled[39]) ; else fprintf
-#define debugging_menu debug_msg_enabled[39]
+#define dprintf_menu if(!debug_msg_enabled[41]) ; else fprintf
+#define debugging_menu debug_msg_enabled[41]
 #else
 #ifdef DEBUG_MENU
 #define dprintf_menu fprintf
@@ -1025,8 +1079,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_menucalc if(!debug_msg_enabled[40]) ; else fprintf
-#define debugging_menucalc debug_msg_enabled[40]
+#define dprintf_menucalc if(!debug_msg_enabled[42]) ; else fprintf
+#define debugging_menucalc debug_msg_enabled[42]
 #else
 #ifdef DEBUG_MENUCALC
 #define dprintf_menucalc fprintf
@@ -1038,8 +1092,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_message if(!debug_msg_enabled[41]) ; else fprintf
-#define debugging_message debug_msg_enabled[41]
+#define dprintf_message if(!debug_msg_enabled[43]) ; else fprintf
+#define debugging_message debug_msg_enabled[43]
 #else
 #ifdef DEBUG_MESSAGE
 #define dprintf_message fprintf
@@ -1051,8 +1105,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_metafile if(!debug_msg_enabled[42]) ; else fprintf
-#define debugging_metafile debug_msg_enabled[42]
+#define dprintf_metafile if(!debug_msg_enabled[44]) ; else fprintf
+#define debugging_metafile debug_msg_enabled[44]
 #else
 #ifdef DEBUG_METAFILE
 #define dprintf_metafile fprintf
@@ -1064,8 +1118,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_midi if(!debug_msg_enabled[43]) ; else fprintf
-#define debugging_midi debug_msg_enabled[43]
+#define dprintf_midi if(!debug_msg_enabled[45]) ; else fprintf
+#define debugging_midi debug_msg_enabled[45]
 #else
 #ifdef DEBUG_MIDI
 #define dprintf_midi fprintf
@@ -1077,8 +1131,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mmio if(!debug_msg_enabled[44]) ; else fprintf
-#define debugging_mmio debug_msg_enabled[44]
+#define dprintf_mmio if(!debug_msg_enabled[46]) ; else fprintf
+#define debugging_mmio debug_msg_enabled[46]
 #else
 #ifdef DEBUG_MMIO
 #define dprintf_mmio fprintf
@@ -1090,8 +1144,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_mmtime if(!debug_msg_enabled[45]) ; else fprintf
-#define debugging_mmtime debug_msg_enabled[45]
+#define dprintf_mmtime if(!debug_msg_enabled[47]) ; else fprintf
+#define debugging_mmtime debug_msg_enabled[47]
 #else
 #ifdef DEBUG_MMTIME
 #define dprintf_mmtime fprintf
@@ -1103,8 +1157,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_module if(!debug_msg_enabled[46]) ; else fprintf
-#define debugging_module debug_msg_enabled[46]
+#define dprintf_module if(!debug_msg_enabled[48]) ; else fprintf
+#define debugging_module debug_msg_enabled[48]
 #else
 #ifdef DEBUG_MODULE
 #define dprintf_module fprintf
@@ -1116,8 +1170,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_msg if(!debug_msg_enabled[47]) ; else fprintf
-#define debugging_msg debug_msg_enabled[47]
+#define dprintf_msg if(!debug_msg_enabled[49]) ; else fprintf
+#define debugging_msg debug_msg_enabled[49]
 #else
 #ifdef DEBUG_MSG
 #define dprintf_msg fprintf
@@ -1129,8 +1183,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_msgbox if(!debug_msg_enabled[48]) ; else fprintf
-#define debugging_msgbox debug_msg_enabled[48]
+#define dprintf_msgbox if(!debug_msg_enabled[50]) ; else fprintf
+#define debugging_msgbox debug_msg_enabled[50]
 #else
 #ifdef DEBUG_MSGBOX
 #define dprintf_msgbox fprintf
@@ -1142,8 +1196,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_nonclient if(!debug_msg_enabled[49]) ; else fprintf
-#define debugging_nonclient debug_msg_enabled[49]
+#define dprintf_nonclient if(!debug_msg_enabled[51]) ; else fprintf
+#define debugging_nonclient debug_msg_enabled[51]
 #else
 #ifdef DEBUG_NONCLIENT
 #define dprintf_nonclient fprintf
@@ -1155,8 +1209,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_ole if(!debug_msg_enabled[50]) ; else fprintf
-#define debugging_ole debug_msg_enabled[50]
+#define dprintf_ole if(!debug_msg_enabled[52]) ; else fprintf
+#define debugging_ole debug_msg_enabled[52]
 #else
 #ifdef DEBUG_OLE
 #define dprintf_ole fprintf
@@ -1168,8 +1222,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_palette if(!debug_msg_enabled[51]) ; else fprintf
-#define debugging_palette debug_msg_enabled[51]
+#define dprintf_palette if(!debug_msg_enabled[53]) ; else fprintf
+#define debugging_palette debug_msg_enabled[53]
 #else
 #ifdef DEBUG_PALETTE
 #define dprintf_palette fprintf
@@ -1181,8 +1235,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_profile if(!debug_msg_enabled[52]) ; else fprintf
-#define debugging_profile debug_msg_enabled[52]
+#define dprintf_profile if(!debug_msg_enabled[54]) ; else fprintf
+#define debugging_profile debug_msg_enabled[54]
 #else
 #ifdef DEBUG_PROFILE
 #define dprintf_profile fprintf
@@ -1194,8 +1248,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_prop if(!debug_msg_enabled[53]) ; else fprintf
-#define debugging_prop debug_msg_enabled[53]
+#define dprintf_prop if(!debug_msg_enabled[55]) ; else fprintf
+#define debugging_prop debug_msg_enabled[55]
 #else
 #ifdef DEBUG_PROP
 #define dprintf_prop fprintf
@@ -1207,8 +1261,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_reg if(!debug_msg_enabled[54]) ; else fprintf
-#define debugging_reg debug_msg_enabled[54]
+#define dprintf_reg if(!debug_msg_enabled[56]) ; else fprintf
+#define debugging_reg debug_msg_enabled[56]
 #else
 #ifdef DEBUG_REG
 #define dprintf_reg fprintf
@@ -1220,8 +1274,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_region if(!debug_msg_enabled[55]) ; else fprintf
-#define debugging_region debug_msg_enabled[55]
+#define dprintf_region if(!debug_msg_enabled[57]) ; else fprintf
+#define debugging_region debug_msg_enabled[57]
 #else
 #ifdef DEBUG_REGION
 #define dprintf_region fprintf
@@ -1233,8 +1287,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_relay if(!debug_msg_enabled[56]) ; else fprintf
-#define debugging_relay debug_msg_enabled[56]
+#define dprintf_relay if(!debug_msg_enabled[58]) ; else fprintf
+#define debugging_relay debug_msg_enabled[58]
 #else
 #ifdef DEBUG_RELAY
 #define dprintf_relay fprintf
@@ -1246,8 +1300,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_resource if(!debug_msg_enabled[57]) ; else fprintf
-#define debugging_resource debug_msg_enabled[57]
+#define dprintf_resource if(!debug_msg_enabled[59]) ; else fprintf
+#define debugging_resource debug_msg_enabled[59]
 #else
 #ifdef DEBUG_RESOURCE
 #define dprintf_resource fprintf
@@ -1259,8 +1313,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_scroll if(!debug_msg_enabled[58]) ; else fprintf
-#define debugging_scroll debug_msg_enabled[58]
+#define dprintf_scroll if(!debug_msg_enabled[60]) ; else fprintf
+#define debugging_scroll debug_msg_enabled[60]
 #else
 #ifdef DEBUG_SCROLL
 #define dprintf_scroll fprintf
@@ -1272,8 +1326,21 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_selectors if(!debug_msg_enabled[59]) ; else fprintf
-#define debugging_selectors debug_msg_enabled[59]
+#define dprintf_selector if(!debug_msg_enabled[61]) ; else fprintf
+#define debugging_selector debug_msg_enabled[61]
+#else
+#ifdef DEBUG_SELECTOR
+#define dprintf_selector fprintf
+#define debugging_selector 1
+#else
+#define dprintf_selector while(0) fprintf
+#define debugging_selector 0
+#endif
+#endif
+
+#ifdef DEBUG_RUNTIME
+#define dprintf_selectors if(!debug_msg_enabled[62]) ; else fprintf
+#define debugging_selectors debug_msg_enabled[62]
 #else
 #ifdef DEBUG_SELECTORS
 #define dprintf_selectors fprintf
@@ -1285,8 +1352,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_stack if(!debug_msg_enabled[60]) ; else fprintf
-#define debugging_stack debug_msg_enabled[60]
+#define dprintf_stack if(!debug_msg_enabled[63]) ; else fprintf
+#define debugging_stack debug_msg_enabled[63]
 #else
 #ifdef DEBUG_STACK
 #define dprintf_stack fprintf
@@ -1298,8 +1365,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_stress if(!debug_msg_enabled[61]) ; else fprintf
-#define debugging_stress debug_msg_enabled[61]
+#define dprintf_stress if(!debug_msg_enabled[64]) ; else fprintf
+#define debugging_stress debug_msg_enabled[64]
 #else
 #ifdef DEBUG_STRESS
 #define dprintf_stress fprintf
@@ -1311,8 +1378,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_syscolor if(!debug_msg_enabled[62]) ; else fprintf
-#define debugging_syscolor debug_msg_enabled[62]
+#define dprintf_syscolor if(!debug_msg_enabled[65]) ; else fprintf
+#define debugging_syscolor debug_msg_enabled[65]
 #else
 #ifdef DEBUG_SYSCOLOR
 #define dprintf_syscolor fprintf
@@ -1324,8 +1391,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_task if(!debug_msg_enabled[63]) ; else fprintf
-#define debugging_task debug_msg_enabled[63]
+#define dprintf_task if(!debug_msg_enabled[66]) ; else fprintf
+#define debugging_task debug_msg_enabled[66]
 #else
 #ifdef DEBUG_TASK
 #define dprintf_task fprintf
@@ -1337,8 +1404,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_text if(!debug_msg_enabled[64]) ; else fprintf
-#define debugging_text debug_msg_enabled[64]
+#define dprintf_text if(!debug_msg_enabled[67]) ; else fprintf
+#define debugging_text debug_msg_enabled[67]
 #else
 #ifdef DEBUG_TEXT
 #define dprintf_text fprintf
@@ -1350,8 +1417,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_timer if(!debug_msg_enabled[65]) ; else fprintf
-#define debugging_timer debug_msg_enabled[65]
+#define dprintf_timer if(!debug_msg_enabled[68]) ; else fprintf
+#define debugging_timer debug_msg_enabled[68]
 #else
 #ifdef DEBUG_TIMER
 #define dprintf_timer fprintf
@@ -1363,8 +1430,21 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_utility if(!debug_msg_enabled[66]) ; else fprintf
-#define debugging_utility debug_msg_enabled[66]
+#define dprintf_toolhelp if(!debug_msg_enabled[69]) ; else fprintf
+#define debugging_toolhelp debug_msg_enabled[69]
+#else
+#ifdef DEBUG_TOOLHELP
+#define dprintf_toolhelp fprintf
+#define debugging_toolhelp 1
+#else
+#define dprintf_toolhelp while(0) fprintf
+#define debugging_toolhelp 0
+#endif
+#endif
+
+#ifdef DEBUG_RUNTIME
+#define dprintf_utility if(!debug_msg_enabled[70]) ; else fprintf
+#define debugging_utility debug_msg_enabled[70]
 #else
 #ifdef DEBUG_UTILITY
 #define dprintf_utility fprintf
@@ -1376,8 +1456,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_win if(!debug_msg_enabled[67]) ; else fprintf
-#define debugging_win debug_msg_enabled[67]
+#define dprintf_win if(!debug_msg_enabled[71]) ; else fprintf
+#define debugging_win debug_msg_enabled[71]
 #else
 #ifdef DEBUG_WIN
 #define dprintf_win fprintf
@@ -1389,8 +1469,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_winsock if(!debug_msg_enabled[68]) ; else fprintf
-#define debugging_winsock debug_msg_enabled[68]
+#define dprintf_winsock if(!debug_msg_enabled[72]) ; else fprintf
+#define debugging_winsock debug_msg_enabled[72]
 #else
 #ifdef DEBUG_WINSOCK
 #define dprintf_winsock fprintf
@@ -1431,6 +1511,7 @@
     "fixup",
     "font",
     "gdi",
+    "global",
     "graphics",
     "heap",
     "icon",
@@ -1439,6 +1520,7 @@
     "keyboard",
     "ldt",
     "listbox",
+    "local",
     "malloc",
     "mci",
     "mcianim",
@@ -1464,6 +1546,7 @@
     "relay",
     "resource",
     "scroll",
+    "selector",
     "selectors",
     "stack",
     "stress",
@@ -1471,6 +1554,7 @@
     "task",
     "text",
     "timer",
+    "toolhelp",
     "utility",
     "win",
     "winsock",
diff --git a/include/dlls.h b/include/dlls.h
index 0ad5c2f..cdceae5 100644
--- a/include/dlls.h
+++ b/include/dlls.h
@@ -20,7 +20,7 @@
 struct ne_data {
     struct ne_header_s *ne_header;
     struct ne_segment_table_entry_s *seg_table;
-    struct segment_descriptor_s *selector_table;
+    unsigned short *selector_table;
     char *lookup_table;
     char *nrname_table;
     char *rname_table;
@@ -61,7 +61,6 @@
 #define DLL_MAX_ARGS		16
 
 #define DLL_HANDLERTYPE_PASCAL	16
-#define DLL_HANDLERTYPE_C	17
 
 struct dll_table_entry_s
 {
@@ -76,7 +75,6 @@
      */
     char *export_name;
     void *handler;		/* Address of function to process request */
-    char handler_type;		/* C or PASCAL calling convention	  */
     char n_args;			/* Number of arguments passed to function */
     short conv_reference ; /* reference to Argument conversion data  */
 #ifdef WINESTAT
@@ -97,7 +95,6 @@
 extern struct dll_table_entry_s KERNEL_table[];
 extern struct dll_table_entry_s USER_table[];
 extern struct dll_table_entry_s GDI_table[];
-extern struct dll_table_entry_s UNIXLIB_table[];
 extern struct dll_table_entry_s WIN87EM_table[];
 extern struct dll_table_entry_s MMSYSTEM_table[];
 extern struct dll_table_entry_s SHELL_table[];
@@ -116,12 +113,13 @@
 extern struct dll_table_entry_s OLE2PROX_table[];
 extern struct dll_table_entry_s OLECLI_table[];
 extern struct dll_table_entry_s OLESVR_table[];
+extern struct dll_table_entry_s COMPOBJ_table[];
+extern struct dll_table_entry_s STORAGE_table[];
 
 
 extern unsigned short KERNEL_offsets[];
 extern unsigned short USER_offsets[];
 extern unsigned short GDI_offsets[];
-extern unsigned short UNIXLIB_offsets[];
 extern unsigned short WIN87EM_offsets[];
 extern unsigned short MMSYSTEM_offsets[];
 extern unsigned short SHELL_offsets[];
@@ -140,12 +138,13 @@
 extern unsigned short OLE2PROX_offsets[];
 extern unsigned short OLECLI_offsets[];
 extern unsigned short OLESVR_offsets[];
+extern unsigned short COMPOBJ_offsets[];
+extern unsigned short STORAGE_offsets[];
 
 
 extern unsigned char KERNEL_types[];
 extern unsigned char USER_types[];
 extern unsigned char GDI_types[];
-extern unsigned char UNIXLIB_types[];
 extern unsigned char WIN87EM_types[];
 extern unsigned char MMSYSTEM_types[];
 extern unsigned char SHELL_types[];
@@ -164,8 +163,10 @@
 extern unsigned char OLE2PROX_types[];
 extern unsigned char OLECLI_types[];
 extern unsigned char OLESVR_types[];
+extern unsigned char COMPOBJ_types[];
+extern unsigned char STORAGE_types[];
 
-#define N_BUILTINS	22
+#define N_BUILTINS	23
 
 #endif /* DLLS_H */
 
diff --git a/include/gdi.h b/include/gdi.h
index 476782f..561e882 100644
--- a/include/gdi.h
+++ b/include/gdi.h
@@ -11,8 +11,8 @@
 #include <X11/Xutil.h>
 
 #include "windows.h"
-#include "segmem.h"
-#include "heap.h"
+#include "ldt.h"
+#include "local.h"
 
   /* GDI objects magic numbers */
 #define PEN_MAGIC             0x4f47
@@ -245,18 +245,26 @@
 
 #ifdef WINELIB
 
-#define GDI_HEAP_ALLOC(f,size) LocalAlloc (f,size)
-#define GDI_HEAP_ADDR(handle)  LocalLock (handle)
-#define GDI_HEAP_FREE(handle)  LocalFree (handle)
+#define GDI_HEAP_ALLOC(f,size)     LocalAlloc (f,size)
+#define GDI_HEAP_LIN_ADDR(handle)  LocalLock (handle)
+#define GDI_HEAP_SEG_ADDR(handle)  LocalLock (handle)
+#define GDI_HEAP_FREE(handle)      LocalFree (handle)
 
 #else
 
-extern MDESC *GDI_Heap;
+extern LPSTR GDI_Heap;
+extern WORD GDI_HeapSel;
 
-#define GDI_HEAP_ALLOC(f,size) ((int)HEAP_Alloc(&GDI_Heap,f,size) & 0xffff)
-#define GDI_HEAP_FREE(handle) (HEAP_Free(&GDI_Heap,GDI_HEAP_ADDR(handle)))
-#define GDI_HEAP_ADDR(handle) \
-    ((void *)((handle) ? ((handle) | ((int)GDI_Heap & 0xffff0000)) : 0))
+#define GDI_HEAP_ALLOC(size) \
+            LOCAL_Alloc( GDI_HeapSel, LMEM_FIXED, (size) )
+#define GDI_HEAP_REALLOC(handle,size) \
+            LOCAL_ReAlloc( GDI_HeapSel, (handle), (size), LMEM_FIXED )
+#define GDI_HEAP_FREE(handle) \
+            LOCAL_Free( GDI_HeapSel, (handle) )
+#define GDI_HEAP_LIN_ADDR(handle)  \
+            ((handle) ? PTR_SEG_OFF_TO_LIN(GDI_HeapSel, (handle)) : NULL)
+#define GDI_HEAP_SEG_ADDR(handle)  \
+            ((handle) ? MAKELONG((handle), GDI_HeapSel) : 0)
 
 #endif
 
diff --git a/include/heap.h b/include/heap.h
deleted file mode 100644
index 043d013..0000000
--- a/include/heap.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* $Id: heap.h,v 1.2 1993/07/04 04:04:21 root Exp root $
- */
-/*
- * Copyright  Robert J. Amstadt, 1993
- */
-#ifndef HEAP_H
-#define HEAP_H
-
-#include "segmem.h"
-#include "atom.h"
-#include "stackframe.h"
-
-/**********************************************************************
- * LOCAL HEAP STRUCTURES AND FUNCTIONS
- */
-typedef struct heap_mem_desc_s
-{
-    struct heap_mem_desc_s *prev, *next;
-    unsigned short length;
-    unsigned char  lock;
-    unsigned char  flags;
-} MDESC;
-
-typedef struct heap_local_heap_s
-{
-    struct heap_local_heap_s *next;
-    MDESC *free_list;
-    ATOMTABLE *local_table;
-    unsigned short selector;
-    unsigned short delta;		/* Number saved for Windows compat. */
-} LHEAP;
-
-extern void HEAP_Init(MDESC **free_list, void *start, int length);
-extern void *HEAP_Alloc(MDESC **free_list, int flags, int bytes);
-extern int  HEAP_Free(MDESC **free_list, void *block);
-extern void *HEAP_ReAlloc(MDESC **free_list, void *old_block, 
-			  int new_size, unsigned int flags);
-
-extern LHEAP *HEAP_LocalFindHeap(unsigned short owner);
-extern unsigned int HEAP_LocalSize(MDESC **free_list, unsigned int handle);
-extern void HEAP_LocalInit(unsigned short owner, void *start, int length);
-
-extern void *WIN16_LocalAlloc(int flags, int bytes);
-extern int WIN16_LocalCompact(int min_free);
-extern unsigned int WIN16_LocalFlags(unsigned int handle);
-extern unsigned int WIN16_LocalFree(unsigned int handle);
-extern void *WIN16_LocalLock(unsigned int handle);
-extern void *WIN16_LocalReAlloc(unsigned int handle, int flags, int bytes);
-extern unsigned int WIN16_LocalUnlock(unsigned int handle);
-
-/* Use ds instead of owner of cs */
-#define HEAP_OWNER	(pStack16Frame->ds)
-#define LOCALHEAP()	(&HEAP_LocalFindHeap(HEAP_OWNER)->free_list)
-#define LOCALATOMTABLE() (&HEAP_LocalFindHeap(HEAP_OWNER)->local_table)
-
-/**********************************************************************
- * GLOBAL HEAP STRUCTURES AND FUNCTIONS:
- *
- * Global memory pool descriptor.  Segments MUST be maintained in segment
- * ascending order.  If not the reallocation routine will die a horrible
- * death.
- *
- * handle  = 0, this descriptor contains the address of a free pool.
- *        != 0, this describes an allocated block.
- *
- * sequence = 0, this is not a huge block
- *          > 0, this is a portion of a huge block
- *          =-1, this is a free segment
- *
- * addr	      - address of this memory block.
- *
- * length     - used to maintain huge blocks.
- */
-typedef struct global_mem_desc_s
-{
-    struct global_mem_desc_s *next;	/* Next GDESC in list              */
-    struct global_mem_desc_s *prev;	/* Previous GDESC in list          */
-    unsigned short handle;		/* Handle of this block.	   */
-    short          sequence;		/* Block sequence # in huge block  */
-    void          *addr;		/* Address allocated with mmap()   */
-    int            length;		/* Length of block		   */
-    int            lock_count;		/* Block lock count		   */
-    unsigned short alias;		/* Offset-zero alias selector      */
-    unsigned int   alias_key;		/* Offset-zero alias sh. mem. key  */
-    void          *linear_addr;		/* Linear address of huge block    */
-    int            linear_key;		/* Linear shared memory key        */
-    int            linear_count;	/* Linear lock count               */
-} GDESC;
-
-extern GDESC *GlobalList;
-
-extern void *GlobalQuickAlloc(int size);
-extern unsigned int GlobalHandleFromPointer(void *block);
-extern GDESC *GlobalGetGDesc(unsigned int block);
-extern void *GlobalLinearLock(unsigned int block);
-extern unsigned int GlobalLinearUnlock(unsigned int block);
-
-#endif /* HEAP_H */
diff --git a/include/hook.h b/include/hook.h
index f70dce8..303fdd8 100644
--- a/include/hook.h
+++ b/include/hook.h
@@ -8,7 +8,7 @@
 #define HOOK_H
 
 #include "windows.h"
-#include "user.h"
+#include "ldt.h"
 
   /* Hook data (pointed to by a HHOOK) */
 typedef struct
@@ -26,7 +26,8 @@
 #define SYSTEM_HOOK(id)  (systemHooks[(id)-FIRST_HOOK])
 #define TASK_HOOK(id)    (taskHooks[(id)-FIRST_HOOK])
 #define INTERNAL_CALL_HOOK(hhook,code,wparam,lparam) \
-    ((hhook) ? CallHookProc(((HOOKDATA*)(hhook))->proc,code,wparam,lparam) : 0)
+    ((hhook) ? CallHookProc(((HOOKDATA*)PTR_SEG_TO_LIN(hhook))->proc,\
+                            code, wparam, lparam) : 0)
 
 #define CALL_SYSTEM_HOOK(id,code,wparam,lparam) \
     INTERNAL_CALL_HOOK(SYSTEM_HOOK(id),code,wparam,lparam)
diff --git a/include/if1632.h b/include/if1632.h
index 1cf7637..03621a6 100644
--- a/include/if1632.h
+++ b/include/if1632.h
@@ -8,7 +8,6 @@
 extern int CallTo16cx(unsigned long csip, unsigned long dscx);
 extern int CallToDllEntry(unsigned long csip, unsigned long dscx, unsigned short di);
 extern int CallBack16(void *func, int n_args, ...);
-extern void *CALLBACK_MakeProcInstance(void *func, int instance);
 extern void CallLineDDAProc(FARPROC func, short xPos, short yPos, long lParam);
 extern void winestat(void);
 extern int DLLRelay(unsigned int func_num, unsigned int seg_off);
diff --git a/include/instance.h b/include/instance.h
new file mode 100644
index 0000000..95dde0e
--- /dev/null
+++ b/include/instance.h
@@ -0,0 +1,26 @@
+/*
+ * Instance data declaration
+ *
+ * Copyright 1995 Alexandre Julliard
+ */
+
+#ifndef __WINE_INSTANCE_H
+#define __WINE_INSTANCE_H
+
+#include "wintypes.h"
+
+  /* This structure is always located at offset 0 of the DGROUP segment */
+
+typedef struct
+{
+    WORD null;        /* Always 0 */
+    WORD old_sp;      /* Stack pointer; used by SwitchTaskTo() */
+    WORD old_ss;      /* Stack segment; used by SwitchTaskTo() */
+    WORD heap;        /* Pointer to the local heap information (if any) */
+    WORD atomtable;   /* Pointer to the local atom table (if any) */ 
+    WORD stacktop;    /* Top of the stack */
+    WORD stackmin;    /* Lowest stack address used so far */
+    WORD stackbottom; /* Bottom of the stack */
+} INSTANCEDATA;
+
+#endif /* __WINE_INSTANCE_H */
diff --git a/include/ldt.h b/include/ldt.h
new file mode 100644
index 0000000..6fa19aa
--- /dev/null
+++ b/include/ldt.h
@@ -0,0 +1,62 @@
+/*
+ * LDT copy
+ *
+ * Copyright 1995 Alexandre Julliard
+ */
+
+#ifndef _WINE_LDT_H
+#define _WINE_LDT_H
+
+enum seg_type
+{
+    SEGMENT_DATA  = 0,
+    SEGMENT_STACK = 1,
+    SEGMENT_CODE  = 2
+};
+
+  /* This structure represents a real LDT entry.        */
+  /* It is used by get_ldt_entry() and set_ldt_entry(). */
+typedef struct
+{
+    unsigned long base;            /* base address */
+    unsigned long limit;           /* segment limit */
+    int           seg_32bit;       /* is segment 32-bit? */
+    int           read_only;       /* is segment read-only? */
+    int           limit_in_pages;  /* is the limit in pages or bytes? */
+    enum seg_type type;            /* segment type */
+} ldt_entry;
+
+extern int LDT_GetEntry( int entry, ldt_entry *content );
+extern int LDT_SetEntry( int entry, ldt_entry *content );
+extern void LDT_Print();
+
+
+  /* This structure is used to build the local copy of the LDT. */
+typedef struct
+{
+    unsigned long base;    /* base address or 0 if entry is free   */
+    unsigned long limit;   /* limit in bytes or 0 if entry is free */
+} ldt_copy_entry;
+
+#define LDT_SIZE  8192
+
+extern ldt_copy_entry ldt_copy[LDT_SIZE];
+
+#define __AHSHIFT  3
+#define __AHINCR   (1 << __AHSHIFT)
+
+#define SELECTOR_TO_ENTRY(sel)  ((int)(sel) >> __AHSHIFT)
+#define ENTRY_TO_SELECTOR(i)    ((i) ? (((int)(i) << __AHSHIFT) | 7) : 0)
+#define IS_LDT_ENTRY_FREE(i)    (!(ldt_copy[(i)].base || ldt_copy[(i)].limit))
+#define IS_SELECTOR_FREE(sel)   (IS_LDT_ENTRY_FREE(SELECTOR_TO_ENTRY(sel)))
+#define GET_SEL_BASE(sel)       (ldt_copy[SELECTOR_TO_ENTRY(sel)].base)
+#define GET_SEL_LIMIT(sel)      (ldt_copy[SELECTOR_TO_ENTRY(sel)].limit)
+
+  /* Convert a segmented ptr (16:16) to a linear (32) pointer */
+#define PTR_SEG_TO_LIN(ptr) \
+           ((void*)(GET_SEL_BASE((int)(ptr) >> 16) + ((int)(ptr) & 0xffff)))
+
+#define PTR_SEG_OFF_TO_LIN(seg,off) \
+           ((void*)(GET_SEL_BASE(seg) + ((int)(off) & 0xffff)))
+
+#endif  /* _WINE_LDT_H */
diff --git a/include/listbox.h b/include/listbox.h
index 1e56b7f..c1b2278 100644
--- a/include/listbox.h
+++ b/include/listbox.h
@@ -30,7 +30,7 @@
 	HWND	hWndLogicParent;
 	HFONT	hFont;
 	BOOL	bRedrawFlag;
-	MDESC	*Heap;
+/*	MDESC	*Heap; */
 } HEADLIST;
 typedef HEADLIST FAR* LPHEADLIST;
 
diff --git a/include/local.h b/include/local.h
new file mode 100644
index 0000000..eb813e9
--- /dev/null
+++ b/include/local.h
@@ -0,0 +1,24 @@
+/*
+ * Local heap declarations
+ *
+ * Copyright 1995 Alexandre Julliard
+ */
+
+#ifndef __WINE_HEAP_H
+#define __WINE_HEAP_H
+
+#include "wintypes.h"
+
+  /* These function are equivalent to the Local* API functions, */
+  /* excepted that they need DS as the first parameter. This    */
+  /* allows managing several heaps from the emulation library.  */
+
+extern HLOCAL LOCAL_Alloc( WORD ds, WORD flags, WORD size );
+extern HLOCAL LOCAL_ReAlloc( WORD ds, HLOCAL handle, WORD size, WORD flags );
+extern HLOCAL LOCAL_Free( WORD ds, HLOCAL handle );
+extern HLOCAL LOCAL_Handle( WORD ds, WORD addr );
+extern WORD LOCAL_Size( WORD ds, HLOCAL handle );
+extern WORD LOCAL_Flags( WORD ds, HLOCAL handle );
+extern WORD LOCAL_HeapSize( WORD ds );
+
+#endif  /* __WINE_HEAP_H */
diff --git a/include/message.h b/include/message.h
index b634227..c8a1429 100644
--- a/include/message.h
+++ b/include/message.h
@@ -54,7 +54,7 @@
 extern void hardware_event( WORD message, WORD wParam, LONG lParam,
 			    int xPos, int yPos, DWORD time, DWORD extraInfo );
 extern BOOL MSG_GetHardwareMessage( LPMSG msg );
-extern BOOL MSG_InternalGetMessage( LPMSG msg, HWND hwnd, HWND hwndOwner,
+extern BOOL MSG_InternalGetMessage( SEGPTR msg, HWND hwnd, HWND hwndOwner,
 				    short code, WORD flags, BOOL sendIdle );
 
 #endif  /* MESSAGE_H */
diff --git a/include/msdos.h b/include/msdos.h
index 31bf3fb..35b8d92 100644
--- a/include/msdos.h
+++ b/include/msdos.h
@@ -15,6 +15,7 @@
 	char search_attribute;
 	long filesize;
 	long filetime;
+        short entnum;           /* Directory entry number */
 };
 
 struct fcb {
@@ -29,16 +30,13 @@
 	BYTE dummy2[9];
 };
 
-#define DOSVERSION 0x0330;
+#define DOSVERSION 0x0500;      /* Might as well pretend we're DOS 5.0 */
 #define MAX_DOS_DRIVES	26
 
 extern WORD ExtendedError;
 extern struct DosDeviceStruct COM[MAX_PORTS];
 extern struct DosDeviceStruct LPT[MAX_PORTS];
 
-#define segment(a) 	((DWORD)(a) >> 16)
-#define offset(a)	((DWORD)(a) & 0xffff)
-
 #define setword(a,b)	*(BYTE*)(a)	  = (b) & 0xff; \
 			*((BYTE*)((a)+1)) = ((b)>>8) & 0xff;
 			
diff --git a/include/neexe.h b/include/neexe.h
index d31a0e3..ad26cbe 100644
--- a/include/neexe.h
+++ b/include/neexe.h
@@ -133,11 +133,7 @@
 #define NE_RELTYPE_ORDINAL	1
 #define NE_RELTYPE_NAME		2
 #define NE_RELTYPE_OSFIXUP	3
-/* Used by Windows 3.0 programs, like when getting selector to be
-   given to makeprocinst */
-#define NE_RELTYPE_INT1		4
-#define NE_RELTYPE_ORDINALADD	5
-#define NE_RELTYPE_NAMEADD	6
+#define NE_RELFLAG_ADDITIVE	4
 
 /*
  * DOS PSP
diff --git a/include/options.h b/include/options.h
index 317f9c1..095fa88 100644
--- a/include/options.h
+++ b/include/options.h
@@ -17,6 +17,8 @@
     int    backingstore;    /* Use backing store */
     short  cmdShow;
     int    debug;
+    int    allowReadOnly;   /* Opening a read only file will succeed even
+			       if write access is requested */
 };
 
 extern struct options Options;
diff --git a/include/prototypes.h b/include/prototypes.h
index d50a2db..9fa03da 100644
--- a/include/prototypes.h
+++ b/include/prototypes.h
@@ -9,22 +9,11 @@
 #include <sys/types.h>
 
 #include "neexe.h"
-#include "segmem.h"
-#include "heap.h"
 #include "msdos.h"
 #include "windows.h"
 
 #ifndef WINELIB
 
-/* loader/ldtlib.c */
-
-struct segment_descriptor *
-make_sd(unsigned base, unsigned limit, int contents, int read_exec_only, int seg32, int inpgs);
-int get_ldt(void *buffer);
-int set_ldt_entry(int entry, unsigned long base, unsigned int limit,
-	      int seg_32bit_flag, int contents, int read_only_flag,
-	      int limit_in_pages_flag);
-
 /* loader/resource.c */
 
 extern HBITMAP ConvertCoreBitmap( HDC hdc, BITMAPCOREHEADER * image );
@@ -44,11 +33,6 @@
 extern int _WinMain(int argc, char **argv);
 extern void InitializeLoadedDLLs();
 
-extern int KERNEL_LockSegment(int segment);
-extern int KERNEL_UnlockSegment(int segment);
-extern void KERNEL_InitTask(void);
-extern int KERNEL_WaitEvent(int task);
-
 /* misc/spy.c */
 
 extern void SpyInit(void);
@@ -57,9 +41,5 @@
 
 extern BOOL WIDGETS_Init(void);
 
-/* windows/dce.c */
-
-extern void DCE_Init(void);
-
 #endif /* WINELIB */
 #endif /* _WINE_PROTOTYPES_H */
diff --git a/include/regfunc.h b/include/regfunc.h
index 913ca86..fa91700 100644
--- a/include/regfunc.h
+++ b/include/regfunc.h
@@ -7,13 +7,11 @@
 #include "wine.h"
 #include "stackframe.h"
 
-#define _CONTEXT ((struct sigcontext_struct *) pStack16Frame->args)
+#define _CONTEXT ((struct sigcontext_struct *) CURRENT_STACK16->args)
 #define _AX	(_CONTEXT->sc_eax)
 #define _BX	(_CONTEXT->sc_ebx)
 #define _CX	(_CONTEXT->sc_ecx)
 #define _DX	(_CONTEXT->sc_edx)
-#define _SP	(_CONTEXT->sc_esp)
-#define _BP	(_CONTEXT->sc_ebp)
 #define _SI	(_CONTEXT->sc_esi)
 #define _DI	(_CONTEXT->sc_edi)
 #define _DS	(_CONTEXT->sc_ds)
diff --git a/include/segmem.h b/include/segmem.h
deleted file mode 100644
index 583adc9..0000000
--- a/include/segmem.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* $Id: segmem.h,v 1.3 1993/07/04 04:04:21 root Exp root $
- */
-/*
- * Copyright  Robert J. Amstadt, 1993
- */
-#ifndef SEGMEM_H
-#define SEGMEM_H
-
-#include "wine.h"
-
-#ifdef __linux__
-#define HAVE_IPC
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#endif
-
-#if defined(__NetBSD__) || defined(__FreeBSD__)
-#define HAVE_IPC
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#define SHMSEG 32     /* XXX SEMMNI /usr/src/sys/conf/param.h */
-#define SHM_RANGE_START       0x40000000
-#endif
-
-/*
- * Array to track selector allocation.
- */
-#define SELECTOR_ISFREE		0x8000
-#define SELECTOR_IS32BIT        0x4000
-#define SELECTOR_INDEXMASK	0x0fff
-
-#define __AHSHIFT 3
-#define __AHINCR  (1 << __AHSHIFT)
-
-extern unsigned short* SelectorMap;
-
-#ifdef HAVE_IPC
-#define SAFEMAKEPTR(s, o) ((void *)(((int) (s) << 16) | ((o) & 0xffff)))
-#define FIXPTR(p)	  (p)
-#else
-#define SAFEMAKEPTR(s, o) \
-  ((void*)(((int)SelectorMap[SelectorMap[(s)>>__AHSHIFT] & SELECTOR_INDEXMASK]\
-	    << (16 + __AHSHIFT)) | 0x70000 | ((o) & 0xffff)))
-#define FIXPTR(p)	  SAFEMAKEPTR((unsigned long) (p) >> 16, (p))
-#endif
-
-#define MAKESELECTOR(fp) ((unsigned short) (fp >> (16 + __AHSHIFT)))
- 
-
-/*
- * Structure to hold info about each selector we create.
- */
-
-typedef struct segment_descriptor_s
-{
-    void          *base_addr;	/* Pointer to segment in flat memory	*/
-    unsigned int   length;	/* Length of segment			*/
-    unsigned int   flags;	/* Segment flags (see neexe.h and below)*/
-    unsigned short selector;	/* Selector used to access this segment */
-    unsigned short owner;	/* Handle of owner program		*/
-    unsigned char  type;	/* DATA or CODE				*/
-#ifdef HAVE_IPC
-    key_t	   shm_key;	/* Shared memory key or -1              */
-#endif
-} SEGDESC;
-
-extern int IPCCopySelector(int i_old, unsigned long new, int swap_type);
-
-/*
- * Additional flags
- */
-#define NE_SEGFLAGS_MALLOCED	0x00010000 /* Memory allocated with malloc() */
-
-/*
- * Global memory flags
- */
-#define GLOBAL_FLAGS_MOVEABLE		0x0002
-#define GLOBAL_FLAGS_ZEROINIT		0x0040
-#define GLOBAL_FLAGS_CODE		0x00010000
-#define GLOBAL_FLAGS_EXECUTEONLY	0x00020000
-#define GLOBAL_FLAGS_READONLY		0x00020000
-
-#ifdef __ELF__
-#define FIRST_SELECTOR 2
-#define IS_16_BIT_ADDRESS(addr)  \
-  (!(SelectorMap[(unsigned int)(addr) >> (16+__AHSHIFT)]& SELECTOR_IS32BIT))
-#else
-#define FIRST_SELECTOR	8
-#define IS_16_BIT_ADDRESS(addr)  \
-     ((unsigned int)(addr) >= (((FIRST_SELECTOR << __AHSHIFT) | 7) << 16))
-#endif
-
-
-extern SEGDESC* Segments;
-
-#endif /* SEGMEM_H */
diff --git a/include/selectors.h b/include/selectors.h
index 7724f5c..55715b9 100644
--- a/include/selectors.h
+++ b/include/selectors.h
@@ -1,25 +1,28 @@
+/*
+ * Selector definitions
+ *
+ * Copyright 1995 Alexandre Julliard
+ */
+
 #ifndef __WINE_SELECTORS_H
 #define __WINE_SELECTORS_H
 
-#include "dlls.h"
-#include "segmem.h"
 #include "windows.h"
+#include "ldt.h"
 
-extern int FindUnusedSelectors(int n_selectors);
-extern int IPCCopySelector(int i_old, unsigned long new, int swap_type);
-extern WORD AllocSelector(WORD old_selector);
-extern unsigned int PrestoChangoSelector(unsigned src_selector, unsigned dst_selector);
-extern WORD AllocDStoCSAlias(WORD ds_selector);
-extern SEGDESC *CreateSelectors(struct  w_files * wpnt);
-extern WORD FreeSelector(WORD sel);
+extern WORD SELECTOR_AllocBlock( void *base, DWORD size, enum seg_type type,
+                                 BOOL is32bit, BOOL readonly );
+extern WORD SELECTOR_ReallocBlock( WORD sel, void *base, DWORD size,
+                                   enum seg_type type, BOOL is32bit,
+                                   BOOL readonly );
 
-extern SEGDESC *CreateNewSegments(int code_flag, int read_only, int length, 
-					int n_segments);
-extern SEGDESC *GetNextSegment(unsigned int flags, unsigned int limit);
+#include "dlls.h"
 
-extern unsigned int GetEntryDLLName(char *dll_name, char *function, int *sel,
+extern WORD *CreateSelectors( struct w_files * wpnt );
+
+extern unsigned int GetEntryDLLName(char *dll_name, char *function, WORD *sel,
 					int *addr);
-extern unsigned int GetEntryDLLOrdinal(char *dll_name, int ordinal, int *sel,
+extern unsigned int GetEntryDLLOrdinal(char *dll_name, int ordinal, WORD *sel,
 					int *addr);
 extern unsigned int GetEntryPointFromOrdinal(struct w_files * wpnt, 
 					int ordinal);
diff --git a/include/stackframe.h b/include/stackframe.h
index 9c008d7..d029ec1 100644
--- a/include/stackframe.h
+++ b/include/stackframe.h
@@ -8,13 +8,13 @@
 #define WINE_STACKFRAME_H
 
 #include <windows.h>
+#include "ldt.h"
 
 typedef struct
 {
     WORD    saved_ss;
     WORD    saved_bp;
     WORD    saved_sp;
-    WORD    es;
     WORD    ds;
     WORD    bp;
     WORD    arg_length;
@@ -23,7 +23,13 @@
     WORD    args[1];
 } STACK16FRAME;
 
+extern WORD IF1632_Saved16_ss;
+extern WORD IF1632_Saved16_sp;
+extern WORD IF1632_Saved16_bp;
 
-extern STACK16FRAME *pStack16Frame;
+#define CURRENT_STACK16 \
+    ((STACK16FRAME *)PTR_SEG_OFF_TO_LIN(IF1632_Saved16_ss,IF1632_Saved16_sp))
+
+#define CURRENT_DS   (CURRENT_STACK16->ds)
 
 #endif /* WINE_STACKFRAME_H */
diff --git a/include/stddebug.h b/include/stddebug.h
index e9d74ce..4abb78e 100644
--- a/include/stddebug.h
+++ b/include/stddebug.h
@@ -102,6 +102,7 @@
 #undef DEBUG_FIXUP
 #undef DEBUG_FONT
 #undef DEBUG_GDI
+#undef DEBUG_GLOBAL
 #undef DEBUG_GRAPHICS
 #undef DEBUG_HEAP
 #undef DEBUG_ICON
@@ -110,6 +111,7 @@
 #undef DEBUG_KEYBOARD
 #undef DEBUG_LDT
 #undef DEBUG_LISTBOX
+#undef DEBUG_LOCAL
 #undef DEBUG_MALLOC
 #undef DEBUG_MCI
 #undef DEBUG_MCIANIM
@@ -135,6 +137,7 @@
 #undef DEBUG_RELAY
 #undef DEBUG_RESOURCE
 #undef DEBUG_SCROLL
+#undef DEBUG_SELECTOR
 #undef DEBUG_SELECTORS
 #undef DEBUG_STACK
 #undef DEBUG_STRESS
@@ -142,6 +145,7 @@
 #undef DEBUG_TASK
 #undef DEBUG_TEXT
 #undef DEBUG_TIMER
+#undef DEBUG_TOOLHELP
 #undef DEBUG_UTILITY
 #undef DEBUG_WIN
 #undef DEBUG_WINSOCK
@@ -174,6 +178,7 @@
 #define DEBUG_FIXUP
 #define DEBUG_FONT
 #define DEBUG_GDI
+#define DEBUG_GLOBAL
 #define DEBUG_GRAPHICS
 #define DEBUG_HEAP
 #define DEBUG_ICON
@@ -182,6 +187,7 @@
 #define DEBUG_KEYBOARD
 #define DEBUG_LDT
 #define DEBUG_LISTBOX
+#define DEBUG_LOCAL
 #define DEBUG_MALLOC
 #define DEBUG_MCI
 #define DEBUG_MCIANIM
@@ -207,6 +213,7 @@
 #define DEBUG_RELAY
 #define DEBUG_RESOURCE
 #define DEBUG_SCROLL
+#define DEBUG_SELECTOR
 #define DEBUG_SELECTORS
 #define DEBUG_STACK
 #define DEBUG_STRESS
@@ -214,6 +221,7 @@
 #define DEBUG_TASK
 #define DEBUG_TEXT
 #define DEBUG_TIMER
+#define DEBUG_TOOLHELP
 #define DEBUG_UTILITY
 #define DEBUG_WIN
 #define DEBUG_WINSOCK
diff --git a/include/toolhelp.h b/include/toolhelp.h
index 40d7d9b..85ab7b3 100644
--- a/include/toolhelp.h
+++ b/include/toolhelp.h
@@ -3,14 +3,93 @@
 
 #include "windows.h"
 
-DECLARE_HANDLE(HMODULE);
-DECLARE_HANDLE(HGLOBAL);
-
 #define MAX_DATA	11
 #define MAX_MODULE_NAME	9
 #define MAX_PATH	255
 #define MAX_CLASSNAME	255
 
+/* Global heap */
+
+WORD GlobalHandleToSel( HANDLE handle );
+
+
+/* Local heap */
+
+typedef struct
+{
+    DWORD   dwSize;
+    WORD    wcItems;
+} LOCALINFO;
+
+typedef struct
+{
+    DWORD   dwSize;
+    HLOCAL  hHandle;
+    WORD    wAddress;
+    WORD    wSize;
+    WORD    wFlags;
+    WORD    wcLock;
+    WORD    wType;
+    WORD    hHeap;
+    WORD    wHeapType;
+    WORD    wNext;
+} LOCALENTRY;
+
+/* wHeapType values */
+#define NORMAL_HEAP     0
+#define USER_HEAP       1
+#define GDI_HEAP        2
+
+/* wFlags values */
+#define LF_FIXED        1
+#define LF_FREE         2
+#define LF_MOVEABLE     4
+
+/* wType values */
+#define LT_NORMAL                   0
+#define LT_FREE                     0xff
+#define LT_GDI_PEN                  1   /* LT_GDI_* is for GDI's heap */
+#define LT_GDI_BRUSH                2
+#define LT_GDI_FONT                 3
+#define LT_GDI_PALETTE              4
+#define LT_GDI_BITMAP               5
+#define LT_GDI_RGN                  6
+#define LT_GDI_DC                   7
+#define LT_GDI_DISABLED_DC          8
+#define LT_GDI_METADC               9
+#define LT_GDI_METAFILE             10
+#define LT_GDI_MAX                  LT_GDI_METAFILE
+#define LT_USER_CLASS               1   /* LT_USER_* is for USER's heap */
+#define LT_USER_WND                 2
+#define LT_USER_STRING              3
+#define LT_USER_MENU                4
+#define LT_USER_CLIP                5
+#define LT_USER_CBOX                6
+#define LT_USER_PALETTE             7
+#define LT_USER_ED                  8
+#define LT_USER_BWL                 9
+#define LT_USER_OWNERDRAW           10
+#define LT_USER_SPB                 11
+#define LT_USER_CHECKPOINT          12
+#define LT_USER_DCE                 13
+#define LT_USER_MWP                 14
+#define LT_USER_PROP                15
+#define LT_USER_LBIV                16
+#define LT_USER_MISC                17
+#define LT_USER_ATOMS               18
+#define LT_USER_LOCKINPUTSTATE      19
+#define LT_USER_HOOKLIST            20
+#define LT_USER_USERSEEUSERDOALLOC  21
+#define LT_USER_HOTKEYLIST          22
+#define LT_USER_POPUPMENU           23
+#define LT_USER_HANDLETABLE         32
+#define LT_USER_MAX                 LT_USER_HANDLETABLE
+
+BOOL LocalInfo( LOCALINFO *pLocalInfo, HGLOBAL handle );
+BOOL LocalFirst( LOCALENTRY *pLocalEntry, HGLOBAL handle );
+BOOL LocalNext( LOCALENTRY *pLocalEntry );
+
+
 /* modules */
 
 typedef struct {
@@ -73,16 +152,37 @@
 } MEMMANINFO;
 typedef MEMMANINFO *LPMEMMANINFO;
 
-typedef struct tagSYSHEAPINFO {
-	DWORD dwSize;
-	WORD wUserFreePercent;
-	WORD wGDIFreePercent;
-	HGLOBAL hUserSegment;
-	HGLOBAL hGDISegment;
+typedef struct
+{
+    DWORD   dwSize;
+    WORD    wUserFreePercent;
+    WORD    wGDIFreePercent;
+    HGLOBAL hUserSegment;
+    HGLOBAL hGDISegment;
 } SYSHEAPINFO;
-typedef SYSHEAPINFO *LPSYSHEAPINFO;
 
 BOOL MemManInfo(LPMEMMANINFO lpEnhMode);
-BOOL SystemHeapInfo(LPSYSHEAPINFO lpSysHeap);
+BOOL SystemHeapInfo( SYSHEAPINFO *pHeapInfo );
+
+
+/* Window classes */
+
+typedef struct
+{
+    DWORD     dwSize;
+    HMODULE   hInst;              /* This is really an hModule */
+    char      szClassName[MAX_CLASSNAME + 1];
+    WORD      wNext;
+} CLASSENTRY;
+
+BOOL ClassFirst( CLASSENTRY *pClassEntry );
+BOOL ClassNext( CLASSENTRY *pClassEntry );
+
+
+/* Memory read/write */
+
+DWORD MemoryRead( WORD sel, DWORD offset, void *buffer, DWORD count );
+DWORD MemoryWrite( WORD sel, DWORD offset, void *buffer, DWORD count );
+
 
 #endif /* __TOOLHELP_H */
diff --git a/include/user.h b/include/user.h
index 990428c..af0ecdf 100644
--- a/include/user.h
+++ b/include/user.h
@@ -7,8 +7,8 @@
 #ifndef USER_H
 #define USER_H
 
-#include "segmem.h"
-#include "heap.h"
+#include "ldt.h"
+#include "local.h"
 
 /* USER local heap */
 
@@ -16,18 +16,24 @@
 
 #define USER_HEAP_ALLOC(f,size) LocalAlloc (f, size)
 #define USER_HEAP_REALLOC(handle,size,f) LocalReAlloc (handle,size,f)
-#define USER_HEAP_ADDR(handle) LocalLock (handle)
+#define USER_HEAP_LIN_ADDR(handle) LocalLock (handle)
+#define USER_HEAP_SEG_ADDR(handle) LocalLock (handle)
 #define USER_HEAP_FREE(handle) LocalFree (handle)
 #else
 
-extern MDESC *USER_Heap;
+extern LPSTR USER_Heap;
+extern WORD USER_HeapSel;
 
-#define USER_HEAP_ALLOC(f,size) ((int)HEAP_Alloc(&USER_Heap,f,size) & 0xffff)
-#define USER_HEAP_REALLOC(handle,size,f) ((int)HEAP_ReAlloc(&USER_Heap, \
-				       USER_HEAP_ADDR(handle),size,f) & 0xffff)
-#define USER_HEAP_FREE(handle) (HEAP_Free(&USER_Heap,USER_HEAP_ADDR(handle)))
-#define USER_HEAP_ADDR(handle) \
-    ((void *)((handle) ? ((handle) | ((int)USER_Heap & 0xffff0000)) : 0))
+#define USER_HEAP_ALLOC(size) \
+            LOCAL_Alloc( USER_HeapSel, LMEM_FIXED, (size) )
+#define USER_HEAP_REALLOC(handle,size) \
+            LOCAL_ReAlloc( USER_HeapSel, (handle), (size), LMEM_FIXED )
+#define USER_HEAP_FREE(handle) \
+            LOCAL_Free( USER_HeapSel, (handle) )
+#define USER_HEAP_LIN_ADDR(handle)  \
+            ((handle) ? PTR_SEG_OFF_TO_LIN(USER_HeapSel, (handle)) : NULL)
+#define USER_HEAP_SEG_ADDR(handle)  \
+            ((handle) ? MAKELONG((handle), USER_HeapSel) : 0)
 
 #endif  /* WINELIB */
 
diff --git a/include/win.h b/include/win.h
index c33e722..e9cbb90 100644
--- a/include/win.h
+++ b/include/win.h
@@ -9,6 +9,7 @@
 
 #include <X11/Xlib.h>
 
+#include "ldt.h"
 #include "class.h"
 
 #define WND_MAGIC     0x444e4957  /* 'WIND' */
diff --git a/include/windows.h b/include/windows.h
index 088d0fa..5ff1c25 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -1211,6 +1211,12 @@
 #define SPIF_UPDATEINIFILE		1
 #define SPIF_SENDWININICHANGE		2
 
+/* GetFreeSystemResources() parameters */
+
+#define GFSR_SYSTEMRESOURCES   0x0000
+#define GFSR_GDIRESOURCES      0x0001
+#define GFSR_USERRESOURCES     0x0002
+
 /* GetWinFlags */
 
 #define WF_PMODE 	0x0001
@@ -1229,25 +1235,25 @@
 #define	WF_PAGING	0x0800
 #define	WF_WLO          0x8000
 
-#define MAKEINTRESOURCE(i) (LPSTR)((DWORD)((WORD)(i)))
+#define MAKEINTRESOURCE(i) (SEGPTR)((DWORD)((WORD)(i)))
 
-#define IDI_APPLICATION MAKEINTRESOURCE(32512)
-#define IDI_HAND MAKEINTRESOURCE(32513)
-#define IDI_QUESTION MAKEINTRESOURCE(32514)
-#define IDI_EXCLAMATION MAKEINTRESOURCE(32515)
-#define IDI_ASTERISK MAKEINTRESOURCE(32516)
+#define IDI_APPLICATION  MAKEINTRESOURCE(32512)
+#define IDI_HAND         MAKEINTRESOURCE(32513)
+#define IDI_QUESTION     MAKEINTRESOURCE(32514)
+#define IDI_EXCLAMATION  MAKEINTRESOURCE(32515)
+#define IDI_ASTERISK     MAKEINTRESOURCE(32516)
 
-#define IDC_ARROW MAKEINTRESOURCE(32512)
-#define IDC_IBEAM MAKEINTRESOURCE(32513)
-#define IDC_WAIT MAKEINTRESOURCE(32514)
-#define IDC_CROSS MAKEINTRESOURCE(32515)
-#define IDC_UPARROW MAKEINTRESOURCE(32516)
-#define IDC_SIZE MAKEINTRESOURCE(32540)
-#define IDC_ICON MAKEINTRESOURCE(32541)
-#define IDC_SIZENWSE MAKEINTRESOURCE(32542)
-#define IDC_SIZENESW MAKEINTRESOURCE(32543)
-#define IDC_SIZEWE MAKEINTRESOURCE(32544)
-#define IDC_SIZENS MAKEINTRESOURCE(32545)
+#define IDC_ARROW        MAKEINTRESOURCE(32512)
+#define IDC_IBEAM        MAKEINTRESOURCE(32513)
+#define IDC_WAIT         MAKEINTRESOURCE(32514)
+#define IDC_CROSS        MAKEINTRESOURCE(32515)
+#define IDC_UPARROW      MAKEINTRESOURCE(32516)
+#define IDC_SIZE         MAKEINTRESOURCE(32540)
+#define IDC_ICON         MAKEINTRESOURCE(32541)
+#define IDC_SIZENWSE     MAKEINTRESOURCE(32542)
+#define IDC_SIZENESW     MAKEINTRESOURCE(32543)
+#define IDC_SIZEWE       MAKEINTRESOURCE(32544)
+#define IDC_SIZENS       MAKEINTRESOURCE(32545)
 
 /* OEM Resource Ordinal Numbers */
 #define OBM_CLOSE           32754
@@ -2315,8 +2321,8 @@
 F(LONG,GetVersion)
 F(LONG,GetWinFlags)
 F(LPINT,GetThresholdEvent)
-F(LPSTR,GetDOSEnvironment)
 F(LPSTR,ValidateFreeSpaces)
+F(SEGPTR,GetDOSEnvironment)
 F(WORD,GetCaretBlinkTime)
 F(WORD,GetCurrentPDB)
 F(WORD,GetDoubleClickTime)
@@ -2361,7 +2367,9 @@
 Fa(BOOL,EndDeferWindowPos,HDWP,hWinPosInfo)
 Fa(BOOL,FreeModule,HANDLE,a)
 Fa(BOOL,FreeResource,HANDLE,a)
-Fa(BOOL,InitAtomTable,WORD,a)
+Fa(BOOL,GlobalUnWire,HGLOBAL,a)
+Fa(BOOL,GlobalUnlock,HGLOBAL,a)
+Fa(BOOL,IsBadCodePtr,SEGPTR,a)
 Fa(BOOL,IsCharAlpha,char,ch)
 Fa(BOOL,IsCharAlphaNumeric,char,ch)
 Fa(BOOL,IsCharLower,char,ch)
@@ -2395,10 +2403,15 @@
 Fa(DWORD,GetCurrentPosition,HDC,a)
 Fa(DWORD,GetDCOrg,HDC,a)
 Fa(DWORD,GetFreeSpace,WORD,a)
+Fa(DWORD,GetHeapSpaces,HMODULE,a)
 Fa(DWORD,GetViewportExt,HDC,a)
 Fa(DWORD,GetViewportOrg,HDC,a)
 Fa(DWORD,GetWindowExt,HDC,a)
 Fa(DWORD,GetWindowOrg,HDC,a)
+Fa(DWORD,GlobalCompact,DWORD,a)
+Fa(DWORD,GlobalDOSAlloc,DWORD,a)
+Fa(DWORD,GlobalHandle,WORD,a)
+Fa(DWORD,GlobalSize,HGLOBAL,a)
 Fa(DWORD,OemKeyScan,WORD,a)
 Fa(FARPROC,LocalNotify,FARPROC,a)
 Fa(HANDLE,CreateMetaFile,LPSTR,a)
@@ -2413,9 +2426,7 @@
 Fa(HANDLE,LoadLibrary,LPSTR,a)
 Fa(HANDLE,LocalFree,HANDLE,a)
 Fa(HANDLE,LocalHandle,WORD,a)
-Fa(HANDLE,LockSegment,WORD,a)
 Fa(HANDLE,SetMetaFileBits,HANDLE,a)
-Fa(HANDLE,UnlockSegment,WORD,a)
 Fa(HBITMAP,CreateBitmapIndirect,BITMAP FAR*,a)
 Fa(HBRUSH,CreateBrushIndirect,LOGBRUSH FAR*,a)
 Fa(HBRUSH,CreatePatternBrush,HBITMAP,a)
@@ -2427,6 +2438,10 @@
 Fa(HDC,GetWindowDC,HWND,a)
 Fa(HDWP,BeginDeferWindowPos,INT,nNumWindows)
 Fa(HFONT,CreateFontIndirect,LOGFONT FAR*,a)
+Fa(HGLOBAL,GlobalFree,HGLOBAL,a)
+Fa(HGLOBAL,GlobalLRUNewest,HGLOBAL,a)
+Fa(HGLOBAL,GlobalLRUOldest,HGLOBAL,a)
+Fa(HGLOBAL,LockSegment,HGLOBAL,a)
 Fa(HMENU,GetMenu,HWND,a)
 Fa(HMENU,LoadMenuIndirect,LPSTR,a)
 Fa(HMETAFILE,CloseMetaFile,HANDLE,a)
@@ -2451,13 +2466,17 @@
 Fa(LONG,DispatchMessage,LPMSG,msg)
 Fa(LONG,SetSwapAreaSize,WORD,a)
 Fa(LPSTR,AnsiLower,LPSTR,a)
-Fa(LPSTR,AnsiNext,LPSTR,a)
+Fa(SEGPTR,AnsiNext,SEGPTR,a)
 Fa(LPSTR,AnsiUpper,LPSTR,a)
+Fa(LPSTR,GlobalLock,HGLOBAL,a)
+Fa(LPSTR,GlobalWire,HGLOBAL,a)
 Fa(LPSTR,LockResource,HANDLE,a)
+Fa(SEGPTR,WIN16_GlobalLock,HGLOBAL,a)
 Fa(UINT,GDIRealizePalette,HDC,a)
 Fa(UINT,RealizePalette,HDC,a)
 Fa(WORD,AllocDStoCSAlias,WORD,a)
 Fa(WORD,AllocSelector,WORD,a)
+Fa(WORD,AllocSelectorArray,WORD,a)
 Fa(WORD,ArrangeIconicWindows,HWND,a)
 Fa(WORD,EnumClipboardFormats,WORD,a)
 Fa(WORD,FreeSelector,WORD,a)
@@ -2471,15 +2490,20 @@
 Fa(WORD,GetStretchBltMode,HDC,a)
 Fa(WORD,GetTaskQueue,HANDLE,a)
 Fa(WORD,GetTextAlign,HDC,a)
+Fa(WORD,GlobalDOSFree,WORD,a)
+Fa(WORD,GlobalFlags,HGLOBAL,a)
+Fa(WORD,GlobalPageLock,HGLOBAL,a)
+Fa(WORD,GlobalPageUnlock,HGLOBAL,a)
+Fa(WORD,InitAtomTable,WORD,a)
 Fa(WORD,LocalCompact,WORD,a)
-Fa(WORD,LocalFlags,HANDLE,a)
-Fa(WORD,LocalSize,HANDLE,a)
+Fa(WORD,LocalFlags,HLOCAL,a)
+Fa(WORD,LocalLock,HLOCAL,a)
+Fa(WORD,LocalSize,HLOCAL,a)
 Fa(WORD,RealizeDefaultPalette,HDC,a)
 Fa(WORD,RegisterClipboardFormat,LPCSTR,a)
 Fa(WORD,RegisterWindowMessage,LPCSTR,a)
 Fa(WORD,SetHandleCount,WORD,a)
 Fa(WORD,VkKeyScan,WORD,a)
-Fa(char NEAR*,LocalLock,HANDLE,a)
 Fa(int,AddFontResource,LPSTR,a)
 Fa(int,Catch,LPCATCHBUF,a)
 Fa(int,ClearCommBreak,int,a)
@@ -2509,6 +2533,9 @@
 Fa(void,GetCaretPos,LPPOINT,a)
 Fa(void,GetCursorPos,LPPOINT,a)
 Fa(void,GetKeyboardState,BYTE FAR*,a)
+Fa(void,GlobalFix,HGLOBAL,a)
+Fa(void,GlobalNotify,FARPROC,a)
+Fa(void,GlobalUnfix,HGLOBAL,a)
 Fa(void,HideCaret,HWND,a)
 Fa(void,LimitEmsPages,DWORD,a)
 Fa(void,MessageBeep,WORD,a)
@@ -2522,8 +2549,9 @@
 Fa(void,SetRectEmpty,LPRECT,a)
 Fa(void,ShowCaret,HWND,a)
 Fa(void,SwapRecording,WORD,a)
+Fa(void,UnlockSegment,HGLOBAL,a)
 Fa(void,UpdateWindow,HWND,a)
-Fb(BOOL,CallMsgFilter,LPMSG,a,short,b)
+Fb(BOOL,CallMsgFilter,SEGPTR,a,short,b)
 Fb(BOOL,ChangeClipboardChain,HWND,a,HWND,b)
 Fb(BOOL,EnableWindow,HWND,a,BOOL,b)
 Fb(BOOL,EnumWindows,FARPROC,a,LONG,b)
@@ -2541,6 +2569,11 @@
 Fb(BOOL,GetWindowOrgEx,HDC,a,LPPOINT,b)
 Fb(BOOL,GetWindowPlacement,HWND,a,LPWINDOWPLACEMENT,b)
 Fb(BOOL,InvertRgn,HDC,a,HRGN,b)
+Fb(BOOL,IsBadHugeReadPtr,SEGPTR,a,DWORD,b)
+Fb(BOOL,IsBadHugeWritePtr,SEGPTR,a,DWORD,b)
+Fb(BOOL,IsBadReadPtr,SEGPTR,a,WORD,b)
+Fb(BOOL,IsBadStringPtr,SEGPTR,a,WORD,b)
+Fb(BOOL,IsBadWritePtr,SEGPTR,a,WORD,b)
 Fb(BOOL,IsChild,HWND,a,HWND,b)
 Fb(BOOL,IsDialogMessage,HWND,a,LPMSG,b)
 Fb(BOOL,KillSystemTimer,HWND,a,WORD,b)
@@ -2568,23 +2601,24 @@
 Fb(FARPROC,MakeProcInstance,FARPROC,a,HANDLE,b)
 Fb(HANDLE,CopyMetaFile,HANDLE,a,LPSTR,b)
 Fb(HANDLE,GetProp,HWND,a,LPSTR,b)
-Fb(HANDLE,LoadAccelerators,HANDLE,a,LPSTR,b)
+Fb(HANDLE,LoadAccelerators,HANDLE,a,SEGPTR,b)
 Fb(HANDLE,LoadModule,LPSTR,a,LPVOID,b)
 Fb(HANDLE,LoadResource,HANDLE,a,HANDLE,b)
 Fb(HANDLE,LocalAlloc,WORD,a,WORD,b)
 Fb(HANDLE,RemoveProp,HWND,a,LPSTR,b)
 Fb(HANDLE,SelectObject,HDC,a,HANDLE,b)
 Fb(HANDLE,SetClipboardData,WORD,a,HANDLE,b)
-Fb(HBITMAP,LoadBitmap,HANDLE,a,LPSTR,b)
+Fb(HBITMAP,LoadBitmap,HANDLE,a,SEGPTR,b)
 Fb(HBRUSH,CreateDIBPatternBrush,HANDLE,a,WORD,b)
 Fb(HBRUSH,CreateHatchBrush,short,a,COLORREF,b)
-Fb(HCURSOR,LoadCursor,HANDLE,a,LPSTR,b)
+Fb(HCURSOR,LoadCursor,HANDLE,a,SEGPTR,b)
 Fb(HDC,BeginPaint,HWND,a,LPPAINTSTRUCT,b) 
+Fb(HGLOBAL,GlobalAlloc,WORD,a,DWORD,b)
 Fb(HHOOK,SetWindowsHook,short,a,HOOKPROC,b)
-Fb(HICON,LoadIcon,HANDLE,a,LPSTR,b)
+Fb(HICON,LoadIcon,HANDLE,a,SEGPTR,b)
 Fb(HMENU,GetSubMenu,HMENU,a,short,b)
 Fb(HMENU,GetSystemMenu,HWND,a,BOOL,b)
-Fb(HMENU,LoadMenu,HANDLE,a,LPSTR,b)
+Fb(HMENU,LoadMenu,HANDLE,a,SEGPTR,b)
 Fb(HMENU,LookupMenuHandle,HMENU,a,INT,b)
 Fb(HPALETTE,GDISelectPalette,HDC,a,HPALETTE,b)
 Fb(HWND,ChildWindowFromPoint,HWND,a,POINT,b)
@@ -2601,9 +2635,9 @@
 Fb(LONG,EscapeCommFunction,int,a,int,b)
 Fb(LONG,GetClassLong,HWND,a,short,b)
 Fb(LONG,GetWindowLong,HWND,a,short,b)
-Fb(LPSTR,AnsiPrev,LPSTR,a,LPSTR,b)
-Fb(LPSTR,lstrcat,LPSTR,a,LPCSTR,b )
-Fb(LPSTR,lstrcpy,LPSTR,a,LPCSTR,b )
+Fb(SEGPTR,AnsiPrev,SEGPTR,a,SEGPTR,b)
+Fb(SEGPTR,lstrcat,SEGPTR,a,SEGPTR,b)
+Fb(SEGPTR,lstrcpy,SEGPTR,a,SEGPTR,b)
 Fb(WORD FAR*,SetCommEventMask,int,a,WORD,b)
 Fb(WORD,AnsiLowerBuff,LPSTR,a,WORD,b)
 Fb(WORD,AnsiUpperBuff,LPSTR,a,WORD,b)
@@ -2619,6 +2653,7 @@
 Fb(WORD,IsDlgButtonChecked,HWND,a,WORD,b)
 Fb(WORD,LocalShrink,HANDLE,a,WORD,b)
 Fb(WORD,MapVirtualKey,WORD,a,WORD,b)
+Fb(WORD,PrestoChangoSelector,WORD,a,WORD,b)
 Fb(WORD,SetBkMode,HDC,a,WORD,b)
 Fb(WORD,SetMapMode,HDC,a,WORD,b)
 Fb(WORD,SetPolyFillMode,HDC,a,WORD,b)
@@ -2711,12 +2746,13 @@
 Fc(DWORD,SetWindowOrg,HDC,a,short,b,short,c)
 Fc(FARPROC,SetResourceHandler,HANDLE,a,LPSTR,b,FARPROC,c)
 Fc(HANDLE,AllocResource,HANDLE,a,HANDLE,b,DWORD,c)
-Fc(HANDLE,FindResource,HANDLE,a,LPSTR,b,LPSTR,c)
+Fc(HANDLE,FindResource,HANDLE,a,SEGPTR,b,SEGPTR,c)
 Fc(HANDLE,LocalReAlloc,HANDLE,a,WORD,b,WORD,c)
 Fc(HBITMAP,CreateCompatibleBitmap,HDC,a,short,b,short,c)
 Fc(HBITMAP,CreateDiscardableBitmap,HDC,a,short,b,short,c)
 Fc(HBRUSH,GetControlBrush,HWND,a,HDC,b,WORD,c)
 Fc(HDC,GetDCEx,HWND,a,HRGN,b,DWORD,c)
+Fc(HGLOBAL,GlobalReAlloc,HGLOBAL,a,DWORD,b,WORD,c)
 Fc(HPALETTE,SelectPalette,HDC,a,HPALETTE,b,BOOL,c)
 Fc(HPEN,CreatePen,short,a,short,b,COLORREF,c)
 Fc(HRGN,CreatePolygonRgn,LPPOINT,a,short,b,short,c)
@@ -2731,6 +2767,7 @@
 Fc(LONG,SetClassLong,HWND,a,short,b,LONG,c)
 Fc(LONG,SetWindowLong,HWND,a,short,b,LONG,c)
 Fc(LONG,_llseek,INT,a,LONG,b,INT,c)
+Fc(SEGPTR,lstrcpyn,SEGPTR,a,SEGPTR,b,WORD,c)
 Fc(WORD,GetAtomName,ATOM,a,LPSTR,b,short,c)
 Fc(WORD,GetInternalWindowPos,HWND,a,LPRECT,b,LPPOINT,c)
 Fc(WORD,GetMenuState,HMENU,a,WORD,b,WORD,c)
@@ -2769,7 +2806,7 @@
 Fc(void,InvalidateRgn,HWND,a,HRGN,b,BOOL,c)
 Fc(void,OemToAnsiBuff,LPSTR,a,LPSTR,b,INT,c)
 Fc(void,OffsetRect,LPRECT,a,short,b,short,c)
-Fc(void,SetDlgItemText,HWND,a,WORD,b,LPSTR,c)
+Fc(void,SetDlgItemText,HWND,a,WORD,b,SEGPTR,c)
 Fc(void,SetSysColors,int,a,LPINT,b,COLORREF*,c)
 Fc(void,ShowScrollBar,HWND,a,WORD,b,BOOL,c)
 Fc(void,SwitchStackTo,WORD,a,WORD,b,WORD,c)
@@ -2778,7 +2815,7 @@
 Fd(BOOL,EnumMetaFile,HDC,a,LOCALHANDLE,b,FARPROC,c,BYTE FAR*,d)
 Fd(BOOL,FloodFill,HDC,a,INT,b,INT,c,COLORREF,d)
 Fd(BOOL,GetCharWidth,HDC,a,WORD,b,WORD,c,LPINT,d)
-Fd(BOOL,GetMessage,LPMSG,msg,HWND,b,WORD,c,WORD,d)
+Fd(BOOL,GetMessage,SEGPTR,msg,HWND,b,WORD,c,WORD,d)
 Fd(BOOL,GetTextExtentPoint,HDC,a,LPSTR,b,short,c,LPSIZE,d)
 Fd(BOOL,HiliteMenuItem,HWND,a,HMENU,b,WORD,c,WORD,d)
 Fd(BOOL,MoveToEx,HDC,a,short,b,short,c,LPPOINT,d)
@@ -2804,7 +2841,7 @@
 Fd(HRGN,CreateEllipticRgn,short,a,short,b,short,c,short,d)
 Fd(HRGN,CreatePolyPolygonRgn,LPPOINT,a,LPINT,b,short,c,short,d)
 Fd(HRGN,CreateRectRgn,short,a,short,b,short,c,short,d)
-Fd(HWND,CreateDialog,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d)
+Fd(HWND,CreateDialog,HANDLE,a,SEGPTR,b,HWND,c,WNDPROC,d)
 Fd(HWND,CreateDialogIndirect,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d)
 Fd(INT,GetTempFileName,BYTE,a,LPCSTR,b,UINT,c,LPSTR,d)
 Fd(LONG,DefDlgProc,HWND,a,WORD,b,WORD,c,LONG,d)
@@ -2819,11 +2856,11 @@
 Fd(WORD,SetSystemTimer,HWND,a,WORD,d,WORD,b,FARPROC,c)
 Fd(WORD,SetTimer,HWND,a,WORD,d,WORD,b,FARPROC,c)
 Fd(int,CombineRgn,HRGN,a,HRGN,b,HRGN,c,short,d)
-Fd(int,DialogBox,HINSTANCE,a,LPCSTR,b,HWND,c,WNDPROC,d)
+Fd(int,DialogBox,HINSTANCE,a,SEGPTR,b,HWND,c,WNDPROC,d)
 Fd(int,DialogBoxIndirect,HANDLE,a,HANDLE,b,HWND,c,WNDPROC,d)
 Fd(int,EnumFonts,HDC,a,LPSTR,b,FARPROC,c,LPSTR,d)
 Fd(int,EnumObjects,HDC,a,int,b,FARPROC,c,LPSTR,d)
-Fd(int,GetDlgItemText,HWND,a,WORD,b,LPSTR,c,WORD,d)
+Fd(int,GetDlgItemText,HWND,a,WORD,b,SEGPTR,c,WORD,d)
 Fd(int,LoadString,HANDLE,a,WORD,b,LPSTR,c,int,d)
 Fd(int,MessageBox,HWND,a,LPSTR,b,LPSTR,c,WORD,d)
 Fd(int,SetScrollPos,HWND,a,int,b,int,c,BOOL,d)
@@ -2853,14 +2890,14 @@
 Fe(DWORD,ScaleWindowExt,HDC,a,short,b,short,c,short,d,short,e)
 Fe(HBITMAP,CreateBitmap,short,a,short,b,BYTE,c,BYTE,d,LPSTR,e)
 Fe(HWND,CreateDialogIndirectParam,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d,LPARAM,e)
-Fe(HWND,CreateDialogParam,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d,LPARAM,e)
+Fe(HWND,CreateDialogParam,HANDLE,a,SEGPTR,b,HWND,c,WNDPROC,d,LPARAM,e)
 Fe(LONG,CallWindowProc,WNDPROC,a,HWND,b,WORD,c,WORD,d,LONG,e)
 Fe(LONG,DefFrameProc,HWND,a,HWND,b,WORD,c,WORD,d,LONG,e)
 Fe(LONG,SendDlgItemMessage,HWND,a,WORD,b,WORD,c,WORD,d,LONG,e)
 Fe(int,DialogBoxIndirectParam,HANDLE,a,HANDLE,b,HWND,c,WNDPROC,d,LONG,e)
-Fe(int,DialogBoxParam,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d,LONG,e)
+Fe(int,DialogBoxParam,HANDLE,a,SEGPTR,b,HWND,c,WNDPROC,d,LONG,e)
 Fe(int,DlgDirList,HWND,a,LPSTR,b,int,c,int,d,WORD,e)
-Fe(int,DlgDirListComboBox,HWND,a,LPSTR,b,int,c,int,d,WORD,e)
+Fe(int,DlgDirListComboBox,HWND,a,SEGPTR,b,int,c,int,d,WORD,e)
 Fe(int,DrawText,HDC,a,LPSTR,str,int,c,LPRECT,d,WORD,flag)
 Fe(int,Escape,HDC,a,int,b,int,c,LPSTR,d,LPSTR,e)
 Fe(int,ExcludeClipRect,HDC,a,short,b,short,c,short,d,short,e)
@@ -2902,33 +2939,12 @@
 Fi(BOOL,GrayString,HDC,a,HBRUSH,b,FARPROC,gsprc,LPARAM,lParam,INT,cch,INT,x,INT,y,INT,cx,INT,cy)
 Fi(BOOL,Pie,HDC,a,int,xLeft,int,yTop,int,xRight,int,yBottom,int,xStart,int,yStart,int,xEnd,int,yEnd)
 Fk(BOOL,StretchBlt,HDC,a,short,b,short,c,short,d,short,e,HDC,f,short,g,short,h,short,i,short,j,DWORD,k)
-Fk(HWND,CreateWindow,LPSTR,szAppName,LPSTR,Label,DWORD,ol,short,x,short,y,short,w,short,h,HWND,d,HMENU,e,,HANDLE i,LPSTR,g)
-Fl(HWND,CreateWindowEx,DWORD,a,LPSTR,b,LPSTR,c,DWORD,d,short,e,short,f,short,g,short,h,HWND,i,HMENU,j,HANDLE,k,LPSTR,l)
+Fk(HWND,CreateWindow,LPSTR,szAppName,LPSTR,Label,DWORD,ol,short,x,short,y,short,w,short,h,HWND,d,HMENU,e,,HANDLE i,SEGPTR,g)
+Fl(HWND,CreateWindowEx,DWORD,a,LPSTR,b,LPSTR,c,DWORD,d,short,e,short,f,short,g,short,h,HWND,i,HMENU,j,HANDLE,k,SEGPTR,l)
 Fl(int,SetDIBitsToDevice,HDC,a,short,b,short,c,WORD,d,WORD,e,WORD,f,WORD,g,WORD,h,WORD,i,LPSTR,j,LPBITMAPINFO,k,WORD,l)
 Fm(int,StretchDIBits,HDC,a,WORD,b,WORD,c,WORD,d,WORD,e,WORD,f,WORD,g,WORD,h,WORD,i,LPSTR,j,LPBITMAPINFO,k,WORD,l,DWORD,m)
 Fn(HFONT,CreateFont,int,a,int,b,int,c,int,d,int,e,BYTE,f,BYTE,g,BYTE,h,BYTE,i,BYTE,j,BYTE,k,BYTE,l,BYTE,m,LPSTR,n)
 
-#ifndef GLOBAL_SOURCE
-Fa(BOOL,GlobalUnWire,HANDLE,a)
-Fa(BOOL,GlobalUnfix,HANDLE,a)
-Fa(BOOL,GlobalUnlock,HANDLE,a)
-Fa(DWORD,GlobalCompact,DWORD,a)
-Fa(DWORD,GlobalHandle,WORD,a)
-Fa(DWORD,GlobalSize,HANDLE,a)
-Fa(HANDLE,GlobalFree,HANDLE,a)
-Fa(HANDLE,GlobalLRUNewest,HANDLE,a)
-Fa(HANDLE,GlobalLRUOldest,HANDLE,a)
-Fa(LPSTR,GlobalLock,HANDLE,a)
-Fa(LPSTR,GlobalWire,HANDLE,a)
-Fa(WORD,GlobalFlags,HANDLE,a)
-Fa(WORD,GlobalPageLock,HANDLE,a)
-Fa(WORD,GlobalPageUnlock,HANDLE,a)
-Fa(void,GlobalFix,HANDLE,a)
-Fa(void,GlobalNotify,FARPROC,a)
-Fb(HANDLE,GlobalAlloc,WORD,a,DWORD,b)
-Fc(HANDLE,GlobalReAlloc,HANDLE,a,DWORD,b,WORD,c)
-#endif
-
 #ifdef WINELIB
 #define WINELIB_UNIMP(x) fprintf (stderr, "WineLib: Unimplemented %s\n", x)
 #endif
diff --git a/include/wintypes.h b/include/wintypes.h
index a74457e..88c627f 100644
--- a/include/wintypes.h
+++ b/include/wintypes.h
@@ -13,6 +13,7 @@
 typedef LONG LRESULT;
 typedef WORD HANDLE;
 typedef DWORD HHOOK;
+typedef DWORD SEGPTR;
 typedef char *LPSTR;
 typedef const char *LPCSTR;
 typedef char *NPSTR;
@@ -30,25 +31,28 @@
 
 #define DECLARE_HANDLE(a) typedef HANDLE a;
 
-DECLARE_HANDLE(HTASK);
-DECLARE_HANDLE(HDRVR);
-DECLARE_HANDLE(HWND);
-DECLARE_HANDLE(HDC);
-DECLARE_HANDLE(HCLASS);
-DECLARE_HANDLE(HCURSOR);
-DECLARE_HANDLE(HFONT);
-DECLARE_HANDLE(HPEN);
-DECLARE_HANDLE(HRGN);
-DECLARE_HANDLE(HPALETTE);
-DECLARE_HANDLE(HICON);
-DECLARE_HANDLE(HINSTANCE);
-DECLARE_HANDLE(HMENU);
 DECLARE_HANDLE(HBITMAP);
 DECLARE_HANDLE(HBRUSH);
-DECLARE_HANDLE(LOCALHANDLE);
-DECLARE_HANDLE(HMETAFILE);
-DECLARE_HANDLE(HDWP);
+DECLARE_HANDLE(HCLASS);
+DECLARE_HANDLE(HCURSOR);
+DECLARE_HANDLE(HDC);
 DECLARE_HANDLE(HDROP);
+DECLARE_HANDLE(HDRVR);
+DECLARE_HANDLE(HDWP);
+DECLARE_HANDLE(HFONT);
+DECLARE_HANDLE(HGLOBAL);
+DECLARE_HANDLE(HICON);
+DECLARE_HANDLE(HINSTANCE);
+DECLARE_HANDLE(HLOCAL);
+DECLARE_HANDLE(HMENU);
+DECLARE_HANDLE(HMETAFILE);
+DECLARE_HANDLE(HMODULE);
+DECLARE_HANDLE(HPALETTE);
+DECLARE_HANDLE(HPEN);
+DECLARE_HANDLE(HRGN);
+DECLARE_HANDLE(HTASK);
+DECLARE_HANDLE(HWND);
+DECLARE_HANDLE(LOCALHANDLE);
 
 #define TRUE 1
 #define FALSE 0
@@ -70,15 +74,18 @@
 #define WINE_PACKED __attribute__ ((packed))
 #endif
 
-#define LOBYTE(w)           ((BYTE)(w))
+#define LOBYTE(w)           ((BYTE)(UINT)(w))
 #define HIBYTE(w)           ((BYTE)((UINT)(w) >> 8))
 
-#define LOWORD(l)           ((WORD)(l))
+#define LOWORD(l)           ((WORD)(DWORD)(l))
 #define HIWORD(l)           ((WORD)((DWORD)(l) >> 16))
 
 #define MAKELONG(low, high) ((LONG)(((WORD)(low)) | \
 				    (((DWORD)((WORD)(high))) << 16)))
 
+#define SELECTOROF(ptr)     (HIWORD(ptr))
+#define OFFSETOF(ptr)       (LOWORD(ptr))
+
 #ifndef max
 #define max(a,b) (((a) > (b)) ? (a) : (b))
 #endif