diff --git a/ANNOUNCE b/ANNOUNCE
index b22dffa..e22d153 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -1,15 +1,15 @@
-This is release 970824 of Wine, the MS Windows emulator.  This is still a
+This is release 970914 of Wine, the MS Windows emulator.  This is still a
 developer's only release.  There are many bugs and many unimplemented API
 features.  Most applications still do not work correctly.
 
 Patches should be submitted to "julliard@lrc.epfl.ch".  Please don't
 forget to include a ChangeLog entry.
 
-WHAT'S NEW with Wine-970824: (see ChangeLog for details)
-	- Better Win32 menu support.
-	- Improved Winsock.
-	- UpDown control.
-	- More undocumented Win95 hacks.
+WHAT'S NEW with Wine-970914: (see ChangeLog for details)
+	- Better resource handling.
+	- New Progress control.
+	- Improved PE module support.
+	- Many relay code changes.
 	- Lots of bug fixes.
 
 See the README file in the distribution for installation instructions.
@@ -18,10 +18,10 @@
 the release is available at the ftp sites.  The sources will be available
 from the following locations:
 
-  ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-970824.tar.gz
-  ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-970824.tar.gz
-  ftp://ftp.infomagic.com/pub/mirrors/linux/wine/development/Wine-970824.tar.gz
-  ftp://ftp.progsoc.uts.edu.au/pub/Wine/development/Wine-970824.tar.gz
+  ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-970914.tar.gz
+  ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-970914.tar.gz
+  ftp://ftp.infomagic.com/pub/mirrors/linux/wine/development/Wine-970914.tar.gz
+  ftp://ftp.progsoc.uts.edu.au/pub/Wine/development/Wine-970914.tar.gz
 
 It should also be available from any site that mirrors tsx-11 or sunsite.
 
diff --git a/AUTHORS b/AUTHORS
index 1623686..e26d62a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -4,28 +4,121 @@
 
 @c This is a list of the Wine authors and copyright holders.
 
-Wine is available thanks to the work of Bob Amstadt, Dag Asheim,
-Martin Ayotte, Peter Bajusz, Ross Biro, Uwe Bonnes, Erik Bos, Fons
-Botman, John Brezak, Andrew Bulhak, John Burton, Niels de Carpentier,
-Jimen Ching, Huw D. M. Davies, Roman Dolejsi, Frans van Dorsselaer,
-Paul Falstad, David Faure, Claus Fischer, Olaf Flebbe, Peter Galbavy,
-Ramon Garcia, Matthew Ghio, Hans de Graaff, Charles M. Hannum, John
-Harvey, Cameron Heide, Jochen Hoenicke, Onno Hovers, Jeffrey Hsu,
-Miguel de Icaza, Jukka Iivonen, Lee Jaekil, Alexandre Julliard, Bang
-Jun-Young, Pavel Kankovsky, Jochen Karrer, Andreas Kirschbaum,
-Albrecht Kleine, Jon Konrath, Alex Korobka, Greg Kreider, Anand
-Kumria, Scott A. Laird, Andrew Lewycky, Martin von Loewis, Kenneth
-MacDonald, Peter MacDonald, William Magro, Juergen Marquardt, Ricardo
-Massaro, Marcus Meissner, Graham Menhennitt, David Metcalfe, Bruce
-Milner, Steffen Moeller, Andreas Mohr, Philippe De Muyter, Itai
-Nahshon, Michael Patra, Jim Peterson, Robert Pouliot, Keith Reynolds,
-Slaven Rezic, John Richardson, Johannes Ruscheinski, Thomas Sandford,
-Constantine Sapuntzakis, Pablo Saratxaga, Daniel Schepler, Ulrich
-Schmid, Bernd Schmidt, Yngvi Sigurjonsson, Stephen Simmons, Rick
-Sladkey, William Smith, Dominik Strasser, Vadim Strizhevsky, Erik
-Svendsen, Tristan Tarrant, Andrew Taylor, Duncan C Thomson, Goran
-Thyni, Jimmy Tirtawangsa, Jon Tombs, Linus Torvalds, Gregory
-Trubetskoy, Petri Tuomola, Michael Veksler, Sven Verdoolaege, Ronan
-Waide, Eric Warnke, Manfred Weichel, Morten Welinder, Jan Willamowius,
-Carl Williams, Karl Guenter Wuensch, Eric Youngdale, James Youngman,
-Mikolaj Zalewski, and John Zero.
+Wine is available thanks to the work of:
+Bob Amstadt,
+Dag Asheim,
+Martin Ayotte,
+Peter Bajusz,
+Georg Beyerle,
+Ross Biro,
+Uwe Bonnes,
+Erik Bos,
+Fons Botman,
+John Brezak,
+Andrew Bulhak,
+John Burton,
+Niels de Carpentier,
+Jimen Ching,
+David A. Cuthbert,
+Huw D. M. Davies,
+Roman Dolejsi,
+Frans van Dorsselaer,
+Chris Faherty,
+Paul Falstad,
+David Faure,
+Claus Fischer,
+Olaf Flebbe,
+Chad Fraleigh,
+Peter Galbavy,
+Ramon Garcia,
+Matthew Ghio,
+Jody Goldberg,
+Hans de Graaff,
+Charles M. Hannum,
+Adrian Harvey,
+John Harvey,
+Cameron Heide,
+Jochen Hoenicke,
+Onno Hovers,
+Jeffrey Hsu,
+Miguel de Icaza,
+Jukka Iivonen,
+Lee Jaekil,
+Alexandre Julliard,
+Bang Jun-Young,
+Pavel Kankovsky,
+Jochen Karrer,
+Andreas Kirschbaum,
+Albrecht Kleine,
+Jon Konrath,
+Alex Korobka,
+Greg Kreider,
+Anand Kumria,
+Scott A. Laird,
+Andrew Lewycky,
+Martin von Loewis,
+Michiel van Loon,
+Kenneth MacDonald,
+Peter MacDonald,
+William Magro,
+Juergen Marquardt,
+Ricardo Massaro,
+Marcus Meissner,
+Graham Menhennitt,
+David Metcalfe,
+Bruce Milner,
+Steffen Moeller,
+Andreas Mohr,
+Philippe De Muyter,
+Itai Nahshon,
+Henrik Olsen,
+Michael Patra,
+Dimitrie O. Paun,
+Jim Peterson,
+Robert Pouliot,
+Keith Reynolds,
+Slaven Rezic,
+John Richardson,
+Rick Richardson,
+Doug Ridgway,
+Bernhard Rosenkraenzer,
+Johannes Ruscheinski,
+Thomas Sandford,
+Constantine Sapuntzakis,
+Pablo Saratxaga,
+Daniel Schepler,
+Peter Schlaile,
+Ulrich Schmid,
+Bernd Schmidt,
+Ingo Schneider,
+Victor Schneider,
+Yngvi Sigurjonsson,
+Stephen Simmons,
+Rick Sladkey,
+William Smith,
+Dominik Strasser,
+Vadim Strizhevsky,
+Erik Svendsen,
+Tristan Tarrant,
+Andrew Taylor,
+Duncan C Thomson,
+Goran Thyni,
+Jimmy Tirtawangsa,
+Jon Tombs,
+Linus Torvalds,
+Gregory Trubetskoy,
+Petri Tuomola,
+Michael Veksler,
+Sven Verdoolaege,
+Ronan Waide,
+Eric Warnke,
+Manfred Weichel,
+Morten Welinder,
+Lawson Whitney,
+Jan Willamowius,
+Carl Williams,
+Karl Guenter Wuensch,
+Eric Youngdale,
+James Youngman,
+Mikolaj Zalewski,
+and John Zero.
diff --git a/BUGS b/BUGS
index 05f5253..13a5ffd 100644
--- a/BUGS
+++ b/BUGS
@@ -5,10 +5,15 @@
 add new entries and, more importantly, remove those for the 
 bugs you fixed ;-)
 ------------------------------------------------------------
-As of June 1997 -
+As of Sept 1997 -
 
 General:
 
+ * LoadAccelerators() must not create any objects apart
+   from loading the resource.
+
+ * Catch/Throw() do not save SI and DI registers (quite fatal).
+
  * We need to do InsertMenuItem32[AW] and then code most of the other
    inserting function in terms of this.  Without this, we cannot support
    all the new extended menus.  Not hard, but slightly big.
@@ -36,6 +41,17 @@
 
 Miscellaneous:
 
+ * nBytesWidth in CURSORICONINFO is bogus for some bpp
+   (doesn't reflect the fact that bits are packed and 16-bit aligned).
+
+ * Progman and AOL complain about being unable to convert bitmaps
+   (probably because of bytes width stuff).
+
+ * Netscape displays partially downloaded inline graphics with
+   wrong offsets. Bitmap is missing in the splash-window.
+
+ * BCW 4.5 crashes after SwitchStackBack().
+
  * Text alignment problems in Word and Write (variable pitch fonts).
 
  * Font mapper weights
diff --git a/ChangeLog b/ChangeLog
index 94d3fd9..b9e775e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,154 @@
 ----------------------------------------------------------------------
+Thu Sep 11 18:24:56 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+	* [objects/dc.c]
+	In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
+
+Tue Sep  9 23:04:02 1997  U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
+
+	* [memory/virtual.c] 
+	Do not write debugging info unconditionally to stderr.
+
+	* [files/profile.c]
+	Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
+
+	* [misc/crtdll.c]
+	Many new functions.
+
+	* [include/windows.h] [windows/winpos.c]
+	ClientToScreen16 doesn't have a return value.
+
+Sun Sep  7 10:06:39 1997  Alexandre Julliard  <julliard@lrc.epfl.ch>
+
+	* [misc/main.c] [AUTHORS]
+	Update the list of contributors. Please let me know if I forgot
+	someone.
+
+	* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
+	Ordinal base for Win32 DLLs is now computed automatically from the
+	lowest ordinal found.
+
+	* [include/wintypes.h]
+	WINAPI is now defined as attribute((stdcall)). This will require
+	gcc to compile.
+
+	* [if1632/thunk.c]
+	Removed Win32 thunks (no longer needed with stdcall).
+
+	* [if1632/crtdll.spec] [misc/crtdll.c]
+	Make sure we only reference cdecl functions in the spec file.
+
+	* [objects/dc.c]
+	Use CapNotLast drawing style for 1-pixel wide lines.
+
+	* [tools/build.c]
+	Added 'double' argument type.
+	Added 'varargs' function type for Win32.
+	Made CallTo16_xxx functions stdcall.
+
+Fri Sep  5 14:50:49 1997  Alex Korobka <alex@trantor.pharm.sunysb.edu>
+
+	* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
+	More fixes to get message exchange closer to the original.
+
+	* [misc/spy.c]
+	Message logs now contain window names.
+
+	* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
+	  [objects/cursoricon.c] [windows/user.c]
+	Added some obscure features to fix memory leaks.
+
+Fri Sep  5 00:46:28 1997  Jan Willamowius <jan@janhh.shnet.org>
+
+	* [if1632/kernel32.spec] [win32/newfns.c]
+	Added stub for UTRegister() and UTUnRegister().
+
+Thu Sep  4 12:03:12 1997  Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
+	* [controls/edit.c]
+	Allow ASCII codes > 127 in WM_CHAR.
+
+Mon Sep  1 17:23:24 1997  Dimitrie O. Paun  <dimi@mail.cs.toronto.edu>
+
+	* [controls/widgets.c]
+	In InitCommonControls, remember the name of the class
+	because lpszClassName was made to point to a local array
+	Added the ProgressBar to the list of implemented controls.
+	Call InitCommonControls from WIDGETS_Init to register all
+	implemented Common Controls.
+	
+	* [include/commctrl.h]
+	Added misc decl for the Progress Bar.
+
+	* [controls/progress.c] [include/progress.h]
+	First attempt at implementiong the Progress Bar class.
+
+	* [objects/brush.h]
+	Implementation for GetSysColorBrush[16|32]
+
+	* [controls/status.c]
+	Use DrawEdge to draw the borders and fill the background
+
+	* [controls/uitools.c]
+	Added DrawDiagEdge32 and DrawRectEdge32
+
+	* [graphics/painting.c]
+	Implement DrawEdge[16|32]
+	Started DrawFrameControl32
+
+Mon Sep  1 10:07:09 1997  Lawson Whitney <lawson_whitney@juno.com>
+
+	* [misc/comm.c] [include/windows.h]
+	SetCommEventMask returns a SEGPTR.
+
+Sun Aug 31 23:28:32 1997  Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
+
+	* [loader/pe_image.c][loader/module.c][include/pe_image.h]
+	  [include/module.h]
+	Cleaned up the whole Win32 library mess (a bit).
+
+	* [debugger/stabs.c]
+	If 'wine' has no absolute path and isn't found, check $PATH too.
+
+	* [misc/ole2nls.c]
+	Some fixes.
+
+	* [misc/ver.c]
+	Added support for PE style version resources.
+
+	* [memory/string.c]
+	Check for NULL pointers to _lstr* functions, just as Windows95 does.
+
+	* [multimedia/time.c]
+	Made list of timers a simple linked list.
+
+	* [loader/resource.c]
+	Netscape 3 seems to pass NEGATIVE resource Ids (in an
+	unsigned int, yes). Don't know why, fixed it anyway.
+
+	* [objects/bitmap.c]
+	LoadImageW added.
+
+	* [include/win.h][windows/win.c]
+	Change wIDmenu from UINT16 to UINT32 and changed the
+	SetWindow(Long|Word) accordingly.
+
+Thu Aug 28 19:30:08 1997  Morten Welinder  <terra@diku.dk>
+
+	* [include/windows.h]
+	Add a few more colors defined for Win95.
+	Add a few more brush styles.
+
+	* [windows/syscolor.c]
+ 	Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
+	GetSysColor16, GetSysColor32.  Add support for above colors.
+
+Sun Aug 24 16:22:57 1997  Andrew Taylor <andrew@riscan.com>
+
+	* [multimedia/mmsystem.c]
+	Changed mmioDescend to use mmio functions for file I/O, neccessary
+	for memory files.
+
+----------------------------------------------------------------------
 Sat Aug 23 00:05:23 1997  Andreas Mohr <100.30936@germany.net>
 
 	* [if1632/kernel.spec] [if1632/mmsystem.spec]
diff --git a/controls/Makefile.in b/controls/Makefile.in
index 9d24345..9be0848 100644
--- a/controls/Makefile.in
+++ b/controls/Makefile.in
@@ -13,9 +13,11 @@
 	icontitle.c \
 	listbox.c \
 	menu.c \
+	progress.c \
 	scroll.c \
 	static.c \
 	status.c \
+	uitools.c \
 	updown.c \
 	widgets.c
 
diff --git a/controls/edit.c b/controls/edit.c
index 28373cd..7e32b57 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -982,11 +982,17 @@
 						segptr + start, index, count, action);
 		LocalUnlock16(hloc16);
 		return ret;
-	} else if (es->word_break_proc32A)
-		return (INT32)CallWordBreakProc32A((FARPROC32)es->word_break_proc32A,
-						es->text + start, index, count, action);
+	}
+        else if (es->word_break_proc32A)
+        {
+            dprintf_relay( stddeb, "CallTo32(wordbrk=%p,str='%s',idx=%d,cnt=%d,act=%d)\n",
+                           es->word_break_proc32A, es->text + start, index,
+                           count, action );
+            return (INT32)es->word_break_proc32A( es->text + start, index,
+                                                  count, action );
+        }
 	else
-		return EDIT_WordBreakProc(es->text + start, index, count, action);
+            return EDIT_WordBreakProc(es->text + start, index, count, action);
 }
 
 
@@ -2819,7 +2825,7 @@
 			EDIT_EM_ReplaceSel(wnd, es, TRUE, "\t");
 		break;
 	default:
-		if (!(es->style & ES_READONLY) && (c >= ' ') && (c != 127)) {
+		if (!(es->style & ES_READONLY) && ((BYTE)c >= ' ') && (c != 127)) {
 			char str[2];
  			str[0] = c;
  			str[1] = '\0';
diff --git a/controls/listbox.c b/controls/listbox.c
index 5466abe..1308e81 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -2462,7 +2462,7 @@
 
     default:
         if ((msg >= WM_USER) && (msg < 0xc000))
-            fprintf(stderr,"Listbox %04x: unknown msg %04x wp %08x lp %08lx\n",
+            dprintf_listbox(stddeb,"Listbox %04x: unknown msg %04x wp %08x lp %08lx\n",
                     hwnd, msg, wParam, lParam );
         return DefWindowProc32A( hwnd, msg, wParam, lParam );
     }
diff --git a/controls/menu.c b/controls/menu.c
index 5a1e28c..9e08d31 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -1141,48 +1141,44 @@
 /***********************************************************************
  *	     MENU_PatchResidentPopup
  */
-BOOL32 MENU_PatchResidentPopup( HQUEUE16 checkQueue, WND* wndOwner )
+BOOL32 MENU_PatchResidentPopup( HQUEUE16 checkQueue, WND* checkWnd )
 {
-   /* checkQueue tells us whether we have to disconnect top
-    * popup from the wndOwner or (if the latter is NULL) from 
-    * the checkQueue. If checkQueue is 0 then we need to set 
-    * popup owner to the wndOwner.
-    *
-    * This is supposed to be called when top popup is hidden. */
-
     if( pTopPopupWnd )
     {
 	HTASK16 hTask = 0;
 
-	dprintf_menu(stddeb,"patching resident popup: %04x, %08x\n", 
-				   checkQueue, (unsigned) wndOwner);
-	if( wndOwner )
-	{
-	    if( pTopPopupWnd->owner == wndOwner )
-	    {
-		if( checkQueue ) pTopPopupWnd->owner = NULL;
-		return TRUE;
-	    }
-	
-	    /* switch to the new owner */
+	dprintf_menu(stddeb,"patching resident popup: %04x %04x [%04x %04x]\n", 
+		checkQueue, checkWnd ? checkWnd->hwndSelf : 0, pTopPopupWnd->hmemTaskQ, 
+		pTopPopupWnd->owner ? pTopPopupWnd->owner->hwndSelf : 0);
 
-	    if( wndOwner->hmemTaskQ == pTopPopupWnd->hmemTaskQ ) 
-		return TRUE;
-	    hTask = QUEUE_GetQueueTask( wndOwner->hmemTaskQ );
-	} 
-	else if( pTopPopupWnd->hmemTaskQ == checkQueue )
+	switch( checkQueue )
 	{
-	    /* switch to the different task */
+	    case 0: /* checkWnd is the new popup owner */
+		 if( checkWnd )
+		 {
+		     pTopPopupWnd->owner = checkWnd;
+		     if( pTopPopupWnd->hmemTaskQ != checkWnd->hmemTaskQ )
+			 hTask = QUEUE_GetQueueTask( checkWnd->hmemTaskQ );
+		 }
+		 break;
 
-	    hTask = QUEUE_GetQueueTask( pTopPopupWnd->hmemTaskQ );
-	    hTask = TASK_GetNextTask( hTask );  
+	    case 0xFFFF: /* checkWnd is destroyed */
+		 if( pTopPopupWnd->owner == checkWnd )
+		     pTopPopupWnd->owner = NULL;
+		 return TRUE; 
+
+	    default: /* checkQueue is exiting */
+		 if( pTopPopupWnd->hmemTaskQ == checkQueue )
+		 {
+		     hTask = QUEUE_GetQueueTask( pTopPopupWnd->hmemTaskQ );
+		     hTask = TASK_GetNextTask( hTask );
+		 }
+		 break;
 	}
 
 	if( hTask )
 	{
 	    TDB* task = (TDB*)GlobalLock16( hTask );
-
-	    pTopPopupWnd->owner = wndOwner;
 	    if( task )
 	    {
 		pTopPopupWnd->hInstance = task->hInstance;
@@ -3537,7 +3533,7 @@
     if (!name) return 0;
     
     /* check for Win32 module */
-    instance = GetExePtr( instance );
+    instance = MODULE_HANDLEtoHMODULE16( instance );
     if (MODULE_GetPtr(instance)->flags & NE_FFLAGS_WIN32)
         return LoadMenu32A(instance,PTR_SEG_TO_LIN(name));
 
@@ -3837,7 +3833,7 @@
 
     miia.cbSize        = sizeof(miia);
     miia.fMask         = mii->fMask;
-    miia.dwTypeData    = miia.dwTypeData;
+    miia.dwTypeData    = mii->dwTypeData;
     miia.fType         = mii->fType;
     miia.fState        = mii->fState;
     miia.wID           = mii->wID;
diff --git a/controls/progress.c b/controls/progress.c
new file mode 100644
index 0000000..c0311e2
--- /dev/null
+++ b/controls/progress.c
@@ -0,0 +1,208 @@
+/*		
+ * Progress control
+ *
+ * Copyright 1997 Dimitrie O. Paun
+ *
+ * TODO:
+ *   - I do not know what to to on WM_[SG]ET_FONT
+ * Problems:
+ *   - I think I do not compute correctly the numer of leds to be drawn
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "windows.h"
+#include "syscolor.h"
+#include "sysmetrics.h"
+#include "progress.h"
+#include "graphics.h"
+#include "heap.h"
+#include "win.h"
+#include "stddebug.h"
+#include "debug.h"
+
+/* Control configuration constants */
+
+#define LED_WIDTH  8
+#define LED_GAP    2
+
+/* Work constants */
+
+#define UNKNOWN_PARAM(msg, wParam, lParam) dprintf_progress(stddeb, \
+        "Progress Ctrl: Unknown parameter(s) for message " #msg     \
+	"(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam); 
+
+#define PROGRESS_GetInfoPtr(wndPtr) ((PROGRESS_INFO *)wndPtr->wExtra)
+
+
+/***********************************************************************
+ *           PROGRESS_Paint
+ * Draw the arrows. The background need not be erased.
+ * If dc!=0, it draws on it
+ */
+static void PROGRESS_Paint(WND *wndPtr, HDC32 dc)
+{
+  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(wndPtr);
+  HBRUSH32 ledBrush;
+  int rightBar, rightMost;
+  PAINTSTRUCT32 ps;
+  RECT32 rect;
+  HDC32 hdc;
+
+  dprintf_progress(stddeb, "Progress Bar: paint pos=%d min=%d, max=%d\n",
+		   infoPtr->CurVal, infoPtr->MinVal, infoPtr->MaxVal);
+
+  /* get a dc */
+  hdc = dc==0 ? BeginPaint32(wndPtr->hwndSelf, &ps) : dc;
+
+  /* get the required brush */
+  ledBrush = GetSysColorBrush32(COLOR_HIGHLIGHT);
+
+  /* get rect for the bar, adjusted for the border */
+  GetClientRect32(wndPtr->hwndSelf, &rect);
+
+  /* draw the border */
+  DrawEdge32(hdc, &rect, BDR_SUNKENOUTER, BF_RECT|BF_ADJUST|BF_MIDDLE);
+  rect.left++; rect.right--; rect.top++; rect.bottom--;
+  rightMost = rect.right;
+
+  /* compute extent of progress bar */
+  rightBar = rect.left + 
+    MulDiv32(infoPtr->CurVal-infoPtr->MinVal,
+	     rect.right - rect.left,
+	     infoPtr->MaxVal-infoPtr->MinVal);
+
+  /* now draw the bar */
+  while(rect.left < rightBar) { 
+    rect.right = rect.left+LED_WIDTH;
+    FillRect32(hdc, &rect, ledBrush);
+    rect.left  = rect.right+LED_GAP;
+  }
+
+  /* clean-up */  
+  if(!dc)
+    EndPaint32(wndPtr->hwndSelf, &ps);
+}
+
+/***********************************************************************
+ *           PROGRESS_CoercePos
+ * Makes sure the current position (CUrVal) is within bounds.
+ */
+static void PROGRESS_CoercePos(WND *wndPtr)
+{
+  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(wndPtr); 
+
+  if(infoPtr->CurVal < infoPtr->MinVal)
+    infoPtr->CurVal = infoPtr->MinVal;
+  if(infoPtr->CurVal > infoPtr->MaxVal)
+    infoPtr->CurVal = infoPtr->MaxVal;
+}
+
+/***********************************************************************
+ *           ProgressWindowProc
+ */
+LRESULT WINAPI ProgressWindowProc(HWND32 hwnd, UINT32 message, 
+                                  WPARAM32 wParam, LPARAM lParam)
+{
+  WND *wndPtr = WIN_FindWndPtr(hwnd);
+  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(wndPtr); 
+  UINT32 temp;
+
+  switch(message)
+    {
+    case WM_CREATE:
+      /* initialize the info struct */
+      infoPtr->MinVal=0; 
+      infoPtr->MaxVal=100;
+      infoPtr->CurVal=0; 
+      infoPtr->Step=10;
+      dprintf_updown(stddeb, "Progress Ctrl creation, hwnd=%04x\n", hwnd);
+      break;
+    
+    case WM_DESTROY:
+      dprintf_updown(stddeb, "Progress Ctrl destruction, hwnd=%04x\n", hwnd);
+      break;
+
+    case WM_ERASEBKGND:
+      /* pretend to erase it here, but we will do it in the paint
+	 function to avoid flicker */
+      return 1;
+	
+    case WM_GETFONT:
+      /* FIXME: What do we need to do? */
+      break;
+
+    case WM_SETFONT:
+      /* FIXME: What do we need to do? */
+      break;
+
+    case WM_PAINT:
+      PROGRESS_Paint(wndPtr, wParam);
+      break;
+    
+    case PBM_DELTAPOS:
+      if(lParam)
+	UNKNOWN_PARAM(PBM_DELTAPOS, wParam, lParam);
+      temp = infoPtr->CurVal;
+      if(wParam != 0){
+	infoPtr->CurVal += (UINT16)wParam;
+	PROGRESS_CoercePos(wndPtr);
+	PROGRESS_Paint(wndPtr, 0);
+      }
+      return temp;
+
+    case PBM_SETPOS:
+      if (lParam)
+	UNKNOWN_PARAM(PBM_SETPOS, wParam, lParam);
+      temp = infoPtr->CurVal;
+      if(temp != wParam){
+	infoPtr->CurVal = (UINT16)wParam;
+	PROGRESS_CoercePos(wndPtr);
+	PROGRESS_Paint(wndPtr, 0);
+      }
+      return temp;          
+      
+    case PBM_SETRANGE:
+      if (wParam)
+	UNKNOWN_PARAM(PBM_SETRANGE, wParam, lParam);
+      temp = MAKELONG(infoPtr->MinVal, infoPtr->MaxVal);
+      if(temp != lParam){
+	infoPtr->MinVal = LOWORD(lParam); 
+	infoPtr->MaxVal = HIWORD(lParam);
+	if(infoPtr->MaxVal <= infoPtr->MinVal)
+	  infoPtr->MaxVal = infoPtr->MinVal+1;
+	PROGRESS_CoercePos(wndPtr);
+	PROGRESS_Paint(wndPtr, 0);
+      }
+      return temp;
+
+    case PBM_SETSTEP:
+      if (lParam)
+	UNKNOWN_PARAM(PBM_SETSTEP, wParam, lParam);
+      temp = infoPtr->Step;   
+      infoPtr->Step = (UINT16)wParam;   
+      return temp;
+
+    case PBM_STEPIT:
+      if (wParam || lParam)
+	UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
+      temp = infoPtr->CurVal;   
+      infoPtr->CurVal += infoPtr->Step;
+      if(infoPtr->CurVal > infoPtr->MaxVal)
+	infoPtr->CurVal = infoPtr->MinVal;
+      if(temp != infoPtr->CurVal)
+	PROGRESS_Paint(wndPtr, 0);
+      return temp;
+    
+    default: 
+      if (message >= WM_USER) 
+	fprintf( stderr, "Progress Ctrl: unknown msg %04x wp=%04x lp=%08lx\n", 
+		 message, wParam, lParam );
+      return DefWindowProc32A( hwnd, message, wParam, lParam ); 
+    } 
+
+    return 0;
+}
+
+
+
diff --git a/controls/status.c b/controls/status.c
index 0732664..df14c53 100644
--- a/controls/status.c
+++ b/controls/status.c
@@ -41,34 +41,29 @@
 void WINAPI DrawStatusText32A( HDC32 hdc, LPRECT32 lprc, LPCSTR text,
                                UINT32 style )
 {
-    RECT32		r, rt;
+    RECT32 r, rt;
     int	oldbkmode;
+    UINT32 border;
 
     r = *lprc;
 
-    if (style == 0 ||
-	style == SBT_POPOUT) {
-	InflateRect32(&r, -1, -1);
-	SelectObject32(hdc, sysColorObjects.hbrushScrollbar);
-	Rectangle32(hdc, r.left, r.top, r.right, r.bottom);
+    if(style == SBT_OWNERDRAW){
+      /* FIXME for SBT_OWNERDRAW, SBT_RTLREADING */
+    }
+    else{
+      DrawEdge32(hdc, &r, BDR_RAISEDINNER, BF_RECT|BF_ADJUST|BF_FLAT);
 
-	/* draw border */
-	SelectObject32(hdc, sysColorObjects.hpenWindowFrame);
-	if (style == 0)
-	    DrawEdge32(hdc, &r, EDGE_SUNKEN, BF_RECT);
-	else
-	    DrawEdge32(hdc, &r, EDGE_RAISED, BF_RECT);
-    }
-    else if (style == SBT_NOBORDERS) {
-	SelectObject32(hdc, sysColorObjects.hbrushScrollbar);
-	Rectangle32(hdc, r.left, r.top, r.right, r.bottom);
-    }
-    else {	/* fixme for SBT_OWNERDRAW, SBT_RTLREADING */
-	
-    }
+      if(style==SBT_POPOUT)
+	border = BDR_RAISEDOUTER;
+      else if(style==SBT_NOBORDERS)
+	border = 0;
+      else
+	border = BDR_SUNKENOUTER;
 
-    /* now draw text */
-    if ((style != SBT_OWNERDRAW) && text) {
+      DrawEdge32(hdc, &r, border, BF_RECT | BF_ADJUST | BF_MIDDLE);
+
+      /* now draw text */
+      if (text) {
 	SelectObject32(hdc, sysColorObjects.hpenWindowText);
 	oldbkmode = SetBkMode32(hdc, TRANSPARENT);
 	rt = r;
@@ -77,8 +72,10 @@
 		    &rt, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
 
 	if (oldbkmode != TRANSPARENT)
-	    SetBkMode32(hdc, oldbkmode);
+	  SetBkMode32(hdc, oldbkmode);
+      }
     }
+
 }
 
 static BOOL32 SW_Refresh( HWND32 hwnd, HDC32 hdc, STATUSWINDOWINFO *self )
diff --git a/controls/uitools.c b/controls/uitools.c
new file mode 100644
index 0000000..b245ebc
--- /dev/null
+++ b/controls/uitools.c
@@ -0,0 +1,390 @@
+/*
+ * User Interface Functions
+ *
+ * Copyright 1997 Dimitrie O. Paun
+ */
+
+#include <stdio.h>
+#include "windows.h"
+#include "debug.h"
+
+/***********************************************************************
+ *           UITOOLS_DrawDiagEdge
+ *
+ * Same as DrawEdge, but with BF_DIAGONAL
+ * I tested it extensively and as far as I can tell it is identical to the
+ * implementaion in Win95.
+ * I do not like that I create and
+ * use the 3 Pens to draw the diagonals. It would be better to draw them
+ * using the brushes returned by GetSysColorBrush func, but I did not have
+ * the patience to implement that yet.
+ */
+static BOOL32 UITOOLS_DrawDiagEdge(HDC32 hdc, RECT32 *rect, UINT32 edge,
+                                   UINT32 flags)
+{
+  HPEN32 facePen, shadowPen, lightPen, blackPen, grayPen, nullPen;
+  HPEN32 iPen, oPen, oldPen;
+  HBRUSH32 oldBrush, faceBrush;
+  int cl, cr, ct, cb;
+  BOOL32 mainDiag;
+  POINT32 tp;
+  RECT32 r;
+
+  /* If both rasied and sunken is specified, they anihilate one another */
+  if( !((flags & BF_MONO) || (flags & BF_FLAT)) ){
+    if( (edge & BDR_RAISEDOUTER) && (edge & BDR_SUNKENOUTER) )
+      return FALSE;
+    if( (edge & BDR_RAISEDINNER) && (edge & BDR_SUNKENINNER) )
+      return FALSE;
+  }
+
+  /* Create/get the tools of the trade... */
+  facePen = CreatePen32(PS_SOLID, 0, GetSysColor32(COLOR_BTNFACE));
+  shadowPen = CreatePen32(PS_SOLID, 0, GetSysColor32(COLOR_BTNSHADOW));
+  lightPen = CreatePen32(PS_SOLID, 0, GetSysColor32(COLOR_BTNHILIGHT));
+  grayPen = CreatePen32(PS_SOLID, 0, RGB(168, 152, 144));
+  blackPen = GetStockObject32(BLACK_PEN);
+  nullPen = GetStockObject32(NULL_PEN);
+  faceBrush = GetSysColorBrush32(COLOR_BTNFACE);
+  oldPen = SelectObject32(hdc, nullPen);
+  oldBrush = SelectObject32(hdc, faceBrush);
+
+  /* this is my working rectangle */
+  r = *rect;
+
+  if(flags & BF_MONO){
+    oPen = blackPen;
+    iPen = nullPen;
+  }else if(flags & BF_FLAT){
+    oPen = shadowPen;
+    iPen = facePen;
+  }else {
+    if(flags & BF_SOFT){
+      if(flags & BF_BOTTOM){
+	oPen = (edge & BDR_RAISEDOUTER) ? blackPen : lightPen;
+	iPen = (edge & BDR_RAISEDINNER) ? shadowPen : grayPen;
+      }
+      else{
+	oPen = (edge & BDR_RAISEDOUTER) ? lightPen : blackPen;
+	iPen = (edge & BDR_RAISEDINNER) ? grayPen : shadowPen;
+      }
+    }
+    else{
+      if(flags & BF_BOTTOM){
+	oPen = (edge & BDR_RAISEDOUTER) ? blackPen : lightPen;
+	iPen = (edge & BDR_RAISEDINNER) ? shadowPen : grayPen;
+      }
+      else{
+	oPen = (edge & BDR_RAISEDOUTER) ? grayPen : shadowPen;
+	iPen = (edge & BDR_RAISEDINNER) ? lightPen : blackPen;
+      }
+    }
+  }
+
+  if(flags & BF_BOTTOM){
+    if(flags & BF_LEFT){
+      cr = -1; cl =  0;
+      ct =  0; cb = -1;
+      mainDiag = TRUE;
+      tp.x = r.left; tp.y = r.top;
+    }
+    else{ /* RIGHT */
+      cr = -1; cl =  0;
+      ct =  1; cb =  0;
+      tp.x = r.left; tp.y = r.bottom-1;
+      mainDiag = FALSE;
+    }
+  }
+  else{  /* TOP */
+    if(flags & BF_LEFT){
+      cr =  0; cl =  1;
+      ct =  0; cb = -1;
+      mainDiag = FALSE;
+      tp.x = r.right; tp.y = r.top;
+    }
+    else{ /* RIGHT */
+      cr =  0; cl =  1;
+      ct =  1; cb =  0;
+      tp.x = r.right; tp.y = r.bottom-1;
+      mainDiag = TRUE;
+    }
+  }
+
+  /* if it has external edge, draw it */
+  if(edge & BDR_OUTER){
+    SelectObject32(hdc, oPen);
+    MoveToEx32(hdc, r.left, mainDiag ? r.bottom-1 : r.top, 0);
+    LineTo32(hdc, r.right, mainDiag ? r.top-1 : r.bottom);
+    r.left += cl; r.right += cr; r.top += ct; r.bottom += cb;
+  }
+
+  /* if it has internal edge, draw it */
+  if(edge & BDR_INNER){
+    SelectObject32(hdc, iPen);
+    MoveToEx32(hdc, r.left, mainDiag ? r.bottom-1 : r.top, 0);
+    LineTo32(hdc, r.right, mainDiag ? r.top-1 : r.bottom);
+    r.left += cl; r.right += cr; r.top += ct; r.bottom += cb;
+  }
+
+  if((flags & BF_MIDDLE) && !(flags & BF_MONO)){
+    POINT32 p[3];
+    p[0].x = mainDiag ? r.right: r.left;
+    p[0].y = r.top;
+    p[1].x = mainDiag ? r.left : r.right;
+    p[1].y = r.bottom;
+    p[2].x = tp.x;
+    p[2].y = tp.y;
+    SelectObject32(hdc, nullPen);
+    SelectObject32(hdc, faceBrush);
+    Polygon32(hdc, p, 3);
+  }
+
+  if(flags & BF_ADJUST)
+    *rect = r;
+
+  /* Restore the DC */
+  SelectObject32(hdc, oldPen);
+  SelectObject32(hdc, oldBrush);
+
+  /* Clean-up */
+  DeleteObject32(facePen);
+  DeleteObject32(shadowPen);
+  DeleteObject32(lightPen);
+  DeleteObject32(grayPen);
+
+  return TRUE;
+}
+
+
+/***********************************************************************
+ *           UITOOLS_DrawRectEdge
+ *
+ * Same as DrawEdge, but without BF_DIAGONAL
+ * I tested this function and it works very well. You should not change it
+ * unless you find a bug. If you don't like the colors, it it not its 
+ * fault - the system colors are not OK.
+ * Again, I tested this function on Win95 and I compared the output with the
+ * one generated by the native DrawEdge and it is identical on all cases that
+ * I tried, and I tried quite a few.
+ */
+static BOOL32 UITOOLS_DrawRectEdge(HDC32 hdc, RECT32 *rect,
+                                   UINT32 edge, UINT32 flags)
+{
+  HBRUSH32 faceBrush, shadowBrush, lightBrush, blackBrush, grayBrush, nullBrush;
+  HBRUSH32 iNBrush, iSBrush, iEBrush, iWBrush;
+  HBRUSH32 oNBrush, oSBrush, oEBrush, oWBrush;
+  HBRUSH32 oldBrush;
+  RECT32 r;
+
+  /* If both rasied and sunken is specified, they anihilate one another */
+  if( !((flags & BF_MONO) || (flags & BF_FLAT)) ){
+    if( (edge & BDR_RAISEDOUTER) && (edge & BDR_SUNKENOUTER) )
+      return FALSE;
+    if( (edge & BDR_RAISEDINNER) && (edge & BDR_SUNKENINNER) )
+      return FALSE;
+  }
+
+  faceBrush = GetSysColorBrush32(COLOR_BTNFACE);
+  shadowBrush = GetSysColorBrush32(COLOR_BTNSHADOW);
+  lightBrush = GetSysColorBrush32(COLOR_BTNHILIGHT);
+  blackBrush = GetStockObject32(BLACK_BRUSH);
+  grayBrush = GetStockObject32(LTGRAY_BRUSH);
+  nullBrush = GetStockObject32(NULL_BRUSH);
+  oldBrush = SelectObject32(hdc, nullBrush);
+
+  /* this is my working rectangle */
+  r = *rect;
+
+  if(flags & BF_MONO){
+    oNBrush = oSBrush = oEBrush = oWBrush = blackBrush;
+    iNBrush = iSBrush = iEBrush = iWBrush = nullBrush;
+  }else if(flags & BF_FLAT){
+    oNBrush = oSBrush = oEBrush = oWBrush = shadowBrush;
+    iNBrush = iSBrush = iEBrush = iWBrush = faceBrush;
+  }else {
+    if(flags & BF_SOFT){
+      oNBrush = oWBrush = (edge & BDR_RAISEDOUTER) ? lightBrush  : blackBrush;
+      oSBrush = oEBrush = (edge & BDR_RAISEDOUTER) ? blackBrush  : lightBrush;
+      iNBrush = iWBrush = (edge & BDR_RAISEDINNER) ? grayBrush   : shadowBrush;
+      iSBrush = iEBrush = (edge & BDR_RAISEDINNER) ? shadowBrush : grayBrush;
+    }
+    else{
+      oNBrush = oWBrush = (edge & BDR_RAISEDOUTER) ? grayBrush   : shadowBrush;
+      oSBrush = oEBrush = (edge & BDR_RAISEDOUTER) ? blackBrush  : lightBrush;
+      iNBrush = iWBrush = (edge & BDR_RAISEDINNER) ? lightBrush  : blackBrush;
+      iSBrush = iEBrush = (edge & BDR_RAISEDINNER) ? shadowBrush : grayBrush;
+    }
+  }
+
+  /* if it has external edge, draw it */
+  if(edge & BDR_OUTER){
+    if(flags & BF_RIGHT){
+      SelectObject32(hdc, oEBrush);
+      PatBlt32(hdc, r.right-1, r.top, 1, r.bottom - r.top, PATCOPY);
+      r.right--;
+    }
+    if(flags & BF_BOTTOM){
+      SelectObject32(hdc, oSBrush);
+      PatBlt32(hdc, r.left, r.bottom-1, r.right-r.left, 1, PATCOPY);
+      r.bottom--;
+    }
+    if(flags & BF_LEFT){
+      SelectObject32(hdc, oWBrush);
+      PatBlt32(hdc, r.left, r.top, 1, r.bottom - r.top, PATCOPY);
+      r.left++;
+    }
+    if(flags & BF_TOP){
+      SelectObject32(hdc, oNBrush);
+      PatBlt32(hdc, r.left, r.top, r.right-r.left, 1, PATCOPY);
+      r.top++;
+    }
+  }
+
+  /* if it has internal edge, draw it */
+  if(edge & BDR_INNER){
+    if(flags & BF_RIGHT){
+      SelectObject32(hdc, iEBrush);
+      PatBlt32(hdc, r.right-1, r.top, 1, r.bottom - r.top, PATCOPY);
+      r.right--;
+    }
+    if(flags & BF_BOTTOM){
+      SelectObject32(hdc, iSBrush);
+      PatBlt32(hdc, r.left, r.bottom-1, r.right-r.left, 1, PATCOPY);
+      r.bottom--;
+    }
+    if(flags & BF_LEFT){
+      SelectObject32(hdc, iWBrush);
+      PatBlt32(hdc, r.left, r.top, 1, r.bottom - r.top, PATCOPY);
+      r.left++;
+    }
+    if(flags & BF_TOP){
+      SelectObject32(hdc, iNBrush);
+      PatBlt32(hdc, r.left, r.top, r.right-r.left, 1, PATCOPY);
+      r.top++;
+    }
+  }
+
+  /* if we got to fill the middle, to it now */
+  if((flags & BF_MIDDLE) && !(flags & BF_MONO))
+    FillRect32(hdc, &r, faceBrush);
+
+  /* adjust the rectangle if required */
+  if(flags & BF_ADJUST)
+    *rect = r;
+
+  /* Restore the DC */
+  SelectObject32(hdc, oldBrush);
+
+  return TRUE;
+}
+
+
+/**********************************************************************
+ *          DrawEdge16   (USER.659)
+ */
+BOOL16 WINAPI DrawEdge16( HDC16 hdc, LPRECT16 rc, UINT16 edge, UINT16 flags )
+{
+    RECT32 rect32;
+    BOOL32 ret;
+
+    CONV_RECT16TO32( rc, &rect32 );
+    ret = DrawEdge32( hdc, &rect32, edge, flags );
+    CONV_RECT32TO16( &rect32, rc );
+    return ret;
+}
+
+/**********************************************************************
+ *          DrawEdge32   (USER32.154)
+ */
+BOOL32 WINAPI DrawEdge32( HDC32 hdc, LPRECT32 rc, UINT32 edge, UINT32 flags )
+{
+    dprintf_graphics( stddeb, "DrawEdge: %04x %d,%d-%d,%d %04x %04x\n",
+                      hdc, rc->left, rc->top, rc->right, rc->bottom,
+                      edge, flags );
+
+    if(flags & BF_DIAGONAL)
+      return UITOOLS_DrawDiagEdge(hdc, rc, edge, flags);
+    else
+      return UITOOLS_DrawRectEdge(hdc, rc, edge, flags);
+}
+
+
+/***********************************************************************
+ *           UITOOLS_DrawFrameButton
+ */
+static BOOL32 UITOOLS_DrawFrameButton(HDC32 hdc, LPRECT32 rc, UINT32 uState)
+{
+    fprintf( stdnimp,"DrawFrameButton(%x,%p,%x), empty stub!\n",
+             hdc,rc,uState );
+    return FALSE;
+}
+
+/***********************************************************************
+ *           UITOOLS_DrawFrameCaption
+ */
+static BOOL32 UITOOLS_DrawFrameCaption(HDC32 hdc, LPRECT32 rc, UINT32 uState)
+{
+    fprintf( stdnimp,"DrawFrameCaption(%x,%p,%x), empty stub!\n",
+             hdc,rc,uState );
+    return FALSE;
+}
+
+/***********************************************************************
+ *           UITOOLS_DrawFrameMenu
+ */
+static BOOL32 UITOOLS_DrawFrameMenu(HDC32 hdc, LPRECT32 rc, UINT32 uState)
+{
+    fprintf( stdnimp,"DrawFrameMenu32(%x,%p,%x), empty stub!\n",
+             hdc,rc,uState );
+    return FALSE;
+}
+
+/***********************************************************************
+ *           UITOOLS_DrawFrameScroll
+ */
+static BOOL32 UITOOLS_DrawFrameScroll(HDC32 hdc, LPRECT32 rc, UINT32 uState)
+{
+    fprintf( stdnimp,"DrawFrameScroll32(%x,%p,%x), empty stub!\n",
+             hdc,rc,uState );
+    return FALSE;
+}
+
+
+/**********************************************************************
+ *          DrawFrameControl16  (USER.656)
+ */
+BOOL16 WINAPI DrawFrameControl16( HDC16 hdc, LPRECT16 rc, UINT16 uType,
+                                  UINT16 uState )
+{
+    RECT32 rect32;
+    BOOL32 ret;
+
+    CONV_RECT16TO32( rc, &rect32 );
+    ret = DrawFrameControl32( hdc, &rect32, uType, uState );
+    CONV_RECT32TO16( &rect32, rc );
+    return ret;
+}
+
+
+/**********************************************************************
+ *          DrawFrameControl32  (USER32.157)
+ */
+BOOL32 WINAPI DrawFrameControl32( HDC32 hdc, LPRECT32 rc, UINT32 uType,
+                                  UINT32 uState )
+{
+    switch(uType)
+    {
+    case DFC_BUTTON:
+      return UITOOLS_DrawFrameButton(hdc, rc, uState);
+    case DFC_CAPTION:
+      return UITOOLS_DrawFrameCaption(hdc, rc, uState);
+    case DFC_MENU:
+      return UITOOLS_DrawFrameMenu(hdc, rc, uState);
+    case DFC_SCROLL:
+      return UITOOLS_DrawFrameScroll(hdc, rc, uState);
+    default:
+      fprintf( stdnimp,"DrawFrameControl32(%x,%p,%d,%x), bad type!\n",
+	       hdc,rc,uType,uState );
+    }
+    return FALSE;
+}
diff --git a/controls/updown.c b/controls/updown.c
index a3a75ef..4282300 100644
--- a/controls/updown.c
+++ b/controls/updown.c
@@ -8,6 +8,7 @@
  *     arrow keys
  *   - I am not sure about the default values for the Min, Max, Pos
  *     (in the UPDOWN_INFO the fields: MinVal, MaxVal, CurVal)
+ *   - I think I do not handle correctly the WS_BORDER style.
  * Testing:
  *   Not much. The following  have not been tested at all:
  *     - horizontal arrows
@@ -20,10 +21,7 @@
  *   behave very well so I am confident it does work in most (all) of the
  *   untested cases.
  * Problems:
- *   At the moment, the control will no draw itself very well because it
- *   uses some features in DrawEdge that are not yet implemented. 
- *   In other words, there is no known problem, exempt for the things in
- *   the TODO list above.
+ *   I do not like the arrows yet, I'll work more on them later on.
  */
 
 #include <stdlib.h>
@@ -47,10 +45,10 @@
 #define INITIAL_DELAY    500 /* initial timer until auto-increment kicks in */
 #define REPEAT_DELAY     50  /* delay between auto-increments */
 
-#define DEFAULT_WIDTH    10  /* default width of the ctrl */
-#define DEFAULT_XSEP     0   /* default separation between buddy and crtl */
-#define DEFAULT_ADDTOP   1   /* amount to extend above the buddy window */
-#define DEFAULT_ADDBOT   1   /* amount to extend below the buddy window */
+#define DEFAULT_WIDTH    14  /* default width of the ctrl */
+#define DEFAULT_XSEP      0  /* default separation between buddy and crtl */
+#define DEFAULT_ADDTOP    0  /* amount to extend above the buddy window */
+#define DEFAULT_ADDBOT    0  /* amount to extend below the buddy window */
 
 
 /* Work constants */
@@ -65,9 +63,6 @@
 
 static int accelIndex = -1;
 
-#define max(a,b) ((a)>(b)?(a):(b))
-#define min(a,b) ((a)<(b)?(a):(b))
-
 #define UNKNOWN_PARAM(msg, wParam, lParam) dprintf_updown(stddeb, \
         "UpDown Ctrl: Unknown parameter(s) for message " #msg     \
 	"(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam);
@@ -129,7 +124,7 @@
   if (wndPtr->dwStyle & UDS_HORZ) {
     len = rect->right - rect->left; /* compute the width */
     if (incr)
-      rect->left = len/2;
+      rect->left = len/2+1; 
     else
       rect->right = len/2;
   }
@@ -138,7 +133,7 @@
     if (incr)
       rect->bottom = len/2;
     else
-      rect->top = len/2;
+      rect->top = len/2+1;
   }
 }
 
@@ -290,48 +285,57 @@
 static void UPDOWN_DrawArrow(HDC32 hdc, RECT32 *rect, BOOL32 incr, 
 			     BOOL32 pressed, BOOL32 horz)
 {
-  const int w = rect->right - rect->left;
-  const int h = rect->bottom - rect->top;
-  int offset = pressed ? 1 : 0, tmp;
-  POINT32 pts[3];
+  const int rw = rect->right - rect->left;
+  const int rh = rect->bottom - rect->top;
+  int offset = pressed ? 1 : 0;
+  int th, x, y, len;
 
+  /* compute max extents of the triangle */
   if(horz){ /* horizontal arrows */
-    pts[0].x = rect->right  - max(2, w/3) + offset;
-    pts[0].y = rect->top    + max(2, h/4) + offset;
-    pts[1].x = pts[0].x;
-    pts[1].y = rect->bottom - max(2, h/4) + offset;
-    pts[2].x = rect->left + w/3 + offset;
-    pts[2].y = (pts[0].y + pts[1].y)/2;
-    if(pts[2].x-2<rect->left)
-      pts[2].x = rect->left + 2;
-    if(pts[2].x <= pts[0].x)
-      pts[2].x = pts[0].x - 1;
+    th = (3*rh)/5-2*4;
+    if(th > rw/2)
+      th = rw/2;
+    if(th < 2)
+      th = 2;
 
-    if(incr){
-      tmp = pts[2].x;
-      pts[2].x = pts[0].x;
-      pts[0].x = pts[1].x = tmp;
-    }
+    /* compute the position of the tip */
+    y = (rect->top+rect->bottom+1)/2 + offset; 
+    if(incr)
+      x = (rect->left+rect->right+1)/2 + (2*th)/3 + offset;
+    else
+      x = (rect->left+rect->right)/2 + th/3 + offset;
+
+    for(len=1; th>0; th--, len+=2){
+      MoveToEx32(hdc, x, y, 0);
+      LineTo32(hdc, x, y+len);
+      if(incr) x--;
+      else     x++;
+      y++;
+    }  
   }
   else{                   /* vertical arrows */
-    pts[0].x = rect->left + max(2, w/4) + offset;
-    pts[0].y = rect->top  + max(2, h/3) + offset;
-    pts[1].x = rect->right- max(2, w/4) + offset;
-    pts[1].y = pts[0].y;
-    pts[2].x = (pts[0].x + pts[1].x)/2;
-    pts[2].y = pts[0].y + h/3 + offset;
-    if(pts[2].y+2>rect->bottom)
-      pts[2].y = rect->bottom - 2;
-    if(pts[2].y <= pts[0].y)
-      pts[2].y = pts[0].y + 1;
+    th = (3*rw)/5-2*4;
+    if(th > rh/2)
+      th = rh/2;
+    if(th < 2)
+      th = 2;
 
-    if(incr){
-      tmp = pts[2].y;
-      pts[2].y = pts[0].y;
-      pts[0].y = pts[1].y = tmp;
+    /* compute the position of the tip */
+    x = (rect->left+rect->right+1)/2 + offset;
+    if(incr)
+      y = (rect->top+rect->bottom+1)/2 - th/3 + offset;
+    else
+      y = (rect->top+rect->bottom)/2 + (2*th)/3 + offset;
+
+    for(len=1; th>0; th--, len+=2){
+      MoveToEx32(hdc, x, y, 0);
+      LineTo32(hdc, x+len, y);
+      if(incr) y++;
+      else     y--;
+      x--;
     }
+    
   }
-  Polygon32(hdc, pts, 3);
 
 }
 
@@ -350,14 +354,6 @@
 
   hdc = BeginPaint32( wndPtr->hwndSelf, &ps );
 
-  /*FIXME - this is just for test */
-  /*      - when DrawEdge works properly, this should dissapear 
-	  as DrawEdge will erase the background */
-/*oldBrush = SelectObject32(hdc, GetStockObject32(GRAY_BRUSH));
-  GetClientRect32(wndPtr->hwndSelf, &rect);
-  Rectangle32(hdc, rect.left, rect.top, rect.right, rect.bottom);
-  SelectObject32(hdc, oldBrush);*/
-
   /* First select the proper brush */
   oldBrush = wndPtr->dwStyle & WS_DISABLED ? GRAY_BRUSH : BLACK_BRUSH;
   oldBrush = SelectObject32(hdc, GetStockObject32(oldBrush));
@@ -365,9 +361,12 @@
   /* Draw the incr button */
   UPDOWN_GetArrowRect(wndPtr, &rect, TRUE);
   prssed = (infoPtr->Flags & FLAG_INCR) && (infoPtr->Flags & FLAG_MOUSEIN);
-  DrawEdge32(hdc, &rect, prssed ? EDGE_SUNKEN : EDGE_RAISED, 
-	   BF_RECT | BF_SOFT | BF_MIDDLE);
+  DrawEdge32(hdc, &rect, prssed?EDGE_SUNKEN:EDGE_RAISED, BF_RECT|BF_MIDDLE);
   UPDOWN_DrawArrow(hdc, &rect, TRUE, prssed, wndPtr->dwStyle & UDS_HORZ);
+
+  /* Draw the space between the buttons */
+  rect.top = rect.bottom; rect.bottom++;
+  DrawEdge32(hdc, &rect, 0, BF_MIDDLE);
 		    
   /* Draw the decr button */
   UPDOWN_GetArrowRect(wndPtr, &rect, FALSE);
@@ -634,7 +633,7 @@
  *           UpDownWndProc
  */
 LRESULT WINAPI UpDownWindowProc(HWND32 hwnd, UINT32 message, WPARAM32 wParam,
-                                LPARAM lParam)
+				LPARAM lParam)
 {
   WND *wndPtr = WIN_FindWndPtr(hwnd);
   UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr); 
@@ -643,6 +642,9 @@
   switch(message)
     {
     case WM_CREATE:
+      /* get rid of border, if any */
+      wndPtr->dwStyle &= ~WS_BORDER;
+
       /* initialize the info struct */
       infoPtr->AccelCount=0; infoPtr->AccelVect=0; 
       infoPtr->CurVal=0; infoPtr->MinVal=0; infoPtr->MaxVal=100; /*FIXME*/
@@ -745,7 +747,7 @@
 	UNKNOWN_PARAM(UDM_GETACCEL, wParam, lParam);
 	return 0;
       }
-      temp = min(infoPtr->AccelCount, wParam);
+      temp = MIN(infoPtr->AccelCount, wParam);
       memcpy((void *)lParam, infoPtr->AccelVect, temp*sizeof(UDACCEL));
       return temp;
 
diff --git a/controls/widgets.c b/controls/widgets.c
index c8b9990..9c1d4a3 100644
--- a/controls/widgets.c
+++ b/controls/widgets.c
@@ -9,8 +9,10 @@
 #include "win.h"
 #include "commctrl.h"
 #include "button.h"
+#include "progress.h"
 #include "static.h"
 #include "status.h"
+#include "updown.h"
 #include "scroll.h"
 #include "updown.h"
 #include "desktop.h"
@@ -104,7 +106,9 @@
     { CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW, StatusWindowProc, 0,
       sizeof(STATUSWINDOWINFO), 0, 0, 0, 0, 0, STATUSCLASSNAME32A },
     { CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW, UpDownWindowProc, 0,
-      sizeof(UPDOWN_INFO), 0, 0, 0, 0, 0, UPDOWN_CLASS32A }
+      sizeof(UPDOWN_INFO), 0, 0, 0, 0, 0, UPDOWN_CLASS32A },
+    { CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW, ProgressWindowProc, 0,
+      sizeof(PROGRESS_INFO), 0, 0, 0, 0, 0, PROGRESS_CLASS32A }
 };
 
 #define NB_COMMON_CONTROLS32 \
@@ -155,6 +159,8 @@
         if (!(bicAtomTable[i] = RegisterClass32A( class32 ))) return FALSE;
     }
 
+    /* FIXME: hack to enable using built-in controls with Windows COMCTL32 */
+    InitCommonControls();
     SEGPTR_FREE(name);
     return TRUE;
 }
@@ -167,15 +173,18 @@
 {
     int i;
     char name[30];
+    const char *old_name;
     WNDCLASS32A *class32 = WIDGETS_CommonControls32;
 
     for (i = 0; i < NB_COMMON_CONTROLS32; i++, class32++)
     {
         /* Just to make sure the string is > 0x10000 */
+        old_name = class32->lpszClassName;
         strcpy( name, (char *)class32->lpszClassName );
         class32->lpszClassName = name;
         class32->hCursor = LoadCursor16( 0, IDC_ARROW );
         RegisterClass32A( class32 );
+        class32->lpszClassName = old_name;	
     }
 }
 
diff --git a/debugger/dbg.y b/debugger/dbg.y
index 39541c1..cd84c90 100644
--- a/debugger/dbg.y
+++ b/debugger/dbg.y
@@ -553,7 +553,7 @@
  */
 void DebugBreak32( CONTEXT *regs )
 {
-    const char *module = MODULE_GetModuleName( GetExePtr(GetCurrentTask()) );
+    const char *module = MODULE_GetModuleName( GetCurrentTask() );
     fprintf( stderr, "%s called DebugBreak\n", module ? module : "???" );
     DEBUG_context = *regs;
     DEBUG_Main( SIGTRAP );
@@ -564,7 +564,7 @@
  */
 void DebugBreak16( CONTEXT *regs )
 {
-    const char *module = MODULE_GetModuleName( GetExePtr(GetCurrentTask()) );
+    const char *module = MODULE_GetModuleName( GetCurrentTask() );
     fprintf( stderr, "%s called DebugBreak\n", module ? module : "???" );
     DEBUG_context = *regs;
     DEBUG_Main( SIGTRAP );
diff --git a/debugger/msc.c b/debugger/msc.c
index 61bab5a..3bc69af 100644
--- a/debugger/msc.c
+++ b/debugger/msc.c
@@ -886,8 +886,7 @@
  * We don't fully process it here for performance reasons.
  */
 int
-DEBUG_RegisterDebugInfo(int fd, struct pe_data * pe, 
-			int load_addr, u_long v_addr, u_long size)
+DEBUG_RegisterDebugInfo(struct pe_data * pe,int load_addr, u_long v_addr, u_long size)
 {
   int			  has_codeview = FALSE;
   int			  rtn = FALSE;
@@ -957,10 +956,7 @@
 	   * to proceed if we know what we need to do next.
 	   */
 	  deefer->dbg_size = dbgptr->SizeOfData;
-	  deefer->dbg_info = (char *) xmalloc(dbgptr->SizeOfData);
-	  lseek(fd, dbgptr->PointerToRawData, SEEK_SET);
-	  read(fd, deefer->dbg_info, deefer->dbg_size);
-
+	  deefer->dbg_info = pe->mappeddll+dbgptr->PointerToRawData;
 	  deefer->load_addr = (char *) load_addr;
 	  deefer->dbgdir = dbgptr;
 	  deefer->next = dbglist;
diff --git a/debugger/registers.c b/debugger/registers.c
index 5ed74dd..c280bb7 100644
--- a/debugger/registers.c
+++ b/debugger/registers.c
@@ -128,7 +128,7 @@
  *
  * Set the register values from a sigcontext. 
  */
-extern void DEBUG_SetSigContext( const SIGCONTEXT *sigcontext )
+void DEBUG_SetSigContext( const SIGCONTEXT *sigcontext )
 {
     EAX_reg(&DEBUG_context) = EAX_sig(sigcontext);
     EBX_reg(&DEBUG_context) = EBX_sig(sigcontext);
@@ -164,7 +164,7 @@
  *
  * Build a sigcontext from the register values.
  */
-extern void DEBUG_GetSigContext( SIGCONTEXT *sigcontext )
+void DEBUG_GetSigContext( SIGCONTEXT *sigcontext )
 {
     EAX_sig(sigcontext) = EAX_reg(&DEBUG_context);
     EBX_sig(sigcontext) = EBX_reg(&DEBUG_context);
diff --git a/debugger/stabs.c b/debugger/stabs.c
index dcdeaeb..0fe8e41 100644
--- a/debugger/stabs.c
+++ b/debugger/stabs.c
@@ -1085,6 +1085,25 @@
   status = stat(filename, &statbuf);
   if( status == -1 )
     {
+      char *s,*t,*fn,*paths;
+      if (strchr(filename,'/'))
+      	goto leave;
+      paths = xstrdup(getenv("PATH"));
+      s = paths;
+      while (s && *s) {
+      	t = strchr(s,':');
+	if (t) *t='\0';
+	fn = (char*)xmalloc(strlen(filename)+1+strlen(s)+1);
+	strcpy(fn,s);
+	strcat(fn,"/");
+	strcat(fn,filename);
+	if ((rtn = DEBUG_ProcessElfObject(fn,load_offset))) {
+      		free(paths);
+		goto leave;
+	}
+	s = t+1;
+      }
+      free(paths);
       goto leave;
     }
 
diff --git a/files/profile.c b/files/profile.c
index eb15ace..a034d86 100644
--- a/files/profile.c
+++ b/files/profile.c
@@ -501,7 +501,7 @@
     PROFILEKEY *key = NULL;
 
     if (!def_val) def_val = "";
-    if (key_name)
+    if (key_name && key_name[0])
     {
         key = PROFILE_Find( &CurProfile.section, section, key_name, FALSE );
         PROFILE_CopyEntry( buffer, (key && key->value) ? key->value : def_val,
@@ -839,6 +839,14 @@
                                        buffer, len, wininiW );
 }
 
+/***********************************************************************
+ *           GetProfileSection32A   (KERNEL32.268)
+ */
+INT32 WINAPI GetProfileSection32A( LPCSTR section, LPSTR buffer, INT32 len )
+{
+    return GetPrivateProfileSection32A( section, buffer, len, "win.ini" );
+}
+
 
 /***********************************************************************
  *           WriteProfileString16   (KERNEL.59)
@@ -963,6 +971,16 @@
     return ret;
 }
 
+/***********************************************************************
+ *           GetPrivateProfileSection32A   (KERNEL32.255)
+ */
+INT32 WINAPI GetPrivateProfileSection32A( LPCSTR section, LPSTR buffer,
+                                         INT32 len, LPCSTR filename )
+{
+    if (PROFILE_Open( filename ))
+        return PROFILE_GetString( section, NULL, NULL, buffer, len );
+    return 0;
+}
 
 
 /***********************************************************************
diff --git a/graphics/fontengine.c b/graphics/fontengine.c
index 4dd6e1f..1676836 100644
--- a/graphics/fontengine.c
+++ b/graphics/fontengine.c
@@ -10,7 +10,7 @@
 /* GDI 300 */
 WORD WINAPI EngineEnumerateFont(LPSTR fontname, FARPROC16 proc, DWORD data )
 {
-    printf("In engineEnumerateFont for %s\n",(fontname)?fontname:"NULL");
+    fprintf(stderr,"EngineEnumerateFont(%s,%p,%d),stub\n",fontname,proc,data);
     return 0;
 }
 #ifdef NOTDEF
@@ -23,7 +23,7 @@
 /* GDI 302 */
 WORD WINAPI EngineRealizeFont(LPLOGFONT16 lplogFont, LPTEXTXFORM16 lptextxform, LPFONTINFO16 lpfontInfo)
 {
-    printf("In EngineRealizeFont\n");
+    fprintf(stderr,"EngineRealizeFont(%p,%p,%p),stub\n",lplogFont,lptextxform,lpfontInfo);
     
     return 0;
 }
diff --git a/graphics/painting.c b/graphics/painting.c
index efd785a..5fef330 100644
--- a/graphics/painting.c
+++ b/graphics/painting.c
@@ -25,6 +25,12 @@
 #include "debug.h"
 #include "xmalloc.h"
 
+BOOL32 DrawDiagEdge32(HDC32 hdc, RECT32 *rect, UINT32 edge, UINT32 flags);
+BOOL32 DrawRectEdge32(HDC32 hdc, RECT32 *rect, UINT32 edge, UINT32 flags);
+BOOL32 DrawFrameButton32(HDC32 hdc, LPRECT32 rc, UINT32 uState);
+BOOL32 DrawFrameCaption32(HDC32 hdc, LPRECT32 rc, UINT32 uState);
+BOOL32 DrawFrameMenu32(HDC32 hdc, LPRECT32 rc, UINT32 uState);
+BOOL32 DrawFrameScroll32(HDC32 hdc, LPRECT32 rc, UINT32 uState);
 
 /***********************************************************************
  *           LineTo16    (GDI.19)
@@ -659,127 +665,6 @@
 
 
 /**********************************************************************
- *          DrawEdge16   (USER.659)
- */
-BOOL16 WINAPI DrawEdge16( HDC16 hdc, LPRECT16 rc, UINT16 edge, UINT16 flags )
-{
-    RECT32 rect32;
-    BOOL32 ret;
-
-    CONV_RECT16TO32( rc, &rect32 );
-    ret = DrawEdge32( hdc, &rect32, edge, flags );
-    CONV_RECT32TO16( &rect32, rc );
-    return ret;
-}
-
-
-/**********************************************************************
- *          DrawEdge32   (USER32.154)
- */
-BOOL32 WINAPI DrawEdge32( HDC32 hdc, LPRECT32 rc, UINT32 edge, UINT32 flags )
-{
-    HBRUSH32 hbrushOld;
-
-    if (flags >= BF_DIAGONAL)
-        fprintf( stderr, "DrawEdge: unsupported flags %04x\n", flags );
-
-    dprintf_graphics( stddeb, "DrawEdge: %04x %d,%d-%d,%d %04x %04x\n",
-                      hdc, rc->left, rc->top, rc->right, rc->bottom,
-                      edge, flags );
-
-    /* First do all the raised edges */
-
-    hbrushOld = SelectObject32( hdc, sysColorObjects.hbrushBtnHighlight );
-    if (edge & BDR_RAISEDOUTER)
-    {
-        if (flags & BF_LEFT) PatBlt32( hdc, rc->left, rc->top,
-                                       1, rc->bottom - rc->top - 1, PATCOPY );
-        if (flags & BF_TOP) PatBlt32( hdc, rc->left, rc->top,
-                                      rc->right - rc->left - 1, 1, PATCOPY );
-    }
-    if (edge & BDR_SUNKENOUTER)
-    {
-        if (flags & BF_RIGHT) PatBlt32( hdc, rc->right - 1, rc->top,
-                                        1, rc->bottom - rc->top, PATCOPY );
-        if (flags & BF_BOTTOM) PatBlt32( hdc, rc->left, rc->bottom - 1,
-                                         rc->right - rc->left, 1, PATCOPY );
-    }
-    if (edge & BDR_RAISEDINNER)
-    {
-        if (flags & BF_LEFT) PatBlt32( hdc, rc->left + 1, rc->top + 1, 
-                                       1, rc->bottom - rc->top - 2, PATCOPY );
-        if (flags & BF_TOP) PatBlt32( hdc, rc->left + 1, rc->top + 1,
-                                      rc->right - rc->left - 2, 1, PATCOPY );
-    }
-    if (edge & BDR_SUNKENINNER)
-    {
-        if (flags & BF_RIGHT) PatBlt32( hdc, rc->right - 2, rc->top + 1,
-                                        1, rc->bottom - rc->top - 2, PATCOPY );
-        if (flags & BF_BOTTOM) PatBlt32( hdc, rc->left + 1, rc->bottom - 2,
-                                         rc->right - rc->left - 2, 1, PATCOPY );
-    }
-
-    /* Then do all the sunken edges */
-
-    SelectObject32( hdc, sysColorObjects.hbrushBtnShadow );
-    if (edge & BDR_SUNKENOUTER)
-    {
-        if (flags & BF_LEFT) PatBlt32( hdc, rc->left, rc->top,
-                                       1, rc->bottom - rc->top - 1, PATCOPY );
-        if (flags & BF_TOP) PatBlt32( hdc, rc->left, rc->top,
-                                      rc->right - rc->left - 1, 1, PATCOPY );
-    }
-    if (edge & BDR_RAISEDOUTER)
-    {
-        if (flags & BF_RIGHT) PatBlt32( hdc, rc->right - 1, rc->top,
-                                        1, rc->bottom - rc->top, PATCOPY );
-        if (flags & BF_BOTTOM) PatBlt32( hdc, rc->left, rc->bottom - 1,
-                                         rc->right - rc->left, 1, PATCOPY );
-    }
-    if (edge & BDR_SUNKENINNER)
-    {
-        if (flags & BF_LEFT) PatBlt32( hdc, rc->left + 1, rc->top + 1, 
-                                       1, rc->bottom - rc->top - 2, PATCOPY );
-        if (flags & BF_TOP) PatBlt32( hdc, rc->left + 1, rc->top + 1,
-                                      rc->right - rc->left - 2, 1, PATCOPY );
-    }
-    if (edge & BDR_RAISEDINNER)
-    {
-        if (flags & BF_RIGHT) PatBlt32( hdc, rc->right - 2, rc->top + 1,
-                                        1, rc->bottom - rc->top - 2, PATCOPY );
-        if (flags & BF_BOTTOM) PatBlt32( hdc, rc->left + 1, rc->bottom - 2,
-                                         rc->right - rc->left - 2, 1, PATCOPY );
-    }
-
-    SelectObject32( hdc, hbrushOld );
-    return TRUE;
-}
-
-
-/**********************************************************************
- *          DrawFrameControl16  (USER.656)
- */
-BOOL16 WINAPI DrawFrameControl16( HDC16 hdc, LPRECT16 rc, UINT16 uType,
-                                  UINT16 uState )
-{
-    fprintf( stdnimp,"DrawFrameControl16(%x,%p,%d,%x), empty stub!\n",
-             hdc,rc,uType,uState );
-    return TRUE;
-}
-
-
-/**********************************************************************
- *          DrawFrameControl32  (USER32.157)
- */
-BOOL32 WINAPI DrawFrameControl32( HDC32 hdc, LPRECT32 rc, UINT32 uType,
-                                  UINT32 uState )
-{
-    fprintf( stdnimp,"DrawFrameControl32(%x,%p,%d,%x), empty stub!\n",
-             hdc,rc,uType,uState );
-    return TRUE;
-}
-
-/**********************************************************************
  *          DrawFrameControl32  (USER32.152)
  */
 BOOL32 WINAPI DrawAnimatedRects32( HWND32 hwnd, int idAni,
@@ -795,7 +680,7 @@
 	HDC32 hdc,HBRUSH32 hbrush,DRAWSTATEPROC drawstateproc,
 	LPARAM lparam,WPARAM32 wparam,INT32 x,INT32 y,INT32 z,INT32 a,UINT32 b
 ) {
-	fprintf(stderr,"DrawStateA(%x,%x,%p,0x%08lx,0x%08lx,%d,%d,%d,%d,%d),stub\n",
+	fprintf(stderr,"DrawStateA(%x,%x,%p,0x%08lx,0x%08x,%d,%d,%d,%d,%d),stub\n",
 		hdc,hbrush,drawstateproc,lparam,wparam,x,y,z,a,b
 	);
 	return TRUE;
diff --git a/graphics/win16drv/prtdrv.c b/graphics/win16drv/prtdrv.c
index 672dc89..086c41b 100644
--- a/graphics/win16drv/prtdrv.c
+++ b/graphics/win16drv/prtdrv.c
@@ -82,7 +82,7 @@
 	      pLPD = ptmpLPD;
 	}
     }
-    if (pLPD == NULL) printf("Couldn't find driver %s\n", pszDriver);
+    if (pLPD == NULL) fprintf(stderr,"Couldn't find driver %s\n", pszDriver);
     return pLPD;
 }
 
@@ -132,7 +132,7 @@
     }
     if (!bSlotFound)
     {
-	printf("Too many printers drivers loaded\n");
+	fprintf(stderr,"Too many printers drivers loaded\n");
 	return NULL;
     }
 
@@ -381,7 +381,7 @@
                                   lP1, lP2, lP3, lP4);
     }
     else 
-        printf("Failed to find device\n");
+        fprintf(stderr,"Failed to find device\n");
     
     dprintf_win16drv(stddeb, "PRTDRV_EnumDFonts: return %x\n", wRet);
     return wRet;
@@ -423,7 +423,7 @@
                                   lP1, wP2, lP3, lP4);
     }
     else 
-        printf("Failed to find device\n");
+        fprintf(stderr,"Failed to find device\n");
     
     dprintf_win16drv(stddeb, "PRTDRV_EnumDFonts: return %x\n", wRet);
     return wRet;
@@ -465,7 +465,7 @@
             nSize = sizeof(LOGFONT16); 
             break;
         default:
-	    printf("PRTDRV_RealizeObject: Object type %d not supported\n", wStyle);
+	    fprintf(stderr,"PRTDRV_RealizeObject: Object type %d not supported\n", wStyle);
             nSize = 0;
             
 	}
diff --git a/graphics/x11drv/xfont.c b/graphics/x11drv/xfont.c
index 4b112e2..7118cbe 100644
--- a/graphics/x11drv/xfont.c
+++ b/graphics/x11drv/xfont.c
@@ -2033,15 +2033,15 @@
 HFONT32 X11DRV_FONT_SelectObject( DC* dc, HFONT32 hfont, FONTOBJ* font )
 {
     HFONT32 hPrevFont = 0;
-    LOGFONT16	lf;
+    LOGFONT16 lf;
 
     if( CHECK_PFONT(dc->u.x.font) ) 
         XFONT_ReleaseCacheEntry( __PFONT(dc->u.x.font) );
 
     /* FIXME: do we need to pass anything back from here? */
     memcpy(&lf,&font->logfont,sizeof(lf));
-    lf.lfWidth	= font->logfont.lfWidth * dc->vportExtX/dc->wndExtX;
-    lf.lfHeight	= font->logfont.lfHeight* dc->vportExtY/dc->wndExtY;
+    lf.lfWidth  = font->logfont.lfWidth * dc->vportExtX/dc->wndExtX;
+    lf.lfHeight = font->logfont.lfHeight* dc->vportExtY/dc->wndExtY;
 
     dc->u.x.font = XFONT_RealizeFont( &lf );
     hPrevFont = dc->w.hFont;
diff --git a/if1632/advapi32.spec b/if1632/advapi32.spec
index 7920995..c776a65 100644
--- a/if1632/advapi32.spec
+++ b/if1632/advapi32.spec
@@ -1,6 +1,5 @@
 name	advapi32
 type	win32
-base	0
 
 0000 stub AbortSystemShutdownA
 0001 stub AbortSystemShutdownW
diff --git a/if1632/builtin.c b/if1632/builtin.c
index 6cc4527..0f2e4b9 100644
--- a/if1632/builtin.c
+++ b/if1632/builtin.c
@@ -33,6 +33,7 @@
     int                 size;       /* Number of functions */
     const void         *code_start; /* Start of DLL code */
     const void        **functions;  /* Pointer to functions table */
+    const void        **nodbg_functions;  /* Pointer to funcs without debug */
     const char * const *names;      /* Pointer to names table */
 } WIN32_DESCRIPTOR;
 
@@ -395,8 +396,8 @@
     relay = (BYTE *)relay - 11;  /* The relay entry point is 11 bytes long */
     funcs = dll->descr->u.win32.functions;
     for (i = 0; i < dll->descr->u.win32.size;i++) if (*funcs++ == relay) break;
-    sprintf( buffer, "%s.%d: %s",
-             dll->descr->name, i, dll->descr->u.win32.names[i] );
+    sprintf( buffer, "%s.%d: %s", dll->descr->name,
+             dll->descr->u.win32.base + i, dll->descr->u.win32.names[i] );
     return buffer;
 }
 
@@ -411,6 +412,7 @@
 {
     BUILTIN_DLL *dll = (BUILTIN_DLL *)pModule->pe_module;
     const WIN32_DESCRIPTOR *info = &dll->descr->u.win32;
+    WORD ordinal = 0;
 
     if (!dll) return NULL;
 
@@ -422,17 +424,25 @@
                         function, dll->descr->name );
         for (i = 0; i < info->size; i++)
             if (info->names[i] && !strcmp( function, info->names[i] ))
-                return (FARPROC32)info->functions[i];
+            {
+                ordinal = info->base + i;
+                break;
+            }
+        if (i >= info->size) return NULL;  /* not found */
     }
     else  /* Find function by ordinal */
     {
-        WORD ordinal = LOWORD(function);
+        ordinal = LOWORD(function);
         dprintf_module( stddeb, "Looking for ordinal %d in %s\n",
                         ordinal, dll->descr->name );
-        if (ordinal && ordinal < info->size)
-            return (FARPROC32)info->functions[ordinal - info->base];
+        if ((ordinal < info->base) || (ordinal >= info->base + info->size))
+            return NULL;  /* not found */
     }
-    return NULL;
+#if testing
+    if (!debugging_relay)
+        return (FARPROC32)info->nodbg_functions[ordinal - info->base];
+#endif
+    return (FARPROC32)info->functions[ordinal - info->base];
 }
 
 
diff --git a/if1632/comctl32.spec b/if1632/comctl32.spec
index d2f1efa..197247f 100644
--- a/if1632/comctl32.spec
+++ b/if1632/comctl32.spec
@@ -1,72 +1,71 @@
 name	comctl32
 type	win32
-base	2
 
 # Functions exported by the Win95 comctl32.dll 
 # (these need to have these exact ordinals, because some win95 dlls 
 #  import comctl32.dll by ordinal)
 
-00 stub MenuHelp
-01 stub ShowHideMenuCtl
-02 stub GetEffectiveClientRect
-03 stdcall DrawStatusTextA(long ptr ptr long) DrawStatusText32A
-04 stdcall CreateStatusWindowA(long ptr long long) CreateStatusWindow32A
-05 stub CreateToolbar
-06 stub CreateMappedBitmap
-07 stub Cctl1632_ThunkData32
-08 stub CreatePropertySheetPage
-09 stub CreatePropertySheetPageA
-10 stub CreatePropertySheetPageW
-11 stub MakeDragList
-12 stub LBItemFromPt
-13 stub DrawInsert
-14 stdcall CreateUpDownControl(long long long long long long long long long long long long) CreateUpDownControl
-15 stdcall InitCommonControls() InitCommonControls
-16 stub CreateStatusWindow
-17 stub CreateStatusWindowW
-18 stub CreateToolbarEx
-19 stub DestroyPropertySheetPage
-20 stub DllGetVersion
-21 stub DrawStatusText
-22 stub DrawStatusTextW
-23 stub ImageList_Add
-24 stub ImageList_AddIcon
-25 stub ImageList_AddMasked
-26 stub ImageList_BeginDrag
-27 stub ImageList_Copy
-28 stub ImageList_Create
-29 stub ImageList_Destroy
-30 stub ImageList_DragEnter
-31 stub ImageList_DragLeave
-32 stub ImageList_DragMove
-33 stub ImageList_DragShowNolock
-34 stub ImageList_Draw
-35 stub ImageList_DrawEx
-36 stub ImageList_EndDrag
-37 stub ImageList_GetBkColor
-38 stub ImageList_GetDragImage
-39 stub ImageList_GetIcon
-40 stub ImageList_GetIconSize
-41 stub ImageList_GetImageCount
-42 stub ImageList_GetImageInfo
-43 stub ImageList_GetImageRect
-44 stub ImageList_LoadImage
-45 stub ImageList_LoadImageA
-46 stub ImageList_LoadImageW
-47 stub ImageList_Merge
-48 stub ImageList_Read
-49 stub ImageList_Remove
-50 stub ImageList_Replace
-51 stub ImageList_ReplaceIcon
-52 stub ImageList_SetBkColor
-53 stub ImageList_SetDragCursorImage
-54 stub ImageList_SetFilter
-55 stub ImageList_SetIconSize
-56 stub ImageList_SetImageCount
-57 stub ImageList_SetOverlayImage
-58 stub ImageList_Write
-59 stub InitCommonControlsEx
-60 stub PropertySheet
-61 stub PropertySheetA
-62 stub PropertySheetW
-63 stub _TrackMouseEvent
+  2 stub MenuHelp
+  3 stub ShowHideMenuCtl
+  4 stub GetEffectiveClientRect
+  5 stdcall DrawStatusTextA(long ptr ptr long) DrawStatusText32A
+  6 stdcall CreateStatusWindowA(long ptr long long) CreateStatusWindow32A
+  7 stub CreateToolbar
+  8 stub CreateMappedBitmap
+  9 stub Cctl1632_ThunkData32
+ 10 stub CreatePropertySheetPage
+ 11 stub CreatePropertySheetPageA
+ 12 stub CreatePropertySheetPageW
+ 13 stub MakeDragList
+ 14 stub LBItemFromPt
+ 15 stub DrawInsert
+ 16 stdcall CreateUpDownControl(long long long long long long long long long long long long) CreateUpDownControl
+ 17 stdcall InitCommonControls() InitCommonControls
+ 18 stub CreateStatusWindow
+ 19 stub CreateStatusWindowW
+ 20 stub CreateToolbarEx
+ 21 stub DestroyPropertySheetPage
+ 22 stub DllGetVersion
+ 23 stub DrawStatusText
+ 24 stub DrawStatusTextW
+ 25 stub ImageList_Add
+ 26 stub ImageList_AddIcon
+ 27 stub ImageList_AddMasked
+ 28 stub ImageList_BeginDrag
+ 29 stub ImageList_Copy
+ 30 stub ImageList_Create
+ 31 stub ImageList_Destroy
+ 32 stub ImageList_DragEnter
+ 33 stub ImageList_DragLeave
+ 34 stub ImageList_DragMove
+ 35 stub ImageList_DragShowNolock
+ 36 stub ImageList_Draw
+ 37 stub ImageList_DrawEx
+ 38 stub ImageList_EndDrag
+ 39 stub ImageList_GetBkColor
+ 40 stub ImageList_GetDragImage
+ 41 stub ImageList_GetIcon
+ 42 stub ImageList_GetIconSize
+ 43 stub ImageList_GetImageCount
+ 44 stub ImageList_GetImageInfo
+ 45 stub ImageList_GetImageRect
+ 46 stub ImageList_LoadImage
+ 47 stub ImageList_LoadImageA
+ 48 stub ImageList_LoadImageW
+ 49 stub ImageList_Merge
+ 50 stub ImageList_Read
+ 51 stub ImageList_Remove
+ 52 stub ImageList_Replace
+ 53 stub ImageList_ReplaceIcon
+ 54 stub ImageList_SetBkColor
+ 55 stub ImageList_SetDragCursorImage
+ 56 stub ImageList_SetFilter
+ 57 stub ImageList_SetIconSize
+ 58 stub ImageList_SetImageCount
+ 59 stub ImageList_SetOverlayImage
+ 60 stub ImageList_Write
+ 61 stub InitCommonControlsEx
+ 62 stub PropertySheet
+ 63 stub PropertySheetA
+ 64 stub PropertySheetW
+ 65 stub _TrackMouseEvent
diff --git a/if1632/comdlg32.spec b/if1632/comdlg32.spec
index a42e1a1..e7136ab 100644
--- a/if1632/comdlg32.spec
+++ b/if1632/comdlg32.spec
@@ -1,29 +1,28 @@
 name	comdlg32
 type	win32
-base	1
 
-0000 stub ArrowBtnWndProc
-0001 stub ChooseColorA
-0002 stub ChooseColorW
-0003 stub ChooseFontA
-0004 stub ChooseFontW
-0005 stdcall CommDlgExtendedError() CommDlgExtendedError
-0006 stub FindTextA
-0007 stub FindTextW
-0008 stdcall GetFileTitleA(ptr ptr long) GetFileTitle32A
-0009 stdcall GetFileTitleW(ptr ptr long) GetFileTitle32W
-0010 stdcall GetOpenFileNameA(ptr) GetOpenFileName32A
-0011 stdcall GetOpenFileNameW(ptr) GetOpenFileName32W
-0012 stdcall GetSaveFileNameA(ptr) GetSaveFileName32A
-0013 stdcall GetSaveFileNameW(ptr) GetSaveFileName32A
-0014 stub LoadAlterBitmap
-0015 stub PageSetupDlgA
-0016 stub PageSetupDlgW
-0017 return PrintDlgA 4 0
-0018 return PrintDlgW 4 0
-0019 stub ReplaceTextA
-0020 stub ReplaceTextW
-0021 stub WantArrows
-0022 stub dwLBSubclass
-0023 stub dwOKSubclass
+ 0 stub ArrowBtnWndProc
+ 1 stub ChooseColorA
+ 2 stub ChooseColorW
+ 3 stub ChooseFontA
+ 4 stub ChooseFontW
+ 5 stdcall CommDlgExtendedError() CommDlgExtendedError
+ 6 stub FindTextA
+ 7 stub FindTextW
+ 8 stdcall GetFileTitleA(ptr ptr long) GetFileTitle32A
+ 9 stdcall GetFileTitleW(ptr ptr long) GetFileTitle32W
+10 stdcall GetOpenFileNameA(ptr) GetOpenFileName32A
+11 stdcall GetOpenFileNameW(ptr) GetOpenFileName32W
+12 stdcall GetSaveFileNameA(ptr) GetSaveFileName32A
+13 stdcall GetSaveFileNameW(ptr) GetSaveFileName32A
+14 stub LoadAlterBitmap
+15 stub PageSetupDlgA
+16 stub PageSetupDlgW
+17 return PrintDlgA 4 0
+18 return PrintDlgW 4 0
+19 stub ReplaceTextA
+20 stub ReplaceTextW
+21 stub WantArrows
+22 stub dwLBSubclass
+23 stub dwOKSubclass
 
diff --git a/if1632/compobj.spec b/if1632/compobj.spec
index 3f81756..1969f38 100644
--- a/if1632/compobj.spec
+++ b/if1632/compobj.spec
@@ -18,9 +18,9 @@
 15 pascal CoDisconnectObject(ptr long) CoDisconnectObject
 16 stub CORELEASEMARSHALDATA
 17 stub COFREEUNUSEDLIBRARIES
-18 stub ISEQUALGUID
-19 pascal STRINGFROMCLSID(ptr ptr) StringFromCLSID
-20 pascal CLSIDFROMSTRING(str ptr) CLSIDFromString
+18 pascal16 IsEqualGUID(ptr ptr) IsEqualGUID
+19 pascal StringFromCLSID(ptr ptr) StringFromCLSID
+20 pascal CLSIDFromString(str ptr) CLSIDFromString
 21 stub ISVALIDPTRIN
 22 stub ISVALIDPTROUT
 23 stub ISVALIDINTERFACE
diff --git a/if1632/crtdll.spec b/if1632/crtdll.spec
index 5a61f97..993bb1d 100644
--- a/if1632/crtdll.spec
+++ b/if1632/crtdll.spec
@@ -1,107 +1,106 @@
 # C RunTime DLL. All functions use cdecl!
 name	crtdll
 type	win32
-base	1
 
-001 cdecl ??2@YAPAXI@Z(long) CRTDLL_new
-002 cdecl ??3@YAXPAX@Z(long) CRTDLL_delete
-003 cdecl ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z(ptr) CRTDLL_set_new_handler
-004 stub _CIacos
-005 stub _CIasin
-006 stub _CIatan
-007 stub _CIatan2
-008 stub _CIcos
-009 stub _CIcosh
-010 stub _CIexp
-011 stub _CIfmod
-012 stub _CIlog
-013 stub _CIlog10
-014 stub _CIpow
-015 stub _CIsin
-016 stub _CIsinh
-017 stub _CIsqrt
-018 stub _CItan
-019 stub _CItanh
-020 stub _HUGE_dll
-021 stub _XcptFilter
-022 cdecl __GetMainArgs(ptr ptr ptr long) CRTDLL__GetMainArgs
-023 extern __argc_dll CRTDLL_argc_dll
-024 extern __argv_dll CRTDLL_argv_dll
-025 stub __dllonexit
-026 stub __doserrno
-027 stub __fpecode
-028 stub __isascii
-029 stub __iscsym
-030 stub __iscsymf
-031 stub __mb_cur_max_dll
-032 stub __pxcptinfoptrs
-033 stub __threadhandle
-034 stub __threadid
-035 stub __toascii
-036 stub _abnormal_termination
-037 stub _access
-038 extern _acmdln_dll CRTDLL_acmdln_dll
-039 stub _aexit_rtn_dll
-040 stub _amsg_exit
-041 stub _assert
-042 extern _basemajor_dll CRTDLL_basemajor_dll
-043 extern _baseminor_dll CRTDLL_baseminor_dll
-044 extern _baseversion_dll CRTDLL_baseversion_dll
-045 stub _beep
-046 stub _beginthread
-047 stub _c_exit
-048 stub _cabs
-049 stub _cexit
-050 stub _cgets
-051 cdecl _chdir(ptr) CRTDLL__chdir
-052 cdecl _chdrive(long) CRTDLL__chdrive
-053 stub _chgsign
-054 stub _chmod
-055 stub _chsize
-056 stub _clearfp
-057 stub _close
-058 stub _commit
-059 long _commode_dll(0)
-060 stub _control87
-061 stub _controlfp
-062 stub _copysign
-063 stub _cprintf
-064 stub _cpumode_dll
-065 stub _cputs
-066 stub _creat
-067 stub _cscanf
-068 stub _ctype
-069 stub _cwait
-070 stub _daylight_dll
-071 stub _dup
-072 stub _dup2
-073 stub _ecvt
-074 stub _endthread
-075 extern _environ_dll CRTDLL_environ_dll
-076 stub _eof
-077 cdecl _errno() CRTDLL__errno
-078 stub _except_handler2
-079 stub _execl
-080 stub _execle
-081 stub _execlp
-082 stub _execlpe
-083 stub _execv
-084 stub _execve
-085 stub _execvp
-086 stub _execvpe
-087 stub _exit
-088 stub _expand
-089 stub _fcloseall
-090 stub _fcvt
-091 stub _fdopen
-092 stub _fgetchar
-093 stub _fgetwchar
-094 stub _filbuf
-095 stub _fileinfo_dll
-096 stub _filelength
-097 stub _fileno
-098 stub _findclose
-099 stub _findfirst
+  1 cdecl ??2@YAPAXI@Z(long) CRTDLL_new
+  2 cdecl ??3@YAXPAX@Z(long) CRTDLL_delete
+  3 cdecl ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z(ptr) CRTDLL_set_new_handler
+  4 stub _CIacos
+  5 stub _CIasin
+  6 stub _CIatan
+  7 stub _CIatan2
+  8 stub _CIcos
+  9 stub _CIcosh
+ 10 stub _CIexp
+ 11 stub _CIfmod
+ 12 stub _CIlog
+ 13 stub _CIlog10
+ 14 stub _CIpow
+ 15 stub _CIsin
+ 16 stub _CIsinh
+ 17 stub _CIsqrt
+ 18 stub _CItan
+ 19 stub _CItanh
+ 20 stub _HUGE_dll
+ 21 stub _XcptFilter
+ 22 cdecl __GetMainArgs(ptr ptr ptr long) CRTDLL__GetMainArgs
+ 23 extern __argc_dll CRTDLL_argc_dll
+ 24 extern __argv_dll CRTDLL_argv_dll
+ 25 stub __dllonexit
+ 26 stub __doserrno
+ 27 stub __fpecode
+ 28 stub __isascii
+ 29 stub __iscsym
+ 30 stub __iscsymf
+ 31 stub __mb_cur_max_dll
+ 32 stub __pxcptinfoptrs
+ 33 stub __threadhandle
+ 34 stub __threadid
+ 35 stub __toascii
+ 36 stub _abnormal_termination
+ 37 stub _access
+ 38 extern _acmdln_dll CRTDLL_acmdln_dll
+ 39 stub _aexit_rtn_dll
+ 40 stub _amsg_exit
+ 41 stub _assert
+ 42 extern _basemajor_dll CRTDLL_basemajor_dll
+ 43 extern _baseminor_dll CRTDLL_baseminor_dll
+ 44 extern _baseversion_dll CRTDLL_baseversion_dll
+ 45 stub _beep
+ 46 stub _beginthread
+ 47 stub _c_exit
+ 48 stub _cabs
+ 49 cdecl _cexit(long) CRTDLL__cexit
+ 50 stub _cgets
+ 51 cdecl _chdir(ptr) CRTDLL__chdir
+ 52 cdecl _chdrive(long) CRTDLL__chdrive
+ 53 stub _chgsign
+ 54 stub _chmod
+ 55 stub _chsize
+ 56 stub _clearfp
+ 57 cdecl _close(long) CRTDLL__close
+ 58 stub _commit
+ 59 long _commode_dll(0)
+ 60 stub _control87
+ 61 stub _controlfp
+ 62 stub _copysign
+ 63 stub _cprintf
+ 64 stub _cpumode_dll
+ 65 stub _cputs
+ 66 stub _creat
+ 67 stub _cscanf
+ 68 stub _ctype
+ 69 stub _cwait
+ 70 stub _daylight_dll
+ 71 stub _dup
+ 72 stub _dup2
+ 73 stub _ecvt
+ 74 stub _endthread
+ 75 extern _environ_dll CRTDLL_environ_dll
+ 76 stub _eof
+ 77 cdecl _errno() CRTDLL__errno
+ 78 stub _except_handler2
+ 79 stub _execl
+ 80 stub _execle
+ 81 stub _execlp
+ 82 stub _execlpe
+ 83 stub _execv
+ 84 stub _execve
+ 85 stub _execvp
+ 86 stub _execvpe
+ 87 stub _exit
+ 88 stub _expand
+ 89 stub _fcloseall
+ 90 stub _fcvt
+ 91 cdecl _fdopen(long ptr) CRTDLL__fdopen
+ 92 stub _fgetchar
+ 93 stub _fgetwchar
+ 94 stub _filbuf
+ 95 stub _fileinfo_dll
+ 96 stub _filelength
+ 97 stub _fileno
+ 98 stub _findclose
+ 99 stub _findfirst
 100 stub _findnext
 101 stub _finite
 102 stub _flsbuf
@@ -122,7 +121,7 @@
 117 stub _get_osfhandle
 118 stub _getch
 119 stub _getche
-120 stub _getcwd
+120 cdecl _getcwd(ptr long) CRTDLL__getcwd
 121 stub _getdcwd
 122 stub _getdiskfree
 123 stub _getdllprocaddr
@@ -167,7 +166,7 @@
 162 stub _ismbslead
 163 stub _ismbstrail
 164 stub _isnan
-165 stub _itoa
+165 cdecl _itoa(long ptr long) CRTDLL__itoa
 166 stub _itow
 167 stub _j0
 168 stub _j1
@@ -178,7 +177,7 @@
 173 register _local_unwind2(ptr long) CRTDLL__local_unwind2
 174 stub _locking
 175 stub _logb
-176 stub _lrotl
+176 cdecl _lrotl (long long) CRTDLL__lrotl
 177 stub _lrotr
 178 stub _lsearch
 179 stub _lseek
@@ -241,8 +240,8 @@
 236 stub _msize
 237 stub _nextafter
 238 stub _onexit
-239 stub _open
-240 stub _open_osfhandle
+239 cdecl _open(ptr long) CRTDLL__open
+240 cdecl _open_osfhandle(long long) CRTDLL__open_osfhandle
 241 extern _osmajor_dll CRTDLL_osmajor_dll
 242 extern _osminor_dll CRTDLL_osminor_dll
 243 long _osmode_dll(0)
@@ -269,7 +268,7 @@
 264 stub _setjmp
 265 cdecl _setmode(long long) CRTDLL__setmode
 266 stub _setsystime
-267 stub _sleep
+267 cdecl _sleep(long) sleep
 268 stub _snprintf
 269 stub _snwprintf
 270 stub _sopen
@@ -284,18 +283,18 @@
 279 stub _splitpath
 280 stub _stat
 281 stub _statusfp
-282 cdecl _strcmpi(ptr ptr) lstrcmpi32A
+282 cdecl _strcmpi(ptr ptr) CRTDLL__strcmpi
 283 stub _strdate
 284 stub _strdec
 285 cdecl _strdup(ptr) CRTDLL__strdup
 286 stub _strerror
-287 cdecl _stricmp(ptr ptr) lstrcmpi32A
+287 cdecl _stricmp(ptr ptr) CRTDLL__strcmpi
 288 stub _stricoll
 289 stub _strinc
-290 stub _strlwr
+290 cdecl _strlwr(ptr) CRTDLL__strlwr
 291 stub _strncnt
 292 stub _strnextc
-293 cdecl _strnicmp(ptr ptr long) lstrncmpi32A
+293 cdecl _strnicmp(ptr ptr long) CRTDLL__strnicmp
 294 stub _strninc
 295 stub _strnset
 296 stub _strrev
@@ -307,7 +306,7 @@
 302 stub _sys_errlist
 303 stub _sys_nerr_dll
 304 stub _tell
-305 stub _tempnam
+305 cdecl _tempnam(ptr ptr) CRTDLL__tempnam
 306 stub _timezone_dll
 307 stub _tolower
 308 stub _toupper
@@ -317,16 +316,16 @@
 312 stub _ultow
 313 stub _umask
 314 stub _ungetch
-315 stub _unlink
+315 cdecl _unlink(ptr) CRTDLL__unlink
 316 stub _unloaddll
 317 stub _utime
 318 stub _vsnprintf
 319 stub _vsnwprintf
 320 stub _wcsdup
-321 cdecl _wcsicmp(ptr ptr) lstrcmpi32W
+321 cdecl _wcsicmp(ptr ptr) CRTDLL__wcsicmp
 322 cdecl _wcsicoll(ptr ptr) CRTDLL__wcsicoll
 323 cdecl _wcslwr(ptr) CRTDLL__wcslwr
-324 stub _wcsnicmp
+324 cdecl _wcsnicmp(ptr ptr long) CRTDLL__wcsnicmp
 325 stub _wcsnset
 326 cdecl _wcsrev(ptr) CRTDLL__wcsrev
 327 stub _wcsset
@@ -341,72 +340,72 @@
 336 stub _y1
 337 stub _yn
 338 stub abort
-339 cdecl abs(long) CRTDLL_abs
-340 cdecl acos(long) CRTDLL_acos
+339 cdecl abs(long) abs
+340 cdecl acos(double) acos
 341 cdecl asctime(ptr) asctime
-342 cdecl asin(long) CRTDLL_asin
-343 cdecl atan(long) CRTDLL_atan
-344 cdecl atan2(long long) CRTDLL_atan2
+342 cdecl asin(double) asin
+343 cdecl atan(double) atan
+344 cdecl atan2(double double) atan2
 345 cdecl atexit(ptr) CRTDLL_atexit
-346 cdecl atof(ptr) CRTDLL_atof
-347 cdecl atoi(ptr) CRTDLL_atoi
-348 cdecl atol(ptr) CRTDLL_atol
+346 cdecl atof(ptr) atof
+347 cdecl atoi(ptr) atoi
+348 cdecl atol(ptr) atol
 349 stub bsearch
 350 cdecl calloc(long long) CRTDLL_calloc
 351 stub ceil
 352 stub clearerr
 353 cdecl clock() clock
-354 cdecl cos(long) CRTDLL_cos
-355 cdecl cosh(long) CRTDLL_cosh
+354 cdecl cos(double) cos
+355 cdecl cosh(double) cosh
 356 cdecl ctime(ptr) ctime
 357 stub difftime
 358 cdecl div(long long) div
 359 cdecl exit(long) CRTDLL_exit
-360 cdecl exp(long) CRTDLL_exp
-361 cdecl fabs(long) CRTDLL_fabs
+360 cdecl exp(double) exp
+361 cdecl fabs(double) fabs
 362 cdecl fclose(ptr) CRTDLL_fclose
-363 stub feof
+363 cdecl feof(ptr) CRTDLL_feof
 364 stub ferror
 365 cdecl fflush(ptr) CRTDLL_fflush
-366 stub fgetc
+366 cdecl fgetc(ptr) CRTDLL_fgetc
 367 stub fgetpos
-368 stub fgets
+368 cdecl fgets(ptr long ptr) CRTDLL_fgets
 369 stub fgetwc
 370 stub floor
-371 stub fmod
-372 stub fopen
-373 cdecl fprintf() CRTDLL_fprintf
-374 stub fputc
-375 stub fputs
+371 cdecl fmod(double double) fmod
+372 cdecl fopen(ptr ptr) CRTDLL_fopen
+373 varargs fprintf() CRTDLL_fprintf
+374 cdecl fputc(long ptr) CRTDLL_fputc
+375 cdecl fputs(ptr ptr) CRTDLL_fputs
 376 stub fputwc
-377 stub fread
+377 cdecl fread(ptr long long ptr) CRTDLL_fread
 378 cdecl free(ptr) CRTDLL_free
 379 stub freopen
 380 stub frexp
 381 stub fscanf
-382 stub fseek
+382 cdecl fseek(ptr long long) CRTDLL_fseek
 383 stub fsetpos
-384 stub ftell
+384 cdecl ftell(ptr) CRTDLL_ftell
 385 stub fwprintf
-386 stub fwrite
+386 cdecl fwrite(ptr long long ptr) CRTDLL_fwrite 
 387 stub fwscanf
-388 stub getc
+388 cdecl getc(ptr) CRTDLL_getc
 389 stub getchar
 390 stub getenv
 391 cdecl gets(ptr) CRTDLL_gets
 392 cdecl gmtime(ptr) gmtime
 393 stub is_wctype
-394 cdecl isalnum(long) CRTDLL_isalnum
-395 cdecl isalpha(long) CRTDLL_isalpha
-396 cdecl iscntrl(long) CRTDLL_iscntrl
-397 cdecl isdigit(long) CRTDLL_isdigit
-398 cdecl isgraph(long) CRTDLL_isgraph
+394 cdecl isalnum(long) isalnum
+395 cdecl isalpha(long) isalpha
+396 cdecl iscntrl(long) iscntrl
+397 cdecl isdigit(long) isdigit
+398 cdecl isgraph(long) isgraph
 399 stub isleadbyte
-400 cdecl islower(long) CRTDLL_islower
-401 cdecl isprint(long) CRTDLL_isprint
-402 cdecl ispunct(long) CRTDLL_ispunct
-403 cdecl isspace(long) CRTDLL_isspace
-404 cdecl isupper(long) CRTDLL_isupper
+400 cdecl islower(long) islower
+401 cdecl isprint(long) isprint
+402 cdecl ispunct(long) ispunct
+403 cdecl isspace(long) isspace
+404 cdecl isupper(long) isupper
 405 stub iswalnum
 406 stub iswalpha
 407 stub iswascii
@@ -420,19 +419,19 @@
 415 stub iswspace
 416 stub iswupper
 417 stub iswxdigit
-418 cdecl isxdigit(long) CRTDLL_isxdigit
-419 cdecl labs(long) CRTDLL_labs
+418 cdecl isxdigit(long) isxdigit
+419 cdecl labs(long) labs
 420 stub ldexp
 421 cdecl ldiv(long long) ldiv
 422 stub localeconv
 423 cdecl localtime(ptr) localtime
-424 cdecl log(long) CRTDLL_log
-425 cdecl log10(long) CRTDLL_log10
+424 cdecl log(double) log
+425 cdecl log10(double) log10
 426 stub longjmp
 427 cdecl malloc(ptr) CRTDLL_malloc
-428 stub mblen
+428 cdecl mblen(ptr long) CRTDLL_mblen
 429 cdecl mbstowcs(ptr ptr long) CRTDLL_mbstowcs
-430 cdecl mbtowc(long) CRTDLL_mbtowc
+430 cdecl mbtowc(ptr ptr long) CRTDLL_mbtowc
 431 cdecl memchr(ptr long long) memchr
 432 cdecl memcmp(ptr ptr long) memcmp
 433 cdecl memcpy(ptr ptr long) memcpy
@@ -441,11 +440,11 @@
 436 cdecl mktime(ptr) mktime
 437 stub modf
 438 stub perror
-439 cdecl pow(long long) CRTDLL_pow
-440 cdecl printf() CRTDLL_printf
-441 stub putc
+439 cdecl pow(double double) pow
+440 varargs printf() printf
+441 cdecl putc(long ptr) CRTDLL_putc
 442 cdecl putchar(long) CRTDLL_putchar
-443 stub puts
+443 cdecl puts(ptr) CRTDLL_puts
 444 cdecl qsort(ptr long long ptr) qsort
 445 stub raise
 446 cdecl rand() CRTDLL_rand
@@ -454,16 +453,16 @@
 449 stub rename
 450 stub rewind
 451 stub scanf
-452 stub setbuf
+452 cdecl setbuf(ptr ptr) CRTDLL_setbuf
 453 cdecl setlocale(long ptr) CRTDLL_setlocale
 454 stub setvbuf
 455 stub signal
-456 cdecl sin(long) CRTDLL_sin
-457 cdecl sinh(long) CRTDLL_sinh
-458 cdecl sprintf() CRTDLL_sprintf
-459 cdecl sqrt(long long) CRTDLL_sqrt
+456 cdecl sin(double) sin
+457 cdecl sinh(double) sinh
+458 varargs sprintf() wsprintf32A
+459 cdecl sqrt(double) sqrt
 460 cdecl srand(long) CRTDLL_srand
-461 cdecl sscanf() CRTDLL_sscanf
+461 varargs sscanf() sscanf
 462 cdecl strcat(ptr ptr) strcat
 463 cdecl strchr(ptr long) strchr
 464 cdecl strcmp(ptr ptr) strcmp
@@ -480,42 +479,42 @@
 475 cdecl strrchr(ptr long) strrchr
 476 cdecl strspn(ptr ptr) strspn
 477 cdecl strstr(ptr ptr) strstr
-478 stub strtod
+478 cdecl strtod(ptr ptr) strtod
 479 cdecl strtok(ptr ptr) strtok
 480 cdecl strtol(ptr ptr long) strtol
 481 cdecl strtoul(ptr ptr long) strtoul
 482 cdecl strxfrm(ptr ptr long) strxfrm
-483 cdecl swprintf() CRTDLL_swprintf
+483 varargs swprintf() wsprintf32W
 484 stub swscanf
-485 stub system
-486 cdecl tan(long) CRTDLL_tan
-487 cdecl tanh(long) CRTDLL_tanh
+485 cdecl system(ptr) CRTDLL_system
+486 cdecl tan(double) tan
+487 cdecl tanh(double) tanh
 488 cdecl time(ptr) CRTDLL_time
 489 stub tmpfile
-490 stub tmpnam
-491 cdecl tolower(long) CRTDLL_tolower
-492 cdecl toupper(long) CRTDLL_toupper
+490 cdecl tmpnam(ptr) CRTDLL_tmpnam
+491 cdecl tolower(long) tolower
+492 cdecl toupper(long) toupper
 493 stub towlower
 494 cdecl towupper(long) CRTDLL_towupper
 495 stub ungetc
 496 stub ungetwc
-497 stub vfprintf
+497 cdecl vfprintf(ptr ptr ptr) CRTDLL_vfprintf
 498 stub vfwprintf
 499 stub vprintf
-500 cdecl vsprintf() CRTDLL_vsprintf
-501 stub vswprintf
+500 cdecl vsprintf(ptr ptr ptr) CRTDLL_vsprintf
+501 cdecl vswprintf(ptr ptr ptr) CRTDLL_vswprintf
 502 stub vwprintf
-503 cdecl wcscat(ptr ptr) lstrcat32W
+503 cdecl wcscat(ptr ptr) CRTDLL_wcscat
 504 cdecl wcschr(ptr long) CRTDLL_wcschr
-505 stub wcscmp
+505 cdecl wcscmp(ptr ptr) CRTDLL_wcscmp
 506 cdecl wcscoll(ptr ptr) CRTDLL_wcscoll
-507 cdecl wcscpy(ptr ptr) lstrcpy32W
+507 cdecl wcscpy(ptr ptr) CRTDLL_wcscpy
 508 cdecl wcscspn(ptr ptr) CRTDLL_wcscspn
 509 stub wcsftime
-510 cdecl wcslen(ptr) lstrlen32W
-511 cdecl wcsncat(ptr ptr long) lstrcatn32W
-512 cdecl wcsncmp(ptr ptr long) lstrncmp32W
-513 cdecl wcsncpy(ptr ptr long) lstrcpyn32W
+510 cdecl wcslen(ptr) CRTDLL_wcslen
+511 cdecl wcsncat(ptr ptr long) CRTDLL_wcsncat
+512 cdecl wcsncmp(ptr ptr long) CRTDLL_wcsncmp
+513 cdecl wcsncpy(ptr ptr long) CRTDLL_wcsncpy
 514 stub wcspbrk
 515 cdecl wcsrchr(ptr long) CRTDLL_wcsrchr
 516 cdecl wcsspn(ptr ptr) CRTDLL_wcsspn
@@ -523,7 +522,7 @@
 518 stub wcstod
 519 stub wcstok
 520 stub wcstol
-521 stub wcstombs
+521 cdecl wcstombs(ptr ptr long) CRTDLL_wcstombs
 522 stub wcstoul
 523 stub wcsxfrm
 524 stub wctomb
diff --git a/if1632/gdi.spec b/if1632/gdi.spec
index 1b0f157..eedf981 100644
--- a/if1632/gdi.spec
+++ b/if1632/gdi.spec
@@ -38,7 +38,7 @@
 30  pascal16 SaveDC(word) SaveDC16
 31  pascal   SetPixel(word s_word s_word long) SetPixel16
 32  pascal16 OffsetClipRgn(word s_word s_word) OffsetClipRgn16
-33  pascal16 TextOut(word s_word s_word ptr word) TextOut16
+33  pascal16 TextOut(word s_word s_word str word) TextOut16
 34  pascal16 BitBlt( word s_word s_word s_word s_word word s_word s_word long)
              BitBlt16
 35  pascal16 StretchBlt(word s_word s_word s_word s_word word s_word s_word
@@ -236,7 +236,7 @@
                    s_word s_word) Chord16
 349 pascal SetMapperFlags(word long) SetMapperFlags16
 350 pascal16 GetCharWidth(word word word ptr) GetCharWidth16
-351 pascal16 ExtTextOut(word s_word s_word word ptr ptr word ptr) ExtTextOut16
+351 pascal16 ExtTextOut(word s_word s_word word ptr str word ptr) ExtTextOut16
 352 stub GetPhysicalFontHandle
 353 stub GetAspectRatioFilter
 354 stub ShrinkGDIHeap
diff --git a/if1632/gdi32.spec b/if1632/gdi32.spec
index fd5c543..2baeae2 100644
--- a/if1632/gdi32.spec
+++ b/if1632/gdi32.spec
@@ -1,398 +1,397 @@
 name	gdi32
 type	win32
-base	1
 
-0000 stub AbortDoc
-0001 stub AbortPath
-0002 stdcall AddFontResourceA(ptr) AddFontResource32A
-0003 stub AddFontResourceTracking
-0004 stdcall AddFontResourceW(ptr) AddFontResource32W
-0005 stub AngleArc
-0006 stdcall AnimatePalette(long long long ptr) AnimatePalette32
-0007 stdcall Arc(long long long long long long long long long) Arc32
-0008 stub ArcTo
-0009 stub BeginPath
-0010 stdcall BitBlt(long long long long long long long long long) BitBlt32
-0011 stub CancelDC
-0012 stub CheckColorsInGamut
-0013 stub ChoosePixelFormat
-0014 stdcall Chord(long long long long long long long long long) Chord32
-0015 stub CloseEnhMetaFile
-0016 stub CloseFigure
-0017 stub CloseMetaFile
-0018 stub ColorMatchToTarget
-0019 stdcall CombineRgn(long long long long) CombineRgn32
-0020 stub CombineTransform
-0021 stub CopyEnhMetaFileA
-0022 stub CopyEnhMetaFileW
-0023 stdcall CopyMetaFileA(long ptr) CopyMetaFile32A
-0024 stdcall CopyMetaFileW(long ptr) CopyMetaFile32W
-0025 stdcall CreateBitmap(long long long long ptr) CreateBitmap32
-0026 stdcall CreateBitmapIndirect(ptr) CreateBitmapIndirect32
-0027 stdcall CreateBrushIndirect(ptr) CreateBrushIndirect32
-0028 stub CreateColorSpaceA
-0029 stub CreateColorSpaceW
-0030 stdcall CreateCompatibleBitmap(long long long) CreateCompatibleBitmap32
-0031 stdcall CreateCompatibleDC(long) CreateCompatibleDC32
-0032 stdcall CreateDCA(ptr ptr ptr ptr) CreateDC32A
-0033 stdcall CreateDCW(ptr ptr ptr ptr) CreateDC32W
-0034 stdcall CreateDIBPatternBrush(long long) CreateDIBPatternBrush32
-0035 stub CreateDIBPatternBrushPt
-0036 stub CreateDIBSection
-0037 stdcall CreateDIBitmap(long ptr long ptr ptr long) CreateDIBitmap32
-0038 stdcall CreateDiscardableBitmap(long long long) CreateDiscardableBitmap32
-0039 stdcall CreateEllipticRgn(long long long long) CreateEllipticRgn32
-0040 stdcall CreateEllipticRgnIndirect(ptr) CreateEllipticRgnIndirect32
-0041 stub CreateEnhMetaFileA
-0042 stub CreateEnhMetaFileW
-0043 stdcall CreateFontA(long long long long long long long long
+  0 stub AbortDoc
+  1 stub AbortPath
+  2 stdcall AddFontResourceA(ptr) AddFontResource32A
+  3 stub AddFontResourceTracking
+  4 stdcall AddFontResourceW(ptr) AddFontResource32W
+  5 stub AngleArc
+  6 stdcall AnimatePalette(long long long ptr) AnimatePalette32
+  7 stdcall Arc(long long long long long long long long long) Arc32
+  8 stub ArcTo
+  9 stub BeginPath
+ 10 stdcall BitBlt(long long long long long long long long long) BitBlt32
+ 11 stub CancelDC
+ 12 stub CheckColorsInGamut
+ 13 stub ChoosePixelFormat
+ 14 stdcall Chord(long long long long long long long long long) Chord32
+ 15 stub CloseEnhMetaFile
+ 16 stub CloseFigure
+ 17 stub CloseMetaFile
+ 18 stub ColorMatchToTarget
+ 19 stdcall CombineRgn(long long long long) CombineRgn32
+ 20 stub CombineTransform
+ 21 stub CopyEnhMetaFileA
+ 22 stub CopyEnhMetaFileW
+ 23 stdcall CopyMetaFileA(long ptr) CopyMetaFile32A
+ 24 stdcall CopyMetaFileW(long ptr) CopyMetaFile32W
+ 25 stdcall CreateBitmap(long long long long ptr) CreateBitmap32
+ 26 stdcall CreateBitmapIndirect(ptr) CreateBitmapIndirect32
+ 27 stdcall CreateBrushIndirect(ptr) CreateBrushIndirect32
+ 28 stub CreateColorSpaceA
+ 29 stub CreateColorSpaceW
+ 30 stdcall CreateCompatibleBitmap(long long long) CreateCompatibleBitmap32
+ 31 stdcall CreateCompatibleDC(long) CreateCompatibleDC32
+ 32 stdcall CreateDCA(ptr ptr ptr ptr) CreateDC32A
+ 33 stdcall CreateDCW(ptr ptr ptr ptr) CreateDC32W
+ 34 stdcall CreateDIBPatternBrush(long long) CreateDIBPatternBrush32
+ 35 stub CreateDIBPatternBrushPt
+ 36 stdcall CreateDIBSection(long ptr long ptr long long) CreateDIBSection
+ 37 stdcall CreateDIBitmap(long ptr long ptr ptr long) CreateDIBitmap32
+ 38 stdcall CreateDiscardableBitmap(long long long) CreateDiscardableBitmap32
+ 39 stdcall CreateEllipticRgn(long long long long) CreateEllipticRgn32
+ 40 stdcall CreateEllipticRgnIndirect(ptr) CreateEllipticRgnIndirect32
+ 41 stub CreateEnhMetaFileA
+ 42 stub CreateEnhMetaFileW
+ 43 stdcall CreateFontA(long long long long long long long long
                         long long long long long ptr) CreateFont32A
-0044 stdcall CreateFontIndirectA(ptr) CreateFontIndirect32A
-0045 stdcall CreateFontIndirectW(ptr) CreateFontIndirect32W
-0046 stdcall CreateFontW(long long long long long long long long
+ 44 stdcall CreateFontIndirectA(ptr) CreateFontIndirect32A
+ 45 stdcall CreateFontIndirectW(ptr) CreateFontIndirect32W
+ 46 stdcall CreateFontW(long long long long long long long long
                         long long long long long ptr) CreateFont32W
-0047 stub CreateHalftonePalette
-0048 stdcall CreateHatchBrush(long long) CreateHatchBrush32
-0049 stdcall CreateICA(ptr ptr ptr ptr) CreateIC32A
-0050 stdcall CreateICW(ptr ptr ptr ptr) CreateIC32W
-0051 stub CreateMetaFileA
-0052 stub CreateMetaFileW
-0053 stdcall CreatePalette(ptr) CreatePalette32
-0054 stdcall CreatePatternBrush(long) CreatePatternBrush32
-0055 stdcall CreatePen(long long long) CreatePen32
-0056 stdcall CreatePenIndirect(ptr) CreatePenIndirect32
-0057 stdcall CreatePolyPolygonRgn(ptr ptr long long) CreatePolyPolygonRgn32
-0058 stdcall CreatePolygonRgn(ptr long long) CreatePolygonRgn32
-0059 stdcall CreateRectRgn(long long long long) CreateRectRgn32
-0060 stdcall CreateRectRgnIndirect(ptr) CreateRectRgnIndirect32
-0061 stdcall CreateRoundRectRgn(long long long long long long)
+ 47 stub CreateHalftonePalette
+ 48 stdcall CreateHatchBrush(long long) CreateHatchBrush32
+ 49 stdcall CreateICA(ptr ptr ptr ptr) CreateIC32A
+ 50 stdcall CreateICW(ptr ptr ptr ptr) CreateIC32W
+ 51 stub CreateMetaFileA
+ 52 stub CreateMetaFileW
+ 53 stdcall CreatePalette(ptr) CreatePalette32
+ 54 stdcall CreatePatternBrush(long) CreatePatternBrush32
+ 55 stdcall CreatePen(long long long) CreatePen32
+ 56 stdcall CreatePenIndirect(ptr) CreatePenIndirect32
+ 57 stdcall CreatePolyPolygonRgn(ptr ptr long long) CreatePolyPolygonRgn32
+ 58 stdcall CreatePolygonRgn(ptr long long) CreatePolygonRgn32
+ 59 stdcall CreateRectRgn(long long long long) CreateRectRgn32
+ 60 stdcall CreateRectRgnIndirect(ptr) CreateRectRgnIndirect32
+ 61 stdcall CreateRoundRectRgn(long long long long long long)
              CreateRoundRectRgn32
-0062 stdcall CreateScalableFontResourceA(long ptr ptr ptr) CreateScalableFontResource32A
-0063 stdcall CreateScalableFontResourceW(long ptr ptr ptr) CreateScalableFontResource32W
-0064 stdcall CreateSolidBrush(long) CreateSolidBrush32
-0065 stdcall DPtoLP(long ptr long) DPtoLP32
-0066 stub DeleteColorSpace
-0067 stdcall DeleteDC(long) DeleteDC32
-0068 stub DeleteEnhMetaFile
-0069 stub DeleteMetaFile
-0070 stdcall DeleteObject(long)	DeleteObject32
-0071 stub DescribePixelFormat
-0072 stub DeviceCapabilitiesExA
-0073 stub DeviceCapabilitiesExW
-0074 stub DrawEscape
-0075 stdcall Ellipse(long long long long long) Ellipse32
-0076 stub EndDoc
-0077 stub EndPage
-0078 stub EndPath
-0079 stub EnumEnhMetaFile
-0080 stdcall EnumFontFamiliesA(long ptr ptr long) THUNK_EnumFontFamilies32A
-0081 stdcall EnumFontFamiliesExA(long ptr ptr long long) THUNK_EnumFontFamiliesEx32A
-0082 stdcall EnumFontFamiliesExW(long ptr ptr long long) THUNK_EnumFontFamiliesEx32W
-0083 stdcall EnumFontFamiliesW(long ptr ptr long) THUNK_EnumFontFamilies32W
-0084 stdcall EnumFontsA(long ptr ptr long) THUNK_EnumFonts32A
-0085 stdcall EnumFontsW(long ptr ptr long) THUNK_EnumFonts32W
-0086 stub EnumICMProfilesA
-0087 stub EnumICMProfilesW
-0088 stub EnumMetaFile
-0089 stdcall EnumObjects(long long ptr long) THUNK_EnumObjects32
-0090 stdcall EqualRgn(long long) EqualRgn32
-0091 stdcall Escape(long long long ptr ptr) Escape32
-0092 stdcall ExcludeClipRect(long long long long long) ExcludeClipRect32
-0093 stub ExtCreatePen
-0094 stub ExtCreateRegion
-0095 stub ExtEscape
-0096 stdcall ExtFloodFill(long long long long long) ExtFloodFill32
-0097 stub ExtSelectClipRgn
-0098 stdcall ExtTextOutA(long long long long ptr ptr long ptr) ExtTextOut32A
-0099 stdcall ExtTextOutW(long long long long ptr ptr long ptr) ExtTextOut32W
-0100 stub FillPath
-0101 stdcall FillRgn(long long long) FillRgn32
-0102 stub FixBrushOrgEx
-0103 stub FlattenPath
-0104 stdcall FloodFill(long long long long) FloodFill32
-0105 stdcall FrameRgn(long long long long long) FrameRgn32
-0106 stub FreeImageColorMatcher
-0107 stub GdiAssociateObject
-0108 stub GdiCleanCacheDC
-0109 stub GdiComment
-0110 stub GdiConvertAndCheckDC
-0111 stub GdiConvertBitmap
-0112 stub GdiConvertBrush
-0113 stub GdiConvertDC
-0114 stub GdiConvertEnhMetaFile
-0115 stub GdiConvertFont
-0116 stub GdiConvertMetaFilePict
-0117 stub GdiConvertPalette
-0118 stub GdiConvertRegion
-0119 stub GdiCreateLocalBitmap
-0120 stub GdiCreateLocalBrush
-0121 stub GdiCreateLocalEnhMetaFile
-0122 stub GdiCreateLocalFont
-0123 stub GdiCreateLocalMetaFilePict
-0124 stub GdiCreateLocalPalette
-0125 stub GdiCreateLocalRegion
-0126 stub GdiDeleteLocalDC
-0127 stub GdiDeleteLocalObject
-0128 stub GdiFlush
-0129 return GdiGetBatchLimit 0 1
-0130 stub GdiGetLocalBrush
-0131 stub GdiGetLocalDC
-0132 stub GdiGetLocalFont
-0133 stub GdiIsMetaFileDC
-0134 stub GdiPlayDCScript
-0135 stub GdiPlayJournal
-0136 stub GdiPlayScript
-0137 stub GdiReleaseLocalDC
-0138 stub GdiSetAttrs
-0139 return GdiSetBatchLimit 4 1
-0140 stub GdiSetServerAttr
-0141 stub GetArcDirection
-0142 stub GetAspectRatioFilterEx
-0143 stdcall GetBitmapBits(long long ptr) GetBitmapBits32
-0144 stdcall GetBitmapDimensionEx(long ptr) GetBitmapDimensionEx32
-0145 stdcall GetBkColor(long) GetBkColor32
-0146 stdcall GetBkMode(long) GetBkMode32
-0147 stub GetBoundsRect
-0148 stdcall GetBrushOrgEx(long ptr) GetBrushOrgEx32
-0149 stdcall GetCharABCWidthsA(long long long ptr) GetCharABCWidths32A
-0150 stub GetCharABCWidthsFloatA
-0151 stub GetCharABCWidthsFloatW
-0152 stdcall GetCharABCWidthsW(long long long ptr) GetCharABCWidths32W
-0153 stdcall GetCharWidth32A(long long long long) GetCharWidth32A
-0154 stdcall GetCharWidth32W(long long long long) GetCharWidth32W
-0155 stdcall GetCharWidthA(long long long long) GetCharWidth32A
-0156 stub GetCharWidthFloatA
-0157 stub GetCharWidthFloatW
-0158 stdcall GetCharWidthW(long long long long) GetCharWidth32W
-0159 stub GetCharWidthWOW
-0160 stub GetCharacterPlacementA
-0161 stub GetCharacterPlacementW
-0162 stdcall GetClipBox(long ptr) GetClipBox32
-0163 stdcall GetClipRgn(long long) GetClipRgn32
-0164 stub GetColorAdjustment
-0165 stub GetColorSpace
-0166 stub GetCurrentObject
-0167 stdcall GetCurrentPositionEx(long ptr) GetCurrentPositionEx32
-0168 stdcall GetDCOrgEx(long ptr) GetDCOrgEx
-0169 stub GetDIBColorTable
-0170 stdcall GetDIBits(long long long long ptr ptr long) GetDIBits32
-0171 stdcall GetDeviceCaps(long long) GetDeviceCaps32
-0172 stub GetDeviceGammaRamp
-0173 stub GetETM
-0174 stub GetEnhMetaFileA
-0175 stub GetEnhMetaFileBits
-0176 stub GetEnhMetaFileDescriptionA
-0177 stub GetEnhMetaFileDescriptionW
-0178 stub GetEnhMetaFileHeader
-0179 stub GetEnhMetaFilePaletteEntries
-0180 stub GetEnhMetaFileW
-0181 stub GetFontData
-0182 stub GetFontLanguageInfo
-0183 stub GetFontResourceInfo
-0184 stub GetFontResourceInfoW
-0185 stub GetGlyphOutline
-0186 stdcall GetGlyphOutlineA(long long long ptr long ptr ptr) GetGlyphOutline32A
-0187 stdcall GetGlyphOutlineW(long long long ptr long ptr ptr) GetGlyphOutline32W
-0188 return GetGraphicsMode 4 1 	# just return 1
-0189 stub GetICMProfileA
-0190 stub GetICMProfileW
-0191 stub GetKerningPairs
-0192 stdcall GetKerningPairsA(long long ptr) GetKerningPairs32A
-0193 stdcall GetKerningPairsW(long long ptr) GetKerningPairs32W
-0194 stub GetLogColorSpaceA
-0195 stub GetLogColorSpaceW
-0196 stdcall GetMapMode(long) GetMapMode32
-0197 stdcall GetMetaFileA(ptr) GetMetaFile32A
-0198 stub GetMetaFileBitsEx
-0199 stdcall GetMetaFileW(ptr) GetMetaFile32W
-0200 stub GetMetaRgn
-0201 stub GetMiterLimit
-0202 stdcall GetNearestColor(long long) GetNearestColor32
-0203 stdcall GetNearestPaletteIndex(long long) GetNearestPaletteIndex32
-0204 stdcall GetObjectA(long long ptr) GetObject32A
-0205 stub GetObjectType
-0206 stdcall GetObjectW(long long ptr) GetObject32W
-0207 stub GetOutlineTextMetricsA
-0208 stub GetOutlineTextMetricsW
-0209 stdcall GetPaletteEntries(long long long ptr) GetPaletteEntries32
-0210 stub GetPath
-0211 stdcall GetPixel(long long long) GetPixel32
-0212 stub GetPixelFormat
-0213 stdcall GetPolyFillMode(long) GetPolyFillMode32
-0214 stdcall GetROP2(long) GetROP232
-0215 stub GetRandomRgn
-0216 stdcall GetRasterizerCaps(ptr long) GetRasterizerCaps32
-0217 stub GetRegionData
-0218 stdcall GetRelAbs(long) GetRelAbs32
-0219 stdcall GetRgnBox(long ptr) GetRgnBox32
-0220 stdcall GetStockObject(long) GetStockObject32
-0221 stdcall GetStretchBltMode(long) GetStretchBltMode32
-0222 stdcall GetSystemPaletteEntries(long long long ptr) GetSystemPaletteEntries32
-0223 stdcall GetSystemPaletteUse() GetSystemPaletteUse32
-0224 stdcall GetTextAlign(long) GetTextAlign32
-0225 stdcall GetTextCharacterExtra(long) GetTextCharacterExtra32
-0226 stdcall GetTextCharset(long) GetTextCharset32
-0227 stdcall GetTextColor(long) GetTextColor32
-0228 stdcall GetTextExtentExPointA(long ptr long long ptr ptr ptr) GetTextExtentExPoint32A
-0229 stdcall GetTextExtentExPointW(long ptr long long ptr ptr ptr) GetTextExtentExPoint32W
-0230 stdcall GetTextExtentPoint32A(long ptr long ptr) GetTextExtentPoint32A
-0231 stdcall GetTextExtentPoint32W(long ptr long ptr) GetTextExtentPoint32W
-0232 stdcall GetTextExtentPointA(long ptr long ptr) GetTextExtentPoint32ABuggy
-0233 stdcall GetTextExtentPointW(long ptr long ptr) GetTextExtentPoint32WBuggy
-0234 stdcall GetTextFaceA(long long ptr) GetTextFace32A
-0235 stdcall GetTextFaceW(long long ptr) GetTextFace32W
-0236 stdcall GetTextMetricsA(long ptr) GetTextMetrics32A
-0237 stdcall GetTextMetricsW(long ptr) GetTextMetrics32W
-0238 stub GetTransform
-0239 stdcall GetViewportExtEx(long ptr) GetViewportExtEx32
-0240 stdcall GetViewportOrgEx(long ptr) GetViewportOrgEx32
-0241 stub GetWinMetaFileBits
-0242 stdcall GetWindowExtEx(long ptr) GetWindowExtEx32
-0243 stdcall GetWindowOrgEx(long ptr) GetWindowOrgEx32
-0244 return GetWorldTransform 8 0
-0245 stdcall IntersectClipRect(long long long long long) IntersectClipRect32
-0246 stdcall InvertRgn(long long) InvertRgn32
-0247 stdcall LPtoDP(long ptr long) LPtoDP32
-0248 stdcall LineDDA(long long long long ptr long) THUNK_LineDDA32
-0249 stdcall LineTo(long long long) LineTo32
-0250 stub LoadImageColorMatcherA
-0251 stub LoadImageColorMatcherW
-0252 stub MaskBlt
-0253 stub ModifyWorldTransform
-0254 stdcall MoveToEx(long long long ptr) MoveToEx32
-0255 stdcall OffsetClipRgn(long long long) OffsetClipRgn32
-0256 stdcall OffsetRgn(long long long) OffsetRgn32
-0257 stdcall OffsetViewportOrgEx(long long long ptr) OffsetViewportOrgEx32
-0258 stdcall OffsetWindowOrgEx(long long long ptr) OffsetWindowOrgEx32
-0259 stdcall PaintRgn(long long) PaintRgn32
-0260 stdcall PatBlt(long long long long long long) PatBlt32
-0261 stub PathToRegion
-0262 stdcall Pie(long long long long long long long long long) Pie32
-0263 stub PlayEnhMetaFile
-0264 stub PlayEnhMetaFileRecord
-0265 stdcall PlayMetaFile(long long) PlayMetaFile32
-0266 stub PlayMetaFileRecord
-0267 stub PlgBlt
-0268 stub PolyBezier
-0269 stub PolyBezierTo
-0270 stub PolyDraw
-0271 stdcall PolyPolygon(long ptr ptr long) PolyPolygon32
-0272 stub PolyPolyline
-0273 stub PolyTextOutA
-0274 stub PolyTextOutW
-0275 stdcall Polygon(long ptr long) Polygon32
-0276 stdcall Polyline(long ptr long) Polyline32
-0277 stub PolylineTo
-0278 stdcall PtInRegion(long long long) PtInRegion32
-0279 stdcall PtVisible(long long long) PtVisible32
-0280 stdcall RealizePalette(long) RealizePalette32
-0281 stdcall RectInRegion(long ptr) RectInRegion32
-0282 stdcall RectVisible(long ptr) RectVisible32
-0283 stdcall Rectangle(long long long long long) Rectangle32
-0284 stdcall RemoveFontResourceA(ptr) RemoveFontResource32A
-0285 stub RemoveFontResourceTracking
-0286 stdcall RemoveFontResourceW(ptr) RemoveFontResource32W
-0287 stdcall ResetDCA(long ptr) ResetDC32A
-0288 stdcall ResetDCW(long ptr) ResetDC32W
-0289 stdcall ResizePalette(long long) ResizePalette32
-0290 stdcall RestoreDC(long long) RestoreDC32
-0291 stdcall RoundRect(long long long long long long long) RoundRect32
-0292 stdcall SaveDC(long) SaveDC32
-0293 stdcall ScaleViewportExtEx(long long long long long ptr) ScaleViewportExtEx32
-0294 stdcall ScaleWindowExtEx(long long long long long ptr) ScaleWindowExtEx32
-0295 stub SelectBrushLocal
-0296 stub SelectClipPath
-0297 stdcall SelectClipRgn(long long) SelectClipRgn32
-0298 stub SelectFontLocal
-0299 stdcall SelectObject(long long) SelectObject32
-0300 stdcall SelectPalette(long long long) SelectPalette32
-0301 stub SetAbortProc
-0302 stub SetArcDirection
-0303 stdcall SetBitmapBits(long long ptr) SetBitmapBits32
-0304 stdcall SetBitmapDimensionEx(long long long ptr) SetBitmapDimensionEx32
-0305 stdcall SetBkColor(long long) SetBkColor32
-0306 stdcall SetBkMode(long long) SetBkMode32
-0307 stub SetBoundsRect
-0308 stdcall SetBrushOrgEx(long long long ptr) SetBrushOrgEx
-0309 stub SetColorAdjustment
-0310 stub SetColorSpace
-0311 stub SetDIBColorTable
-0312 stdcall SetDIBits(long long long long ptr ptr long) SetDIBits32
-0313 stdcall SetDIBitsToDevice(long long long long long long long long long
+ 62 stdcall CreateScalableFontResourceA(long ptr ptr ptr) CreateScalableFontResource32A
+ 63 stdcall CreateScalableFontResourceW(long ptr ptr ptr) CreateScalableFontResource32W
+ 64 stdcall CreateSolidBrush(long) CreateSolidBrush32
+ 65 stdcall DPtoLP(long ptr long) DPtoLP32
+ 66 stub DeleteColorSpace
+ 67 stdcall DeleteDC(long) DeleteDC32
+ 68 stub DeleteEnhMetaFile
+ 69 stub DeleteMetaFile
+ 70 stdcall DeleteObject(long)	DeleteObject32
+ 71 stub DescribePixelFormat
+ 72 stub DeviceCapabilitiesExA
+ 73 stub DeviceCapabilitiesExW
+ 74 stub DrawEscape
+ 75 stdcall Ellipse(long long long long long) Ellipse32
+ 76 stub EndDoc
+ 77 stub EndPage
+ 78 stub EndPath
+ 79 stub EnumEnhMetaFile
+ 80 stdcall EnumFontFamiliesA(long ptr ptr long) EnumFontFamilies32A
+ 81 stdcall EnumFontFamiliesExA(long ptr ptr long long) EnumFontFamiliesEx32A
+ 82 stdcall EnumFontFamiliesExW(long ptr ptr long long) EnumFontFamiliesEx32W
+ 83 stdcall EnumFontFamiliesW(long ptr ptr long) EnumFontFamilies32W
+ 84 stdcall EnumFontsA(long ptr ptr long) EnumFonts32A
+ 85 stdcall EnumFontsW(long ptr ptr long) EnumFonts32W
+ 86 stub EnumICMProfilesA
+ 87 stub EnumICMProfilesW
+ 88 stub EnumMetaFile
+ 89 stdcall EnumObjects(long long ptr long) EnumObjects32
+ 90 stdcall EqualRgn(long long) EqualRgn32
+ 91 stdcall Escape(long long long ptr ptr) Escape32
+ 92 stdcall ExcludeClipRect(long long long long long) ExcludeClipRect32
+ 93 stub ExtCreatePen
+ 94 stub ExtCreateRegion
+ 95 stub ExtEscape
+ 96 stdcall ExtFloodFill(long long long long long) ExtFloodFill32
+ 97 stub ExtSelectClipRgn
+ 98 stdcall ExtTextOutA(long long long long ptr ptr long ptr) ExtTextOut32A
+ 99 stdcall ExtTextOutW(long long long long ptr ptr long ptr) ExtTextOut32W
+100 stub FillPath
+101 stdcall FillRgn(long long long) FillRgn32
+102 stub FixBrushOrgEx
+103 stub FlattenPath
+104 stdcall FloodFill(long long long long) FloodFill32
+105 stdcall FrameRgn(long long long long long) FrameRgn32
+106 stub FreeImageColorMatcher
+107 stub GdiAssociateObject
+108 stub GdiCleanCacheDC
+109 stub GdiComment
+110 stub GdiConvertAndCheckDC
+111 stub GdiConvertBitmap
+112 stub GdiConvertBrush
+113 stub GdiConvertDC
+114 stub GdiConvertEnhMetaFile
+115 stub GdiConvertFont
+116 stub GdiConvertMetaFilePict
+117 stub GdiConvertPalette
+118 stub GdiConvertRegion
+119 stub GdiCreateLocalBitmap
+120 stub GdiCreateLocalBrush
+121 stub GdiCreateLocalEnhMetaFile
+122 stub GdiCreateLocalFont
+123 stub GdiCreateLocalMetaFilePict
+124 stub GdiCreateLocalPalette
+125 stub GdiCreateLocalRegion
+126 stub GdiDeleteLocalDC
+127 stub GdiDeleteLocalObject
+128 stub GdiFlush
+129 return GdiGetBatchLimit 0 1
+130 stub GdiGetLocalBrush
+131 stub GdiGetLocalDC
+132 stub GdiGetLocalFont
+133 stub GdiIsMetaFileDC
+134 stub GdiPlayDCScript
+135 stub GdiPlayJournal
+136 stub GdiPlayScript
+137 stub GdiReleaseLocalDC
+138 stub GdiSetAttrs
+139 return GdiSetBatchLimit 4 1
+140 stub GdiSetServerAttr
+141 stub GetArcDirection
+142 stub GetAspectRatioFilterEx
+143 stdcall GetBitmapBits(long long ptr) GetBitmapBits32
+144 stdcall GetBitmapDimensionEx(long ptr) GetBitmapDimensionEx32
+145 stdcall GetBkColor(long) GetBkColor32
+146 stdcall GetBkMode(long) GetBkMode32
+147 stub GetBoundsRect
+148 stdcall GetBrushOrgEx(long ptr) GetBrushOrgEx32
+149 stdcall GetCharABCWidthsA(long long long ptr) GetCharABCWidths32A
+150 stub GetCharABCWidthsFloatA
+151 stub GetCharABCWidthsFloatW
+152 stdcall GetCharABCWidthsW(long long long ptr) GetCharABCWidths32W
+153 stdcall GetCharWidth32A(long long long long) GetCharWidth32A
+154 stdcall GetCharWidth32W(long long long long) GetCharWidth32W
+155 stdcall GetCharWidthA(long long long long) GetCharWidth32A
+156 stub GetCharWidthFloatA
+157 stub GetCharWidthFloatW
+158 stdcall GetCharWidthW(long long long long) GetCharWidth32W
+159 stub GetCharWidthWOW
+160 stub GetCharacterPlacementA
+161 stub GetCharacterPlacementW
+162 stdcall GetClipBox(long ptr) GetClipBox32
+163 stdcall GetClipRgn(long long) GetClipRgn32
+164 stub GetColorAdjustment
+165 stub GetColorSpace
+166 stub GetCurrentObject
+167 stdcall GetCurrentPositionEx(long ptr) GetCurrentPositionEx32
+168 stdcall GetDCOrgEx(long ptr) GetDCOrgEx
+169 stub GetDIBColorTable
+170 stdcall GetDIBits(long long long long ptr ptr long) GetDIBits32
+171 stdcall GetDeviceCaps(long long) GetDeviceCaps32
+172 stub GetDeviceGammaRamp
+173 stub GetETM
+174 stub GetEnhMetaFileA
+175 stub GetEnhMetaFileBits
+176 stub GetEnhMetaFileDescriptionA
+177 stub GetEnhMetaFileDescriptionW
+178 stub GetEnhMetaFileHeader
+179 stub GetEnhMetaFilePaletteEntries
+180 stub GetEnhMetaFileW
+181 stub GetFontData
+182 stub GetFontLanguageInfo
+183 stub GetFontResourceInfo
+184 stub GetFontResourceInfoW
+185 stub GetGlyphOutline
+186 stdcall GetGlyphOutlineA(long long long ptr long ptr ptr) GetGlyphOutline32A
+187 stdcall GetGlyphOutlineW(long long long ptr long ptr ptr) GetGlyphOutline32W
+188 return GetGraphicsMode 4 1 	# just return 1
+189 stub GetICMProfileA
+190 stub GetICMProfileW
+191 stub GetKerningPairs
+192 stdcall GetKerningPairsA(long long ptr) GetKerningPairs32A
+193 stdcall GetKerningPairsW(long long ptr) GetKerningPairs32W
+194 stub GetLogColorSpaceA
+195 stub GetLogColorSpaceW
+196 stdcall GetMapMode(long) GetMapMode32
+197 stdcall GetMetaFileA(ptr) GetMetaFile32A
+198 stub GetMetaFileBitsEx
+199 stdcall GetMetaFileW(ptr) GetMetaFile32W
+200 stub GetMetaRgn
+201 stub GetMiterLimit
+202 stdcall GetNearestColor(long long) GetNearestColor32
+203 stdcall GetNearestPaletteIndex(long long) GetNearestPaletteIndex32
+204 stdcall GetObjectA(long long ptr) GetObject32A
+205 stub GetObjectType
+206 stdcall GetObjectW(long long ptr) GetObject32W
+207 stub GetOutlineTextMetricsA
+208 stub GetOutlineTextMetricsW
+209 stdcall GetPaletteEntries(long long long ptr) GetPaletteEntries32
+210 stub GetPath
+211 stdcall GetPixel(long long long) GetPixel32
+212 stub GetPixelFormat
+213 stdcall GetPolyFillMode(long) GetPolyFillMode32
+214 stdcall GetROP2(long) GetROP232
+215 stub GetRandomRgn
+216 stdcall GetRasterizerCaps(ptr long) GetRasterizerCaps32
+217 stub GetRegionData
+218 stdcall GetRelAbs(long) GetRelAbs32
+219 stdcall GetRgnBox(long ptr) GetRgnBox32
+220 stdcall GetStockObject(long) GetStockObject32
+221 stdcall GetStretchBltMode(long) GetStretchBltMode32
+222 stdcall GetSystemPaletteEntries(long long long ptr) GetSystemPaletteEntries32
+223 stdcall GetSystemPaletteUse() GetSystemPaletteUse32
+224 stdcall GetTextAlign(long) GetTextAlign32
+225 stdcall GetTextCharacterExtra(long) GetTextCharacterExtra32
+226 stdcall GetTextCharset(long) GetTextCharset32
+227 stdcall GetTextColor(long) GetTextColor32
+228 stdcall GetTextExtentExPointA(long ptr long long ptr ptr ptr) GetTextExtentExPoint32A
+229 stdcall GetTextExtentExPointW(long ptr long long ptr ptr ptr) GetTextExtentExPoint32W
+230 stdcall GetTextExtentPoint32A(long ptr long ptr) GetTextExtentPoint32A
+231 stdcall GetTextExtentPoint32W(long ptr long ptr) GetTextExtentPoint32W
+232 stdcall GetTextExtentPointA(long ptr long ptr) GetTextExtentPoint32ABuggy
+233 stdcall GetTextExtentPointW(long ptr long ptr) GetTextExtentPoint32WBuggy
+234 stdcall GetTextFaceA(long long ptr) GetTextFace32A
+235 stdcall GetTextFaceW(long long ptr) GetTextFace32W
+236 stdcall GetTextMetricsA(long ptr) GetTextMetrics32A
+237 stdcall GetTextMetricsW(long ptr) GetTextMetrics32W
+238 stub GetTransform
+239 stdcall GetViewportExtEx(long ptr) GetViewportExtEx32
+240 stdcall GetViewportOrgEx(long ptr) GetViewportOrgEx32
+241 stub GetWinMetaFileBits
+242 stdcall GetWindowExtEx(long ptr) GetWindowExtEx32
+243 stdcall GetWindowOrgEx(long ptr) GetWindowOrgEx32
+244 return GetWorldTransform 8 0
+245 stdcall IntersectClipRect(long long long long long) IntersectClipRect32
+246 stdcall InvertRgn(long long) InvertRgn32
+247 stdcall LPtoDP(long ptr long) LPtoDP32
+248 stdcall LineDDA(long long long long ptr long) LineDDA32
+249 stdcall LineTo(long long long) LineTo32
+250 stub LoadImageColorMatcherA
+251 stub LoadImageColorMatcherW
+252 stub MaskBlt
+253 stub ModifyWorldTransform
+254 stdcall MoveToEx(long long long ptr) MoveToEx32
+255 stdcall OffsetClipRgn(long long long) OffsetClipRgn32
+256 stdcall OffsetRgn(long long long) OffsetRgn32
+257 stdcall OffsetViewportOrgEx(long long long ptr) OffsetViewportOrgEx32
+258 stdcall OffsetWindowOrgEx(long long long ptr) OffsetWindowOrgEx32
+259 stdcall PaintRgn(long long) PaintRgn32
+260 stdcall PatBlt(long long long long long long) PatBlt32
+261 stub PathToRegion
+262 stdcall Pie(long long long long long long long long long) Pie32
+263 stub PlayEnhMetaFile
+264 stub PlayEnhMetaFileRecord
+265 stdcall PlayMetaFile(long long) PlayMetaFile32
+266 stub PlayMetaFileRecord
+267 stub PlgBlt
+268 stub PolyBezier
+269 stub PolyBezierTo
+270 stub PolyDraw
+271 stdcall PolyPolygon(long ptr ptr long) PolyPolygon32
+272 stub PolyPolyline
+273 stub PolyTextOutA
+274 stub PolyTextOutW
+275 stdcall Polygon(long ptr long) Polygon32
+276 stdcall Polyline(long ptr long) Polyline32
+277 stub PolylineTo
+278 stdcall PtInRegion(long long long) PtInRegion32
+279 stdcall PtVisible(long long long) PtVisible32
+280 stdcall RealizePalette(long) RealizePalette32
+281 stdcall RectInRegion(long ptr) RectInRegion32
+282 stdcall RectVisible(long ptr) RectVisible32
+283 stdcall Rectangle(long long long long long) Rectangle32
+284 stdcall RemoveFontResourceA(ptr) RemoveFontResource32A
+285 stub RemoveFontResourceTracking
+286 stdcall RemoveFontResourceW(ptr) RemoveFontResource32W
+287 stdcall ResetDCA(long ptr) ResetDC32A
+288 stdcall ResetDCW(long ptr) ResetDC32W
+289 stdcall ResizePalette(long long) ResizePalette32
+290 stdcall RestoreDC(long long) RestoreDC32
+291 stdcall RoundRect(long long long long long long long) RoundRect32
+292 stdcall SaveDC(long) SaveDC32
+293 stdcall ScaleViewportExtEx(long long long long long ptr) ScaleViewportExtEx32
+294 stdcall ScaleWindowExtEx(long long long long long ptr) ScaleWindowExtEx32
+295 stub SelectBrushLocal
+296 stub SelectClipPath
+297 stdcall SelectClipRgn(long long) SelectClipRgn32
+298 stub SelectFontLocal
+299 stdcall SelectObject(long long) SelectObject32
+300 stdcall SelectPalette(long long long) SelectPalette32
+301 stub SetAbortProc
+302 stub SetArcDirection
+303 stdcall SetBitmapBits(long long ptr) SetBitmapBits32
+304 stdcall SetBitmapDimensionEx(long long long ptr) SetBitmapDimensionEx32
+305 stdcall SetBkColor(long long) SetBkColor32
+306 stdcall SetBkMode(long long) SetBkMode32
+307 stub SetBoundsRect
+308 stdcall SetBrushOrgEx(long long long ptr) SetBrushOrgEx
+309 stub SetColorAdjustment
+310 stub SetColorSpace
+311 stub SetDIBColorTable
+312 stdcall SetDIBits(long long long long ptr ptr long) SetDIBits32
+313 stdcall SetDIBitsToDevice(long long long long long long long long long
                                ptr ptr long) SetDIBitsToDevice32
-0314 stub SetDeviceGammaRamp
-0315 stub SetEnhMetaFileBits
-0316 stub SetFontEnumeration
-0317 return SetGraphicsMode 8 1
-0318 stub SetICMMode
-0319 stub SetICMProfileA
-0320 stub SetICMProfileW
-0321 stdcall SetMapMode(long long) SetMapMode32
-0322 stdcall SetMapperFlags(long long) SetMapperFlags32
-0323 stub SetMetaFileBitsEx
-0324 stub SetMetaRgn
-0325 stub SetMiterLimit
-0326 stdcall SetPaletteEntries(long long long ptr) SetPaletteEntries32
-0327 stdcall SetPixel(long long long long) SetPixel32
-0328 stub SetPixelFormat
-0329 stub SetPixelV
-0330 stdcall SetPolyFillMode(long long) SetPolyFillMode32
-0331 stdcall SetROP2(long long) SetROP232
-0332 stdcall SetRectRgn(long long long long long) SetRectRgn32
-0333 stdcall SetRelAbs(long long) SetRelAbs32
-0334 stdcall SetStretchBltMode(long long) SetStretchBltMode32
-0335 stdcall SetSystemPaletteUse(long long) SetSystemPaletteUse32
-0336 stdcall SetTextAlign(long long) SetTextAlign32
-0337 stdcall SetTextCharacterExtra(long long) SetTextCharacterExtra32
-0338 stdcall SetTextColor(long long) SetTextColor32
-0339 stdcall SetTextJustification(long long long) SetTextJustification32
-0340 stdcall SetViewportExtEx(long long long ptr) SetViewportExtEx32
-0341 stdcall SetViewportOrgEx(long long long ptr) SetViewportOrgEx32
-0342 stub SetVirtualResolution
-0343 stub SetWinMetaFileBits
-0344 stdcall SetWindowExtEx(long long long ptr) SetWindowExtEx32
-0345 stdcall SetWindowOrgEx(long long long ptr) SetWindowOrgEx32
-0346 stub SetWorldTransform
-0347 stub StartDocA
-0348 stub StartDocW
-0349 stub StartPage
-0350 stdcall StretchBlt(long long long long long long long long long long long)
-             StretchBlt32
-0351 stdcall StretchDIBits(long long long long long long long long long
-                           ptr ptr long long) StretchDIBits32
-0352 stub StrokeAndFillPath
-0353 stub StrokePath
-0354 stub SwapBuffers
-0355 stdcall TextOutA(long long long ptr long) TextOut32A
-0356 stdcall TextOutW(long long long ptr long) TextOut32W
-0357 stub UnloadNetworkFonts
-0358 stdcall UnrealizeObject(long) UnrealizeObject32
-0359 stdcall UpdateColors(long) UpdateColors32
-0360 stub WidenPath
-0361 stub pstackConnect
+314 stub SetDeviceGammaRamp
+315 stub SetEnhMetaFileBits
+316 stub SetFontEnumeration
+317 return SetGraphicsMode 8 1
+318 stub SetICMMode
+319 stub SetICMProfileA
+320 stub SetICMProfileW
+321 stdcall SetMapMode(long long) SetMapMode32
+322 stdcall SetMapperFlags(long long) SetMapperFlags32
+323 stub SetMetaFileBitsEx
+324 stub SetMetaRgn
+325 stub SetMiterLimit
+326 stdcall SetPaletteEntries(long long long ptr) SetPaletteEntries32
+327 stdcall SetPixel(long long long long) SetPixel32
+328 stub SetPixelFormat
+329 stub SetPixelV
+330 stdcall SetPolyFillMode(long long) SetPolyFillMode32
+331 stdcall SetROP2(long long) SetROP232
+332 stdcall SetRectRgn(long long long long long) SetRectRgn32
+333 stdcall SetRelAbs(long long) SetRelAbs32
+334 stdcall SetStretchBltMode(long long) SetStretchBltMode32
+335 stdcall SetSystemPaletteUse(long long) SetSystemPaletteUse32
+336 stdcall SetTextAlign(long long) SetTextAlign32
+337 stdcall SetTextCharacterExtra(long long) SetTextCharacterExtra32
+338 stdcall SetTextColor(long long) SetTextColor32
+339 stdcall SetTextJustification(long long long) SetTextJustification32
+340 stdcall SetViewportExtEx(long long long ptr) SetViewportExtEx32
+341 stdcall SetViewportOrgEx(long long long ptr) SetViewportOrgEx32
+342 stub SetVirtualResolution
+343 stub SetWinMetaFileBits
+344 stdcall SetWindowExtEx(long long long ptr) SetWindowExtEx32
+345 stdcall SetWindowOrgEx(long long long ptr) SetWindowOrgEx32
+346 stub SetWorldTransform
+347 stub StartDocA
+348 stub StartDocW
+349 stub StartPage
+350 stdcall StretchBlt(long long long long long long long long long long long)
+            StretchBlt32
+351 stdcall StretchDIBits(long long long long long long long long long
+                          ptr ptr long long) StretchDIBits32
+352 stub StrokeAndFillPath
+353 stub StrokePath
+354 stub SwapBuffers
+355 stdcall TextOutA(long long long ptr long) TextOut32A
+356 stdcall TextOutW(long long long ptr long) TextOut32W
+357 stub UnloadNetworkFonts
+358 stdcall UnrealizeObject(long) UnrealizeObject32
+359 stdcall UpdateColors(long) UpdateColors32
+360 stub WidenPath
+361 stub pstackConnect
 #late additions
-0362 stub DeviceCapabilitiesEx
-0363 stub GdiDciBeginAccess
-0364 stub GdiDciCreateOffscreenSurface
-0365 stub GdiDciCreateOverlaySurface
-0366 stub GdiDciCreatePrimarySurface
-0367 stub GdiDciDestroySurface
-0368 stub GdiDciDrawSurface
-0369 stub GdiDciEndAccess
-0370 stub GdiDciEnumSurface
-0371 stub GdiDciInitialize
-0372 stub GdiDciSetClipList
-0373 stub GdiDciSetDestination
-0374 stub GdiDllInitialize
-0375 stub GdiGetLocalBitmap
-0376 stub GdiWinWatchClose
-0377 stub GdiWinWatchDidStatusChange
-0378 stub GdiWinWatchGetClipList
-0379 stub GdiWinWatchOpen
-0380 stub GetGlyphOutlineWow
-0381 stub GetTextCharsetInfo
-0382 stdcall TranslateCharsetInfo(ptr ptr long) TranslateCharSetInfo
-0383 stub UpdateICMRegKeyA
-0384 stub UpdateICMRegKeyW
-0385 stub gdiPlaySpoolStream
-0386 return SetObjectOwner 8 0
+362 stub DeviceCapabilitiesEx
+363 stub GdiDciBeginAccess
+364 stub GdiDciCreateOffscreenSurface
+365 stub GdiDciCreateOverlaySurface
+366 stub GdiDciCreatePrimarySurface
+367 stub GdiDciDestroySurface
+368 stub GdiDciDrawSurface
+369 stub GdiDciEndAccess
+370 stub GdiDciEnumSurface
+371 stub GdiDciInitialize
+372 stub GdiDciSetClipList
+373 stub GdiDciSetDestination
+374 stub GdiDllInitialize
+375 stub GdiGetLocalBitmap
+376 stub GdiWinWatchClose
+377 stub GdiWinWatchDidStatusChange
+378 stub GdiWinWatchGetClipList
+379 stub GdiWinWatchOpen
+380 stub GetGlyphOutlineWow
+381 stub GetTextCharsetInfo
+382 stdcall TranslateCharsetInfo(ptr ptr long) TranslateCharSetInfo
+383 stub UpdateICMRegKeyA
+384 stub UpdateICMRegKeyW
+385 stub gdiPlaySpoolStream
+386 return SetObjectOwner 8 0
diff --git a/if1632/kernel.spec b/if1632/kernel.spec
index e17ff9c..df6f2e7 100644
--- a/if1632/kernel.spec
+++ b/if1632/kernel.spec
@@ -39,7 +39,7 @@
 35  pascal16 GetTaskQueue(word) GetTaskQueue
 36  pascal   GetCurrentTask() WIN16_GetCurrentTask
 37  pascal GetCurrentPDB() GetCurrentPDB
-38  pascal   SetTaskSignalProc(word segptr) SetTaskSignalProc
+38  pascal   SetTaskSignalProc(word segptr) THUNK_SetTaskSignalProc
 41  return EnableDos 0 0
 42  return DisableDos 0 0
 45  pascal16 LoadModule(str ptr) LoadModule16
@@ -64,7 +64,7 @@
 64  pascal16 AccessResource(word word) AccessResource16
 65  pascal SizeofResource(word word) SizeofResource16
 66  pascal16 AllocResource(word word long) AllocResource16
-67  pascal SetResourceHandler(word segstr ptr) SetResourceHandler
+67  pascal SetResourceHandler(word segstr segptr) THUNK_SetResourceHandler
 68  pascal16 InitAtomTable(word) InitAtomTable16
 69  pascal16 FindAtom(segstr) FindAtom16
 70  pascal16 AddAtom(segstr) AddAtom16
@@ -89,12 +89,12 @@
 89  pascal   lstrcat(segstr str) lstrcat16
 90  pascal16 lstrlen(str) lstrlen16
 91  register InitTask() InitTask
-92  pascal   GetTempDrive(byte) WIN16_GetTempDrive
+92  pascal   GetTempDrive(word) WIN16_GetTempDrive
 93  pascal16 GetCodeHandle(segptr) GetCodeHandle
 94  stub DefineHandleTable
 95  pascal16 LoadLibrary(str) LoadLibrary16
 96  pascal16 FreeLibrary(word) FreeLibrary16
-97  pascal16 GetTempFileName(byte str word ptr) GetTempFileName16
+97  pascal16 GetTempFileName(word str word ptr) GetTempFileName16
 98  return GetLastDiskChange 0 0
 99  stub GetLPErrMode
 100 return ValidateCodeSegments 0 0
@@ -135,7 +135,7 @@
 133 pascal16 GetExePtr(word) GetExePtr
 134 pascal16 GetWindowsDirectory(ptr word) GetWindowsDirectory16
 135 pascal16 GetSystemDirectory(ptr word) GetSystemDirectory16
-136 pascal16 GetDriveType(byte) GetDriveType16
+136 pascal16 GetDriveType(word) GetDriveType16
 137 pascal16 FatalAppExit(word str) FatalAppExit16
 138 pascal GetHeapSpaces(word) GetHeapSpaces
 139 stub DoSignal
diff --git a/if1632/kernel32.spec b/if1632/kernel32.spec
index 695a564..3b6243a 100644
--- a/if1632/kernel32.spec
+++ b/if1632/kernel32.spec
@@ -1,6 +1,5 @@
 name	kernel32
 type	win32
-base	1
 
 # Functions exported by the Win95 kernel32.dll 
 # (these need to have these exact ordinals, for some win95 dlls 
@@ -9,838 +8,838 @@
 
 # undocumented ordinal only calls (names taken from k32exp.h by Andrew
 # Schulman.
-0  stub VxDCall0
-1  stub VxDCall0
-2  stub VxDCall0
-3  stub VxDCall0
-4  stub VxDCall0
-5  stub VxDCall0
-6  stub VxDCall0
-7  stub VxDCall0
-8  stub VxDCall0
+  1 stub VxDCall0
+  2 stub VxDCall1
+  3 stub VxDCall2
+  4 stub VxDCall3
+  5 stub VxDCall4
+  6 stub VxDCall5
+  7 stub VxDCall6
+  8 stub VxDCall7
+  9 stub VxDCall8
  
-9  stub _KERNEL32_stringconv1 #ansi2oem or reverse?
+ 10 stub _KERNEL32_stringconv1 #ansi2oem or reverse?
  
-17  stdcall _KERNEL32_18(long long) _KERNEL32_18
-18  stub _KERNEL32_getheapsegment
+ 18 stdcall _KERNEL32_18(long long) _KERNEL32_18
+ 19 stub _KERNEL32_getheapsegment
  
-30  stub _KERNEL32_31
+ 31 stub _KERNEL32_31
  
-33  stdcall _KERNEL32_34() _KERNEL32_34
-34  stdcall LoadLibrary16(ptr) LoadLibrary16
-35  stub FreeLibrary16
-36  stdcall GetProcAddress16(long ptr) WIN32_GetProcAddress16
+ 34 stdcall _KERNEL32_34() _KERNEL32_34
+ 35 stdcall LoadLibrary16(ptr) LoadLibrary16
+ 36 stdcall FreeLibrary16(long) FreeLibrary16
+ 37 stdcall GetProcAddress16(long ptr) WIN32_GetProcAddress16
  
-39  stub _KERNEL32_40
-40  stdcall _KERNEL32_41(long long long long long) _KERNEL32_41
-41  stub _KERNEL32_42
-42  stdcall _KERNEL32_43(long ptr long ptr ptr) _KERNEL32_43
-44  register _KERNEL32_45() _KERNEL32_45 
-45  stdcall _KERNEL32_46(long long long long long) _KERNEL32_46
-46  stub _KERNEL32_47
+ 40 stub _KERNEL32_40
+ 41 stdcall _KERNEL32_41(long long long long long) _KERNEL32_41
+ 42 stub _KERNEL32_42
+ 43 stdcall _KERNEL32_43(long ptr long ptr ptr) _KERNEL32_43
+ 45 register _KERNEL32_45() _KERNEL32_45 
+ 46 stdcall _KERNEL32_46(long long long long long) _KERNEL32_46
+ 47 stub _KERNEL32_47
  
-49  stdcall AddAtomA(ptr) AddAtom32A
+ 50 stdcall AddAtomA(ptr) AddAtom32A
 
-51  register _KERNEL32_52(long) _KERNEL32_52
+ 52 register _KERNEL32_52(long) _KERNEL32_52
 
 # WOW calls
-53  stdcall WOWCallback16(long long) WOWCallback16
-54  stub WOWCallback16Ex
-55  stdcall WOWGetVDMPointer(long long long) WOWGetVDMPointer
-56  stub WOWHandle32
-57  stub WOWHandle16
-58  stub WOWGlobalAlloc16
-59  stub WOWGlobalLock16
-60  stub WOWGlobalUnlock16
-61  stub WOWGlobalFree16
-62  stdcall WOWGlobalAllocLock16(long long ptr) WOWGlobalAllocLock16
-63  stub WOWGlobalUnlockFree16
-64  stub WOWGlobalLockSize16
-65  stub WOWYield16
-66  stub WOWDirectedYield16
-67  stdcall WOWGetVDMPointerFix(long long long) WOWGetVDMPointerFix
-68  stdcall WOWGetVDMPointerUnfix(long) WOWGetVDMPointerUnfix
-69  stdcall WOW32_1(long long) WOW32_1
+ 54 stdcall WOWCallback16(long long) WOWCallback16
+ 55 stub WOWCallback16Ex
+ 56 stdcall WOWGetVDMPointer(long long long) WOWGetVDMPointer
+ 57 stub WOWHandle32
+ 58 stub WOWHandle16
+ 59 stub WOWGlobalAlloc16
+ 60 stub WOWGlobalLock16
+ 61 stub WOWGlobalUnlock16
+ 62 stub WOWGlobalFree16
+ 63 stdcall WOWGlobalAllocLock16(long long ptr) WOWGlobalAllocLock16
+ 64 stub WOWGlobalUnlockFree16
+ 65 stub WOWGlobalLockSize16
+ 66 stub WOWYield16
+ 67 stub WOWDirectedYield16
+ 68 stdcall WOWGetVDMPointerFix(long long long) WOWGetVDMPointerFix
+ 69 stdcall WOWGetVDMPointerUnfix(long) WOWGetVDMPointerUnfix
+ 70 stdcall WOW32_1(long long) WOW32_1
  
-71  stub RtlLargeIntegerAdd
-72  stub RtlEnlargedIntegerMultiply
-73  stub RtlEnlargedUnsignedMultiply
-74  stub RtlEnlargedUnsignedDivide
-75  stub RtlExtendedLargeIntegerDivide
-76  stub RtlExtendedMagicDivide
-77  stub RtlExtendedIntegerMultiply
-78  stub RtlLargeIntegerShiftLeft
-79  stub RtlLargeIntegerShiftRight
-80  stub RtlLargeIntegerArithmeticShift
-81  stub RtlLargeIntegerNegate
-82  stub RtlLargeIntegerSubtract
-83  stub RtlConvertLongToLargeInteger
-84  stub RtlConvertUlongToLargeInteger
+ 72 stub RtlLargeIntegerAdd
+ 73 stub RtlEnlargedIntegerMultiply
+ 74 stub RtlEnlargedUnsignedMultiply
+ 75 stub RtlEnlargedUnsignedDivide
+ 76 stub RtlExtendedLargeIntegerDivide
+ 77 stub RtlExtendedMagicDivide
+ 78 stub RtlExtendedIntegerMultiply
+ 79 stub RtlLargeIntegerShiftLeft
+ 80 stub RtlLargeIntegerShiftRight
+ 81 stub RtlLargeIntegerArithmeticShift
+ 82 stub RtlLargeIntegerNegate
+ 83 stub RtlLargeIntegerSubtract
+ 84 stub RtlConvertLongToLargeInteger
+ 85 stub RtlConvertUlongToLargeInteger
 
-86  stdcall _KERNEL32_87() _KERNEL32_87
-87  cdecl _KERNEL32_88() _KERNEL32_88
-88  stub _KERNEL32_89
-89  register _KERNEL32_90() _KERNEL32_90
-90  stub _KERNEL32_91
-91  stub _KERNEL32_92
-92  stdcall GETPWIN16LOCK(ptr) GetPWinLock
-96  stub ENTERSYSLEVEL
-97  stub LEAVESYSLEVEL
-98  stub _KERNEL32_98
-99  stub _KERNEL32_99
-100 stub _KERNEL32_100
+ 87 stdcall _KERNEL32_87() _KERNEL32_87
+ 88 varargs _KERNEL32_88() _KERNEL32_88
+ 89 stub _KERNEL32_89
+ 90 register _KERNEL32_90() _KERNEL32_90
+ 91 stub _KERNEL32_91
+ 92 stub _KERNEL32_92
+ 93 stdcall GETPWIN16LOCK(ptr) GetPWinLock
+ 97 stub ENTERSYSLEVEL
+ 98 stub LEAVESYSLEVEL
+ 99 stub _KERNEL32_98
+100 stub _KERNEL32_99
+101 stub _KERNEL32_100
 
 
-101   stdcall AddAtomW(ptr) AddAtom32W
-102   stub AllocConsole
-103   stub AllocLSCallback
-104   stub AllocSLCallback
-105   stdcall AreFileApisANSI() AreFileApisANSI
-106   stub BackupRead
-107   stub BackupSeek
-108   stub BackupWrite
-109   stdcall Beep(long long) Beep
-110   stub BeginUpdateResourceA
-111   stub BeginUpdateResourceW
-112   stdcall BuildCommDCBA(ptr ptr) BuildCommDCB32A
-113   stdcall BuildCommDCBAndTimeoutsA(ptr ptr ptr) BuildCommDCBAndTimeouts32A
-114   stdcall BuildCommDCBAndTimeoutsW(ptr ptr ptr) BuildCommDCBAndTimeouts32W
-115   stdcall BuildCommDCBW(ptr ptr) BuildCommDCB32W
-116   stub CallNamedPipeA
-117   stub CallNamedPipeW
-118   stub Callback12
-119   stub Callback16
-120   stub Callback20
-121   stub Callback24
-122   stub Callback28
-123   stub Callback32
-124   stub Callback36
-125   stub Callback40
-126   stub Callback44
-127   stub Callback48
-128   stub Callback4
-129   stub Callback52
-130   stub Callback56
-131   stub Callback60
-132   stub Callback64
-133   stub Callback8
-134   stdcall ClearCommBreak(long) ClearCommBreak32
-135   stdcall ClearCommError(long ptr ptr) ClearCommError
-136   stdcall CloseHandle(long) CloseHandle
-137   stub CloseProfileUserMapping
-138   stub CloseSystemHandle
-139   stub CommConfigDialogA
-140   stub CommConfigDialogW
-141   stdcall CompareFileTime(ptr ptr) CompareFileTime
-142   stdcall CompareStringA(long long ptr long ptr long) CompareString32A
-143   stdcall CompareStringW(long long ptr long ptr long) CompareString32W
-144   stub ConnectNamedPipe
-145   stdcall ContinueDebugEvent(long long long) ContinueDebugEvent
-146   stub ConvertDefaultLocale
-147   stdcall ConvertToGlobalHandle(long) ConvertToGlobalHandle
-148   stdcall CopyFileA(ptr ptr long) CopyFile32A
-149   stdcall CopyFileW(ptr ptr long) CopyFile32W
-150   stub CreateConsoleScreenBuffer
-151   stdcall CreateDirectoryA(ptr ptr) CreateDirectory32A
-152   stdcall CreateDirectoryExA(ptr ptr ptr) CreateDirectoryEx32A
-153   stdcall CreateDirectoryExW(ptr ptr ptr) CreateDirectoryEx32W
-154   stdcall CreateDirectoryW(ptr ptr) CreateDirectory32W
-155   stdcall CreateEventA(ptr long long ptr) CreateEvent32A
-156   stdcall CreateEventW(ptr long long ptr) CreateEvent32W
-157   stdcall CreateFileA(ptr long long ptr long long long) CreateFile32A
-158   stdcall CreateFileMappingA(long ptr long long long ptr) CreateFileMapping32A
-159   stdcall CreateFileMappingW(long ptr long long long ptr) CreateFileMapping32W
-160   stdcall CreateFileW(ptr long long ptr long long long) CreateFile32W
-161   stub CreateIoCompletionPort
-162   stub CreateKernelThread
-163   stub CreateMailslotA
-164   stub CreateMailslotW
-165   stdcall CreateMutexA(ptr long ptr) CreateMutex32A
-166   stdcall CreateMutexW(ptr long ptr) CreateMutex32W
-167   stub CreateNamedPipeA
-168   stub CreateNamedPipeW
-169   stub CreatePipe
-170   stdcall CreateProcessA(ptr ptr ptr ptr long long ptr ptr ptr ptr) CreateProcess32A
-171   stub CreateProcessW
-172   stub CreateRemoteThread
-173   stdcall CreateSemaphoreA(ptr long long ptr) CreateSemaphore32A
-174   stdcall CreateSemaphoreW(ptr long long ptr) CreateSemaphore32W
-175   stub CreateSocketHandle
-176   stub CreateTapePartition
-177   stdcall CreateThread(ptr long ptr long long ptr) CreateThread
-178   stub CreateToolhelp32Snapshot
-179   stub DebugActiveProcess
-180   stdcall DebugBreak() DebugBreak32
-181   stub DefineDosDeviceA
-182   stub DefineDosDeviceW
-183   stdcall DeleteAtom(long) DeleteAtom32
-184   stdcall DeleteCriticalSection(ptr)	DeleteCriticalSection
-185   stdcall DeleteFileA(ptr) DeleteFile32A
-186   stdcall DeleteFileW(ptr) DeleteFile32W
-187   stub DeviceIoControl
-188   stdcall DisableThreadLibraryCalls(long) DisableThreadLibraryCalls
-189   stub DisconnectNamedPipe
-190   stdcall DosDateTimeToFileTime(long long ptr) DosDateTimeToFileTime
-191   stdcall DuplicateHandle(long long long ptr long long long) DuplicateHandle
-192   stub EndUpdateResourceA
-193   stub EndUpdateResourceW
-194   stdcall EnterCriticalSection(ptr)	EnterCriticalSection
-195   stub EnumCalendarInfoA
-196   stub EnumCalendarInfoW
-197   stub EnumDateFormatsA
-198   stub EnumDateFormatsW
-199   stdcall EnumResourceLanguagesA(long ptr ptr ptr long) THUNK_EnumResourceLanguages32A
-200   stdcall EnumResourceLanguagesW(long ptr ptr ptr long) THUNK_EnumResourceLanguages32W
-201   stdcall EnumResourceNamesA(long ptr ptr long) THUNK_EnumResourceNames32A
-202   stdcall EnumResourceNamesW(long ptr ptr long) THUNK_EnumResourceNames32W
-203   stdcall EnumResourceTypesA(long ptr long) THUNK_EnumResourceTypes32A
-204   stdcall EnumResourceTypesW(long ptr long) THUNK_EnumResourceTypes32W
-205   stdcall EnumSystemCodePagesA(ptr long) THUNK_EnumSystemCodePages32A
-206   stdcall EnumSystemCodePagesW(ptr long) THUNK_EnumSystemCodePages32W
-207   stdcall EnumSystemLocalesA(ptr long) THUNK_EnumSystemLocales32A
-208   stdcall EnumSystemLocalesW(ptr long) THUNK_EnumSystemLocales32W
-209   stub EnumTimeFormatsA
-210   stub EnumTimeFormatsW
-211   stub EraseTape
-212   stdcall EscapeCommFunction(long long) EscapeCommFunction32
-213   stdcall ExitProcess(long) ExitProcess
-214   stub ExitThread
-215   stdcall ExpandEnvironmentStringsA(ptr ptr long) ExpandEnvironmentStrings32A
-216   stdcall ExpandEnvironmentStringsW(ptr ptr long) ExpandEnvironmentStrings32W
-217   stub FT_Exit0
-218   stub FT_Exit12
-219   stub FT_Exit16
-220   stub FT_Exit20
-221   stub FT_Exit24
-222   stub FT_Exit28
-223   stub FT_Exit32
-224   stub FT_Exit36
-226   stub FT_Exit40
-227   stub FT_Exit44
-228   stub FT_Exit48
-225   stub FT_Exit4
-229   stub FT_Exit52
-230   stub FT_Exit56
-231   stub FT_Exit8
-232   stub FT_Prolog
-233   stub FT_Thunk
-234   stdcall FatalAppExitA(long ptr) FatalAppExit32A
-235   stdcall FatalAppExitW(long ptr) FatalAppExit32W
-236   stub FatalExit
-237   stdcall FileTimeToDosDateTime(ptr ptr ptr) FileTimeToDosDateTime
-238   stdcall FileTimeToLocalFileTime(ptr ptr) FileTimeToLocalFileTime
-239   stdcall FileTimeToSystemTime(ptr ptr) FileTimeToSystemTime
-240   stub FillConsoleOutputAttribute
-241   stub FillConsoleOutputCharacterA
-242   stub FillConsoleOutputCharacterW
-243   stdcall FindAtomA(ptr) FindAtom32A
-244   stdcall FindAtomW(ptr) FindAtom32W
-246   stub FindCloseChangeNotification
-245   stdcall FindClose(long) FindClose32
-247   stub FindFirstChangeNotificationA
-248   stub FindFirstChangeNotificationW
-249   stdcall FindFirstFileA(ptr ptr) FindFirstFile32A
-250   stdcall FindFirstFileW(ptr ptr) FindFirstFile32W
-251   stub FindNextChangeNotification
-252   stdcall FindNextFileA(long ptr) FindNextFile32A
-253   stdcall FindNextFileW(long ptr) FindNextFile32W
-254   stdcall FindResourceA(long ptr ptr) FindResource32A
-255   stdcall FindResourceExA(long ptr ptr long) FindResourceEx32A
-256   stdcall FindResourceExW(long ptr ptr long) FindResourceEx32W
-257   stdcall FindResourceW(long ptr ptr) FindResource32W
-258   stdcall FlushConsoleInputBuffer(long) FlushConsoleInputBuffer
-259   stdcall FlushFileBuffers(long) FlushFileBuffers
-260   stub FlushInstructionCache
-261   stub FlushViewOfFile
-262   stub FoldStringA
-263   stub FoldStringW
-264   stdcall FormatMessageA() WIN32_FormatMessage32A
-265   stdcall FormatMessageW() WIN32_FormatMessage32W
-266   stub FreeConsole
-267   stdcall FreeEnvironmentStringsA(ptr) FreeEnvironmentStrings32A
-268   stdcall FreeEnvironmentStringsW(ptr) FreeEnvironmentStrings32W
-269   stub FreeLSCallback
-271   stub FreeLibraryAndExitThread
-270   stdcall FreeLibrary(long) FreeLibrary32
-272   stdcall FreeResource(long) FreeResource32
-273   stub FreeSLCallback
-274   stub GenerateConsoleCtrlEvent
-275   stdcall GetACP() GetACP
-276   stdcall GetAtomNameA(long ptr long) GetAtomName32A
-277   stdcall GetAtomNameW(long ptr long) GetAtomName32W
-278   stub GetBinaryType
-279   stub GetBinaryTypeA
-280   stub GetBinaryTypeW
-281   stdcall GetCPInfo(long ptr) GetCPInfo
-282   stub GetCommConfig
-283   stdcall GetCommMask(long ptr) GetCommMask
-284   stub GetCommModemStatus
-285   stub GetCommProperties
-286   stdcall GetCommState(long ptr) GetCommState32
-287   stdcall GetCommTimeouts(long ptr) GetCommTimeouts
-288   stdcall GetCommandLineA() GetCommandLine32A
-289   stdcall GetCommandLineW() GetCommandLine32W
-290   stub GetCompressedFileSizeA
-291   stub GetCompressedFileSizeW
-292   stdcall GetComputerNameA(ptr ptr) GetComputerName32A
-293   stdcall GetComputerNameW(ptr ptr) GetComputerName32W
-294   stdcall GetConsoleCP() GetConsoleCP
-295   stub GetConsoleCursorInfo
-296   stdcall GetConsoleMode(long ptr) GetConsoleMode
-297   stdcall GetConsoleOutputCP() GetConsoleOutputCP
-298   stdcall GetConsoleScreenBufferInfo(long ptr) GetConsoleScreenBufferInfo
-299   stdcall GetConsoleTitleA(ptr long) GetConsoleTitle32A
-300   stdcall GetConsoleTitleW(ptr long) GetConsoleTitle32W
-301   stub GetCurrencyFormatA
-302   stub GetCurrencyFormatW
-303   stdcall GetCurrentDirectoryA(long ptr) GetCurrentDirectory32A
-304   stdcall GetCurrentDirectoryW(long ptr) GetCurrentDirectory32W
-305   stdcall GetCurrentProcess() GetCurrentProcess
-306   stdcall GetCurrentProcessId() GetCurrentProcessId
-307   stdcall GetCurrentThread() GetCurrentThread
-308   stdcall GetCurrentThreadId() GetCurrentThreadId
-309   stub GetDateFormatA
-310   stub GetDateFormatW
-311   stub GetDaylightFlag
-312   stub GetDefaultCommConfigA
-313   stub GetDefaultCommConfigW
-314   stdcall GetDiskFreeSpaceA(ptr ptr ptr ptr ptr) GetDiskFreeSpace32A
-315   stdcall GetDiskFreeSpaceW(ptr ptr ptr ptr ptr) GetDiskFreeSpace32W
-316   stdcall GetDriveTypeA(ptr) GetDriveType32A
-317   stdcall GetDriveTypeW(ptr) GetDriveType32W
-319   stdcall GetEnvironmentStringsA() GetEnvironmentStrings32A
-320   stdcall GetEnvironmentStringsW() GetEnvironmentStrings32W
-318   stdcall GetEnvironmentStrings() GetEnvironmentStrings32A
-321   stdcall GetEnvironmentVariableA(ptr ptr long) GetEnvironmentVariable32A
-322   stdcall GetEnvironmentVariableW(ptr ptr long) GetEnvironmentVariable32W
-323   stub GetErrorMode
-324   stub GetExitCodeProcess
-325   stub GetExitCodeThread
-326   stdcall GetFileAttributesA(ptr) GetFileAttributes32A
-327   stdcall GetFileAttributesW(ptr) GetFileAttributes32W
-328   stdcall GetFileInformationByHandle(long ptr) GetFileInformationByHandle
-329   stdcall GetFileSize(long ptr) GetFileSize
-330   stdcall GetFileTime(long ptr ptr ptr) GetFileTime
-331   stdcall GetFileType(long) GetFileType
-332   stdcall GetFullPathNameA(ptr long ptr ptr) GetFullPathName32A
-333   stdcall GetFullPathNameW(ptr long ptr ptr) GetFullPathName32W
-334   stub GetHandleContext
-335   stub GetHandleInformation
-336   stub GetLSCallbackTarget
-337   stub GetLSCallbackTemplate
-338   stdcall GetLargestConsoleWindowSize(long) GetLargestConsoleWindowSize
-339   stdcall GetLastError() GetLastError
-340   stdcall GetLocalTime(ptr) GetLocalTime
-341   stdcall GetLocaleInfoA(long long ptr long) GetLocaleInfo32A
-342   stdcall GetLocaleInfoW(long long ptr long) GetLocaleInfo32W
-343   stdcall GetLogicalDriveStringsA(long ptr) GetLogicalDriveStrings32A
-344   stdcall GetLogicalDriveStringsW(long ptr) GetLogicalDriveStrings32W
-345   stdcall GetLogicalDrives() GetLogicalDrives
-346   stub GetMailslotInfo
-347   stdcall GetModuleFileNameA(long ptr long) GetModuleFileName32A
-348   stdcall GetModuleFileNameW(long ptr long) GetModuleFileName32W
-349   stdcall GetModuleHandleA(ptr) WIN32_GetModuleHandleA
-350   stdcall GetModuleHandleW(ptr) WIN32_GetModuleHandleW
-351   stub GetNamedPipeHandleStateA
-352   stub GetNamedPipeHandleStateW
-353   stub GetNamedPipeInfo
-354   stub GetNumberFormatA
-355   stub GetNumberFormatW
-356   stdcall GetNumberOfConsoleInputEvents(long ptr) GetNumberOfConsoleInputEvents
-357   stub GetNumberOfConsoleMouseButtons
-358   stdcall GetOEMCP() GetOEMCP
-359   stub GetOverlappedResult
-360   stdcall GetPriorityClass(long) GetPriorityClass
-361   stdcall GetPrivateProfileIntA(ptr ptr long ptr) GetPrivateProfileInt32A
-362   stdcall GetPrivateProfileIntW(ptr ptr long ptr) GetPrivateProfileInt32W
-363   stub GetPrivateProfileSectionA
-364   stub GetPrivateProfileSectionNamesA
-365   stub GetPrivateProfileSectionNamesW
-366   stub GetPrivateProfileSectionW
-367   stdcall GetPrivateProfileStringA(ptr ptr ptr ptr long ptr) GetPrivateProfileString32A
-368   stdcall GetPrivateProfileStringW(ptr ptr ptr ptr long ptr) GetPrivateProfileString32W
-369   stub GetPrivateProfileStructA
-370   stub GetPrivateProfileStructW
-371   stdcall GetProcAddress(long ptr) GetProcAddress32
-372   stdcall GetProcessAffinityMask(long ptr ptr)	GetProcessAffinityMask
-373   stub GetProcessFlags
-374   stdcall GetProcessHeap() GetProcessHeap
-375   stub GetProcessHeaps
-376   stub GetProcessShutdownParameters
-377   stdcall GetProcessTimes(long ptr ptr ptr ptr) GetProcessTimes
-378   stdcall GetProcessVersion(long) GetProcessVersion
-379   stdcall GetProcessWorkingSetSize(long ptr ptr) GetProcessWorkingSetSize
-380   stub GetProductName
-381   stdcall GetProfileIntA(ptr ptr long) GetProfileInt32A
-382   stdcall GetProfileIntW(ptr ptr long) GetProfileInt32W
-383   stub GetProfileSectionA
-384   stub GetProfileSectionW
-385   stdcall GetProfileStringA(ptr ptr ptr ptr long) GetProfileString32A
-386   stdcall GetProfileStringW(ptr ptr ptr ptr long) GetProfileString32W
-387   stub GetQueuedCompletionStatus
-388   stub GetSLCallbackTarget
-389   stub GetSLCallbackTemplate
-390   stdcall GetShortPathNameA(ptr ptr long) GetShortPathName32A
-391   stdcall GetShortPathNameW(ptr ptr long) GetShortPathName32W
-392   stdcall GetStartupInfoA(ptr) GetStartupInfo32A
-393   stdcall GetStartupInfoW(ptr) GetStartupInfo32W
-394   stdcall GetStdHandle(long)	GetStdHandle
-395   stdcall GetStringTypeA(long long ptr long ptr) GetStringType32A
-396   stdcall GetStringTypeExA(long long ptr long ptr) GetStringTypeEx32A
-397   stdcall GetStringTypeExW(long long ptr long ptr) GetStringTypeEx32W
-398   stdcall GetStringTypeW(long ptr long ptr) GetStringType32W
-399   stdcall GetSystemDefaultLCID() GetSystemDefaultLCID
-400   stdcall GetSystemDefaultLangID() GetSystemDefaultLangID
-401   stdcall GetSystemDirectoryA(ptr long) GetSystemDirectory32A
-402   stdcall GetSystemDirectoryW(ptr long) GetSystemDirectory32W
-403   stdcall GetSystemInfo(ptr) GetSystemInfo
-404   stdcall GetSystemPowerStatus(ptr) GetSystemPowerStatus
-405   stdcall GetSystemTime(ptr) GetSystemTime
-406   stub GetSystemTimeAdjustment
-407   stub GetSystemTimeAsFileTime
-408   stub GetTapeParameters
-409   stub GetTapePosition
-410   stub GetTapeStatus
-411   stdcall GetTempFileNameA(ptr ptr long ptr) GetTempFileName32A
-412   stdcall GetTempFileNameW(ptr ptr long ptr) GetTempFileName32W
-413   stdcall GetTempPathA(long ptr) GetTempPath32A
-414   stdcall GetTempPathW(long ptr) GetTempPath32W
-415   stdcall GetThreadContext(long ptr) GetThreadContext
-416   stdcall GetThreadLocale() GetThreadLocale
-417   stdcall GetThreadPriority(long) GetThreadPriority
-418   stdcall GetThreadSelectorEntry(long long ptr) GetThreadSelectorEntry
-419   stub GetThreadTimes
-420   stdcall GetTickCount() GetTickCount
-421   stub GetTimeFormatA
-422   stub GetTimeFormatW
-423   stdcall GetTimeZoneInformation(ptr) GetTimeZoneInformation
-424   stdcall GetUserDefaultLCID() GetUserDefaultLCID
-425   stdcall GetUserDefaultLangID() GetUserDefaultLangID
-426   stdcall GetVersion() GetVersion32
-427   stdcall GetVersionExA(ptr) GetVersionEx32A
-428   stdcall GetVersionExW(ptr) GetVersionEx32W
-429   stdcall GetVolumeInformationA(ptr ptr long ptr ptr ptr ptr long) GetVolumeInformation32A
-430   stdcall GetVolumeInformationW(ptr ptr long ptr ptr ptr ptr long) GetVolumeInformation32W
-431   stdcall GetWindowsDirectoryA(ptr long) GetWindowsDirectory32A
-432   stdcall GetWindowsDirectoryW(ptr long) GetWindowsDirectory32W
-433   stdcall GlobalAddAtomA(ptr) GlobalAddAtom32A
-434   stdcall GlobalAddAtomW(ptr) GlobalAddAtom32W
-435   stdcall GlobalAlloc(long long) GlobalAlloc32
-436   stdcall GlobalCompact(long) GlobalCompact32
-437   stdcall GlobalDeleteAtom(long) GlobalDeleteAtom
-438   stdcall GlobalFindAtomA(ptr) GlobalFindAtom32A
-439   stdcall GlobalFindAtomW(ptr) GlobalFindAtom32W
-440   stdcall GlobalFix(long) GlobalFix32
-441   stdcall GlobalFlags(long) GlobalFlags32
-442   stdcall GlobalFree(long) GlobalFree32
-443   stdcall GlobalGetAtomNameA(long ptr long) GlobalGetAtomName32A
-444   stdcall GlobalGetAtomNameW(long ptr long) GlobalGetAtomName32W
-445   stdcall GlobalHandle(ptr) GlobalHandle32
-446   stdcall GlobalLock(long) GlobalLock32
-447   stdcall GlobalMemoryStatus(ptr) GlobalMemoryStatus
-448   stdcall GlobalReAlloc(long long long) GlobalReAlloc32
-449   stdcall GlobalSize(long) GlobalSize32
-450   stdcall GlobalUnWire(long) GlobalUnWire32
-451   stdcall GlobalUnfix(long) GlobalUnfix32
-452   stdcall GlobalUnlock(long) GlobalUnlock32
-453   stdcall GlobalWire(long) GlobalWire32
-454   stub Heap32First
-455   stub Heap32ListFirst
-456   stub Heap32ListNext
-457   stub Heap32Next
-458   stdcall HeapAlloc(long long long) HeapAlloc
-459   stdcall HeapCompact(long long) HeapCompact
-460   stdcall HeapCreate(long long long)	HeapCreate
-461   stdcall HeapDestroy(long) HeapDestroy
-462   stdcall HeapFree(long long ptr) HeapFree
-463   stdcall HeapLock(long) HeapLock
-464   stdcall HeapReAlloc(long long ptr long) HeapReAlloc
-465   stub HeapSetFlags
-466   stdcall HeapSize(long long ptr) HeapSize
-467   stdcall HeapUnlock(long) HeapUnlock
-468   stdcall HeapValidate(long long ptr) HeapValidate
-469   stdcall HeapWalk(long ptr) HeapWalk
-470   stub InitAtomTable
-471   stdcall InitializeCriticalSection(ptr) InitializeCriticalSection
-472   stdcall InterlockedDecrement(ptr) InterlockedDecrement
-473   stdcall InterlockedExchange(ptr long) InterlockedExchange
-474   stdcall InterlockedIncrement(ptr) InterlockedIncrement
-475   stub InvalidateNLSCache
-476   stdcall IsBadCodePtr(ptr) IsBadCodePtr32
-477   stdcall IsBadHugeReadPtr(ptr long) IsBadHugeReadPtr32
-478   stdcall IsBadHugeWritePtr(ptr long) IsBadHugeWritePtr32
-479   stdcall IsBadReadPtr(ptr long) IsBadReadPtr32
-480   stdcall IsBadStringPtrA(ptr long) IsBadStringPtr32A
-481   stdcall IsBadStringPtrW(ptr long) IsBadStringPtr32W
-482   stdcall IsBadWritePtr(ptr long) IsBadWritePtr32
-483   stdcall IsDBCSLeadByte(long) IsDBCSLeadByte32
-484   stdcall IsDBCSLeadByteEx(long long) IsDBCSLeadByteEx
-485   stub IsLSCallback
-486   stub IsSLCallback
-487   stdcall IsValidCodePage(long) IsValidCodePage
-488   stdcall IsValidLocale(long long) IsValidLocale
-489   stub K32Thk1632Epilog
-490   stub K32Thk1632Prolog
-491   stub LCMapStringA
-492   stub LCMapStringW
-493   stdcall LeaveCriticalSection(ptr)	LeaveCriticalSection
-494   stdcall LoadLibraryA(ptr) LoadLibrary32A
-495   stdcall LoadLibraryExA(ptr long long) LoadLibraryEx32A
-496   stub LoadLibraryExW
-497   stdcall LoadLibraryW(ptr) LoadLibrary32W
-498   stub LoadModule
-499   stdcall LoadResource(long long) LoadResource32
-500   stdcall LocalAlloc(long long) LocalAlloc32
-501   stdcall LocalCompact(long) LocalCompact32
-502   stdcall LocalFileTimeToFileTime(ptr ptr) LocalFileTimeToFileTime
-503   stdcall LocalFlags(long) LocalFlags32
-504   stdcall LocalFree(long) LocalFree32
-505   stdcall LocalHandle(ptr) LocalHandle32
-506   stdcall LocalLock(long) LocalLock32
-507   stdcall LocalReAlloc(long long long) LocalReAlloc32
-508   stdcall LocalShrink(long long) LocalShrink32
-509   stdcall LocalSize(long) LocalSize32
-510   stdcall LocalUnlock(long) LocalUnlock32
-511   stdcall LockFile(long long long long long) LockFile
-512   stub LockFileEx
-513   stdcall LockResource(long) LockResource32
-514   stdcall MakeCriticalSectionGlobal(ptr) MakeCriticalSectionGlobal
-515   stub MapHInstLS
-516   stub MapHInstLS_PN
-517   stub MapHInstSL
-518   stub MapHInstSL_PN
-519   stub MapHModuleLS
-520   stub MapHModuleSL
-521   stdcall MapLS(ptr) MapLS
-522   stdcall MapSL(long) MapSL
-523   stub MapSLFix
-524   stdcall MapViewOfFile(long long long long long) MapViewOfFile
-525   stdcall MapViewOfFileEx(long long long long long ptr) MapViewOfFileEx
-526   stub Module32First
-527   stub Module32Next
-528   stdcall MoveFileA(ptr ptr) MoveFile32A
-529   stdcall MoveFileExA(ptr ptr long) MoveFileEx32A
-530   stdcall MoveFileExW(ptr ptr long) MoveFileEx32W
-531   stdcall MoveFileW(ptr ptr) MoveFile32W
-532   stdcall MulDiv(long long long) MulDiv32
-533   stdcall MultiByteToWideChar(long long ptr long ptr long) MultiByteToWideChar
-534   stub NotifyNLSUserCache
-535   stdcall OpenEventA(long long ptr) OpenEvent32A
-536   stdcall OpenEventW(long long ptr) OpenEvent32W
-537   stdcall OpenFile(ptr ptr long) OpenFile32
-538   stdcall OpenFileMappingA(long long ptr) OpenFileMapping32A
-539   stdcall OpenFileMappingW(long long ptr) OpenFileMapping32W
-540   stdcall OpenMutexA(long long ptr) OpenMutex32A
-541   stdcall OpenMutexW(long long ptr) OpenMutex32W
-542   stub OpenProcess
-543   stub OpenProfileUserMapping
-544   stdcall OpenSemaphoreA(long long ptr) OpenSemaphore32A
-545   stdcall OpenSemaphoreW(long long ptr) OpenSemaphore32W
-546   stub OpenVxDHandle
-547   stdcall OutputDebugStringA(ptr) OutputDebugString32A
-548   stdcall OutputDebugStringW(ptr) OutputDebugString32W
-549   stub PeekConsoleInputA
-550   stub PeekConsoleInputW
-551   stub PeekNamedPipe
-552   stub PostQueuedCompletionStatus
-553   stub PrepareTape
-554   stub Process32First
-555   stub Process32Next
-556   stub PulseEvent
-557   stub PurgeComm
-558   register QT_Thunk() QT_Thunk
-559   stdcall QueryDosDeviceA(ptr ptr long) QueryDosDevice32A
-560   stdcall QueryDosDeviceW(ptr ptr long) QueryDosDevice32W
-561   stub QueryNumberOfEventLogRecords
-562   stub QueryOldestEventLogRecord
-563   stdcall QueryPerformanceCounter(ptr) QueryPerformanceCounter
-564   stub QueryPerformanceFrequency
-565   stub QueueUserAPC
-566   register RaiseException(long long long ptr) RaiseException
-567   stdcall ReadConsoleA(long ptr long ptr ptr) ReadConsole32A
-568   stub ReadConsoleInputA
-569   stub ReadConsoleInputW
-570   stub ReadConsoleOutputA
-571   stub ReadConsoleOutputAttribute
-572   stub ReadConsoleOutputCharacterA
-573   stub ReadConsoleOutputCharacterW
-574   stub ReadConsoleOutputW
-575   stdcall ReadConsoleW(long ptr long ptr ptr) ReadConsole32W
-576   stdcall ReadFile(long ptr long ptr ptr) ReadFile
-577   stub ReadFileEx
-578   stdcall ReadProcessMemory(long ptr ptr long ptr) ReadProcessMemory
-579   stub RegisterServiceProcess
-580   stdcall ReinitializeCriticalSection(ptr) ReinitializeCriticalSection
-581   stdcall ReleaseMutex(long) ReleaseMutex
-582   stdcall ReleaseSemaphore(long long ptr) ReleaseSemaphore
-583   stdcall RemoveDirectoryA(ptr) RemoveDirectory32A
-584   stdcall RemoveDirectoryW(ptr) RemoveDirectory32W
-585   stdcall ResetEvent(long) ResetEvent
-586   stub ResumeThread
-587   stdcall RtlFillMemory(ptr long long) RtlFillMemory
-588   stdcall RtlMoveMemory(ptr ptr long) RtlMoveMemory
-589   register RtlUnwind(ptr long ptr long) RtlUnwind
-590   stdcall RtlZeroMemory(ptr long) RtlZeroMemory
-591   register SMapLS() SMapLS
-592   register SMapLS_IP_EBP_12() SMapLS_IP_EBP_12
-593   register SMapLS_IP_EBP_16() SMapLS_IP_EBP_16
-594   register SMapLS_IP_EBP_20() SMapLS_IP_EBP_20
-595   register SMapLS_IP_EBP_24() SMapLS_IP_EBP_24
-596   register SMapLS_IP_EBP_28() SMapLS_IP_EBP_28
-597   register SMapLS_IP_EBP_32() SMapLS_IP_EBP_32
-598   register SMapLS_IP_EBP_36() SMapLS_IP_EBP_36
-599   register SMapLS_IP_EBP_40() SMapLS_IP_EBP_40
-600   register SMapLS_IP_EBP_8() SMapLS_IP_EBP_8
-601   stub SUnMapLS
-602   stub SUnMapLS_IP_EBP_12
-603   stub SUnMapLS_IP_EBP_16
-604   stub SUnMapLS_IP_EBP_20
-605   stub SUnMapLS_IP_EBP_24
-606   stub SUnMapLS_IP_EBP_28
-607   stub SUnMapLS_IP_EBP_32
-608   stub SUnMapLS_IP_EBP_36
-609   stub SUnMapLS_IP_EBP_40
-610   stub SUnMapLS_IP_EBP_8
-611   stub ScrollConsoleScreenBufferA
-612   stub ScrollConsoleScreenBufferW
-613   stdcall SearchPathA(ptr ptr ptr long ptr ptr) SearchPath32A
-614   stdcall SearchPathW(ptr ptr ptr long ptr ptr) SearchPath32W
-615   stdcall SetCommBreak(long) SetCommBreak32
-616   stub SetCommConfig
-617   stdcall SetCommMask(long ptr) SetCommMask
-618   stdcall SetCommState(long ptr) SetCommState32
-619   stdcall SetCommTimeouts(long ptr) SetCommTimeouts
-620   stub SetComputerNameA
-621   stub SetComputerNameW
-622   stub SetConsoleActiveScreenBuffer
-623   stub SetConsoleCP
-624   stdcall SetConsoleCtrlHandler(ptr long) SetConsoleCtrlHandler
-625   stub SetConsoleCursorInfo
-626   stdcall SetConsoleCursorPosition(long long) SetConsoleCursorPosition
-627   stdcall SetConsoleMode(long long) SetConsoleMode
-628   stub SetConsoleOutputCP
-629   stub SetConsoleScreenBufferSize
-630   stub SetConsoleTextAttribute
-631   stdcall SetConsoleTitleA(ptr) SetConsoleTitle32A
-632   stdcall SetConsoleTitleW(ptr) SetConsoleTitle32W
-633   stub SetConsoleWindowInfo
-634   stdcall SetCurrentDirectoryA(ptr) SetCurrentDirectory32A
-635   stdcall SetCurrentDirectoryW(ptr) SetCurrentDirectory32W
-636   stub SetDaylightFlag
-637   stub SetDefaultCommConfigA
-638   stub SetDefaultCommConfigW
-639   stdcall SetEndOfFile(long) SetEndOfFile
-640   stdcall SetEnvironmentVariableA(ptr ptr) SetEnvironmentVariable32A
-641   stdcall SetEnvironmentVariableW(ptr ptr) SetEnvironmentVariable32W
-642   stdcall SetErrorMode(long) SetErrorMode32
-643   stdcall	SetEvent(long) SetEvent
-644   stdcall SetFileApisToANSI() SetFileApisToANSI
-645   stdcall SetFileApisToOEM() SetFileApisToOEM
-646   stdcall SetFileAttributesA(ptr long) SetFileAttributes32A
-647   stdcall SetFileAttributesW(ptr long) SetFileAttributes32W
-648   stdcall SetFilePointer(long long ptr long) SetFilePointer
-649   stdcall SetFileTime(long ptr ptr ptr) SetFileTime
-650   stub SetHandleContext
-651   stdcall SetHandleCount(long) SetHandleCount32
-652   stub SetHandleInformation
-653   stdcall SetLastError(long) SetLastError
-654   stub SetLocalTime
-655   stdcall SetLocaleInfoA(long long ptr) SetLocaleInfoA
-656   stub SetLocaleInfoW
-657   stub SetMailslotInfo
-658   stub SetNamedPipeHandleState
-659   stdcall SetPriorityClass(long long) SetPriorityClass
-660   stdcall SetProcessShutdownParameters(long long) SetProcessShutdownParameters
-661   stdcall SetProcessWorkingSetSize(long long long) SetProcessWorkingSetSize
-662   stdcall SetStdHandle(long long) SetStdHandle
-663   stdcall SetSystemPowerState(long long) SetSystemPowerState
-664   stdcall SetSystemTime(ptr) SetSystemTime
-665   stub SetSystemTimeAdjustment
-666   stub SetTapeParameters
-667   stub SetTapePosition
-668   stdcall SetThreadAffinityMask(long long)	SetThreadAffinityMask
-669   stub SetThreadContext
-670   stub SetThreadLocale
-671   stdcall SetThreadPriority(long long) SetThreadPriority
-672   stdcall SetTimeZoneInformation(ptr) SetTimeZoneInformation
-673   stdcall SetUnhandledExceptionFilter(ptr) THUNK_SetUnhandledExceptionFilter
-674   stub SetVolumeLabelA
-675   stub SetVolumeLabelW
-676   stub SetupComm
-677   stdcall SizeofResource(long long) SizeofResource32
-678   stdcall Sleep(long) Sleep
-679   stub SleepEx
-680   stub SuspendThread
-681   stdcall SystemTimeToFileTime(ptr ptr) SystemTimeToFileTime
-682   stub SystemTimeToTzSpecificLocalTime
-683   stub TerminateProcess
-684   stdcall TerminateThread(long long) TerminateThread
-685   stub Thread32First
-686   stub Thread32Next
-687   stdcall ThunkConnect32(ptr ptr ptr ptr ptr ptr) ThunkConnect32
-688   stdcall TlsAlloc()	TlsAlloc
-689   stub TlsAllocInternal
-690   stdcall TlsFree(long) TlsFree
-691   stub TlsFreeInternal
-692   stdcall TlsGetValue(long) TlsGetValue
-693   stdcall TlsSetValue(long ptr) TlsSetValue
-694   stub Toolhelp32ReadProcessMemory
-695   stub TransactNamedPipe
-696   stdcall TransmitCommChar(long long) TransmitCommChar32
-697   stub UTRegister
-698   stub UTUnRegister
-699   stdcall UnMapLS(long) UnMapLS
-700   stub UnMapSLFixArray
-701   stdcall UnhandledExceptionFilter(ptr) UnhandledExceptionFilter
-702   stub UninitializeCriticalSection
-703   stdcall UnlockFile(long long long long long) UnlockFile
-704   stub UnlockFileEx
-705   stdcall UnmapViewOfFile(ptr) UnmapViewOfFile
-706   stub UpdateResourceA
-707   stub UpdateResourceW
-708   stub VerLanguageNameA
-709   stub VerLanguageNameW
-710   stdcall VirtualAlloc(ptr long long long) VirtualAlloc
-711   stdcall VirtualFree(ptr long long) VirtualFree
-712   stdcall VirtualLock(ptr long) VirtualLock
-713   stdcall VirtualProtect(ptr long long ptr) VirtualProtect
-714   stdcall VirtualProtectEx(long ptr long long ptr) VirtualProtectEx
-715   stdcall VirtualQuery(ptr ptr long) VirtualQuery
-716   stdcall VirtualQueryEx(long ptr ptr long) VirtualQueryEx
-717   stdcall VirtualUnlock(ptr long) VirtualUnlock
-718   stub WaitCommEvent
-719   stub WaitForDebugEvent
-720   stub WaitForMultipleObjects
-721   stub WaitForMultipleObjectsEx
-722   stdcall WaitForSingleObject(long long) WaitForSingleObject
-723   stdcall WaitForSingleObjectEx(long long long) WaitForSingleObjectEx
-724   stub WaitNamedPipeA
-725   stub WaitNamedPipeW
-726   stdcall WideCharToMultiByte(long long ptr long ptr long ptr ptr)	WideCharToMultiByte
-727   stdcall WinExec(ptr long) WinExec32
-728   stdcall WriteConsoleA(long ptr long ptr ptr) WriteConsole32A
-729   stub WriteConsoleInputA
-730   stub WriteConsoleInputW
-731   stub WriteConsoleOutputA
-732   stub WriteConsoleOutputAttribute
-733   stub WriteConsoleOutputCharacterA
-734   stub WriteConsoleOutputCharacterW
-735   stub WriteConsoleOutputW
-736   stdcall WriteConsoleW(long ptr long ptr ptr) WriteConsole32W
-737   stdcall WriteFile(long ptr long ptr ptr) WriteFile
-738   stub WriteFileEx
-739   stub WritePrivateProfileSectionA
-740   stub WritePrivateProfileSectionW
-741   stdcall WritePrivateProfileStringA(ptr ptr ptr ptr) WritePrivateProfileString32A
-742   stdcall WritePrivateProfileStringW(ptr ptr ptr ptr) WritePrivateProfileString32W
-743   stub WritePrivateProfileStructA
-744   stub WritePrivateProfileStructW
-745   stub WriteProcessMemory
-746   stub WriteProfileSectionA
-747   stub WriteProfileSectionW
-748   stdcall WriteProfileStringA(ptr ptr ptr) WriteProfileString32A
-749   stdcall WriteProfileStringW(ptr ptr ptr) WriteProfileString32W
-750   stub WriteTapemark
-751   stub _DebugOut
-752   stub _DebugPrintf
-753   stdcall _hread(long ptr long) _hread32
-754   stdcall _hwrite(long ptr long) _hwrite32
-755   stdcall _lclose(long) _lclose32
-756   stdcall _lcreat(ptr long) _lcreat32
-757   stdcall _llseek(long long long) _llseek32
-758   stdcall _lopen(ptr long) _lopen32
-759   stdcall _lread(long ptr long) _lread32
-760   stdcall _lwrite(long ptr long) _lwrite32
-761   stub dprintf
-762   stdcall lstrcat(ptr ptr) lstrcat32A
-763   stdcall lstrcatA(ptr ptr) lstrcat32A
-764   stdcall lstrcatW(ptr ptr) lstrcat32W
-765   stdcall lstrcmp(ptr ptr) lstrcmp32A
-766   stdcall lstrcmpA(ptr ptr) lstrcmp32A
-767   stdcall lstrcmpW(ptr ptr) lstrcmp32W
-768   stdcall lstrcmpi(ptr ptr) lstrcmpi32A
-769   stdcall lstrcmpiA(ptr ptr) lstrcmpi32A
-770   stdcall lstrcmpiW(ptr ptr) lstrcmpi32W
-771   stdcall lstrcpy(ptr ptr) lstrcpy32A
-772   stdcall lstrcpyA(ptr ptr) lstrcpy32A
-773   stdcall lstrcpyW(ptr ptr) lstrcpy32W
-774   stdcall lstrcpyn(ptr ptr long) lstrcpyn32A
-775   stdcall lstrcpynA(ptr ptr long) lstrcpyn32A
-776   stdcall lstrcpynW(ptr ptr long) lstrcpyn32W
-777   stdcall lstrlen(ptr) lstrlen32A
-778   stdcall lstrlenA(ptr) lstrlen32A
-779   stdcall lstrlenW(ptr) lstrlen32W
+102 stdcall AddAtomW(ptr) AddAtom32W
+103 stub AllocConsole
+104 stub AllocLSCallback
+105 stub AllocSLCallback
+106 stdcall AreFileApisANSI() AreFileApisANSI
+107 stub BackupRead
+108 stub BackupSeek
+109 stub BackupWrite
+110 stdcall Beep(long long) Beep
+111 stub BeginUpdateResourceA
+112 stub BeginUpdateResourceW
+113 stdcall BuildCommDCBA(ptr ptr) BuildCommDCB32A
+114 stdcall BuildCommDCBAndTimeoutsA(ptr ptr ptr) BuildCommDCBAndTimeouts32A
+115 stdcall BuildCommDCBAndTimeoutsW(ptr ptr ptr) BuildCommDCBAndTimeouts32W
+116 stdcall BuildCommDCBW(ptr ptr) BuildCommDCB32W
+117 stub CallNamedPipeA
+118 stub CallNamedPipeW
+119 stub Callback12
+120 stub Callback16
+121 stub Callback20
+122 stub Callback24
+123 stub Callback28
+124 stub Callback32
+125 stub Callback36
+126 stub Callback40
+127 stub Callback44
+128 stub Callback48
+129 stub Callback4
+130 stub Callback52
+131 stub Callback56
+132 stub Callback60
+133 stub Callback64
+134 stub Callback8
+135 stdcall ClearCommBreak(long) ClearCommBreak32
+136 stdcall ClearCommError(long ptr ptr) ClearCommError
+137 stdcall CloseHandle(long) CloseHandle
+138 stub CloseProfileUserMapping
+139 stub CloseSystemHandle
+140 stub CommConfigDialogA
+141 stub CommConfigDialogW
+142 stdcall CompareFileTime(ptr ptr) CompareFileTime
+143 stdcall CompareStringA(long long ptr long ptr long) CompareString32A
+144 stdcall CompareStringW(long long ptr long ptr long) CompareString32W
+145 stub ConnectNamedPipe
+146 stdcall ContinueDebugEvent(long long long) ContinueDebugEvent
+147 stub ConvertDefaultLocale
+148 stdcall ConvertToGlobalHandle(long) ConvertToGlobalHandle
+149 stdcall CopyFileA(ptr ptr long) CopyFile32A
+150 stdcall CopyFileW(ptr ptr long) CopyFile32W
+151 stub CreateConsoleScreenBuffer
+152 stdcall CreateDirectoryA(ptr ptr) CreateDirectory32A
+153 stdcall CreateDirectoryExA(ptr ptr ptr) CreateDirectoryEx32A
+154 stdcall CreateDirectoryExW(ptr ptr ptr) CreateDirectoryEx32W
+155 stdcall CreateDirectoryW(ptr ptr) CreateDirectory32W
+156 stdcall CreateEventA(ptr long long ptr) CreateEvent32A
+157 stdcall CreateEventW(ptr long long ptr) CreateEvent32W
+158 stdcall CreateFileA(ptr long long ptr long long long) CreateFile32A
+159 stdcall CreateFileMappingA(long ptr long long long ptr) CreateFileMapping32A
+160 stdcall CreateFileMappingW(long ptr long long long ptr) CreateFileMapping32W
+161 stdcall CreateFileW(ptr long long ptr long long long) CreateFile32W
+162 stub CreateIoCompletionPort
+163 stub CreateKernelThread
+164 stub CreateMailslotA
+165 stub CreateMailslotW
+166 stdcall CreateMutexA(ptr long ptr) CreateMutex32A
+167 stdcall CreateMutexW(ptr long ptr) CreateMutex32W
+168 stub CreateNamedPipeA
+169 stub CreateNamedPipeW
+170 stub CreatePipe
+171 stdcall CreateProcessA(ptr ptr ptr ptr long long ptr ptr ptr ptr) CreateProcess32A
+172 stub CreateProcessW
+173 stub CreateRemoteThread
+174 stdcall CreateSemaphoreA(ptr long long ptr) CreateSemaphore32A
+175 stdcall CreateSemaphoreW(ptr long long ptr) CreateSemaphore32W
+176 stub CreateSocketHandle
+177 stub CreateTapePartition
+178 stdcall CreateThread(ptr long ptr long long ptr) CreateThread
+179 stub CreateToolhelp32Snapshot
+180 stub DebugActiveProcess
+181 register DebugBreak() DebugBreak32
+182 stub DefineDosDeviceA
+183 stub DefineDosDeviceW
+184 stdcall DeleteAtom(long) DeleteAtom32
+185 stdcall DeleteCriticalSection(ptr)	DeleteCriticalSection
+186 stdcall DeleteFileA(ptr) DeleteFile32A
+187 stdcall DeleteFileW(ptr) DeleteFile32W
+188 stub DeviceIoControl
+189 stdcall DisableThreadLibraryCalls(long) DisableThreadLibraryCalls
+190 stub DisconnectNamedPipe
+191 stdcall DosDateTimeToFileTime(long long ptr) DosDateTimeToFileTime
+192 stdcall DuplicateHandle(long long long ptr long long long) DuplicateHandle
+193 stub EndUpdateResourceA
+194 stub EndUpdateResourceW
+195 stdcall EnterCriticalSection(ptr)	EnterCriticalSection
+196 stub EnumCalendarInfoA
+197 stub EnumCalendarInfoW
+198 stub EnumDateFormatsA
+199 stub EnumDateFormatsW
+200 stdcall EnumResourceLanguagesA(long ptr ptr ptr long) EnumResourceLanguages32A
+201 stdcall EnumResourceLanguagesW(long ptr ptr ptr long) EnumResourceLanguages32W
+202 stdcall EnumResourceNamesA(long ptr ptr long) EnumResourceNames32A
+203 stdcall EnumResourceNamesW(long ptr ptr long) EnumResourceNames32W
+204 stdcall EnumResourceTypesA(long ptr long) EnumResourceTypes32A
+205 stdcall EnumResourceTypesW(long ptr long) EnumResourceTypes32W
+206 stdcall EnumSystemCodePagesA(ptr long) EnumSystemCodePages32A
+207 stdcall EnumSystemCodePagesW(ptr long) EnumSystemCodePages32W
+208 stdcall EnumSystemLocalesA(ptr long) EnumSystemLocales32A
+209 stdcall EnumSystemLocalesW(ptr long) EnumSystemLocales32W
+210 stub EnumTimeFormatsA
+211 stub EnumTimeFormatsW
+212 stub EraseTape
+213 stdcall EscapeCommFunction(long long) EscapeCommFunction32
+214 stdcall ExitProcess(long) ExitProcess
+215 stub ExitThread
+216 stdcall ExpandEnvironmentStringsA(ptr ptr long) ExpandEnvironmentStrings32A
+217 stdcall ExpandEnvironmentStringsW(ptr ptr long) ExpandEnvironmentStrings32W
+218 stub FT_Exit0
+219 stub FT_Exit12
+220 stub FT_Exit16
+221 stub FT_Exit20
+222 stub FT_Exit24
+223 stub FT_Exit28
+224 stub FT_Exit32
+225 stub FT_Exit36
+227 stub FT_Exit40
+228 stub FT_Exit44
+229 stub FT_Exit48
+226 stub FT_Exit4
+230 stub FT_Exit52
+231 stub FT_Exit56
+232 stub FT_Exit8
+233 stub FT_Prolog
+234 stub FT_Thunk
+235 stdcall FatalAppExitA(long ptr) FatalAppExit32A
+236 stdcall FatalAppExitW(long ptr) FatalAppExit32W
+237 stub FatalExit
+238 stdcall FileTimeToDosDateTime(ptr ptr ptr) FileTimeToDosDateTime
+239 stdcall FileTimeToLocalFileTime(ptr ptr) FileTimeToLocalFileTime
+240 stdcall FileTimeToSystemTime(ptr ptr) FileTimeToSystemTime
+241 stub FillConsoleOutputAttribute
+242 stub FillConsoleOutputCharacterA
+243 stub FillConsoleOutputCharacterW
+244 stdcall FindAtomA(ptr) FindAtom32A
+245 stdcall FindAtomW(ptr) FindAtom32W
+247 stub FindCloseChangeNotification
+246 stdcall FindClose(long) FindClose32
+248 stub FindFirstChangeNotificationA
+249 stub FindFirstChangeNotificationW
+250 stdcall FindFirstFileA(ptr ptr) FindFirstFile32A
+251 stdcall FindFirstFileW(ptr ptr) FindFirstFile32W
+252 stub FindNextChangeNotification
+253 stdcall FindNextFileA(long ptr) FindNextFile32A
+254 stdcall FindNextFileW(long ptr) FindNextFile32W
+255 stdcall FindResourceA(long ptr ptr) FindResource32A
+256 stdcall FindResourceExA(long ptr ptr long) FindResourceEx32A
+257 stdcall FindResourceExW(long ptr ptr long) FindResourceEx32W
+258 stdcall FindResourceW(long ptr ptr) FindResource32W
+259 stdcall FlushConsoleInputBuffer(long) FlushConsoleInputBuffer
+260 stdcall FlushFileBuffers(long) FlushFileBuffers
+261 stub FlushInstructionCache
+262 stub FlushViewOfFile
+263 stub FoldStringA
+264 stub FoldStringW
+265 stdcall FormatMessageA(long ptr long long ptr long ptr) FormatMessage32A
+266 stdcall FormatMessageW(long ptr long long ptr long ptr) FormatMessage32W
+267 stub FreeConsole
+268 stdcall FreeEnvironmentStringsA(ptr) FreeEnvironmentStrings32A
+269 stdcall FreeEnvironmentStringsW(ptr) FreeEnvironmentStrings32W
+270 stub FreeLSCallback
+272 stub FreeLibraryAndExitThread
+271 stdcall FreeLibrary(long) FreeLibrary32
+273 stdcall FreeResource(long) FreeResource32
+274 stub FreeSLCallback
+275 stub GenerateConsoleCtrlEvent
+276 stdcall GetACP() GetACP
+277 stdcall GetAtomNameA(long ptr long) GetAtomName32A
+278 stdcall GetAtomNameW(long ptr long) GetAtomName32W
+279 stub GetBinaryType
+280 stub GetBinaryTypeA
+281 stub GetBinaryTypeW
+282 stdcall GetCPInfo(long ptr) GetCPInfo
+283 stub GetCommConfig
+284 stdcall GetCommMask(long ptr) GetCommMask
+285 stub GetCommModemStatus
+286 stub GetCommProperties
+287 stdcall GetCommState(long ptr) GetCommState32
+288 stdcall GetCommTimeouts(long ptr) GetCommTimeouts
+289 stdcall GetCommandLineA() GetCommandLine32A
+290 stdcall GetCommandLineW() GetCommandLine32W
+291 stub GetCompressedFileSizeA
+292 stub GetCompressedFileSizeW
+293 stdcall GetComputerNameA(ptr ptr) GetComputerName32A
+294 stdcall GetComputerNameW(ptr ptr) GetComputerName32W
+295 stdcall GetConsoleCP() GetConsoleCP
+296 stub GetConsoleCursorInfo
+297 stdcall GetConsoleMode(long ptr) GetConsoleMode
+298 stdcall GetConsoleOutputCP() GetConsoleOutputCP
+299 stdcall GetConsoleScreenBufferInfo(long ptr) GetConsoleScreenBufferInfo
+300 stdcall GetConsoleTitleA(ptr long) GetConsoleTitle32A
+301 stdcall GetConsoleTitleW(ptr long) GetConsoleTitle32W
+302 stub GetCurrencyFormatA
+303 stub GetCurrencyFormatW
+304 stdcall GetCurrentDirectoryA(long ptr) GetCurrentDirectory32A
+305 stdcall GetCurrentDirectoryW(long ptr) GetCurrentDirectory32W
+306 stdcall GetCurrentProcess() GetCurrentProcess
+307 stdcall GetCurrentProcessId() GetCurrentProcessId
+308 stdcall GetCurrentThread() GetCurrentThread
+309 stdcall GetCurrentThreadId() GetCurrentThreadId
+310 stub GetDateFormatA
+311 stub GetDateFormatW
+312 stub GetDaylightFlag
+313 stub GetDefaultCommConfigA
+314 stub GetDefaultCommConfigW
+315 stdcall GetDiskFreeSpaceA(ptr ptr ptr ptr ptr) GetDiskFreeSpace32A
+316 stdcall GetDiskFreeSpaceW(ptr ptr ptr ptr ptr) GetDiskFreeSpace32W
+317 stdcall GetDriveTypeA(ptr) GetDriveType32A
+318 stdcall GetDriveTypeW(ptr) GetDriveType32W
+320 stdcall GetEnvironmentStringsA() GetEnvironmentStrings32A
+321 stdcall GetEnvironmentStringsW() GetEnvironmentStrings32W
+319 stdcall GetEnvironmentStrings() GetEnvironmentStrings32A
+322 stdcall GetEnvironmentVariableA(ptr ptr long) GetEnvironmentVariable32A
+323 stdcall GetEnvironmentVariableW(ptr ptr long) GetEnvironmentVariable32W
+324 stub GetErrorMode
+325 stub GetExitCodeProcess
+326 stdcall GetExitCodeThread(long ptr) GetExitCodeThread
+327 stdcall GetFileAttributesA(ptr) GetFileAttributes32A
+328 stdcall GetFileAttributesW(ptr) GetFileAttributes32W
+329 stdcall GetFileInformationByHandle(long ptr) GetFileInformationByHandle
+330 stdcall GetFileSize(long ptr) GetFileSize
+331 stdcall GetFileTime(long ptr ptr ptr) GetFileTime
+332 stdcall GetFileType(long) GetFileType
+333 stdcall GetFullPathNameA(ptr long ptr ptr) GetFullPathName32A
+334 stdcall GetFullPathNameW(ptr long ptr ptr) GetFullPathName32W
+335 stub GetHandleContext
+336 stub GetHandleInformation
+337 stub GetLSCallbackTarget
+338 stub GetLSCallbackTemplate
+339 stdcall GetLargestConsoleWindowSize(long) GetLargestConsoleWindowSize
+340 stdcall GetLastError() GetLastError
+341 stdcall GetLocalTime(ptr) GetLocalTime
+342 stdcall GetLocaleInfoA(long long ptr long) GetLocaleInfo32A
+343 stdcall GetLocaleInfoW(long long ptr long) GetLocaleInfo32W
+344 stdcall GetLogicalDriveStringsA(long ptr) GetLogicalDriveStrings32A
+345 stdcall GetLogicalDriveStringsW(long ptr) GetLogicalDriveStrings32W
+346 stdcall GetLogicalDrives() GetLogicalDrives
+347 stub GetMailslotInfo
+348 stdcall GetModuleFileNameA(long ptr long) GetModuleFileName32A
+349 stdcall GetModuleFileNameW(long ptr long) GetModuleFileName32W
+350 stdcall GetModuleHandleA(ptr) GetModuleHandle32A
+351 stdcall GetModuleHandleW(ptr) GetModuleHandle32W
+352 stub GetNamedPipeHandleStateA
+353 stub GetNamedPipeHandleStateW
+354 stub GetNamedPipeInfo
+355 stub GetNumberFormatA
+356 stub GetNumberFormatW
+357 stdcall GetNumberOfConsoleInputEvents(long ptr) GetNumberOfConsoleInputEvents
+358 stub GetNumberOfConsoleMouseButtons
+359 stdcall GetOEMCP() GetOEMCP
+360 stub GetOverlappedResult
+361 stdcall GetPriorityClass(long) GetPriorityClass
+362 stdcall GetPrivateProfileIntA(ptr ptr long ptr) GetPrivateProfileInt32A
+363 stdcall GetPrivateProfileIntW(ptr ptr long ptr) GetPrivateProfileInt32W
+364 stdcall GetPrivateProfileSectionA(ptr ptr long ptr) GetPrivateProfileSection32A
+365 stub GetPrivateProfileSectionNamesA
+366 stub GetPrivateProfileSectionNamesW
+367 stub GetPrivateProfileSectionW
+368 stdcall GetPrivateProfileStringA(ptr ptr ptr ptr long ptr) GetPrivateProfileString32A
+369 stdcall GetPrivateProfileStringW(ptr ptr ptr ptr long ptr) GetPrivateProfileString32W
+370 stub GetPrivateProfileStructA
+371 stub GetPrivateProfileStructW
+372 stdcall GetProcAddress(long ptr) GetProcAddress32
+373 stdcall GetProcessAffinityMask(long ptr ptr)	GetProcessAffinityMask
+374 stub GetProcessFlags
+375 stdcall GetProcessHeap() GetProcessHeap
+376 stub GetProcessHeaps
+377 stub GetProcessShutdownParameters
+378 stdcall GetProcessTimes(long ptr ptr ptr ptr) GetProcessTimes
+379 stdcall GetProcessVersion(long) GetProcessVersion
+380 stdcall GetProcessWorkingSetSize(long ptr ptr) GetProcessWorkingSetSize
+381 stub GetProductName
+382 stdcall GetProfileIntA(ptr ptr long) GetProfileInt32A
+383 stdcall GetProfileIntW(ptr ptr long) GetProfileInt32W
+384 stdcall GetProfileSectionA(ptr ptr long) GetProfileSection32A
+385 stub GetProfileSectionW
+386 stdcall GetProfileStringA(ptr ptr ptr ptr long) GetProfileString32A
+387 stdcall GetProfileStringW(ptr ptr ptr ptr long) GetProfileString32W
+388 stub GetQueuedCompletionStatus
+389 stub GetSLCallbackTarget
+390 stub GetSLCallbackTemplate
+391 stdcall GetShortPathNameA(ptr ptr long) GetShortPathName32A
+392 stdcall GetShortPathNameW(ptr ptr long) GetShortPathName32W
+393 stdcall GetStartupInfoA(ptr) GetStartupInfo32A
+394 stdcall GetStartupInfoW(ptr) GetStartupInfo32W
+395 stdcall GetStdHandle(long)	GetStdHandle
+396 stdcall GetStringTypeA(long long ptr long ptr) GetStringType32A
+397 stdcall GetStringTypeExA(long long ptr long ptr) GetStringTypeEx32A
+398 stdcall GetStringTypeExW(long long ptr long ptr) GetStringTypeEx32W
+399 stdcall GetStringTypeW(long ptr long ptr) GetStringType32W
+400 stdcall GetSystemDefaultLCID() GetSystemDefaultLCID
+401 stdcall GetSystemDefaultLangID() GetSystemDefaultLangID
+402 stdcall GetSystemDirectoryA(ptr long) GetSystemDirectory32A
+403 stdcall GetSystemDirectoryW(ptr long) GetSystemDirectory32W
+404 stdcall GetSystemInfo(ptr) GetSystemInfo
+405 stdcall GetSystemPowerStatus(ptr) GetSystemPowerStatus
+406 stdcall GetSystemTime(ptr) GetSystemTime
+407 stub GetSystemTimeAdjustment
+408 stub GetSystemTimeAsFileTime
+409 stub GetTapeParameters
+410 stub GetTapePosition
+411 stub GetTapeStatus
+412 stdcall GetTempFileNameA(ptr ptr long ptr) GetTempFileName32A
+413 stdcall GetTempFileNameW(ptr ptr long ptr) GetTempFileName32W
+414 stdcall GetTempPathA(long ptr) GetTempPath32A
+415 stdcall GetTempPathW(long ptr) GetTempPath32W
+416 stdcall GetThreadContext(long ptr) GetThreadContext
+417 stdcall GetThreadLocale() GetThreadLocale
+418 stdcall GetThreadPriority(long) GetThreadPriority
+419 stdcall GetThreadSelectorEntry(long long ptr) GetThreadSelectorEntry
+420 stub GetThreadTimes
+421 stdcall GetTickCount() GetTickCount
+422 stub GetTimeFormatA
+423 stub GetTimeFormatW
+424 stdcall GetTimeZoneInformation(ptr) GetTimeZoneInformation
+425 stdcall GetUserDefaultLCID() GetUserDefaultLCID
+426 stdcall GetUserDefaultLangID() GetUserDefaultLangID
+427 stdcall GetVersion() GetVersion32
+428 stdcall GetVersionExA(ptr) GetVersionEx32A
+429 stdcall GetVersionExW(ptr) GetVersionEx32W
+430 stdcall GetVolumeInformationA(ptr ptr long ptr ptr ptr ptr long) GetVolumeInformation32A
+431 stdcall GetVolumeInformationW(ptr ptr long ptr ptr ptr ptr long) GetVolumeInformation32W
+432 stdcall GetWindowsDirectoryA(ptr long) GetWindowsDirectory32A
+433 stdcall GetWindowsDirectoryW(ptr long) GetWindowsDirectory32W
+434 stdcall GlobalAddAtomA(ptr) GlobalAddAtom32A
+435 stdcall GlobalAddAtomW(ptr) GlobalAddAtom32W
+436 stdcall GlobalAlloc(long long) GlobalAlloc32
+437 stdcall GlobalCompact(long) GlobalCompact32
+438 stdcall GlobalDeleteAtom(long) GlobalDeleteAtom
+439 stdcall GlobalFindAtomA(ptr) GlobalFindAtom32A
+440 stdcall GlobalFindAtomW(ptr) GlobalFindAtom32W
+441 stdcall GlobalFix(long) GlobalFix32
+442 stdcall GlobalFlags(long) GlobalFlags32
+443 stdcall GlobalFree(long) GlobalFree32
+444 stdcall GlobalGetAtomNameA(long ptr long) GlobalGetAtomName32A
+445 stdcall GlobalGetAtomNameW(long ptr long) GlobalGetAtomName32W
+446 stdcall GlobalHandle(ptr) GlobalHandle32
+447 stdcall GlobalLock(long) GlobalLock32
+448 stdcall GlobalMemoryStatus(ptr) GlobalMemoryStatus
+449 stdcall GlobalReAlloc(long long long) GlobalReAlloc32
+450 stdcall GlobalSize(long) GlobalSize32
+451 stdcall GlobalUnWire(long) GlobalUnWire32
+452 stdcall GlobalUnfix(long) GlobalUnfix32
+453 stdcall GlobalUnlock(long) GlobalUnlock32
+454 stdcall GlobalWire(long) GlobalWire32
+455 stub Heap32First
+456 stub Heap32ListFirst
+457 stub Heap32ListNext
+458 stub Heap32Next
+459 stdcall HeapAlloc(long long long) HeapAlloc
+460 stdcall HeapCompact(long long) HeapCompact
+461 stdcall HeapCreate(long long long)	HeapCreate
+462 stdcall HeapDestroy(long) HeapDestroy
+463 stdcall HeapFree(long long ptr) HeapFree
+464 stdcall HeapLock(long) HeapLock
+465 stdcall HeapReAlloc(long long ptr long) HeapReAlloc
+466 stub HeapSetFlags
+467 stdcall HeapSize(long long ptr) HeapSize
+468 stdcall HeapUnlock(long) HeapUnlock
+469 stdcall HeapValidate(long long ptr) HeapValidate
+470 stdcall HeapWalk(long ptr) HeapWalk
+471 stub InitAtomTable
+472 stdcall InitializeCriticalSection(ptr) InitializeCriticalSection
+473 stdcall InterlockedDecrement(ptr) InterlockedDecrement
+474 stdcall InterlockedExchange(ptr long) InterlockedExchange
+475 stdcall InterlockedIncrement(ptr) InterlockedIncrement
+476 stub InvalidateNLSCache
+477 stdcall IsBadCodePtr(ptr) IsBadCodePtr32
+478 stdcall IsBadHugeReadPtr(ptr long) IsBadHugeReadPtr32
+479 stdcall IsBadHugeWritePtr(ptr long) IsBadHugeWritePtr32
+480 stdcall IsBadReadPtr(ptr long) IsBadReadPtr32
+481 stdcall IsBadStringPtrA(ptr long) IsBadStringPtr32A
+482 stdcall IsBadStringPtrW(ptr long) IsBadStringPtr32W
+483 stdcall IsBadWritePtr(ptr long) IsBadWritePtr32
+484 stdcall IsDBCSLeadByte(long) IsDBCSLeadByte32
+485 stdcall IsDBCSLeadByteEx(long long) IsDBCSLeadByteEx
+486 stub IsLSCallback
+487 stub IsSLCallback
+488 stdcall IsValidCodePage(long) IsValidCodePage
+489 stdcall IsValidLocale(long long) IsValidLocale
+490 stub K32Thk1632Epilog
+491 stub K32Thk1632Prolog
+492 stdcall LCMapStringA(long long ptr long ptr long) LCMapString32A
+493 stdcall LCMapStringW(long long ptr long ptr long) LCMapString32W
+494 stdcall LeaveCriticalSection(ptr)	LeaveCriticalSection
+495 stdcall LoadLibraryA(ptr) LoadLibrary32A
+496 stdcall LoadLibraryExA(ptr long long) LoadLibraryEx32A
+497 stub LoadLibraryExW
+498 stdcall LoadLibraryW(ptr) LoadLibrary32W
+499 stub LoadModule
+500 stdcall LoadResource(long long) LoadResource32
+501 stdcall LocalAlloc(long long) LocalAlloc32
+502 stdcall LocalCompact(long) LocalCompact32
+503 stdcall LocalFileTimeToFileTime(ptr ptr) LocalFileTimeToFileTime
+504 stdcall LocalFlags(long) LocalFlags32
+505 stdcall LocalFree(long) LocalFree32
+506 stdcall LocalHandle(ptr) LocalHandle32
+507 stdcall LocalLock(long) LocalLock32
+508 stdcall LocalReAlloc(long long long) LocalReAlloc32
+509 stdcall LocalShrink(long long) LocalShrink32
+510 stdcall LocalSize(long) LocalSize32
+511 stdcall LocalUnlock(long) LocalUnlock32
+512 stdcall LockFile(long long long long long) LockFile
+513 stub LockFileEx
+514 stdcall LockResource(long) LockResource32
+515 stdcall MakeCriticalSectionGlobal(ptr) MakeCriticalSectionGlobal
+516 stub MapHInstLS
+517 stub MapHInstLS_PN
+518 stub MapHInstSL
+519 stub MapHInstSL_PN
+520 stub MapHModuleLS
+521 stub MapHModuleSL
+522 stdcall MapLS(ptr) MapLS
+523 stdcall MapSL(long) MapSL
+524 stub MapSLFix
+525 stdcall MapViewOfFile(long long long long long) MapViewOfFile
+526 stdcall MapViewOfFileEx(long long long long long ptr) MapViewOfFileEx
+527 stub Module32First
+528 stub Module32Next
+529 stdcall MoveFileA(ptr ptr) MoveFile32A
+530 stdcall MoveFileExA(ptr ptr long) MoveFileEx32A
+531 stdcall MoveFileExW(ptr ptr long) MoveFileEx32W
+532 stdcall MoveFileW(ptr ptr) MoveFile32W
+533 stdcall MulDiv(long long long) MulDiv32
+534 stdcall MultiByteToWideChar(long long ptr long ptr long) MultiByteToWideChar
+535 stub NotifyNLSUserCache
+536 stdcall OpenEventA(long long ptr) OpenEvent32A
+537 stdcall OpenEventW(long long ptr) OpenEvent32W
+538 stdcall OpenFile(ptr ptr long) OpenFile32
+539 stdcall OpenFileMappingA(long long ptr) OpenFileMapping32A
+540 stdcall OpenFileMappingW(long long ptr) OpenFileMapping32W
+541 stdcall OpenMutexA(long long ptr) OpenMutex32A
+542 stdcall OpenMutexW(long long ptr) OpenMutex32W
+543 stub OpenProcess
+544 stub OpenProfileUserMapping
+545 stdcall OpenSemaphoreA(long long ptr) OpenSemaphore32A
+546 stdcall OpenSemaphoreW(long long ptr) OpenSemaphore32W
+547 stub OpenVxDHandle
+548 stdcall OutputDebugStringA(ptr) OutputDebugString32A
+549 stdcall OutputDebugStringW(ptr) OutputDebugString32W
+550 stub PeekConsoleInputA
+551 stub PeekConsoleInputW
+552 stub PeekNamedPipe
+553 stub PostQueuedCompletionStatus
+554 stub PrepareTape
+555 stub Process32First
+556 stub Process32Next
+557 stub PulseEvent
+558 stdcall PurgeComm(long long) PurgeComm
+559 register QT_Thunk() QT_Thunk
+560 stdcall QueryDosDeviceA(ptr ptr long) QueryDosDevice32A
+561 stdcall QueryDosDeviceW(ptr ptr long) QueryDosDevice32W
+562 stub QueryNumberOfEventLogRecords
+563 stub QueryOldestEventLogRecord
+564 stdcall QueryPerformanceCounter(ptr) QueryPerformanceCounter
+565 stub QueryPerformanceFrequency
+566 stub QueueUserAPC
+567 register RaiseException(long long long ptr) RaiseException
+568 stdcall ReadConsoleA(long ptr long ptr ptr) ReadConsole32A
+569 stub ReadConsoleInputA
+570 stub ReadConsoleInputW
+571 stub ReadConsoleOutputA
+572 stub ReadConsoleOutputAttribute
+573 stub ReadConsoleOutputCharacterA
+574 stub ReadConsoleOutputCharacterW
+575 stub ReadConsoleOutputW
+576 stdcall ReadConsoleW(long ptr long ptr ptr) ReadConsole32W
+577 stdcall ReadFile(long ptr long ptr ptr) ReadFile
+578 stub ReadFileEx
+579 stdcall ReadProcessMemory(long ptr ptr long ptr) ReadProcessMemory
+580 stub RegisterServiceProcess
+581 stdcall ReinitializeCriticalSection(ptr) ReinitializeCriticalSection
+582 stdcall ReleaseMutex(long) ReleaseMutex
+583 stdcall ReleaseSemaphore(long long ptr) ReleaseSemaphore
+584 stdcall RemoveDirectoryA(ptr) RemoveDirectory32A
+585 stdcall RemoveDirectoryW(ptr) RemoveDirectory32W
+586 stdcall ResetEvent(long) ResetEvent
+587 stdcall ResumeThread(long) ResumeThread
+588 stdcall RtlFillMemory(ptr long long) RtlFillMemory
+589 stdcall RtlMoveMemory(ptr ptr long) RtlMoveMemory
+590 register RtlUnwind(ptr long ptr long) RtlUnwind
+591 stdcall RtlZeroMemory(ptr long) RtlZeroMemory
+592 register SMapLS() SMapLS
+593 register SMapLS_IP_EBP_12() SMapLS_IP_EBP_12
+594 register SMapLS_IP_EBP_16() SMapLS_IP_EBP_16
+595 register SMapLS_IP_EBP_20() SMapLS_IP_EBP_20
+596 register SMapLS_IP_EBP_24() SMapLS_IP_EBP_24
+597 register SMapLS_IP_EBP_28() SMapLS_IP_EBP_28
+598 register SMapLS_IP_EBP_32() SMapLS_IP_EBP_32
+599 register SMapLS_IP_EBP_36() SMapLS_IP_EBP_36
+600 register SMapLS_IP_EBP_40() SMapLS_IP_EBP_40
+601 register SMapLS_IP_EBP_8() SMapLS_IP_EBP_8
+602 stub SUnMapLS
+603 stub SUnMapLS_IP_EBP_12
+604 stub SUnMapLS_IP_EBP_16
+605 stub SUnMapLS_IP_EBP_20
+606 stub SUnMapLS_IP_EBP_24
+607 stub SUnMapLS_IP_EBP_28
+608 stub SUnMapLS_IP_EBP_32
+609 stub SUnMapLS_IP_EBP_36
+610 stub SUnMapLS_IP_EBP_40
+611 stub SUnMapLS_IP_EBP_8
+612 stub ScrollConsoleScreenBufferA
+613 stub ScrollConsoleScreenBufferW
+614 stdcall SearchPathA(ptr ptr ptr long ptr ptr) SearchPath32A
+615 stdcall SearchPathW(ptr ptr ptr long ptr ptr) SearchPath32W
+616 stdcall SetCommBreak(long) SetCommBreak32
+617 stub SetCommConfig
+618 stdcall SetCommMask(long ptr) SetCommMask
+619 stdcall SetCommState(long ptr) SetCommState32
+620 stdcall SetCommTimeouts(long ptr) SetCommTimeouts
+621 stub SetComputerNameA
+622 stub SetComputerNameW
+623 stub SetConsoleActiveScreenBuffer
+624 stub SetConsoleCP
+625 stdcall SetConsoleCtrlHandler(ptr long) SetConsoleCtrlHandler
+626 stub SetConsoleCursorInfo
+627 stdcall SetConsoleCursorPosition(long long) SetConsoleCursorPosition
+628 stdcall SetConsoleMode(long long) SetConsoleMode
+629 stub SetConsoleOutputCP
+630 stub SetConsoleScreenBufferSize
+631 stub SetConsoleTextAttribute
+632 stdcall SetConsoleTitleA(ptr) SetConsoleTitle32A
+633 stdcall SetConsoleTitleW(ptr) SetConsoleTitle32W
+634 stub SetConsoleWindowInfo
+635 stdcall SetCurrentDirectoryA(ptr) SetCurrentDirectory32A
+636 stdcall SetCurrentDirectoryW(ptr) SetCurrentDirectory32W
+637 stub SetDaylightFlag
+638 stub SetDefaultCommConfigA
+639 stub SetDefaultCommConfigW
+640 stdcall SetEndOfFile(long) SetEndOfFile
+641 stdcall SetEnvironmentVariableA(ptr ptr) SetEnvironmentVariable32A
+642 stdcall SetEnvironmentVariableW(ptr ptr) SetEnvironmentVariable32W
+643 stdcall SetErrorMode(long) SetErrorMode32
+644 stdcall	SetEvent(long) SetEvent
+645 stdcall SetFileApisToANSI() SetFileApisToANSI
+646 stdcall SetFileApisToOEM() SetFileApisToOEM
+647 stdcall SetFileAttributesA(ptr long) SetFileAttributes32A
+648 stdcall SetFileAttributesW(ptr long) SetFileAttributes32W
+649 stdcall SetFilePointer(long long ptr long) SetFilePointer
+650 stdcall SetFileTime(long ptr ptr ptr) SetFileTime
+651 stub SetHandleContext
+652 stdcall SetHandleCount(long) SetHandleCount32
+653 stub SetHandleInformation
+654 stdcall SetLastError(long) SetLastError
+655 stub SetLocalTime
+656 stdcall SetLocaleInfoA(long long ptr) SetLocaleInfoA
+657 stub SetLocaleInfoW
+658 stub SetMailslotInfo
+659 stub SetNamedPipeHandleState
+660 stdcall SetPriorityClass(long long) SetPriorityClass
+661 stdcall SetProcessShutdownParameters(long long) SetProcessShutdownParameters
+662 stdcall SetProcessWorkingSetSize(long long long) SetProcessWorkingSetSize
+663 stdcall SetStdHandle(long long) SetStdHandle
+664 stdcall SetSystemPowerState(long long) SetSystemPowerState
+665 stdcall SetSystemTime(ptr) SetSystemTime
+666 stub SetSystemTimeAdjustment
+667 stub SetTapeParameters
+668 stub SetTapePosition
+669 stdcall SetThreadAffinityMask(long long)	SetThreadAffinityMask
+670 stub SetThreadContext
+671 stub SetThreadLocale
+672 stdcall SetThreadPriority(long long) SetThreadPriority
+673 stdcall SetTimeZoneInformation(ptr) SetTimeZoneInformation
+674 stdcall SetUnhandledExceptionFilter(ptr) SetUnhandledExceptionFilter
+675 stub SetVolumeLabelA
+676 stub SetVolumeLabelW
+677 stdcall SetupComm(long long long) SetupComm
+678 stdcall SizeofResource(long long) SizeofResource32
+679 stdcall Sleep(long) Sleep
+680 stub SleepEx
+681 stub SuspendThread
+682 stdcall SystemTimeToFileTime(ptr ptr) SystemTimeToFileTime
+683 stub SystemTimeToTzSpecificLocalTime
+684 stub TerminateProcess
+685 stdcall TerminateThread(long long) TerminateThread
+686 stub Thread32First
+687 stub Thread32Next
+688 stdcall ThunkConnect32(ptr ptr ptr ptr ptr ptr) ThunkConnect32
+689 stdcall TlsAlloc()	TlsAlloc
+690 stub TlsAllocInternal
+691 stdcall TlsFree(long) TlsFree
+692 stub TlsFreeInternal
+693 stdcall TlsGetValue(long) TlsGetValue
+694 stdcall TlsSetValue(long ptr) TlsSetValue
+695 stub Toolhelp32ReadProcessMemory
+696 stub TransactNamedPipe
+697 stdcall TransmitCommChar(long long) TransmitCommChar32
+698 stdcall UTRegister(long ptr ptr ptr ptr ptr ptr) UTRegister
+699 stdcall UTUnRegister(long) UTUnRegister
+700 stdcall UnMapLS(long) UnMapLS
+701 stub UnMapSLFixArray
+702 stdcall UnhandledExceptionFilter(ptr) UnhandledExceptionFilter
+703 stub UninitializeCriticalSection
+704 stdcall UnlockFile(long long long long long) UnlockFile
+705 stub UnlockFileEx
+706 stdcall UnmapViewOfFile(ptr) UnmapViewOfFile
+707 stub UpdateResourceA
+708 stub UpdateResourceW
+709 stub VerLanguageNameA
+710 stub VerLanguageNameW
+711 stdcall VirtualAlloc(ptr long long long) VirtualAlloc
+712 stdcall VirtualFree(ptr long long) VirtualFree
+713 stdcall VirtualLock(ptr long) VirtualLock
+714 stdcall VirtualProtect(ptr long long ptr) VirtualProtect
+715 stdcall VirtualProtectEx(long ptr long long ptr) VirtualProtectEx
+716 stdcall VirtualQuery(ptr ptr long) VirtualQuery
+717 stdcall VirtualQueryEx(long ptr ptr long) VirtualQueryEx
+718 stdcall VirtualUnlock(ptr long) VirtualUnlock
+719 stub WaitCommEvent
+720 stub WaitForDebugEvent
+721 stub WaitForMultipleObjects
+722 stub WaitForMultipleObjectsEx
+723 stdcall WaitForSingleObject(long long) WaitForSingleObject
+724 stdcall WaitForSingleObjectEx(long long long) WaitForSingleObjectEx
+725 stub WaitNamedPipeA
+726 stub WaitNamedPipeW
+727 stdcall WideCharToMultiByte(long long ptr long ptr long ptr ptr)	WideCharToMultiByte
+728 stdcall WinExec(ptr long) WinExec32
+729 stdcall WriteConsoleA(long ptr long ptr ptr) WriteConsole32A
+730 stub WriteConsoleInputA
+731 stub WriteConsoleInputW
+732 stub WriteConsoleOutputA
+733 stub WriteConsoleOutputAttribute
+734 stub WriteConsoleOutputCharacterA
+735 stub WriteConsoleOutputCharacterW
+736 stub WriteConsoleOutputW
+737 stdcall WriteConsoleW(long ptr long ptr ptr) WriteConsole32W
+738 stdcall WriteFile(long ptr long ptr ptr) WriteFile
+739 stub WriteFileEx
+740 stub WritePrivateProfileSectionA
+741 stub WritePrivateProfileSectionW
+742 stdcall WritePrivateProfileStringA(ptr ptr ptr ptr) WritePrivateProfileString32A
+743 stdcall WritePrivateProfileStringW(ptr ptr ptr ptr) WritePrivateProfileString32W
+744 stub WritePrivateProfileStructA
+745 stub WritePrivateProfileStructW
+746 stub WriteProcessMemory
+747 stub WriteProfileSectionA
+748 stub WriteProfileSectionW
+749 stdcall WriteProfileStringA(ptr ptr ptr) WriteProfileString32A
+750 stdcall WriteProfileStringW(ptr ptr ptr) WriteProfileString32W
+751 stub WriteTapemark
+752 stub _DebugOut
+753 stub _DebugPrintf
+754 stdcall _hread(long ptr long) _hread32
+755 stdcall _hwrite(long ptr long) _hwrite32
+756 stdcall _lclose(long) _lclose32
+757 stdcall _lcreat(ptr long) _lcreat32
+758 stdcall _llseek(long long long) _llseek32
+759 stdcall _lopen(ptr long) _lopen32
+760 stdcall _lread(long ptr long) _lread32
+761 stdcall _lwrite(long ptr long) _lwrite32
+762 stub dprintf
+763 stdcall lstrcat(ptr ptr) lstrcat32A
+764 stdcall lstrcatA(ptr ptr) lstrcat32A
+765 stdcall lstrcatW(ptr ptr) lstrcat32W
+766 stdcall lstrcmp(ptr ptr) lstrcmp32A
+767 stdcall lstrcmpA(ptr ptr) lstrcmp32A
+768 stdcall lstrcmpW(ptr ptr) lstrcmp32W
+769 stdcall lstrcmpi(ptr ptr) lstrcmpi32A
+770 stdcall lstrcmpiA(ptr ptr) lstrcmpi32A
+771 stdcall lstrcmpiW(ptr ptr) lstrcmpi32W
+772 stdcall lstrcpy(ptr ptr) lstrcpy32A
+773 stdcall lstrcpyA(ptr ptr) lstrcpy32A
+774 stdcall lstrcpyW(ptr ptr) lstrcpy32W
+775 stdcall lstrcpyn(ptr ptr long) lstrcpyn32A
+776 stdcall lstrcpynA(ptr ptr long) lstrcpyn32A
+777 stdcall lstrcpynW(ptr ptr long) lstrcpyn32W
+778 stdcall lstrlen(ptr) lstrlen32A
+779 stdcall lstrlenA(ptr) lstrlen32A
+780 stdcall lstrlenW(ptr) lstrlen32W
 # 
 # Functions exported by kernel32.dll in NT 3.51
 # 
-780   stub AddConsoleAliasA
-781   stub AddConsoleAliasW
-782   stub BaseAttachCompleteThunk
-783   stub BasepDebugDump
-784   stub CloseConsoleHandle
-785   stub CmdBatNotification
-786   stub ConsoleMenuControl
-787   stub ConsoleSubst
-788   stub CreateVirtualBuffer
-789   stub ExitVDM
-790   stub ExpungeConsoleCommandHistoryA
-791   stub ExpungeConsoleCommandHistoryW
-792   stub ExtendVirtualBuffer
-793   stub FreeVirtualBuffer
-794   stub GetConsoleAliasA
-795   stub GetConsoleAliasExesA
-796   stub GetConsoleAliasExesLengthA
-797   stub GetConsoleAliasExesLengthW
-798   stub GetConsoleAliasExesW
-799   stub GetConsoleAliasW
-800   stub GetConsoleAliasesA
-801   stub GetConsoleAliasesLengthA
-802   stub GetConsoleAliasesLengthW
-803   stub GetConsoleAliasesW
-804   stub GetConsoleCommandHistoryA
-805   stub GetConsoleCommandHistoryLengthA
-806   stub GetConsoleCommandHistoryLengthW
-807   stub GetConsoleCommandHistoryW
-810   stub GetConsoleDisplayMode
-811   stub GetConsoleFontInfo
-812   stub GetConsoleFontSize
-813   stub GetConsoleHardwareState
-814   stub GetConsoleInputWaitHandle
-815   stub GetCurrentConsoleFont
-816   stub GetNextVDMCommand
-817   stub GetNumberOfConsoleFonts
-818   stub GetVDMCurrentDirectories
-819   stub HeapCreateTagsW
-820   stub HeapExtend
-821   stub HeapQueryTagW
-823   stub HeapSummary
-824   stub HeapUsage
-825   stub InvalidateConsoleDIBits
-826   stub IsDebuggerPresent
-828   stub OpenConsoleW
-829   stub QueryWin31IniFilesMappedToRegistry
-830   stub RegisterConsoleVDM
-831   stub RegisterWaitForInputIdle
-832   stub RegisterWowBaseHandlers
-833   stub RegisterWowExec
-834   stub SetConsoleCommandHistoryMode
-835   stub SetConsoleCursor
-836   stub SetConsoleDisplayMode
-837   stub SetConsoleFont
-838   stub SetConsoleHardwareState
-839   stub SetConsoleKeyShortcuts
-840   stub SetConsoleMaximumWindowSize
-841   stub SetConsoleMenuClose
-842   stub SetConsoleNumberOfCommandsA
-843   stub SetConsoleNumberOfCommandsW
-844   stub SetConsolePalette
-845   stub SetLastConsoleEventActive
-846   stub SetVDMCurrentDirectories
-847   stub ShowConsoleCursor
-848   stub TrimVirtualBuffer
-849   stub VDMConsoleOperation
-850   stub VDMOperationStarted
-851   stub VerifyConsoleIoHandle
-852   stub VirtualBufferExceptionHandler
-853   stub WriteConsoleInputVDMA
-854   stub WriteConsoleInputVDMW
+781 stub AddConsoleAliasA
+782 stub AddConsoleAliasW
+783 stub BaseAttachCompleteThunk
+784 stub BasepDebugDump
+785 stub CloseConsoleHandle
+786 stub CmdBatNotification
+787 stub ConsoleMenuControl
+788 stub ConsoleSubst
+789 stub CreateVirtualBuffer
+790 stub ExitVDM
+791 stub ExpungeConsoleCommandHistoryA
+792 stub ExpungeConsoleCommandHistoryW
+793 stub ExtendVirtualBuffer
+794 stub FreeVirtualBuffer
+795 stub GetConsoleAliasA
+796 stub GetConsoleAliasExesA
+797 stub GetConsoleAliasExesLengthA
+798 stub GetConsoleAliasExesLengthW
+799 stub GetConsoleAliasExesW
+800 stub GetConsoleAliasW
+801 stub GetConsoleAliasesA
+802 stub GetConsoleAliasesLengthA
+803 stub GetConsoleAliasesLengthW
+804 stub GetConsoleAliasesW
+805 stub GetConsoleCommandHistoryA
+806 stub GetConsoleCommandHistoryLengthA
+807 stub GetConsoleCommandHistoryLengthW
+808 stub GetConsoleCommandHistoryW
+811 stub GetConsoleDisplayMode
+812 stub GetConsoleFontInfo
+813 stub GetConsoleFontSize
+814 stub GetConsoleHardwareState
+815 stub GetConsoleInputWaitHandle
+816 stub GetCurrentConsoleFont
+817 stub GetNextVDMCommand
+818 stub GetNumberOfConsoleFonts
+819 stub GetVDMCurrentDirectories
+820 stub HeapCreateTagsW
+821 stub HeapExtend
+822 stub HeapQueryTagW
+824 stub HeapSummary
+825 stub HeapUsage
+826 stub InvalidateConsoleDIBits
+827 stub IsDebuggerPresent
+829 stub OpenConsoleW
+830 stub QueryWin31IniFilesMappedToRegistry
+831 stub RegisterConsoleVDM
+832 stub RegisterWaitForInputIdle
+833 stub RegisterWowBaseHandlers
+834 stub RegisterWowExec
+835 stub SetConsoleCommandHistoryMode
+836 stub SetConsoleCursor
+837 stub SetConsoleDisplayMode
+838 stub SetConsoleFont
+839 stub SetConsoleHardwareState
+840 stub SetConsoleKeyShortcuts
+841 stub SetConsoleMaximumWindowSize
+842 stub SetConsoleMenuClose
+843 stub SetConsoleNumberOfCommandsA
+844 stub SetConsoleNumberOfCommandsW
+845 stub SetConsolePalette
+846 stub SetLastConsoleEventActive
+847 stub SetVDMCurrentDirectories
+848 stub ShowConsoleCursor
+849 stub TrimVirtualBuffer
+850 stub VDMConsoleOperation
+851 stub VDMOperationStarted
+852 stub VerifyConsoleIoHandle
+853 stub VirtualBufferExceptionHandler
+854 stub WriteConsoleInputVDMA
+855 stub WriteConsoleInputVDMW
diff --git a/if1632/keyboard.spec b/if1632/keyboard.spec
index b4b2c56..354c5af 100644
--- a/if1632/keyboard.spec
+++ b/if1632/keyboard.spec
@@ -12,8 +12,8 @@
 #126	pascal	GetTableSeg
 #127	pascal	NewTable
 128 pascal   OemKeyScan(word) OemKeyScan
-129 pascal16 VkKeyScan(byte) VkKeyScan16
-130 pascal16 GetKeyboardType(byte) GetKeyboardType16
+129 pascal16 VkKeyScan(word) VkKeyScan16
+130 pascal16 GetKeyboardType(word) GetKeyboardType16
 131 pascal16 MapVirtualKey(word word) MapVirtualKey16
 132 pascal16 GetKBCodePage() GetKBCodePage16
 133 pascal16 GetKeyNameText(long ptr word) GetKeyNameText16
diff --git a/if1632/mpr.spec b/if1632/mpr.spec
index 3acba59..ade7cba 100644
--- a/if1632/mpr.spec
+++ b/if1632/mpr.spec
@@ -48,7 +48,7 @@
 0067 stub WNetFormatNetworkNameA
 0068 stub WNetFormatNetworkNameW
 0069 stdcall WNetGetCachedPassword(ptr long ptr ptr long) WNetGetCachedPassword
-0070 stub WNetGetConnectionA
+0070 stdcall WNetGetConnectionA(ptr ptr ptr) WNetGetConnection32A
 0071 stub WNetGetConnectionW
 0072 stub WNetGetHomeDirectoryA
 0073 stub WNetGetHomeDirectoryW
diff --git a/if1632/ntdll.spec b/if1632/ntdll.spec
index 08d3941..ebe55e9 100644
--- a/if1632/ntdll.spec
+++ b/if1632/ntdll.spec
@@ -1,6 +1,5 @@
 name	ntdll
 type	win32
-base	0
 
 001 stub CsrAllocateCaptureBuffer
 002 stub CsrAllocateCapturePointer
@@ -873,82 +872,82 @@
 869 stub _snprintf
 870 stub _snwprintf
 871 stub _splitpath
-872 stub _strcmpi
-873 stdcall _stricmp(ptr ptr) lstrcmpi32A
+872 cdecl _strcmpi(ptr ptr) CRTDLL__strcmpi
+873 cdecl _stricmp(ptr ptr) CRTDLL__strcmpi
 874 stub _strlwr
-875 stub _strnicmp
-876 stdcall _strupr(ptr) CRTDLL__strupr
+875 cdecl _strnicmp(ptr ptr long) CRTDLL__strnicmp
+876 cdecl _strupr(ptr) CRTDLL__strupr
 877 stub _ultoa
 878 stub _vsnprintf
-879 stdcall _wcsicmp(ptr ptr) lstrcmpi32W
-880 stdcall _wcslwr(ptr) CRTDLL__wcslwr
-881 stdcall _wcsnicmp(ptr ptr long) lstrncmpi32W
-882 stdcall _wcsupr(ptr) CRTDLL__wcsupr
+879 cdecl _wcsicmp(ptr ptr) CRTDLL__wcsicmp
+880 cdecl _wcslwr(ptr) CRTDLL__wcslwr
+881 cdecl _wcsnicmp(ptr ptr long) CRTDLL__wcsnicmp
+882 cdecl _wcsupr(ptr) CRTDLL__wcsupr
 883 stub abs
 884 stub atan
-885 stdcall atoi(ptr) CRTDLL_atoi
-886 stdcall atol(ptr) CRTDLL_atol
+885 cdecl atoi(ptr) atoi
+886 cdecl atol(ptr) atol
 887 stub ceil
 888 stub cos
 889 stub fabs
 890 stub floor
-891 stdcall isalpha(long) CRTDLL_isalpha
-892 stdcall isdigit(long) CRTDLL_isdigit
-893 stdcall islower(long) CRTDLL_islower
-894 stdcall isprint(long) CRTDLL_isprint
-895 stdcall isspace(long) CRTDLL_isspace
-896 stdcall isupper(long) CRTDLL_isupper
+891 cdecl isalpha(long) isalpha
+892 cdecl isdigit(long) isdigit
+893 cdecl islower(long) islower
+894 cdecl isprint(long) isprint
+895 cdecl isspace(long) isspace
+896 cdecl isupper(long) isupper
 897 stub iswalpha
 898 stub iswctype
-899 stdcall isxdigit(long) CRTDLL_isxdigit
+899 cdecl isxdigit(long) isxdigit
 900 stub labs
 901 stub log
 902 stub mbstowcs
-903 stub memchr
-904 stub memcmp
-905 stub memcpy
-906 stdcall memmove(ptr ptr long) memmove
-907 stub memset
+903 cdecl memchr(ptr long long) memchr
+904 cdecl memcmp(ptr ptr long) memcmp
+905 cdecl memcpy(ptr ptr long) memcpy
+906 cdecl memmove(ptr ptr long) memmove
+907 cdecl memset(ptr long long) memset
 908 stub pow
 909 stub qsort
 910 stub sin
-911 stdcall sprintf() CRTDLL_sprintf
+911 varargs sprintf() wsprintf32A
 912 stub sqrt
-913 stdcall sscanf() CRTDLL_sscanf
-914 stub strcat
-915 stdcall strchr(ptr long) strchr
-916 stdcall strcmp(ptr ptr) lstrcmp32A
-917 stdcall strcpy(ptr ptr) lstrcpy32A
-918 stub strcspn
-919 stdcall strlen(ptr) lstrlen32A
-920 stub strncat
-921 stub strncmp
-922 stub strncpy
-923 stub strpbrk
-924 stdcall strrchr(ptr long) strrchr
-925 stub strspn
-926 stub strstr
-927 stdcall swprintf() CRTDLL_swprintf
+913 varargs sscanf() sscanf
+914 cdecl strcat(ptr ptr) strcat
+915 cdecl strchr(ptr long) strchr
+916 cdecl strcmp(ptr ptr) strcmp
+917 cdecl strcpy(ptr ptr) strcpy
+918 cdecl strcspn(ptr ptr) strcspn
+919 cdecl strlen(ptr) strlen
+920 cdecl strncat(ptr ptr long) strncat
+921 cdecl strncmp(ptr ptr long) strncmp
+922 cdecl strncpy(ptr ptr long) strncpy
+923 cdecl strpbrk(ptr ptr long) strpbrk
+924 cdecl strrchr(ptr long) strrchr
+925 cdecl strspn(ptr ptr) strspn
+926 cdecl strstr(ptr ptr) strstr
+927 varargs swprintf() wsprintf32W
 928 stub tan
-929 stdcall tolower(long) CRTDLL_tolower
-930 stdcall toupper(long) CRTDLL_toupper
+929 cdecl tolower(long) tolower
+930 cdecl toupper(long) toupper
 931 stub towlower
 932 stub towupper
-933 stub vsprintf
-934 stdcall wcscat(ptr ptr) lstrcat32W
-935 stdcall wcschr(ptr long) CRTDLL_wcschr
+933 cdecl vsprintf(ptr ptr ptr) CRTDLL_vsprintf
+934 cdecl wcscat(ptr ptr) CRTDLL_wcscat
+935 cdecl wcschr(ptr long) CRTDLL_wcschr
 936 stub wcscmp
-937 stdcall wcscpy(ptr ptr) lstrcpy32W
+937 cdecl wcscpy(ptr ptr) CRTDLL_wcscpy
 938 stub wcscspn
-939 stdcall wcslen(ptr) lstrlen32W
+939 cdecl wcslen(ptr) CRTDLL_wcslen
 940 stub wcsncat
 941 stub wcsncmp
-942 stdcall wcsncpy(ptr ptr long) lstrcpyn32W
+942 cdecl wcsncpy(ptr ptr long) CRTDLL_wcsncpy
 943 stub wcspbrk
-944 stdcall wcsrchr(ptr long) CRTDLL_wcsrchr
+944 cdecl wcsrchr(ptr long) CRTDLL_wcsrchr
 945 stub wcsspn
-946 stdcall wcsstr(ptr ptr) CRTDLL_wcsstr
+946 cdecl wcsstr(ptr ptr) CRTDLL_wcsstr
 947 stub wcstok
 948 stub wcstol
-949 stdcall wcstombs(ptr ptr) lstrcpyWtoA
+949 cdecl wcstombs(ptr ptr long) CRTDLL_wcstombs
 950 stub wcstoul
diff --git a/if1632/ole2.spec b/if1632/ole2.spec
index b86a0f8..5289929 100644
--- a/if1632/ole2.spec
+++ b/if1632/ole2.spec
@@ -74,7 +74,7 @@
 71 stub OLECONVERTOLESTREAMTOISTORAGE
 74 stub READFMTUSERTYPESTG
 75 stub WRITEFMTUSERTYPESTG
-76 stub OLEFLUSHCLIPBOARD
+76 pascal16 OleFlushClipboard() OleFlushClipboard
 77 stub OLEISCURRENTCLIPBOARD
 78 stub OLETRANSLATEACCELERATOR
 79 stub OLEDOAUTOCONVERT
diff --git a/if1632/ole32.spec b/if1632/ole32.spec
index 838a9d2..4595e4f 100644
--- a/if1632/ole32.spec
+++ b/if1632/ole32.spec
@@ -1,166 +1,165 @@
 name	ole32
 type	win32
-base	1
 
-0 stub BindMoniker
-1 stub CLSIDFromProgID
-2 stub CLSIDFromString
-3 stub CoBuildVersion
-4 stub CoCreateFreeThreadedMarshaler
-5 stub CoCreateGuid
-6 stub CoCreateInstance
-7 stub CoDisconnectObject
-8 stub CoDosDateTimeToFileTime
-9 stub CoFileTimeNow
-10 stub CoFileTimeToDosDateTime
-11 stub CoFreeAllLibraries
-12 stub CoFreeLibrary
-13 stub CoFreeUnusedLibraries
-14 stub CoGetCallerTID
-15 stub CoGetClassObject
-16 stub CoGetCurrentLogicalThreadId
-17 stub CoGetCurrentProcess
-18 stub CoGetInterfaceAndReleaseStream
-19 stub CoGetMalloc
-20 stub CoGetMarshalSizeMax
-21 stub CoGetPSClsid
-22 stub CoGetStandardMarshal
-23 stub CoGetState
-24 stub CoGetTreatAsClass
-25 stub CoInitialize
-26 stub CoInitializeWOW
-27 stub CoIsHandlerConnected
-28 stub CoIsOle1Class
-29 stub CoLoadLibrary
-30 stub CoLockObjectExternal
-31 stub CoMarshalHresult
-32 stub CoMarshalInterThreadInterfaceInStream
-33 stub CoMarshalInterface
-34 stub CoQueryReleaseObject
-35 stub CoRegisterClassObject
-36 stub CoRegisterMallocSpy
-37 stub CoRegisterMessageFilter
-38 stub CoReleaseMarshalData
-39 stub CoRevokeClassObject
-40 stub CoRevokeMallocSpy
-41 stub CoSetState
-42 stub CoTaskMemAlloc
-43 stub CoTaskMemFree
-44 stub CoTaskMemRealloc
-45 stub CoTreatAsClass
-46 stub CoUninitialize
-47 stub CoUnloadingWOW
-48 stub CoUnmarshalHresult
-49 stub CoUnmarshalInterface
-50 stub CreateAntiMoniker
-51 stub CreateBindCtx
-52 stub CreateDataAdviseHolder
-53 stub CreateDataCache
-54 stub CreateFileMoniker
-55 stub CreateGenericComposite
-56 stub CreateILockBytesOnHGlobal
-57 stub CreateItemMoniker
-58 stub CreateOleAdviseHolder
-59 stub CreatePointerMoniker
-60 stub CreateStreamOnHGlobal
-61 stub DllDebugObjectRPCHook
-62 stub DllGetClassObject
-63 stub DllGetClassObjectWOW
-64 stub DoDragDrop
-65 stub EnableHookObject
-66 stub GetClassFile
-67 stub GetConvertStg
-68 stub GetDocumentBitStg
-69 stub GetHGlobalFromILockBytes
-70 stub GetHGlobalFromStream
-71 stub GetHookInterface
-72 stub GetRunningObjectTable
-73 stub IIDFromString
-74 stub IsAccelerator
-75 stub IsEqualGUID
-76 stub IsValidIid
-77 stub IsValidInterface
-78 stub IsValidPtrIn
-79 stub IsValidPtrOut
-80 stub MkParseDisplayName
-81 stub MonikerCommonPrefixWith
-82 stub MonikerRelativePathTo
-83 stub OleBuildVersion
-84 stub OleConvertIStorageToOLESTREAM
-85 stub OleConvertIStorageToOLESTREAMEx
-86 stub OleConvertOLESTREAMToIStorage
-87 stub OleConvertOLESTREAMToIStorageEx
-88 stub OleCreate
-89 stub OleCreateDefaultHandler
-90 stub OleCreateEmbeddingHelper
-91 stub OleCreateFromData
-92 stub OleCreateFromFile
-93 stub OleCreateLink
-94 stub OleCreateLinkFromData
-95 stub OleCreateLinkToFile
-96 stub OleCreateMenuDescriptor
-97 stub OleCreateStaticFromData
-98 stub OleDestroyMenuDescriptor
-99 stub OleDoAutoConvert
-100 stub OleDraw
-101 stub OleDuplicateData
-102 stub OleFlushClipboard
-103 stub OleGetAutoConvert
-104 stub OleGetClipboard
-105 stub OleGetIconOfClass
-106 stub OleGetIconOfFile
-107 return OleInitialize 4 0
-108 stub OleInitializeWOW
-109 stub OleIsCurrentClipboard
-110 stub OleIsRunning
-111 stub OleLoad
-112 stub OleLoadFromStream
-113 stub OleLockRunning
-114 stub OleMetafilePictFromIconAndLabel
-115 stub OleNoteObjectVisible
-116 stub OleQueryCreateFromData
-117 stub OleQueryLinkFromData
-118 stub OleRegEnumFormatEtc
-119 stub OleRegEnumVerbs
-120 stub OleRegGetMiscStatus
-121 stub OleRegGetUserType
-122 stub OleRun
-123 stub OleSave
-124 stub OleSaveToStream
-125 stub OleSetAutoConvert
-126 stub OleSetClipboard
-127 stub OleSetContainedObject
-128 stub OleSetMenuDescriptor
-129 stub OleTranslateAccelerator
-130 return OleUninitialize 0 0
-131 stub OpenOrCreateStream
-132 stub ProgIDFromCLSID
-133 stub ReadClassStg
-134 stub ReadClassStm
-135 stub ReadFmtUserTypeStg
-136 stub ReadOleStg
-137 stub ReadStringStream
-138 stub RegisterDragDrop
-139 stub ReleaseStgMedium
-140 stub RevokeDragDrop
-141 stub SetConvertStg
-142 stub SetDocumentBitStg
-143 stub StgCreateDocfile
-144 stub StgCreateDocfileOnILockBytes
-145 stub StgIsStorageFile
-146 stub StgIsStorageILockBytes
-147 stub StgOpenStorage
-148 stub StgOpenStorageOnILockBytes
-149 stub StgSetTimes
-150 stub StringFromCLSID
-151 stub StringFromGUID2
-152 stub StringFromIID
-153 stub UtConvertDvtd16toDvtd32
-154 stub UtConvertDvtd32toDvtd16
-155 stub UtGetDvtd16Info
-156 stub UtGetDvtd32Info
-157 stub WriteClassStg
-158 stub WriteClassStm
-159 stub WriteFmtUserTypeStg
-160 stub WriteOleStg
-161 stub WriteStringStream
+  1 stub BindMoniker
+  2 stub CLSIDFromProgID
+  3 stub CLSIDFromString
+  4 stub CoBuildVersion
+  5 stub CoCreateFreeThreadedMarshaler
+  6 stub CoCreateGuid
+  7 stub CoCreateInstance
+  8 stub CoDisconnectObject
+  9 stub CoDosDateTimeToFileTime
+ 10 stub CoFileTimeNow
+ 11 stub CoFileTimeToDosDateTime
+ 12 stub CoFreeAllLibraries
+ 13 stub CoFreeLibrary
+ 14 stub CoFreeUnusedLibraries
+ 15 stub CoGetCallerTID
+ 16 stub CoGetClassObject
+ 17 stub CoGetCurrentLogicalThreadId
+ 18 stub CoGetCurrentProcess
+ 19 stub CoGetInterfaceAndReleaseStream
+ 20 stub CoGetMalloc
+ 21 stub CoGetMarshalSizeMax
+ 22 stub CoGetPSClsid
+ 23 stub CoGetStandardMarshal
+ 24 stub CoGetState
+ 25 stub CoGetTreatAsClass
+ 26 stub CoInitialize
+ 27 stub CoInitializeWOW
+ 28 stub CoIsHandlerConnected
+ 29 stub CoIsOle1Class
+ 30 stub CoLoadLibrary
+ 31 stub CoLockObjectExternal
+ 32 stub CoMarshalHresult
+ 33 stub CoMarshalInterThreadInterfaceInStream
+ 34 stub CoMarshalInterface
+ 35 stub CoQueryReleaseObject
+ 36 stub CoRegisterClassObject
+ 37 stub CoRegisterMallocSpy
+ 38 stub CoRegisterMessageFilter
+ 39 stub CoReleaseMarshalData
+ 40 stub CoRevokeClassObject
+ 41 stub CoRevokeMallocSpy
+ 42 stub CoSetState
+ 43 stub CoTaskMemAlloc
+ 44 stub CoTaskMemFree
+ 45 stub CoTaskMemRealloc
+ 46 stub CoTreatAsClass
+ 47 stub CoUninitialize
+ 48 stub CoUnloadingWOW
+ 49 stub CoUnmarshalHresult
+ 50 stub CoUnmarshalInterface
+ 51 stub CreateAntiMoniker
+ 52 stub CreateBindCtx
+ 53 stub CreateDataAdviseHolder
+ 54 stub CreateDataCache
+ 55 stub CreateFileMoniker
+ 56 stub CreateGenericComposite
+ 57 stub CreateILockBytesOnHGlobal
+ 58 stub CreateItemMoniker
+ 59 stub CreateOleAdviseHolder
+ 60 stub CreatePointerMoniker
+ 61 stub CreateStreamOnHGlobal
+ 62 stub DllDebugObjectRPCHook
+ 63 stub DllGetClassObject
+ 64 stub DllGetClassObjectWOW
+ 65 stub DoDragDrop
+ 66 stub EnableHookObject
+ 67 stub GetClassFile
+ 68 stub GetConvertStg
+ 69 stub GetDocumentBitStg
+ 70 stub GetHGlobalFromILockBytes
+ 71 stub GetHGlobalFromStream
+ 72 stub GetHookInterface
+ 73 stub GetRunningObjectTable
+ 74 stub IIDFromString
+ 75 stub IsAccelerator
+ 76 stub IsEqualGUID
+ 77 stub IsValidIid
+ 78 stub IsValidInterface
+ 79 stub IsValidPtrIn
+ 80 stub IsValidPtrOut
+ 81 stub MkParseDisplayName
+ 82 stub MonikerCommonPrefixWith
+ 83 stub MonikerRelativePathTo
+ 84 stub OleBuildVersion
+ 85 stub OleConvertIStorageToOLESTREAM
+ 86 stub OleConvertIStorageToOLESTREAMEx
+ 87 stub OleConvertOLESTREAMToIStorage
+ 88 stub OleConvertOLESTREAMToIStorageEx
+ 89 stub OleCreate
+ 90 stub OleCreateDefaultHandler
+ 91 stub OleCreateEmbeddingHelper
+ 92 stub OleCreateFromData
+ 93 stub OleCreateFromFile
+ 94 stub OleCreateLink
+ 95 stub OleCreateLinkFromData
+ 96 stub OleCreateLinkToFile
+ 97 stub OleCreateMenuDescriptor
+ 98 stub OleCreateStaticFromData
+ 99 stub OleDestroyMenuDescriptor
+100 stub OleDoAutoConvert
+101 stub OleDraw
+102 stub OleDuplicateData
+103 stub OleFlushClipboard
+104 stub OleGetAutoConvert
+105 stub OleGetClipboard
+106 stub OleGetIconOfClass
+107 stub OleGetIconOfFile
+108 return OleInitialize 4 0
+109 stub OleInitializeWOW
+110 stub OleIsCurrentClipboard
+111 stub OleIsRunning
+112 stub OleLoad
+113 stub OleLoadFromStream
+114 stub OleLockRunning
+115 stub OleMetafilePictFromIconAndLabel
+116 stub OleNoteObjectVisible
+117 stub OleQueryCreateFromData
+118 stub OleQueryLinkFromData
+119 stub OleRegEnumFormatEtc
+120 stub OleRegEnumVerbs
+121 stub OleRegGetMiscStatus
+122 stub OleRegGetUserType
+123 stub OleRun
+124 stub OleSave
+125 stub OleSaveToStream
+126 stub OleSetAutoConvert
+127 stub OleSetClipboard
+128 stub OleSetContainedObject
+129 stub OleSetMenuDescriptor
+130 stub OleTranslateAccelerator
+131 return OleUninitialize 0 0
+132 stub OpenOrCreateStream
+133 stub ProgIDFromCLSID
+134 stub ReadClassStg
+135 stub ReadClassStm
+136 stub ReadFmtUserTypeStg
+137 stub ReadOleStg
+138 stub ReadStringStream
+139 stub RegisterDragDrop
+140 stub ReleaseStgMedium
+141 stub RevokeDragDrop
+142 stub SetConvertStg
+143 stub SetDocumentBitStg
+144 stub StgCreateDocfile
+145 stub StgCreateDocfileOnILockBytes
+146 stub StgIsStorageFile
+147 stub StgIsStorageILockBytes
+148 stub StgOpenStorage
+149 stub StgOpenStorageOnILockBytes
+150 stub StgSetTimes
+151 stub StringFromCLSID
+152 stub StringFromGUID2
+153 stub StringFromIID
+154 stub UtConvertDvtd16toDvtd32
+155 stub UtConvertDvtd32toDvtd16
+156 stub UtGetDvtd16Info
+157 stub UtGetDvtd32Info
+158 stub WriteClassStg
+159 stub WriteClassStm
+160 stub WriteFmtUserTypeStg
+161 stub WriteOleStg
+162 stub WriteStringStream
diff --git a/if1632/relay.c b/if1632/relay.c
index f8e98c4..6ad7c32 100644
--- a/if1632/relay.c
+++ b/if1632/relay.c
@@ -352,15 +352,15 @@
      */
     /* FIXME: we need to save %si and %di */
 
-    lpbuf[0] = OFFSETOF(IF1632_Saved16_ss_sp);
-    lpbuf[1] = LOWORD(IF1632_Saved32_esp);
-    lpbuf[2] = HIWORD(IF1632_Saved32_esp);
-    lpbuf[3] = LOWORD(pFrame->saved_ss_sp);
-    lpbuf[4] = HIWORD(pFrame->saved_ss_sp);
-    lpbuf[5] = pFrame->ds;
-    lpbuf[6] = pFrame->bp;
-    lpbuf[7] = pFrame->ip;
-    lpbuf[8] = pFrame->cs;
+    lpbuf[0] = pFrame->ip;
+    lpbuf[1] = pFrame->cs;
+    lpbuf[2] = LOWORD(pFrame->saved_ss_sp);
+    lpbuf[3] = pFrame->bp;
+    lpbuf[4] = LOWORD(IF1632_Saved32_esp);
+    lpbuf[5] = HIWORD(IF1632_Saved32_esp);
+    lpbuf[6] = pFrame->ds;
+    lpbuf[7] = OFFSETOF(IF1632_Saved16_ss_sp);
+    lpbuf[8] = HIWORD(pFrame->saved_ss_sp);
     return 0;
 }
 
@@ -373,15 +373,15 @@
     STACK16FRAME *pFrame;
     WORD es = CURRENT_STACK16->es;
 
-    IF1632_Saved16_ss_sp = MAKELONG( lpbuf[0] - sizeof(WORD),
+    IF1632_Saved16_ss_sp = MAKELONG( lpbuf[7] - sizeof(WORD),
                                      HIWORD(IF1632_Saved16_ss_sp) );
-    IF1632_Saved32_esp = MAKELONG( lpbuf[1], lpbuf[2] );
+    IF1632_Saved32_esp = MAKELONG( lpbuf[4], lpbuf[5] );
     pFrame = CURRENT_STACK16;
-    pFrame->saved_ss_sp = MAKELONG( lpbuf[3], lpbuf[4] );
-    pFrame->ds          = lpbuf[5];
-    pFrame->bp          = lpbuf[6];
-    pFrame->ip          = lpbuf[7];
-    pFrame->cs          = lpbuf[8];
+    pFrame->saved_ss_sp = MAKELONG( lpbuf[2], lpbuf[8] );
+    pFrame->ds          = lpbuf[6];
+    pFrame->bp          = lpbuf[3];
+    pFrame->ip          = lpbuf[0];
+    pFrame->cs          = lpbuf[1];
     pFrame->es          = es;
     if (debugging_relay)  /* Make sure we have a valid entry point address */
     {
diff --git a/if1632/shell32.spec b/if1632/shell32.spec
index 14f5deb..ed55b9b 100644
--- a/if1632/shell32.spec
+++ b/if1632/shell32.spec
@@ -1,140 +1,153 @@
 name	shell32
 type	win32
-base	1
 
 # Functions exported by the Win95 shell32.dll 
 # (these need to have these exact ordinals, for some win95 dlls 
 #  import shell32.dll by ordinal)
 
-   1 stub CheckEscapesA
-   4 stub CheckEscapesW
-   5 stdcall CommandLineToArgvW(ptr ptr) CommandLineToArgvW
-   6 stub Control_FillCache_RunDLL
-  10 stub Control_RunDLL
-  12 stub DllGetClassObject
-  20 stub DoEnvironmentSubstA
-  36 stub DoEnvironmentSubstW
-  39 stdcall DragAcceptFiles(long long) DragAcceptFiles
-  40 stub DragFinish
-  42 stub DragQueryFile
+   3 stub CheckEscapesA
+   6 stub CheckEscapesW
+   7 stdcall CommandLineToArgvW(ptr ptr) CommandLineToArgvW
+   8 stub Control_FillCache_RunDLL
+  12 stdcall Control_RunDLL(long long long long) Control_RunDLL
+  14 stub DllGetClassObject
+  22 stub DoEnvironmentSubstA
+  33 stub SHELL32_33
+  34 stub SHELL32_34
+  35 stub SHELL32_35
+  38 stub DoEnvironmentSubstW
+  41 stdcall DragAcceptFiles(long long) DragAcceptFiles
+  42 stub DragFinish
+  44 stub DragQueryFile
+  46 stub SHELL32_46
   47 stub SHELL32_47
-  48 stub DragQueryFileA
-  51 stub DragQueryFileAorW
-  52 stub DragQueryFileW
-  74 stub DragQueryPoint
-  78 stub DuplicateIcon
-  80 stub ExtractAssociatedIconA
-  99 stub ExtractAssociatedIconExA
- 122 stub ExtractAssociatedIconExW
- 123 stub ExtractAssociatedIconW
- 131 stub ExtractIconA
- 133 stub ExtractIconEx
- 136 stub ExtractIconExA
- 146 stub ExtractIconResInfoA
- 148 stub ExtractIconResInfoW
- 154 stub SHELL32_154
- 155 stub SHELL32_155
+  48 stub SHELL32_48
+  49 stub SHELL32_49
+  50 stub DragQueryFileA
+  53 stub DragQueryFileAorW
+  54 stub DragQueryFileW
+  56 stub SHELL32_56
+  57 stub SHELL32_57
+  58 stub SHELL32_58
+  62 stub SHELL32_62
+  63 stub SHELL32_63
+  64 stub SHELL32_64
+  65 stub SHELL32_65
+  76 stub DragQueryPoint
+  80 stub DuplicateIcon
+  82 stub ExtractAssociatedIconA
+ 101 stub ExtractAssociatedIconExA
+ 124 stub ExtractAssociatedIconExW
+ 125 stub ExtractAssociatedIconW
+ 133 stub ExtractIconA
+ 135 stub ExtractIconEx
+ 138 stub ExtractIconExA
+ 148 stub ExtractIconResInfoA
+ 150 stub ExtractIconResInfoW
  156 stub SHELL32_156
+ 157 stub SHELL32_157
  158 stub SHELL32_158
- 178 stub ExtractIconW
- 180 stub ExtractVersionResource16W
- 182 stub SHELL32_182
- 183 stub SHELL32_183
- 184 stdcall FindExecutableA(ptr ptr ptr) FindExecutable32A
- 185 stub FindExecutableW
- 186 return FreeIconList 4 0
- 187 stub InternalExtractIconListA
- 188 stub InternalExtractIconListW
- 189 stub OpenAs_RunDLL
- 190 stub PrintersGetCommand_RunDLL
- 191 stub RealShellExecuteA
- 192 stub RealShellExecuteExA
- 201 stub RealShellExecuteExW
- 202 stub RealShellExecuteW
- 203 stub RegenerateUserEnvironment
- 204 stub SHAddToRecentDocs
- 205 stub SHAppBarMessage
- 206 stub SHBrowseForFolder
- 207 stub SHBrowseForFolderA
- 208 stub SHChangeNotify
- 209 stub SHFileOperation
- 210 stub SHFileOperationA
- 211 stub SHFormatDrive
- 212 stub SHFreeNameMappings
- 213 stub SHGetDataFromIDListA
- 214 stub SHGetDesktopFolder
- 215 stdcall SHGetFileInfo(ptr long ptr long long) SHGetFileInfo32A
- 216 stdcall SHGetFileInfoA(ptr long ptr long long) SHGetFileInfo32A
- 217 stub SHGetInstanceExplorer
- 218 stub SHGetMalloc
- 219 stub SHGetPathFromIDList
- 220 stub SHGetPathFromIDListA
- 221 stub SHGetSpecialFolderLocation
- 222 stub SHHelpShortcuts_RunDLL
- 223 stub SHLoadInProc
- 224 stub SheChangeDirA
- 225 stub SheChangeDirExA
- 226 stub SheChangeDirExW
- 227 stub SheChangeDirW
- 228 stub SheConvertPathW
- 229 stub SheFullPathA
- 230 stub SheFullPathW
- 231 stub SheGetCurDrive
- 232 stub SheGetDirA
- 233 stub SheGetDirExW
- 234 stub SheGetDirW
- 235 stub SheGetPathOffsetW
- 236 stub SheRemoveQuotesA
- 237 stub SheRemoveQuotesW
- 238 stub SheSetCurDrive
- 239 stub SheShortenPathA
- 240 stub SheShortenPathW
- 241 stdcall ShellAboutA(long ptr ptr long) ShellAbout32A
- 242 stdcall ShellAboutW(long ptr ptr long) ShellAbout32W
- 243 stdcall ShellExecuteA(long ptr ptr ptr ptr long) ShellExecute32A
- 244 stub ShellExecuteEx
- 245 stub ShellExecuteExA
- 246 stub ShellExecuteW
- 247 stub Shell_NotifyIcon
- 248 stub Shell_NotifyIconA
- 249 stub Shl1632_ThunkData32
- 250 stub Shl3216_ThunkData32
-1023 stub ExtractIconExW # proper ordinal unknown
-1028 stub FindExeDlgProc # proper ordinal unknown
-1041 stub RegisterShellHook # proper ordinal unknown
-1046 stub SHBrowseForFolderW # proper ordinal unknown
-1050 stub SHFileOperationW # proper ordinal unknown
-1056 stub SHGetFileInfoW # proper ordinal unknown
-1061 stub SHGetPathFromIDListW # proper ordinal unknown
-1087 stub ShellExecuteExW # proper ordinal unknown
-1089 stub ShellHookProc # proper ordinal unknown
-1092 stub Shell_NotifyIconW # proper ordinal unknown
-1093 stub StrChrA # proper ordinal unknown
-1094 stub StrChrIA # proper ordinal unknown
-1095 stub StrChrIW # proper ordinal unknown
-1096 stub StrChrW # proper ordinal unknown
-1097 stub StrCmpNA # proper ordinal unknown
-1098 stub StrCmpNIA # proper ordinal unknown
-1099 stub StrCmpNIW # proper ordinal unknown
-1100 stub StrCmpNW # proper ordinal unknown
-1101 stub StrCpyNA # proper ordinal unknown
-1102 stub StrCpyNW # proper ordinal unknown
-1103 stub StrNCmpA # proper ordinal unknown
-1104 stub StrNCmpIA # proper ordinal unknown
-1105 stub StrNCmpIW # proper ordinal unknown
-1106 stub StrNCmpW # proper ordinal unknown
-1107 stub StrNCpyA # proper ordinal unknown
-1108 stub StrNCpyW # proper ordinal unknown
-1109 stub StrRChrA # proper ordinal unknown
-1110 stub StrRChrIA # proper ordinal unknown
-1111 stub StrRChrIW # proper ordinal unknown
-1112 stub StrRChrW # proper ordinal unknown
-1113 stub StrRStrA # proper ordinal unknown
-1114 stub StrRStrIA # proper ordinal unknown
-1115 stub StrRStrIW # proper ordinal unknown
-1116 stub StrRStrW # proper ordinal unknown
-1117 stub StrStrA # proper ordinal unknown
-1118 stub StrStrIA # proper ordinal unknown
-1119 stub StrStrIW # proper ordinal unknown
-1120 stub StrStrW # proper ordinal unknown
-1121 stub WOWShellExecute # proper ordinal unknown
+ 159 stub SHELL32_159
+ 160 stub SHELL32_160
+ 180 stub ExtractIconW
+ 182 stub ExtractVersionResource16W
+ 184 stub SHELL32_184
+ 185 stub SHELL32_185
+ 186 stdcall FindExecutableA(ptr ptr ptr) FindExecutable32A
+ 187 stub FindExecutableW
+ 188 return FreeIconList 4 0
+ 189 stub InternalExtractIconListA
+ 190 stub InternalExtractIconListW
+ 191 stub OpenAs_RunDLL
+ 192 stub PrintersGetCommand_RunDLL
+ 193 stub RealShellExecuteA
+ 194 stub RealShellExecuteExA
+ 203 stub RealShellExecuteExW
+ 204 stub RealShellExecuteW
+ 205 stub RegenerateUserEnvironment
+ 206 stub SHAddToRecentDocs
+ 207 stub SHAppBarMessage
+ 208 stub SHBrowseForFolder
+ 209 stub SHBrowseForFolderA
+ 210 stub SHChangeNotify
+ 211 stub SHFileOperation
+ 212 stub SHFileOperationA
+ 213 stub SHFormatDrive
+ 214 stub SHFreeNameMappings
+ 215 stub SHGetDataFromIDListA
+ 216 stub SHGetDesktopFolder
+ 217 stdcall SHGetFileInfo(ptr long ptr long long) SHGetFileInfo32A
+ 218 stdcall SHGetFileInfoA(ptr long ptr long long) SHGetFileInfo32A
+ 219 stub SHGetInstanceExplorer
+ 220 stub SHGetMalloc
+ 221 stub SHGetPathFromIDList
+ 222 stub SHGetPathFromIDListA
+ 223 stub SHGetSpecialFolderLocation
+ 224 stub SHHelpShortcuts_RunDLL
+ 225 stub SHLoadInProc
+ 226 stub SheChangeDirA
+ 227 stub SheChangeDirExA
+ 228 stub SheChangeDirExW
+ 229 stub SheChangeDirW
+ 230 stub SheConvertPathW
+ 231 stub SheFullPathA
+ 232 stub SheFullPathW
+ 233 stub SheGetCurDrive
+ 234 stub SheGetDirA
+ 235 stub SheGetDirExW
+ 236 stub SheGetDirW
+ 237 stub SheGetPathOffsetW
+ 238 stub SheRemoveQuotesA
+ 239 stub SheRemoveQuotesW
+ 240 stub SheSetCurDrive
+ 241 stub SheShortenPathA
+ 242 stub SheShortenPathW
+ 243 stdcall ShellAboutA(long ptr ptr long) ShellAbout32A
+ 244 stdcall ShellAboutW(long ptr ptr long) ShellAbout32W
+ 245 stdcall ShellExecuteA(long ptr ptr ptr ptr long) ShellExecute32A
+ 246 stub ShellExecuteEx
+ 247 stub ShellExecuteExA
+ 248 stub ShellExecuteW
+ 249 stub Shell_NotifyIcon
+ 250 stub Shell_NotifyIconA
+ 251 stub Shl1632_ThunkData32
+ 252 stub Shl3216_ThunkData32
+1025 stub ExtractIconExW # proper ordinal unknown
+1030 stub FindExeDlgProc # proper ordinal unknown
+1043 stub RegisterShellHook # proper ordinal unknown
+1048 stub SHBrowseForFolderW # proper ordinal unknown
+1052 stub SHFileOperationW # proper ordinal unknown
+1058 stub SHGetFileInfoW # proper ordinal unknown
+1063 stub SHGetPathFromIDListW # proper ordinal unknown
+1089 stub ShellExecuteExW # proper ordinal unknown
+1091 stub ShellHookProc # proper ordinal unknown
+1094 stub Shell_NotifyIconW # proper ordinal unknown
+1095 stub StrChrA # proper ordinal unknown
+1096 stub StrChrIA # proper ordinal unknown
+1097 stub StrChrIW # proper ordinal unknown
+1098 stub StrChrW # proper ordinal unknown
+1099 stub StrCmpNA # proper ordinal unknown
+1100 stub StrCmpNIA # proper ordinal unknown
+1101 stub StrCmpNIW # proper ordinal unknown
+1102 stub StrCmpNW # proper ordinal unknown
+1103 stub StrCpyNA # proper ordinal unknown
+1104 stub StrCpyNW # proper ordinal unknown
+1105 stub StrNCmpA # proper ordinal unknown
+1106 stub StrNCmpIA # proper ordinal unknown
+1107 stub StrNCmpIW # proper ordinal unknown
+1108 stub StrNCmpW # proper ordinal unknown
+1109 stub StrNCpyA # proper ordinal unknown
+1110 stub StrNCpyW # proper ordinal unknown
+1111 stub StrRChrA # proper ordinal unknown
+1112 stub StrRChrIA # proper ordinal unknown
+1113 stub StrRChrIW # proper ordinal unknown
+1114 stub StrRChrW # proper ordinal unknown
+1115 stub StrRStrA # proper ordinal unknown
+1116 stub StrRStrIA # proper ordinal unknown
+1117 stub StrRStrIW # proper ordinal unknown
+1118 stub StrRStrW # proper ordinal unknown
+1119 stub StrStrA # proper ordinal unknown
+1120 stub StrStrIA # proper ordinal unknown
+1121 stub StrStrIW # proper ordinal unknown
+1122 stub StrStrW # proper ordinal unknown
+1123 stub WOWShellExecute # proper ordinal unknown
diff --git a/if1632/signal.c b/if1632/signal.c
index 62a6395..06890db 100644
--- a/if1632/signal.c
+++ b/if1632/signal.c
@@ -30,7 +30,7 @@
 #include "options.h"
 #include "sig_context.h"
 #include "miscemu.h"
-
+#include "thread.h"
 
 /* Signal handler declaration */
 
@@ -104,6 +104,115 @@
 }
 
 
+/***********************************************************************
+ *           SIGNAL_SetContext
+ *
+ * Set the register values from a sigcontext. 
+ */
+static void SIGNAL_SetSigContext( const SIGCONTEXT *sigcontext,
+                                  CONTEXT *context )
+{
+    EAX_reg(context) = EAX_sig(sigcontext);
+    EBX_reg(context) = EBX_sig(sigcontext);
+    ECX_reg(context) = ECX_sig(sigcontext);
+    EDX_reg(context) = EDX_sig(sigcontext);
+    ESI_reg(context) = ESI_sig(sigcontext);
+    EDI_reg(context) = EDI_sig(sigcontext);
+    EBP_reg(context) = EBP_sig(sigcontext);
+    EFL_reg(context) = EFL_sig(sigcontext);
+    EIP_reg(context) = EIP_sig(sigcontext);
+    ESP_reg(context) = ESP_sig(sigcontext);
+    CS_reg(context)  = LOWORD(CS_sig(sigcontext));
+    DS_reg(context)  = LOWORD(DS_sig(sigcontext));
+    ES_reg(context)  = LOWORD(ES_sig(sigcontext));
+    SS_reg(context)  = LOWORD(SS_sig(sigcontext));
+#ifdef FS_sig
+    FS_reg(context)  = LOWORD(FS_sig(sigcontext));
+#else
+    __asm__("movw %%fs,%w0":"=r" (FS_reg(&DEBUG_context)));
+    FS_reg(context) &= 0xffff;
+#endif
+#ifdef GS_sig
+    GS_reg(context)  = LOWORD(GS_sig(sigcontext));
+#else
+    __asm__("movw %%gs,%w0":"=r" (GS_reg(&DEBUG_context)));
+    GS_reg(context) &= 0xffff;
+#endif
+}
+
+
+/***********************************************************************
+ *           SIGNAL_GetSigContext
+ *
+ * Build a sigcontext from the register values.
+ */
+static void SIGNAL_GetSigContext( SIGCONTEXT *sigcontext,
+                                  const CONTEXT *context )
+{
+    EAX_sig(sigcontext) = EAX_reg(context);
+    EBX_sig(sigcontext) = EBX_reg(context);
+    ECX_sig(sigcontext) = ECX_reg(context);
+    EDX_sig(sigcontext) = EDX_reg(context);
+    ESI_sig(sigcontext) = ESI_reg(context);
+    EDI_sig(sigcontext) = EDI_reg(context);
+    EBP_sig(sigcontext) = EBP_reg(context);
+    EFL_sig(sigcontext) = EFL_reg(context);
+    EIP_sig(sigcontext) = EIP_reg(context);
+    ESP_sig(sigcontext) = ESP_reg(context);
+    CS_sig(sigcontext)  = CS_reg(context);
+    DS_sig(sigcontext)  = DS_reg(context);
+    ES_sig(sigcontext)  = ES_reg(context);
+    SS_sig(sigcontext)  = SS_reg(context);
+#ifdef FS_sig
+    FS_sig(sigcontext)  = FS_reg(context);
+#else
+    __asm__("movw %w0,%%fs"::"r" (FS_reg(context)));
+#endif
+#ifdef GS_sig
+    GS_sig(sigcontext)  = GS_reg(context);
+#else
+    __asm__("movw %w0,%%gs"::"r" (GS_reg(context)));
+#endif
+}
+
+
+/***********************************************************************
+ *           SIGNAL_InfoRegisters
+ *
+ * Display registers information. 
+ */
+void SIGNAL_InfoRegisters( CONTEXT *context )
+{
+    fprintf( stderr," CS:%04x SS:%04x DS:%04x ES:%04x FS:%04x GS:%04x",
+             (WORD)CS_reg(context), (WORD)SS_reg(context),
+             (WORD)DS_reg(context), (WORD)ES_reg(context),
+             (WORD)FS_reg(context), (WORD)GS_reg(context) );
+    fprintf( stderr, "\n EIP:%08lx ESP:%08lx EBP:%08lx EFLAGS:%08lx\n", 
+             EIP_reg(context), ESP_reg(context),
+             EBP_reg(context), EFL_reg(context) );
+    fprintf( stderr, " EAX:%08lx EBX:%08lx ECX:%08lx EDX:%08lx\n", 
+             EAX_reg(context), EBX_reg(context),
+             ECX_reg(context), EDX_reg(context) );
+    fprintf( stderr, " ESI:%08lx EDI:%08lx\n",
+             ESI_reg(context), EDI_reg(context) );
+}
+
+
+/**********************************************************************
+ *		SIGNAL_tick
+ *
+ * Tick handler.
+ */
+static HANDLER_DEF(SIGNAL_tick)
+{
+    HANDLER_PROLOG
+    CONTEXT nt_context;
+    SIGNAL_SetSigContext( context, &nt_context );
+    if (THREAD_SwitchThread( &nt_context ))
+        SIGNAL_GetSigContext( context, &nt_context );
+    HANDLER_EPILOG
+}
+
 /**********************************************************************
  *		SIGNAL_InitEmulator
  *
@@ -111,14 +220,25 @@
  */
 BOOL32 SIGNAL_InitEmulator(void)
 {
+    struct itimerval vt_timer;
+
     SIGNAL_SetHandler( SIGINT,  (void (*)())SIGNAL_break, 1);
     SIGNAL_SetHandler( SIGSEGV, (void (*)())SIGNAL_fault, 1);
     SIGNAL_SetHandler( SIGILL,  (void (*)())SIGNAL_fault, 1);
     SIGNAL_SetHandler( SIGFPE,  (void (*)())SIGNAL_fault, 1);
+    SIGNAL_SetHandler( SIGVTALRM, (void (*)())SIGNAL_tick,  0);
     SIGNAL_SetHandler( SIGTRAP, (void (*)())SIGNAL_trap,  1); /* debugger */
     SIGNAL_SetHandler( SIGHUP,  (void (*)())SIGNAL_trap,  1); /* forced break*/
 #ifdef SIGBUS
     SIGNAL_SetHandler( SIGBUS,  (void (*)())SIGNAL_fault, 1);
 #endif
+
+    /* Start the tick timer */
+#if 0
+    vt_timer.it_interval.tv_sec = 0;
+    vt_timer.it_interval.tv_usec = 10000;
+    vt_timer.it_value = vt_timer.it_interval;
+    setitimer( ITIMER_VIRTUAL, &vt_timer, NULL );
+#endif
     return TRUE;
 }
diff --git a/if1632/thunk.c b/if1632/thunk.c
index a28c665..901a9bb 100644
--- a/if1632/thunk.c
+++ b/if1632/thunk.c
@@ -7,6 +7,9 @@
 
 #include "windows.h"
 #include "callback.h"
+#include "resource.h"
+#include "task.h"
+#include "user.h"
 #include "heap.h"
 #include "hook.h"
 #include "module.h"
@@ -50,7 +53,6 @@
 {
     /* Set the window proc calling functions */
     WINPROC_SetCallWndProc16( THUNK_CallWndProc16 );
-    WINPROC_SetCallWndProc32( (WINPROC_CALLWNDPROC32)CallTo32_4 );
     return TRUE;
 }
 
@@ -115,20 +117,20 @@
 static LRESULT THUNK_CallWndProc16( WNDPROC16 proc, HWND16 hwnd, UINT16 msg,
                                     WPARAM16 wParam, LPARAM lParam )
 {
-    if ((msg == WM_CREATE) || (msg == WM_NCCREATE))
+    if (((msg == WM_CREATE) || (msg == WM_NCCREATE)) && lParam)
     {
         CREATESTRUCT16 *cs = (CREATESTRUCT16 *)PTR_SEG_TO_LIN(lParam);
         /* Build the CREATESTRUCT on the 16-bit stack. */
         /* This is really ugly, but some programs (notably the */
         /* "Undocumented Windows" examples) want it that way.  */
-        return CallTo16_long_lllllllwlwwwl( (FARPROC16)proc,
+        return CallTo16_wndp_lllllllwlwwwl( (FARPROC16)proc,
                          cs->dwExStyle, cs->lpszClass, cs->lpszName, cs->style,
                          MAKELONG( cs->y, cs->x ), MAKELONG( cs->cy, cs->cx ),
                          MAKELONG( cs->hMenu, cs->hwndParent ), cs->hInstance,
                          (LONG)cs->lpCreateParams, hwnd, msg, wParam,
                          IF1632_Saved16_ss_sp - sizeof(CREATESTRUCT16) );
     }
-    return CallTo16_long_wwwl( (FARPROC16)proc, hwnd, msg, wParam, lParam );
+    return CallTo16_wndp_wwwl( (FARPROC16)proc, hwnd, msg, wParam, lParam );
 }
 
 
@@ -143,17 +145,6 @@
 }
 
 
-/***********************************************************************
- *           THUNK_EnumObjects32   (GDI32.89)
- */
-INT32 WINAPI THUNK_EnumObjects32( HDC32 hdc, INT32 nObjType,
-                                  GOBJENUMPROC32 func, LPARAM lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_2 );
-    return EnumObjects32( hdc, nObjType, (GOBJENUMPROC32)&thunk, lParam );
-}
-
-
 /*************************************************************************
  *           THUNK_EnumFonts16   (GDI.70)
  */
@@ -164,26 +155,6 @@
     return EnumFonts16( hdc, lpFaceName, (FONTENUMPROC16)&thunk, lParam );
 }
 
-/*************************************************************************
- *           THUNK_EnumFonts32A   (GDI32.84)
- */
-INT32 WINAPI THUNK_EnumFonts32A( HDC32 hdc, LPCSTR lpFaceName,
-                                 FONTENUMPROC32A func, LPARAM lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_4 );
-    return EnumFonts32A( hdc, lpFaceName, (FONTENUMPROC32A)&thunk, lParam );
-}
-
-/*************************************************************************
- *           THUNK_EnumFonts32W   (GDI32.85)
- */
-INT32 WINAPI THUNK_EnumFonts32W( HDC32 hdc, LPCWSTR lpFaceName,
-                                 FONTENUMPROC32W func, LPARAM lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_4 );
-    return EnumFonts32W( hdc, lpFaceName, (FONTENUMPROC32W)&thunk, lParam );
-}
-
 /******************************************************************
  *           THUNK_EnumMetaFile16   (GDI.175)
  */
@@ -207,27 +178,6 @@
 
 
 /*************************************************************************
- *           THUNK_EnumFontFamilies32A   (GDI32.80)
- */
-INT32 WINAPI THUNK_EnumFontFamilies32A( HDC32 hdc, LPCSTR lpszFamily,
-                                        FONTENUMPROC32A func, LPARAM lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_4 );
-    return EnumFontFamilies32A(hdc,lpszFamily,(FONTENUMPROC32A)&thunk,lParam);
-}
-
-
-/*************************************************************************
- *           THUNK_EnumFontFamilies32W   (GDI32.83)
- */
-INT32 WINAPI THUNK_EnumFontFamilies32W( HDC32 hdc, LPCWSTR lpszFamily,
-                                        FONTENUMPROC32W func, LPARAM lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_4 );
-    return EnumFontFamilies32W(hdc,lpszFamily,(FONTENUMPROC32W)&thunk,lParam);
-}
-
-/*************************************************************************
  *           THUNK_EnumFontFamiliesEx16   (GDI.613)
  */
 INT16 WINAPI THUNK_EnumFontFamiliesEx16( HDC16 hdc, LPLOGFONT16 lpLF,
@@ -240,32 +190,6 @@
 }
 
 
-/*************************************************************************
- *           THUNK_EnumFontFamiliesEx32A   (GDI32.81)
- */
-INT32 WINAPI THUNK_EnumFontFamiliesEx32A( HDC32 hdc, LPLOGFONT32A lpLF,
-                                          FONTENUMPROCEX32A func, LPARAM lParam,
-                                          DWORD reserved)
-{
-    DECL_THUNK( thunk, func, CallTo32_4 );
-    return EnumFontFamiliesEx32A( hdc, lpLF, (FONTENUMPROCEX32A)&thunk,
-                                  lParam, reserved );
-}
-
-
-/*************************************************************************
- *           THUNK_EnumFontFamiliesEx32W   (GDI32.82)
- */
-INT32 WINAPI THUNK_EnumFontFamiliesEx32W( HDC32 hdc, LPLOGFONT32W lpLF,
-                                          FONTENUMPROCEX32W func, LPARAM lParam,
-                                          DWORD reserved )
-{
-    DECL_THUNK( thunk, func, CallTo32_4 );
-    return EnumFontFamiliesEx32W( hdc, lpLF, (FONTENUMPROCEX32W)&thunk,
-                                  lParam, reserved );
-}
-
-
 /**********************************************************************
  *           THUNK_LineDDA16   (GDI.100)
  */
@@ -277,18 +201,6 @@
 }
 
 
-/**********************************************************************
- *           THUNK_LineDDA32   (GDI32.248)
- */
-BOOL32 WINAPI THUNK_LineDDA32( INT32 nXStart, INT32 nYStart, INT32 nXEnd,
-                               INT32 nYEnd, LINEDDAPROC32 func, LPARAM lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_3 );
-    return LineDDA32( nXStart, nYStart, nXEnd, nYEnd,
-                      (LINEDDAPROC32)&thunk, lParam );
-}
-
-
 /*******************************************************************
  *           THUNK_EnumWindows16   (USER.54)
  */
@@ -299,16 +211,6 @@
 }
 
 
-/*******************************************************************
- *           THUNK_EnumWindows32   (USER32.192)
- */
-BOOL32 WINAPI THUNK_EnumWindows32( WNDENUMPROC32 func, LPARAM lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_2 );
-    return EnumWindows32( (WNDENUMPROC32)&thunk, lParam );
-}
-
-
 /**********************************************************************
  *           THUNK_EnumChildWindows16   (USER.55)
  */
@@ -321,17 +223,6 @@
 
 
 /**********************************************************************
- *           THUNK_EnumChildWindows32   (USER32.177)
- */
-BOOL32 WINAPI THUNK_EnumChildWindows32( HWND32 parent, WNDENUMPROC32 func,
-                                        LPARAM lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_2 );
-    return EnumChildWindows32( parent, (WNDENUMPROC32)&thunk, lParam );
-}
-
-
-/**********************************************************************
  *           THUNK_EnumTaskWindows16   (USER.225)
  */
 BOOL16 WINAPI THUNK_EnumTaskWindows16( HTASK16 hTask, WNDENUMPROC16 func,
@@ -342,17 +233,6 @@
 }
 
 
-/**********************************************************************
- *           THUNK_EnumThreadWindows   (USER32.189)
- */
-BOOL32 WINAPI THUNK_EnumThreadWindows( DWORD id, WNDENUMPROC32 func,
-                                       LPARAM lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_2 );
-    return EnumThreadWindows( id, (WNDENUMPROC32)&thunk, lParam );
-}
-
-
 /***********************************************************************
  *           THUNK_EnumProps16   (USER.27)
  */
@@ -364,154 +244,6 @@
 
 
 /***********************************************************************
- *           THUNK_EnumProps32A   (USER32.185)
- */
-INT32 WINAPI THUNK_EnumProps32A( HWND32 hwnd, PROPENUMPROC32A func )
-{
-    DECL_THUNK( thunk, func, CallTo32_3 );
-    return EnumProps32A( hwnd, (PROPENUMPROC32A)&thunk );
-}
-
-
-/***********************************************************************
- *           THUNK_EnumProps32W   (USER32.188)
- */
-INT32 WINAPI THUNK_EnumProps32W( HWND32 hwnd, PROPENUMPROC32W func )
-{
-    DECL_THUNK( thunk, func, CallTo32_3 );
-    return EnumProps32W( hwnd, (PROPENUMPROC32W)&thunk );
-}
-
-
-/***********************************************************************
- *           THUNK_EnumPropsEx32A   (USER32.186)
- */
-INT32 WINAPI THUNK_EnumPropsEx32A( HWND32 hwnd, PROPENUMPROCEX32A func,
-                                   LPARAM lParam)
-{
-    DECL_THUNK( thunk, func, CallTo32_4 );
-    return EnumPropsEx32A( hwnd, (PROPENUMPROCEX32A)&thunk, lParam );
-}
-
-
-/***********************************************************************
- *           THUNK_EnumPropsEx32W   (USER32.187)
- */
-INT32 WINAPI THUNK_EnumPropsEx32W( HWND32 hwnd, PROPENUMPROCEX32W func,
-                                   LPARAM lParam)
-{
-    DECL_THUNK( thunk, func, CallTo32_4 );
-    return EnumPropsEx32W( hwnd, (PROPENUMPROCEX32W)&thunk, lParam );
-}
-
-
-/***********************************************************************
- *           THUNK_EnumSystemCodePages32A	(KERNEL32.92)
- */
-BOOL32 WINAPI THUNK_EnumSystemCodePages32A( CODEPAGE_ENUMPROC32A func,
-                                            DWORD flags )
-{
-    DECL_THUNK( thunk, func, CallTo32_1 );
-    return EnumSystemCodePages32A( (CODEPAGE_ENUMPROC32A)&thunk, flags );
-}
-
-
-/***********************************************************************
- *           THUNK_EnumSystemCodePages32W	(KERNEL32.93)
- */
-BOOL32 WINAPI THUNK_EnumSystemCodePages32W( CODEPAGE_ENUMPROC32W func,
-                                            DWORD flags )
-{
-    DECL_THUNK( thunk, func, CallTo32_1 );
-    return EnumSystemCodePages32W( (CODEPAGE_ENUMPROC32W)&thunk, flags );
-}
-
-/***********************************************************************
- *           THUNK_EnumSystemLocales32A   (KERNEL32.92)
- */
-BOOL32 WINAPI THUNK_EnumSystemLocales32A( LOCALE_ENUMPROC32A func, DWORD flags)
-{
-    DECL_THUNK( thunk, func, CallTo32_1 );
-    return EnumSystemLocales32A( (LOCALE_ENUMPROC32A)&thunk, flags );
-}
-
-
-/***********************************************************************
- *           THUNK_EnumSystemLocales32W   (KERNEL32.93)
- */
-BOOL32 WINAPI THUNK_EnumSystemLocales32W( LOCALE_ENUMPROC32W func, DWORD flags)
-{
-    DECL_THUNK( thunk, func, CallTo32_1 );
-    return EnumSystemLocales32W( (LOCALE_ENUMPROC32W)&thunk, flags );
-}
-
-/***********************************************************************
- *           THUNK_EnumResourceLanguages32W   (KERNEL32.87)
- */
-BOOL32 WINAPI THUNK_EnumResourceLanguages32W( HMODULE32 hmod, LPCWSTR type,
-                                              LPCWSTR name,
-                                              ENUMRESLANGPROC32W func,
-                                              LONG lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_5 );
-    return EnumResourceLanguages32W( hmod,type,name,(ENUMRESLANGPROC32W)&thunk, lParam );
-}
-
-/***********************************************************************
- *           THUNK_EnumResourceLanguages32A   (KERNEL32.86)
- */
-BOOL32 WINAPI THUNK_EnumResourceLanguages32A( HMODULE32 hmod, LPCSTR type,
-                                              LPCSTR name,
-                                              ENUMRESLANGPROC32A func,
-                                              LONG lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_5 );
-    return EnumResourceLanguages32A( hmod,type,name,(ENUMRESLANGPROC32A)&thunk, lParam );
-}
-
-/***********************************************************************
- *           THUNK_EnumResourceNames32A   (KERNEL32.88)
- */
-BOOL32 WINAPI THUNK_EnumResourceNames32A( HMODULE32 hmod, LPCSTR type,
-                                          ENUMRESNAMEPROC32A func, LONG lParam)
-{
-    DECL_THUNK( thunk, func, CallTo32_4 );
-    return EnumResourceNames32A( hmod,type,(ENUMRESNAMEPROC32A)&thunk,lParam );
-}
-
-/***********************************************************************
- *           THUNK_EnumResourceNames32W   (KERNEL32.89)
- */
-BOOL32 WINAPI THUNK_EnumResourceNames32W( HMODULE32 hmod, LPCWSTR type,
-                                          ENUMRESNAMEPROC32W func, LONG lParam)
-{
-    DECL_THUNK( thunk, func, CallTo32_4 );
-    return EnumResourceNames32W( hmod,type,(ENUMRESNAMEPROC32W)&thunk, lParam);
-}
-
-/***********************************************************************
- *           THUNK_EnumResourceTypes32A   (KERNEL32.90)
- */
-BOOL32 WINAPI THUNK_EnumResourceTypes32A( HMODULE32 hmod,
-                                          ENUMRESTYPEPROC32A func, LONG lParam)
-{
-    DECL_THUNK( thunk, func, CallTo32_3 );
-    return EnumResourceTypes32A( hmod,(ENUMRESTYPEPROC32A)&thunk, lParam );
-}
-
-/***********************************************************************
- *           THUNK_EnumResourceTypes32W   (KERNEL32.91)
- */
-BOOL32 WINAPI THUNK_EnumResourceTypes32W( HMODULE32 hmod,
-                                          ENUMRESTYPEPROC32W func,
-                                          LONG lParam )
-{
-    DECL_THUNK( thunk, func, CallTo32_3 );
-    return EnumResourceTypes32W( hmod,(ENUMRESTYPEPROC32W)&thunk, lParam );
-}
-
-
-/***********************************************************************
  *           THUNK_GrayString16   (USER.185)
  */
 BOOL16 WINAPI THUNK_GrayString16( HDC16 hdc, HBRUSH16 hbr,
@@ -529,40 +261,6 @@
 
 
 /***********************************************************************
- *           THUNK_GrayString32A   (USER32.314)
- */
-BOOL32 WINAPI THUNK_GrayString32A( HDC32 hdc, HBRUSH32 hbr,
-                                   GRAYSTRINGPROC32 func, LPARAM lParam,
-                                   INT32 cch, INT32 x, INT32 y,
-                                   INT32 cx, INT32 cy )
-{
-    DECL_THUNK( thunk, func, CallTo32_3 );
-    if (!func)
-        return GrayString32A( hdc, hbr, NULL, lParam, cch, x, y, cx, cy );
-    else
-        return GrayString32A( hdc, hbr, (GRAYSTRINGPROC32)&thunk, lParam, cch,
-                              x, y, cx, cy );
-}
-
-
-/***********************************************************************
- *           THUNK_GrayString32W   (USER32.315)
- */
-BOOL32 WINAPI THUNK_GrayString32W( HDC32 hdc, HBRUSH32 hbr,
-                                   GRAYSTRINGPROC32 func,
-                                   LPARAM lParam, INT32 cch, INT32 x, INT32 y,
-                                   INT32 cx, INT32 cy )
-{
-    DECL_THUNK( thunk, func, CallTo32_3 );
-    if (!func)
-        return GrayString32W( hdc, hbr, NULL, lParam, cch, x, y, cx, cy );
-    else
-        return GrayString32W( hdc, hbr, (GRAYSTRINGPROC32)&thunk, lParam, cch,
-                              x, y, cx, cy );
-}
-
-
-/***********************************************************************
  *           THUNK_SetWindowsHook16   (USER.121)
  */
 FARPROC16 WINAPI THUNK_SetWindowsHook16( INT16 id, HOOKPROC16 proc )
@@ -639,24 +337,6 @@
 }
 
 
-/***********************************************************************
- *            THUNK_SetUnhandledExceptionFilter   (KERNEL32.516)
- */
-LPTOP_LEVEL_EXCEPTION_FILTER WINAPI THUNK_SetUnhandledExceptionFilter(
-                                          LPTOP_LEVEL_EXCEPTION_FILTER filter )
-{
-    LPTOP_LEVEL_EXCEPTION_FILTER old;
-    THUNK *thunk = THUNK_Alloc( (FARPROC16)filter, (RELAY)CallTo32_1 );
-    if (!thunk) return NULL;
-    old = SetUnhandledExceptionFilter( (LPTOP_LEVEL_EXCEPTION_FILTER)thunk );
-    if (!old) return NULL;
-    thunk = (THUNK *)old;
-    old = (LPTOP_LEVEL_EXCEPTION_FILTER)thunk->proc;
-    THUNK_Free( thunk );
-    return old;
-}
-
-
 static FARPROC16 defDCHookProc = NULL;
 
 /***********************************************************************
@@ -705,6 +385,93 @@
     return ret;
 }
 
+
+/***********************************************************************
+ *           THUNK_SetTaskSignalProc (KERNEL.38)
+ */
+FARPROC16 WINAPI THUNK_SetTaskSignalProc( HTASK16 hTask, FARPROC16 proc )
+{
+    static FARPROC16 defSignalProc16 = NULL;
+
+    THUNK *thunk = NULL;
+
+    if( !defSignalProc16 )
+	defSignalProc16 = MODULE_GetEntryPoint(GetModuleHandle16("USER"), 314 );
+
+    if( proc == defSignalProc16 )
+	thunk = (THUNK*)SetTaskSignalProc( hTask, (FARPROC16)&USER_SignalProc );
+    else 
+    {
+	thunk = THUNK_Alloc( proc, (RELAY)CallTo16_word_wwwww );
+	if( !thunk ) return FALSE;
+	thunk = (THUNK*)SetTaskSignalProc( hTask, (FARPROC16)thunk );
+    }
+
+    if( thunk != (THUNK*)USER_SignalProc )
+    {
+	if( !thunk ) return NULL;
+
+	proc = thunk->proc;
+	THUNK_Free( thunk );
+	return proc;
+    }
+    return defSignalProc16;
+}
+
+
+/***********************************************************************
+ *           THUNK_SetResourceHandler	(KERNEL.67)
+ */
+FARPROC16 WINAPI THUNK_SetResourceHandler( HMODULE16 hModule, SEGPTR typeId, FARPROC16 proc )
+{
+    /* loader/ne_resource.c */
+    extern HGLOBAL16 WINAPI NE_DefResourceHandler(HGLOBAL16,HMODULE16,HRSRC16);
+
+    static FARPROC16 defDIBIconLoader16 = NULL;
+    static FARPROC16 defDIBCursorLoader16 = NULL;
+    static FARPROC16 defResourceLoader16 = NULL;
+
+    THUNK *thunk = NULL;
+
+    if( !defResourceLoader16 )
+    {
+	HMODULE16 hUser = GetModuleHandle16("USER");
+	defDIBIconLoader16 = MODULE_GetEntryPoint( hUser, 357 );
+	defDIBCursorLoader16 = MODULE_GetEntryPoint( hUser, 356 );
+	defResourceLoader16 = MODULE_GetWndProcEntry16( "DefResourceHandler" );
+    }
+
+    if( proc == defResourceLoader16 )
+	thunk = (THUNK*)&NE_DefResourceHandler;
+    else if( proc == defDIBIconLoader16 )
+	thunk = (THUNK*)&LoadDIBIconHandler;
+    else if( proc == defDIBCursorLoader16 )
+	thunk = (THUNK*)&LoadDIBCursorHandler;
+    else
+    {
+	thunk = THUNK_Alloc( proc, (RELAY)CallTo16_word_www );
+	if( !thunk ) return FALSE;
+    }
+
+    thunk = (THUNK*)SetResourceHandler( hModule, typeId, (FARPROC16)thunk );
+
+    if( thunk == (THUNK*)&NE_DefResourceHandler )
+	return defResourceLoader16;
+    if( thunk == (THUNK*)&LoadDIBIconHandler )
+	return defDIBIconLoader16;
+    if( thunk == (THUNK*)&LoadDIBCursorHandler )
+	return defDIBCursorLoader16;
+
+    if( thunk )
+    {
+	proc = thunk->proc;
+	THUNK_Free( thunk );
+	return proc;
+    }
+    return NULL;
+}
+
+
 /***********************************************************************
  *                                                                     *
  *                 Win95 internal thunks                               *
@@ -726,7 +493,7 @@
 	*x++	= 0x0f;*x++=0xb6;*x++=0xd1; /* movzbl edx,cl */
 	*x++	= 0x8B;*x++=0x14;*x++=0x95;*(DWORD*)x= thunkstart;
 	x+=4;	/* mov edx, [4*edx + thunkstart] */
-	*x++	= 0x68; *(DWORD*)x = (DWORD)GetProcAddress32(WIN32_GetModuleHandleA("KERNEL32"),"FT_Prolog");
+	*x++	= 0x68; *(DWORD*)x = (DWORD)GetProcAddress32(GetModuleHandle32A("KERNEL32"),"FT_Prolog");
 	x+=4; 	/* push FT_Prolog */
 	*x++	= 0xC3;		/* lret */
 	/* fill rest with 0xCC / int 3 */
@@ -749,7 +516,7 @@
 	*x++	= 0x8A;*x++=0x4D;*x++=0xFC; /* movb cl,[ebp-04] */
 	*x++	= 0x8B;*x++=0x14;*x++=0x8D;*(DWORD*)x= thunkstart;
 	x+=4;	/* mov edx, [4*ecx + (EAX+EDX) */
-	*x++	= 0xB8; *(DWORD*)x = (DWORD)GetProcAddress32(WIN32_GetModuleHandleA("KERNEL32"),"QT_Thunk");
+	*x++	= 0xB8; *(DWORD*)x = (DWORD)GetProcAddress32(GetModuleHandle32A("KERNEL32"),"QT_Thunk");
 	x+=4; 	/* mov eax , QT_Thunk */
 	*x++	= 0xFF; *x++ = 0xE0;	/* jmp eax */
 	/* should fill the rest of the 32 bytes with 0xCC */
@@ -1020,7 +787,7 @@
 LPVOID WINAPI _KERNEL32_41(LPBYTE thunk,LPCSTR thkbuf,DWORD len,LPCSTR dll16,
                            LPCSTR dll32)
 {
-	HMODULE32	hkrnl32 = WIN32_GetModuleHandleA("KERNEL32");
+	HMODULE32	hkrnl32 = GetModuleHandle32A("KERNEL32");
 	HMODULE16	hmod;
 	LPDWORD		addr,addr2;
 	DWORD		segaddr;
@@ -1130,44 +897,41 @@
  *
  * And YES, I've seen nr=48 (somewhere in the Win95 32<->16 OLE coupling)
  */
-DWORD WINAPI _KERNEL32_88(DWORD *args)
+DWORD WINAPIV _KERNEL32_88( DWORD nr, DWORD flags, FARPROC32 fun, ... )
 {
-    DWORD	nr = args[0];
-    DWORD	flags = args[1];
-    FARPROC32	fun = (FARPROC32)args[2];
-    DWORD	i,ret;
+    DWORD i,ret;
+    DWORD *args = ((DWORD *)&fun) + 1;
 
     fprintf(stderr,"KERNEL32_88(%ld,0x%08lx,%p,[ ",nr,flags,fun);
-    for (i=0;i<nr/4;i++)
-    	fprintf(stderr,"0x%08lx,",args[3+i]);
+    for (i=0;i<nr/4;i++) fprintf(stderr,"0x%08lx,",args[i]);
     fprintf(stderr,"])");
 #ifndef WINELIB
     switch (nr) {
     case 0:	ret = CallTo32_0(fun);
 		break;
-    case 4:	ret = CallTo32_1(fun,args[3]);
+    case 4:	ret = CallTo32_1(fun,args[0]);
 		break;
-    case 8:	ret = CallTo32_2(fun,args[3],args[4]);
+    case 8:	ret = CallTo32_2(fun,args[0],args[1]);
 		break;
-    case 12:	ret = CallTo32_3(fun,args[3],args[4],args[5]);
+    case 12:	ret = CallTo32_3(fun,args[0],args[1],args[2]);
 		break;
-    case 16:	ret = CallTo32_4(fun,args[3],args[4],args[5],args[6]);
+    case 16:	ret = CallTo32_4(fun,args[0],args[1],args[2],args[3]);
 		break;
-    case 20:	ret = CallTo32_5(fun,args[3],args[4],args[5],args[6],args[7]);
+    case 20:	ret = CallTo32_5(fun,args[0],args[1],args[2],args[3],args[4]);
 		break;
-    case 24:	ret = CallTo32_6(fun,args[3],args[4],args[5],args[6],args[7],args[8]);
+    case 24:	ret = CallTo32_6(fun,args[0],args[1],args[2],args[3],args[4],args[5]);
 		break;
-    case 28:	ret = CallTo32_7(fun,args[3],args[4],args[5],args[6],args[7],args[8],args[9]);
+    case 28:	ret = CallTo32_7(fun,args[0],args[1],args[2],args[3],args[4],args[5],args[6]);
 		break;
-    case 32:	ret = CallTo32_8(fun,args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10]);
+    case 32:	ret = CallTo32_8(fun,args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7]);
 		break;
-    case 36:	ret = CallTo32_9(fun,args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11]);
+    case 36:	ret = CallTo32_9(fun,args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8]);
 		break;
-    case 40:	ret = CallTo32_10(fun,args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12]);
+    case 40:	ret = CallTo32_10(fun,args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9]);
 		break;
-    case 44:	ret = CallTo32_11(fun,args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13]);
+    case 44:	ret = CallTo32_11(fun,args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10]);
 		break;
-    case 48:	ret = CallTo32_12(fun,args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14]);
+    case 48:	ret = CallTo32_12(fun,args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11]);
 		break;
     default:
 	fprintf(stderr,"    unsupported nr of arguments, %ld\n",nr);
diff --git a/if1632/user.spec b/if1632/user.spec
index 6465424..a354415 100644
--- a/if1632/user.spec
+++ b/if1632/user.spec
@@ -86,7 +86,7 @@
 82  pascal16 InvertRect(word ptr) InvertRect16
 83  pascal16 FrameRect(word ptr word) FrameRect16
 84  pascal16 DrawIcon(word s_word s_word word) DrawIcon16
-85  pascal16 DrawText(word ptr s_word ptr word) DrawText16
+85  pascal16 DrawText(word str s_word ptr word) DrawText16
 87  pascal16 DialogBox(word segstr word segptr) DialogBox16
 88  pascal16 EndDialog(word s_word) EndDialog16
 89  pascal16 CreateDialog(word segstr word segptr) CreateDialog16
@@ -207,13 +207,13 @@
 203 pascal16 GetCommError(word ptr) GetCommError
 204 pascal16 ReadComm(word ptr word) ReadComm
 205 pascal16 WriteComm(word ptr word) WriteComm
-206 pascal16 TransmitCommChar(word byte) TransmitCommChar16
+206 pascal16 TransmitCommChar(word word) TransmitCommChar16
 207 pascal16 CloseComm(word) CloseComm
 208 pascal   SetCommEventMask(word word) SetCommEventMask
 209 pascal16 GetCommEventMask(word word) GetCommEventMask
 210 pascal16 SetCommBreak(word) SetCommBreak16
 211 pascal16 ClearCommBreak(word) ClearCommBreak16
-212 pascal16 UngetCommChar(word byte) UngetCommChar
+212 pascal16 UngetCommChar(word word) UngetCommChar
 213 pascal16 BuildCommDCB(ptr ptr) BuildCommDCB16
 214 pascal   EscapeCommFunction(word word) EscapeCommFunction16
 215 pascal16 FlushComm(word word) FlushComm
@@ -305,7 +305,7 @@
 #306 BEAR306
 308 pascal   DefDlgProc(word word word long) DefDlgProc16
 309 pascal16 GetClipCursor(ptr) GetClipCursor16
-314 stub SignalProc
+314 pascal16 SignalProc(word word word word word) USER_SignalProc
 319 pascal16 ScrollWindowEx(word s_word s_word ptr ptr word ptr word) ScrollWindowEx16
 320 stub SysErrorBox
 321 stub SetEventHook
@@ -316,19 +316,19 @@
 326 pascal16 GetControlBrush(word word word) GetControlBrush
 331 pascal16 EnableHardwareInput(word) EnableHardwareInput
 332 pascal16 UserYield() UserYield
-333 stub IsUserIdle
+333 pascal16 IsUserIdle() IsUserIdle
 334 pascal   GetQueueStatus(word) GetQueueStatus16
 335 pascal16 GetInputState() GetInputState16
-336 stub LoadCursorIconHandler
+336 pascal16 LoadCursorIconHandler(word word word) LoadCursorIconHandler
 337 pascal   GetMouseEventProc() GetMouseEventProc
 #341 _FFFE_FARFRAME
 343 stub GetFilePortName
-356 stub LoadDIBCursorHandler
-357 stub LoadDIBIconHandler
+356 pascal16 LoadDIBCursorHandler(word word word) LoadDIBCursorHandler
+357 pascal16 LoadDIBIconHandler(word word word) LoadDIBIconHandler
 358 pascal16 IsMenu(word) IsMenu16
 359 pascal16 GetDCEx(word word long) GetDCEx16
 362 pascal16 DCHook(word word long long) DCHook
-364 stub LookupIconIDFromDirectoryEx
+364 pascal16 LookupIconIdFromDirectoryEx(ptr word word word word) LookupIconIdFromDirectoryEx16
 368 pascal16 CopyIcon(word word) CopyIcon16
 369 pascal16 CopyCursor(word word) CopyCursor16
 370 pascal16 GetWindowPlacement(word ptr) GetWindowPlacement16
@@ -381,10 +381,10 @@
 430 pascal16 lstrcmp(str str) lstrcmp16
 431 pascal   AnsiUpper(segstr) AnsiUpper16
 432 pascal   AnsiLower(segstr) AnsiLower16
-433 pascal16 IsCharAlpha(byte) IsCharAlpha16
-434 pascal16 IsCharAlphaNumeric(byte) IsCharAlphaNumeric16
-435 pascal16 IsCharUpper(byte) IsCharUpper16
-436 pascal16 IsCharLower(byte) IsCharLower16
+433 pascal16 IsCharAlpha(word) IsCharAlpha16
+434 pascal16 IsCharAlphaNumeric(word) IsCharAlphaNumeric16
+435 pascal16 IsCharUpper(word) IsCharUpper16
+436 pascal16 IsCharLower(word) IsCharLower16
 437 pascal16 AnsiUpperBuff(ptr word) AnsiUpperBuff16
 438 pascal16 AnsiLowerBuff(ptr word) AnsiLowerBuff16
 441 pascal16 InsertMenuItem(word word word ptr) InsertMenuItem16
@@ -394,7 +394,7 @@
 447 pascal   DefMDIChildProc(word word word long) DefMDIChildProc16
 448 stub DrawAnimatedRects
 449 stub DrawState
-450 stub CreateIconFromResourceEx
+450 pascal16 CreateIconFromResourceEx(ptr long word long word word word) CreateIconFromResourceEx16
 451 pascal16 TranslateMDISysAccel(word ptr) TranslateMDISysAccel16
 452 pascal16 CreateWindowEx(long str str long s_word s_word s_word s_word
                             word word word segptr) CreateWindowEx16
@@ -442,7 +442,7 @@
 509 pascal16 WNetUnwatchQueue(word ptr ptr word) WNetUnwatchQueue
 510 pascal16 WNetLockQueueData(ptr ptr ptr) WNetLockQueueData
 511 pascal16 WNetUnlockQueueData(ptr) WNetUnlockQueueData
-512 pascal16 WNetGetConnection(ptr ptr ptr) WNetGetConnection
+512 pascal16 WNetGetConnection(ptr ptr ptr) WNetGetConnection16
 513 pascal16 WNetGetCaps(word) WNetGetCaps
 514 pascal16 WNetDeviceMode(word) WNetDeviceMode
 515 pascal16 WNetBrowseDialog(word word ptr) WNetBrowseDialog
diff --git a/if1632/user32.spec b/if1632/user32.spec
index 78b5f23..b00e5d8 100644
--- a/if1632/user32.spec
+++ b/if1632/user32.spec
@@ -1,608 +1,607 @@
 name	user32
 type	win32
-base	1
 
-0000 stub ActivateKeyboardLayout
-0001 stdcall AdjustWindowRect(ptr long long) AdjustWindowRect32
-0002 stdcall AdjustWindowRectEx(ptr long long long) AdjustWindowRectEx32
-0003 stdcall AnyPopup() AnyPopup32
-0004 stdcall AppendMenuA(long long long ptr) AppendMenu32A
-0005 stdcall AppendMenuW(long long long ptr) AppendMenu32W
-0006 stdcall ArrangeIconicWindows(long) ArrangeIconicWindows32
-0007 stub AttachThreadInput
-0008 stdcall BeginDeferWindowPos(long) BeginDeferWindowPos32
-0009 stdcall BeginPaint(long ptr) BeginPaint32
-0010 stdcall BringWindowToTop(long) BringWindowToTop32
-0011 stub BroadcastSystemMessage
-0012 stub CalcChildScroll
-0013 stub CallMsgFilter
-0014 stdcall CallMsgFilterA(ptr long) CallMsgFilter32A
-0015 stdcall CallMsgFilterW(ptr long) CallMsgFilter32W
-0016 stdcall CallNextHookEx(long long long long) CallNextHookEx32
-0017 stdcall CallWindowProcA(ptr long long long long) CallWindowProc32A
-0018 stdcall CallWindowProcW(ptr long long long long) CallWindowProc32W
-0019 stub CascadeChildWindows
-0020 stub CascadeWindows
-0021 stdcall ChangeClipboardChain(long long) ChangeClipboardChain32
-0022 stdcall ChangeMenuA(long long ptr long long) ChangeMenu32A
-0023 stdcall ChangeMenuW(long long ptr long long) ChangeMenu32W
-0024 stdcall CharLowerA(ptr) CharLower32A
-0025 stdcall CharLowerBuffA(ptr long) CharLowerBuff32A
-0026 stdcall CharLowerBuffW(ptr long) CharLowerBuff32W
-0027 stdcall CharLowerW(ptr) CharLower32W
-0028 stdcall CharNextA(ptr) CharNext32A
-0029 stdcall CharNextExA(long ptr long) CharNextEx32A
-0030 stdcall CharNextExW(long ptr long) CharNextEx32W
-0031 stdcall CharNextW(ptr) CharNext32W
-0032 stdcall CharPrevA(ptr ptr) CharPrev32A
-0033 stdcall CharPrevExA(long ptr ptr long) CharPrevEx32A
-0034 stdcall CharPrevExW(long ptr ptr long) CharPrevEx32W
-0035 stdcall CharPrevW(ptr ptr) CharPrev32W
-0036 stdcall CharToOemA(ptr ptr) CharToOem32A
-0037 stdcall CharToOemBuffA(ptr ptr long) CharToOemBuff32A
-0038 stdcall CharToOemBuffW(ptr ptr long) CharToOemBuff32W
-0039 stdcall CharToOemW(ptr ptr) CharToOem32W
-0040 stdcall CharUpperA(ptr) CharUpper32A
-0041 stdcall CharUpperBuffA(ptr long) CharUpperBuff32A
-0042 stdcall CharUpperBuffW(ptr long) CharUpperBuff32W
-0043 stdcall CharUpperW(ptr) CharUpper32W
-0044 stdcall CheckDlgButton(long long long) CheckDlgButton32
-0045 stdcall CheckMenuItem(long long long) CheckMenuItem32
-0046 stub CheckMenuRadioItem
-0047 stdcall CheckRadioButton(long long long long) CheckRadioButton32
-0048 stdcall ChildWindowFromPoint(long long long) ChildWindowFromPoint32
-0049 stub ChildWindowFromPointEx
-0050 stub ClientThreadConnect
-0051 stdcall ClientToScreen(long ptr) ClientToScreen32
-0052 stdcall ClipCursor(ptr) ClipCursor32
-0053 stdcall CloseClipboard() CloseClipboard32
-0054 stub CloseDesktop
-0055 stdcall CloseWindow(long) CloseWindow32
-0056 stub CloseWindowStation
-0057 stub CopyAcceleratorTableA
-0058 stub CopyAcceleratorTableW
-0059 stdcall CopyIcon(long) CopyIcon32
-0060 stdcall CopyImage(long long long long long) CopyImage32
-0061 stdcall CopyRect(ptr ptr) CopyRect32
-0062 stdcall CountClipboardFormats() CountClipboardFormats32
-0063 stub CreateAcceleratorTableA
-0064 stub CreateAcceleratorTableW
-0065 stdcall CreateCaret(long long long long) CreateCaret32
-0066 stdcall CreateCursor(long long long long long ptr ptr) CreateCursor32
-0067 stub CreateDesktopA
-0068 stub CreateDesktopW
-0069 stdcall CreateDialogIndirectParamA(long ptr long ptr long) CreateDialogIndirectParam32A
-0070 stub CreateDialogIndirectParamAorW
-0071 stdcall CreateDialogIndirectParamW(long ptr long ptr long) CreateDialogIndirectParam32W
-0072 stdcall CreateDialogParamA(long ptr long ptr long) CreateDialogParam32A
-0073 stdcall CreateDialogParamW(long ptr long ptr long) CreateDialogParam32W
-0074 stdcall CreateIcon(long long long long long ptr ptr) CreateIcon32
-0075 stub CreateIconFromResource
-0076 stub CreateIconFromResourceEx
-0077 stub CreateIconIndirect
-0078 stub CreateMDIWindowA
-0079 stub CreateMDIWindowW
-0080 stdcall CreateMenu() CreateMenu32
-0081 stdcall CreatePopupMenu() CreatePopupMenu32
-0082 stdcall CreateWindowExA(long ptr ptr long long long long long 
-				long long long ptr) CreateWindowEx32A
-0083 stdcall CreateWindowExW(long ptr ptr long long long long long 
-				long long long ptr) CreateWindowEx32W
-0084 stub CreateWindowStationA
-0085 stub CreateWindowStationW
-0086 stub DdeAbandonTransaction
-0087 stub DdeAccessData
-0088 stub DdeAddData
-0089 return DdeClientTransaction 32 0
-0090 stub DdeCmpStringHandles
-0091 return DdeConnect 16 0
-0092 stub DdeConnectList
-0093 stub DdeCreateDataHandle
-0094 return DdeCreateStringHandleA 12 0
-0095 return DdeCreateStringHandleW 12 0
-0096 return DdeDisconnect 4 0
-0097 stub DdeDisconnectList
-0098 stub DdeEnableCallback
-0099 return DdeFreeDataHandle 4 1
-0100 return DdeFreeStringHandle 8 0
-0101 stub DdeGetData
-0102 return DdeGetLastError 4 0
-0103 stub DdeGetQualityOfService
-0104 stub DdeImpersonateClient
-0105 return DdeInitializeA 16 0
-0106 return DdeInitializeW 16 0
-0107 stub DdeKeepStringHandle
-0108 return DdeNameService 16 0
-0109 stub DdePostAdvise
-0110 stub DdeQueryConvInfo
-0111 stub DdeQueryNextServer
-0112 stub DdeQueryStringA
-0113 stub DdeQueryStringW
-0114 stub DdeReconnect
-0115 stub DdeSetQualityOfService
-0116 stub DdeSetUserHandle
-0117 stub DdeUnaccessData
-0118 return DdeUninitialize 4 0
-0119 stdcall DefDlgProcA(long long long long) DefDlgProc32A
-0120 stdcall DefDlgProcW(long long long long) DefDlgProc32W
-0121 stdcall DefFrameProcA(long long long long long) DefFrameProc32A
-0122 stdcall DefFrameProcW(long long long long long) DefFrameProc32W
-0123 stdcall DefMDIChildProcA(long long long long) DefMDIChildProc32A
-0124 stdcall DefMDIChildProcW(long long long long) DefMDIChildProc32W
-0125 stdcall DefWindowProcA(long long long long) DefWindowProc32A
-0126 stdcall DefWindowProcW(long long long long) DefWindowProc32W
-0127 stdcall DeferWindowPos(long long long long long long long long) DeferWindowPos32
-0128 stdcall DeleteMenu(long long long) DeleteMenu32
-0129 stub DestroyAcceleratorTable
-0130 stdcall DestroyCaret() DestroyCaret32
-0131 stdcall DestroyCursor(long) DestroyCursor32
-0132 stdcall DestroyIcon(long) DestroyIcon32
-0133 stdcall DestroyMenu(long) DestroyMenu32
-0134 stdcall DestroyWindow(long) DestroyWindow32
-0135 stdcall DialogBoxIndirectParamA(long ptr long ptr long) DialogBoxIndirectParam32A
-0136 stdcall DialogBoxIndirectParamAorW(long ptr long ptr long) DialogBoxIndirectParam32A
-0137 stdcall DialogBoxIndirectParamW(long ptr long ptr long) DialogBoxIndirectParam32W
-0138 stdcall DialogBoxParamA(long ptr long ptr long) DialogBoxParam32A
-0139 stdcall DialogBoxParamW(long ptr long ptr long) DialogBoxParam32W
-0140 stdcall DispatchMessageA(ptr) DispatchMessage32A
-0141 stdcall DispatchMessageW(ptr) DispatchMessage32W
-0142 stdcall DlgDirListA(long ptr long long long) DlgDirList32A
-0143 stdcall DlgDirListComboBoxA(long ptr long long long) DlgDirListComboBox32A
-0144 stdcall DlgDirListComboBoxW(long ptr long long long) DlgDirListComboBox32W
-0145 stdcall DlgDirListW(long ptr long long long) DlgDirList32W
-0146 stdcall DlgDirSelectComboBoxExA(long ptr long long) DlgDirSelectComboBoxEx32A
-0147 stdcall DlgDirSelectComboBoxExW(long ptr long long) DlgDirSelectComboBoxEx32W
-0148 stdcall DlgDirSelectExA(long ptr long long) DlgDirSelectEx32A
-0149 stdcall DlgDirSelectExW(long ptr long long) DlgDirSelectEx32W
-0150 stdcall DragDetect(long long long) DragDetect32
-0151 stub DragObject
-0152 stdcall DrawAnimatedRects(long long ptr ptr) DrawAnimatedRects32
-0153 stub DrawCaption
-0154 stdcall DrawEdge(long ptr long long) DrawEdge32
-0155 stdcall DrawFocusRect(long ptr) DrawFocusRect32
-0156 stub DrawFrame
-0157 stdcall DrawFrameControl(long ptr long long) DrawFrameControl32
-0158 stdcall DrawIcon(long long long long) DrawIcon32
-0159 stub DrawIconEx
-0160 stdcall DrawMenuBar(long) DrawMenuBar32
-0161 stdcall DrawStateA(long long ptr long long long long long long long) DrawState32A
-0162 stub DrawStateW
-0163 stdcall DrawTextA(long ptr long ptr long) DrawText32A
-0164 stub DrawTextExA
-0165 stub DrawTextExW
-0166 stdcall DrawTextW(long ptr long ptr long) DrawText32W
-0167 stub EditWndProc
-0168 stdcall EmptyClipboard() EmptyClipboard32
-0169 stdcall EnableMenuItem(long long long) EnableMenuItem32
-0170 stdcall EnableScrollBar(long long long) EnableScrollBar32
-0171 stdcall EnableWindow(long long) EnableWindow32
-0172 stdcall EndDeferWindowPos(long) EndDeferWindowPos32
-0173 stdcall EndDialog(long long) EndDialog32
-0174 stdcall EndMenu() EndMenu
-0175 stdcall EndPaint(long ptr) EndPaint32
-0176 stub EndTask
-0177 stdcall EnumChildWindows(long ptr long) THUNK_EnumChildWindows32
-0178 stdcall EnumClipboardFormats(long) EnumClipboardFormats32
-0179 stub EnumDesktopsA
-0180 stub EnumDesktopsW
-0181 stub EnumDisplayDeviceModesA
-0182 stub EnumDisplayDeviceModesW
-0183 stub EnumDisplayDevicesA
-0184 stub EnumDisplayDevicesW
-0185 stdcall EnumPropsA(long ptr) THUNK_EnumProps32A
-0186 stdcall EnumPropsExA(long ptr long) THUNK_EnumPropsEx32A
-0187 stdcall EnumPropsExW(long ptr long) THUNK_EnumPropsEx32W
-0188 stdcall EnumPropsW(long ptr) THUNK_EnumProps32W
-0189 stdcall EnumThreadWindows(long ptr long) THUNK_EnumThreadWindows
-0190 stub EnumWindowStationsA
-0191 stub EnumWindowStationsW
-0192 stdcall EnumWindows(ptr long) THUNK_EnumWindows32
-0193 stdcall EqualRect(ptr ptr) EqualRect32
-0194 stdcall ExcludeUpdateRgn(long long) ExcludeUpdateRgn32
-0195 stdcall ExitWindowsEx(long long) ExitWindowsEx
-0196 stdcall FillRect(long ptr long) FillRect32
-0197 stdcall FindWindowA(ptr ptr) FindWindow32A
-0198 stdcall FindWindowExA(long long ptr ptr) FindWindowEx32A
-0199 stdcall FindWindowExW(long long ptr ptr) FindWindowEx32W
-0200 stdcall FindWindowW(ptr ptr) FindWindow32W
-0201 stdcall FlashWindow(long long) FlashWindow32
-0202 stdcall FrameRect(long ptr long) FrameRect32
-0203 stub FreeDDElParam
-0204 stdcall GetActiveWindow() GetActiveWindow32
-0205 stdcall GetAppCompatFlags(long) GetAppCompatFlags32
-0206 stdcall GetAsyncKeyState(long) GetAsyncKeyState32
-0207 stdcall GetCapture() GetCapture32
-0208 stdcall GetCaretBlinkTime() GetCaretBlinkTime32
-0209 stdcall GetCaretPos(ptr) GetCaretPos32
-0210 stdcall GetClassInfoA(long ptr ptr) GetClassInfo32A
-0211 stdcall GetClassInfoExA(long ptr ptr) GetClassInfoEx32A
-0212 stdcall GetClassInfoExW(long ptr ptr) GetClassInfoEx32W
-0213 stdcall GetClassInfoW(long ptr ptr) GetClassInfo32W
-0214 stdcall GetClassLongA(long long) GetClassLong32A
-0215 stdcall GetClassLongW(long long) GetClassLong32W
-0216 stdcall GetClassNameA(long ptr long) GetClassName32A
-0217 stdcall GetClassNameW(long ptr long) GetClassName32W
-0218 stdcall GetClassWord(long long) GetClassWord32
-0219 stdcall GetClientRect(long long) GetClientRect32
-0220 stdcall GetClipCursor(ptr) GetClipCursor32
-0221 stdcall GetClipboardData(long) GetClipboardData32
-0222 stdcall GetClipboardFormatNameA(long ptr long) GetClipboardFormatName32A
-0223 stdcall GetClipboardFormatNameW(long ptr long) GetClipboardFormatName32W
-0224 stdcall GetClipboardOwner() GetClipboardOwner32
-0225 stdcall GetClipboardViewer(long) GetClipboardViewer32
-0226 stdcall GetCursor() GetCursor32
-0227 stub GetCursorInfo
-0228 stdcall GetCursorPos(ptr) GetCursorPos32
-0229 stdcall GetDC(long) GetDC32
-0230 stdcall GetDCEx(long long long) GetDCEx32
-0231 stdcall GetDesktopWindow() GetDesktopWindow32
-0232 stdcall GetDialogBaseUnits() GetDialogBaseUnits
-0233 stdcall GetDlgCtrlID(long) GetDlgCtrlID32
-0234 stdcall GetDlgItem(long long) GetDlgItem32
-0235 stdcall GetDlgItemInt(long long ptr long) GetDlgItemInt32
-0236 stdcall GetDlgItemTextA(long long ptr long) GetDlgItemText32A
-0237 stdcall GetDlgItemTextW(long long ptr long) GetDlgItemText32W
-0238 stdcall GetDoubleClickTime() GetDoubleClickTime32
-0239 stdcall GetFocus() GetFocus32
-0240 return GetForegroundWindow 0 0		#FIXME
-0241 stub GetIconInfo
-0242 stub GetInputDesktop
-0243 stdcall GetInputState() GetInputState32
-0244 stdcall GetInternalWindowPos(long ptr ptr) GetInternalWindowPos32
-0245 stdcall GetKBCodePage() GetKBCodePage32
-0246 stdcall GetKeyNameTextA(long ptr long) GetKeyNameText32A
-0247 stdcall GetKeyNameTextW(long ptr long) GetKeyNameText32W
-0248 stdcall GetKeyState(long) GetKeyState32
-0249 stdcall GetKeyboardLayout(long) GetKeyboardLayout
-0250 stub GetKeyboardLayoutList
-0251 stub GetKeyboardLayoutNameA
-0252 stub GetKeyboardLayoutNameW
-0253 stdcall GetKeyboardState(ptr) GetKeyboardState
-0254 stdcall GetKeyboardType(long) GetKeyboardType32
-0255 stdcall GetLastActivePopup(long) GetLastActivePopup32
-0256 stdcall GetMenu(long) GetMenu32
-0257 stdcall GetMenuCheckMarkDimensions() GetMenuCheckMarkDimensions
-0258 stub GetMenuContextHelpId
-0259 stub GetMenuDefaultItem
-0260 stub GetMenuIndex
-0261 stdcall GetMenuItemCount(long) GetMenuItemCount32
-0262 stdcall GetMenuItemID(long long) GetMenuItemID32
-0263 stdcall GetMenuItemInfoA(long long long ptr) GetMenuItemInfo32A
-0264 stdcall GetMenuItemInfoW(long long long ptr) GetMenuItemInfo32W
-0265 stub GetMenuItemRect
-0266 stdcall GetMenuState(long long long) GetMenuState32
-0267 stdcall GetMenuStringA(long long ptr long long) GetMenuString32A
-0268 stdcall GetMenuStringW(long long ptr long long) GetMenuString32W
-0269 stdcall GetMessageA(ptr long long long) GetMessage32A
-0270 stdcall GetMessageExtraInfo() GetMessageExtraInfo
-0271 stdcall GetMessagePos() GetMessagePos
-0272 stdcall GetMessageTime() GetMessageTime
-0273 stdcall GetMessageW(ptr long long long) GetMessage32W
-0274 stdcall GetNextDlgGroupItem(long long long) GetNextDlgGroupItem32
-0275 stdcall GetNextDlgTabItem(long long long) GetNextDlgTabItem32
-0276 stdcall GetOpenClipboardWindow() GetOpenClipboardWindow32
-0277 stdcall GetParent(long) GetParent32
-0278 stub GetPriorityClipboardFormat
-0279 stub GetProcessWindowStation
-0280 stdcall GetPropA(long ptr) GetProp32A
-0281 stdcall GetPropW(long ptr) GetProp32W
-0282 stub GetQueueStatus
-0283 stdcall GetScrollInfo(long long ptr) GetScrollInfo32
-0284 stdcall GetScrollPos(long long) GetScrollPos32
-0285 stdcall GetScrollRange(long long ptr ptr) GetScrollRange32
-0286 return GetShellWindow 0 0
-0287 stdcall GetSubMenu(long long) GetSubMenu32
-0288 stdcall GetSysColor(long) GetSysColor32
-0289 stdcall GetSysColorBrush(long) GetSysColorBrush32
-0290 stdcall GetSystemMenu(long long) GetSystemMenu32
-0291 stdcall GetSystemMetrics(long) GetSystemMetrics32
-0292 stdcall GetTabbedTextExtentA(long ptr long long ptr) GetTabbedTextExtent32A
-0293 stdcall GetTabbedTextExtentW(long ptr long long ptr) GetTabbedTextExtent32W
-0294 stub GetThreadDesktop
-0295 stdcall GetTopWindow(long) GetTopWindow32
-0296 stdcall GetUpdateRect(long ptr long) GetUpdateRect32
-0297 stdcall GetUpdateRgn(long long long) GetUpdateRgn32
-0298 stub GetUserObjectInformationA
-0299 stub GetUserObjectInformationW
-0300 stub GetUserObjectSecurity
-0301 stdcall GetWindow(long long) GetWindow32
-0302 stub GetWindowContextHelpId
-0303 stdcall GetWindowDC(long) GetWindowDC32
-0304 stdcall GetWindowLongA(long long) GetWindowLong32A
-0305 stdcall GetWindowLongW(long long) GetWindowLong32W
-0306 stdcall GetWindowPlacement(long ptr) GetWindowPlacement32
-0307 stdcall GetWindowRect(long ptr) GetWindowRect32
-0308 stdcall GetWindowTextA(long ptr long) GetWindowText32A
-0309 stdcall GetWindowTextLengthA(long) GetWindowTextLength32A
-0310 stdcall GetWindowTextLengthW(long) GetWindowTextLength32W
-0311 stdcall GetWindowTextW(long ptr long) GetWindowText32W
-0312 stdcall GetWindowThreadProcessId(long ptr) GetWindowThreadProcessId
-0313 stdcall GetWindowWord(long long) GetWindowWord32
-0314 stdcall GrayStringA(long long ptr long long long long long long) THUNK_GrayString32A
-0315 stdcall GrayStringW(long long ptr long long long long long long) THUNK_GrayString32W
-0316 stdcall HideCaret(long) HideCaret32
-0317 stdcall HiliteMenuItem(long long long long) HiliteMenuItem32
-0318 stub ImpersonateDdeClientWindow
-0319 stdcall InSendMessage() InSendMessage32
-0320 stdcall InflateRect(ptr long long) InflateRect32
-0321 stdcall InsertMenuA(long long long long ptr) InsertMenu32A
-0322 stdcall InsertMenuItemA(long long long ptr) InsertMenuItem32A
-0323 stdcall InsertMenuItemW(long long long ptr) InsertMenuItem32W
-0324 stdcall InsertMenuW(long long long long ptr) InsertMenu32W
-0325 stub InternalGetWindowText
-0326 stdcall IntersectRect(ptr ptr ptr) IntersectRect32
-0327 stdcall InvalidateRect(long ptr long) InvalidateRect32
-0328 stdcall InvalidateRgn(long long long) InvalidateRgn32
-0329 stdcall InvertRect(long ptr) InvertRect32
-0330 stdcall IsCharAlphaA(long) IsCharAlpha32A
-0331 stdcall IsCharAlphaNumericA(long) IsCharAlphaNumeric32A
-0332 stdcall IsCharAlphaNumericW(long) IsCharAlphaNumeric32W
-0333 stdcall IsCharAlphaW(long) IsCharAlpha32W
-0334 stdcall IsCharLowerA(long) IsCharLower32A
-0335 stdcall IsCharLowerW(long) IsCharLower32W
-0336 stdcall IsCharUpperA(long) IsCharUpper32A
-0337 stdcall IsCharUpperW(long) IsCharUpper32W
-0338 stdcall IsChild(long long) IsChild32
-0339 stdcall IsClipboardFormatAvailable(long) IsClipboardFormatAvailable32
-0340 stub IsDialogMessage
-0341 stdcall IsDialogMessageA(long ptr) IsDialogMessage32A
-0342 stdcall IsDialogMessageW(long ptr) IsDialogMessage32W
-0343 stdcall IsDlgButtonChecked(long long) IsDlgButtonChecked32
-0344 stdcall IsIconic(long) IsIconic32
-0345 stdcall IsMenu(long) IsMenu32
-0346 stdcall IsRectEmpty(ptr) IsRectEmpty32
-0347 stdcall IsWindow(long) IsWindow32
-0348 stdcall IsWindowEnabled(long) IsWindowEnabled32
-0349 stdcall IsWindowUnicode(long) IsWindowUnicode
-0350 stdcall IsWindowVisible(long) IsWindowVisible32
-0351 stdcall IsZoomed(long) IsZoomed32
-0352 stdcall KillSystemTimer(long long) KillSystemTimer32
-0353 stdcall KillTimer(long long) KillTimer32
-0354 stdcall LoadAcceleratorsA(long ptr) LoadAccelerators32A
-0355 stdcall LoadAcceleratorsW(long ptr) LoadAccelerators32W
-0356 stdcall LoadBitmapA(long ptr) LoadBitmap32A
-0357 stdcall LoadBitmapW(long ptr) LoadBitmap32W
-0358 stdcall LoadCursorA(long ptr) LoadCursor32A
-0359 stub LoadCursorFromFileA
-0360 stub LoadCursorFromFileW
-0361 stdcall LoadCursorW(long ptr) LoadCursor32W
-0362 stdcall LoadIconA(long ptr) LoadIcon32A
-0363 stdcall LoadIconW(long ptr) LoadIcon32W
-0364 stdcall LoadImageA(long ptr long long long long) LoadImage32A
-0365 stub LoadImageW
-0366 stub LoadKeyboardLayoutA
-0367 stub LoadKeyboardLayoutW
-0368 stub LoadLocalFonts
-0369 stdcall LoadMenuA(long ptr) LoadMenu32A
-0370 stdcall LoadMenuIndirectA(ptr) LoadMenuIndirect32A
-0371 stdcall LoadMenuIndirectW(ptr) LoadMenuIndirect32W
-0372 stdcall LoadMenuW(long ptr) LoadMenu32W
-0373 stub LoadRemoteFonts
-0374 stdcall LoadStringA(long long ptr long) LoadString32A
-0375 stdcall LoadStringW(long long ptr long) LoadString32W
-0376 stub LockWindowStation
-0377 stdcall LockWindowUpdate(long) LockWindowUpdate32
-0378 stub LookupIconIdFromDirectory
-0379 stub LookupIconIdFromDirectoryEx
-0380 stub MBToWCSEx
-0381 stdcall MapDialogRect(long ptr) MapDialogRect32
-0382 stdcall MapVirtualKeyA(long long) MapVirtualKey32A
-0383 stub MapVirtualKeyExA
-0384 stdcall MapVirtualKeyW(long long) MapVirtualKey32A
-0385 stdcall MapWindowPoints(long long ptr long) MapWindowPoints32
-0386 stub MenuItemFromPoint
-0387 stub MenuWindowProcA
-0388 stub MenuWindowProcW
-0389 stdcall MessageBeep(long) MessageBeep32
-0390 stdcall MessageBoxA(long ptr ptr long) MessageBox32A
-0391 stdcall MessageBoxExA(long ptr ptr long long) MessageBoxEx32A
-0392 stdcall MessageBoxExW(long ptr ptr long long) MessageBoxEx32W
-0393 stub MessageBoxIndirectA
-0394 stub MessageBoxIndirectW
-0395 stdcall MessageBoxW(long ptr ptr long) MessageBox32W
-0396 stdcall ModifyMenuA(long long long long ptr) ModifyMenu32A
-0397 stdcall ModifyMenuW(long long long long ptr) ModifyMenu32W
-0398 stdcall MoveWindow(long long long long long long) MoveWindow32
-0399 stdcall MsgWaitForMultipleObjects(long ptr long long long) MsgWaitForMultipleObjects
-0400 stdcall OemKeyScan(long) OemKeyScan
-0401 stdcall OemToCharA(ptr ptr) OemToChar32A
-0402 stdcall OemToCharBuffA(ptr ptr long) OemToCharBuff32A
-0403 stdcall OemToCharBuffW(ptr ptr long) OemToCharBuff32W
-0404 stdcall OemToCharW(ptr ptr) OemToChar32W
-0405 stdcall OffsetRect(ptr long long) OffsetRect32
-0406 stdcall OpenClipboard(long) OpenClipboard32
-0407 stub OpenDesktopA
-0408 stub OpenDesktopW
-0409 stdcall OpenIcon(long) OpenIcon32
-0410 stub OpenInputDesktop
-0411 stub OpenWindowStationA
-0412 stub OpenWindowStationW
-0413 stub PackDDElParam
-0414 stub PaintDesktop
-0415 stdcall PeekMessageA(ptr long long long long) PeekMessage32A
-0416 stdcall PeekMessageW(ptr long long long long) PeekMessage32W
-0417 stub PlaySoundEvent
-0418 stdcall PostMessageA(long long long long) PostMessage32A
-0419 stdcall PostMessageW(long long long long) PostMessage32W
-0420 stdcall PostQuitMessage(long) PostQuitMessage32
-0421 stub PostThreadMessageA
-0422 stub PostThreadMessageW
-0423 stdcall PtInRect(ptr long long) PtInRect32
-0424 stub QuerySendMessage
-0425 stdcall RedrawWindow(long ptr long long) RedrawWindow32
-0426 stdcall RegisterClassA(ptr) RegisterClass32A
-0427 stdcall RegisterClassExA(ptr) RegisterClassEx32A
-0428 stdcall RegisterClassExW(ptr) RegisterClassEx32W
-0429 stdcall RegisterClassW(ptr) RegisterClass32W
-0430 stdcall RegisterClipboardFormatA(ptr) RegisterClipboardFormat32A
-0431 stdcall RegisterClipboardFormatW(ptr) RegisterClipboardFormat32W
-0432 stub RegisterHotKey
-0433 stub RegisterLogonProcess
-0434 stub RegisterSystemThread
-0435 stub RegisterTasklist
-0436 stdcall RegisterWindowMessageA(ptr) RegisterWindowMessage32A
-0437 stdcall RegisterWindowMessageW(ptr) RegisterWindowMessage32W
-0438 stdcall ReleaseCapture() ReleaseCapture
-0439 stdcall ReleaseDC(long long) ReleaseDC32
-0440 stdcall RemoveMenu(long long long) RemoveMenu32
-0441 stdcall RemovePropA(long ptr) RemoveProp32A
-0442 stdcall RemovePropW(long ptr) RemoveProp32W
-0443 stub ReplyMessage
-0444 stub ResetDisplay
-0445 stub ReuseDDElParam
-0446 stdcall ScreenToClient(long ptr) ScreenToClient32
-0447 stdcall ScrollChildren(long long long long) ScrollChildren32
-0448 stdcall ScrollDC(long long long ptr ptr long ptr) ScrollDC32
-0449 stdcall ScrollWindow(long long long ptr ptr) ScrollWindow32
-0450 stdcall ScrollWindowEx(long long long ptr ptr long ptr long) ScrollWindowEx32
-0451 stdcall SendDlgItemMessageA(long long long long long) SendDlgItemMessage32A
-0452 stdcall SendDlgItemMessageW(long long long long long) SendDlgItemMessage32W
-0453 stdcall SendMessageA(long long long long) SendMessage32A
-0454 stub SendMessageCallbackA
-0455 stub SendMessageCallbackW
-0456 stub SendMessageTimeoutA
-0457 stub SendMessageTimeoutW
-0458 stdcall SendMessageW(long long long long) SendMessage32W
-0459 stub SendNotifyMessageA
-0460 stub SendNotifyMessageW
-0461 stub ServerSetFunctionPointers
-0462 stdcall SetActiveWindow(long) SetActiveWindow32
-0463 stdcall SetCapture(long) SetCapture32
-0464 stdcall SetCaretBlinkTime(long) SetCaretBlinkTime32
-0465 stdcall SetCaretPos(long long) SetCaretPos32
-0466 stdcall SetClassLongA(long long long) SetClassLong32A
-0467 stdcall SetClassLongW(long long long) SetClassLong32W
-0468 stdcall SetClassWord(long long long) SetClassWord32
-0469 stdcall SetClipboardData(long long) SetClipboardData32
-0470 stdcall SetClipboardViewer(long) SetClipboardViewer32
-0471 stdcall SetCursor(long) SetCursor32
-0472 stub SetCursorContents
-0473 stdcall SetCursorPos(long long) SetCursorPos32
-0474 stub SetDebugErrorLevel
-0475 stdcall SetDeskWallPaper(ptr) SetDeskWallPaper32
-0476 stdcall SetDlgItemInt(long long long long) SetDlgItemInt32
-0477 stdcall SetDlgItemTextA(long long ptr) SetDlgItemText32A
-0478 stdcall SetDlgItemTextW(long long ptr) SetDlgItemText32W
-0479 stdcall SetDoubleClickTime(long) SetDoubleClickTime32
-0480 stdcall SetFocus(long) SetFocus32
-0481 return SetForegroundWindow 4 0
-0482 stdcall SetInternalWindowPos(long long ptr ptr) SetInternalWindowPos32
-0483 stdcall SetKeyboardState(ptr) SetKeyboardState
-0484 stdcall SetLastErrorEx(long long) SetLastErrorEx
-0485 stub SetLogonNotifyWindow
-0486 stdcall SetMenu(long long) SetMenu32
-0487 stub SetMenuContextHelpId
-0488 stdcall SetMenuDefaultItem(long long long) SetMenuDefaultItem32
-0489 stdcall SetMenuItemBitmaps(long long long long long) SetMenuItemBitmaps32
-0490 stdcall SetMenuItemInfoA(long long long ptr) SetMenuItemInfo32A
-0491 stdcall SetMenuItemInfoW(long long long ptr) SetMenuItemInfo32W
-0492 stub SetMessageExtraInfo
-0493 stdcall SetMessageQueue(long) SetMessageQueue32
-0494 stdcall SetParent(long long) SetParent32
-0495 stub SetProcessWindowStation
-0496 stdcall SetPropA(long ptr long) SetProp32A
-0497 stdcall SetPropW(long ptr long) SetProp32W
-0498 stdcall SetRect(ptr long long long long) SetRect32
-0499 stdcall SetRectEmpty(ptr) SetRectEmpty32
-0500 stdcall SetScrollInfo(long long ptr long) SetScrollInfo32
-0501 stdcall SetScrollPos(long long long long) SetScrollPos32
-0502 stdcall SetScrollRange(long long long long long) SetScrollRange32
-0503 stub SetShellWindow
-0504 stdcall SetSysColors(long ptr ptr) SetSysColors32
-0505 stub SetSysColorsTemp
-0506 stub SetSystemCursor
-0507 stdcall SetSystemMenu(long long) SetSystemMenu32
-0508 stdcall SetSystemTimer(long long long ptr) SetSystemTimer32
-0509 stub SetThreadDesktop
-0510 stdcall SetTimer(long long long ptr) SetTimer32
-0511 stub SetUserObjectInformationA
-0512 stub SetUserObjectInformationW
-0513 stub SetUserObjectSecurity
-0514 stub SetWindowContextHelpId
-0515 stub SetWindowFullScreenState
-0516 stdcall SetWindowLongA(long long long) SetWindowLong32A
-0517 stdcall SetWindowLongW(long long long) SetWindowLong32W
-0518 stdcall SetWindowPlacement(long ptr) SetWindowPlacement32
-0519 stdcall SetWindowPos(long long long long long long long) SetWindowPos32
-0520 stub SetWindowStationUser
-0521 stdcall SetWindowTextA(long ptr) SetWindowText32A
-0522 stdcall SetWindowTextW(long ptr) SetWindowText32W
-0523 stdcall SetWindowWord(long long long) SetWindowWord32
-0524 stdcall SetWindowsHookA(long ptr) SetWindowsHook32A
-0525 stdcall SetWindowsHookExA(long long long long) SetWindowsHookEx32A
-0526 stdcall SetWindowsHookExW(long long long long) SetWindowsHookEx32W
-0527 stdcall SetWindowsHookW(long long long long) SetWindowsHook32W
-0528 stdcall ShowCaret(long) ShowCaret32
-0529 stdcall ShowCursor(long) ShowCursor32
-0530 stdcall ShowOwnedPopups(long long) ShowOwnedPopups32
-0531 stdcall ShowScrollBar(long long long) ShowScrollBar32
-0532 stub ShowStartGlass
-0533 stdcall ShowWindow(long long) ShowWindow32
-0534 stub ShowWindowAsync
-0535 stdcall SubtractRect(ptr ptr ptr) SubtractRect32
-0536 stdcall SwapMouseButton(long) SwapMouseButton32
-0537 stub SwitchDesktop
-0538 stdcall SwitchToThisWindow(long long) SwitchToThisWindow32
-0539 stdcall SystemParametersInfoA(long long ptr long) SystemParametersInfo32A
-0540 stdcall SystemParametersInfoW(long long ptr long) SystemParametersInfo32W
-0541 stdcall TabbedTextOutA(long long long ptr long long ptr long) TabbedTextOut32A
-0542 stdcall TabbedTextOutW(long long long ptr long long ptr long) TabbedTextOut32W
-0543 stub TileChildWindows
-0544 stub TileWindows
-0545 stdcall ToAscii(long long ptr ptr long) ToAscii32
-0546 stub ToAsciiEx
-0547 stub ToUnicode
-0548 stdcall TrackPopupMenu(long long long long long long ptr) TrackPopupMenu32
-0549 stdcall TrackPopupMenuEx(long long long long long ptr) TrackPopupMenuEx
-0550 stdcall TranslateAccelerator(long long ptr) TranslateAccelerator32
-0551 stdcall TranslateAcceleratorA(long long ptr) TranslateAccelerator32
-0552 stdcall TranslateAcceleratorW(long long ptr) TranslateAccelerator32
-0553 stub TranslateCharsetInfo
-0554 stdcall TranslateMDISysAccel(long ptr) TranslateMDISysAccel32
-0555 stdcall TranslateMessage(ptr) TranslateMessage32
-0556 stdcall UnhookWindowsHook(long ptr) UnhookWindowsHook32
-0557 stdcall UnhookWindowsHookEx(long) UnhookWindowsHookEx32
-0558 stdcall UnionRect(ptr ptr ptr) UnionRect32
-0559 stub UnloadKeyboardLayout
-0560 stub UnlockWindowStation
-0561 stub UnpackDDElParam
-0562 stdcall UnregisterClassA(ptr long) UnregisterClass32A
-0563 stdcall UnregisterClassW(ptr long) UnregisterClass32W
-0564 stub UnregisterHotKey
-0565 stub UpdatePerUserSystemParameters
-0566 stdcall UpdateWindow(long) UpdateWindow32
-0567 stub UserClientDllInitialize
-0568 stub UserRealizePalette
-0569 stub UserRegisterWowHandlers
-0570 stdcall ValidateRect(long ptr) ValidateRect32
-0571 stdcall ValidateRgn(long long) ValidateRgn32
-0572 stdcall VkKeyScanA(long) VkKeyScan32A
-0573 stub VkKeyScanExA
-0574 stub VkKeyScanExW
-0575 stdcall VkKeyScanW(long) VkKeyScan32W
-0576 stub WaitForInputIdle
-0577 stdcall WaitMessage() WaitMessage
-0578 stdcall WinHelpA(long ptr long long) WinHelp32A
-0579 stdcall WinHelpW(long ptr long long) WinHelp32W
-0580 stdcall WindowFromDC(long) WindowFromDC32
-0581 stdcall WindowFromPoint(long long) WindowFromPoint32
-0582 stub keybd_event
-0583 stub mouse_event
-0584 stdcall wsprintfA() WIN32_wsprintf32A
-0585 stdcall wsprintfW() WIN32_wsprintf32W
-0586 stdcall wvsprintfA(ptr ptr ptr) wvsprintf32A
-0587 stdcall wvsprintfW(ptr ptr ptr) wvsprintf32W
+  1 stub ActivateKeyboardLayout
+  2 stdcall AdjustWindowRect(ptr long long) AdjustWindowRect32
+  3 stdcall AdjustWindowRectEx(ptr long long long) AdjustWindowRectEx32
+  4 stdcall AnyPopup() AnyPopup32
+  5 stdcall AppendMenuA(long long long ptr) AppendMenu32A
+  6 stdcall AppendMenuW(long long long ptr) AppendMenu32W
+  7 stdcall ArrangeIconicWindows(long) ArrangeIconicWindows32
+  8 stub AttachThreadInput
+  9 stdcall BeginDeferWindowPos(long) BeginDeferWindowPos32
+ 10 stdcall BeginPaint(long ptr) BeginPaint32
+ 11 stdcall BringWindowToTop(long) BringWindowToTop32
+ 12 stub BroadcastSystemMessage
+ 13 stub CalcChildScroll
+ 14 stub CallMsgFilter
+ 15 stdcall CallMsgFilterA(ptr long) CallMsgFilter32A
+ 16 stdcall CallMsgFilterW(ptr long) CallMsgFilter32W
+ 17 stdcall CallNextHookEx(long long long long) CallNextHookEx32
+ 18 stdcall CallWindowProcA(ptr long long long long) CallWindowProc32A
+ 19 stdcall CallWindowProcW(ptr long long long long) CallWindowProc32W
+ 20 stub CascadeChildWindows
+ 21 stub CascadeWindows
+ 22 stdcall ChangeClipboardChain(long long) ChangeClipboardChain32
+ 23 stdcall ChangeMenuA(long long ptr long long) ChangeMenu32A
+ 24 stdcall ChangeMenuW(long long ptr long long) ChangeMenu32W
+ 25 stdcall CharLowerA(ptr) CharLower32A
+ 26 stdcall CharLowerBuffA(ptr long) CharLowerBuff32A
+ 27 stdcall CharLowerBuffW(ptr long) CharLowerBuff32W
+ 28 stdcall CharLowerW(ptr) CharLower32W
+ 29 stdcall CharNextA(ptr) CharNext32A
+ 30 stdcall CharNextExA(long ptr long) CharNextEx32A
+ 31 stdcall CharNextExW(long ptr long) CharNextEx32W
+ 32 stdcall CharNextW(ptr) CharNext32W
+ 33 stdcall CharPrevA(ptr ptr) CharPrev32A
+ 34 stdcall CharPrevExA(long ptr ptr long) CharPrevEx32A
+ 35 stdcall CharPrevExW(long ptr ptr long) CharPrevEx32W
+ 36 stdcall CharPrevW(ptr ptr) CharPrev32W
+ 37 stdcall CharToOemA(ptr ptr) CharToOem32A
+ 38 stdcall CharToOemBuffA(ptr ptr long) CharToOemBuff32A
+ 39 stdcall CharToOemBuffW(ptr ptr long) CharToOemBuff32W
+ 40 stdcall CharToOemW(ptr ptr) CharToOem32W
+ 41 stdcall CharUpperA(ptr) CharUpper32A
+ 42 stdcall CharUpperBuffA(ptr long) CharUpperBuff32A
+ 43 stdcall CharUpperBuffW(ptr long) CharUpperBuff32W
+ 44 stdcall CharUpperW(ptr) CharUpper32W
+ 45 stdcall CheckDlgButton(long long long) CheckDlgButton32
+ 46 stdcall CheckMenuItem(long long long) CheckMenuItem32
+ 47 stub CheckMenuRadioItem
+ 48 stdcall CheckRadioButton(long long long long) CheckRadioButton32
+ 49 stdcall ChildWindowFromPoint(long long long) ChildWindowFromPoint32
+ 50 stub ChildWindowFromPointEx
+ 51 stub ClientThreadConnect
+ 52 stdcall ClientToScreen(long ptr) ClientToScreen32
+ 53 stdcall ClipCursor(ptr) ClipCursor32
+ 54 stdcall CloseClipboard() CloseClipboard32
+ 55 stub CloseDesktop
+ 56 stdcall CloseWindow(long) CloseWindow32
+ 57 stub CloseWindowStation
+ 58 stub CopyAcceleratorTableA
+ 59 stub CopyAcceleratorTableW
+ 60 stdcall CopyIcon(long) CopyIcon32
+ 61 stdcall CopyImage(long long long long long) CopyImage32
+ 62 stdcall CopyRect(ptr ptr) CopyRect32
+ 63 stdcall CountClipboardFormats() CountClipboardFormats32
+ 64 stub CreateAcceleratorTableA
+ 65 stub CreateAcceleratorTableW
+ 66 stdcall CreateCaret(long long long long) CreateCaret32
+ 67 stdcall CreateCursor(long long long long long ptr ptr) CreateCursor32
+ 68 stub CreateDesktopA
+ 69 stub CreateDesktopW
+ 70 stdcall CreateDialogIndirectParamA(long ptr long ptr long) CreateDialogIndirectParam32A
+ 71 stub CreateDialogIndirectParamAorW
+ 72 stdcall CreateDialogIndirectParamW(long ptr long ptr long) CreateDialogIndirectParam32W
+ 73 stdcall CreateDialogParamA(long ptr long ptr long) CreateDialogParam32A
+ 74 stdcall CreateDialogParamW(long ptr long ptr long) CreateDialogParam32W
+ 75 stdcall CreateIcon(long long long long long ptr ptr) CreateIcon32
+ 76 stub CreateIconFromResource
+ 77 stdcall CreateIconFromResourceEx(ptr long long long long long long) CreateIconFromResourceEx32
+ 78 stub CreateIconIndirect
+ 79 stub CreateMDIWindowA
+ 80 stub CreateMDIWindowW
+ 81 stdcall CreateMenu() CreateMenu32
+ 82 stdcall CreatePopupMenu() CreatePopupMenu32
+ 83 stdcall CreateWindowExA(long ptr ptr long long long long long 
+                            long long long ptr) CreateWindowEx32A
+ 84 stdcall CreateWindowExW(long ptr ptr long long long long long 
+                            long long long ptr) CreateWindowEx32W
+ 85 stub CreateWindowStationA
+ 86 stub CreateWindowStationW
+ 87 stub DdeAbandonTransaction
+ 88 stub DdeAccessData
+ 89 stub DdeAddData
+ 90 return DdeClientTransaction 32 0
+ 91 stub DdeCmpStringHandles
+ 92 return DdeConnect 16 0
+ 93 stub DdeConnectList
+ 94 stub DdeCreateDataHandle
+ 95 return DdeCreateStringHandleA 12 0
+ 96 return DdeCreateStringHandleW 12 0
+ 97 return DdeDisconnect 4 0
+ 98 stub DdeDisconnectList
+ 99 stub DdeEnableCallback
+100 return DdeFreeDataHandle 4 1
+101 return DdeFreeStringHandle 8 0
+102 stub DdeGetData
+103 return DdeGetLastError 4 0
+104 stub DdeGetQualityOfService
+105 stub DdeImpersonateClient
+106 return DdeInitializeA 16 0
+107 return DdeInitializeW 16 0
+108 stub DdeKeepStringHandle
+109 return DdeNameService 16 0
+110 stub DdePostAdvise
+111 stub DdeQueryConvInfo
+112 stub DdeQueryNextServer
+113 stub DdeQueryStringA
+114 stub DdeQueryStringW
+115 stub DdeReconnect
+116 stub DdeSetQualityOfService
+117 stub DdeSetUserHandle
+118 stub DdeUnaccessData
+119 return DdeUninitialize 4 0
+120 stdcall DefDlgProcA(long long long long) DefDlgProc32A
+121 stdcall DefDlgProcW(long long long long) DefDlgProc32W
+122 stdcall DefFrameProcA(long long long long long) DefFrameProc32A
+123 stdcall DefFrameProcW(long long long long long) DefFrameProc32W
+124 stdcall DefMDIChildProcA(long long long long) DefMDIChildProc32A
+125 stdcall DefMDIChildProcW(long long long long) DefMDIChildProc32W
+126 stdcall DefWindowProcA(long long long long) DefWindowProc32A
+127 stdcall DefWindowProcW(long long long long) DefWindowProc32W
+128 stdcall DeferWindowPos(long long long long long long long long) DeferWindowPos32
+129 stdcall DeleteMenu(long long long) DeleteMenu32
+130 stub DestroyAcceleratorTable
+131 stdcall DestroyCaret() DestroyCaret32
+132 stdcall DestroyCursor(long) DestroyCursor32
+133 stdcall DestroyIcon(long) DestroyIcon32
+134 stdcall DestroyMenu(long) DestroyMenu32
+135 stdcall DestroyWindow(long) DestroyWindow32
+136 stdcall DialogBoxIndirectParamA(long ptr long ptr long) DialogBoxIndirectParam32A
+137 stdcall DialogBoxIndirectParamAorW(long ptr long ptr long) DialogBoxIndirectParam32A
+138 stdcall DialogBoxIndirectParamW(long ptr long ptr long) DialogBoxIndirectParam32W
+139 stdcall DialogBoxParamA(long ptr long ptr long) DialogBoxParam32A
+140 stdcall DialogBoxParamW(long ptr long ptr long) DialogBoxParam32W
+141 stdcall DispatchMessageA(ptr) DispatchMessage32A
+142 stdcall DispatchMessageW(ptr) DispatchMessage32W
+143 stdcall DlgDirListA(long ptr long long long) DlgDirList32A
+144 stdcall DlgDirListComboBoxA(long ptr long long long) DlgDirListComboBox32A
+145 stdcall DlgDirListComboBoxW(long ptr long long long) DlgDirListComboBox32W
+146 stdcall DlgDirListW(long ptr long long long) DlgDirList32W
+147 stdcall DlgDirSelectComboBoxExA(long ptr long long) DlgDirSelectComboBoxEx32A
+148 stdcall DlgDirSelectComboBoxExW(long ptr long long) DlgDirSelectComboBoxEx32W
+149 stdcall DlgDirSelectExA(long ptr long long) DlgDirSelectEx32A
+150 stdcall DlgDirSelectExW(long ptr long long) DlgDirSelectEx32W
+151 stdcall DragDetect(long long long) DragDetect32
+152 stub DragObject
+153 stdcall DrawAnimatedRects(long long ptr ptr) DrawAnimatedRects32
+154 stub DrawCaption
+155 stdcall DrawEdge(long ptr long long) DrawEdge32
+156 stdcall DrawFocusRect(long ptr) DrawFocusRect32
+157 stub DrawFrame
+158 stdcall DrawFrameControl(long ptr long long) DrawFrameControl32
+159 stdcall DrawIcon(long long long long) DrawIcon32
+160 stub DrawIconEx
+161 stdcall DrawMenuBar(long) DrawMenuBar32
+162 stdcall DrawStateA(long long ptr long long long long long long long) DrawState32A
+163 stub DrawStateW
+164 stdcall DrawTextA(long ptr long ptr long) DrawText32A
+165 stdcall DrawTextExA(long ptr long ptr long ptr) DrawTextEx32A
+166 stdcall DrawTextExW(long ptr long ptr long ptr) DrawTextEx32W
+167 stdcall DrawTextW(long ptr long ptr long) DrawText32W
+168 stub EditWndProc
+169 stdcall EmptyClipboard() EmptyClipboard32
+170 stdcall EnableMenuItem(long long long) EnableMenuItem32
+171 stdcall EnableScrollBar(long long long) EnableScrollBar32
+172 stdcall EnableWindow(long long) EnableWindow32
+173 stdcall EndDeferWindowPos(long) EndDeferWindowPos32
+174 stdcall EndDialog(long long) EndDialog32
+175 stdcall EndMenu() EndMenu
+176 stdcall EndPaint(long ptr) EndPaint32
+177 stub EndTask
+178 stdcall EnumChildWindows(long ptr long) EnumChildWindows32
+179 stdcall EnumClipboardFormats(long) EnumClipboardFormats32
+180 stub EnumDesktopsA
+181 stub EnumDesktopsW
+182 stub EnumDisplayDeviceModesA
+183 stub EnumDisplayDeviceModesW
+184 stub EnumDisplayDevicesA
+185 stub EnumDisplayDevicesW
+186 stdcall EnumPropsA(long ptr) EnumProps32A
+187 stdcall EnumPropsExA(long ptr long) EnumPropsEx32A
+188 stdcall EnumPropsExW(long ptr long) EnumPropsEx32W
+189 stdcall EnumPropsW(long ptr) EnumProps32W
+190 stdcall EnumThreadWindows(long ptr long) EnumThreadWindows
+191 stub EnumWindowStationsA
+192 stub EnumWindowStationsW
+193 stdcall EnumWindows(ptr long) EnumWindows32
+194 stdcall EqualRect(ptr ptr) EqualRect32
+195 stdcall ExcludeUpdateRgn(long long) ExcludeUpdateRgn32
+196 stdcall ExitWindowsEx(long long) ExitWindowsEx
+197 stdcall FillRect(long ptr long) FillRect32
+198 stdcall FindWindowA(ptr ptr) FindWindow32A
+199 stdcall FindWindowExA(long long ptr ptr) FindWindowEx32A
+200 stdcall FindWindowExW(long long ptr ptr) FindWindowEx32W
+201 stdcall FindWindowW(ptr ptr) FindWindow32W
+202 stdcall FlashWindow(long long) FlashWindow32
+203 stdcall FrameRect(long ptr long) FrameRect32
+204 stub FreeDDElParam
+205 stdcall GetActiveWindow() GetActiveWindow32
+206 stdcall GetAppCompatFlags(long) GetAppCompatFlags32
+207 stdcall GetAsyncKeyState(long) GetAsyncKeyState32
+208 stdcall GetCapture() GetCapture32
+209 stdcall GetCaretBlinkTime() GetCaretBlinkTime32
+210 stdcall GetCaretPos(ptr) GetCaretPos32
+211 stdcall GetClassInfoA(long ptr ptr) GetClassInfo32A
+212 stdcall GetClassInfoExA(long ptr ptr) GetClassInfoEx32A
+213 stdcall GetClassInfoExW(long ptr ptr) GetClassInfoEx32W
+214 stdcall GetClassInfoW(long ptr ptr) GetClassInfo32W
+215 stdcall GetClassLongA(long long) GetClassLong32A
+216 stdcall GetClassLongW(long long) GetClassLong32W
+217 stdcall GetClassNameA(long ptr long) GetClassName32A
+218 stdcall GetClassNameW(long ptr long) GetClassName32W
+219 stdcall GetClassWord(long long) GetClassWord32
+220 stdcall GetClientRect(long long) GetClientRect32
+221 stdcall GetClipCursor(ptr) GetClipCursor32
+222 stdcall GetClipboardData(long) GetClipboardData32
+223 stdcall GetClipboardFormatNameA(long ptr long) GetClipboardFormatName32A
+224 stdcall GetClipboardFormatNameW(long ptr long) GetClipboardFormatName32W
+225 stdcall GetClipboardOwner() GetClipboardOwner32
+226 stdcall GetClipboardViewer(long) GetClipboardViewer32
+227 stdcall GetCursor() GetCursor32
+228 stub GetCursorInfo
+229 stdcall GetCursorPos(ptr) GetCursorPos32
+230 stdcall GetDC(long) GetDC32
+231 stdcall GetDCEx(long long long) GetDCEx32
+232 stdcall GetDesktopWindow() GetDesktopWindow32
+233 stdcall GetDialogBaseUnits() GetDialogBaseUnits
+234 stdcall GetDlgCtrlID(long) GetDlgCtrlID32
+235 stdcall GetDlgItem(long long) GetDlgItem32
+236 stdcall GetDlgItemInt(long long ptr long) GetDlgItemInt32
+237 stdcall GetDlgItemTextA(long long ptr long) GetDlgItemText32A
+238 stdcall GetDlgItemTextW(long long ptr long) GetDlgItemText32W
+239 stdcall GetDoubleClickTime() GetDoubleClickTime32
+240 stdcall GetFocus() GetFocus32
+241 return GetForegroundWindow 0 0		#FIXME
+242 stub GetIconInfo
+243 stub GetInputDesktop
+244 stdcall GetInputState() GetInputState32
+245 stdcall GetInternalWindowPos(long ptr ptr) GetInternalWindowPos32
+246 stdcall GetKBCodePage() GetKBCodePage32
+247 stdcall GetKeyNameTextA(long ptr long) GetKeyNameText32A
+248 stdcall GetKeyNameTextW(long ptr long) GetKeyNameText32W
+249 stdcall GetKeyState(long) GetKeyState32
+250 stdcall GetKeyboardLayout(long) GetKeyboardLayout
+251 stdcall GetKeyboardLayoutList(long ptr) GetKeyboardLayoutList
+252 stub GetKeyboardLayoutNameA
+253 stub GetKeyboardLayoutNameW
+254 stdcall GetKeyboardState(ptr) GetKeyboardState
+255 stdcall GetKeyboardType(long) GetKeyboardType32
+256 stdcall GetLastActivePopup(long) GetLastActivePopup32
+257 stdcall GetMenu(long) GetMenu32
+258 stdcall GetMenuCheckMarkDimensions() GetMenuCheckMarkDimensions
+259 stub GetMenuContextHelpId
+260 stub GetMenuDefaultItem
+261 stub GetMenuIndex
+262 stdcall GetMenuItemCount(long) GetMenuItemCount32
+263 stdcall GetMenuItemID(long long) GetMenuItemID32
+264 stdcall GetMenuItemInfoA(long long long ptr) GetMenuItemInfo32A
+265 stdcall GetMenuItemInfoW(long long long ptr) GetMenuItemInfo32W
+266 stub GetMenuItemRect
+267 stdcall GetMenuState(long long long) GetMenuState32
+268 stdcall GetMenuStringA(long long ptr long long) GetMenuString32A
+269 stdcall GetMenuStringW(long long ptr long long) GetMenuString32W
+270 stdcall GetMessageA(ptr long long long) GetMessage32A
+271 stdcall GetMessageExtraInfo() GetMessageExtraInfo
+272 stdcall GetMessagePos() GetMessagePos
+273 stdcall GetMessageTime() GetMessageTime
+274 stdcall GetMessageW(ptr long long long) GetMessage32W
+275 stdcall GetNextDlgGroupItem(long long long) GetNextDlgGroupItem32
+276 stdcall GetNextDlgTabItem(long long long) GetNextDlgTabItem32
+277 stdcall GetOpenClipboardWindow() GetOpenClipboardWindow32
+278 stdcall GetParent(long) GetParent32
+279 stub GetPriorityClipboardFormat
+280 stub GetProcessWindowStation
+281 stdcall GetPropA(long ptr) GetProp32A
+282 stdcall GetPropW(long ptr) GetProp32W
+283 stub GetQueueStatus
+284 stdcall GetScrollInfo(long long ptr) GetScrollInfo32
+285 stdcall GetScrollPos(long long) GetScrollPos32
+286 stdcall GetScrollRange(long long ptr ptr) GetScrollRange32
+287 return GetShellWindow 0 0
+288 stdcall GetSubMenu(long long) GetSubMenu32
+289 stdcall GetSysColor(long) GetSysColor32
+290 stdcall GetSysColorBrush(long) GetSysColorBrush32
+291 stdcall GetSystemMenu(long long) GetSystemMenu32
+292 stdcall GetSystemMetrics(long) GetSystemMetrics32
+293 stdcall GetTabbedTextExtentA(long ptr long long ptr) GetTabbedTextExtent32A
+294 stdcall GetTabbedTextExtentW(long ptr long long ptr) GetTabbedTextExtent32W
+295 stub GetThreadDesktop
+296 stdcall GetTopWindow(long) GetTopWindow32
+297 stdcall GetUpdateRect(long ptr long) GetUpdateRect32
+298 stdcall GetUpdateRgn(long long long) GetUpdateRgn32
+299 stub GetUserObjectInformationA
+300 stub GetUserObjectInformationW
+301 stub GetUserObjectSecurity
+302 stdcall GetWindow(long long) GetWindow32
+303 stub GetWindowContextHelpId
+304 stdcall GetWindowDC(long) GetWindowDC32
+305 stdcall GetWindowLongA(long long) GetWindowLong32A
+306 stdcall GetWindowLongW(long long) GetWindowLong32W
+307 stdcall GetWindowPlacement(long ptr) GetWindowPlacement32
+308 stdcall GetWindowRect(long ptr) GetWindowRect32
+309 stdcall GetWindowTextA(long ptr long) GetWindowText32A
+310 stdcall GetWindowTextLengthA(long) GetWindowTextLength32A
+311 stdcall GetWindowTextLengthW(long) GetWindowTextLength32W
+312 stdcall GetWindowTextW(long ptr long) GetWindowText32W
+313 stdcall GetWindowThreadProcessId(long ptr) GetWindowThreadProcessId
+314 stdcall GetWindowWord(long long) GetWindowWord32
+315 stdcall GrayStringA(long long ptr long long long long long long) GrayString32A
+316 stdcall GrayStringW(long long ptr long long long long long long) GrayString32W
+317 stdcall HideCaret(long) HideCaret32
+318 stdcall HiliteMenuItem(long long long long) HiliteMenuItem32
+319 stub ImpersonateDdeClientWindow
+320 stdcall InSendMessage() InSendMessage32
+321 stdcall InflateRect(ptr long long) InflateRect32
+322 stdcall InsertMenuA(long long long long ptr) InsertMenu32A
+323 stdcall InsertMenuItemA(long long long ptr) InsertMenuItem32A
+324 stdcall InsertMenuItemW(long long long ptr) InsertMenuItem32W
+325 stdcall InsertMenuW(long long long long ptr) InsertMenu32W
+326 stub InternalGetWindowText
+327 stdcall IntersectRect(ptr ptr ptr) IntersectRect32
+328 stdcall InvalidateRect(long ptr long) InvalidateRect32
+329 stdcall InvalidateRgn(long long long) InvalidateRgn32
+330 stdcall InvertRect(long ptr) InvertRect32
+331 stdcall IsCharAlphaA(long) IsCharAlpha32A
+332 stdcall IsCharAlphaNumericA(long) IsCharAlphaNumeric32A
+333 stdcall IsCharAlphaNumericW(long) IsCharAlphaNumeric32W
+334 stdcall IsCharAlphaW(long) IsCharAlpha32W
+335 stdcall IsCharLowerA(long) IsCharLower32A
+336 stdcall IsCharLowerW(long) IsCharLower32W
+337 stdcall IsCharUpperA(long) IsCharUpper32A
+338 stdcall IsCharUpperW(long) IsCharUpper32W
+339 stdcall IsChild(long long) IsChild32
+340 stdcall IsClipboardFormatAvailable(long) IsClipboardFormatAvailable32
+341 stub IsDialogMessage
+342 stdcall IsDialogMessageA(long ptr) IsDialogMessage32A
+343 stdcall IsDialogMessageW(long ptr) IsDialogMessage32W
+344 stdcall IsDlgButtonChecked(long long) IsDlgButtonChecked32
+345 stdcall IsIconic(long) IsIconic32
+346 stdcall IsMenu(long) IsMenu32
+347 stdcall IsRectEmpty(ptr) IsRectEmpty32
+348 stdcall IsWindow(long) IsWindow32
+349 stdcall IsWindowEnabled(long) IsWindowEnabled32
+350 stdcall IsWindowUnicode(long) IsWindowUnicode
+351 stdcall IsWindowVisible(long) IsWindowVisible32
+352 stdcall IsZoomed(long) IsZoomed32
+353 stdcall KillSystemTimer(long long) KillSystemTimer32
+354 stdcall KillTimer(long long) KillTimer32
+355 stdcall LoadAcceleratorsA(long ptr) LoadAccelerators32A
+356 stdcall LoadAcceleratorsW(long ptr) LoadAccelerators32W
+357 stdcall LoadBitmapA(long ptr) LoadBitmap32A
+358 stdcall LoadBitmapW(long ptr) LoadBitmap32W
+359 stdcall LoadCursorA(long ptr) LoadCursor32A
+360 stub LoadCursorFromFileA
+361 stub LoadCursorFromFileW
+362 stdcall LoadCursorW(long ptr) LoadCursor32W
+363 stdcall LoadIconA(long ptr) LoadIcon32A
+364 stdcall LoadIconW(long ptr) LoadIcon32W
+365 stdcall LoadImageA(long ptr long long long long) LoadImage32A
+366 stdcall LoadImageW(long ptr long long long long) LoadImage32W
+367 stub LoadKeyboardLayoutA
+368 stub LoadKeyboardLayoutW
+369 stub LoadLocalFonts
+370 stdcall LoadMenuA(long ptr) LoadMenu32A
+371 stdcall LoadMenuIndirectA(ptr) LoadMenuIndirect32A
+372 stdcall LoadMenuIndirectW(ptr) LoadMenuIndirect32W
+373 stdcall LoadMenuW(long ptr) LoadMenu32W
+374 stub LoadRemoteFonts
+375 stdcall LoadStringA(long long ptr long) LoadString32A
+376 stdcall LoadStringW(long long ptr long) LoadString32W
+377 stub LockWindowStation
+378 stdcall LockWindowUpdate(long) LockWindowUpdate32
+378 stdcall LookupIconIdFromDirectory(ptr long) LookupIconIdFromDirectory
+379 stdcall LookupIconIdFromDirectoryEx(ptr long long long long) LookupIconIdFromDirectoryEx32
+381 stub MBToWCSEx
+382 stdcall MapDialogRect(long ptr) MapDialogRect32
+383 stdcall MapVirtualKeyA(long long) MapVirtualKey32A
+384 stub MapVirtualKeyExA
+385 stdcall MapVirtualKeyW(long long) MapVirtualKey32A
+386 stdcall MapWindowPoints(long long ptr long) MapWindowPoints32
+387 stub MenuItemFromPoint
+388 stub MenuWindowProcA
+389 stub MenuWindowProcW
+390 stdcall MessageBeep(long) MessageBeep32
+391 stdcall MessageBoxA(long ptr ptr long) MessageBox32A
+392 stdcall MessageBoxExA(long ptr ptr long long) MessageBoxEx32A
+393 stdcall MessageBoxExW(long ptr ptr long long) MessageBoxEx32W
+394 stub MessageBoxIndirectA
+395 stub MessageBoxIndirectW
+396 stdcall MessageBoxW(long ptr ptr long) MessageBox32W
+397 stdcall ModifyMenuA(long long long long ptr) ModifyMenu32A
+398 stdcall ModifyMenuW(long long long long ptr) ModifyMenu32W
+399 stdcall MoveWindow(long long long long long long) MoveWindow32
+400 stdcall MsgWaitForMultipleObjects(long ptr long long long) MsgWaitForMultipleObjects
+401 stdcall OemKeyScan(long) OemKeyScan
+402 stdcall OemToCharA(ptr ptr) OemToChar32A
+403 stdcall OemToCharBuffA(ptr ptr long) OemToCharBuff32A
+404 stdcall OemToCharBuffW(ptr ptr long) OemToCharBuff32W
+405 stdcall OemToCharW(ptr ptr) OemToChar32W
+406 stdcall OffsetRect(ptr long long) OffsetRect32
+407 stdcall OpenClipboard(long) OpenClipboard32
+408 stub OpenDesktopA
+409 stub OpenDesktopW
+410 stdcall OpenIcon(long) OpenIcon32
+411 stub OpenInputDesktop
+412 stub OpenWindowStationA
+413 stub OpenWindowStationW
+414 stub PackDDElParam
+415 stub PaintDesktop
+416 stdcall PeekMessageA(ptr long long long long) PeekMessage32A
+417 stdcall PeekMessageW(ptr long long long long) PeekMessage32W
+418 stub PlaySoundEvent
+419 stdcall PostMessageA(long long long long) PostMessage32A
+420 stdcall PostMessageW(long long long long) PostMessage32W
+421 stdcall PostQuitMessage(long) PostQuitMessage32
+422 stub PostThreadMessageA
+423 stub PostThreadMessageW
+424 stdcall PtInRect(ptr long long) PtInRect32
+425 stub QuerySendMessage
+426 stdcall RedrawWindow(long ptr long long) RedrawWindow32
+427 stdcall RegisterClassA(ptr) RegisterClass32A
+428 stdcall RegisterClassExA(ptr) RegisterClassEx32A
+429 stdcall RegisterClassExW(ptr) RegisterClassEx32W
+430 stdcall RegisterClassW(ptr) RegisterClass32W
+431 stdcall RegisterClipboardFormatA(ptr) RegisterClipboardFormat32A
+432 stdcall RegisterClipboardFormatW(ptr) RegisterClipboardFormat32W
+433 stub RegisterHotKey
+434 stub RegisterLogonProcess
+435 stub RegisterSystemThread
+436 stub RegisterTasklist
+437 stdcall RegisterWindowMessageA(ptr) RegisterWindowMessage32A
+438 stdcall RegisterWindowMessageW(ptr) RegisterWindowMessage32W
+439 stdcall ReleaseCapture() ReleaseCapture
+440 stdcall ReleaseDC(long long) ReleaseDC32
+441 stdcall RemoveMenu(long long long) RemoveMenu32
+442 stdcall RemovePropA(long ptr) RemoveProp32A
+443 stdcall RemovePropW(long ptr) RemoveProp32W
+444 stub ReplyMessage
+445 stub ResetDisplay
+446 stub ReuseDDElParam
+447 stdcall ScreenToClient(long ptr) ScreenToClient32
+448 stdcall ScrollChildren(long long long long) ScrollChildren32
+449 stdcall ScrollDC(long long long ptr ptr long ptr) ScrollDC32
+450 stdcall ScrollWindow(long long long ptr ptr) ScrollWindow32
+451 stdcall ScrollWindowEx(long long long ptr ptr long ptr long) ScrollWindowEx32
+452 stdcall SendDlgItemMessageA(long long long long long) SendDlgItemMessage32A
+453 stdcall SendDlgItemMessageW(long long long long long) SendDlgItemMessage32W
+454 stdcall SendMessageA(long long long long) SendMessage32A
+455 stub SendMessageCallbackA
+456 stub SendMessageCallbackW
+457 stub SendMessageTimeoutA
+458 stub SendMessageTimeoutW
+459 stdcall SendMessageW(long long long long) SendMessage32W
+460 stub SendNotifyMessageA
+461 stub SendNotifyMessageW
+462 stub ServerSetFunctionPointers
+463 stdcall SetActiveWindow(long) SetActiveWindow32
+464 stdcall SetCapture(long) SetCapture32
+465 stdcall SetCaretBlinkTime(long) SetCaretBlinkTime32
+466 stdcall SetCaretPos(long long) SetCaretPos32
+467 stdcall SetClassLongA(long long long) SetClassLong32A
+468 stdcall SetClassLongW(long long long) SetClassLong32W
+469 stdcall SetClassWord(long long long) SetClassWord32
+470 stdcall SetClipboardData(long long) SetClipboardData32
+471 stdcall SetClipboardViewer(long) SetClipboardViewer32
+472 stdcall SetCursor(long) SetCursor32
+473 stub SetCursorContents
+474 stdcall SetCursorPos(long long) SetCursorPos32
+475 stub SetDebugErrorLevel
+476 stdcall SetDeskWallPaper(ptr) SetDeskWallPaper32
+477 stdcall SetDlgItemInt(long long long long) SetDlgItemInt32
+478 stdcall SetDlgItemTextA(long long ptr) SetDlgItemText32A
+479 stdcall SetDlgItemTextW(long long ptr) SetDlgItemText32W
+480 stdcall SetDoubleClickTime(long) SetDoubleClickTime32
+481 stdcall SetFocus(long) SetFocus32
+482 return SetForegroundWindow 4 0
+483 stdcall SetInternalWindowPos(long long ptr ptr) SetInternalWindowPos32
+484 stdcall SetKeyboardState(ptr) SetKeyboardState
+485 stdcall SetLastErrorEx(long long) SetLastErrorEx
+486 stub SetLogonNotifyWindow
+487 stdcall SetMenu(long long) SetMenu32
+488 stub SetMenuContextHelpId
+489 stdcall SetMenuDefaultItem(long long long) SetMenuDefaultItem32
+490 stdcall SetMenuItemBitmaps(long long long long long) SetMenuItemBitmaps32
+491 stdcall SetMenuItemInfoA(long long long ptr) SetMenuItemInfo32A
+492 stdcall SetMenuItemInfoW(long long long ptr) SetMenuItemInfo32W
+493 stub SetMessageExtraInfo
+494 stdcall SetMessageQueue(long) SetMessageQueue32
+495 stdcall SetParent(long long) SetParent32
+496 stub SetProcessWindowStation
+497 stdcall SetPropA(long ptr long) SetProp32A
+498 stdcall SetPropW(long ptr long) SetProp32W
+499 stdcall SetRect(ptr long long long long) SetRect32
+500 stdcall SetRectEmpty(ptr) SetRectEmpty32
+501 stdcall SetScrollInfo(long long ptr long) SetScrollInfo32
+502 stdcall SetScrollPos(long long long long) SetScrollPos32
+503 stdcall SetScrollRange(long long long long long) SetScrollRange32
+504 stub SetShellWindow
+505 stdcall SetSysColors(long ptr ptr) SetSysColors32
+506 stub SetSysColorsTemp
+507 stub SetSystemCursor
+508 stdcall SetSystemMenu(long long) SetSystemMenu32
+509 stdcall SetSystemTimer(long long long ptr) SetSystemTimer32
+510 stub SetThreadDesktop
+511 stdcall SetTimer(long long long ptr) SetTimer32
+512 stub SetUserObjectInformationA
+513 stub SetUserObjectInformationW
+514 stub SetUserObjectSecurity
+515 stub SetWindowContextHelpId
+516 stub SetWindowFullScreenState
+517 stdcall SetWindowLongA(long long long) SetWindowLong32A
+518 stdcall SetWindowLongW(long long long) SetWindowLong32W
+519 stdcall SetWindowPlacement(long ptr) SetWindowPlacement32
+520 stdcall SetWindowPos(long long long long long long long) SetWindowPos32
+521 stub SetWindowStationUser
+522 stdcall SetWindowTextA(long ptr) SetWindowText32A
+523 stdcall SetWindowTextW(long ptr) SetWindowText32W
+524 stdcall SetWindowWord(long long long) SetWindowWord32
+525 stdcall SetWindowsHookA(long ptr) SetWindowsHook32A
+526 stdcall SetWindowsHookExA(long long long long) SetWindowsHookEx32A
+527 stdcall SetWindowsHookExW(long long long long) SetWindowsHookEx32W
+528 stdcall SetWindowsHookW(long long long long) SetWindowsHook32W
+529 stdcall ShowCaret(long) ShowCaret32
+530 stdcall ShowCursor(long) ShowCursor32
+531 stdcall ShowOwnedPopups(long long) ShowOwnedPopups32
+532 stdcall ShowScrollBar(long long long) ShowScrollBar32
+533 stub ShowStartGlass
+534 stdcall ShowWindow(long long) ShowWindow32
+535 stub ShowWindowAsync
+536 stdcall SubtractRect(ptr ptr ptr) SubtractRect32
+537 stdcall SwapMouseButton(long) SwapMouseButton32
+538 stub SwitchDesktop
+539 stdcall SwitchToThisWindow(long long) SwitchToThisWindow32
+540 stdcall SystemParametersInfoA(long long ptr long) SystemParametersInfo32A
+541 stdcall SystemParametersInfoW(long long ptr long) SystemParametersInfo32W
+542 stdcall TabbedTextOutA(long long long ptr long long ptr long) TabbedTextOut32A
+543 stdcall TabbedTextOutW(long long long ptr long long ptr long) TabbedTextOut32W
+544 stub TileChildWindows
+545 stub TileWindows
+546 stdcall ToAscii(long long ptr ptr long) ToAscii32
+547 stub ToAsciiEx
+548 stub ToUnicode
+549 stdcall TrackPopupMenu(long long long long long long ptr) TrackPopupMenu32
+550 stdcall TrackPopupMenuEx(long long long long long ptr) TrackPopupMenuEx
+551 stdcall TranslateAccelerator(long long ptr) TranslateAccelerator32
+552 stdcall TranslateAcceleratorA(long long ptr) TranslateAccelerator32
+553 stdcall TranslateAcceleratorW(long long ptr) TranslateAccelerator32
+554 stub TranslateCharsetInfo
+555 stdcall TranslateMDISysAccel(long ptr) TranslateMDISysAccel32
+556 stdcall TranslateMessage(ptr) TranslateMessage32
+557 stdcall UnhookWindowsHook(long ptr) UnhookWindowsHook32
+558 stdcall UnhookWindowsHookEx(long) UnhookWindowsHookEx32
+559 stdcall UnionRect(ptr ptr ptr) UnionRect32
+560 stub UnloadKeyboardLayout
+561 stub UnlockWindowStation
+562 stub UnpackDDElParam
+563 stdcall UnregisterClassA(ptr long) UnregisterClass32A
+564 stdcall UnregisterClassW(ptr long) UnregisterClass32W
+565 stub UnregisterHotKey
+566 stub UpdatePerUserSystemParameters
+567 stdcall UpdateWindow(long) UpdateWindow32
+568 stub UserClientDllInitialize
+569 stub UserRealizePalette
+570 stub UserRegisterWowHandlers
+571 stdcall ValidateRect(long ptr) ValidateRect32
+572 stdcall ValidateRgn(long long) ValidateRgn32
+573 stdcall VkKeyScanA(long) VkKeyScan32A
+574 stub VkKeyScanExA
+575 stub VkKeyScanExW
+576 stdcall VkKeyScanW(long) VkKeyScan32W
+577 stub WaitForInputIdle
+578 stdcall WaitMessage() WaitMessage
+579 stdcall WinHelpA(long ptr long long) WinHelp32A
+580 stdcall WinHelpW(long ptr long long) WinHelp32W
+581 stdcall WindowFromDC(long) WindowFromDC32
+582 stdcall WindowFromPoint(long long) WindowFromPoint32
+583 stub keybd_event
+584 stub mouse_event
+585 varargs wsprintfA() wsprintf32A
+586 varargs wsprintfW() wsprintf32W
+587 stdcall wvsprintfA(ptr ptr ptr) wvsprintf32A
+588 stdcall wvsprintfW(ptr ptr ptr) wvsprintf32W
 #late additions
-0588 stub ChangeDisplaySettingsA
-0589 stub ChangeDisplaySettingsW
-0590 stub EnumDesktopWindows
-0591 stub EnumDisplaySettingsA
-0592 stub EnumDisplaySettingsW
-0593 stub GetWindowRgn
-0594 stub MapVirtualKeyExW
-0595 stub RegisterServicesProcess
-0596 stub SetWindowRgn
-0597 stub ToUnicodeEx
-0598 stub DrawCaptionTempA
-0599 stub RegisterNetworkCapabilities
-0600 stub WNDPROC_CALLBACK
+589 stub ChangeDisplaySettingsA
+590 stub ChangeDisplaySettingsW
+591 stub EnumDesktopWindows
+592 stub EnumDisplaySettingsA
+593 stub EnumDisplaySettingsW
+594 stub GetWindowRgn
+595 stub MapVirtualKeyExW
+596 stub RegisterServicesProcess
+597 stub SetWindowRgn
+598 stub ToUnicodeEx
+599 stub DrawCaptionTempA
+600 stub RegisterNetworkCapabilities
+601 stub WNDPROC_CALLBACK
diff --git a/if1632/ver.spec b/if1632/ver.spec
index 11aa1e0..759f1ed 100644
--- a/if1632/ver.spec
+++ b/if1632/ver.spec
@@ -3,14 +3,14 @@
 
 #1 DLLENTRYPOINT
 
-2 pascal GetFileResourceSize(ptr segptr segptr ptr) GetFileResourceSize
-3 pascal GetFileResource(ptr segptr segptr long long ptr) GetFileResource
-6 pascal GetFileVersionInfoSize(ptr ptr) GetFileVersionInfoSize16
-7 pascal GetFileVersionInfo(ptr long long ptr) GetFileVersionInfo16
-8 pascal VerFindFile(word ptr ptr ptr ptr ptr ptr ptr) VerFindFile16
-9 pascal VerInstallFile(word ptr ptr ptr ptr ptr ptr ptr) VerInstallFile16
+2 pascal GetFileResourceSize(str segptr segptr ptr) GetFileResourceSize
+3 pascal GetFileResource(str segptr segptr long long ptr) GetFileResource
+6 pascal GetFileVersionInfoSize(str ptr) GetFileVersionInfoSize16
+7 pascal GetFileVersionInfo(str long long ptr) GetFileVersionInfo16
+8 pascal VerFindFile(word str str str ptr ptr ptr ptr) VerFindFile16
+9 pascal VerInstallFile(word str str str str str ptr ptr) VerInstallFile16
 10 pascal VerLanguageName(word ptr word) VerLanguageName16
-11 pascal VerQueryValue(segptr ptr ptr ptr) VerQueryValue16
+11 pascal VerQueryValue(segptr str ptr ptr) VerQueryValue16
 20 stub GETFILEVERSIONINFORAW
 #21 VERFTHK_THUNKDATA16
 #22 VERTHKSL_THUNKDATA16
diff --git a/if1632/winmm.spec b/if1632/winmm.spec
index 44a0691..3ee913f 100644
--- a/if1632/winmm.spec
+++ b/if1632/winmm.spec
@@ -1,6 +1,7 @@
 name winmm
 type win32
 
+0001 stub PlaySoundA
 0004 stub CloseDriver
 0005 stub DefDriverProc
 0006 stub DriverCallback
@@ -15,7 +16,6 @@
 0015 stub OpenDriver
 0016 stub OpenDriverA
 0017 stub PlaySound
-0001 stub PlaySoundA
 0018 stub PlaySoundW
 0019 stub SendDriverMessage
 0020 stub auxGetDevCapsA
diff --git a/if1632/winspool.spec b/if1632/winspool.spec
index ccc6dc7..41c15cd 100644
--- a/if1632/winspool.spec
+++ b/if1632/winspool.spec
@@ -1,127 +1,126 @@
 name	winspool
 type	win32
-base	100
 
-001 stub ADVANCEDSETUPDIALOG
-002 stub AbortPrinter
-003 stub AddFormA
-004 stub AddFormW
-005 stub AddJobA
-006 stub AddJobW
-007 stub AddMonitorA
-008 stub AddMonitorW
-009 stub AddPortA
-010 stub AddPortExA
-011 stub AddPortExW
-012 stub AddPortW
-013 stub AddPrintProcessorA
-014 stub AddPrintProcessorW
-015 stub AddPrintProvidorA
-016 stub AddPrintProvidorW
-017 stub AddPrinterA
-018 stub AddPrinterConnectionA
-019 stub AddPrinterConnectionW
-020 stub AddPrinterDriverA
-021 stub AddPrinterDriverW
-022 stub AddPrinterW
-023 stub AdvancedDocumentPropertiesA
-024 stub AdvancedDocumentPropertiesW
-025 stub AdvancedSetupDialog
-026 stub ClosePrinter
-027 stub ConfigurePortA
-028 stub ConfigurePortW
-029 stub ConnectToPrinterDlg
-030 stub CreatePrinterIC
-031 stub DEVICECAPABILITIES
-032 stub DEVICEMODE
-033 stub DeleteFormA
-034 stub DeleteFormW
-035 stub DeleteMonitorA
-036 stub DeleteMonitorW
-037 stub DeletePortA
-038 stub DeletePortW
-039 stub DeletePrintProcessorA
-040 stub DeletePrintProcessorW
-041 stub DeletePrintProvidorA
-042 stub DeletePrintProvidorW
-043 stub DeletePrinter
-044 stub DeletePrinterConnectionA
-045 stub DeletePrinterConnectionW
-046 stub DeletePrinterDriverA
-047 stub DeletePrinterDriverW
-048 stub DeletePrinterIC
-049 stub DevQueryPrint
-050 stub DeviceCapabilities
-051 stdcall DeviceCapabilitiesA(ptr ptr long ptr ptr) DeviceCapabilities32A
-052 stub DeviceCapabilitiesW
-053 stub DeviceMode
-054 stub DocumentEvent
-055 stdcall DocumentPropertiesA(long long ptr ptr ptr long) DocumentProperties32A
-056 stub DocumentPropertiesW
-057 stub EXTDEVICEMODE
-058 stub EndDocPrinter
-059 stub EndPagePrinter
-060 stub EnumFormsA
-061 stub EnumFormsW
-062 stub EnumJobsA
-063 stub EnumJobsW
-064 stub EnumMonitorsA
-065 stub EnumMonitorsW
-066 stub EnumPortsA
-067 stub EnumPortsW
-068 stub EnumPrintProcessorDatatypesA
-069 stub EnumPrintProcessorDatatypesW
-070 stub EnumPrintProcessorsA
-071 stub EnumPrintProcessorsW
-072 stub EnumPrinterDriversA
-073 stub EnumPrinterDriversW
-074 stub EnumPrintersA
-075 stub EnumPrintersW
-076 stub ExtDeviceMode
-077 stub FindClosePrinterChangeNotification
-078 stub FindFirstPrinterChangeNotification
-079 stub FindNextPrinterChangeNotification
-080 stub FreePrinterNotifyInfo
-081 stub GetFormA
-082 stub GetFormW
-083 stub GetJobA
-084 stub GetJobW
-085 stub GetPrintProcessorDirectoryA
-086 stub GetPrintProcessorDirectoryW
-087 stub GetPrinterA
-088 stub GetPrinterDataA
-089 stub GetPrinterDataW
-090 stub GetPrinterDriverA
-091 stub GetPrinterDriverDirectoryA
-092 stub GetPrinterDriverDirectoryW
-093 stub GetPrinterDriverW
-094 stub GetPrinterW
-095 stub InitializeDll
-096 stub OpenPrinterA
-097 stub OpenPrinterW
-098 stub PlayGdiScriptOnPrinterIC
-099 stub PrinterMessageBoxA
-100 stub PrinterMessageBoxW
-101 stub PrinterProperties
-102 stub ReadPrinter
-103 stub ResetPrinterA
-104 stub ResetPrinterW
-105 stub ScheduleJob
-106 stub SetAllocFailCount
-107 stub SetFormA
-108 stub SetFormW
-109 stub SetJobA
-110 stub SetJobW
-111 stub SetPrinterA
-112 stub SetPrinterDataA
-113 stub SetPrinterDataW
-114 stub SetPrinterW
-115 stub SpoolerDevQueryPrintW
-116 stub SpoolerInit
-117 stub StartDocDlgA
-118 stub StartDocDlgW
-119 stub StartDocPrinterA
-120 stub StartDocPrinterW
-121 stub StartPagePrinter
-122 stub WaitForPrinterChange
-123 stub WritePrinter
+101 stub ADVANCEDSETUPDIALOG
+102 stub AbortPrinter
+103 stub AddFormA
+104 stub AddFormW
+105 stub AddJobA
+106 stub AddJobW
+107 stub AddMonitorA
+108 stub AddMonitorW
+109 stub AddPortA
+110 stub AddPortExA
+111 stub AddPortExW
+112 stub AddPortW
+113 stub AddPrintProcessorA
+114 stub AddPrintProcessorW
+115 stub AddPrintProvidorA
+116 stub AddPrintProvidorW
+117 stub AddPrinterA
+118 stub AddPrinterConnectionA
+119 stub AddPrinterConnectionW
+120 stub AddPrinterDriverA
+121 stub AddPrinterDriverW
+122 stub AddPrinterW
+123 stub AdvancedDocumentPropertiesA
+124 stub AdvancedDocumentPropertiesW
+125 stub AdvancedSetupDialog
+126 stub ClosePrinter
+127 stub ConfigurePortA
+128 stub ConfigurePortW
+129 stub ConnectToPrinterDlg
+130 stub CreatePrinterIC
+131 stub DEVICECAPABILITIES
+132 stub DEVICEMODE
+133 stub DeleteFormA
+134 stub DeleteFormW
+135 stub DeleteMonitorA
+136 stub DeleteMonitorW
+137 stub DeletePortA
+138 stub DeletePortW
+139 stub DeletePrintProcessorA
+140 stub DeletePrintProcessorW
+141 stub DeletePrintProvidorA
+142 stub DeletePrintProvidorW
+143 stub DeletePrinter
+144 stub DeletePrinterConnectionA
+145 stub DeletePrinterConnectionW
+146 stub DeletePrinterDriverA
+147 stub DeletePrinterDriverW
+148 stub DeletePrinterIC
+149 stub DevQueryPrint
+150 stub DeviceCapabilities
+151 stdcall DeviceCapabilitiesA(ptr ptr long ptr ptr) DeviceCapabilities32A
+152 stub DeviceCapabilitiesW
+153 stub DeviceMode
+154 stub DocumentEvent
+155 stdcall DocumentPropertiesA(long long ptr ptr ptr long) DocumentProperties32A
+156 stub DocumentPropertiesW
+157 stub EXTDEVICEMODE
+158 stub EndDocPrinter
+159 stub EndPagePrinter
+160 stub EnumFormsA
+161 stub EnumFormsW
+162 stub EnumJobsA
+163 stub EnumJobsW
+164 stub EnumMonitorsA
+165 stub EnumMonitorsW
+166 stub EnumPortsA
+167 stub EnumPortsW
+168 stub EnumPrintProcessorDatatypesA
+169 stub EnumPrintProcessorDatatypesW
+170 stub EnumPrintProcessorsA
+171 stub EnumPrintProcessorsW
+172 stub EnumPrinterDriversA
+173 stub EnumPrinterDriversW
+174 stub EnumPrintersA
+175 stub EnumPrintersW
+176 stub ExtDeviceMode
+177 stub FindClosePrinterChangeNotification
+178 stub FindFirstPrinterChangeNotification
+179 stub FindNextPrinterChangeNotification
+180 stub FreePrinterNotifyInfo
+181 stub GetFormA
+182 stub GetFormW
+183 stub GetJobA
+184 stub GetJobW
+185 stub GetPrintProcessorDirectoryA
+186 stub GetPrintProcessorDirectoryW
+187 stub GetPrinterA
+188 stub GetPrinterDataA
+189 stub GetPrinterDataW
+190 stub GetPrinterDriverA
+191 stub GetPrinterDriverDirectoryA
+192 stub GetPrinterDriverDirectoryW
+193 stub GetPrinterDriverW
+194 stub GetPrinterW
+195 stub InitializeDll
+196 stub OpenPrinterA
+197 stub OpenPrinterW
+198 stub PlayGdiScriptOnPrinterIC
+199 stub PrinterMessageBoxA
+200 stub PrinterMessageBoxW
+201 stub PrinterProperties
+202 stub ReadPrinter
+203 stub ResetPrinterA
+204 stub ResetPrinterW
+205 stub ScheduleJob
+206 stub SetAllocFailCount
+207 stub SetFormA
+208 stub SetFormW
+209 stub SetJobA
+210 stub SetJobW
+211 stub SetPrinterA
+212 stub SetPrinterDataA
+213 stub SetPrinterDataW
+214 stub SetPrinterW
+215 stub SpoolerDevQueryPrintW
+216 stub SpoolerInit
+217 stub StartDocDlgA
+218 stub StartDocDlgW
+219 stub StartDocPrinterA
+220 stub StartDocPrinterW
+221 stub StartPagePrinter
+222 stub WaitForPrinterChange
+223 stub WritePrinter
diff --git a/if1632/wprocs.spec b/if1632/wprocs.spec
index 48c1b4b..ea41aeb 100644
--- a/if1632/wprocs.spec
+++ b/if1632/wprocs.spec
@@ -12,6 +12,7 @@
 24 pascal16 TASK_Reschedule() TASK_Reschedule
 27 pascal EntryAddrProc(word word) EntryAddrProc
 28 pascal MyAlloc(word word word) MODULE_AllocateSegment
+29 pascal DefResourceHandler(word word word) NE_DefResourceHandler
 30 pascal FormatCharDlgProc(word word word long) FormatCharDlgProc
  
 # Interrupt vectors 0-255 are ordinals 100-355
diff --git a/if1632/wsock32.spec b/if1632/wsock32.spec
index 1b36974..6269b17 100644
--- a/if1632/wsock32.spec
+++ b/if1632/wsock32.spec
@@ -1,6 +1,5 @@
 name	wsock32
 type	win32
-base	0
 
 001 stdcall accept(long ptr ptr) WINSOCK_accept32
 002 stdcall bind(long ptr long) WINSOCK_bind32
diff --git a/include/bitmap.h b/include/bitmap.h
index 6ec1ad0..ae02e76 100644
--- a/include/bitmap.h
+++ b/include/bitmap.h
@@ -49,11 +49,13 @@
 }
 
   /* objects/bitmap.c */
-extern BOOL32 BITMAP_Init(void);
-extern INT16 BITMAP_GetObject16( BITMAPOBJ * bmp, INT16 count, LPVOID buffer );
-extern INT32 BITMAP_GetObject32( BITMAPOBJ * bmp, INT32 count, LPVOID buffer );
-extern BOOL32 BITMAP_DeleteObject( HBITMAP16 hbitmap, BITMAPOBJ * bitmap );
+extern BOOL32  BITMAP_Init(void);
+extern INT16   BITMAP_GetObject16( BITMAPOBJ * bmp, INT16 count, LPVOID buffer );
+extern INT32   BITMAP_GetObject32( BITMAPOBJ * bmp, INT32 count, LPVOID buffer );
+extern BOOL32  BITMAP_DeleteObject( HBITMAP16 hbitmap, BITMAPOBJ * bitmap );
 extern XImage *BITMAP_GetXImage( const BITMAPOBJ *bmp );
+extern INT32   BITMAP_GetBitsPadding( int width, int depth );
+extern INT32   BITMAP_GetBitsWidth( int width, int depth );
 
   /* objects/dib.c */
 extern int DIB_GetDIBWidthBytes( int width, int depth );
diff --git a/include/callback.h b/include/callback.h
index 4efb4e4..9bd9049 100644
--- a/include/callback.h
+++ b/include/callback.h
@@ -22,34 +22,36 @@
 
 #ifndef WINELIB
 
-extern LONG CallTo16_regs_     ( const CONTEXT *context );
-extern WORD CallTo16_word_     ( FARPROC16 );
-extern WORD CallTo16_word_w    ( FARPROC16, WORD );
-extern LONG CallTo16_long_l    ( FARPROC16, LONG );
-extern WORD CallTo16_word_ww   ( FARPROC16, WORD, WORD );
-extern WORD CallTo16_word_wl   ( FARPROC16, WORD, LONG );
-extern WORD CallTo16_word_ll   ( FARPROC16, LONG, LONG );
-extern WORD CallTo16_word_www  ( FARPROC16, WORD, WORD, WORD );
-extern WORD CallTo16_word_wwl  ( FARPROC16, WORD, WORD, LONG );
-extern WORD CallTo16_word_wlw  ( FARPROC16, WORD, LONG, WORD );
-extern LONG CallTo16_long_wwl  ( FARPROC16, WORD, WORD, LONG );
-extern WORD CallTo16_word_llwl ( FARPROC16, LONG, LONG, WORD, LONG );
-extern LONG CallTo16_long_wwwl ( FARPROC16, WORD, WORD, WORD, LONG );
-extern WORD CallTo16_word_lwww ( FARPROC16, LONG, WORD, WORD, WORD );
-extern WORD CallTo16_word_wwll ( FARPROC16, WORD, WORD, LONG, LONG );
-extern WORD CallTo16_word_wllwl( FARPROC16, WORD, LONG, LONG, WORD, LONG );
-extern LONG CallTo16_long_lwwll( FARPROC16, LONG, WORD, WORD, LONG, LONG );
-extern WORD CallTo16_word_wwlll( FARPROC16, WORD, WORD, LONG, LONG, LONG );
-extern LONG CallTo16_long_lllllllwlwwwl( FARPROC16, LONG, LONG, LONG,
-                                         LONG, LONG, LONG, LONG, WORD, LONG,
-                                         WORD, WORD, WORD, LONG );
-extern WORD CallTo16_word_lwll ( FARPROC16, LONG, WORD, LONG, LONG);
-extern WORD CallTo16_word_lwlll( FARPROC16, LONG, WORD, LONG, LONG, LONG );
-extern WORD CallTo16_word_llll ( FARPROC16, LONG, LONG, LONG, LONG);
-extern LONG CallTo16_long_lwlll( FARPROC16, LONG, WORD, LONG, LONG, LONG );
-extern LONG CallTo16_long_lwwllwlllllw( FARPROC16, LONG, WORD, WORD, LONG, 
-				       LONG, WORD, LONG, LONG, LONG, LONG, 
-				       LONG, WORD);
+extern LONG CALLBACK CallTo16_regs_     (const CONTEXT *context);
+extern WORD CALLBACK CallTo16_word_     (FARPROC16);
+extern WORD CALLBACK CallTo16_word_w    (FARPROC16,WORD);
+extern LONG CALLBACK CallTo16_long_l    (FARPROC16,LONG);
+extern WORD CALLBACK CallTo16_word_ww   (FARPROC16,WORD,WORD);
+extern WORD CALLBACK CallTo16_word_wl   (FARPROC16,WORD,LONG);
+extern WORD CALLBACK CallTo16_word_ll   (FARPROC16,LONG,LONG);
+extern WORD CALLBACK CallTo16_word_www  (FARPROC16,WORD,WORD,WORD);
+extern WORD CALLBACK CallTo16_word_wwl  (FARPROC16,WORD,WORD,LONG);
+extern WORD CALLBACK CallTo16_word_wlw  (FARPROC16,WORD,LONG,WORD);
+extern LONG CALLBACK CallTo16_long_wwl  (FARPROC16,WORD,WORD,LONG);
+extern WORD CALLBACK CallTo16_word_llwl (FARPROC16,LONG,LONG,WORD,LONG);
+extern WORD CALLBACK CallTo16_word_lwll (FARPROC16,LONG,WORD,LONG,LONG);
+extern LONG CALLBACK CallTo16_long_wwwl (FARPROC16,WORD,WORD,WORD,LONG);
+extern LONG CALLBACK CallTo16_wndp_wwwl (FARPROC16,WORD,WORD,WORD,LONG);
+extern WORD CALLBACK CallTo16_word_lwww (FARPROC16,LONG,WORD,WORD,WORD);
+extern WORD CALLBACK CallTo16_word_wwll (FARPROC16,WORD,WORD,LONG,LONG);
+extern WORD CALLBACK CallTo16_word_wllwl(FARPROC16,WORD,LONG,LONG,WORD,LONG);
+extern LONG CALLBACK CallTo16_long_lwwll(FARPROC16,LONG,WORD,WORD,LONG,LONG);
+extern WORD CALLBACK CallTo16_word_wwlll(FARPROC16,WORD,WORD,LONG,LONG,LONG);
+extern WORD CALLBACK CallTo16_word_wwwww(FARPROC16,WORD,WORD,WORD,WORD,WORD);
+extern LONG CALLBACK CallTo16_wndp_lllllllwlwwwl(FARPROC16,LONG,LONG,LONG,LONG,
+                                                 LONG,LONG,LONG,WORD,LONG,WORD,
+                                                 WORD,WORD,LONG);
+extern WORD CALLBACK CallTo16_word_lwlll(FARPROC16,LONG,WORD,LONG,LONG,LONG);
+extern WORD CALLBACK CallTo16_word_llll (FARPROC16,LONG,LONG,LONG,LONG);
+extern LONG CALLBACK CallTo16_long_lwlll(FARPROC16,LONG,WORD,LONG,LONG,LONG);
+extern LONG CALLBACK CallTo16_long_lwwllwlllllw(FARPROC16,LONG,WORD,WORD,LONG,
+                                                LONG,WORD,LONG,LONG,LONG,LONG,
+                                                LONG,WORD);
 
 #define CallDriverProc( func, dwId, msg, hdrvr, lparam1, lparam2 ) \
     CallTo16_long_lwwll( func, dwId, msg, hdrvr, lparam1, lparam2 )
@@ -66,28 +68,20 @@
 /* List of the 32-bit callback functions. This list is used  */
 /* by the build program to generate the file if1632/callto32.S */
 
-extern LONG CallTo32_0( FARPROC32 );
-extern LONG CallTo32_1( FARPROC32, DWORD );
-extern LONG CallTo32_2( FARPROC32, DWORD, DWORD );
-extern LONG CallTo32_3( FARPROC32, DWORD, DWORD, DWORD );
-extern LONG CallTo32_4( FARPROC32, DWORD, DWORD, DWORD, DWORD );
-extern LONG CallTo32_5( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD );
-extern LONG CallTo32_6( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
-extern LONG CallTo32_7( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
-extern LONG CallTo32_8( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
-extern LONG CallTo32_9( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
-extern LONG CallTo32_10( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
-extern LONG CallTo32_11( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
-extern LONG CallTo32_12( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
-extern LONG CallTo32_13( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
-
-#define CallTaskStart32( func ) \
-    CallTo32_0( func )
-#define CallDLLEntryProc32( func, hmodule, a, b ) \
-    CallTo32_3( func, hmodule, a, b )
-#define CallWordBreakProc32A( func, lpch, ichCurrent, cch, code ) \
-    CallTo32_4( func, (DWORD)lpch, ichCurrent, cch, code )
-
+extern LONG CALLBACK CallTo32_0( FARPROC32 );
+extern LONG CALLBACK CallTo32_1( FARPROC32, DWORD );
+extern LONG CALLBACK CallTo32_2( FARPROC32, DWORD, DWORD );
+extern LONG CALLBACK CallTo32_3( FARPROC32, DWORD, DWORD, DWORD );
+extern LONG CALLBACK CallTo32_4( FARPROC32, DWORD, DWORD, DWORD, DWORD );
+extern LONG CALLBACK CallTo32_5( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD );
+extern LONG CALLBACK CallTo32_6( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
+extern LONG CALLBACK CallTo32_7( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
+extern LONG CALLBACK CallTo32_8( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
+extern LONG CALLBACK CallTo32_9( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
+extern LONG CALLBACK CallTo32_10( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
+extern LONG CALLBACK CallTo32_11( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
+extern LONG CALLBACK CallTo32_12( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
+extern LONG CALLBACK CallTo32_13( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD );
 
 #else  /* WINELIB */
 
@@ -101,8 +95,6 @@
     (*func)( nExitType )
 #define CallWordBreakProc16( func, lpch, ichCurrent, cch, code ) \
     (*func)( lpch, ichCurrent, cch, code )
-#define CallWordBreakProc32A( func, lpch, ichCurrent, cch, code ) \
-    (*func)( lpch, ichCurrent, cch, code )
 
 #endif  /* WINELIB */
 
diff --git a/include/class.h b/include/class.h
index faa94c7..cf110aa 100644
--- a/include/class.h
+++ b/include/class.h
@@ -38,6 +38,6 @@
 extern void CLASS_DumpClass( CLASS *class );
 extern void CLASS_WalkClasses(void);
 extern void CLASS_FreeModuleClasses( HMODULE16 hModule );
-extern CLASS *CLASS_FindClassByAtom( ATOM atom, HINSTANCE16 hinstance );
+extern CLASS *CLASS_FindClassByAtom( ATOM atom, HINSTANCE32 hinstance );
 
 #endif  /* __WINE_CLASS_H */
diff --git a/include/commctrl.h b/include/commctrl.h
index 7e6d09d..80a3898 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -41,25 +41,18 @@
 #define CCS_BOTTOM            0x0003
 #define SBARS_SIZEGRIP        0x0100
 
-/* UpDown control */
+/* UpDown */
 
-#define UPDOWN_CLASS32A  "msctls_updown32"
-#define UPDOWN_CLASS32W  "msctls_updown32"
-#define UPDOWN_CLASS16   "msctls_updown"
-#define UPDOWN_CLASS WINELIB_NAME_AW(UPDOWN_CLASS)
+#define UPDOWN_CLASS32A       "msctls_updown32"
+#define UPDOWN_CLASS32W      L"msctls_updown32"
+#define UPDOWN_CLASS16        "msctls_updown"
+#define UPDOWN_CLASS          WINELIB_NAME_AW(UPDOWN_CLASS)
 
 typedef struct tagUDACCEL
 {
   UINT32 nSec;
   UINT32 nInc;
 } UDACCEL;
- 
-typedef struct tagNM_UPDOWN
-{
-    NMHDR hdr;
-    int iPos;
-    int iDelta;
-} NM_UPDOWN;
 
 #define UD_MAXVAL          0x7fff
 #define UD_MINVAL          0x8001
@@ -74,7 +67,7 @@
 #define UDS_NOTHOUSANDS    0x0080
 
 #define UDN_FIRST          (0U-721)
-#define UDN_DELTAPOS       (UDN_FIRST - 1)
+#define UDN_DELTAPOS       (UDN_FIRST-1)
 
 #define UDM_SETRANGE       (WM_USER+101)
 #define UDM_GETRANGE       (WM_USER+102)
@@ -87,13 +80,28 @@
 #define UDM_SETBASE        (WM_USER+109)
 #define UDM_GETBASE        (WM_USER+110)
 
+/* Progress Bar */
+
+#define PROGRESS_CLASS32A   "msctls_progress32"
+#define PROGRESS_CLASS32W  L"msctls_progress32"
+#define PROGRESS_CLASS16    "msctls_progress"
+
+#define PROGRESS_CLASS      WINELIB_NAME_AW(PROGRESS_CLASS)
+
+#define PBM_SETRANGE        (WM_USER+1)
+#define PBM_SETPOS          (WM_USER+2)
+#define PBM_DELTAPOS        (WM_USER+3)
+#define PBM_SETSTEP         (WM_USER+4)
+#define PBM_STEPIT          (WM_USER+5)
+ 
 /* Functions prototypes */
 
 HWND32     WINAPI CreateStatusWindow32A(INT32,LPCSTR,HWND32,UINT32);
 HWND32     WINAPI CreateStatusWindow32W(INT32,LPCWSTR,HWND32,UINT32);
 #define    CreateStatusWindow WINELIB_NAME_AW(CreateStatusWindow)
-HWND32     WINAPI CreateUpDownControl(DWORD,INT32,INT32,INT32,INT32,HWND32,
-                                   INT32,HINSTANCE32,HWND32,INT32,INT32,INT32);
+HWND32     WINAPI CreateUpDownControl(DWORD,INT32,INT32,INT32,INT32,
+                                      HWND32,INT32,HINSTANCE32,HWND32,
+                                      INT32,INT32,INT32);
 VOID       WINAPI DrawStatusText32A(HDC32,LPRECT32,LPCSTR,UINT32);
 VOID       WINAPI DrawStatusText32W(HDC32,LPRECT32,LPCWSTR,UINT32);
 #define    DrawStatusText WINELIB_NAME_AW(DrawStatusText)
diff --git a/include/compobj.h b/include/compobj.h
index fb0d7ad..09fa2fc 100644
--- a/include/compobj.h
+++ b/include/compobj.h
@@ -1,14 +1,16 @@
 #if !defined(COMPOBJ_H)
 #define COMPOBJ_H
 
-struct tagCLSID {
-  DWORD	Data1;
-  WORD	Data2;
-  WORD  Data3;
-  BYTE	Data4[8];
+struct tagGUID
+{
+    DWORD Data1;
+    WORD  Data2;
+    WORD  Data3;
+    BYTE  Data4[8];
 };
 
-typedef struct tagCLSID CLSID;
+typedef struct tagGUID	GUID;
+typedef struct tagGUID	CLSID;
 
 OLESTATUS WINAPI StringFromCLSID(const CLSID *id, LPSTR);
 OLESTATUS WINAPI CLSIDFromString(const LPCSTR, CLSID *);
diff --git a/include/debug.h b/include/debug.h
index 9cc2e9a..fc4dae8 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -63,6 +63,7 @@
 #undef DEBUG_OLE
 #undef DEBUG_PALETTE
 #undef DEBUG_PROFILE
+#undef DEBUG_PROGRESS
 #undef DEBUG_PROP
 #undef DEBUG_REG
 #undef DEBUG_REGION
@@ -148,6 +149,7 @@
 #define DEBUG_OLE
 #define DEBUG_PALETTE
 #define DEBUG_PROFILE
+#define DEBUG_PROGRESS
 #define DEBUG_PROP
 #define DEBUG_REG
 #define DEBUG_REGION
@@ -463,6 +465,11 @@
 #else
     0,
 #endif
+#ifdef DEBUG_PROGRESS
+    1,
+#else
+    0,
+#endif
 #ifdef DEBUG_PROP
     1,
 #else
@@ -1337,8 +1344,21 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_prop if(!debug_msg_enabled[57]) ; else fprintf
-#define debugging_prop debug_msg_enabled[57]
+#define dprintf_progress if(!debug_msg_enabled[57]) ; else fprintf
+#define debugging_progress debug_msg_enabled[57]
+#else
+#ifdef DEBUG_PROGRESS
+#define dprintf_progress fprintf
+#define debugging_progress 1
+#else
+#define dprintf_progress while(0) fprintf
+#define debugging_progress 0
+#endif
+#endif
+
+#ifdef DEBUG_RUNTIME
+#define dprintf_prop if(!debug_msg_enabled[58]) ; else fprintf
+#define debugging_prop debug_msg_enabled[58]
 #else
 #ifdef DEBUG_PROP
 #define dprintf_prop fprintf
@@ -1350,8 +1370,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_reg if(!debug_msg_enabled[58]) ; else fprintf
-#define debugging_reg debug_msg_enabled[58]
+#define dprintf_reg if(!debug_msg_enabled[59]) ; else fprintf
+#define debugging_reg debug_msg_enabled[59]
 #else
 #ifdef DEBUG_REG
 #define dprintf_reg fprintf
@@ -1363,8 +1383,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_region if(!debug_msg_enabled[59]) ; else fprintf
-#define debugging_region debug_msg_enabled[59]
+#define dprintf_region if(!debug_msg_enabled[60]) ; else fprintf
+#define debugging_region debug_msg_enabled[60]
 #else
 #ifdef DEBUG_REGION
 #define dprintf_region fprintf
@@ -1376,8 +1396,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_relay if(!debug_msg_enabled[60]) ; else fprintf
-#define debugging_relay debug_msg_enabled[60]
+#define dprintf_relay if(!debug_msg_enabled[61]) ; else fprintf
+#define debugging_relay debug_msg_enabled[61]
 #else
 #ifdef DEBUG_RELAY
 #define dprintf_relay fprintf
@@ -1389,8 +1409,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_resource if(!debug_msg_enabled[61]) ; else fprintf
-#define debugging_resource debug_msg_enabled[61]
+#define dprintf_resource if(!debug_msg_enabled[62]) ; else fprintf
+#define debugging_resource debug_msg_enabled[62]
 #else
 #ifdef DEBUG_RESOURCE
 #define dprintf_resource fprintf
@@ -1402,8 +1422,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_scroll if(!debug_msg_enabled[62]) ; else fprintf
-#define debugging_scroll debug_msg_enabled[62]
+#define dprintf_scroll if(!debug_msg_enabled[63]) ; else fprintf
+#define debugging_scroll debug_msg_enabled[63]
 #else
 #ifdef DEBUG_SCROLL
 #define dprintf_scroll fprintf
@@ -1415,8 +1435,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_selector if(!debug_msg_enabled[63]) ; else fprintf
-#define debugging_selector debug_msg_enabled[63]
+#define dprintf_selector if(!debug_msg_enabled[64]) ; else fprintf
+#define debugging_selector debug_msg_enabled[64]
 #else
 #ifdef DEBUG_SELECTOR
 #define dprintf_selector fprintf
@@ -1428,8 +1448,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_sem if(!debug_msg_enabled[64]) ; else fprintf
-#define debugging_sem debug_msg_enabled[64]
+#define dprintf_sem if(!debug_msg_enabled[65]) ; else fprintf
+#define debugging_sem debug_msg_enabled[65]
 #else
 #ifdef DEBUG_SEM
 #define dprintf_sem fprintf
@@ -1441,8 +1461,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_sendmsg if(!debug_msg_enabled[65]) ; else fprintf
-#define debugging_sendmsg debug_msg_enabled[65]
+#define dprintf_sendmsg if(!debug_msg_enabled[66]) ; else fprintf
+#define debugging_sendmsg debug_msg_enabled[66]
 #else
 #ifdef DEBUG_SENDMSG
 #define dprintf_sendmsg fprintf
@@ -1454,8 +1474,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_shm if(!debug_msg_enabled[66]) ; else fprintf
-#define debugging_shm debug_msg_enabled[66]
+#define dprintf_shm if(!debug_msg_enabled[67]) ; else fprintf
+#define debugging_shm debug_msg_enabled[67]
 #else
 #ifdef DEBUG_SHM
 #define dprintf_shm fprintf
@@ -1467,8 +1487,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_stress if(!debug_msg_enabled[67]) ; else fprintf
-#define debugging_stress debug_msg_enabled[67]
+#define dprintf_stress if(!debug_msg_enabled[68]) ; else fprintf
+#define debugging_stress debug_msg_enabled[68]
 #else
 #ifdef DEBUG_STRESS
 #define dprintf_stress fprintf
@@ -1480,8 +1500,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_string if(!debug_msg_enabled[68]) ; else fprintf
-#define debugging_string debug_msg_enabled[68]
+#define dprintf_string if(!debug_msg_enabled[69]) ; else fprintf
+#define debugging_string debug_msg_enabled[69]
 #else
 #ifdef DEBUG_STRING
 #define dprintf_string fprintf
@@ -1493,8 +1513,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_task if(!debug_msg_enabled[69]) ; else fprintf
-#define debugging_task debug_msg_enabled[69]
+#define dprintf_task if(!debug_msg_enabled[70]) ; else fprintf
+#define debugging_task debug_msg_enabled[70]
 #else
 #ifdef DEBUG_TASK
 #define dprintf_task fprintf
@@ -1506,8 +1526,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_text if(!debug_msg_enabled[70]) ; else fprintf
-#define debugging_text debug_msg_enabled[70]
+#define dprintf_text if(!debug_msg_enabled[71]) ; else fprintf
+#define debugging_text debug_msg_enabled[71]
 #else
 #ifdef DEBUG_TEXT
 #define dprintf_text fprintf
@@ -1519,8 +1539,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_timer if(!debug_msg_enabled[71]) ; else fprintf
-#define debugging_timer debug_msg_enabled[71]
+#define dprintf_timer if(!debug_msg_enabled[72]) ; else fprintf
+#define debugging_timer debug_msg_enabled[72]
 #else
 #ifdef DEBUG_TIMER
 #define dprintf_timer fprintf
@@ -1532,8 +1552,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_toolhelp if(!debug_msg_enabled[72]) ; else fprintf
-#define debugging_toolhelp debug_msg_enabled[72]
+#define dprintf_toolhelp if(!debug_msg_enabled[73]) ; else fprintf
+#define debugging_toolhelp debug_msg_enabled[73]
 #else
 #ifdef DEBUG_TOOLHELP
 #define dprintf_toolhelp fprintf
@@ -1545,8 +1565,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_tweak if(!debug_msg_enabled[73]) ; else fprintf
-#define debugging_tweak debug_msg_enabled[73]
+#define dprintf_tweak if(!debug_msg_enabled[74]) ; else fprintf
+#define debugging_tweak debug_msg_enabled[74]
 #else
 #ifdef DEBUG_TWEAK
 #define dprintf_tweak fprintf
@@ -1558,8 +1578,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_updown if(!debug_msg_enabled[74]) ; else fprintf
-#define debugging_updown debug_msg_enabled[74]
+#define dprintf_updown if(!debug_msg_enabled[75]) ; else fprintf
+#define debugging_updown debug_msg_enabled[75]
 #else
 #ifdef DEBUG_UPDOWN
 #define dprintf_updown fprintf
@@ -1571,8 +1591,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_ver if(!debug_msg_enabled[75]) ; else fprintf
-#define debugging_ver debug_msg_enabled[75]
+#define dprintf_ver if(!debug_msg_enabled[76]) ; else fprintf
+#define debugging_ver debug_msg_enabled[76]
 #else
 #ifdef DEBUG_VER
 #define dprintf_ver fprintf
@@ -1584,8 +1604,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_virtual if(!debug_msg_enabled[76]) ; else fprintf
-#define debugging_virtual debug_msg_enabled[76]
+#define dprintf_virtual if(!debug_msg_enabled[77]) ; else fprintf
+#define debugging_virtual debug_msg_enabled[77]
 #else
 #ifdef DEBUG_VIRTUAL
 #define dprintf_virtual fprintf
@@ -1597,8 +1617,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_vxd if(!debug_msg_enabled[77]) ; else fprintf
-#define debugging_vxd debug_msg_enabled[77]
+#define dprintf_vxd if(!debug_msg_enabled[78]) ; else fprintf
+#define debugging_vxd debug_msg_enabled[78]
 #else
 #ifdef DEBUG_VXD
 #define dprintf_vxd fprintf
@@ -1610,8 +1630,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_win if(!debug_msg_enabled[78]) ; else fprintf
-#define debugging_win debug_msg_enabled[78]
+#define dprintf_win if(!debug_msg_enabled[79]) ; else fprintf
+#define debugging_win debug_msg_enabled[79]
 #else
 #ifdef DEBUG_WIN
 #define dprintf_win fprintf
@@ -1623,8 +1643,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_win16drv if(!debug_msg_enabled[79]) ; else fprintf
-#define debugging_win16drv debug_msg_enabled[79]
+#define dprintf_win16drv if(!debug_msg_enabled[80]) ; else fprintf
+#define debugging_win16drv debug_msg_enabled[80]
 #else
 #ifdef DEBUG_WIN16DRV
 #define dprintf_win16drv fprintf
@@ -1636,8 +1656,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_win32 if(!debug_msg_enabled[80]) ; else fprintf
-#define debugging_win32 debug_msg_enabled[80]
+#define dprintf_win32 if(!debug_msg_enabled[81]) ; else fprintf
+#define debugging_win32 debug_msg_enabled[81]
 #else
 #ifdef DEBUG_WIN32
 #define dprintf_win32 fprintf
@@ -1649,8 +1669,8 @@
 #endif
 
 #ifdef DEBUG_RUNTIME
-#define dprintf_winsock if(!debug_msg_enabled[81]) ; else fprintf
-#define debugging_winsock debug_msg_enabled[81]
+#define dprintf_winsock if(!debug_msg_enabled[82]) ; else fprintf
+#define debugging_winsock debug_msg_enabled[82]
 #else
 #ifdef DEBUG_WINSOCK
 #define dprintf_winsock fprintf
@@ -1722,6 +1742,7 @@
     "ole",
     "palette",
     "profile",
+    "progress",
     "prop",
     "reg",
     "region",
diff --git a/include/debugger.h b/include/debugger.h
index bf9ee7a..9117373 100644
--- a/include/debugger.h
+++ b/include/debugger.h
@@ -265,7 +265,7 @@
 extern int DEBUG_ReadExecutableDbgInfo(void);
 
   /* debugger/msc.c */
-extern int DEBUG_RegisterDebugInfo(int, struct pe_data *pe,
+extern int DEBUG_RegisterDebugInfo(struct pe_data *pe,
 				   int, unsigned long, unsigned long);
 extern int DEBUG_ProcessDeferredDebug(void);
 extern int DEBUG_RegisterELFDebugInfo(int load_addr, u_long size, char * name);
diff --git a/include/handle32.h b/include/handle32.h
index 9fa3021..9e5fca0 100644
--- a/include/handle32.h
+++ b/include/handle32.h
@@ -40,8 +40,27 @@
     DWORD         refcount;
 } K32OBJ;
 
+/* Kernel object list entry */
+typedef struct _K32OBJ_ENTRY
+{
+    K32OBJ               *obj;
+    struct _K32OBJ_ENTRY *next;
+    struct _K32OBJ_ENTRY *prev;
+} K32OBJ_ENTRY;
+
+/* Kernel object list */
+typedef struct
+{
+    K32OBJ_ENTRY *head;
+    K32OBJ_ENTRY *tail;
+} K32OBJ_LIST;
+
 extern void K32OBJ_IncCount( K32OBJ *ptr );
 extern void K32OBJ_DecCount( K32OBJ *ptr );
+extern void K32OBJ_AddHead( K32OBJ_LIST *list, K32OBJ *ptr );
+extern void K32OBJ_AddTail( K32OBJ_LIST *list, K32OBJ *ptr );
+extern void K32OBJ_Remove( K32OBJ_LIST *list, K32OBJ *ptr );
+extern K32OBJ *K32OBJ_RemoveHead( K32OBJ_LIST *list );
 extern BOOL32 K32OBJ_AddName( K32OBJ *obj, LPCSTR name );
 extern K32OBJ *K32OBJ_FindName( LPCSTR name );
 extern K32OBJ *K32OBJ_FindNameType( LPCSTR name, K32OBJ_TYPE type );
diff --git a/include/module.h b/include/module.h
index 563a2d8..1416362 100644
--- a/include/module.h
+++ b/include/module.h
@@ -111,22 +111,25 @@
                     ((NE_WIN32_EXTRAINFO *)((pModule) + 1))->pe_module : 0))
 
 /* module.c */
-extern NE_MODULE *MODULE_GetPtr( HMODULE16 hModule );
-extern void MODULE_DumpModule( HMODULE16 hmodule );
+extern NE_MODULE *MODULE_GetPtr( HMODULE32 hModule );
+extern HMODULE16 MODULE_HANDLEtoHMODULE16( HANDLE32 handle );
+extern HMODULE32 MODULE_HANDLEtoHMODULE32( HANDLE32 handle );
+extern void MODULE_DumpModule( HMODULE32 hmodule );
 extern void MODULE_WalkModules(void);
-extern int MODULE_OpenFile( HMODULE16 hModule );
-extern LPSTR MODULE_GetModuleName( HMODULE16 hModule );
+extern int MODULE_OpenFile( HMODULE32 hModule );
+extern LPSTR MODULE_GetModuleName( HMODULE32 hModule );
 extern void MODULE_RegisterModule( NE_MODULE *pModule );
-extern HMODULE16 MODULE_FindModule( LPCSTR path );
-extern HINSTANCE16 MODULE_GetInstance( HMODULE16 hModule );
-extern HMODULE16 MODULE_CreateDummyModule( const OFSTRUCT *ofs );
-extern HINSTANCE16 MODULE_Load( LPCSTR name, LPVOID paramBlock, BOOL32 first );
-extern WORD MODULE_GetOrdinal( HMODULE16 hModule, const char *name );
-extern FARPROC16 MODULE_GetEntryPoint( HMODULE16 hModule, WORD ordinal );
-extern BOOL16 MODULE_SetEntryPoint( HMODULE16 hModule, WORD ordinal,
+extern HMODULE32 MODULE_FindModule( LPCSTR path );
+extern HINSTANCE16 MODULE_CreateInstance( HMODULE16 hModule, LOADPARAMS* paramBlock );
+extern HINSTANCE16 MODULE_GetInstance( HMODULE32 hModule );
+extern HMODULE32 MODULE_CreateDummyModule( const OFSTRUCT *ofs );
+extern HINSTANCE16 MODULE_Load( LPCSTR name, LPVOID paramBlock, UINT16 flags );
+extern WORD MODULE_GetOrdinal( HMODULE32 hModule, const char *name );
+extern FARPROC16 MODULE_GetEntryPoint( HMODULE32 hModule, WORD ordinal );
+extern BOOL16 MODULE_SetEntryPoint( HMODULE32 hModule, WORD ordinal,
                                     WORD offset );
 extern FARPROC16 MODULE_GetWndProcEntry16( const char *name );
-extern FARPROC16 WIN32_GetProcAddress16( HMODULE16 hmodule, LPSTR name );
+extern FARPROC16 WIN32_GetProcAddress16( HMODULE32 hmodule, LPSTR name );
 
 /* builtin.c */
 extern BOOL16 BUILTIN_Init(void);
diff --git a/include/neexe.h b/include/neexe.h
index ead7623..5378fd9 100644
--- a/include/neexe.h
+++ b/include/neexe.h
@@ -88,6 +88,10 @@
 #define NE_FFLAGS_MULTIPLEDATA	0x0002
 #define NE_FFLAGS_WIN32         0x0010
 #define NE_FFLAGS_BUILTIN       0x0020  /* Wine built-in module */
+#define NE_FFLAGS_IMPLICIT	0x0040
+#define NE_FFLAGS_FRAMEBUF	0x0100  /* OS/2 fullscreen app */
+#define NE_FFLAGS_CONSOLE	0x0200  /* OS/2 console app */
+#define NE_FFLAGS_GUI		0x0300	/* right, (NE_FFLAGS_FRAMEBUF | NE_FFLAGS_CONSOLE) */
 #define NE_FFLAGS_SELFLOAD	0x0800
 #define NE_FFLAGS_LINKERROR	0x2000
 #define NE_FFLAGS_CALLWEP       0x4000
@@ -225,7 +229,7 @@
 {
     unsigned short type_id;	/* Type identifier */
     unsigned short count;	/* Number of resources of this type */
-    unsigned long  reserved;
+    DWORD	   resloader;	/* SetResourceHandler() */
     /*
      * Name info array.
      */
@@ -244,7 +248,4 @@
 #define NE_RSCTYPE_RCDATA		0x800a
 #define NE_RSCTYPE_STRING		0x8006
 
-int  load_typeinfo  (int, struct resource_typeinfo_s *);
-int  load_nameinfo  (int, struct resource_nameinfo_s *);
-
 #endif  /* __WINE_NEEXE_H */
diff --git a/include/pe_image.h b/include/pe_image.h
index 433bcdc..482c0f3 100644
--- a/include/pe_image.h
+++ b/include/pe_image.h
@@ -6,20 +6,34 @@
 #include "winnt.h"
 #include "peexe.h"
 
+/* This struct is used for loaded PE .dlls */
 struct pe_data {
-	LPIMAGE_NT_HEADERS			pe_header;
-	LPIMAGE_SECTION_HEADER			pe_seg;
-	LPIMAGE_IMPORT_DESCRIPTOR		pe_import;
-	LPIMAGE_EXPORT_DIRECTORY		pe_export;
-	LPIMAGE_RESOURCE_DIRECTORY		pe_resource;
-	LPIMAGE_BASE_RELOCATION			pe_reloc;
-	int base_addr;
-	int load_addr;
-	int vma_size;
+	LPIMAGE_NT_HEADERS	pe_header;
+	LPIMAGE_SECTION_HEADER	pe_seg;
+	HMODULE32		mappeddll;
 };
 
 typedef struct pe_data PE_MODULE;
 
+/* modreference used for attached processes
+ * all section are calculated here, relocations etc.
+ */
+struct pe_modref {
+	struct pe_modref		*next;
+	PE_MODULE			*pe_module;
+	unsigned long int		load_addr;
+	LPIMAGE_IMPORT_DESCRIPTOR	pe_import;
+	LPIMAGE_EXPORT_DIRECTORY	pe_export;
+	LPIMAGE_RESOURCE_DIRECTORY	pe_resource;
+	LPIMAGE_BASE_RELOCATION		pe_reloc;
+	int				flags;
+#define PE_MODREF_PROCESS_ATTACHED	0x00000001
+#define PE_MODREF_NO_DLL_CALLS		0x00000002
+#define PE_MODREF_RELOCS_DONE		0x00000004
+};
+
+typedef struct pe_modref PE_MODREF;
+
 extern int PE_unloadImage(HMODULE32 hModule);
 extern FARPROC32 PE_FindExportedFunction(struct pe_data *pe, LPCSTR funcName);
 extern void my_wcstombs(char * result, u_short * source, int len);
@@ -31,7 +45,10 @@
 extern BOOL32 PE_EnumResourceLanguages32W(HMODULE32,LPCWSTR,LPCWSTR,ENUMRESLANGPROC32W,LONG);
 extern HRSRC32 PE_FindResourceEx32W(HINSTANCE32,LPCWSTR,LPCWSTR,WORD);
 extern DWORD PE_SizeofResource32(HINSTANCE32,HRSRC32);
+extern HMODULE32 PE_LoadLibraryEx32A(LPCSTR,HFILE32,DWORD);
 extern HGLOBAL32 PE_LoadResource32(HINSTANCE32,HRSRC32);
-extern void PE_InitializeDLLs(HMODULE16,DWORD,LPVOID);
+
+struct _PDB32; /* forward definition */
+extern void PE_InitializeDLLs(struct _PDB32*,DWORD,LPVOID);
 
 #endif /* __WINE_PE_IMAGE_H */
diff --git a/include/peexe.h b/include/peexe.h
index bc13148..49d7cf9 100644
--- a/include/peexe.h
+++ b/include/peexe.h
@@ -323,7 +323,7 @@
 	DWORD	OffsetToData;
 	DWORD	Size;
 	DWORD	CodePage;
-	DWORD	Reserved;
+	DWORD	ResourceHandle;
 } IMAGE_RESOURCE_DATA_ENTRY,*LPIMAGE_RESOURCE_DATA_ENTRY;
 
 typedef struct _IMAGE_BASE_RELOCATION
diff --git a/include/process.h b/include/process.h
index dc6b421..3cbd14c 100644
--- a/include/process.h
+++ b/include/process.h
@@ -11,6 +11,7 @@
 #include "winbase.h"
 #include "winnt.h"
 #include "handle32.h"
+#include "pe_image.h"
 #include "task.h"
 
 /* Process handle entry */
@@ -71,7 +72,7 @@
     ENVDB           *env_db;           /* 40 Environment database */
     HANDLE_TABLE    *handle_table;     /* 44 Handle table */
     struct _PDB32   *parent;           /* 48 Parent process */
-    void            *modref_list;      /* 4c MODREF list */
+    PE_MODREF       *modref_list;      /* 4c MODREF list */
     void            *thread_list;      /* 50 List of threads */
     void            *debuggee_CB;      /* 54 Debuggee context block */
     void            *local_heap_free;  /* 58 Head of local heap free list */
@@ -82,7 +83,7 @@
     DWORD            tls_bits[2];      /* 88 TLS in-use bits */
     DWORD            process_dword;    /* 90 Unknown */
     struct _PDB32   *group;            /* 94 Process group */
-    void            *exe_modref;       /* 98 MODREF for the process EXE */
+    PE_MODREF       *exe_modref;       /* 98 MODREF for the process EXE */
     LPTOP_LEVEL_EXCEPTION_FILTER top_filter; /* 9c Top exception filter */
     DWORD            priority;         /* a0 Priority level */
     HANDLE32         heap_list;        /* a4 Head of process heap list */
@@ -101,7 +102,7 @@
 extern K32OBJ *PROCESS_GetObjPtr( HANDLE32 handle, K32OBJ_TYPE type );
 extern BOOL32 PROCESS_SetObjPtr( HANDLE32 handle, K32OBJ *ptr, DWORD flags );
 
-extern PDB32 *PROCESS_Create( TDB *pTask );
+extern PDB32 *PROCESS_Create( TDB *pTask, LPCSTR cmd_line );
 extern void PROCESS_Destroy( K32OBJ *ptr );
 
 extern PDB32 *pCurrentProcess;
diff --git a/include/progress.h b/include/progress.h
new file mode 100644
index 0000000..0aadb15
--- /dev/null
+++ b/include/progress.h
@@ -0,0 +1,23 @@
+/*
+ * Progress class extra info
+ *
+ * Copyright 1997 Dimitrie O. Paun
+ */
+
+#ifndef __WINE_PROGRESS_H
+#define __WINE_PROGRESS_H
+
+#include "windows.h"
+#include "commctrl.h"
+
+typedef struct
+{
+  INT32       CurVal;       /* Current progress value */
+  INT32       MinVal;       /* Minimum progress value */
+  INT32       MaxVal;       /* Maximum progress value */
+  INT32       Step;         /* Step to use on PMB_STEPIT */
+} PROGRESS_INFO;
+
+LRESULT WINAPI ProgressWindowProc(HWND32, UINT32, WPARAM32, LPARAM);
+
+#endif  /* __WINE_PROGRESS_H */
diff --git a/include/resource.h b/include/resource.h
index 02a6dd4..50bd60a 100644
--- a/include/resource.h
+++ b/include/resource.h
@@ -44,14 +44,21 @@
 #define WINE_CONSTRUCTOR
 #endif
 
+typedef HGLOBAL16 (CALLBACK *RESOURCEHANDLER16)(HGLOBAL16, HMODULE16, HRSRC16 );
+
+/* FIXME: convert all NE_ functions to accept NE_MODULE pointer instead
+ * of redundant hModule (which is always verified prior to calling these).
+ */
+
 extern int NE_AccessResource( HMODULE16 hModule, HRSRC16 hRsrc );
 extern BOOL32 NE_FreeResource( HMODULE16 hModule, HGLOBAL16 handle );
 extern HRSRC16 NE_FindResource(HMODULE16 hModule, SEGPTR typeId, SEGPTR resId);
 extern DWORD NE_SizeofResource( HMODULE16 hModule, HRSRC16 hRsrc );
 extern SEGPTR NE_LockResource( HMODULE16 hModule, HGLOBAL16 handle );
-extern HGLOBAL16 NE_AllocResource( HMODULE16 hModule, HRSRC16 hRsrc,
-                                   DWORD size );
+extern HGLOBAL16 NE_AllocResource( HMODULE16 hModule, HRSRC16 hRsrc, DWORD size );
 extern HGLOBAL16 NE_LoadResource( HMODULE16 hModule,  HRSRC16 hRsrc );
+extern BOOL32 NE_InitResourceHandler( HMODULE16 hModule );
+extern FARPROC32 NE_SetResourceHandler( HMODULE16 hModule, SEGPTR typeId, FARPROC32 handler);
 
 extern HGLOBAL16 SYSRES_LoadResource( SYSTEM_RESOURCE id );
 extern void SYSRES_FreeResource( HGLOBAL16 handle );
diff --git a/include/spy.h b/include/spy.h
index a221ab8..bb6f776 100644
--- a/include/spy.h
+++ b/include/spy.h
@@ -18,6 +18,9 @@
 #define SPY_RESULT_OK32           0x0001
 #define SPY_RESULT_INVALIDHWND16  0x0002
 #define SPY_RESULT_INVALIDHWND32  0x0003
+#define SPY_RESULT_DEFWND16       0x0004
+#define SPY_RESULT_DEFWND32       0x0005
+
 
 extern const char *SPY_GetMsgName( UINT32 msg );
 extern void SPY_EnterMessage( INT32 iFlag, HWND32 hwnd, UINT32 msg,
diff --git a/include/stackframe.h b/include/stackframe.h
index 1e3711e..09cdb85 100644
--- a/include/stackframe.h
+++ b/include/stackframe.h
@@ -37,9 +37,10 @@
     DWORD   edx;
     DWORD   ecx;
     DWORD   ebx;
+    DWORD   restore_addr;   /* return address for restoring code selector */
+    DWORD   codeselector;   /* code selector to restore */
     DWORD   ebp;            /* saved 32-bit frame pointer */
-    DWORD   retaddr;        /* return address */
-    DWORD   codeselector;   /* code selector for return address */
+    DWORD   retaddr;        /* actual return address */
     DWORD   args[1];        /* arguments to 16-bit function */
 } STACK32FRAME;
 
diff --git a/include/stddebug.h b/include/stddebug.h
index 819ae53..c5ac25b 100644
--- a/include/stddebug.h
+++ b/include/stddebug.h
@@ -133,6 +133,7 @@
 #undef DEBUG_OLE
 #undef DEBUG_PALETTE
 #undef DEBUG_PROFILE
+#undef DEBUG_PROGRESS
 #undef DEBUG_PROP
 #undef DEBUG_REG
 #undef DEBUG_REGION
@@ -218,6 +219,7 @@
 #define DEBUG_OLE
 #define DEBUG_PALETTE
 #define DEBUG_PROFILE
+#define DEBUG_PROGRESS
 #define DEBUG_PROP
 #define DEBUG_REG
 #define DEBUG_REGION
diff --git a/include/struct32.h b/include/struct32.h
index 81a60e1..70875bf 100644
--- a/include/struct32.h
+++ b/include/struct32.h
@@ -23,45 +23,4 @@
                                       MDICREATESTRUCT16*);
 void STRUCT32_MDICREATESTRUCT16to32A( const MDICREATESTRUCT16*,
                                       MDICREATESTRUCT32A*);
-
-#pragma pack(1)
-
-typedef struct {
-	BYTE   bWidth;
-	BYTE   bHeight;
-	BYTE   bColorCount;
-	BYTE   bReserved;
-	WORD   wPlanes;
-	WORD   wBitCount;
-	DWORD  dwBytesInRes;
-	WORD   wResId WINE_PACKED;
-	/*WORD   padding;	Spec is wrong, no padding here*/
-} ICONDIRENTRY32;
-
-typedef struct {
-	WORD   wWidth;
-	WORD   wHeight;
-	WORD   wPlanes;
-	WORD   wBitCount;
-	DWORD  dwBytesInRes;
-	WORD   wResId WINE_PACKED;
-	/*WORD   padding;*/
-} CURSORDIRENTRY32;
-
-typedef union{
-	ICONDIRENTRY32	icon;
-	CURSORDIRENTRY32	cursor;
-} CURSORICONDIRENTRY32;
-
-typedef struct {
-	WORD    idReserved;
-	WORD    idType;
-	WORD    idCount;
-	/*WORD	padding;*/
-	CURSORICONDIRENTRY32	idEntries[1];
-} CURSORICONDIR32;
-
-
-#pragma pack(4)
-
 #endif  /* __WINE_STRUCT32_H */
diff --git a/include/syscolor.h b/include/syscolor.h
index f8bd654..a212336 100644
--- a/include/syscolor.h
+++ b/include/syscolor.h
@@ -32,6 +32,10 @@
                                      /* COLOR_BTNTEXT             */
                                      /* COLOR_INACTIVECAPTIONTEXT */
     HBRUSH32 hbrushBtnHighlight;     /* COLOR_BTNHIGHLIGHT        */
+                                     /* COLOR_3DDKSHADOW          */
+                                     /* COLOR_3DLIGHT             */
+                                     /* COLOR_INFOTEXT            */
+                                     /* COLOR_INFOBK              */
 };
 
 extern void SYSCOLOR_Init(void);
diff --git a/include/task.h b/include/task.h
index 5712979..1fe0a2c 100644
--- a/include/task.h
+++ b/include/task.h
@@ -51,11 +51,15 @@
 struct _THDB;
 struct _WSINFO;
 
+  /* signal proc typedef */
+typedef void (CALLBACK *USERSIGNALPROC)(HANDLE16, UINT16, UINT16,
+                                        HINSTANCE16, HQUEUE16);
+
   /* Task database. See 'Windows Internals' p. 226.
    * Note that 16-bit OLE 2 libs like to read it directly 
    * so we have to keep entry offsets as they are. 
    */
-typedef struct
+typedef struct _TDB
 {
     HTASK16   hNext;                      /* 00 Selector of next TDB */
     DWORD     ss_sp WINE_PACKED;          /* 02 Stack pointer of task */
@@ -75,7 +79,7 @@
     HTASK16   hParent;                    /* 22 Selector of TDB of parent */
     WORD      signal_flags;               /* 24 Flags for signal handler */
     FARPROC16 sighandler WINE_PACKED;     /* 26 Signal handler */
-    FARPROC16 userhandler WINE_PACKED;    /* 2a USER signal handler */
+    USERSIGNALPROC userhandler WINE_PACKED; /* 2a USER signal handler */
     FARPROC16 discardhandler WINE_PACKED; /* 2e Handler for GlobalNotify() */
     DWORD     int0 WINE_PACKED;           /* 32 int 0 (divide by 0) handler */
     DWORD     int2 WINE_PACKED;           /* 36 int 2 (NMI) handler */
@@ -112,6 +116,12 @@
 #define TDBF_OS2APP     0x0008
 #define TDBF_WIN32      0x0010
 
+  /* USER signals */
+#define USIG_TERMINATION	0x0020
+#define USIG_DLL_LOAD		0x0040
+#define USIG_DLL_UNLOAD		0x0080
+#define USIG_GPF		0x0666
+
 #pragma pack(4)
 
 extern BOOL32 TASK_Init(void);
diff --git a/include/thread.h b/include/thread.h
index ec3fa4a..347019e 100644
--- a/include/thread.h
+++ b/include/thread.h
@@ -79,6 +79,8 @@
 extern THDB *THREAD_Create( PDB32 *pdb, DWORD stack_size,
                             LPTHREAD_START_ROUTINE start_addr );
 extern void THREAD_Destroy( K32OBJ *ptr );
+extern THDB *THREAD_Current(void);
+extern THDB *THREAD_SwitchThread( CONTEXT *context );
 
 extern THDB *pCurrentThread;
 
diff --git a/include/updown.h b/include/updown.h
index 07b132e..bb56e13 100644
--- a/include/updown.h
+++ b/include/updown.h
@@ -22,7 +22,14 @@
   INT32       Flags;        /* Internal Flags FLAG_* */
 } UPDOWN_INFO;
 
-LRESULT WINAPI UpDownWindowProc( HWND32 hwnd, UINT32 message, WPARAM32 wParam,
-                                 LPARAM lParam);
+typedef struct tagNM_UPDOWN
+{
+  NMHDR hdr;
+  int iPos;
+  int iDelta;
+} NM_UPDOWN;
+
+LRESULT WINAPI UpDownWindowProc(HWND32 hwnd, UINT32 message, WPARAM32 wParam,
+                                LPARAM lParam);
 
 #endif  /* __WINE_UPDOWN_H */
diff --git a/include/user.h b/include/user.h
index cfb068b..68e023f 100644
--- a/include/user.h
+++ b/include/user.h
@@ -23,4 +23,6 @@
 #define USER_HEAP_SEG_ADDR(handle)  \
          ((handle) ? PTR_SEG_OFF_TO_SEGPTR(USER_HeapSel, (handle)) : (SEGPTR)0)
 
+void USER_SignalProc(HANDLE16, UINT16, UINT16, HINSTANCE16, HQUEUE16);
+
 #endif  /* __WINE_USER_H */
diff --git a/include/win.h b/include/win.h
index c952000..128a20f 100644
--- a/include/win.h
+++ b/include/win.h
@@ -61,7 +61,7 @@
     HWINDOWPROC    winproc;       /* Window procedure */
     DWORD          dwMagic;       /* Magic number (must be WND_MAGIC) */
     HWND32         hwndSelf;      /* Handle of this window */
-    HINSTANCE16    hInstance;     /* Window hInstance (from CreateWindow) */
+    HINSTANCE32    hInstance;     /* Window hInstance (from CreateWindow) */
     RECT32         rectClient;    /* Client area rel. to parent client area */
     RECT32         rectWindow;    /* Whole window rel. to parent client area */
     LPSTR          text;          /* Window text */
@@ -119,14 +119,12 @@
 extern BOOL32 WIN_UnlinkWindow( HWND32 hwnd );
 extern BOOL32 WIN_LinkWindow( HWND32 hwnd, HWND32 hwndInsertAfter );
 extern HWND32 WIN_FindWinToRepaint( HWND32 hwnd, HQUEUE16 hQueue );
-extern void   WIN_SendParentNotify( HWND32 hwnd, WORD event,
-                                    WORD idChild, LPARAM lValue );
-extern void   WIN_ResetQueueWindows( WND* wnd, HQUEUE16 hQueue, HQUEUE16 hNew );
+extern BOOL32 WIN_ResetQueueWindows( WND* wnd, HQUEUE16 hQueue, HQUEUE16 hNew);
 extern BOOL32 WIN_CreateDesktopWindow(void);
 extern HWND32 WIN_GetTopParent( HWND32 hwnd );
 extern WND*   WIN_GetTopParentPtr( WND* pWnd );
 extern BOOL32 WIN_IsWindowDrawable(WND*, BOOL32 );
-extern HINSTANCE16 WIN_GetWindowInstance( HWND32 hwnd );
+extern HINSTANCE32 WIN_GetWindowInstance( HWND32 hwnd );
 extern WND**  WIN_BuildWinArray( WND *wndPtr, UINT32 bwa, UINT32* pnum );
 
 extern void DEFWND_SetText( WND *wndPtr, LPCSTR text );		      /* windows/defwnd.c */
diff --git a/include/windows.h b/include/windows.h
index 139c33b..e2afd45 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -5,6 +5,7 @@
 extern "C" {
 #endif
 
+#include <stdarg.h>
 #include "wintypes.h"
 
 #pragma pack(1)
@@ -904,6 +905,16 @@
 #define COLOR_BTNTEXT		   18
 #define COLOR_INACTIVECAPTIONTEXT  19
 #define COLOR_BTNHIGHLIGHT         20
+#define COLOR_3DDKSHADOW           21
+#define COLOR_3DLIGHT              22
+#define COLOR_INFOTEXT             23
+#define COLOR_INFOBK               24
+#define COLOR_DESKTOP              COLOR_BACKGROUND
+#define COLOR_3DFACE               COLOR_BTNFACE
+#define COLOR_3DSHADOW             COLOR_BTNSHADOW
+#define COLOR_3DHIGHLIGHT          COLOR_BTNHIGHLIGHT
+#define COLOR_3DHILIGHT            COLOR_BTNHIGHLIGHT
+#define COLOR_BTNHILIGHT           COLOR_BTNHIGHLIGHT
 
   /* WM_CTLCOLOR values */
 #define CTLCOLOR_MSGBOX             0
@@ -968,6 +979,10 @@
 #define BS_PATTERN	    3
 #define BS_INDEXED	    4
 #define	BS_DIBPATTERN	    5
+#define	BS_DIBPATTERNPT	    6
+#define BS_PATTERN8X8	    7
+#define	BS_DIBPATTERN8X8    8
+#define BS_MONOPATTERN      9
 
   /* Hatch styles */
 #define HS_HORIZONTAL       0
@@ -1875,6 +1890,15 @@
 #define DIB_PAL_COLORS   1
 #define CBM_INIT         4
 
+typedef struct 
+{
+	BITMAP32		dsBm;
+	BITMAPINFOHEADER	dsBmih;
+	DWORD			dsBitfields[3];
+	HANDLE32		dshSection;
+	DWORD			dsOffset;
+} DIBSECTION,*LPDIBSECTION;
+
 
   /* Cursors / Icons */
 
@@ -4618,6 +4642,15 @@
 #define HELP_PARTIALKEY     0x0105
 #define HELP_MULTIKEY       0x0201
 #define HELP_SETWINPOS      0x0203
+#define HELP_CONTEXTMENU    0x000a
+#define HELP_FINDER	    0x000b
+#define HELP_WM_HELP	    0x000c
+#define HELP_SETPOPUP_POS   0x000d
+
+#define HELP_TCARD	    0x8000
+#define HELP_TCARD_DATA	    0x0010
+#define HELP_TCARD_OTHER_CALLER 0x0011
+
 
 /* ExitWindows() flags */
 #define EW_RESTARTWINDOWS   0x0042
@@ -5168,6 +5201,15 @@
     UINT32  code;
 } NMHDR, *LPNMHDR;
 
+typedef struct
+{
+	UINT32	cbSize;
+	INT32	iTabLength;
+	INT32	iLeftMargin;
+	INT32	iRightMargin;
+	UINT32	uiLengthDrawn;
+} DRAWTEXTPARAMS,*LPDRAWTEXTPARAMS;
+
 #pragma pack(4)
 
 /* Declarations for functions that exist only in Win16 */
@@ -5260,9 +5302,13 @@
 BOOL16      WINAPI IsSharedSelector(HANDLE16);
 BOOL16      WINAPI IsTask(HTASK16);
 HTASK16     WINAPI IsTaskLocked(void);
+BOOL16      WINAPI IsUserIdle(void);
 BOOL16      WINAPI IsValidMetaFile(HMETAFILE16);
 VOID        WINAPI LogError(UINT16, LPVOID);
 VOID        WINAPI LogParamError(UINT16,FARPROC16,LPVOID);
+HGLOBAL16   WINAPI LoadCursorIconHandler(HGLOBAL16,HMODULE16,HRSRC16);
+HGLOBAL16   WINAPI LoadDIBCursorHandler(HGLOBAL16,HMODULE16,HRSRC16);
+HGLOBAL16   WINAPI LoadDIBIconHandler(HGLOBAL16,HMODULE16,HRSRC16);
 WORD        WINAPI LocalCountFree(void);
 WORD        WINAPI LocalHandleDelta(WORD);
 WORD        WINAPI LocalHeapSize(void);
@@ -5290,7 +5336,7 @@
 INT16       WINAPI SelectVisRgn(HDC16,HRGN16);
 DWORD       WINAPI SetBitmapDimension(HBITMAP16,INT16,INT16);
 DWORD       WINAPI SetBrushOrg(HDC16,INT16,INT16);
-UINT16*     WINAPI SetCommEventMask(INT16,UINT16);
+SEGPTR      WINAPI SetCommEventMask(INT16,UINT16);
 BOOL16      WINAPI SetDCHook(HDC16,FARPROC16,DWORD);
 DWORD       WINAPI SetDCOrg(HDC16,INT16,INT16);
 VOID        WINAPI SetDCState(HDC16,HDC16);
@@ -5582,7 +5628,11 @@
 LONG        WINAPI GetMessageExtraInfo(void);
 DWORD       WINAPI GetMessagePos(void);
 LONG        WINAPI GetMessageTime(void);
+LANGID      WINAPI GetSystemDefaultLangID(void);
+LCID        WINAPI GetSystemDefaultLCID(void);
 DWORD       WINAPI GetTickCount(void);
+LANGID      WINAPI GetUserDefaultLangID(void);
+LCID        WINAPI GetUserDefaultLCID(void);
 ATOM        WINAPI GlobalDeleteAtom(ATOM);
 VOID        WINAPI LZDone(void);
 DWORD       WINAPI OemKeyScan(WORD);
@@ -5752,7 +5802,7 @@
 INT16       WINAPI ClearCommBreak16(INT16);
 BOOL32      WINAPI ClearCommBreak32(INT32);
 #define     ClearCommBreak WINELIB_NAME(ClearCommBreak)
-BOOL16      WINAPI ClientToScreen16(HWND16,LPPOINT16);
+VOID        WINAPI ClientToScreen16(HWND16,LPPOINT16);
 BOOL32      WINAPI ClientToScreen32(HWND32,LPPOINT32);
 #define     ClientToScreen WINELIB_NAME(ClientToScreen)
 BOOL16      WINAPI ClipCursor16(const RECT16*);
@@ -5889,6 +5939,9 @@
 HICON16     WINAPI CreateIcon16(HINSTANCE16,INT16,INT16,BYTE,BYTE,LPCVOID,LPCVOID);
 HICON32     WINAPI CreateIcon32(HINSTANCE32,INT32,INT32,BYTE,BYTE,LPCVOID,LPCVOID);
 #define     CreateIcon WINELIB_NAME(CreateIcon)
+HICON16     WINAPI CreateIconFromResourceEx16(LPBYTE,UINT16,BOOL16,DWORD,INT16,INT16,UINT16);
+HICON32     WINAPI CreateIconFromResourceEx32(LPBYTE,UINT32,BOOL32,DWORD,INT32,INT32,UINT32);
+#define     CreateIconFromResourceEx WINELIB_NAME(CreateIconFromResourceEx)
 HMENU16     WINAPI CreateMenu16(void);
 HMENU32     WINAPI CreateMenu32(void);
 #define     CreateMenu WINELIB_NAME(CreateMenu)
@@ -6477,7 +6530,7 @@
 #define     GetModuleFileName WINELIB_NAME_AW(GetModuleFileName)
 HMODULE16   WINAPI GetModuleHandle16(LPCSTR);
 HMODULE32   WINAPI GetModuleHandle32A(LPCSTR);
-HMODULE32   WINAPI GetModuleHandle32W(LPCSTR);
+HMODULE32   WINAPI GetModuleHandle32W(LPCWSTR);
 #define     GetModuleHandle WINELIB_NAME_AW(GetModuleHandle)
 DWORD       WINAPI GetNearestColor16(HDC16,DWORD);
 DWORD       WINAPI GetNearestColor32(HDC32,DWORD);
@@ -6910,9 +6963,12 @@
 HICON32     WINAPI LoadIcon32W(HINSTANCE32,LPCWSTR);
 #define     LoadIcon WINELIB_NAME_AW(LoadIcon)
 HINSTANCE16 WINAPI LoadLibrary16(LPCSTR);
-HINSTANCE32 WINAPI LoadLibrary32A(LPCSTR);
-HINSTANCE32 WINAPI LoadLibrary32W(LPCWSTR);
+HMODULE32   WINAPI LoadLibrary32A(LPCSTR);
+HMODULE32   WINAPI LoadLibrary32W(LPCWSTR);
 #define     LoadLibrary WINELIB_NAME_AW(LoadLibrary)
+HMODULE32   WINAPI LoadLibraryEx32A(LPCSTR,HFILE32,DWORD);
+HMODULE32   WINAPI LoadLibraryEx32W(LPCWSTR,HFILE32,DWORD);
+#define     LoadLibraryEx WINELIB_NAME_AW(LoadLibraryEx)
 HMENU16     WINAPI LoadMenu16(HINSTANCE16,SEGPTR);
 HMENU32     WINAPI LoadMenu32A(HINSTANCE32,LPCSTR);
 HMENU32     WINAPI LoadMenu32W(HINSTANCE32,LPCWSTR);
@@ -7699,12 +7755,12 @@
 INT32       WINAPIV wsprintf32W(LPWSTR,LPCWSTR,...);
 #define     wsprintf WINELIB_NAME_AW(wsprintf)
 INT16       WINAPI wvsnprintf16(LPSTR,UINT16,LPCSTR,LPCVOID);
-INT32       WINAPI wvsnprintf32A(LPSTR,UINT32,LPCSTR,LPCVOID);
-INT32       WINAPI wvsnprintf32W(LPWSTR,UINT32,LPCWSTR,LPCVOID);
+INT32       WINAPI wvsnprintf32A(LPSTR,UINT32,LPCSTR,va_list);
+INT32       WINAPI wvsnprintf32W(LPWSTR,UINT32,LPCWSTR,va_list);
 #define     wvsnprintf WINELIB_NAME_AW(wvsnprintf)
 INT16       WINAPI wvsprintf16(LPSTR,LPCSTR,LPCVOID);
-INT32       WINAPI wvsprintf32A(LPSTR,LPCSTR,LPCVOID);
-INT32       WINAPI wvsprintf32W(LPWSTR,LPCWSTR,LPCVOID);
+INT32       WINAPI wvsprintf32A(LPSTR,LPCSTR,va_list);
+INT32       WINAPI wvsprintf32W(LPWSTR,LPCWSTR,va_list);
 #define     wvsprintf WINELIB_NAME_AW(wvsprintf)
 LONG        WINAPI _hread16(HFILE16,LPVOID,LONG);
 LONG        WINAPI _hread32(HFILE32,LPVOID,LONG);
diff --git a/include/winnls.h b/include/winnls.h
index b0bb86b..11704ab 100644
--- a/include/winnls.h
+++ b/include/winnls.h
@@ -1,6 +1,10 @@
 #ifndef __WINE_WINNLS_H
 #define __WINE_WINNLS_H
 
+/* flags to GetLocaleInfo */
+#define	LOCALE_NOUSEROVERRIDE	    0x80000000
+#define	LOCALE_USE_CP_ACP	    0x40000000
+
 /* When adding new defines, don't forget to add an entry to the
  * locale2id map in misc/ole2nls.c
  */
@@ -103,6 +107,8 @@
 #define LOCALE_IPOSSEPBYSPACE       0x00000055   
 #define LOCALE_INEGSYMPRECEDES      0x00000056   
 #define LOCALE_INEGSEPBYSPACE       0x00000057   
+#define	LOCALE_FONTSIGNATURE        0x00000058
+
 
 #define NORM_IGNORECASE				1
 #define NORM_IGNORENONSPACE			2
@@ -129,4 +135,15 @@
 #define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))
 #define LOCALE_USER_DEFAULT   (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT)) 
 
+/* Locale Dependent Mapping Flags */
+#define LCMAP_LOWERCASE	0x00000100	/* lower case letters */
+#define LCMAP_UPPERCASE	0x00000200	/* upper case letters */
+#define LCMAP_SORTKEY	0x00000400	/* WC sort key (normalize) */
+#define LCMAP_BYTEREV	0x00000800	/* byte reversal */
+
+#define LCMAP_HIRAGANA	0x00100000	/* map katakana to hiragana */
+#define LCMAP_KATAKANA	0x00200000	/* map hiragana to katakana */
+#define LCMAP_HALFWIDTH	0x00400000	/* map double byte to single byte */
+#define LCMAP_FULLWIDTH	0x00800000	/* map single byte to double byte */
+
 #endif  /* __WINE_WINNLS_H */
diff --git a/include/winnt.h b/include/winnt.h
index dc6b7cd..6664527 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -278,7 +278,7 @@
  * function pointer to a exception filter
  */
 
-typedef LONG (*PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS ExceptionInfo);
+typedef LONG (CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS ExceptionInfo);
 typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
 
 DWORD WINAPI UnhandledExceptionFilter( PEXCEPTION_POINTERS epointers );
diff --git a/include/winproc.h b/include/winproc.h
index c601898..592b357 100644
--- a/include/winproc.h
+++ b/include/winproc.h
@@ -77,8 +77,6 @@
                                      LPARAM lParam, MSGPARAM16* pm16 );
 
 typedef LRESULT (*WINPROC_CALLWNDPROC16)(WNDPROC16,HWND16,UINT16,WPARAM16,LPARAM);
-typedef LRESULT (*WINPROC_CALLWNDPROC32)(WNDPROC32,HWND32,UINT32,WPARAM32,LPARAM);
 extern void WINPROC_SetCallWndProc16( WINPROC_CALLWNDPROC16 proc );
-extern void WINPROC_SetCallWndProc32( WINPROC_CALLWNDPROC32 proc );
 
 #endif  /* __WINE_WINPROC_H */
diff --git a/include/wintypes.h b/include/wintypes.h
index 2626921..f420b39 100644
--- a/include/wintypes.h
+++ b/include/wintypes.h
@@ -66,27 +66,20 @@
 
 /* Calling conventions definitions */
 
-#ifdef not_used_yet
-
 #ifdef __i386__
 # if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)
 #  define __stdcall __attribute__((__stdcall__))
 #  define __cdecl   __attribute__((__cdecl__))
+#  define __RESTORE_ES  __asm__ __volatile__("pushw %ds\n\tpopw %es")
 # else
 #  error You need gcc >= 2.7 to build Wine on a 386
 # endif  /* __GNUC__ */
 #else  /* __i386__ */
-#  define __stdcall /* nothing */
-#  define __cdecl   /* nothing */
+# define __stdcall
+# define __cdecl
+# define __RESTORE_ES
 #endif  /* __i386__ */
 
-#else  /* not_used_yet */
-
-# define __stdcall /* nothing */
-# define __cdecl   /* nothing */
-
-#endif  /* not_used_yet */
-
 #define CALLBACK    __stdcall
 #define WINAPI      __stdcall
 #define APIPRIVATE  __stdcall
@@ -131,6 +124,7 @@
 typedef HANDLE32        HKEY;
 typedef HANDLE32        HMIXEROBJ;
 typedef DWORD           LCID;
+typedef WORD            LANGID;
 typedef DWORD           LCTYPE;
 
 /* Pointers types. These are the same for emulator and library. */
@@ -195,6 +189,7 @@
 DECLARE_HANDLE(HWAVEIN);
 DECLARE_HANDLE(HWAVEOUT);
 DECLARE_HANDLE(HWND);
+DECLARE_HANDLE(HKL);
 #undef DECLARE_HANDLE
 
 /* Callback function pointers types */
diff --git a/library/Makefile.in b/library/Makefile.in
index dce38c7..c2bd7e8 100644
--- a/library/Makefile.in
+++ b/library/Makefile.in
@@ -9,8 +9,7 @@
 LIB_SRCS = \
 	arch.c \
 	libres.c \
-	miscstubs.c \
-	sup.c
+	miscstubs.c
 
 STUB_SRCS = winestub.c
 
diff --git a/library/miscstubs.c b/library/miscstubs.c
index c472441..091a4b1 100644
--- a/library/miscstubs.c
+++ b/library/miscstubs.c
@@ -15,7 +15,6 @@
 
 /* for windows/winproc.c */
 void CallFrom16_long_wwwll(void) {}
-void CallFrom32_stdcall_5(void) {}
 
 extern LRESULT ColorDlgProc(HWND16,UINT16,WPARAM16,LPARAM);
 extern LRESULT FileOpenDlgProc(HWND16,UINT16,WPARAM16,LPARAM);
diff --git a/library/sup.c b/library/sup.c
deleted file mode 100644
index 5245618..0000000
--- a/library/sup.c
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include "windows.h"
-#include "arch.h"
-#include "neexe.h"
-
-/*
- * Header loading routines for WineLib.
- */
-
-/* LOADSHORT Calls LOAD and swaps the high and the low bytes */
-
-#define LOAD(x)  read (fd, &TAB->x, sizeof (TAB->x))
-#define LOADSHORT(x) LOAD(x); TAB->x = CONV_SHORT (TAB->x);
-#define LOADLONG(x) LOAD(x);  TAB->x = CONV_LONG (TAB->x);
-
-void load_mz_header (int fd, LPIMAGE_DOS_HEADER mz_header)
-{
-#define TAB mz_header
-	LOAD(e_magic);
-	LOADSHORT(e_cblp);
-	LOADSHORT(e_cp);
-	LOADSHORT(e_crlc);
-	LOADSHORT(e_cparhdr);
-	LOADSHORT(e_minalloc);
-	LOADSHORT(e_maxalloc);
-	LOADSHORT(e_ss);
-	LOADSHORT(e_sp);
-	LOADSHORT(e_csum);
-	LOADSHORT(e_ip);
-	LOADSHORT(e_cs);
-	LOADSHORT(e_lfarlc);
-	LOADSHORT(e_ovno);
-	LOAD(e_res);
-	LOADSHORT(e_oemid);
-	LOADSHORT(e_oeminfo);
-	LOAD(e_res2);
-	LOADLONG(e_lfanew);
-}
-
-void load_ne_header (int fd, LPIMAGE_OS2_HEADER ne_header)
-{
-#undef TAB
-#define TAB ne_header
-    LOAD (ne_magic);
-    LOADSHORT (linker_version);
-    LOADSHORT (linker_revision);
-    LOADSHORT (entry_tab_offset);
-    LOADSHORT (entry_tab_length);
-    LOAD (reserved1);
-    LOADSHORT (format_flags);
-    LOADSHORT (auto_data_seg);
-    LOADSHORT (local_heap_length);
-    LOADSHORT (stack_length);
-    LOADSHORT (ip);
-    LOADSHORT (cs);
-    LOADSHORT (sp);
-    LOADSHORT (ss);
-    LOADSHORT (n_segment_tab);
-    LOADSHORT (n_mod_ref_tab);
-    LOADSHORT (nrname_tab_length);
-    LOADSHORT (segment_tab_offset);
-    LOADSHORT (resource_tab_offset);
-    LOADSHORT (rname_tab_offset);
-    LOADSHORT (moduleref_tab_offset);
-    LOADSHORT (iname_tab_offset);
-    LOADLONG (nrname_tab_offset);
-    LOADSHORT (n_mov_entry_points);
-    LOADSHORT (align_shift_count);
-    LOADSHORT (n_resource_seg);
-    LOAD (operating_system);
-    LOAD (additional_flags);
-    LOADSHORT (fastload_offset);
-    LOADSHORT (fastload_length);
-    LOADSHORT (reserved2);
-    LOADSHORT (expect_version);
-}
-
-/*
- * Typeinfo loading routines for non PC-architectures.
- */
-
-int load_typeinfo (int fd, struct resource_typeinfo_s *typeinfo)
-{
-#undef TAB
-#define TAB typeinfo
-    LOADSHORT (type_id);
-    LOADSHORT (count);
-    LOADLONG  (reserved);
-    return 1;
-}
-
-int load_nameinfo (int fd, struct resource_nameinfo_s *nameinfo)
-{
-#undef TAB
-#define TAB nameinfo
-    LOADSHORT (offset);
-    LOADSHORT (length);
-    LOADSHORT (flags);
-    LOADSHORT (id);
-    LOADSHORT (handle);
-    LOADSHORT (usage);
-    return 0;
-}
diff --git a/loader/module.c b/loader/module.c
index a41ce37..c40d240 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -18,6 +18,7 @@
 #include "hook.h"
 #include "module.h"
 #include "neexe.h"
+#include "resource.h"
 #include "selectors.h"
 #include "stackframe.h"
 #include "task.h"
@@ -26,7 +27,7 @@
 #include "debug.h"
 #include "callback.h"
 
-extern HINSTANCE16 PE_LoadModule( int fd, OFSTRUCT *ofs, LOADPARAMS* params );
+extern HINSTANCE16 PE_LoadModule( HFILE32 hf, OFSTRUCT *ofs, LOADPARAMS* params );
 
 static HMODULE16 hFirstModule = 0;
 static HMODULE16 hCachedModule = 0;  /* Module cached by MODULE_OpenFile */
@@ -35,19 +36,70 @@
 /***********************************************************************
  *           MODULE_GetPtr
  */
-NE_MODULE *MODULE_GetPtr( HMODULE16 hModule )
+NE_MODULE *MODULE_GetPtr( HMODULE32 hModule )
 {
-    NE_MODULE *pModule = (NE_MODULE *)GlobalLock16( hModule );
-    if (!pModule || (pModule->magic != IMAGE_OS2_SIGNATURE) ||
-        (pModule->self != hModule)) return NULL;
-    return pModule;
+    HMODULE16 hnd =MODULE_HANDLEtoHMODULE16(hModule);
+
+    if (!hnd)
+    	return NULL;
+    return (NE_MODULE*)GlobalLock16(hnd);
 }
 
+/***********************************************************************
+ *           MODULE_HANDLEtoHMODULE16
+ */
+HMODULE16
+MODULE_HANDLEtoHMODULE16(HANDLE32 handle) {
+    NE_MODULE	*pModule;
+
+    if (HIWORD(handle)) {
+	/* this is a HMODULE32 aka pe->mappeddll */
+
+        /* walk the list looking for the correct startaddress */
+    	pModule = (NE_MODULE *)GlobalLock16( hFirstModule );
+	while (pModule) { 
+		if (	((pModule->flags&(NE_FFLAGS_BUILTIN|NE_FFLAGS_WIN32))==NE_FFLAGS_WIN32) &&
+			pModule->pe_module &&
+			((HMODULE32)pModule->pe_module->mappeddll == handle)
+		)
+			return pModule->self;
+		pModule=(NE_MODULE*)GlobalLock16(pModule->next);
+	}
+	return 0;
+    }
+    return GetExePtr(handle);
+}
+
+/***********************************************************************
+ *           MODULE_HANDLEtoHMODULE32
+ * return HMODULE32, if possible, HMODULE16 otherwise
+ */
+HMODULE32
+MODULE_HANDLEtoHMODULE32(HANDLE32 handle) {
+    NE_MODULE *pModule;
+
+    if (HIWORD(handle))
+    	return (HMODULE32)handle;
+    else {
+    	handle = GetExePtr(handle);
+	if (!handle)
+	    return 0;
+    	pModule = (NE_MODULE *)GlobalLock16( handle );
+	if (!pModule)
+	    return 0;
+	
+	if (	((pModule->flags&(NE_FFLAGS_BUILTIN|NE_FFLAGS_WIN32))==NE_FFLAGS_WIN32) &&
+		pModule->pe_module
+	)
+		return (HMODULE32)pModule->pe_module->mappeddll;
+	return handle;
+    }
+}
 
 /***********************************************************************
  *           MODULE_DumpModule
  */
-void MODULE_DumpModule( HMODULE16 hModule )
+void MODULE_DumpModule( HMODULE32 hModule )
 {
     int i, ordinal;
     SEGTABLEENTRY *pSeg;
@@ -210,7 +262,7 @@
 /***********************************************************************
  *           MODULE_OpenFile
  */
-int MODULE_OpenFile( HMODULE16 hModule )
+int MODULE_OpenFile( HMODULE32 hModule )
 {
     NE_MODULE *pModule;
     DOS_FULL_NAME full_name;
@@ -218,7 +270,7 @@
 
     static int cachedfd = -1;
 
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
+    hModule = MODULE_HANDLEtoHMODULE16(hModule);
     dprintf_module( stddeb, "MODULE_OpenFile(%04x) cache: mod=%04x fd=%d\n",
                     hModule, hCachedModule, cachedfd );
     if (!(pModule = MODULE_GetPtr( hModule ))) return -1;
@@ -275,7 +327,7 @@
 /***********************************************************************
  *           MODULE_CreateSegments
  */
-static BOOL32 MODULE_CreateSegments( HMODULE16 hModule )
+static BOOL32 MODULE_CreateSegments( HMODULE32 hModule )
 {
     SEGTABLEENTRY *pSegment;
     NE_MODULE *pModule;
@@ -306,7 +358,7 @@
 /***********************************************************************
  *           MODULE_GetInstance
  */
-HINSTANCE16 MODULE_GetInstance( HMODULE16 hModule )
+HINSTANCE16 MODULE_GetInstance( HMODULE32 hModule )
 {
     SEGTABLEENTRY *pSegment;
     NE_MODULE *pModule;
@@ -359,12 +411,13 @@
  *
  * Create a dummy NE module for Win32 or Winelib.
  */
-HMODULE16 MODULE_CreateDummyModule( const OFSTRUCT *ofs )
+HMODULE32 MODULE_CreateDummyModule( const OFSTRUCT *ofs )
 {
-    HMODULE16 hModule;
+    HMODULE32 hModule;
     NE_MODULE *pModule;
     SEGTABLEENTRY *pSegment;
-    char *pStr,*basename,*s;
+    char *pStr,*s;
+    const char* basename;
 
     INT32 of_size = sizeof(OFSTRUCT) - sizeof(ofs->szPathName)
                     + strlen(ofs->szPathName) + 1;
@@ -379,7 +432,7 @@
                  8;
 
     hModule = GlobalAlloc16( GMEM_MOVEABLE | GMEM_ZEROINIT, size );
-    if (!hModule) return (HMODULE16)11;  /* invalid exe */
+    if (!hModule) return (HMODULE32)11;  /* invalid exe */
 
     FarSetOwner( hModule, hModule );
     pModule = (NE_MODULE *)GlobalLock16( hModule );
@@ -432,7 +485,7 @@
     *pStr = strlen(basename);
     if (*pStr>8) *pStr=8;
     strncpy( pStr+1, basename, 8 );
-    free(basename);
+    free((void*)basename);
     pStr += 9;
 
     /* All tables zero terminated */
@@ -447,12 +500,12 @@
 /***********************************************************************
  *           MODULE_LoadExeHeader
  */
-static HMODULE16 MODULE_LoadExeHeader( HFILE32 hFile, OFSTRUCT *ofs )
+static HMODULE32 MODULE_LoadExeHeader( HFILE32 hFile, OFSTRUCT *ofs )
 {
     IMAGE_DOS_HEADER mz_header;
     IMAGE_OS2_HEADER ne_header;
     int size;
-    HMODULE16 hModule;
+    HMODULE32 hModule;
     NE_MODULE *pModule;
     BYTE *pData;
     char *buffer, *fastload = NULL;
@@ -469,18 +522,18 @@
     _llseek32( hFile, 0, SEEK_SET );
     if ((_lread32(hFile,&mz_header,sizeof(mz_header)) != sizeof(mz_header)) ||
         (mz_header.e_magic != IMAGE_DOS_SIGNATURE))
-        return (HMODULE16)11;  /* invalid exe */
+        return (HMODULE32)11;  /* invalid exe */
 
     _llseek32( hFile, mz_header.e_lfanew, SEEK_SET );
     if (_lread32( hFile, &ne_header, sizeof(ne_header) ) != sizeof(ne_header))
-        return (HMODULE16)11;  /* invalid exe */
+        return (HMODULE32)11;  /* invalid exe */
 
-    if (ne_header.ne_magic == IMAGE_NT_SIGNATURE) return (HMODULE16)21;  /* win32 exe */
-    if (ne_header.ne_magic != IMAGE_OS2_SIGNATURE) return (HMODULE16)11;  /* invalid exe */
+    if (ne_header.ne_magic == IMAGE_NT_SIGNATURE) return (HMODULE32)21;  /* win32 exe */
+    if (ne_header.ne_magic != IMAGE_OS2_SIGNATURE) return (HMODULE32)11;  /* invalid exe */
 
     if (ne_header.ne_magic == IMAGE_OS2_SIGNATURE_LX) {
       fprintf(stderr, "Sorry, this is an OS/2 linear executable (LX) file !\n");
-      return (HMODULE16)11;
+      return (HMODULE32)11;
     }
     /* We now have a valid NE header */
 
@@ -501,7 +554,7 @@
            ne_header.entry_tab_length;
 
     hModule = GlobalAlloc16( GMEM_MOVEABLE | GMEM_ZEROINIT, size );
-    if (!hModule) return (HMODULE16)11;  /* invalid exe */
+    if (!hModule) return (HMODULE32)11;  /* invalid exe */
     FarSetOwner( hModule, hModule );
     pModule = (NE_MODULE *)GlobalLock16( hModule );
     memcpy( pModule, &ne_header, sizeof(ne_header) );
@@ -560,7 +613,7 @@
             HeapFree( SystemHeap, 0, buffer );
             if (fastload) HeapFree( SystemHeap, 0, fastload );
             GlobalFree16( hModule );
-            return (HMODULE16)11;  /* invalid exe */
+            return (HMODULE32)11;  /* invalid exe */
         }
         pSeg = (struct ne_segment_table_entry_s *)buffer;
         for (i = ne_header.n_segment_tab; i > 0; i--, pSeg++)
@@ -574,7 +627,7 @@
     {
         if (fastload) HeapFree( SystemHeap, 0, fastload );
         GlobalFree16( hModule );
-        return (HMODULE16)11;  /* invalid exe */
+        return (HMODULE32)11;  /* invalid exe */
     }
 
     /* Get the resource table */
@@ -584,8 +637,9 @@
         pModule->res_table = (int)pData - (int)pModule;
         if (!READ(mz_header.e_lfanew + ne_header.resource_tab_offset,
                   ne_header.rname_tab_offset - ne_header.resource_tab_offset,
-                  pData )) return (HMODULE16)11;  /* invalid exe */
+                  pData )) return (HMODULE32)11;  /* invalid exe */
         pData += ne_header.rname_tab_offset - ne_header.resource_tab_offset;
+	NE_InitResourceHandler( hModule );
     }
     else pModule->res_table = 0;  /* No resource table */
 
@@ -598,7 +652,7 @@
     {
         if (fastload) HeapFree( SystemHeap, 0, fastload );
         GlobalFree16( hModule );
-        return (HMODULE16)11;  /* invalid exe */
+        return (HMODULE32)11;  /* invalid exe */
     }
     pData += ne_header.moduleref_tab_offset - ne_header.rname_tab_offset;
 
@@ -613,7 +667,7 @@
         {
             if (fastload) HeapFree( SystemHeap, 0, fastload );
             GlobalFree16( hModule );
-            return (HMODULE16)11;  /* invalid exe */
+            return (HMODULE32)11;  /* invalid exe */
         }
         pData += ne_header.n_mod_ref_tab * sizeof(WORD);
     }
@@ -628,7 +682,7 @@
     {
         if (fastload) HeapFree( SystemHeap, 0, fastload );
         GlobalFree16( hModule );
-        return (HMODULE16)11;  /* invalid exe */
+        return (HMODULE32)11;  /* invalid exe */
     }
     pData += ne_header.entry_tab_offset - ne_header.iname_tab_offset;
 
@@ -641,7 +695,7 @@
     {
         if (fastload) HeapFree( SystemHeap, 0, fastload );
         GlobalFree16( hModule );
-        return (HMODULE16)11;  /* invalid exe */
+        return (HMODULE32)11;  /* invalid exe */
     }
     pData += ne_header.entry_tab_length;
 
@@ -659,7 +713,7 @@
         if (!pModule->nrname_handle)
         {
             GlobalFree16( hModule );
-            return (HMODULE16)11;  /* invalid exe */
+            return (HMODULE32)11;  /* invalid exe */
         }
         buffer = GlobalLock16( pModule->nrname_handle );
         _llseek32( hFile, ne_header.nrname_tab_offset, SEEK_SET );
@@ -668,7 +722,7 @@
         {
             GlobalFree16( pModule->nrname_handle );
             GlobalFree16( hModule );
-            return (HMODULE16)11;  /* invalid exe */
+            return (HMODULE32)11;  /* invalid exe */
         }
     }
     else pModule->nrname_handle = 0;
@@ -678,13 +732,13 @@
     if (pModule->modref_count)
     {
         pModule->dlls_to_init = GLOBAL_Alloc(GMEM_ZEROINIT,
-                                    (pModule->modref_count+1)*sizeof(HMODULE16),
+                                    (pModule->modref_count+1)*sizeof(HMODULE32),
                                     hModule, FALSE, FALSE, FALSE );
         if (!pModule->dlls_to_init)
         {
             if (pModule->nrname_handle) GlobalFree16( pModule->nrname_handle );
             GlobalFree16( hModule );
-            return (HMODULE16)11;  /* invalid exe */
+            return (HMODULE32)11;  /* invalid exe */
         }
     }
     else pModule->dlls_to_init = 0;
@@ -699,7 +753,7 @@
  *
  * Lookup the ordinal for a given name.
  */
-WORD MODULE_GetOrdinal( HMODULE16 hModule, const char *name )
+WORD MODULE_GetOrdinal( HMODULE32 hModule, const char *name )
 {
     unsigned char buffer[256], *cpnt;
     BYTE len;
@@ -763,7 +817,7 @@
  *
  * Return the entry point for a given ordinal.
  */
-FARPROC16 MODULE_GetEntryPoint( HMODULE16 hModule, WORD ordinal )
+FARPROC16 MODULE_GetEntryPoint( HMODULE32 hModule, WORD ordinal )
 {
     NE_MODULE *pModule;
     WORD curOrdinal = 1;
@@ -823,7 +877,7 @@
  * Change the value of an entry point. Use with caution!
  * It can only change the offset value, not the selector.
  */
-BOOL16 MODULE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset )
+BOOL16 MODULE_SetEntryPoint( HMODULE32 hModule, WORD ordinal, WORD offset )
 {
     NE_MODULE *pModule;
     WORD curOrdinal = 1;
@@ -872,7 +926,7 @@
 {
     WORD ordinal;
     FARPROC16 ret;
-    static HMODULE16 hModule = 0;
+    static HMODULE32 hModule = 0;
 
     if (!hModule) hModule = GetModuleHandle16( "WPROCS" );
     ordinal = MODULE_GetOrdinal( hModule, name );
@@ -886,7 +940,7 @@
 /***********************************************************************
  *           MODULE_GetModuleName
  */
-LPSTR MODULE_GetModuleName( HMODULE16 hModule )
+LPSTR MODULE_GetModuleName( HMODULE32 hModule )
 {
     NE_MODULE *pModule;
     BYTE *p, len;
@@ -916,9 +970,9 @@
  *
  * Find a module from a path name.
  */
-HMODULE16 MODULE_FindModule( LPCSTR path )
+HMODULE32 MODULE_FindModule( LPCSTR path )
 {
-    HMODULE16 hModule = hFirstModule;
+    HMODULE32 hModule = hFirstModule;
     LPCSTR filename, dotptr, modulepath, modulename;
     BYTE len, *name_table;
 
@@ -973,7 +1027,7 @@
  *
  * Remove a module from memory.
  */
-static void MODULE_FreeModule( HMODULE16 hModule )
+BOOL16 MODULE_FreeModule( HMODULE32 hModule, TDB* pTaskContext )
 {
     HMODULE16 *hPrevModule;
     NE_MODULE *pModule;
@@ -981,17 +1035,28 @@
     HMODULE16 *pModRef;
     int i;
 
-    if (!(pModule = MODULE_GetPtr( hModule ))) return;
+    if (!(pModule = MODULE_GetPtr( hModule ))) return FALSE;
+    hModule = pModule->self;
+
+    if (((INT16)(--pModule->count)) > 0 ) return TRUE;
+    else pModule->count = 0;
+
     if (pModule->flags & NE_FFLAGS_BUILTIN)
-        return;  /* Can't free built-in module */
+        return FALSE;  /* Can't free built-in module */
 
-    if (pModule->flags & NE_FFLAGS_LIBMODULE) MODULE_CallWEP( hModule );
+    if (pModule->flags & NE_FFLAGS_LIBMODULE) 
+    {
+	MODULE_CallWEP( hModule );
 
-    /* Free the objects owned by the module */
+	/* Free the objects owned by the DLL module */
 
-    HOOK_FreeModuleHooks( hModule );
-    CLASS_FreeModuleClasses( hModule );
-
+	if( pTaskContext && pTaskContext->userhandler )
+	{
+            pTaskContext->userhandler( hModule, USIG_DLL_UNLOAD, 0,
+                                       pTaskContext->hInstance,
+                                       pTaskContext->hQueue );
+	}
+    }
     /* Clear magic number just in case */
 
     pModule->magic = pModule->self = 0;
@@ -1030,6 +1095,8 @@
       /* Remove module from cache */
 
     if (hCachedModule == hModule) hCachedModule = 0;
+
+    return TRUE;
 }
 
 
@@ -1038,7 +1105,7 @@
  *
  * Implementation of LoadModule()
  */
-HINSTANCE16 MODULE_Load( LPCSTR name, LPVOID paramBlock, BOOL32 first )
+HINSTANCE16 MODULE_Load( LPCSTR name, LPVOID paramBlock, UINT16 uFlags)
 {
     HMODULE16 hModule;
     HINSTANCE16 hInstance, hPrevInstance;
@@ -1080,10 +1147,9 @@
         hModule = MODULE_LoadExeHeader( hFile, &ofs );
         if (hModule < 32)
         {
-            /* Note: PE_LoadModule closes the file */
             if (hModule == 21)
                 hModule = PE_LoadModule( hFile, &ofs, paramBlock );
-            else _lclose32( hFile );
+	    else _lclose32( hFile );
 
             if (hModule < 32)
                 fprintf( stderr, "LoadModule: can't load '%s', error=%d\n",
@@ -1092,6 +1158,7 @@
         }
         _lclose32( hFile );
         pModule = MODULE_GetPtr( hModule );
+	pModule->flags |= uFlags; /* stamp implicitly loaded modules */
 
           /* Allocate the segments for this module */
 
@@ -1117,7 +1184,7 @@
                 /* its handle in the list of DLLs to initialize.   */
                 HMODULE16 hDLL;
 
-                if ((hDLL = MODULE_Load( buffer, (LPVOID)-1, FALSE )) == 2)
+                if ((hDLL = MODULE_Load( buffer, (LPVOID)-1, NE_FFLAGS_IMPLICIT )) == 2)
                 {
                     /* file not found */
                     char *p;
@@ -1127,15 +1194,17 @@
                     if (!(p = strrchr( buffer, '\\' ))) p = buffer;
                     memcpy( p + 1, pstr + 1, *pstr );
                     strcpy( p + 1 + *pstr, ".dll" );
-                    hDLL = MODULE_Load( buffer, (LPVOID)-1, FALSE );
+                    hDLL = MODULE_Load( buffer, (LPVOID)-1, NE_FFLAGS_IMPLICIT );
                 }
                 if (hDLL < 32)
                 {
+		    /* FIXME: cleanup what was done */
+
                     fprintf( stderr, "Could not load '%s' required by '%s', error = %d\n",
                              buffer, name, hDLL );
                     return 2;  /* file not found */
                 }
-                *pModRef = GetExePtr( hDLL );
+                *pModRef = MODULE_HANDLEtoHMODULE16( hDLL );
                 *pDLLs++ = *pModRef;
             }
             else  /* Increment the reference count of the DLL */
@@ -1158,11 +1227,12 @@
 		HMODULE16 hselfload = GetModuleHandle16("WPROCS");
                 DWORD oldstack;
 		WORD saved_dgroup = pSegTable[pModule->dgroup - 1].selector;
-		fprintf (stderr, "Warning:  %*.*s is a self-loading module\n"
-                                "Support for self-loading modules is very experimental\n",
-                *((BYTE*)pModule + pModule->name_table),
-                *((BYTE*)pModule + pModule->name_table),
-                (char *)pModule + pModule->name_table + 1);
+
+		dprintf_module(stddeb, "MODULE_Load: %*.*s is a self-loading module!\n",
+					*((BYTE*)pModule + pModule->name_table),
+					*((BYTE*)pModule + pModule->name_table),
+					 (char *)pModule + pModule->name_table + 1);
+
 		NE_LoadSegment( hModule, 1 );
 		selfloadheader = (SELFLOADHEADER *)
 			PTR_SEG_OFF_TO_LIN(pSegTable->selector, 0);
@@ -1210,7 +1280,8 @@
 		  frame32->ecx = 0;
 		  frame32->ebx = 0;
 		  frame32->ebp = 0;
-		  frame32->retaddr = 0;
+		  frame32->restore_addr = 0;
+		  frame32->retaddr      = 0;
 		  frame32->codeselector = WINE_CODE_SELECTOR;
 		  /* pTask->esp = (DWORD)frame32; */
 		}
@@ -1242,10 +1313,14 @@
 
         pModule->count = 1;
 
-        if (first && (pModule->flags & NE_FFLAGS_LIBMODULE))
-            NE_InitializeDLLs( hModule );
+	  /* Call initialization rountines for all loaded DLLs. Note that
+	   * when we load implicitly linked DLLs this will be done by the InitTask().
+	   */
+
+        if ((pModule->flags & (NE_FFLAGS_LIBMODULE | NE_FFLAGS_IMPLICIT)) ==
+			       NE_FFLAGS_LIBMODULE ) NE_InitializeDLLs( hModule );
     }
-    else
+    else /* module is already loaded, just create a new data segment if it's a task */
     {
         pModule = MODULE_GetPtr( hModule );
         hPrevInstance = MODULE_GetInstance( hModule );
@@ -1254,6 +1329,7 @@
             NE_LoadSegment( hModule, pModule->dgroup );
         pModule->count++;
     }
+
 #else
     lstrcpyn32A( ofs.szPathName, name, sizeof(ofs.szPathName) );
     if ((hModule = MODULE_CreateDummyModule( &ofs )) < 32) return hModule;
@@ -1269,6 +1345,8 @@
 	HTASK16 hTask;
         WORD	showcmd;
 
+	pModule->flags |= NE_FFLAGS_GUI;
+
 	/* PowerPoint passes NULL as showCmd */
 	if (params->showCmd)
 		showcmd = *((WORD *)PTR_SEG_TO_LIN(params->showCmd)+1);
@@ -1292,7 +1370,7 @@
  */
 HINSTANCE16 LoadModule16( LPCSTR name, LPVOID paramBlock )
 {
-    return MODULE_Load( name, paramBlock, TRUE );
+    return MODULE_Load( name, paramBlock, 0 );
 }
 
 
@@ -1303,13 +1381,11 @@
 {
     NE_MODULE *pModule;
 
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
     if (!(pModule = MODULE_GetPtr( hModule ))) return FALSE;
-
     dprintf_module( stddeb, "FreeModule16: %s count %d\n", 
 		    MODULE_GetModuleName(hModule), pModule->count );
-    if (--pModule->count == 0) MODULE_FreeModule( hModule );
-    return TRUE;
+
+    return MODULE_FreeModule( hModule, GlobalLock16(GetCurrentTask()) );
 }
 
 
@@ -1318,7 +1394,7 @@
  */
 HMODULE16 WINAPI WIN16_GetModuleHandle( SEGPTR name )
 {
-    if (HIWORD(name) == 0) return GetExePtr( (HINSTANCE16)name );
+    if (HIWORD(name) == 0) return MODULE_HANDLEtoHMODULE16( (HINSTANCE16)name );
     return MODULE_FindModule( PTR_SEG_TO_LIN(name) );
 }
 
@@ -1327,6 +1403,33 @@
     return MODULE_FindModule( name );
 }
 
+/***********************************************************************
+ *              GetModuleHandle         (KERNEL32.237)
+ */
+HMODULE32 WINAPI GetModuleHandle32A(LPCSTR module)
+{
+    HMODULE32	hModule;
+
+    dprintf_win32(stddeb, "GetModuleHandleA: %s\n", module ? module : "NULL");
+/* Freecell uses the result of GetModuleHandleA(0) as the hInstance in
+all calls to e.g. CreateWindowEx. */
+    if (module == NULL) {
+	TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
+	hModule = pTask->hInstance;
+    } else
+	hModule = MODULE_FindModule(module);
+    return MODULE_HANDLEtoHMODULE32(hModule);
+}
+
+HMODULE32 WINAPI GetModuleHandle32W(LPCWSTR module)
+{
+    HMODULE32 hModule;
+    LPSTR modulea = HEAP_strdupWtoA( GetProcessHeap(), 0, module );
+    hModule = GetModuleHandle32A( modulea );
+    HeapFree( GetProcessHeap(), 0, modulea );
+    return hModule;
+}
+
 
 /**********************************************************************
  *	    GetModuleUsage    (KERNEL.48)
@@ -1335,7 +1438,6 @@
 {
     NE_MODULE *pModule;
 
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
     if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
     dprintf_module( stddeb, "GetModuleUsage(%04x): returning %d\n",
                     hModule, pModule->count );
@@ -1352,7 +1454,6 @@
     NE_MODULE *pModule;
 
     if (!hModule) hModule = GetCurrentTask();
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
     if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
     lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), nSize );
     dprintf_module( stddeb, "GetModuleFileName16: %s\n", lpFileName );
@@ -1373,7 +1474,6 @@
         TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
         hModule = pTask->hInstance;
     }
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
     if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
     lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), size );
     dprintf_module( stddeb, "GetModuleFileName32A: %s\n", lpFileName );
@@ -1410,17 +1510,73 @@
 
 /***********************************************************************
  *           LoadLibraryEx32W   (KERNEL.513)
+ * FIXME
  */
-HINSTANCE16 WINAPI LoadLibraryEx32W16( LPCSTR libname, HANDLE16 hf,
+HMODULE32 WINAPI LoadLibraryEx32W16( LPCSTR libname, HANDLE16 hf,
                                        DWORD flags )
 {
     fprintf(stderr,"LoadLibraryEx32W(%s,%d,%08lx)\n",libname,hf,flags);
-    if (!flags && !hf)
-    	return LoadLibrary32A(libname);
-    return 0;
+    return LoadLibraryEx32A(libname,hf,flags);
 }
 
 /***********************************************************************
+ *           LoadLibraryEx32A   (KERNEL32)
+ */
+HMODULE32 WINAPI LoadLibraryEx32A(LPCSTR libname,HFILE32 hfile,DWORD flags)
+{
+    HMODULE32 hmod;
+    
+    hmod = PE_LoadLibraryEx32A(libname,hfile,flags);
+    if (hmod <= 32) {
+	char buffer[256];
+
+	strcpy( buffer, libname );
+	strcat( buffer, ".dll" );
+	hmod = PE_LoadLibraryEx32A(buffer,hfile,flags);
+    }
+    /* initialize all DLLs, which haven't been initialized yet. */
+    PE_InitializeDLLs( GetCurrentProcessId(), DLL_PROCESS_ATTACH, NULL);
+    return hmod;
+}
+
+/***********************************************************************
+ *           LoadLibraryA         (KERNEL32)
+ */
+HMODULE32 WINAPI LoadLibrary32A(LPCSTR libname) {
+	return LoadLibraryEx32A(libname,0,0);
+}
+
+/***********************************************************************
+ *           LoadLibraryW         (KERNEL32)
+ */
+HMODULE32 WINAPI LoadLibrary32W(LPCWSTR libnameW)
+{
+    return LoadLibraryEx32W(libnameW,0,0);
+}
+
+/***********************************************************************
+ *           LoadLibraryExW       (KERNEL32)
+ */
+HMODULE32 WINAPI LoadLibraryEx32W(LPCWSTR libnameW,HFILE32 hfile,DWORD flags)
+{
+    LPSTR libnameA = HEAP_strdupWtoA( GetProcessHeap(), 0, libnameW );
+    HMODULE32 ret = LoadLibraryEx32A( libnameA , hfile, flags );
+
+    HeapFree( GetProcessHeap(), 0, libnameA );
+    return ret;
+}
+
+/***********************************************************************
+ *           FreeLibrary
+ */
+BOOL32 WINAPI FreeLibrary32(HINSTANCE32 hLibModule)
+{
+	fprintf(stderr,"FreeLibrary: empty stub\n");
+	return TRUE;
+}
+
+
+/***********************************************************************
  *           LoadLibrary   (KERNEL.95)
  */
 HINSTANCE16 WINAPI LoadLibrary16( LPCSTR libname )
@@ -1434,17 +1590,13 @@
     }
     dprintf_module( stddeb, "LoadLibrary: (%08x) %s\n", (int)libname, libname);
 
-    /* This does not increment the module reference count, and will
-     * therefore cause crashes on FreeLibrary calls.
-    if ((handle = MODULE_FindModule( libname )) != 0) return handle;
-     */
-    handle = MODULE_Load( libname, (LPVOID)-1, TRUE );
+    handle = MODULE_Load( libname, (LPVOID)-1, 0 );
     if (handle == (HINSTANCE16)2)  /* file not found */
     {
         char buffer[256];
         lstrcpyn32A( buffer, libname, 252 );
         strcat( buffer, ".dll" );
-        handle = MODULE_Load( buffer, (LPVOID)-1, TRUE );
+        handle = MODULE_Load( buffer, (LPVOID)-1, 0 );
     }
     return handle;
 }
@@ -1486,7 +1638,7 @@
         return 2;  /* File not found */
     if (!(cmdShowHandle = GlobalAlloc16( 0, 2 * sizeof(WORD) )))
         return 8;  /* Out of memory */
-    if (!(cmdLineHandle = GlobalAlloc16( 0, 256 )))
+    if (!(cmdLineHandle = GlobalAlloc16( 0, 1024 )))
     {
         GlobalFree16( cmdShowHandle );
         return 8;  /* Out of memory */
@@ -1531,7 +1683,7 @@
 	}
 
 	if (*p)
-	    lstrcpyn32A( cmdline + 1, p + 1, 127 );
+	    lstrcpyn32A( cmdline + 1, p + 1, 1023 );
 	else
 	    cmdline[1] = '\0';
 
@@ -1645,7 +1797,7 @@
  *           WIN32_GetProcAddress16   (KERNEL32.36)
  * Get procaddress in 16bit module from win32... (kernel32 undoc. ordinal func)
  */
-FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE16 hModule, LPSTR name )
+FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE32 hModule, LPSTR name )
 {
     WORD	ordinal;
     FARPROC16	ret;
@@ -1654,7 +1806,7 @@
     	fprintf(stderr,"WIN32_GetProcAddress16: hModule may not be 0!\n");
 	return (FARPROC16)0;
     }
-    hModule = GetExePtr(hModule);
+    hModule = MODULE_HANDLEtoHMODULE16(hModule);
     if (HIWORD(name)) {
         ordinal = MODULE_GetOrdinal( hModule, name );
         dprintf_module( stddeb, "WIN32_GetProcAddress16: %04x '%s'\n",
@@ -1679,7 +1831,7 @@
     FARPROC16 ret;
 
     if (!hModule) hModule = GetCurrentTask();
-    hModule = GetExePtr( hModule );
+    hModule = MODULE_HANDLEtoHMODULE16( hModule );
 
     if (HIWORD(name) != 0)
     {
@@ -1714,13 +1866,16 @@
 	dprintf_win32(stddeb,"GetProcAddress32(%08lx,%s)\n",(DWORD)hModule,function);
     else
 	dprintf_win32(stddeb,"GetProcAddress32(%08lx,%p)\n",(DWORD)hModule,function);
-    hModule = GetExePtr( hModule );
     if (!(pModule = MODULE_GetPtr( hModule )))
         return (FARPROC32)0;
-    if (!(pModule->flags & NE_FFLAGS_WIN32) || !pModule->pe_module)
-        return (FARPROC32)0;
     if (pModule->flags & NE_FFLAGS_BUILTIN)
         return BUILTIN_GetProcAddress32( pModule, function );
+    if (!pModule->pe_module) {
+    	fprintf(stderr,"Oops, Module 0x%08lx has got no pe_module?\n",
+		(DWORD)MODULE_HANDLEtoHMODULE32(hModule)
+	);
+	return (FARPROC32)0;
+    }
     return PE_FindExportedFunction( pModule->pe_module, function );
 #else
     return NULL;
@@ -1732,14 +1887,20 @@
  */
 LPIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE32 hModule)
 {
+    /* basically:
+     * return  hModule+(((IMAGE_DOS_HEADER*)hModule)->e_lfanew); 
+     * but we could get HMODULE16 or the like (think builtin modules)
+     */
+
 #ifndef WINELIB
     NE_MODULE *pModule;
 
-    hModule = GetExePtr( hModule );
     if (!(pModule = MODULE_GetPtr( hModule )))
         return (LPIMAGE_NT_HEADERS)0;
     if (!(pModule->flags & NE_FFLAGS_WIN32) || !pModule->pe_module)
         return (LPIMAGE_NT_HEADERS)0;
+    if (pModule->flags & NE_FFLAGS_BUILTIN)
+        return (LPIMAGE_NT_HEADERS)0;
     return pModule->pe_module->pe_header;
 #else
     return NULL;
@@ -1763,7 +1924,7 @@
 BOOL16 WINAPI IsSharedSelector( HANDLE16 selector )
 {
     /* Check whether the selector belongs to a DLL */
-    NE_MODULE *pModule = MODULE_GetPtr( GetExePtr( selector ));
+    NE_MODULE *pModule = MODULE_GetPtr( selector );
     if (!pModule) return FALSE;
     return (pModule->flags & NE_FFLAGS_LIBMODULE) != 0;
 }
@@ -1815,7 +1976,7 @@
  */
 BOOL16 WINAPI ModuleFindHandle( MODULEENTRY *lpme, HMODULE16 hModule )
 {
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
+    hModule = MODULE_HANDLEtoHMODULE16( hModule );
     lpme->wNext = hModule;
     return ModuleNext( lpme );
 }
diff --git a/loader/ne_image.c b/loader/ne_image.c
index dd0ff09..e1631e9 100644
--- a/loader/ne_image.c
+++ b/loader/ne_image.c
@@ -17,6 +17,7 @@
 #include <errno.h>
 #include "neexe.h"
 #include "windows.h"
+#include "task.h"
 #include "arch.h"
 #include "selectors.h"
 #include "callback.h"
@@ -455,7 +456,7 @@
  *
  * Call the DLL initialization code
  */
-static BOOL32 NE_InitDLL( HMODULE16 hModule )
+static BOOL32 NE_InitDLL( TDB* pTask, HMODULE16 hModule )
 {
     NE_MODULE *pModule;
     SEGTABLEENTRY *pSegTable;
@@ -473,6 +474,17 @@
 
     if (!(pModule->flags & NE_FFLAGS_LIBMODULE) ||
         (pModule->flags & NE_FFLAGS_WIN32)) return TRUE; /*not a library*/
+
+    /* Call USER signal handler. This is necessary to install a
+     * proper loader for HICON and HCURSOR resources that this DLL 
+     * may contain. InitApp() does this for task modules. */
+
+    if (pTask && pTask->userhandler)
+    {
+        pTask->userhandler( hModule, USIG_DLL_LOAD, 0, pTask->hInstance,
+                            pTask->hQueue );
+    }
+
     if (!pModule->cs) return TRUE;  /* no initialization code */
 
     memset( &context, 0, sizeof(context) );
@@ -516,10 +528,12 @@
 /***********************************************************************
  *           NE_InitializeDLLs
  *
- * Initialize the loaded DLLs.
+ * Recursively initialize all DLLs (according to the order in which 
+ * they where loaded).
  */
 void NE_InitializeDLLs( HMODULE16 hModule )
 {
+    TDB* pTask = (TDB*)GlobalLock16(GetCurrentTask());
     NE_MODULE *pModule;
     HMODULE16 *pDLL;
 
@@ -529,6 +543,7 @@
 /*        PE_InitializeDLLs(hModule); */
         return;
     }
+
     if (pModule->dlls_to_init)
     {
 	HGLOBAL16 to_init = pModule->dlls_to_init;
@@ -539,7 +554,7 @@
         }
         GlobalFree16( to_init );
     }
-    NE_InitDLL( hModule );
+    NE_InitDLL( pTask, hModule );
 }
 
 
diff --git a/loader/ne_resource.c b/loader/ne_resource.c
index cf885e8..7121b18 100644
--- a/loader/ne_resource.c
+++ b/loader/ne_resource.c
@@ -3,6 +3,7 @@
  *
  * Copyright 1993 Robert J. Amstadt
  * Copyright 1995 Alexandre Julliard
+ *	     1997 Alex Korobka
  */
 
 #include <stdio.h>
@@ -22,6 +23,8 @@
 #include "stddebug.h"
 #include "debug.h"
 
+#define  NEXT_TYPEINFO(pTypeInfo) ((NE_TYPEINFO *)((char*)((pTypeInfo) + 1) + \
+                                   (pTypeInfo)->count * sizeof(NE_NAMEINFO)))
 
 /***********************************************************************
  *           NE_FindNameTableId
@@ -29,29 +32,26 @@
  * Find the type and resource id from their names.
  * Return value is MAKELONG( typeId, resId ), or 0 if not found.
  */
-static DWORD NE_FindNameTableId( HMODULE16 hModule, SEGPTR typeId, SEGPTR resId )
+static DWORD NE_FindNameTableId( NE_MODULE *pModule, SEGPTR typeId, SEGPTR resId )
 {
-    NE_MODULE *pModule;
-    NE_TYPEINFO *pTypeInfo;
+    NE_TYPEINFO *pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->res_table + 2);
     NE_NAMEINFO *pNameInfo;
     HGLOBAL16 handle;
     WORD *p;
     DWORD ret = 0;
     int count;
 
-    if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
-    pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->res_table + 2);
     for (; pTypeInfo->type_id != 0;
-             pTypeInfo = (NE_TYPEINFO *)((char*)(pTypeInfo+1) +
-                                       pTypeInfo->count * sizeof(NE_NAMEINFO)))
+	   pTypeInfo = (NE_TYPEINFO *)((char*)(pTypeInfo+1) +
+					pTypeInfo->count * sizeof(NE_NAMEINFO)))
     {
-        if (pTypeInfo->type_id != 0x800f) continue;
-        pNameInfo = (NE_NAMEINFO *)(pTypeInfo + 1);
-        for (count = pTypeInfo->count; count > 0; count--, pNameInfo++)
-        {
+	if (pTypeInfo->type_id != 0x800f) continue;
+	pNameInfo = (NE_NAMEINFO *)(pTypeInfo + 1);
+	for (count = pTypeInfo->count; count > 0; count--, pNameInfo++)
+	{
             dprintf_resource( stddeb, "NameTable entry: type=%04x id=%04x\n",
                               pTypeInfo->type_id, pNameInfo->id );
-            handle = LoadResource16( hModule, 
+            handle = LoadResource16( pModule->self, 
 				   (HRSRC16)((int)pNameInfo - (int)pModule) );
             for(p = (WORD*)LockResource16(handle); p && *p; p = (WORD *)((char*)p+*p))
             {
@@ -89,11 +89,56 @@
             }
             FreeResource16( handle );
             if (ret) return ret;
-        }
+	}
     }
     return 0;
 }
 
+/***********************************************************************
+ *           NE_FindTypeSection
+ *
+ * Find header struct for a particular resource type.
+ */
+static NE_TYPEINFO* NE_FindTypeSection( NE_MODULE *pModule, 
+					NE_TYPEINFO *pTypeInfo, SEGPTR typeId )
+{
+    /* start from pTypeInfo */
+
+    if (HIWORD(typeId) != 0)  /* Named type */
+    {
+	char *str = (char *)PTR_SEG_TO_LIN( typeId );
+	BYTE len = strlen( str );
+	while (pTypeInfo->type_id)
+	{
+	    if (!(pTypeInfo->type_id & 0x8000))
+	    {
+		BYTE *p = (BYTE*)pModule + pModule->res_table + pTypeInfo->type_id;
+		if ((*p == len) && !lstrncmpi32A( p+1, str, len ))
+		{
+		    dprintf_resource( stddeb, "  Found type '%s'\n", str );
+		    return pTypeInfo;
+		}
+	    }
+	    dprintf_resource( stddeb, "  Skipping type %04x\n", pTypeInfo->type_id );
+	    pTypeInfo = NEXT_TYPEINFO(pTypeInfo);
+	}
+    }
+    else  /* Numeric type id */
+    {
+	WORD id = LOWORD(typeId) | 0x8000;
+	while (pTypeInfo->type_id)
+	{
+            if (pTypeInfo->type_id == id)
+	    {
+		dprintf_resource( stddeb, "  Found type %04x\n", id );
+		return pTypeInfo;
+	    }
+	    dprintf_resource( stddeb, "  Skipping type %04x\n", pTypeInfo->type_id );
+	    pTypeInfo = NEXT_TYPEINFO(pTypeInfo);
+	}
+    }
+    return NULL;
+}
 
 /***********************************************************************
  *           NE_FindResourceFromType
@@ -131,6 +176,83 @@
 
 
 /***********************************************************************
+ *           NE_DefResourceHandler
+ *
+ * This is the default LoadProc() function. 
+ */
+HGLOBAL16 WINAPI NE_DefResourceHandler( HGLOBAL16 hMemObj, HMODULE16 hModule,
+                                        HRSRC16 hRsrc )
+{
+    int  fd;
+    NE_MODULE* pModule = MODULE_GetPtr( hModule );
+    if ( pModule && (fd = MODULE_OpenFile( hModule )) >= 0)
+    {
+	HGLOBAL16 handle;
+	WORD sizeShift = *(WORD *)((char *)pModule + pModule->res_table);
+	NE_NAMEINFO* pNameInfo = (NE_NAMEINFO*)((char*)pModule + hRsrc);
+
+        dprintf_resource( stddeb, "NEResourceHandler: loading, pos=%d, len=%d\n",
+                         (int)pNameInfo->offset << sizeShift,
+                         (int)pNameInfo->length << sizeShift );
+	if( hMemObj )
+	    handle = GlobalReAlloc16( hMemObj, pNameInfo->length << sizeShift, 0 );
+	else
+	    handle = NE_AllocResource( hModule, hRsrc, 0 );
+
+	if( handle )
+	{
+            lseek( fd, (int)pNameInfo->offset << sizeShift, SEEK_SET );
+            read( fd, GlobalLock16( handle ), (int)pNameInfo->length << sizeShift );
+	}
+	return handle;
+    }
+    return (HGLOBAL16)0;
+}
+
+/***********************************************************************
+ *           NE_InitResourceHandler
+ *
+ * Fill in 'resloader' fields in the resource table.
+ */
+BOOL32 NE_InitResourceHandler( HMODULE16 hModule )
+{
+    NE_MODULE *pModule = MODULE_GetPtr( hModule );
+    NE_TYPEINFO *pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->res_table + 2);
+
+    dprintf_resource(stddeb,"InitResourceHandler[%04x]\n", hModule );
+
+    while(pTypeInfo->type_id)
+    {
+	pTypeInfo->resloader = (DWORD)&NE_DefResourceHandler;
+	pTypeInfo = NEXT_TYPEINFO(pTypeInfo);
+    }
+    return TRUE;
+}
+
+/***********************************************************************
+ *           NE_SetResourceHandler
+ */
+FARPROC32 NE_SetResourceHandler( HMODULE16 hModule, SEGPTR typeId, 
+				 FARPROC32 resourceHandler )
+{
+    NE_MODULE *pModule = MODULE_GetPtr( hModule );
+    NE_TYPEINFO *pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->res_table + 2);
+    FARPROC32  prevHandler = NULL;
+
+    do
+    {
+	pTypeInfo = NE_FindTypeSection( pModule, pTypeInfo, typeId );
+        if( pTypeInfo )
+        {
+	    prevHandler = (FARPROC32)pTypeInfo->resloader;
+	    pTypeInfo->resloader = (DWORD)resourceHandler;
+	    pTypeInfo = NEXT_TYPEINFO(pTypeInfo);
+        }
+    } while( pTypeInfo );
+    return prevHandler;
+}
+
+/***********************************************************************
  *           NE_FindResource
  */
 HRSRC16 NE_FindResource( HMODULE16 hModule, SEGPTR typeId, SEGPTR resId )
@@ -142,10 +264,12 @@
     if (!pModule || !pModule->res_table) return 0;
     pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->res_table + 2);
 
-    if (HIWORD(typeId) || HIWORD(resId))
+    if ((pModule->expected_version < 0x030a) && (HIWORD(typeId) || HIWORD(resId)))
     {
-        /* Search the names in the nametable */
-        DWORD id = NE_FindNameTableId( hModule, typeId, resId );
+        /* Search the names in the nametable (which is not present 
+         * since Windows 3.1).  */
+
+        DWORD id = NE_FindNameTableId( pModule, typeId, resId );
         if (id)  /* found */
         {
             typeId = LOWORD(id);
@@ -153,60 +277,27 @@
         }
     }
 
-    if (HIWORD(typeId) != 0)  /* Named type */
+    do
     {
-        char *str = (char *)PTR_SEG_TO_LIN( typeId );
-        BYTE len = strlen( str );
-        while (pTypeInfo->type_id)
-        {
-            if (!(pTypeInfo->type_id & 0x8000))
-            {
-                BYTE *p = (BYTE*)pModule+pModule->res_table+pTypeInfo->type_id;
-                if ((*p == len) && !lstrncmpi32A( p+1, str, len ))
-                {
-                    dprintf_resource( stddeb, "  Found type '%s'\n", str );
-                    hRsrc = NE_FindResourceFromType(pModule, pTypeInfo, resId);
-                    if (hRsrc)
-                    {
-                        dprintf_resource( stddeb, "    Found id %08lx\n", resId );
-                        return hRsrc;
-                    }
-                    dprintf_resource( stddeb, "    Not found, going on\n" );
-                }
-            }
-            dprintf_resource( stddeb, "  Skipping type %04x\n",
-                              pTypeInfo->type_id );
-            pTypeInfo = (NE_TYPEINFO *)((char*)(pTypeInfo+1) +
-                                       pTypeInfo->count * sizeof(NE_NAMEINFO));
-        }
-    }
-    else  /* Numeric type id */
-    {
-        WORD id = LOWORD(typeId) | 0x8000;
-        while (pTypeInfo->type_id)
-        {
-            if (pTypeInfo->type_id == id)
-            {
-                dprintf_resource( stddeb, "  Found type %04x\n", id );
-                hRsrc = NE_FindResourceFromType( pModule, pTypeInfo, resId );
-                if (hRsrc)
-                {
-                    dprintf_resource( stddeb, "    Found id %08lx\n", resId );
-                    return hRsrc;
-                }
-                dprintf_resource( stddeb, "    Not found, going on\n" );
-            }
-            dprintf_resource( stddeb, "  Skipping type %04x\n",
-                              pTypeInfo->type_id );
-            pTypeInfo = (NE_TYPEINFO *)((char*)(pTypeInfo+1) +
-                                       pTypeInfo->count * sizeof(NE_NAMEINFO));
-        }
-    }
+	pTypeInfo = NE_FindTypeSection( pModule, pTypeInfo, typeId );
+        if( pTypeInfo )
+	{
+	    hRsrc = NE_FindResourceFromType(pModule, pTypeInfo, resId);
+	    if( hRsrc )
+	    {
+		dprintf_resource( stddeb, "    Found id %08lx\n", resId );
+		return hRsrc;
+	    }
+	    dprintf_resource( stddeb, "    Not found, going on\n" );
+	    pTypeInfo = NEXT_TYPEINFO(pTypeInfo);
+	}
+    } while( pTypeInfo );
+
+    dprintf_resource( stddeb, "failed!\n");
     return 0;
 }
 
 
-
 /***********************************************************************
  *           NE_AllocResource
  */
@@ -273,33 +364,67 @@
  */
 HGLOBAL16 NE_LoadResource( HMODULE16 hModule,  HRSRC16 hRsrc )
 {
-    NE_NAMEINFO *pNameInfo=NULL;
-    WORD sizeShift;
-    int fd;
-
+    NE_TYPEINFO *pTypeInfo;
+    NE_NAMEINFO *pNameInfo = NULL;
     NE_MODULE *pModule = MODULE_GetPtr( hModule );
-    if (!pModule || !pModule->res_table) return 0;
+    int d;
+
+    if (!hRsrc || !pModule || !pModule->res_table) return 0;
+
+    /* First, verify hRsrc (just an offset from pModule to the needed pNameInfo) */
+
+    d = pModule->res_table + 2;
+    pTypeInfo = (NE_TYPEINFO *)((char *)pModule + d);
 #ifndef WINELIB
-    pNameInfo = (NE_NAMEINFO*)((char*)pModule + hRsrc);
-#endif
-    if (pNameInfo->handle)
+    while( hRsrc > d )
     {
-        pNameInfo->usage++;
-        dprintf_resource( stddeb, "  Already loaded, new count=%d\n",
-                          pNameInfo->usage );
-        return pNameInfo->handle;
+	if (pTypeInfo->type_id == 0)
+		break; /* terminal entry */
+	d += sizeof(NE_TYPEINFO) + pTypeInfo->count * sizeof(NE_NAMEINFO);
+	if (hRsrc < d)
+	{
+	    if( ((d - hRsrc)%sizeof(NE_NAMEINFO)) == 0 )
+	    {
+		pNameInfo = (NE_NAMEINFO *)(((char *)pModule) + hRsrc);
+		break;
+	    }
+	    else 
+		break; /* NE_NAMEINFO boundary mismatch */
+	}
+	pTypeInfo = (NE_TYPEINFO *)(((char *)pModule) + d);
     }
-    sizeShift = *(WORD *)((char *)pModule + pModule->res_table);
-    dprintf_resource( stddeb, "  Loading, pos=%d, len=%d\n",
-                      (int)pNameInfo->offset << sizeShift,
-                      (int)pNameInfo->length << sizeShift );
-    if ((fd = MODULE_OpenFile( hModule )) == -1) return 0;
-    pNameInfo->handle = NE_AllocResource( hModule, hRsrc, 0 );
-    pNameInfo->usage = 1;
-    lseek( fd, (int)pNameInfo->offset << sizeShift, SEEK_SET );
-    read( fd, GlobalLock16( pNameInfo->handle ),
-          (int)pNameInfo->length << sizeShift );
-    return pNameInfo->handle;
+#endif
+    if (pNameInfo)
+    {
+	RESOURCEHANDLER16 __r16loader;
+	if (pNameInfo->handle
+	    && !(GlobalFlags16(pNameInfo->handle) & GMEM_DISCARDED))
+	{
+	    pNameInfo->usage++;
+	    dprintf_resource( stddeb, "  Already loaded, new count=%d\n",
+			      pNameInfo->usage );
+	}
+	else
+	{
+	    if (pTypeInfo->resloader)
+	  	__r16loader = (RESOURCEHANDLER16)pTypeInfo->resloader;
+	    else /* this is really bad */
+	    {
+		fprintf( stderr, "[%04x]: Missing resource handler!!!...\n", hModule);
+		__r16loader = NE_DefResourceHandler;
+	    }
+
+	    /* Finally call resource loader */
+
+	    if ((pNameInfo->handle = __r16loader(pNameInfo->handle, hModule, hRsrc)))
+	    {
+		pNameInfo->usage++;
+		pNameInfo->flags |= NE_SEGFLAGS_LOADED;
+	    }
+	}
+	return pNameInfo->handle;
+    }
+    return 0;
 }
 
 
@@ -324,7 +449,7 @@
     WORD count;
 
     NE_MODULE *pModule = MODULE_GetPtr( hModule );
-    if (!pModule || !pModule->res_table) return handle;
+    if (!handle || !pModule || !pModule->res_table) return handle;
     pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->res_table + 2);
     while (pTypeInfo->type_id)
     {
@@ -345,7 +470,10 @@
         }
         pTypeInfo = (NE_TYPEINFO *)pNameInfo;
     }
-    fprintf( stderr, "NE_FreeResource: %04x %04x not found!\n", hModule, handle );
+
+    dprintf_resource(stddeb, "NE_FreeResource[%04x]: no intrinsic resource for %04x\n", 
+			      hModule, handle );
+    GlobalFree16( handle ); /* it could have been DirectResAlloc()'ed */
     return handle;
 }
 #endif /* WINELIB */
diff --git a/loader/pe_image.c b/loader/pe_image.c
index 223348b..415094f 100644
--- a/loader/pe_image.c
+++ b/loader/pe_image.c
@@ -17,11 +17,14 @@
 #include <string.h>
 #include <unistd.h>
 #include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
 #include "windows.h"
 #include "winbase.h"
 #include "callback.h"
 #include "neexe.h"
 #include "peexe.h"
+#include "process.h"
 #include "pe_image.h"
 #include "module.h"
 #include "global.h"
@@ -33,8 +36,7 @@
 #include "debugger.h"
 #include "xmalloc.h"
 
-static void PE_InitDLL(HMODULE16 hModule, DWORD type, LPVOID lpReserved);
-
+static void PE_InitDLL(PE_MODREF* modref, DWORD type, LPVOID lpReserved);
 
 /* convert PE image VirtualAddress to Real Address */
 #define RVA(x) ((unsigned int)load_addr+(unsigned int)(x))
@@ -91,25 +93,40 @@
  */
 FARPROC32 PE_FindExportedFunction(struct pe_data *pe, LPCSTR funcName)
 {
-	IMAGE_EXPORT_DIRECTORY * exports = pe->pe_export;
-	unsigned load_addr = pe->load_addr;
-	u_short * ordinal;
-	u_long * function;
-	u_char ** name, *ename;
-	int i;
+	IMAGE_EXPORT_DIRECTORY 		*exports;
+	unsigned			load_addr;
+	u_short				* ordinal;
+	u_long				* function;
+	u_char				** name, *ename;
+	int				i;
+	PDB32				*process=(PDB32*)GetCurrentProcessId();
+	PE_MODREF			*pem;
+
+	pem = process->modref_list;
+	while (pem && (pem->pe_module != pe))
+		pem=pem->next;
+	if (!pem) {
+		fprintf(stderr,"No MODREF found for PE_MODULE %p in process %p\n",pe,process);
+		return NULL;
+	}
+	load_addr	= pem->load_addr;
+	exports		= pem->pe_export;
 
 	if (HIWORD(funcName))
 		dprintf_win32(stddeb,"PE_FindExportedFunction(%s)\n",funcName);
 	else
 		dprintf_win32(stddeb,"PE_FindExportedFunction(%d)\n",(int)funcName);
-	if (!exports)
+	if (!exports) {
+		fprintf(stderr,"Module %p/MODREF %p doesn't have a exports table.\n",pe,pem);
 		return NULL;
-	ordinal=(u_short*) RVA(exports->AddressOfNameOrdinals);
-	function=(u_long*) RVA(exports->AddressOfFunctions);
-	name=(u_char **) RVA(exports->AddressOfNames);
+	}
+	ordinal	= (u_short*)  RVA(exports->AddressOfNameOrdinals);
+	function= (u_long*)   RVA(exports->AddressOfFunctions);
+	name	= (u_char **) RVA(exports->AddressOfNames);
+
 	if (HIWORD(funcName)) {
 		for(i=0; i<exports->NumberOfNames; i++) {
-			ename=(char*) RVA(*name);
+			ename=(char*)RVA(*name);
 			if(!strcmp(ename,funcName))
 				return (FARPROC32) RVA(function[*ordinal]);
 			ordinal++;
@@ -127,18 +144,17 @@
 }
 
 void 
-fixup_imports (struct pe_data *pe, HMODULE16 hModule)
+fixup_imports (PDB32 *process,PE_MODREF *pem)
 {
-    IMAGE_IMPORT_DESCRIPTOR *pe_imp;
-    int	fixup_failed = 0;
-    unsigned int load_addr = pe->load_addr;
-    int i;
-    NE_MODULE *ne_mod;
-    HMODULE16 *mod_ptr;
-    char *modname;
+    PE_MODULE			*pe = pem->pe_module;
+    IMAGE_IMPORT_DESCRIPTOR	*pe_imp;
+    int	fixup_failed		= 0;
+    unsigned int load_addr	= pem->load_addr;
+    int				i;
+    char			*modname;
     
-    if (pe->pe_export)
-    	modname = (char*) RVA(pe->pe_export->Name);
+    if (pem->pe_export)
+    	modname = (char*) RVA(pem->pe_export->Name);
     else
         modname = "<unknown>";
 
@@ -146,40 +162,77 @@
     dprintf_win32 (stddeb, "\nDumping imports list\n");
 
     /* first, count the number of imported non-internal modules */
-    pe_imp = pe->pe_import;
+    pe_imp = pem->pe_import;
+    if (!pe_imp) 
+    	fprintf(stderr,"no import directory????\n");
 
     /* FIXME: should terminate on 0 Characteristics */
     for (i = 0; pe_imp->Name; pe_imp++)
 	i++;
 
-    /* Now, allocate memory for dlls_to_init */
-    ne_mod = GlobalLock16 (hModule);
-    ne_mod->dlls_to_init = GLOBAL_Alloc(GMEM_ZEROINIT, (i+1)*sizeof(HMODULE16),
-                                        hModule, FALSE, FALSE, FALSE);
-    mod_ptr = GlobalLock16 (ne_mod->dlls_to_init);
-    /* load the modules and put their handles into the list */
+    /* load the imported modules. They are automatically 
+     * added to the modref list of the process.
+     */
  
-     /* FIXME: should terminate on 0 Characteristics */
-     for (i = 0, pe_imp = pe->pe_import; pe_imp->Name; pe_imp++) {
+    /* FIXME: should terminate on 0 Characteristics */
+    for (i = 0, pe_imp = pem->pe_import; pe_imp->Name; pe_imp++) {
+    	HMODULE32	res;
+	PE_MODREF	*xpem,**ypem;
+
+
  	char *name = (char *) RVA(pe_imp->Name);
-	mod_ptr[i] = MODULE_Load( name, (LPVOID)-1, FALSE );
-	if (mod_ptr[i] <= (HMODULE16) 32) {
+
+	/* don't use MODULE_Load, Win32 creates new task differently */
+	res = PE_LoadLibraryEx32A( name, 0, 0 );
+	if (res <= (HMODULE32) 32) {
 	    char *p, buffer[256];
 
 	    /* Try with prepending the path of the current module */
-	    GetModuleFileName16 (hModule, buffer, sizeof (buffer));
+	    GetModuleFileName32A (pe->mappeddll, buffer, sizeof (buffer));
 	    if (!(p = strrchr (buffer, '\\')))
 		p = buffer;
 	    strcpy (p + 1, name);
-	    mod_ptr[i] = MODULE_Load( buffer, (LPVOID)-1, FALSE );
+	    res = PE_LoadLibraryEx32A( buffer, 0, 0 );
 	}
-	if (mod_ptr[i] <= (HMODULE16) 32) {
+	if (res <= (HMODULE32) 32) {
 	    fprintf (stderr, "Module %s not found\n", name);
 	    exit (0);
 	}
+	res = MODULE_HANDLEtoHMODULE32(res);
+	xpem = pem->next;
+	while (xpem) {
+		if (xpem->pe_module->mappeddll == res)
+			break;
+		xpem = xpem->next;
+	}
+	if (xpem) {
+		/* it has been loaded *BEFORE* us, so we have to init
+		 * it before us. we just swap the two modules which should
+		 * work.
+		 */
+		/* unlink xpem from chain */
+		ypem = &(process->modref_list);
+		while (*ypem) {
+			if ((*ypem)==xpem)
+				break;
+			ypem = &((*ypem)->next);
+		}
+		*ypem		= xpem->next;
+
+		/* link it directly before pem */
+		ypem		= &(process->modref_list);
+		while (*ypem) {
+			if ((*ypem)==pem)
+				break;
+			ypem = &((*ypem)->next);
+		}
+		*ypem		= xpem;
+		xpem->next	= pem;
+		
+	}
 	i++;
     }
-    pe_imp = pe->pe_import;
+    pe_imp = pem->pe_import;
     while (pe_imp->Name) {
 	char			*Module;
 	IMAGE_IMPORT_BY_NAME	*pe_name;
@@ -269,9 +322,9 @@
     if (fixup_failed) exit(1);
 }
 
-static void calc_vma_size(struct pe_data *pe)
+static int calc_vma_size(struct pe_data *pe)
 {
-  int i;
+  int i,vma_size = 0;
 
   dprintf_win32(stddeb, "Dump of segment table\n");
   dprintf_win32(stddeb, "   Name    VSz  Vaddr     SzRaw   Fileadr  *Reloc *Lineum #Reloc #Linum Char\n");
@@ -288,19 +341,21 @@
 	     pe->pe_seg[i].NumberOfRelocations,
 	     pe->pe_seg[i].NumberOfLinenumbers,
 	     pe->pe_seg[i].Characteristics);
-	  pe->vma_size = MAX(pe->vma_size,
+	  vma_size = MAX(vma_size,
 	  		pe->pe_seg[i].VirtualAddress + 
 			pe->pe_seg[i].SizeOfRawData);
     }
+    return vma_size;
 }
 
-static void do_relocations(struct pe_data *pe)
+static void do_relocations(PE_MODREF *pem)
 {
-	int delta = pe->load_addr - pe->base_addr;
-	unsigned int load_addr = pe->load_addr;
-	IMAGE_BASE_RELOCATION	*r = pe->pe_reloc;
-	int hdelta = (delta >> 16) & 0xFFFF;
-	int ldelta = delta & 0xFFFF;
+	int delta = pem->load_addr - pem->pe_module->pe_header->OptionalHeader.ImageBase;
+
+	unsigned int			load_addr= pem->load_addr;
+	IMAGE_BASE_RELOCATION		*r = pem->pe_reloc;
+	int				hdelta = (delta >> 16) & 0xFFFF;
+	int				ldelta = delta & 0xFFFF;
 
 	/* int reloc_size = */
 
@@ -360,27 +415,47 @@
 
 /**********************************************************************
  *			PE_LoadImage
- * Load one PE format executable into memory
+ * Load one PE format DLL/EXE into memory
+ * 
+ * Unluckily we can't just mmap the sections where we want them, for 
+ * (at least) Linux does only support offset with are multiples of the
+ * underlying filesystemblocksize, but PE DLLs usually have alignments of 512
+ * byte. This fails for instance when you try to map from CDROM (bsize 2048).
+ *
+ * BUT we have to map the whole image anyway, for Win32 programs sometimes
+ * want to access them. (HMODULE32 point to the start of it)
  */
-static void PE_LoadImage( struct pe_data **ret_pe, int fd, HMODULE16 hModule, WORD offset, OFSTRUCT *ofs )
+static PE_MODULE *PE_LoadImage( int fd )
 {
 	struct pe_data		*pe;
-	int			i, result;
-	int			load_addr;
-	IMAGE_DATA_DIRECTORY	dir;
-	char			buffer[200];
 	DBG_ADDR		daddr;
-	char			*modname;
+	struct stat		stbuf;
 
 	daddr.seg=0;
 	daddr.type = NULL;
+	if (-1==fstat(fd,&stbuf)) {
+		perror("PE_LoadImage:fstat");
+		return NULL;
+	}
 	pe = xmalloc(sizeof(struct pe_data));
 	memset(pe,0,sizeof(struct pe_data));
-	pe->pe_header = xmalloc(sizeof(IMAGE_NT_HEADERS));
 
-	/* read PE header */
-	lseek( fd, offset, SEEK_SET);
-	read( fd, pe->pe_header, sizeof(IMAGE_NT_HEADERS));
+	/* map the PE image somewhere */
+	pe->mappeddll = (HMODULE32)mmap(NULL,stbuf.st_size,PROT_READ,MAP_SHARED,fd,0);
+	if (!pe->mappeddll || pe->mappeddll==-1) {
+		perror("PE_LoadImage:mmap");
+		free(pe);
+		return NULL;
+	}
+	/* link PE header */
+	pe->pe_header = (IMAGE_NT_HEADERS*)(pe->mappeddll+(((IMAGE_DOS_HEADER*)pe->mappeddll)->e_lfanew));
+	if (pe->pe_header->Signature!=IMAGE_NT_SIGNATURE) {
+		fprintf(stderr,"image doesn't have PE signature, but 0x%08lx\n",
+			pe->pe_header->Signature
+		);
+		free(pe);
+		return NULL;
+	}
 
 	if (pe->pe_header->FileHeader.Machine != IMAGE_FILE_MACHINE_I386) {
 		fprintf(stderr,"trying to load PE image for unsupported architecture (");
@@ -403,48 +478,66 @@
 			fprintf(stderr,"Unknown-%04x",pe->pe_header->FileHeader.Machine);break;
 		}
 		fprintf(stderr,")\n");
-		return;
+		return NULL;
 	}
-/* FIXME: this is a *horrible* hack to make COMDLG32.DLL load OK. The
- * problem needs to be fixed properly at some stage 
+	pe->pe_seg = (IMAGE_SECTION_HEADER*)(((LPBYTE)(pe->pe_header+1))-
+		 (16 - pe->pe_header->OptionalHeader.NumberOfRvaAndSizes) * sizeof(IMAGE_DATA_DIRECTORY));
+
+/* FIXME: the (16-...) is a *horrible* hack to make COMDLG32.DLL load OK. The
+ * problem needs to be fixed properly at some stage.
  */
-	if (pe->pe_header->OptionalHeader.NumberOfRvaAndSizes != 16) {
-		printf("Short PE Header!!!\n");
-		lseek( fd, -(16 - pe->pe_header->OptionalHeader.NumberOfRvaAndSizes) * sizeof(IMAGE_DATA_DIRECTORY), SEEK_CUR);
+ 	return pe;
+}
+
+/**********************************************************************
+ * This maps a loaded PE dll into the address space of the specified process.
+ */
+void
+PE_MapImage(PE_MODULE *pe,PDB32 *process, OFSTRUCT *ofs, DWORD flags) {
+	PE_MODREF		*pem;
+	int			i, result;
+	int			load_addr;
+	IMAGE_DATA_DIRECTORY	dir;
+	char			buffer[200];
+	DBG_ADDR		daddr;
+	char			*modname;
+	int			vma_size;
+	
+	pem		= (PE_MODREF*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(*pem));
+	/* NOTE: fixup_imports takes care of the correct order */
+	pem->next	= process->modref_list;
+	process->modref_list = pem;
+
+	pem->pe_module	= pe;
+	if (!(pe->pe_header->FileHeader.Characteristics & IMAGE_FILE_DLL)) {
+		if (process->exe_modref)
+			fprintf(stderr,"overwriting old exe_modref... arrgh\n");
+		process->exe_modref = pem;
 	}
 
-	/* read sections */
-	pe->pe_seg = xmalloc(sizeof(IMAGE_SECTION_HEADER) * 
-				   pe->pe_header->FileHeader.NumberOfSections);
-	read( fd, pe->pe_seg, sizeof(IMAGE_SECTION_HEADER) * 
-			pe->pe_header->FileHeader.NumberOfSections);
-
-	load_addr = pe->pe_header->OptionalHeader.ImageBase;
-	pe->base_addr=load_addr;
-	pe->vma_size=0;
+	load_addr 	= pe->pe_header->OptionalHeader.ImageBase;
 	dprintf_win32(stddeb, "Load addr is %x\n",load_addr);
-	calc_vma_size(pe);
-	load_addr = (int) VirtualAlloc( (void*)pe->base_addr, pe->vma_size, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE );
-        pe->load_addr = load_addr;
+	vma_size = calc_vma_size(pe);
+	load_addr 	= (int) VirtualAlloc( (void*)load_addr, vma_size, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE );
+        pem->load_addr	= load_addr;
 
-	dprintf_win32(stddeb, "Load addr is really %x, range %x\n",
-		pe->load_addr, pe->vma_size);
+	dprintf_win32(stddeb, "Load addr is really %lx, range %x\n",
+		pem->load_addr, vma_size);
 	
 
 	for(i=0; i < pe->pe_header->FileHeader.NumberOfSections; i++)
 	{
-		/* load only non-BSS segments */
-		if(!(pe->pe_seg[i].Characteristics & 
-			IMAGE_SCN_CNT_UNINITIALIZED_DATA))
-                {
-                    if(lseek(fd,pe->pe_seg[i].PointerToRawData,SEEK_SET) == -1
-                       || read(fd,(char*)RVA(pe->pe_seg[i].VirtualAddress),
-                               pe->pe_seg[i].SizeOfRawData) != pe->pe_seg[i].SizeOfRawData)
-                    {
-			fprintf(stderr,"Failed to load section %x\n", i);
-			exit(0);
-                    }
-                }
+		/* memcpy only non-BSS segments */
+		/* FIXME: this should be done by mmap(..MAP_PRIVATE|MAP_FIXED..)
+		 * but it is not possible for (at least) Linux needs an offset
+		 * aligned to a block on the filesystem.
+		 */
+		if(!(pe->pe_seg[i].Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA))
+		    memcpy((char*)RVA(pe->pe_seg[i].VirtualAddress),
+		    	(char*)(pe->mappeddll+pe->pe_seg[i].PointerToRawData),
+			pe->pe_seg[i].SizeOfRawData
+		    );
+
 		result = RVA (pe->pe_seg[i].VirtualAddress);
 #if 1
 		/* not needed, memory is zero */
@@ -456,16 +549,16 @@
 #endif
 
 		if(strcmp(pe->pe_seg[i].Name, ".idata") == 0)
-			pe->pe_import = (LPIMAGE_IMPORT_DESCRIPTOR) result;
+			pem->pe_import = (LPIMAGE_IMPORT_DESCRIPTOR) result;
 
 		if(strcmp(pe->pe_seg[i].Name, ".edata") == 0)
-			pe->pe_export = (LPIMAGE_EXPORT_DIRECTORY) result;
+			pem->pe_export = (LPIMAGE_EXPORT_DIRECTORY) result;
 
 		if(strcmp(pe->pe_seg[i].Name, ".rsrc") == 0)
-			pe->pe_resource = (LPIMAGE_RESOURCE_DIRECTORY) result;
+			pem->pe_resource = (LPIMAGE_RESOURCE_DIRECTORY) result;
 
 		if(strcmp(pe->pe_seg[i].Name, ".reloc") == 0)
-			pe->pe_reloc = (LPIMAGE_BASE_RELOCATION) result;
+			pem->pe_reloc = (LPIMAGE_BASE_RELOCATION) result;
 	}
 
 	/* There is word that the actual loader does not care about the
@@ -473,26 +566,26 @@
 	dir=pe->pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
 	if(dir.Size)
 	{
-		if(pe->pe_export && (int)pe->pe_export!=RVA(dir.VirtualAddress))
+		if(pem->pe_export && (int)pem->pe_export!=RVA(dir.VirtualAddress))
 			fprintf(stderr,"wrong export directory??\n");
 		/* always trust the directory */
-		pe->pe_export = (LPIMAGE_EXPORT_DIRECTORY) RVA(dir.VirtualAddress);
+		pem->pe_export = (LPIMAGE_EXPORT_DIRECTORY) RVA(dir.VirtualAddress);
 	}
 
 	dir=pe->pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
 	if(dir.Size)
 	{
-		if(pe->pe_import && (int)pe->pe_import!=RVA(dir.VirtualAddress))
+		if(pem->pe_import && (int)pem->pe_import!=RVA(dir.VirtualAddress))
 			fprintf(stderr,"wrong import directory??\n");
-		pe->pe_import = (LPIMAGE_IMPORT_DESCRIPTOR) RVA(dir.VirtualAddress);
+		pem->pe_import = (LPIMAGE_IMPORT_DESCRIPTOR) RVA(dir.VirtualAddress);
 	}
 
 	dir=pe->pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE];
 	if(dir.Size)
 	{
-		if(pe->pe_resource && (int)pe->pe_resource!=RVA(dir.VirtualAddress))
+		if(pem->pe_resource && (int)pem->pe_resource!=RVA(dir.VirtualAddress))
 			fprintf(stderr,"wrong resource directory??\n");
-		pe->pe_resource = (LPIMAGE_RESOURCE_DIRECTORY) RVA(dir.VirtualAddress);
+		pem->pe_resource = (LPIMAGE_RESOURCE_DIRECTORY) RVA(dir.VirtualAddress);
 	}
 
 	if(pe->pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size)
@@ -506,15 +599,15 @@
 	dir=pe->pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC];
 	if(dir.Size)
 	{
-		if(pe->pe_reloc && (int)pe->pe_reloc!= RVA(dir.VirtualAddress))
+		if(pem->pe_reloc && (int)pem->pe_reloc!= RVA(dir.VirtualAddress))
 			fprintf(stderr,"wrong relocation list??\n");
-		pe->pe_reloc = (void *) RVA(dir.VirtualAddress);
+		pem->pe_reloc = (void *) RVA(dir.VirtualAddress);
 	}
 
 	if(pe->pe_header->OptionalHeader.DataDirectory
 		[IMAGE_DIRECTORY_ENTRY_DEBUG].Size)
 	  {
-	    DEBUG_RegisterDebugInfo(fd, pe, load_addr, 
+	    DEBUG_RegisterDebugInfo(pe, load_addr, 
 			pe->pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress,
 			pe->pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size);
 	  }
@@ -549,18 +642,12 @@
 	if(pe->pe_header->OptionalHeader.DataDirectory[15].Size)
 		dprintf_win32(stdnimp,"Unknown directory 15 ignored\n");
 
-	if(pe->pe_reloc) do_relocations(pe);
-
-	/* Do exports before imports because fixup_imports
-	 * may load a module that references this module.
-	 */
-
-	if(pe->pe_export) dump_exports(pe->pe_export,load_addr);
-	*ret_pe = pe;	/* make export list available for GetProcAddress */
-	if(pe->pe_import) fixup_imports(pe, hModule);
+	if(pem->pe_reloc)	do_relocations(pem);
+	if(pem->pe_export)	dump_exports(pem->pe_export,load_addr);
+	if(pem->pe_import)	fixup_imports(process,pem);
   		
-	if (pe->pe_export)
-		modname = (char*)RVA(pe->pe_export->Name);
+	if (pem->pe_export)
+		modname = (char*)RVA(pem->pe_export->Name);
 	else {
 		char *s;
 		modname = s = ofs->szPathName;
@@ -587,31 +674,70 @@
 
 HINSTANCE16 MODULE_CreateInstance(HMODULE16 hModule,LOADPARAMS *params);
 
+/******************************************************************************
+ * The PE Library Loader frontend. 
+ * FIXME: handle the flags.
+ */
+HMODULE32 PE_LoadLibraryEx32A (LPCSTR name, HFILE32 hFile, DWORD flags) {
+	OFSTRUCT	ofs;
+	HMODULE32	hModule;
+	NE_MODULE	*pModule;
+
+	if ((hModule = MODULE_FindModule( name )))
+		return hModule;
+
+	/* try to load builtin, enabled modules first */
+	if ((hModule = BUILTIN_LoadModule( name, FALSE )))
+		return hModule;
+
+	/* try to open the specified file */
+	if (HFILE_ERROR32==(hFile=OpenFile32(name,&ofs,OF_READ))) {
+		/* Now try the built-in even if disabled */
+		if ((hModule = BUILTIN_LoadModule( name, TRUE ))) {
+			fprintf( stderr, "Warning: could not load Windows DLL '%s', using built-in module.\n", name );
+			return hModule;
+		}
+		return 1;
+	}
+	if ((hModule = MODULE_CreateDummyModule( &ofs )) < 32) {
+		_lclose32(hFile);
+		return hModule;
+	}
+
+	pModule		= (NE_MODULE *)GlobalLock16( hModule );
+	pModule->flags	= NE_FFLAGS_WIN32;
+
+	/* FIXME: check if pe image loaded already ... */
+	pModule->pe_module = PE_LoadImage( FILE_GetUnixHandle(hFile) );
+	_lclose32(hFile);
+	if (!pModule->pe_module)
+		return 21;
+	/* recurse */
+	PE_MapImage(pModule->pe_module,(PDB32*)GetCurrentProcessId(),&ofs,flags);
+	return pModule->pe_module->mappeddll;
+}
+
+/*****************************************************************************
+ * Load the PE main .EXE. All other loading is done by PE_LoadLibraryEx32A
+ * FIXME: this function should use PE_LoadLibraryEx32A, but currently can't
+ * due to the TASK_CreateTask stuff.
+ */
 HINSTANCE16 PE_LoadModule( HFILE32 hFile, OFSTRUCT *ofs, LOADPARAMS* params )
 {
     HMODULE16 hModule;
     HINSTANCE16 hInstance;
     NE_MODULE *pModule;
-    IMAGE_DOS_HEADER mz_header;
-    int fd;
 
     if ((hModule = MODULE_CreateDummyModule( ofs )) < 32) return hModule;
     pModule = (NE_MODULE *)GlobalLock16( hModule );
     pModule->flags = NE_FFLAGS_WIN32;
 
-    /* FIXME: Hack because PE_LoadModule is recursive */
-    fd = dup( FILE_GetUnixHandle(hFile) );
-    _lclose32( hFile );
-    lseek( fd, 0, SEEK_SET );
-    read( fd, &mz_header, sizeof(mz_header) );
-
-    PE_LoadImage( &pModule->pe_module, fd, hModule, mz_header.e_lfanew, ofs );
+    pModule->pe_module = PE_LoadImage( FILE_GetUnixHandle(hFile) );
+    _lclose32(hFile);
     if (!pModule->pe_module)
     	return 21;
-    close( fd );
 
     hInstance = MODULE_CreateInstance( hModule, params );
-
     if (!(pModule->pe_module->pe_header->FileHeader.Characteristics & IMAGE_FILE_DLL))
     {
         TASK_CreateTask( hModule, hInstance, 0,
@@ -619,10 +745,11 @@
                          (LPSTR)PTR_SEG_TO_LIN( params->cmdLine ),
                          *((WORD*)PTR_SEG_TO_LIN(params->showCmd) + 1) );
     }
+    PE_MapImage(pModule->pe_module,(PDB32*)GetCurrentProcessId(),ofs,0);
     return hInstance;
 }
 
-int PE_UnloadImage( HMODULE16 hModule )
+int PE_UnloadImage( HMODULE32 hModule )
 {
 	printf("PEunloadImage() called!\n");
 	/* free resources, image, unmap */
@@ -634,19 +761,13 @@
  * DLL_PROCESS_ATTACH. Only new created threads do DLL_THREAD_ATTACH
  * (SDK)
  */
-static void PE_InitDLL(HMODULE16 hModule, DWORD type,LPVOID lpReserved)
+static void PE_InitDLL(PE_MODREF *pem, DWORD type,LPVOID lpReserved)
 {
-    NE_MODULE *pModule;
-    PE_MODULE *pe;
-    unsigned int load_addr;
+    PE_MODULE		*pe = pem->pe_module;
+    unsigned int	load_addr = pem->load_addr;
 
-    hModule = GetExePtr(hModule);
-    if (!(pModule = MODULE_GetPtr(hModule))) return;
-    if (!(pModule->flags & NE_FFLAGS_WIN32) || !(pe = pModule->pe_module))
-        return;
-
-    load_addr = pe->load_addr;
-
+    if (type==DLL_PROCESS_ATTACH)
+	pem->flags |= PE_MODREF_PROCESS_ATTACHED;
 #ifndef WINELIB
     if (Options.debug) {
             DBG_ADDR addr = { NULL, 0, RVA(pe->pe_header->OptionalHeader.AddressOfEntryPoint) };
@@ -666,58 +787,81 @@
     if (	(pe->pe_header->FileHeader.Characteristics & IMAGE_FILE_DLL) &&
 		(pe->pe_header->OptionalHeader.AddressOfEntryPoint)
     ) {
-	printf("InitPEDLL() called!\n");
-	CallDLLEntryProc32( 
-	    (FARPROC32)RVA(pe->pe_header->OptionalHeader.AddressOfEntryPoint),
-	    hModule,
-	    type,
-	    (DWORD)lpReserved
-	);
+        FARPROC32 entry = (FARPROC32)RVA(pe->pe_header->OptionalHeader.AddressOfEntryPoint);
+        dprintf_relay( stddeb, "CallTo32(entryproc=%p,module=%d,type=%ld,res=%p)\n",
+                       entry, pe->mappeddll, type, lpReserved );
+        entry( pe->mappeddll, type, lpReserved );
     }
 }
 
-void PE_InitializeDLLs(HMODULE16 hModule,DWORD type,LPVOID lpReserved)
-{
-	NE_MODULE *pModule;
-	HMODULE16 *pDLL;
-	pModule = MODULE_GetPtr( GetExePtr(hModule) );
-	if (pModule->dlls_to_init)
-	{
-		HGLOBAL16 to_init = pModule->dlls_to_init;
-		pModule->dlls_to_init = 0;
-	
-		for (pDLL = (HMODULE16 *)GlobalLock16( to_init ); *pDLL; pDLL++)
-		{
-                    PE_InitializeDLLs( *pDLL, type, lpReserved);
+/* Call the DLLentry function of all dlls used by that process.
+ * (NOTE: this may recursively call this function (if a library calls
+ * LoadLibrary) ... but it won't matter)
+ */
+void PE_InitializeDLLs(PDB32 *process,DWORD type,LPVOID lpReserved) {
+	PE_MODREF	*pem;
+
+	pem = process->modref_list;
+	while (pem) {
+		if (pem->flags & PE_MODREF_NO_DLL_CALLS) {
+			pem = pem->next;
+			continue;
 		}
-		GlobalFree16( to_init );
+		if (type==DLL_PROCESS_ATTACH) {
+			if (pem->flags & PE_MODREF_PROCESS_ATTACHED) {
+				pem = pem->next;
+				continue;
+			}
+		}
+		PE_InitDLL( pem, type, lpReserved );
+		pem = pem->next;
 	}
-	PE_InitDLL( hModule, type, lpReserved );
 }
 
-void PE_InitTls( PE_MODULE *module )
+void PE_InitTls(PDB32 *pdb)
 {
-   /* FIXME: tls callbacks ??? */
-   DWORD  index;
-   DWORD  datasize;
-   DWORD  size;
-   LPVOID mem;
-   LPIMAGE_TLS_DIRECTORY pdir;
+	/* FIXME: tls callbacks ??? */
+	PE_MODREF		*pem;
+	IMAGE_NT_HEADERS	*peh;
+	DWORD			size,datasize,index;
+	LPVOID			mem;
+	LPIMAGE_TLS_DIRECTORY	pdir;
 
-    if (!module->pe_header->OptionalHeader.DataDirectory[IMAGE_FILE_THREAD_LOCAL_STORAGE].VirtualAddress)
-        return;
+	pem = pdb->modref_list;
+	while (pem) {
+		peh = pem->pe_module->pe_header;
+		if (!peh->OptionalHeader.DataDirectory[IMAGE_FILE_THREAD_LOCAL_STORAGE].VirtualAddress) {
+			pem = pem->next;
+			continue;
+		}
+		pdir = (LPVOID)(pem->load_addr + peh->OptionalHeader.
+			DataDirectory[IMAGE_FILE_THREAD_LOCAL_STORAGE].VirtualAddress);
+		index	= TlsAlloc();
+		datasize= pdir->EndAddressOfRawData-pdir->StartAddressOfRawData;
+		size	= datasize + pdir->SizeOfZeroFill;
+		mem=VirtualAlloc(0,size,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
+		memcpy(mem,(LPVOID) pdir->StartAddressOfRawData, datasize);
+		TlsSetValue(index,mem);
+		*(pdir->AddressOfIndex)=index;   
+		pem=pem->next;
+	}
+}
 
-    pdir = (LPVOID)(module->load_addr + module->pe_header->OptionalHeader.
-               DataDirectory[IMAGE_FILE_THREAD_LOCAL_STORAGE].VirtualAddress);
-    index = TlsAlloc();
-    datasize = pdir->EndAddressOfRawData-pdir->StartAddressOfRawData;
-    size     = datasize + pdir->SizeOfZeroFill;
-        
-    mem = VirtualAlloc(0,size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE );
-    
-    memcpy(mem,(LPVOID) pdir->StartAddressOfRawData, datasize);
-    TlsSetValue(index,mem);
-    *(pdir->AddressOfIndex)=index;   
+/****************************************************************************
+ *		DisableThreadLibraryCalls (KERNEL32.74)
+ * Don't call DllEntryPoint for DLL_THREAD_{ATTACH,DETACH} if set.
+ */
+BOOL32 WINAPI DisableThreadLibraryCalls(HMODULE32 hModule)
+{
+	PDB32	*process = (PDB32*)GetCurrentProcessId();
+	PE_MODREF	*pem = process->modref_list;
+
+	while (pem) {
+		if (pem->pe_module->mappeddll == hModule)
+			pem->flags|=PE_MODREF_NO_DLL_CALLS;
+		pem = pem->next;
+	}
+	return TRUE;
 }
 
 #endif /* WINELIB */
diff --git a/loader/pe_resource.c b/loader/pe_resource.c
index 2d2bbaf..9b8ae7e 100644
--- a/loader/pe_resource.c
+++ b/loader/pe_resource.c
@@ -18,6 +18,8 @@
 #include "pe_image.h"
 #include "module.h"
 #include "heap.h"
+#include "task.h"
+#include "process.h"
 #include "libres.h"
 #include "stackframe.h"
 #include "neexe.h"
@@ -25,20 +27,24 @@
 #include "debug.h"
 
 /**********************************************************************
- *  HMODULE32toPE_MODULE 
+ *  HMODULE32toPE_MODREF 
  *
- * small helper function to get a PE_MODULE from a passed HMODULE32
+ * small helper function to get a PE_MODREF from a passed HMODULE32
  */
-static PE_MODULE*
-HMODULE32toPE_MODULE(HMODULE32 hmod) {
+static PE_MODREF*
+HMODULE32toPE_MODREF(HMODULE32 hmod) {
 	NE_MODULE	*pModule;
+	PDB32		*pdb = (PDB32*)GetCurrentProcessId();
+	PE_MODREF	*pem;
 
 	if (!hmod) hmod = GetTaskDS(); /* FIXME: correct? */
-	hmod = GetExePtr( hmod );  /* In case we were passed an hInstance */
-
+	hmod = MODULE_HANDLEtoHMODULE32( hmod );
+	if (!hmod) return NULL;
 	if (!(pModule = MODULE_GetPtr( hmod ))) return 0;
-	if (!(pModule->flags & NE_FFLAGS_WIN32)) return 0;
-	return pModule->pe_module;
+	pem = pdb->modref_list;
+	while (pem && pem->pe_module->mappeddll != hmod)
+		pem=pem->next;
+	return pem;
 }
 
 /**********************************************************************
@@ -106,12 +112,12 @@
     LPIMAGE_RESOURCE_DIRECTORY resdirptr;
     DWORD root;
     HANDLE32 result;
-    PE_MODULE	*pe = HMODULE32toPE_MODULE(hModule);
+    PE_MODREF	*pem = HMODULE32toPE_MODREF(hModule);
 
-    if (!pe || !pe->pe_resource)
+    if (!pem || !pem->pe_resource)
     	return 0;
 
-    resdirptr = pe->pe_resource;
+    resdirptr = pem->pe_resource;
     root = (DWORD) resdirptr;
     if ((resdirptr = GetResDirEntryW(resdirptr, type, root)) == NULL)
 	return 0;
@@ -130,13 +136,13 @@
  */
 HANDLE32 PE_LoadResource32( HINSTANCE32 hModule, HANDLE32 hRsrc )
 {
-    PE_MODULE	*pe = HMODULE32toPE_MODULE(hModule);
+    PE_MODREF	*pem = HMODULE32toPE_MODREF(hModule);
 
-    if (!pe || !pe->pe_resource)
+    if (!pem || !pem->pe_resource)
     	return 0;
     if (!hRsrc)
    	 return 0;
-    return (HANDLE32) (pe->load_addr+((LPIMAGE_RESOURCE_DATA_ENTRY)hRsrc)->OffsetToData);
+    return (HANDLE32) (pem->load_addr+((LPIMAGE_RESOURCE_DATA_ENTRY)hRsrc)->OffsetToData);
 }
 
 
@@ -169,21 +175,21 @@
 
 DWORD PE_SizeofResource32( HINSTANCE32 hModule, HANDLE32 hRsrc )
 {
-    PE_MODULE	*pe = HMODULE32toPE_MODULE(hModule);
+    PE_MODREF	*pem = HMODULE32toPE_MODREF(hModule);
     DWORD	max,data;
     IMAGE_DATA_DIRECTORY	dir;
 
-    if (!pe || !pe->pe_resource)
+    if (!pem || !pem->pe_resource)
     	return 0;
     if (!hRsrc) return 0;
 
     max=(DWORD)-1;
-    dir=pe->pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE];
+    dir=pem->pe_module->pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE];
     if(dir.Size)
-    	max=(DWORD)pe->pe_resource+dir.Size;
+    	max=(DWORD)pem->pe_resource+dir.Size;
 
-    data=((DWORD)pe->load_addr+((LPIMAGE_RESOURCE_DATA_ENTRY)hRsrc)->OffsetToData);
-    walk_resdir(pe->load_addr,(DWORD)pe->pe_resource,0,data,0,&max);
+    data=((DWORD)pem->load_addr+((LPIMAGE_RESOURCE_DATA_ENTRY)hRsrc)->OffsetToData);
+    walk_resdir(pem->load_addr,(DWORD)pem->pe_resource,0,data,0,&max);
     return max-data;
 }
 
@@ -192,24 +198,24 @@
  */
 BOOL32
 PE_EnumResourceTypes32A(HMODULE32 hmod,ENUMRESTYPEPROC32A lpfun,LONG lparam) {
-    PE_MODULE	*pe = HMODULE32toPE_MODULE(hmod);
+    PE_MODREF	*pem = HMODULE32toPE_MODREF(hmod);
     int		i;
     LPIMAGE_RESOURCE_DIRECTORY		resdir;
     LPIMAGE_RESOURCE_DIRECTORY_ENTRY	et;
     BOOL32	ret;
     HANDLE32	heap = GetProcessHeap();	
 
-    if (!pe || !pe->pe_resource)
+    if (!pem || !pem->pe_resource)
     	return FALSE;
 
-    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pe->pe_resource;
+    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pem->pe_resource;
     et =(LPIMAGE_RESOURCE_DIRECTORY_ENTRY)((LPBYTE)resdir+sizeof(IMAGE_RESOURCE_DIRECTORY));
     ret = FALSE;
     for (i=0;i<resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries;i++) {
     	LPSTR	name;
 
 	if (HIWORD(et[i].u1.Name))
-		name = HEAP_strdupWtoA(heap,0,(LPWSTR)((LPBYTE)pe->pe_resource+et[i].u1.Name));
+		name = HEAP_strdupWtoA(heap,0,(LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.Name));
 	else
 		name = (LPSTR)et[i].u1.Name;
 	ret = lpfun(hmod,name,lparam);
@@ -226,22 +232,22 @@
  */
 BOOL32
 PE_EnumResourceTypes32W(HMODULE32 hmod,ENUMRESTYPEPROC32W lpfun,LONG lparam) {
-    PE_MODULE	*pe = HMODULE32toPE_MODULE(hmod);
+    PE_MODREF	*pem = HMODULE32toPE_MODREF(hmod);
     int		i;
     LPIMAGE_RESOURCE_DIRECTORY		resdir;
     LPIMAGE_RESOURCE_DIRECTORY_ENTRY	et;
     BOOL32	ret;
 
-    if (!pe || !pe->pe_resource)
+    if (!pem || !pem->pe_resource)
     	return FALSE;
 
-    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pe->pe_resource;
+    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pem->pe_resource;
     et =(LPIMAGE_RESOURCE_DIRECTORY_ENTRY)((LPBYTE)resdir+sizeof(IMAGE_RESOURCE_DIRECTORY));
     ret = FALSE;
     for (i=0;i<resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries;i++) {
 	LPWSTR	type;
     	if (HIWORD(et[i].u1.Name))
-		type = (LPWSTR)((LPBYTE)pe->pe_resource+et[i].u1.Name);
+		type = (LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.Name);
 	else
 		type = (LPWSTR)et[i].u1.Name;
 
@@ -259,7 +265,7 @@
 PE_EnumResourceNames32A(
 	HMODULE32 hmod,LPCSTR type,ENUMRESNAMEPROC32A lpfun,LONG lparam
 ) {
-    PE_MODULE	*pe = HMODULE32toPE_MODULE(hmod);
+    PE_MODREF	*pem = HMODULE32toPE_MODREF(hmod);
     int		i;
     LPIMAGE_RESOURCE_DIRECTORY		resdir;
     LPIMAGE_RESOURCE_DIRECTORY_ENTRY	et;
@@ -267,14 +273,14 @@
     HANDLE32	heap = GetProcessHeap();	
     LPWSTR	typeW;
 
-    if (!pe || !pe->pe_resource)
+    if (!pem || !pem->pe_resource)
     	return FALSE;
-    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pe->pe_resource;
+    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pem->pe_resource;
     if (HIWORD(type))
 	typeW = HEAP_strdupAtoW(heap,0,type);
     else
 	typeW = (LPWSTR)type;
-    resdir = GetResDirEntryW(resdir,typeW,(DWORD)pe->pe_resource);
+    resdir = GetResDirEntryW(resdir,typeW,(DWORD)pem->pe_resource);
     if (HIWORD(typeW))
     	HeapFree(heap,0,typeW);
     if (!resdir)
@@ -285,7 +291,7 @@
     	LPSTR	name;
 
 	if (HIWORD(et[i].u1.Name))
-	    name = HEAP_strdupWtoA(heap,0,(LPWSTR)((LPBYTE)pe->pe_resource+et[i].u1.Name));
+	    name = HEAP_strdupWtoA(heap,0,(LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.Name));
 	else
 	    name = (LPSTR)et[i].u1.Name;
 	ret = lpfun(hmod,type,name,lparam);
@@ -303,17 +309,17 @@
 PE_EnumResourceNames32W(
 	HMODULE32 hmod,LPCWSTR type,ENUMRESNAMEPROC32W lpfun,LONG lparam
 ) {
-    PE_MODULE	*pe = HMODULE32toPE_MODULE(hmod);
+    PE_MODREF	*pem = HMODULE32toPE_MODREF(hmod);
     int		i;
     LPIMAGE_RESOURCE_DIRECTORY		resdir;
     LPIMAGE_RESOURCE_DIRECTORY_ENTRY	et;
     BOOL32	ret;
 
-    if (!pe || !pe->pe_resource)
+    if (!pem || !pem->pe_resource)
     	return FALSE;
 
-    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pe->pe_resource;
-    resdir = GetResDirEntryW(resdir,type,(DWORD)pe->pe_resource);
+    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pem->pe_resource;
+    resdir = GetResDirEntryW(resdir,type,(DWORD)pem->pe_resource);
     if (!resdir)
     	return FALSE;
     et =(LPIMAGE_RESOURCE_DIRECTORY_ENTRY)((LPBYTE)resdir+sizeof(IMAGE_RESOURCE_DIRECTORY));
@@ -321,7 +327,7 @@
     for (i=0;i<resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries;i++) {
 	LPWSTR	name;
     	if (HIWORD(et[i].u1.Name))
-		name = (LPWSTR)((LPBYTE)pe->pe_resource+et[i].u1.Name);
+		name = (LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.Name);
 	else
 		name = (LPWSTR)et[i].u1.Name;
 	ret = lpfun(hmod,type,name,lparam);
@@ -339,7 +345,7 @@
 	HMODULE32 hmod,LPCSTR name,LPCSTR type,ENUMRESLANGPROC32A lpfun,
 	LONG lparam
 ) {
-    PE_MODULE	*pe = HMODULE32toPE_MODULE(hmod);
+    PE_MODREF	*pem = HMODULE32toPE_MODREF(hmod);
     int		i;
     LPIMAGE_RESOURCE_DIRECTORY		resdir;
     LPIMAGE_RESOURCE_DIRECTORY_ENTRY	et;
@@ -347,15 +353,15 @@
     HANDLE32	heap = GetProcessHeap();	
     LPWSTR	nameW,typeW;
 
-    if (!pe || !pe->pe_resource)
+    if (!pem || !pem->pe_resource)
     	return FALSE;
 
-    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pe->pe_resource;
+    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pem->pe_resource;
     if (HIWORD(name))
 	nameW = HEAP_strdupAtoW(heap,0,name);
     else
     	nameW = (LPWSTR)name;
-    resdir = GetResDirEntryW(resdir,nameW,(DWORD)pe->pe_resource);
+    resdir = GetResDirEntryW(resdir,nameW,(DWORD)pem->pe_resource);
     if (HIWORD(nameW))
     	HeapFree(heap,0,nameW);
     if (!resdir)
@@ -364,7 +370,7 @@
 	typeW = HEAP_strdupAtoW(heap,0,type);
     else
 	typeW = (LPWSTR)type;
-    resdir = GetResDirEntryW(resdir,typeW,(DWORD)pe->pe_resource);
+    resdir = GetResDirEntryW(resdir,typeW,(DWORD)pem->pe_resource);
     if (HIWORD(typeW))
     	HeapFree(heap,0,typeW);
     if (!resdir)
@@ -372,7 +378,7 @@
     et =(LPIMAGE_RESOURCE_DIRECTORY_ENTRY)((LPBYTE)resdir+sizeof(IMAGE_RESOURCE_DIRECTORY));
     ret = FALSE;
     for (i=0;i<resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries;i++) {
-    	/* languages are just ids... I hope */
+    	/* languages are just ids... I hopem */
 	ret = lpfun(hmod,name,type,et[i].u1.Id,lparam);
 	if (!ret)
 		break;
@@ -388,20 +394,20 @@
 	HMODULE32 hmod,LPCWSTR name,LPCWSTR type,ENUMRESLANGPROC32W lpfun,
 	LONG lparam
 ) {
-    PE_MODULE	*pe = HMODULE32toPE_MODULE(hmod);
+    PE_MODREF	*pem = HMODULE32toPE_MODREF(hmod);
     int		i;
     LPIMAGE_RESOURCE_DIRECTORY		resdir;
     LPIMAGE_RESOURCE_DIRECTORY_ENTRY	et;
     BOOL32	ret;
 
-    if (!pe || !pe->pe_resource)
+    if (!pem || !pem->pe_resource)
     	return FALSE;
 
-    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pe->pe_resource;
-    resdir = GetResDirEntryW(resdir,name,(DWORD)pe->pe_resource);
+    resdir = (LPIMAGE_RESOURCE_DIRECTORY)pem->pe_resource;
+    resdir = GetResDirEntryW(resdir,name,(DWORD)pem->pe_resource);
     if (!resdir)
     	return FALSE;
-    resdir = GetResDirEntryW(resdir,type,(DWORD)pe->pe_resource);
+    resdir = GetResDirEntryW(resdir,type,(DWORD)pem->pe_resource);
     if (!resdir)
     	return FALSE;
     et =(LPIMAGE_RESOURCE_DIRECTORY_ENTRY)((LPBYTE)resdir+sizeof(IMAGE_RESOURCE_DIRECTORY));
diff --git a/loader/resource.c b/loader/resource.c
index 31c6453..2654396 100644
--- a/loader/resource.c
+++ b/loader/resource.c
@@ -18,6 +18,7 @@
 #include "global.h"
 #include "heap.h"
 #include "neexe.h"
+#include "task.h"
 #include "accel.h"
 #include "module.h"
 #include "resource.h"
@@ -33,6 +34,11 @@
 
 extern WORD WINE_LanguageId;
 
+/* error message when 16-bit resource function is called for Win32 module */
+static const char* NEWin32FailureString = "fails with Win32 module\n";
+/* error message when 32-bit resource function is called for Win16 module */
+static const char* PEWin16FailureString = "fails with Win16 module\n";
+
 /**********************************************************************
  *	    FindResource16    (KERNEL.60)
  */
@@ -40,9 +46,10 @@
 {
     NE_MODULE *pModule;
 
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
+    hModule = MODULE_HANDLEtoHMODULE16( hModule ); 
     dprintf_resource(stddeb, "FindResource16: module=%04x type=", hModule );
     PrintId( type );
+
     if (HIWORD(name))  /* Check for '#xxx' name */
     {
 	char *ptr = PTR_SEG_TO_LIN( name );
@@ -50,20 +57,23 @@
 	    if (!(name = (SEGPTR)atoi( ptr + 1 ))) return 0;
 	}
     }
+
     dprintf_resource( stddeb, " name=" );
     PrintId( name );
     dprintf_resource( stddeb, "\n" );
-    if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
-#ifndef WINELIB
-    if (pModule->flags & NE_FFLAGS_WIN32)
+
+    if ((pModule = MODULE_GetPtr( hModule )))
     {
-        fprintf(stderr,"Don't know how to FindResource16() for Win32 module\n");
-        return 0;
-    }
-    return NE_FindResource( hModule, type, name );
+#ifndef WINELIB
+	if (pModule->flags & NE_FFLAGS_WIN32)
+	    fprintf(stderr,"FindResource16: %s", NEWin32FailureString);
+	else
+	    return NE_FindResource( hModule, type, name );
 #else
-    return LIBRES_FindResource16( hModule, name, type );
+	return LIBRES_FindResource16( hModule, name, type );
 #endif
+    }
+    return 0;
 }
 
 
@@ -109,7 +119,7 @@
     NE_MODULE *pModule;
 
     if (!hModule) hModule = GetTaskDS();
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
+    hModule = MODULE_HANDLEtoHMODULE32( hModule );
     dprintf_resource(stddeb, "FindResource32W: module=%08x type=", hModule );
     if (HIWORD(type))
     	dprintf_resource(stddeb,"%p",type);
@@ -145,21 +155,22 @@
 {
     NE_MODULE *pModule;
 
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
+    hModule = MODULE_HANDLEtoHMODULE16( hModule );
     dprintf_resource(stddeb, "LoadResource16: module=%04x res=%04x\n",
                      hModule, hRsrc );
     if (!hRsrc) return 0;
-    if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
-#ifndef WINELIB
-    if (pModule->flags & NE_FFLAGS_WIN32)
+    if ((pModule = MODULE_GetPtr( hModule )))
     {
-        fprintf(stderr,"Don't know how to LoadResource16() for Win32 module\n");
-        return 0;
-    }
-    return NE_LoadResource( hModule, hRsrc );
+#ifndef WINELIB
+	if (pModule->flags & NE_FFLAGS_WIN32)
+	    fprintf(stderr,"LoadResource16: %s", NEWin32FailureString);
+	else
+	    return NE_LoadResource( hModule, hRsrc );
 #else
-    return LIBRES_LoadResource( hModule, hRsrc );
+	return LIBRES_LoadResource( hModule, hRsrc );
 #endif
+    }
+    return 0;
 }
 
 /**********************************************************************
@@ -171,7 +182,7 @@
     NE_MODULE *pModule;
 
     if (!hModule) hModule = GetTaskDS(); /* FIXME: see FindResource32W */
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
+    hModule = MODULE_HANDLEtoHMODULE32( hModule );
     dprintf_resource(stddeb, "LoadResource32: module=%04x res=%04x\n",
                      hModule, hRsrc );
     if (!hRsrc) return 0;
@@ -179,7 +190,7 @@
     if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
     if (!(pModule->flags & NE_FFLAGS_WIN32))
     {
-    	fprintf(stderr,"LoadResource32: tried to load a non win32 resource.\n");
+    	fprintf(stderr,"LoadResource32: %s", PEWin16FailureString );
    	return 0;  /* FIXME? */
     }
     return PE_LoadResource32(hModule,hRsrc);
@@ -201,11 +212,11 @@
 
     dprintf_resource(stddeb, "LockResource: handle=%04x\n", handle );
     if (!handle) return (SEGPTR)0;
-    hModule = GetExePtr( handle );
+    hModule = MODULE_HANDLEtoHMODULE16( handle );
     if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
     if (pModule->flags & NE_FFLAGS_WIN32)
     {
-        fprintf(stderr,"Don't know how to LockResource() for Win32 module\n");
+        fprintf(stderr,"LockResource16: %s", NEWin32FailureString);
         return 0;
     }
     return NE_LockResource( hModule, handle );
@@ -223,11 +234,11 @@
 
     dprintf_resource(stddeb, "LockResource: handle=%04x\n", handle );
     if (!handle) return NULL;
-    hModule = GetExePtr( handle );
+    hModule = MODULE_HANDLEtoHMODULE16( handle );
     if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
     if (pModule->flags & NE_FFLAGS_WIN32)
     {
-        fprintf(stderr,"Don't know how to LockResource16() for Win32 module\n");
+        fprintf(stderr,"LockResource16: %s", NEWin32FailureString);
         return 0;
     }
     return (LPSTR)PTR_SEG_TO_LIN( NE_LockResource( hModule, handle ) );
@@ -257,11 +268,11 @@
 
     dprintf_resource(stddeb, "FreeResource16: handle=%04x\n", handle );
     if (!handle) return FALSE;
-    hModule = GetExePtr( handle );
+    hModule = MODULE_HANDLEtoHMODULE16( handle );
     if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
     if (pModule->flags & NE_FFLAGS_WIN32)
     {
-        fprintf(stderr,"Don't know how to FreeResource16() for Win32 module\n");
+        fprintf(stderr,"FreeResource16: %s", NEWin32FailureString);
         return 0;
     }
     return NE_FreeResource( hModule, handle );
@@ -287,7 +298,7 @@
 {
     NE_MODULE *pModule;
 
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
+    hModule = MODULE_HANDLEtoHMODULE16( hModule );
     dprintf_resource(stddeb, "AccessResource16: module=%04x res=%04x\n",
                      hModule, hRsrc );
     if (!hRsrc) return 0;
@@ -295,7 +306,7 @@
 #ifndef WINELIB
     if (pModule->flags & NE_FFLAGS_WIN32)
     {
-        fprintf(stderr,"Don't know how to AccessResource16() for Win32 module\n");
+        fprintf(stderr,"AccessResource16: %s", NEWin32FailureString);
         return 0;
     }
     return NE_AccessResource( hModule, hRsrc );
@@ -310,7 +321,7 @@
  */
 INT32 WINAPI AccessResource32( HINSTANCE32 hModule, HRSRC32 hRsrc )
 {
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
+    hModule = MODULE_HANDLEtoHMODULE32( hModule );
     dprintf_resource(stddeb, "AccessResource: module=%04x res=%04x\n",
                      hModule, hRsrc );
     if (!hRsrc) return 0;
@@ -326,14 +337,14 @@
 {
     NE_MODULE *pModule;
 
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
+    hModule = MODULE_HANDLEtoHMODULE16( hModule );
     dprintf_resource(stddeb, "SizeofResource16: module=%04x res=%04x\n",
                      hModule, hRsrc );
     if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
 #ifndef WINELIB
     if (pModule->flags & NE_FFLAGS_WIN32)
     {
-        fprintf(stderr,"Don't know how to SizeOfResource16() for Win32 module\n");
+        fprintf(stderr,"SizeOfResource16: %s", NEWin32FailureString);
         return 0;
     }
     return NE_SizeofResource( hModule, hRsrc );
@@ -348,7 +359,7 @@
  */
 DWORD WINAPI SizeofResource32( HINSTANCE32 hModule, HRSRC32 hRsrc )
 {
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
+    hModule = MODULE_HANDLEtoHMODULE32( hModule );
     dprintf_resource(stddeb, "SizeofResource32: module=%04x res=%04x\n",
                      hModule, hRsrc );
 #ifndef WINELIB
@@ -367,7 +378,7 @@
 {
     NE_MODULE *pModule;
 
-    hModule = GetExePtr( hModule );  /* In case we were passed an hInstance */
+    hModule = MODULE_HANDLEtoHMODULE16( hModule );
     dprintf_resource(stddeb, "AllocResource: module=%04x res=%04x size=%ld\n",
                      hModule, hRsrc, size );
     if (!hRsrc) return 0;
@@ -375,7 +386,7 @@
 #ifndef WINELIB
     if (pModule->flags & NE_FFLAGS_WIN32)
     {
-        fprintf(stderr,"Don't know how to AllocResource() for Win32 module\n");
+        fprintf(stderr,"AllocResource16: %s", NEWin32FailureString);
         return 0;
     }
     return NE_AllocResource( hModule, hRsrc, size );
@@ -394,7 +405,7 @@
 {
     dprintf_resource(stddeb,"DirectResAlloc(%04x,%04x,%04x)\n",
                      hInstance, wType, wSize );
-    hInstance = GetExePtr(hInstance);
+    hInstance = MODULE_HANDLEtoHMODULE16(hInstance);
     if(!hInstance)return 0;
     if(wType != 0x10)	/* 0x10 is the only observed value, passed from
                            CreateCursorIndirect. */
@@ -405,6 +416,9 @@
 
 /**********************************************************************
  *			LoadAccelerators16	[USER.177]
+ *
+ * FIXME: this code leaks memory because HACCEL must be a result of LoadResource()
+ *        (see TWIN for hints).
  */
 HACCEL16 WINAPI LoadAccelerators16(HINSTANCE16 instance, SEGPTR lpTableName)
 {
@@ -578,6 +592,8 @@
     int string_num;
     int i;
 
+    if (HIWORD(resource_id)==0xFFFF) /* netscape 3 passes this */
+	resource_id = (UINT32)(-((INT32)resource_id));
     dprintf_resource(stddeb, "LoadString: instance = %04x, id = %04x, buffer = %08x, "
 	   "length = %d\n", instance, (int)resource_id, (int) buffer, buflen);
 
@@ -747,15 +763,24 @@
 /**********************************************************************
  *	SetResourceHandler	(KERNEL.43)
  */
-FARPROC16 WINAPI SetResourceHandler( HINSTANCE16 instance, SEGPTR s,
-                                     FARPROC16 farproc )
+FARPROC16 WINAPI SetResourceHandler( HMODULE16 hModule, SEGPTR s,
+                                     FARPROC16 resourceHandler )
 {
-    if (HIWORD(s))
-	fprintf(stderr,"SetResourceHandler(%04x,%s,%p), empty STUB!\n",
-		instance,(char*)PTR_SEG_TO_LIN(s),farproc);
-    else
-	fprintf(stderr,"SetResourceHandler(%04x,0x%04x,%p), empty STUB!\n",
-		instance,LOWORD(s),farproc);
+    NE_MODULE *pModule;
+
+    hModule = GetExePtr( hModule );
+
+    dprintf_resource(stddeb, "SetResourceHandler: module=%04x type=", hModule );
+    PrintId( s );
+    dprintf_resource( stddeb, "\n" );
+
+    if ((pModule = MODULE_GetPtr( hModule )))
+    {
+	if (pModule->flags & NE_FFLAGS_WIN32)
+	    fprintf(stderr,"SetResourceHandler: %s", NEWin32FailureString);
+	else if (pModule->res_table)
+	    return NE_SetResourceHandler( hModule, s, resourceHandler );
+    }
     return NULL;
 }
 
diff --git a/loader/task.c b/loader/task.c
index 467548c..3266976 100644
--- a/loader/task.c
+++ b/loader/task.c
@@ -9,7 +9,7 @@
 #include <string.h>
 
 #include "windows.h"
-#include "task.h"
+#include "user.h"
 #include "callback.h"
 #include "file.h"
 #include "global.h"
@@ -40,9 +40,9 @@
   /* Min. number of thunks allocated when creating a new segment */
 #define MIN_THUNKS  32
 
-extern INT32 WINSOCK_DeleteTaskWSI( TDB* pTask, struct _WSINFO* pwsi );
-extern void  USER_AppExit( HTASK16, HINSTANCE16, HQUEUE16 );
-extern void  PE_InitTls( PE_MODULE *module );
+extern INT32 WINSOCK_DeleteTaskWSI( TDB* pTask, struct _WSINFO* );
+extern BOOL32 MODULE_FreeModule( HMODULE16 hModule, TDB* ptaskContext );
+extern void PE_InitTls( PDB32 *pdb32 );
 
   /* Saved 16-bit stack for current process (Win16 only) */
 DWORD IF1632_Saved16_ss_sp = 0;
@@ -370,12 +370,16 @@
 
         extern void InitTask( CONTEXT *context );
 
+        FARPROC32 entry = (FARPROC32)(pCurrentProcess->exe_modref->load_addr + 
+                 pCurrentProcess->exe_modref->pe_module->pe_header->OptionalHeader.AddressOfEntryPoint);
+
         InitTask( NULL );
         InitApp( pTask->hModule );
         __asm__ __volatile__("movw %w0,%%fs"::"r" (pCurrentThread->teb_sel));
-        PE_InitializeDLLs( pTask->hModule, DLL_PROCESS_ATTACH, (LPVOID)-1 );
-        exit_code = CallTaskStart32((FARPROC32)(pModule->pe_module->load_addr + 
-                pModule->pe_module->pe_header->OptionalHeader.AddressOfEntryPoint) );
+
+        PE_InitializeDLLs( pCurrentProcess, DLL_PROCESS_ATTACH, (LPVOID)-1 );
+        dprintf_relay( stddeb, "CallTo32(entryproc=%p)\n", entry );
+        exit_code = entry();
         TASK_KillCurrentTask( exit_code );
     }
     else
@@ -437,6 +441,7 @@
     STACK32FRAME *frame32;
 #ifndef WINELIB32
     extern DWORD CALLTO16_RetAddr_word;
+    extern void CALLTO16_Restore();
 #endif
     
     if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
@@ -546,18 +551,21 @@
 
     /* Create the Win32 part of the task */
 
-    pdb32 = PROCESS_Create( pTask );
+    pCurrentProcess = pdb32 = PROCESS_Create( pTask, cmdLine );
     pdb32->task = hTask;
     if (pModule->flags & NE_FFLAGS_WIN32)
     {
+    /*
         LPTHREAD_START_ROUTINE start =
-            (LPTHREAD_START_ROUTINE)(pModule->pe_module->load_addr +
-            pModule->pe_module->pe_header->OptionalHeader.AddressOfEntryPoint);
-        pTask->thdb = THREAD_Create( pdb32, 0, start );
+            (LPTHREAD_START_ROUTINE)(
+	    	pCurrentProcess->exe_modref->load_addr +
+		pCurrentProcess->exe_modref->pe_module->pe_header->OptionalHeader.AddressOfEntryPoint);
+     */
+        pTask->thdb = THREAD_Create( pdb32, 0, 0 );
 #ifndef WINELIB
         /* FIXME: should not be done here */
         pCurrentThread = pTask->thdb;
-        PE_InitTls( pModule->pe_module );
+        PE_InitTls( pdb32 );
 #endif
     }
     else
@@ -575,6 +583,7 @@
     frame32->ebx = 0;
     frame32->ebp = 0;
 #ifndef WINELIB
+    frame32->restore_addr = (DWORD)CALLTO16_Restore;
     frame32->retaddr = (DWORD)TASK_CallToStart;
     frame32->codeselector = WINE_CODE_SELECTOR;
 #endif
@@ -613,10 +622,12 @@
     {
         if (pModule->flags & NE_FFLAGS_WIN32)
         {
-            DBG_ADDR addr = { NULL, 0, pModule->pe_module->load_addr + 
-                              pModule->pe_module->pe_header->OptionalHeader.AddressOfEntryPoint };
+	/*
+            DBG_ADDR addr = { NULL, 0, pCurrentProcess->exe_modref->load_addr + 
+                              pCurrentProcess->exe_modref->pe_module->pe_header->OptionalHeader.AddressOfEntryPoint };
             fprintf( stderr, "Win32 task '%s': ", name );
             DEBUG_AddBreakpoint( &addr );
+	 */
         }
         else
         {
@@ -656,7 +667,7 @@
 
     /* Free the task module */
 
-    FreeModule16( pTask->hModule );
+    MODULE_FreeModule( pTask->hModule, pTask );
 
     /* Free the selector aliases */
 
@@ -691,17 +702,16 @@
 
     dprintf_task(stddeb, "Killing task %04x\n", hCurrentTask );
 
-    /* Clean up sockets */
+    /* Delete active sockets */
 
-    if( pTask->pwsi ) 
-    {
-	dprintf_task(stddeb, "\tremoving socket table\n");
+    if( pTask->pwsi )
 	WINSOCK_DeleteTaskWSI( pTask, pTask->pwsi );
-    }
 
     /* Perform USER cleanup */
 
-    USER_AppExit( hCurrentTask, pTask->hInstance, pTask->hQueue );
+    if (pTask->userhandler)
+        pTask->userhandler( hCurrentTask, USIG_TERMINATION, 0,
+                            pTask->hInstance, pTask->hQueue );
 
     if (hTaskToKill && (hTaskToKill != hCurrentTask))
     {
@@ -867,6 +877,8 @@
 
 /***********************************************************************
  *           InitTask  (KERNEL.91)
+ *
+ * Called by the application startup code.
  */
 void WINAPI InitTask( CONTEXT *context )
 {
@@ -880,7 +892,13 @@
     if (!(pTask = (TDB *)GlobalLock16( hCurrentTask ))) return;
     if (!(pModule = MODULE_GetPtr( pTask->hModule ))) return;
 
+    /* This is a hack to install task USER signal handler before 
+     * implicitly loaded DLLs are initialized (see windows/user.c) */
+
+    pTask->userhandler = (USERSIGNALPROC)&USER_SignalProc;
+
 #ifndef WINELIB
+    /* Initialize implicitly loaded DLLs */
     NE_InitializeDLLs( pTask->hModule );
 #endif
 
@@ -1374,6 +1392,8 @@
 
 /***********************************************************************
  *           SetTaskSignalProc   (KERNEL.38)
+ *
+ * Real 16-bit interface is provided by the THUNK_SetTaskSignalProc.
  */
 FARPROC16 WINAPI SetTaskSignalProc( HTASK16 hTask, FARPROC16 proc )
 {
@@ -1382,8 +1402,8 @@
 
     if (!hTask) hTask = hCurrentTask;
     if (!(pTask = (TDB *)GlobalLock16( hTask ))) return NULL;
-    oldProc = pTask->userhandler;
-    pTask->userhandler = proc;
+    oldProc = (FARPROC16)pTask->userhandler;
+    pTask->userhandler = (USERSIGNALPROC)proc;
     return oldProc;
 }
 
@@ -1464,7 +1484,6 @@
     return 0;
 }
 
-
 /***********************************************************************
  *           TaskFirst   (TOOLHELP.63)
  */
diff --git a/memory/global.c b/memory/global.c
index 45088c2..ce11ed2 100644
--- a/memory/global.c
+++ b/memory/global.c
@@ -17,6 +17,7 @@
 #include "miscemu.h"
 #include "dde_mem.h"
 #include "stackframe.h"
+#include "module.h"
 #include "options.h"
 #include "stddebug.h"
 #include "debug.h"
@@ -206,6 +207,7 @@
     {
 	ptr = HeapAlloc( SystemHeap, 0, size );
     }
+      /* FIXME: free discardable blocks and try again? */
     if (!ptr) return 0;
 
       /* Allocate the selector(s) */
@@ -274,7 +276,7 @@
     HANDLE16 owner = GetCurrentPDB();
 
     if (flags & GMEM_DDESHARE)
-        owner = GetExePtr(owner);  /* Make it a module handle */
+        owner = MODULE_HANDLEtoHMODULE16(owner);  /* Make it a module handle */
     return GLOBAL_Alloc( flags, size, owner, FALSE, FALSE, FALSE );
 }
 
@@ -313,8 +315,11 @@
             (pArena->lockCount > 0) || (pArena->pageLockCount > 0)) return 0;
         HeapFree( SystemHeap, 0, (void *)pArena->base );
         pArena->base = 0;
-        /* Note: we rely on the fact that SELECTOR_ReallocBlock won't */
-        /* change the selector if we are shrinking the block */
+
+        /* Note: we rely on the fact that SELECTOR_ReallocBlock won't 
+         * change the selector if we are shrinking the block.
+	 * FIXME: shouldn't we keep selectors until the block is deleted?
+	 */
         SELECTOR_ReallocBlock( sel, 0, 1, SEGMENT_DATA, 0, 0 );
         return handle;
     }
@@ -411,15 +416,20 @@
 {
     dprintf_global( stddeb, "WIN16_GlobalLock16(%04x) -> %08lx\n",
                     handle, MAKELONG( 0, GlobalHandleToSel(handle)) );
-    if (!handle) return 0;
+    if (handle)
+    {
+	if (handle == (HGLOBAL16)-1) handle = CURRENT_DS;
 
 #ifdef CONFIG_IPC
-    if (is_dde_handle(handle))
-        return PTR_SEG_OFF_TO_SEGPTR( DDE_GlobalHandleToSel(handle), 0 );
+	if (is_dde_handle(handle))
+	    return PTR_SEG_OFF_TO_SEGPTR( DDE_GlobalHandleToSel(handle), 0 );
 #endif  /* CONFIG_IPC */
 
-    if (!GET_ARENA_PTR(handle)->base) return (SEGPTR)0;
-    return PTR_SEG_OFF_TO_SEGPTR( GlobalHandleToSel(handle), 0 );
+	if (!GET_ARENA_PTR(handle)->base) return (SEGPTR)0;
+	return PTR_SEG_OFF_TO_SEGPTR( GlobalHandleToSel(handle), 0 );
+	/* FIXME: put segment value in CX as well */
+    }
+    return (SEGPTR)0;
 }
 
 
diff --git a/memory/local.c b/memory/local.c
index 894beba..c0062dc 100644
--- a/memory/local.c
+++ b/memory/local.c
@@ -16,6 +16,7 @@
 #include <string.h>
 #include "windows.h"
 #include "ldt.h"
+#include "task.h"
 #include "global.h"
 #include "heap.h"
 #include "instance.h"
@@ -333,7 +334,7 @@
     if (start == 0) {
       /* Check if the segment is the DGROUP of a module */
 
-	if ((pModule = MODULE_GetPtr( GetExePtr( selector ) )))
+	if ((pModule = MODULE_GetPtr( selector )))
 	{
 	    SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pModule ) + pModule->dgroup - 1;
 	    if (pModule->dgroup && (pSeg->selector == selector)) {
@@ -1582,7 +1583,6 @@
     NE_MODULE *pModule;
     WORD ds;
 
-    module = GetExePtr( module );
     if (!(pModule = MODULE_GetPtr( module ))) return 0;
     ds = (NE_SEG_TABLE( pModule ) + pModule->dgroup - 1)->selector;
     return MAKELONG( LOCAL_CountFree( ds ), LOCAL_HeapSize( ds ) );
diff --git a/memory/string.c b/memory/string.c
index 72efb86..60194a3 100644
--- a/memory/string.c
+++ b/memory/string.c
@@ -8,6 +8,7 @@
 #include <ctype.h>
 #include <string.h>
 #include "windows.h"
+#include "winerror.h"
 #include "ldt.h"
 #include "stddebug.h"
 #include "debug.h"
@@ -147,6 +148,12 @@
  */
 INT32 WINAPI lstrcmp32A( LPCSTR str1, LPCSTR str2 )
 {
+    /* Win95 KERNEL32.DLL does it that way. Hands off! */
+    if (!str1 || !str2) {
+    	SetLastError(ERROR_INVALID_PARAMETER);
+	return 0;
+    }
+
     dprintf_string(stddeb,"strcmp: '%s' and '%s'\n",
 		 (str1)?str1:"NULL",(str2)?str2:"NULL");
     return (INT32)strcmp( str1, str2 );
@@ -158,6 +165,10 @@
  */
 INT32 WINAPI lstrcmp32W( LPCWSTR str1, LPCWSTR str2 )
 {
+    if (!str1 || !str2) {
+    	SetLastError(ERROR_INVALID_PARAMETER);
+	return 0;
+    }
     while (*str1 && (*str1 == *str2)) { str1++; str2++; }
     return (INT32)(*str1 - *str2);
 }
@@ -179,6 +190,10 @@
 {
     INT32 res;
 
+    if (!str1 || !str2) {
+    	SetLastError(ERROR_INVALID_PARAMETER);
+	return 0;
+    }
     dprintf_string(stddeb,"strcmpi '%s' and '%s'\n",
 		 (str1)?str1:"NULL",(str2)?str2:"NULL");
     while (*str1)
@@ -198,6 +213,10 @@
 {
     INT32 res;
 
+    if (!str1 || !str2) {
+    	SetLastError(ERROR_INVALID_PARAMETER);
+	return 0;
+    }
     while (*str1)
     {
         /* FIXME: Unicode */
diff --git a/memory/virtual.c b/memory/virtual.c
index f3765b2..0788836 100644
--- a/memory/virtual.c
+++ b/memory/virtual.c
@@ -118,19 +118,19 @@
     UINT32 addr = view->base;
     BYTE prot = view->prot[0];
 
-    fprintf( stderr, "View: %08x - %08x%s",
+    dprintf_virtual( stddeb, "View: %08x - %08x%s",
              view->base, view->base + view->size - 1,
              (view->flags & VFLAG_SYSTEM) ? " (system)" : "" );
     if (view->mapping && view->mapping->file)
-        fprintf( stderr, " %s @ %08x\n",
+        dprintf_virtual( stddeb, " %s @ %08x\n",
                  view->mapping->file->unix_name, view->offset );
     else
-        fprintf( stderr, " (anonymous)\n");
+        dprintf_virtual( stddeb, " (anonymous)\n");
 
     for (count = i = 1; i < view->size >> page_shift; i++, count++)
     {
         if (view->prot[i] == prot) continue;
-        fprintf( stderr, "      %08x - %08x %s\n",
+        dprintf_virtual( stddeb, "      %08x - %08x %s\n",
                  addr, addr + (count << page_shift) - 1,
                  VIRTUAL_GetProtStr(prot) );
         addr += (count << page_shift);
@@ -138,7 +138,7 @@
         count = 0;
     }
     if (count)
-        fprintf( stderr, "      %08x - %08x %s\n",
+        dprintf_virtual( stddeb, "      %08x - %08x %s\n",
                  addr, addr + (count << page_shift) - 1,
                  VIRTUAL_GetProtStr(prot) );
 }
@@ -150,7 +150,7 @@
 void VIRTUAL_Dump(void)
 {
     FILE_VIEW *view = VIRTUAL_FirstView;
-    fprintf( stderr, "\nDump of all virtual memory views:\n\n" );
+    dprintf_virtual( stddeb, "\nDump of all virtual memory views:\n\n" );
     while (view)
     {
         VIRTUAL_DumpView( view );
diff --git a/misc/comm.c b/misc/comm.c
index f23666f..22e16c9 100644
--- a/misc/comm.c
+++ b/misc/comm.c
@@ -1,4 +1,4 @@
-/*
+ /*
  * DEC 93 Erik Bos <erik@xs4all.nl>
  *
  * Copyright 1996 Marcus Meissner
@@ -11,6 +11,9 @@
  *   IMHO, they are still wrong, but they at least implement the RXCHAR
  *   event and return I/O queue sizes, which makes the app I'm interested
  *   in (analog devices EZKIT DSP development system) work.
+ *
+ * August 12, 1997.  Take a bash at SetCommEventMask - Lawson Whitney
+ *                                     <lawson_whitney@juno.com>
  */
 
 #include <stdio.h>
@@ -38,7 +41,7 @@
 #ifndef TIOCINQ
 #define	TIOCINQ FIONREAD
 #endif
-
+#define msr  35       /* offset in unknown structure commMask */
 /*
  * [RER] These are globals are wrong.  They should be in DosDeviceStruct
  * on a per port basis.
@@ -47,6 +50,7 @@
 
 struct DosDeviceStruct COM[MAX_PORTS];
 struct DosDeviceStruct LPT[MAX_PORTS];
+LPCVOID *unknown[MAX_PORTS];
 
 void COMM_Init(void)
 {
@@ -126,6 +130,18 @@
 	return NULL;
 }
 
+int    GetCommPort(int fd)
+{
+        int x;
+        
+        for (x=0; x<MAX_PORTS; x++) {
+             if (COM[x].fd == fd)
+                 return x;
+       }
+       
+       return -1;
+} 
+
 int ValidCOMPort(int x)
 {
 	return(x < MAX_PORTS ? (int) COM[x].devicename : 0); 
@@ -436,6 +452,8 @@
 			commerror = WinError();
 			return -1;
 		} else {
+                        unknown[port] = SEGPTR_ALLOC(40);
+                        bzero(unknown[port],40);
 			COM[port].fd = fd;	
 			return fd;
 		}
@@ -470,16 +488,16 @@
  */
 INT16 WINAPI CloseComm(INT16 fd)
 {
-	struct DosDeviceStruct *ptr;
-
+        int port;
     	dprintf_comm(stddeb,"CloseComm: fd %d\n", fd);
-	if ((ptr = GetDeviceStruct(fd)) == NULL) {
+       	if ((port = GetCommPort(fd)) !=-1) {  /* [LW]       */
+    	        SEGPTR_FREE(unknown[port]); 
+    	        COM[port].fd = 0;       /*  my adaptation of RER's fix   */  
+        }  else {  	        
 		commerror = IE_BADID;
 		return -1;
 	}
 
-	ptr->fd = 0;	/* [RER] Really, -1 would be a better value */
-
 	if (close(fd) == -1) {
 		commerror = WinError();
 		return -1;
@@ -738,7 +756,17 @@
 	}
 }  
 
-/*****************************************************************************
+/********************************************************************
+ *      PurgeComm        (KERNEL32.557)
+ */
+BOOL32 WINAPI PurgeComm( HANDLE32 hFile, DWORD flags) 
+{
+    dprintf_comm(stdnimp, "PurgeComm(%08x %08lx) unimplemented stub\n",
+                 hFile, flags);
+    return 0;
+}
+
+/********************************************************************
  *	GetCommError	(USER.203)
  */
 INT16 WINAPI GetCommError(INT16 fd,LPCOMSTAT lpStat)
@@ -794,11 +822,26 @@
 /*****************************************************************************
  *	SetCommEventMask	(USER.208)
  */
-UINT16* WINAPI SetCommEventMask(INT16 fd,UINT16 fuEvtMask)
+SEGPTR WINAPI SetCommEventMask(INT16 fd,UINT16 fuEvtMask)
 {
+        unsigned char *stol;
+        int act;
+        int repid;
+        unsigned int mstat;
     	dprintf_comm(stddeb,"SetCommEventMask:fd %d,mask %d\n",fd,fuEvtMask);
 	eventmask |= fuEvtMask;
-	return (UINT16 *)&eventmask;	/* FIXME, should be SEGPTR */
+        if ((act = GetCommPort(fd)) == -1) {
+            dprintf_comm(stddeb," fd %d not comm port\n",act);
+            return NULL;}
+        stol =  unknown[act];
+        stol += msr;    
+	repid = ioctl(fd,TIOCMGET,&mstat);
+	dprintf_comm(stddeb,
+	" ioctl  %d, msr %x at %lx %lx\n",repid,mstat,stol,unknown[act]);
+	if ((mstat&TIOCM_CAR)) {*stol |= 0x80;}
+	     else {*stol &=0x7f;}
+	dprintf_comm(stddeb," modem dcd construct %x\n",*stol);
+	return SEGPTR_GET(unknown[act]);	
 }
 
 /*****************************************************************************
@@ -846,6 +889,15 @@
 }
 
 /*****************************************************************************
+ *      SetupComm       (KERNEL32.676)
+ */
+BOOL32 WINAPI SetupComm( HANDLE32 hFile, DWORD insize, DWORD outsize)
+{
+        dprintf_comm(stdnimp, "SetupComm: insize %ld outsize %ld unimplemented stub\n", insize, outsize);
+       return FALSE;
+} 
+
+/*****************************************************************************
  *	GetCommMask	(KERNEL32.156)
  */
 BOOL32 WINAPI GetCommMask(INT32 fd,LPDWORD evtmask)
@@ -1599,7 +1651,7 @@
  */
 INT16 WINAPI ReadComm(INT16 fd,LPSTR lpvBuf,INT16 cbRead)
 {
-	int status, length;
+	int status, x, length;
 	struct DosDeviceStruct *ptr;
 
     	dprintf_comm(stddeb,
@@ -1634,6 +1686,9 @@
                         return length;
                 }
  	} else {
+                for (x=0; x < length+status; x++)  	
+ 	        dprintf_comm(stddeb,"%c",*(lpvBuf+x));
+ 	        dprintf_comm(stddeb,"\nthus  endeth\n");
 		commerror = 0;
 		return length + status;
 	}
@@ -1661,7 +1716,7 @@
 	
 	for (x=0; x != cbWrite ; x++)
         dprintf_comm(stddeb,"%c", *(lpvBuf + x) );
-
+        dprintf_comm(stddeb,"\n");
 	length = write(fd, (void *) lpvBuf, cbWrite);
 	
 	if (length == -1) {
diff --git a/misc/commdlg.c b/misc/commdlg.c
index 34f91a7..f21978e 100644
--- a/misc/commdlg.c
+++ b/misc/commdlg.c
@@ -58,7 +58,7 @@
  */
 BOOL16 WINAPI GetOpenFileName16( SEGPTR ofn )
 {
-    HINSTANCE16 hInst;
+    HINSTANCE32 hInst;
     HANDLE32 hDlgTmpl = 0, hResInfo;
     BOOL32 bRet = FALSE, win32Format = FALSE;
     HWND32 hwndDialog;
@@ -148,7 +148,7 @@
  */
 BOOL16 WINAPI GetSaveFileName16( SEGPTR ofn)
 {
-    HINSTANCE16 hInst;
+    HINSTANCE32 hInst;
     HANDLE32 hDlgTmpl = 0;
     BOOL32 bRet = FALSE, win32Format = FALSE;
     LPOPENFILENAME16 lpofn = (LPOPENFILENAME16)PTR_SEG_TO_LIN(ofn);
@@ -3028,7 +3028,8 @@
 	memset(ofn16,'\0',sizeof(*ofn16));				\
 	ofn16->lStructSize = sizeof(*ofn16);				\
 	ofn16->hwndOwner = ofn->hwndOwner;				\
-	ofn16->hInstance = ofn->hInstance;				\
+	/* FIXME: OPENFILENAME16 got only 16 bit for HINSTANCE... */	\
+	ofn16->hInstance = MODULE_HANDLEtoHMODULE16(ofn->hInstance);	\
 	if (ofn->lpstrFilter) {						\
 		LPSTR	s,x;						\
 									\
@@ -3107,7 +3108,8 @@
 	memset(ofn16,'\0',sizeof(*ofn16));				\
 	ofn16->lStructSize = sizeof(*ofn16);				\
 	ofn16->hwndOwner = ofn->hwndOwner;				\
-	ofn16->hInstance = ofn->hInstance;				\
+	/* FIXME: OPENFILENAME16 got only 16 bit for HINSTANCE... */	\
+	ofn16->hInstance = MODULE_HANDLEtoHMODULE16(ofn->hInstance);	\
 	if (ofn->lpstrFilter) {						\
 		LPWSTR	s;						\
 		LPSTR	x,y;						\
@@ -3119,7 +3121,7 @@
 			s = s+lstrlen32W(s)+1;				\
 		s++;							\
 		n = s - ofn->lpstrFilter; /* already divides by 2. ptr magic */\
-		x = y = (LPSTR)SEGPTR_ALLOC(n);			\
+		x = y = (LPSTR)SEGPTR_ALLOC(n);				\
 		s = (LPWSTR)ofn->lpstrFilter;				\
 		while (*s) {						\
 			lstrcpyWtoA(x,s);				\
diff --git a/misc/compobj.c b/misc/compobj.c
index 6fa4010..40c9444 100644
--- a/misc/compobj.c
+++ b/misc/compobj.c
@@ -72,6 +72,14 @@
 }
 
 /***********************************************************************
+ *           IsEqualGUID [COMPOBJ.18]
+ */
+BOOL16 WINAPI IsEqualGUID(GUID* g1, GUID* g2)
+{
+    return !memcmp( g1, g2, sizeof(GUID) );
+}
+
+/***********************************************************************
  *           CLSIDFromString [COMPOBJ.20]
  */
 
diff --git a/misc/crtdll.c b/misc/crtdll.c
index 707e479..7ba7d07 100644
--- a/misc/crtdll.c
+++ b/misc/crtdll.c
@@ -5,8 +5,21 @@
  *
  * Copyright 1996 Marcus Meissner
  * Copyright 1996 Jukka Iivonen
+ * Copyright 1997 Uwe Bonnes
  */
 
+/*
+Unresolved issues Uwe Bonnes 970904:
+- Handling of Binary/Text Files is crude. If in doubt, use fromdos or recode
+- Arguments in crtdll.spec for functions with double argument
+- system-call calls another wine process, but without debugging arguments
+              and uses the first wine executable in the path
+- tested with ftp://ftp.remcomp.com/pub/remcomp/lcc-win32.zip, a C-Compiler
+ 		for Win32, based on lcc, from Jacob Navia
+*/
+
+/* FIXME: all the file handling is hopelessly broken -- AJ */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
@@ -15,6 +28,7 @@
 #include <time.h>
 #include <ctype.h>
 #include <math.h>
+#include <fcntl.h>
 #include "win.h"
 #include "windows.h"
 #include "stddebug.h"
@@ -24,6 +38,11 @@
 #include "heap.h"
 #include "crtdll.h"
 #include "drive.h"
+#include "file.h"
+
+extern int FILE_GetUnixHandle( HFILE32  );
+
+static DOS_FULL_NAME CRTDLL_tmpname;
 
 extern INT32 WIN32_wsprintf32W( DWORD *args );
 
@@ -49,18 +68,20 @@
 /*********************************************************************
  *                  _GetMainArgs  (CRTDLL.022)
  */
-DWORD
-CRTDLL__GetMainArgs(LPDWORD argc,LPSTR **argv,LPSTR *environ,DWORD flag)
+DWORD __cdecl CRTDLL__GetMainArgs(LPDWORD argc,LPSTR **argv,
+                                LPSTR *environ,DWORD flag)
 {
         char *cmdline;
         char  **xargv;
 	int	xargc,i,afterlastspace;
 	DWORD	version;
 
-	dprintf_crtdll(stderr,"__GetMainArgs(%p,%p,%p,%ld).\n",
+	dprintf_crtdll(stddeb,"CRTDLL__GetMainArgs(%p,%p,%p,%ld).\n",
 		argc,argv,environ,flag
 	);
 	CRTDLL_acmdln_dll = cmdline = xstrdup( GetCommandLine32A() );
+ 	dprintf_crtdll(stddeb,"CRTDLL__GetMainArgs got \"%s\"\n",
+		cmdline);
 
 	version	= GetVersion32();
 	CRTDLL_osver_dll       = version >> 16;
@@ -98,6 +119,8 @@
 	CRTDLL_argv_dll	= xargv;
 	*argv		= xargv;
 
+	dprintf_crtdll(stddeb,"CRTDLL__GetMainArgs found %d arguments\n",
+		CRTDLL_argc_dll);
 	/* FIXME ... use real environment */
 	*environ	= xmalloc(sizeof(LPSTR));
 	CRTDLL_environ_dll = *environ;
@@ -105,12 +128,13 @@
 	return 0;
 }
 
+
 typedef void (*_INITTERMFUN)();
 
 /*********************************************************************
  *                  _initterm     (CRTDLL.135)
  */
-DWORD CRTDLL__initterm(_INITTERMFUN *start,_INITTERMFUN *end)
+DWORD __cdecl CRTDLL__initterm(_INITTERMFUN *start,_INITTERMFUN *end)
 {
 	_INITTERMFUN	*current;
 
@@ -124,9 +148,208 @@
 }
 
 /*********************************************************************
+ *                  _fdopen     (CRTDLL.91)
+ */
+DWORD __cdecl CRTDLL__fdopen(INT32 handle, LPCSTR mode)
+{
+  FILE *file;
+
+  switch (handle) 
+    {
+    case 0 : file=stdin;
+      break;
+    case 1 : file=stdout;
+      break;
+    case 2 : file=stderr;
+      break;
+    default:
+      file=fdopen(handle,mode);
+    }
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_fdopen open handle %d mode %s  got file %p\n",
+		 handle, mode, file);
+  return (DWORD)file;
+}
+
+/*********************************************************************
+ *                  fopen     (CRTDLL.372)
+ */
+DWORD __cdecl CRTDLL_fopen(LPCSTR path, LPCSTR mode)
+{
+  FILE *file;
+  HFILE32 dos_fildes;
+#if 0
+  DOS_FULL_NAME full_name;
+  
+  if (!DOSFS_GetFullName( path, FALSE, &full_name )) {
+    dprintf_crtdll(stddeb,"CRTDLL_fopen file %s bad name\n",path);
+   return 0;
+  }
+  
+  file=fopen(full_name.long_name ,mode);
+#endif
+  INT32 flagmode=0;
+  int unix_fildes=0;
+
+  if ((strchr(mode,'r')&&strchr(mode,'a'))||
+      (strchr(mode,'r')&&strchr(mode,'w'))||
+      (strchr(mode,'w')&&strchr(mode,'a')))
+    return 0;
+       
+  if (strstr(mode,"r+")) flagmode=O_RDWR;
+  else if (strchr(mode,'r')) flagmode = O_RDONLY;
+  else if (strstr(mode,"w+")) flagmode= O_RDWR | O_TRUNC | O_CREAT;
+  else if (strchr(mode,'w')) flagmode = O_WRONLY | O_TRUNC | O_CREAT;
+  else if (strstr(mode,"a+")) flagmode= O_RDWR | O_CREAT | O_APPEND;
+  else if (strchr(mode,'w')) flagmode = O_RDWR | O_CREAT | O_APPEND;
+  else if (strchr(mode,'b'))
+    dprintf_crtdll(stderr,
+		   "CRTDLL_fopen %s in BINARY mode\n",path);
+      
+  dos_fildes=FILE_Open(path, flagmode);
+  unix_fildes=FILE_GetUnixHandle(dos_fildes);
+  file = fdopen(unix_fildes,mode);
+
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_fopen file %s mode %s got ufh %d dfh %d file %p\n",
+		 path,mode,unix_fildes,dos_fildes,file);
+  return (DWORD)file;
+}
+
+/*********************************************************************
+ *                  fread     (CRTDLL.377)
+ */
+DWORD __cdecl CRTDLL_fread(LPVOID ptr, INT32 size, INT32 nmemb, LPVOID file)
+{
+  size_t ret=1;
+#if 0
+  int i=0;
+  void *temp=ptr;
+
+  /* If we would honour CR/LF <-> LF translation, we could do it like this.
+     We should keep track of all files opened, and probably files with \
+     known binary extensions must be unchanged */
+  while ( (i < (nmemb*size)) && (ret==1)) {
+    ret=fread(temp,1,1,file);
+    dprintf_crtdll(stddeb,
+		 "CRTDLL_fread got %c 0x%02x ret %d\n",
+		   (isalpha(*(unsigned char*)temp))? *(unsigned char*)temp:
+		    ' ',*(unsigned char*)temp, ret);
+    if (*(unsigned char*)temp != 0xd) { /* skip CR */
+      temp++;
+      i++;
+    }
+    else
+      dprintf_crtdll(stddeb, "CRTDLL_fread skipping ^M\n");
+  }
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_fread 0x%08x items of size %d from file %p to %p%s\n",
+		 nmemb,size,file,ptr,(i!=nmemb)?" failed":"");
+  return i;
+#else
+    
+  ret=fread(ptr,size,nmemb,file);
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_fread 0x%08x items of size %d from file %p to %p%s\n",
+		 nmemb,size,file,ptr,(ret!=nmemb)?" failed":"");
+  return ret;
+#endif
+}
+  
+/*********************************************************************
+ *                  fseek     (CRTDLL.382)
+ */
+LONG __cdecl CRTDLL_fseek(LPVOID stream, LONG offset, INT32 whence)
+{
+  long ret;
+
+  ret=fseek(stream,offset,whence);
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_fseek file %p to 0x%08lx pos %s%s\n",
+		 stream,offset,(whence==SEEK_SET)?"SEEK_SET":
+		 (whence==SEEK_CUR)?"SEEK_CUR":
+		 (whence==SEEK_END)?"SEEK_END":"UNKNOWN",
+		 (ret)?"failed":"");
+  return ret;
+}
+  
+/*********************************************************************
+ *                  ftell     (CRTDLL.384)
+ */
+LONG __cdecl CRTDLL_ftell(LPVOID stream)
+{
+  long ret;
+
+  ret=ftell(stream);
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_ftell file %p at 0x%08lx\n",
+		 stream,ret);
+  return ret;
+}
+  
+/*********************************************************************
+ *                  fwrite     (CRTDLL.386)
+ */
+DWORD __cdecl CRTDLL_fwrite(LPVOID ptr, INT32 size, INT32 nmemb, LPVOID file)
+{
+  size_t ret;
+
+  ret=fwrite(ptr,size,nmemb,file);
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_fwrite 0x%08x items of size %d from %p to file %p%s\n",
+		 nmemb,size,ptr,file,(ret!=nmemb)?" failed":"");
+  return ret;
+}
+
+/*********************************************************************
+ *                  setbuf     (CRTDLL.452)
+ */
+INT32 __cdecl CRTDLL_setbuf(LPVOID file, LPSTR buf)
+{
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_setbuf(file %p buf %p)\n",
+		 file,buf);
+  /* this doesn't work:"void value not ignored as it ought to be" 
+  return setbuf(file,buf); 
+  */
+  setbuf(file,buf);
+  return 0;
+}
+
+/*********************************************************************
+ *                  _open_osfhandle         (CRTDLL.240)
+ */
+HFILE32 __cdecl CRTDLL__open_osfhandle(LONG osfhandle, INT32 flags)
+{
+HFILE32 handle;
+ 
+	switch (osfhandle) {
+	case STD_INPUT_HANDLE :
+	case 0 :
+	  handle=0;
+	  break;
+ 	case STD_OUTPUT_HANDLE:
+ 	case 1:
+	  handle=1;
+	  break;
+	case STD_ERROR_HANDLE:
+	case 2:
+	  handle=2;
+	  break;
+	default:
+	  return (-1);
+	}
+	dprintf_crtdll(stddeb,
+		       "CRTDLL_open_osfhandle(handle %08lx,flags %d) return %d\n",
+		       osfhandle,flags,handle);
+	return handle;
+	
+}
+
+/*********************************************************************
  *                  srand         (CRTDLL.460)
  */
-void CRTDLL_srand(DWORD seed)
+void __cdecl CRTDLL_srand(DWORD seed)
 {
 	/* FIXME: should of course be thread? process? local */
 	srand(seed);
@@ -135,35 +358,29 @@
 /*********************************************************************
  *                  fprintf       (CRTDLL.373)
  */
-int CRTDLL_fprintf(DWORD *args)
+INT32 __cdecl CRTDLL_fprintf( FILE *file, LPSTR format, ... )
 {
-	/* FIXME: use args[0] */
-	/* CMF - This makes a BIG assumption about va_list */
-	return vfprintf(stderr, (LPSTR) args[1], (va_list) &args[2]);
+    va_list valist;
+    INT32 res;
+
+    va_start( valist, format );
+    res = vfprintf( file, format, valist );
+    va_end( valist );
+    return res;
 }
 
 /*********************************************************************
- *                  printf        (CRTDLL.440)
+ *                  vfprintf       (CRTDLL.373)
  */
-int CRTDLL_printf(DWORD *args)
+INT32 __cdecl CRTDLL_vfprintf( FILE *file, LPSTR format, va_list args )
 {
-	/* CMF - This makes a BIG assumption about va_list */
-	return vfprintf(stdout, (LPSTR) args[0], (va_list) &args[1]);
-}
-
-/*********************************************************************
- *                  sprintf        (CRTDLL.458)
- */
-int CRTDLL_sprintf(DWORD *args)
-{
-	/* CMF - This makes a BIG assumption about va_list */
-	return vsprintf((LPSTR) args[0], (LPSTR) args[1], (va_list) &args[2]);
+    return vfprintf( file, format, args );
 }
 
 /*********************************************************************
  *                  time          (CRTDLL.488)
  */
-time_t CRTDLL_time(time_t *timeptr)
+time_t __cdecl CRTDLL_time(time_t *timeptr)
 {
 	time_t	curtime = time(NULL);
 
@@ -175,7 +392,7 @@
 /*********************************************************************
  *                  _isatty       (CRTDLL.137)
  */
-BOOL32 CRTDLL__isatty(DWORD x)
+BOOL32 __cdecl CRTDLL__isatty(DWORD x)
 {
 	dprintf_crtdll(stderr,"CRTDLL__isatty(%ld)\n",x);
 	return TRUE;
@@ -184,22 +401,45 @@
 /*********************************************************************
  *                  _write        (CRTDLL.332)
  */
-INT32 CRTDLL__write(DWORD x,LPVOID buf,DWORD len)
+INT32 __cdecl CRTDLL__write(INT32 fd,LPCVOID buf,UINT32 count)
 {
-	if (x<=2)
-		return write(x,buf,len);
-	/* hmm ... */
-	dprintf_crtdll(stderr,"CRTDLL__write(%ld,%p,%ld)\n",x,buf,len);
+        INT32 len=0;
+
+	if (fd == -1)
+	  len = -1;
+	else if (fd<=2)
+	  len = (UINT32)write(fd,buf,(LONG)len);
+	else
+	  len = _lwrite32(fd,buf,count);
+	dprintf_crtdll(stddeb,"CRTDLL_write %d/%d byte to dfh %d from %p,\n",
+		       len,count,fd,buf);
 	return len;
 }
 
 
 /*********************************************************************
+ *                  _cexit          (CRTDLL.49)
+ *
+ *  FIXME: What the heck is the difference between 
+ *  FIXME           _c_exit         (CRTDLL.47)
+ *  FIXME           _cexit          (CRTDLL.49)
+ *  FIXME           _exit           (CRTDLL.87)
+ *  FIXME           exit            (CRTDLL.359)
+ *
+ */
+void __cdecl CRTDLL__cexit(INT32 ret)
+{
+        dprintf_crtdll(stddeb,"CRTDLL__cexit(%d)\n",ret);
+	ExitProcess(ret);
+}
+
+
+/*********************************************************************
  *                  exit          (CRTDLL.359)
  */
-void CRTDLL_exit(DWORD ret)
+void __cdecl CRTDLL_exit(DWORD ret)
 {
-        dprintf_crtdll(stderr,"CRTDLL_exit(%ld)\n",ret);
+        dprintf_crtdll(stddeb,"CRTDLL_exit(%ld)\n",ret);
 	ExitProcess(ret);
 }
 
@@ -207,16 +447,20 @@
 /*********************************************************************
  *                  fflush        (CRTDLL.365)
  */
-void CRTDLL_fflush(DWORD x)
+INT32 __cdecl CRTDLL_fflush(LPVOID stream)
 {
-    dprintf_crtdll(stderr,"CRTDLL_fflush(%ld)\n",x);
+    int ret;
+
+    ret = fflush(stream);
+    dprintf_crtdll(stddeb,"CRTDLL_fflush %p returnd %d %s\n",stream,ret,(ret)?"":" failed");
+    return ret;
 }
 
 
 /*********************************************************************
  *                  gets          (CRTDLL.391)
  */
-LPSTR CRTDLL_gets(LPSTR buf)
+LPSTR __cdecl CRTDLL_gets(LPSTR buf)
 {
   /* BAD, for the whole WINE process blocks... just done this way to test
    * windows95's ftp.exe.
@@ -226,335 +470,131 @@
 
 
 /*********************************************************************
- *                  abs           (CRTDLL.339)
- */
-INT32 CRTDLL_abs(INT32 x)
-{
-    return abs(x);
-}
-
-
-/*********************************************************************
- *                  acos          (CRTDLL.340)
- */
-float CRTDLL_acos(float x)
-{
-    return acos(x);
-}
-
-
-/*********************************************************************
- *                  asin          (CRTDLL.342)
- */
-float CRTDLL_asin(float x)
-{
-    return asin(x);
-}
-
-
-/*********************************************************************
- *                  atan          (CRTDLL.343)
- */
-float CRTDLL_atan(float x)
-{
-    return atan(x);
-}
-
-
-/*********************************************************************
- *                  atan2         (CRTDLL.344)
- */
-float CRTDLL_atan2(float x, float y)
-{
-    return atan2(x,y);
-}
-
-
-/*********************************************************************
- *                  atof          (CRTDLL.346)
- */
-float CRTDLL_atof(LPCSTR x)
-{
-    return atof(x);
-}
-
-
-/*********************************************************************
- *                  atoi          (CRTDLL.347)
- */
-INT32 CRTDLL_atoi(LPCSTR x)
-{
-    if (!x) return 0;
-    return atoi(x);
-}
-
-
-/*********************************************************************
- *                  atol          (CRTDLL.348)
- */
-LONG CRTDLL_atol(LPCSTR x)
-{
-    if (!x) return 0;
-    return atol(x);
-}
-
-
-/*********************************************************************
- *                  cos           (CRTDLL.354)
- */
-float CRTDLL_cos(float x)
-{
-    return cos(x);
-}
-
-
-/*********************************************************************
- *                  cosh          (CRTDLL.355)
- */
-float CRTDLL_cosh(float x)
-{
-    return cosh(x);
-}
-
-
-/*********************************************************************
- *                  exp           (CRTDLL.360)
- */
-float CRTDLL_exp(float x)
-{
-    return exp(x);
-}
-
-
-/*********************************************************************
- *                  fabs          (CRTDLL.361)
- */
-float CRTDLL_fabs(float x)
-{
-    return fabs(x);
-}
-
-
-/*********************************************************************
- *                  isalnum       (CRTDLL.394)
- */
-CHAR CRTDLL_isalnum(CHAR x)
-{
-    return isalnum(x);
-}
-
-
-/*********************************************************************
- *                  isalpha       (CRTDLL.395)
- */
-CHAR CRTDLL_isalpha(CHAR x)
-{
-    return isalpha(x);
-}
-
-
-/*********************************************************************
- *                  iscntrl       (CRTDLL.396)
- */
-CHAR CRTDLL_iscntrl(CHAR x)
-{
-    return iscntrl(x);
-}
-
-
-/*********************************************************************
- *                  isdigit       (CRTDLL.397)
- */
-CHAR CRTDLL_isdigit(CHAR x)
-{
-    return isdigit(x);
-}
-
-
-/*********************************************************************
- *                  isgraph       (CRTDLL.398)
- */
-CHAR CRTDLL_isgraph(CHAR x)
-{
-    return isgraph(x);
-}
-
-
-/*********************************************************************
- *                  islower       (CRTDLL.400)
- */
-CHAR CRTDLL_islower(CHAR x)
-{
-    return islower(x);
-}
-
-
-/*********************************************************************
- *                  isprint       (CRTDLL.401)
- */
-CHAR CRTDLL_isprint(CHAR x)
-{
-    return isprint(x);
-}
-
-
-/*********************************************************************
- *                  ispunct       (CRTDLL.402)
- */
-CHAR CRTDLL_ispunct(CHAR x)
-{
-    return ispunct(x);
-}
-
-
-/*********************************************************************
- *                  isspace       (CRTDLL.403)
- */
-CHAR CRTDLL_isspace(CHAR x)
-{
-    return isspace(x);
-}
-
-
-/*********************************************************************
- *                  isupper       (CRTDLL.404)
- */
-CHAR CRTDLL_isupper(CHAR x)
-{
-    return isupper(x);
-}
-
-
-/*********************************************************************
- *                  isxdigit      (CRTDLL.418)
- */
-CHAR CRTDLL_isxdigit(CHAR x)
-{
-    return isxdigit(x);
-}
-
-
-/*********************************************************************
- *                  labs          (CRTDLL.419)
- */
-LONG CRTDLL_labs(LONG x)
-{
-    return labs(x);
-}
-
-
-/*********************************************************************
- *                  log           (CRTDLL.424)
- */
-float CRTDLL_log(float x)
-{
-    return log(x);
-}
-
-
-/*********************************************************************
- *                  log10         (CRTDLL.425)
- */
-float CRTDLL_log10(float x)
-{
-    return log10(x);
-}
-
-
-/*********************************************************************
- *                  pow           (CRTDLL.439)
- */
-float CRTDLL_pow(float x, float y)
-{
-    return pow(x,y);
-}
-
-
-/*********************************************************************
  *                  rand          (CRTDLL.446)
  */
-INT32 CRTDLL_rand()
+INT32 __cdecl CRTDLL_rand()
 {
     return rand();
 }
 
 
 /*********************************************************************
- *                  sin           (CRTDLL.456)
- */
-float CRTDLL_sin(float x)
-{
-    return sin(x);
-}
-
-
-/*********************************************************************
- *                  sinh          (CRTDLL.457)
- */
-float CRTDLL_sinh(float x)
-{
-    return sinh(x);
-}
-
-
-/*********************************************************************
- *                  sqrt          (CRTDLL.459)
- */
-double CRTDLL_sqrt(double x)
-{
-    return sqrt(x);
-}
-
-
-/*********************************************************************
- *                  tan           (CRTDLL.486)
- */
-float CRTDLL_tan(float x)
-{
-    return tan(x);
-}
-
-
-/*********************************************************************
- *                  tanh          (CRTDLL.487)
- */
-float CRTDLL_tanh(float x)
-{
-    return tanh(x);
-}
-
-
-/*********************************************************************
- *                  tolower       (CRTDLL.491)
- */
-CHAR CRTDLL_tolower(CHAR x)
-{
-    return tolower(x);
-}
-
-
-/*********************************************************************
- *                  toupper       (CRTDLL.492)
- */
-CHAR CRTDLL_toupper(CHAR x)
-{
-    return toupper(x);
-}
-
-
-/*********************************************************************
  *                  putchar       (CRTDLL.442)
  */
-void CRTDLL_putchar(INT32 x)
+void __cdecl CRTDLL_putchar( INT32 x )
 {
     putchar(x);
 }
 
 
 /*********************************************************************
+ *                  fputc       (CRTDLL.374)
+ */
+INT32 __cdecl CRTDLL_fputc( INT32 c, FILE *stream )
+{
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_fputc %c to file %p\n",c,stream);
+    return fputc(c,stream);
+}
+
+
+/*********************************************************************
+ *                  fputs       (CRTDLL.375)
+ */
+INT32 __cdecl CRTDLL_fputs( LPCSTR s, FILE *stream )
+{
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_fputs %s to file %p\n",s,stream);
+    return fputs(s,stream);
+}
+
+
+/*********************************************************************
+ *                  puts       (CRTDLL.443)
+ */
+INT32 __cdecl CRTDLL_puts(LPCSTR s)
+{
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_fputs %s \n",s);
+    return puts(s);
+}
+
+
+/*********************************************************************
+ *                  putc       (CRTDLL.441)
+ */
+INT32 __cdecl CRTDLL_putc(INT32 c, FILE *stream)
+{
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_putc %c to file %p\n",c,stream);
+    return fputc(c,stream);
+}
+/*********************************************************************
+ *                  fgetc       (CRTDLL.366)
+ */
+INT32 __cdecl CRTDLL_fgetc( FILE *stream )
+{
+  int ret= fgetc(stream);
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_fgetc got %d\n",ret);
+  return ret;
+}
+
+
+/*********************************************************************
+ *                  getc       (CRTDLL.388)
+ */
+INT32 __cdecl CRTDLL_getc( FILE *stream )
+{
+  int ret= fgetc(stream);
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_getc got %d\n",ret);
+  return ret;
+}
+
+/*********************************************************************
+ *                  _lrotl          (CRTDLL.176)
+ */
+DWORD __cdecl CRTDLL__lrotl(DWORD x,INT32 shift)
+{
+   unsigned long ret = (x >> shift)|( x >>((sizeof(x))-shift));
+
+   dprintf_crtdll(stddeb,
+		  "CRTDLL_lrotl got 0x%08lx rot %d ret 0x%08lx\n",
+		  x,shift,ret);
+   return ret;
+    
+}
+
+
+/*********************************************************************
+ *                  fgets       (CRTDLL.368)
+ */
+CHAR* __cdecl CRTDLL_fgets(LPSTR s,INT32 size, LPVOID stream)
+{
+  char * ret;
+  char * control_M;
+  
+  ret=fgets(s, size,stream);
+  /*FIXME: Control with CRTDLL_setmode */
+  control_M= strrchr(s,'\r');
+  /*delete CR if we read a DOS File */
+  if (control_M)
+    {
+      *control_M='\n';
+      *(control_M+1)=0;
+    }
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_fgets got %s for %d chars from file %p%s\n",
+		 s,size,stream,(ret)?"":" failed");
+  return ret;
+}
+
+
+/*********************************************************************
  *                  _mbsicmp      (CRTDLL.204)
  */
-int CRTDLL__mbsicmp(unsigned char *x,unsigned char *y)
+int __cdecl CRTDLL__mbsicmp(unsigned char *x,unsigned char *y)
 {
     do {
 	if (!*x)
@@ -573,7 +613,7 @@
 /*********************************************************************
  *                  _mbsinc       (CRTDLL.205)
  */
-unsigned char* CRTDLL__mbsinc(unsigned char *x)
+unsigned char * __cdecl CRTDLL__mbsinc(unsigned char *x)
 {
     /* FIXME: mbcs */
     return x++;
@@ -583,27 +623,25 @@
 /*********************************************************************
  *                  vsprintf      (CRTDLL.500)
  */
-int CRTDLL_vsprintf(DWORD *args)
+INT32 __cdecl CRTDLL_vsprintf( LPSTR buffer, LPCSTR spec, va_list args )
 {
-	/* CMF - This makes a BIG assumption about va_list */
-	return vsprintf((char *) args[0], (char *) args[1], (va_list) &args[2]);
+    return wvsprintf32A( buffer, spec, args );
 }
 
 /*********************************************************************
- *                  vsprintf      (CRTDLL.500) (NTDLL.913)
+ *                  vswprintf      (CRTDLL.501)
  */
-int CRTDLL_sscanf(DWORD *args)
+INT32 __cdecl CRTDLL_vswprintf( LPWSTR buffer, LPCWSTR spec, va_list args )
 {
-	/* CMF - This makes a BIG assumption about va_list */
-	return vsscanf((char *) args[0], (char *) args[1], (va_list) &args[2]);
+    return wvsprintf32W( buffer, spec, args );
 }
 
-
 /*********************************************************************
  *                  _mbscpy       (CRTDLL.200)
  */
-unsigned char* CRTDLL__mbscpy(unsigned char *x,unsigned char *y)
+unsigned char* __cdecl CRTDLL__mbscpy(unsigned char *x,unsigned char *y)
 {
+    dprintf_crtdll(stddeb,"CRTDLL_mbscpy %s and %s\n",x,y);
     return strcpy(x,y);
 }
 
@@ -611,15 +649,96 @@
 /*********************************************************************
  *                  _mbscat       (CRTDLL.197)
  */
-unsigned char* CRTDLL__mbscat(unsigned char *x,unsigned char *y)
+unsigned char* __cdecl CRTDLL__mbscat(unsigned char *x,unsigned char *y)
 {
     return strcat(x,y);
 }
 
+
+/*********************************************************************
+ *                  _strcmpi   (CRTDLL.282) (CRTDLL.287)
+ */
+INT32 __cdecl CRTDLL__strcmpi( LPCSTR s1, LPCSTR s2 )
+{
+    return lstrcmpi32A( s1, s2 );
+}
+
+
+/*********************************************************************
+ *                  _strnicmp   (CRTDLL.293)
+ */
+INT32 __cdecl CRTDLL__strnicmp( LPCSTR s1, LPCSTR s2, INT32 n )
+{
+    return lstrncmpi32A( s1, s2, n );
+}
+
+
+/*********************************************************************
+ *                  _strlwr      (CRTDLL.293)
+ *
+ * convert a string in place to lowercase 
+ */
+LPSTR CRTDLL__strlwr(LPSTR x)
+{
+  unsigned char *y =x;
+  
+  dprintf_crtdll(stddeb,
+		 "CRTDLL_strlwr got %s",x);
+  while (*y) {
+    if ((*y > 0x40) && (*y< 0x5b))
+      *y = *y + 0x20;
+    y++;
+  }
+  dprintf_crtdll(stddeb," returned %s\n",x);
+		 
+  return x;
+}
+
+/*********************************************************************
+ *                  system       (CRTDLL.485)
+ */
+INT32 CRTDLL_system(LPSTR x)
+{
+#define SYSBUF_LENGTH 1500
+  char buffer[SYSBUF_LENGTH]="wine \"";
+  unsigned char *y =x;
+  unsigned char *bp =buffer+strlen(buffer);
+  int i =strlen(buffer) + strlen(x) +2;
+
+  /* Calculate needed buffer size tp prevent overflow*/
+  while (*y) {
+    if (*y =='\\') i++;
+    y++;
+  }
+  /* if buffer to short, exit */
+  if (i > SYSBUF_LENGTH) {
+    dprintf_crtdll(stddeb,"_system buffer to small\n");
+    return 127;
+  }
+  
+  y =x;
+
+  while (*y) {
+    *bp = *y;
+    bp++; y++;
+    if (*(y-1) =='\\') *bp++ = '\\';
+  }
+  /* remove spaces from end of string */
+  while (*(y-1) == ' ') {
+    bp--;y--;
+  }
+  *bp++ = '"';
+  *bp = 0;
+  dprintf_crtdll(stddeb,
+		 "_system got \"%s\", executing \"%s\"\n",x,buffer);
+
+  return system(buffer);
+}
+
 /*********************************************************************
  *                  _strupr       (CRTDLL.300)
  */
-LPSTR CRTDLL__strupr(LPSTR x)
+LPSTR __cdecl CRTDLL__strupr(LPSTR x)
 {
 	LPSTR	y=x;
 
@@ -633,7 +752,7 @@
 /*********************************************************************
  *                  _wcsupr       (CRTDLL.328)
  */
-LPWSTR CRTDLL__wcsupr(LPWSTR x)
+LPWSTR __cdecl CRTDLL__wcsupr(LPWSTR x)
 {
 	LPWSTR	y=x;
 
@@ -647,7 +766,7 @@
 /*********************************************************************
  *                  _wcslwr       (CRTDLL.323)
  */
-LPWSTR CRTDLL__wcslwr(LPWSTR x)
+LPWSTR __cdecl CRTDLL__wcslwr(LPWSTR x)
 {
 	LPWSTR	y=x;
 
@@ -662,7 +781,7 @@
 /*********************************************************************
  *                  malloc        (CRTDLL.427)
  */
-VOID* CRTDLL_malloc(DWORD size)
+VOID* __cdecl CRTDLL_malloc(DWORD size)
 {
     return HeapAlloc(GetProcessHeap(),0,size);
 }
@@ -670,7 +789,7 @@
 /*********************************************************************
  *                  new           (CRTDLL.001)
  */
-VOID* CRTDLL_new(DWORD size)
+VOID* __cdecl CRTDLL_new(DWORD size)
 {
     VOID* result;
     if(!(result = HeapAlloc(GetProcessHeap(),0,size)) && new_handler)
@@ -681,7 +800,7 @@
 /*********************************************************************
  *                  set_new_handler(CRTDLL.003)
  */
-new_handler_type CRTDLL_set_new_handler(new_handler_type func)
+new_handler_type __cdecl CRTDLL_set_new_handler(new_handler_type func)
 {
     new_handler_type old_handler = new_handler;
     new_handler = func;
@@ -691,7 +810,7 @@
 /*********************************************************************
  *                  calloc        (CRTDLL.350)
  */
-VOID* CRTDLL_calloc(DWORD size, DWORD count)
+VOID* __cdecl CRTDLL_calloc(DWORD size, DWORD count)
 {
     return HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, size * count );
 }
@@ -699,7 +818,7 @@
 /*********************************************************************
  *                  realloc        (CRTDLL.447)
  */
-VOID* CRTDLL_realloc( VOID *ptr, DWORD size )
+VOID* __cdecl CRTDLL_realloc( VOID *ptr, DWORD size )
 {
     return HeapReAlloc( GetProcessHeap(), 0, ptr, size );
 }
@@ -707,7 +826,7 @@
 /*********************************************************************
  *                  free          (CRTDLL.427)
  */
-VOID CRTDLL_free(LPVOID ptr)
+VOID __cdecl CRTDLL_free(LPVOID ptr)
 {
     HeapFree(GetProcessHeap(),0,ptr);
 }
@@ -715,7 +834,7 @@
 /*********************************************************************
  *                  delete       (CRTDLL.002)
  */
-VOID CRTDLL_delete(VOID* ptr)
+VOID __cdecl CRTDLL_delete(VOID* ptr)
 {
     HeapFree(GetProcessHeap(),0,ptr);
 }
@@ -723,24 +842,108 @@
 /*********************************************************************
  *                  _strdup          (CRTDLL.285)
  */
-LPSTR CRTDLL__strdup(LPSTR ptr)
+LPSTR __cdecl CRTDLL__strdup(LPSTR ptr)
 {
     return HEAP_strdupA(GetProcessHeap(),0,ptr);
 }
 
+
 /*********************************************************************
  *                  fclose           (CRTDLL.362)
  */
-DWORD CRTDLL_fclose(LPVOID x)
+INT32 __cdecl CRTDLL_fclose( FILE *stream )
 {
-    dprintf_crtdll(stdnimp,"fclose(%p)\n",x);
-    return 0;
+    int unix_handle=fileno(stream);
+    HFILE32 dos_handle=3;
+    HFILE32 ret=EOF;
+
+    if (unix_handle<4) ret= fclose(stream);
+    else {
+      while(FILE_GetUnixHandle(dos_handle) != unix_handle) dos_handle++;
+      fclose(stream);
+      ret = _lclose32( dos_handle);
+    }
+    dprintf_crtdll(stddeb,"CRTDLL_fclose(%p) ufh %d dfh %d%s\n",
+		   stream,unix_handle,dos_handle,(ret)?" failed":"");
+    return ret;
+}
+
+/*********************************************************************
+ *                  _unlink           (CRTDLL.315)
+ */
+INT32 __cdecl CRTDLL__unlink(LPCSTR pathname)
+{
+    int ret=0;
+    DOS_FULL_NAME full_name;
+
+    if (!DOSFS_GetFullName( pathname, FALSE, &full_name )) {
+      dprintf_crtdll(stddeb,"CRTDLL_unlink file %s bad name\n",pathname);
+      return EOF;
+    }
+  
+    ret=unlink(full_name.long_name);
+    dprintf_crtdll(stddeb,"CRTDLL_unlink(%s unix %s)%s\n",
+		   pathname,full_name.long_name, (ret)?" failed":"");
+    return ret;
+}
+
+/*********************************************************************
+ *                  _open           (CRTDLL.239)
+ */
+HFILE32 __cdecl CRTDLL__open(LPCSTR path,INT32 flags)
+{
+    HFILE32 ret=0;
+    int wineflags=0;
+    
+    /* FIXME:
+       the flags in lcc's header differ from the ones in Linux, e.g.
+       Linux: define O_APPEND         02000   (= 0x400)
+       lcc:  define _O_APPEND       0x0008  
+       so here a scheme to translate them
+       Probably lcc is wrong here, but at least a hack to get is going
+       */
+    wineflags = (flags & 3);
+    if (flags & 0x0008 ) wineflags |= O_APPEND;
+    if (flags & 0x0100 ) wineflags |= O_CREAT;
+    if (flags & 0x0200 ) wineflags |= O_TRUNC;
+    if (flags & 0x0400 ) wineflags |= O_EXCL;
+    if (flags & 0xf0f4 ) 
+      dprintf_crtdll(stddeb,"CRTDLL_open file unsupported flags 0x%04x\n",flags);
+    /* End Fixme */
+
+    ret = FILE_Open(path,wineflags);
+    dprintf_crtdll(stddeb,"CRTDLL_open file %s mode 0x%04x (lccmode 0x%04x) got dfh %d\n",
+		   path,wineflags,flags,ret);
+    return ret;
+}
+
+/*********************************************************************
+ *                  _close           (CRTDLL.57)
+ */
+INT32 __cdecl CRTDLL__close(HFILE32 fd)
+{
+    int ret=_lclose32(fd);
+
+    dprintf_crtdll(stddeb,"CRTDLL_close(%d)%s\n",fd,(ret)?" failed":"");
+    return ret;
+}
+
+/*********************************************************************
+ *                  feof           (CRTDLL.363)
+ */
+INT32 __cdecl CRTDLL_feof( FILE *stream )
+{
+    int ret;
+    
+    ret=feof(stream);
+    dprintf_crtdll(stddeb,"CRTDLL_feof(%p) %s\n",stream,(ret)?"true":"false");
+    return ret;
 }
 
 /*********************************************************************
  *                  setlocale           (CRTDLL.453)
  */
-LPSTR CRTDLL_setlocale(INT32 category,LPCSTR locale)
+LPSTR __cdecl CRTDLL_setlocale(INT32 category,LPCSTR locale)
 {
 	LPSTR categorystr;
 
@@ -753,31 +956,53 @@
 	case CRTDLL_LC_TIME: categorystr="LC_TIME";break;
 	default: categorystr = "UNKNOWN?";break;
 	}
-	fprintf(stderr,"CRTDLL.setlocale(%s,%s),stub!\n",categorystr,locale);
+	fprintf(stderr,"CRTDLL_setlocale(%s,%s),stub!\n",categorystr,locale);
 	return "C";
 }
 
 /*********************************************************************
- *                  wcsspn           (CRTDLL.516)
+ *                  wcscat           (CRTDLL.503)
  */
-INT32 CRTDLL_wcsspn(LPWSTR str,LPWSTR accept)
+LPWSTR __cdecl CRTDLL_wcscat( LPWSTR s1, LPCWSTR s2 )
 {
-	LPWSTR	s,t;
+    return lstrcat32W( s1, s2 );
+}
+
+/*********************************************************************
+ *                  wcschr           (CRTDLL.504)
+ */
+LPWSTR __cdecl CRTDLL_wcschr(LPWSTR str,WCHAR xchar)
+{
+	LPWSTR	s;
 
 	s=str;
 	do {
-		t=accept;
-		while (*t) { if (*t==*s) break;t++;}
-		if (!*t) break;
-		s++;
-	} while (*s);
-	return s-str; /* nr of wchars */
+		if (*s==xchar)
+			return s;
+	} while (*s++);
+	return NULL;
+}
+
+/*********************************************************************
+ *                  wcscmp           (CRTDLL.505)
+ */
+INT32 __cdecl CRTDLL_wcscmp( LPCWSTR s1, LPCWSTR s2 )
+{
+    return lstrcmp32W( s1, s2 );
+}
+
+/*********************************************************************
+ *                  wcscpy           (CRTDLL.507)
+ */
+LPWSTR __cdecl CRTDLL_wcscpy( LPWSTR s1, LPCWSTR s2 )
+{
+    return lstrcpy32W( s1, s2 );
 }
 
 /*********************************************************************
  *                  wcscspn           (CRTDLL.508)
  */
-INT32 CRTDLL_wcscspn(LPWSTR str,LPWSTR reject)
+INT32 __cdecl CRTDLL_wcscspn(LPWSTR str,LPWSTR reject)
 {
 	LPWSTR	s,t;
 
@@ -792,49 +1017,91 @@
 }
 
 /*********************************************************************
- *                  wcschr           (CRTDLL.504)
+ *                  wcslen           (CRTDLL.510)
  */
-LPWSTR CRTDLL_wcschr(LPWSTR str,WCHAR xchar)
+INT32 __cdecl CRTDLL_wcslen( LPCWSTR s )
 {
-	LPWSTR	s;
+    return lstrlen32W( s );
+}
+
+/*********************************************************************
+ *                  wcsncat           (CRTDLL.511)
+ */
+LPWSTR __cdecl CRTDLL_wcsncat( LPWSTR s1, LPCWSTR s2, INT32 n )
+{
+    return lstrcatn32W( s1, s2, n );
+}
+
+/*********************************************************************
+ *                  wcsncmp           (CRTDLL.512)
+ */
+INT32 __cdecl CRTDLL_wcsncmp( LPCWSTR s1, LPCWSTR s2, INT32 n )
+{
+    return lstrncmp32W( s1, s2, n );
+}
+
+/*********************************************************************
+ *                  wcsncpy           (CRTDLL.513)
+ */
+LPWSTR __cdecl CRTDLL_wcsncpy( LPWSTR s1, LPCWSTR s2, INT32 n )
+{
+    return lstrcpyn32W( s1, s2, n );
+}
+
+/*********************************************************************
+ *                  wcsspn           (CRTDLL.516)
+ */
+INT32 __cdecl CRTDLL_wcsspn(LPWSTR str,LPWSTR accept)
+{
+	LPWSTR	s,t;
 
 	s=str;
 	do {
-		if (*s==xchar)
-			return s;
-	} while (*s++);
-	return NULL;
+		t=accept;
+		while (*t) { if (*t==*s) break;t++;}
+		if (!*t) break;
+		s++;
+	} while (*s);
+	return s-str; /* nr of wchars */
 }
 
 /*********************************************************************
  *                  towupper           (CRTDLL.494)
  */
-WCHAR CRTDLL_towupper(WCHAR x)
+WCHAR __cdecl CRTDLL_towupper(WCHAR x)
 {
     return (WCHAR)toupper((CHAR)x);
 }
 
 /*********************************************************************
- *                  swprintf           (CRTDLL.483)
+ *                  _wcsicmp           (CRTDLL.321)
  */
-DWORD CRTDLL_swprintf(DWORD *args)
+DWORD __cdecl CRTDLL__wcsicmp( LPCWSTR s1, LPCWSTR s2 )
 {
-    return WIN32_wsprintf32W(args);
+    return lstrcmpi32W( s1, s2 );
 }
 
 /*********************************************************************
  *                  _wcsicoll           (CRTDLL.322)
  */
-DWORD CRTDLL__wcsicoll(LPWSTR a1,LPWSTR a2)
+DWORD __cdecl CRTDLL__wcsicoll(LPCWSTR a1,LPCWSTR a2)
 {
     /* FIXME: handle collates */
     return lstrcmpi32W(a1,a2);
 }
 
 /*********************************************************************
+ *                  _wcsnicmp           (CRTDLL.324)
+ */
+DWORD __cdecl CRTDLL__wcsnicmp( LPCWSTR s1, LPCWSTR s2, INT32 len )
+{
+    return lstrncmpi32W( s1, s2, len );
+}
+
+/*********************************************************************
  *                  wcscoll           (CRTDLL.506)
  */
-DWORD CRTDLL_wcscoll(LPWSTR a1,LPWSTR a2)
+DWORD __cdecl CRTDLL_wcscoll(LPWSTR a1,LPWSTR a2)
 {
     /* FIXME: handle collates */
     return lstrcmp32W(a1,a2);
@@ -843,7 +1110,7 @@
 /*********************************************************************
  *                  _wcsrev           (CRTDLL.326)
  */
-VOID CRTDLL__wcsrev(LPWSTR s) {
+VOID __cdecl CRTDLL__wcsrev(LPWSTR s) {
 	LPWSTR	e;
 
 	e=s;
@@ -860,7 +1127,7 @@
 /*********************************************************************
  *                  wcsstr           (CRTDLL.517)
  */
-LPWSTR CRTDLL_wcsstr(LPWSTR s,LPWSTR b)
+LPWSTR __cdecl CRTDLL_wcsstr(LPWSTR s,LPWSTR b)
 {
 	LPWSTR	x,y,c;
 
@@ -878,9 +1145,18 @@
 }
 
 /*********************************************************************
+ *                  wcstombs   (CRTDLL.521)
+ */
+INT32 __cdecl CRTDLL_wcstombs( LPSTR dst, LPCWSTR src, INT32 len )
+{
+    lstrcpynWtoA( dst, src, len );
+    return strlen(dst);  /* FIXME: is this right? */
+}
+
+/*********************************************************************
  *                  wcsrchr           (CRTDLL.515)
  */
-LPWSTR CRTDLL_wcsrchr(LPWSTR str,WCHAR xchar)
+LPWSTR __cdecl CRTDLL_wcsrchr(LPWSTR str,WCHAR xchar)
 {
 	LPWSTR	s;
 
@@ -895,52 +1171,115 @@
 
 /*********************************************************************
  *                  _setmode           (CRTDLL.265)
- * FIXME: dunno what this is.
+ * FIXME: At present we ignore the request to translate CR/LF to LF.
+ *
+ * We allways translate when we read with fgets, we never do with fread
+ *
  */
-DWORD
-CRTDLL__setmode(LPVOID x,INT32 y) {
+INT32 __cdecl CRTDLL__setmode( INT32 fh,INT32 mode)
+{
 	/* FIXME */
-	fprintf(stdnimp,"CRTDLL._setmode(%p,%d), STUB.\n",x,y);
-	return 0;
+#define O_TEXT     0x4000
+#define O_BINARY   0x8000
+
+	dprintf_crtdll(stddeb,
+		       "CRTDLL._setmode on fhandle %d mode %s, STUB.\n",
+		fh,(mode=O_TEXT)?"O_TEXT":
+		(mode=O_BINARY)?"O_BINARY":"UNKNOWN");
+	return -1;
 }
 
 /*********************************************************************
  *                  atexit           (CRTDLL.345)
  */
-INT32
-CRTDLL_atexit(LPVOID x) {
+INT32 __cdecl CRTDLL_atexit(LPVOID x)
+{
 	/* FIXME */
 	fprintf(stdnimp,"CRTDLL.atexit(%p), STUB.\n",x);
 	return 0; /* successful */
 }
 
 /*********************************************************************
+ *                  mblen          (CRTDLL.428)
+ * FIXME: check multibyte support
+ */
+WCHAR  __cdecl CRTDLL_mblen(CHAR *mb,INT32 size)
+{
+
+    int ret=1;
+    
+    if (!mb)
+      ret = 0;
+    else if ((size<1)||(!*(mb+1)))
+      ret = -1;
+    else if (!(*mb))
+      ret =0;
+      
+    dprintf_crtdll(stderr,"CRTDLL_mlen %s for max %d bytes ret %d\n",mb,size,ret);
+
+    return ret;
+}
+
+/*********************************************************************
  *                  mbstowcs           (CRTDLL.429)
  * FIXME: check multibyte support
  */
-INT32
-CRTDLL_mbstowcs(LPWSTR a,LPSTR b,INT32 nr) {
-	int	i;
-	for (i=0;(i<nr) && b[i];i++) {
-		a[i] = (WCHAR)b[i];
+INT32 __cdecl CRTDLL_mbstowcs(LPWSTR wcs, LPCSTR mbs, INT32 size)
+{
+
+/* Slightly modified lstrcpynAtoW functions from memory/strings.c
+ *  We need the numberr of characters transfered 
+ *  FIXME: No multibyte support yet
+ */
+
+    LPWSTR p = wcs;
+    LPCSTR src= mbs;
+    int ret, n=size;
+
+    while ((n-- > 0) && *src) {
+      *p++ = (WCHAR)(unsigned char)*src++;
 	}
-	return i;
+    p++;
+    ret = (p -wcs);
+          
+    dprintf_crtdll(stddeb,"CRTDLL_mbstowcs %s for %d chars put %d wchars\n",
+		   mbs,size,ret);
+    return ret;
 }
 
 /*********************************************************************
  *                  mbtowc           (CRTDLL.430)
  * FIXME: check multibyte support
  */
-WCHAR
-CRTDLL_mbtowc(CHAR a) {
-	return a;
+WCHAR __cdecl CRTDLL_mbtowc(WCHAR* wc,CHAR* mb,INT32 size) 
+{
+   int ret;
+
+   if (!mb)
+     ret = 0;
+   else if (!wc)
+     ret =-1;
+   else 
+     if ( (ret = mblen(mb,size)) != -1 )
+       {
+	 if (ret <= sizeof(char))
+	   *wc = (WCHAR) ((unsigned char)*mb);
+        else
+        ret=   -1;
+        }   
+     else
+       ret = -1;
+   
+   dprintf_crtdll(stderr,"CRTDLL_mbtowc %s for %d chars\n",mb,size);
+         
+   return ret;
 }
 
 /*********************************************************************
  *                  _isctype           (CRTDLL.138)
  */
-BOOL32
-CRTDLL__isctype(CHAR x,CHAR type) {
+BOOL32 __cdecl CRTDLL__isctype(CHAR x,CHAR type)
+{
 	if ((type & CRTDLL_SPACE) && isspace(x))
 		return TRUE;
 	if ((type & CRTDLL_PUNCT) && ispunct(x))
@@ -962,8 +1301,8 @@
 /*********************************************************************
  *                  _chdrive           (CRTDLL.52)
  */
-BOOL32
-CRTDLL__chdrive(INT32 newdrive) {
+BOOL32 __cdecl CRTDLL__chdrive(INT32 newdrive)
+{
 	/* FIXME: generates errnos */
 	return DRIVE_SetCurrentDrive(newdrive);
 }
@@ -971,18 +1310,51 @@
 /*********************************************************************
  *                  _chdir           (CRTDLL.51)
  */
-INT32
-CRTDLL__chdir(LPCSTR newdir) {
+INT32 __cdecl CRTDLL__chdir(LPCSTR newdir)
+{
 	if (!SetCurrentDirectory32A(newdir))
 		return -1;
 	return 0;
 }
 
 /*********************************************************************
+ *                  _getcwd           (CRTDLL.120)
+ */
+CHAR* __cdecl CRTDLL__getcwd(LPSTR buf, INT32 size)
+{
+  DOS_FULL_NAME full_name;
+  char *ret;
+
+  dprintf_crtdll(stddeb,"CRTDLL_getcwd for buf %p size %d\n",
+		 buf,size);
+  if (buf == NULL)
+    {
+      dprintf_crtdll(stderr,"CRTDLL_getcwd malloc unsupported\n");
+      printf("CRTDLL_getcwd malloc unsupported\n");
+      return 0;
+    }
+  ret = getcwd(buf,size);
+  if (!DOSFS_GetFullName( buf, FALSE, &full_name )) 
+    {
+      dprintf_crtdll(stddeb,"CRTDLL_getcwd failed\n");
+      return 0;
+    }
+  if (strlen(full_name.short_name)>size) 
+    {
+      dprintf_crtdll(stddeb,"CRTDLL_getcwd string too long\n");
+      return 0;
+    }
+  ret=strcpy(buf,full_name.short_name);
+  if (ret) 
+    dprintf_crtdll(stddeb,"CRTDLL_getcwd returned:%s\n",ret);
+  return ret;
+}
+
+/*********************************************************************
  *                  _mkdir           (CRTDLL.234)
  */
-INT32
-CRTDLL__mkdir(LPCSTR newdir) {
+INT32 __cdecl CRTDLL__mkdir(LPCSTR newdir)
+{
 	if (!CreateDirectory32A(newdir,NULL))
 		return -1;
 	return 0;
@@ -992,8 +1364,8 @@
  *                  _errno           (CRTDLL.52)
  * Yes, this is a function.
  */
-LPINT32
-CRTDLL__errno() {
+LPINT32 __cdecl CRTDLL__errno()
+{
 	static	int crtdllerrno;
 	extern int LastErrorToErrno(DWORD);
 
@@ -1001,3 +1373,83 @@
 	crtdllerrno = LastErrorToErrno(GetLastError());
 	return &crtdllerrno;
 }
+
+/*********************************************************************
+ *                  _tempnam           (CRTDLL.305)
+ * 
+ */
+LPSTR __cdecl CRTDLL__tempnam(LPCSTR dir, LPCSTR prefix)
+{
+
+     char *ret;
+     DOS_FULL_NAME tempname;
+     
+     if ((ret = tempnam(dir,prefix))==NULL) {
+       dprintf_crtdll(stddeb,
+		      "CRTDLL_tempnam Unable to get unique filename\n");
+       return NULL;
+     }
+     if (!DOSFS_GetFullName(ret,FALSE,&tempname))
+     {
+       dprintf_crtdll(stddeb,
+		      "CRTDLL_tempnam Wrong path?\n");
+       return NULL;
+     }
+     free(ret);
+     if ((ret = CRTDLL_malloc(strlen(tempname.short_name)+1)) == NULL) {
+	 dprintf_crtdll(stddeb,
+			"CRTDLL_tempnam CRTDL_malloc for shortname failed\n");
+	 return NULL;
+     }
+     if ((ret = strcpy(ret,tempname.short_name)) == NULL) { 
+       dprintf_crtdll(stddeb,
+		      "CRTDLL_tempnam Malloc for shortname failed\n");
+       return NULL;
+     }
+     
+     dprintf_crtdll(stddeb,"CRTDLL_tempnam dir %s prefix %s got %s\n",
+		    dir,prefix,ret);
+     return ret;
+
+}
+/*********************************************************************
+ *                  tmpnam           (CRTDLL.490)
+ *
+ * lcclnk from lcc-win32 relies on a terminating dot in the name returned
+ * 
+ */
+LPSTR __cdecl CRTDLL_tmpnam(LPSTR s)
+{
+     char *ret;
+
+     if ((ret =tmpnam(s))== NULL) {
+       dprintf_crtdll(stddeb,
+		      "CRTDLL_tmpnam Unable to get unique filename\n");
+       return NULL;
+     }
+     if (!DOSFS_GetFullName(ret,FALSE,&CRTDLL_tmpname))
+     {
+       dprintf_crtdll(stddeb,
+		      "CRTDLL_tmpnam Wrong path?\n");
+       return NULL;
+     }
+     strcat(CRTDLL_tmpname.short_name,".");
+     dprintf_crtdll(stddeb,"CRTDLL_tmpnam for buf %p got %s\n",
+		    s,CRTDLL_tmpname.short_name);
+     dprintf_crtdll(stddeb,"CRTDLL_tmpnam long got %s\n",
+		    CRTDLL_tmpname.long_name);
+     if ( s != NULL) 
+       return strcpy(s,CRTDLL_tmpname.short_name);
+     else 
+       return CRTDLL_tmpname.short_name;
+
+}
+
+/*********************************************************************
+ *                  _itoa           (CRTDLL.165)
+ */
+LPSTR  __cdecl CRTDLL__itoa(INT32 x,LPSTR buf,INT32 buflen)
+{
+    wsnprintf32A(buf,buflen,"%d",x);
+    return buf;
+}
diff --git a/misc/lstr.c b/misc/lstr.c
index 64190c3..f2fd7c6 100644
--- a/misc/lstr.c
+++ b/misc/lstr.c
@@ -137,7 +137,7 @@
     for (p = buffer; *str; str++) if (*str != '\r') *p++ = *str;
     *p = '\0';
     if ((p > buffer) && (p[-1] == '\n')) p[1] = '\0'; /* Remove trailing \n */
-    module = MODULE_GetModuleName( GetExePtr(GetCurrentTask()) );
+    module = MODULE_GetModuleName( GetCurrentTask() );
     fprintf( stderr, "OutputDebugString: %s says '%s'\n",
              module ? module : "???", buffer );
     HeapFree( GetProcessHeap(), 0, buffer );
@@ -475,7 +475,7 @@
 }
 
 /***********************************************************************
- *           FormatMessageA   (KERNEL32.138) Library Version
+ *           FormatMessage32A   (KERNEL32.138)
  * FIXME: missing wrap,FROM_SYSTEM message-loading,
  */
 DWORD WINAPI FormatMessage32A(
@@ -577,10 +577,7 @@
 						if (dwFlags & FORMAT_MESSAGE_ARGUMENT_ARRAY)
 							argliststart=args+insertnr-1;
 						else
-							/* FIXME: not sure that this is
-							 * correct for unix-c-varargs.
-							 */
-							argliststart=((DWORD*)&args)+insertnr-1;
+                                                    argliststart=(*(DWORD**)args)+insertnr-1;
 
 						if (fmtstr[strlen(fmtstr)]=='s')
 							sprintfbuf=HeapAlloc(GetProcessHeap(),0,strlen((LPSTR)argliststart[0])+1);
@@ -643,44 +640,10 @@
 }
 #undef ADD_TO_T
 
+
 /***********************************************************************
- *           FormatMessageA   (KERNEL32.138) Emulator Version
+ *           FormatMessage32W   (KERNEL32.138)
  */
-DWORD WINAPI WIN32_FormatMessage32A(DWORD *args)
-{
-	DWORD	dwFlags		= args[0];
-	LPCVOID	lpSource	= (LPCVOID)args[1];
-	DWORD	dwMessageId	= args[2];
-	DWORD	dwLanguageId	= args[3];
-	LPSTR	lpBuffer	= (LPSTR)args[4];
-	DWORD	nSize		= args[5];
-	DWORD	*xargs;
-
-	/* convert possible varargs to an argument array look-a-like */
-
-	if (dwFlags & FORMAT_MESSAGE_ARGUMENT_ARRAY) {
-		xargs=(DWORD*)args[6];
-	} else {
-		/* args[6] is a pointer to a pointer to the start of 
-		 * a list of arguments.
-		 */
-		if (args[6])
-			xargs=(DWORD*)(((DWORD*)args[6])[0]);
-		else
-			xargs=NULL;
-		dwFlags|=FORMAT_MESSAGE_ARGUMENT_ARRAY;
-	}
-	return FormatMessage32A(
-		dwFlags,
-		lpSource,
-		dwMessageId,
-		dwLanguageId,
-		lpBuffer,
-		nSize,
-		xargs
-	);
-}
-
 DWORD WINAPI FormatMessage32W(
 	DWORD	dwFlags,
 	LPCVOID	lpSource,
@@ -781,10 +744,7 @@
 					if (dwFlags & FORMAT_MESSAGE_ARGUMENT_ARRAY)
 						argliststart=args+insertnr-1;
 					else
-						/* FIXME: not sure that this is
-						 * correct for unix-c-varargs.
-						 */
-						argliststart=((DWORD*)&args)+insertnr-1;
+						argliststart=(*(DWORD**)args)+insertnr-1;
 
 					if (fmtstr[strlen(fmtstr)]=='s') {
 						DWORD	xarr[3];
@@ -847,41 +807,3 @@
 			lstrlen32W(lpBuffer);
 }
 #undef ADD_TO_T
-
-/***********************************************************************
- *           FormatMessageW   (KERNEL32.138) Emulator Version
- */
-DWORD WINAPI WIN32_FormatMessage32W(DWORD *args)
-{
-	DWORD	dwFlags		= args[0];
-	LPCVOID	lpSource	= (LPCVOID)args[1];
-	DWORD	dwMessageId	= args[2];
-	DWORD	dwLanguageId	= args[3];
-	LPWSTR	lpBuffer	= (LPWSTR)args[4];
-	DWORD	nSize		= args[5];
-	DWORD	*xargs;
-
-	/* convert possible varargs to an argument array look-a-like */
-
-	if (dwFlags & FORMAT_MESSAGE_ARGUMENT_ARRAY) {
-		xargs=(DWORD*)args[6];
-	} else {
-		/* args[6] is a pointer to a pointer to the start of 
-		 * a list of arguments.
-		 */
-		if (args[6])
-			xargs=(DWORD*)(((DWORD*)args[6])[0]);
-		else
-			xargs=NULL;
-		dwFlags|=FORMAT_MESSAGE_ARGUMENT_ARRAY;
-	}
-	return FormatMessage32W(
-		dwFlags,
-		lpSource,
-		dwMessageId,
-		dwLanguageId,
-		lpBuffer,
-		nSize,
-		xargs
-	);
-}
diff --git a/misc/main.c b/misc/main.c
index 3ef3384..c158941 100644
--- a/misc/main.c
+++ b/misc/main.c
@@ -35,31 +35,123 @@
 #include "xmalloc.h"
 
 const char people[] = "Wine is available thanks to the work of "
-"Bob Amstadt, Dag Asheim, Martin Ayotte, Peter Bajusz, Ross Biro, "
-"Uwe Bonnes, Erik Bos, Fons Botman, John Brezak, Andrew Bulhak, "
-"John Burton, Niels de Carpentier, Jimen Ching, Huw D. M. Davies, "
-"Roman Dolejsi, Frans van Dorsselaer, Paul Falstad, David Faure, "
-"Olaf Flebbe, Peter Galbavy, Ramon Garcia, Matthew Ghio, "
-"Hans de Graaff, Charles M. Hannum, John Harvey, Cameron Heide, "
-"Jochen Hoenicke, Onno Hovers, Jeffrey Hsu, Miguel de Icaza, "
-"Jukka Iivonen, Lee Jaekil, Alexandre Julliard, Bang Jun-Young, "
-"Pavel Kankovsky, Jochen Karrer, Andreas Kirschbaum, Albrecht Kleine, "
-"Jon Konrath, Alex Korobka, Greg Kreider, Anand Kumria, Scott A. Laird, "
-"Andrew Lewycky, Martin von Loewis, Kenneth MacDonald, Peter MacDonald, "
-"William Magro, Juergen Marquardt, Ricardo Massaro, Marcus Meissner, "
-"Graham Menhennitt, David Metcalfe, Bruce Milner, Steffen Moeller, "
-"Andreas Mohr, Philippe De Muyter, Itai Nahshon, Michael Patra, "
-"Jim Peterson, Robert Pouliot, Keith Reynolds, Slaven Rezic, "
-"John Richardson, Johannes Ruscheinski, Thomas Sandford, "
-"Constantine Sapuntzakis, Pablo Saratxaga, Daniel Schepler, "
-"Ulrich Schmid, Bernd Schmidt, Yngvi Sigurjonsson, Stephen Simmons, "
-"Rick Sladkey, William Smith, Dominik Strasser, Vadim Strizhevsky, "
-"Erik Svendsen, Tristan Tarrant, Andrew Taylor, Duncan C Thomson, "
-"Goran Thyni, Jimmy Tirtawangsa, Jon Tombs, Linus Torvalds, "
-"Gregory Trubetskoy, Petri Tuomola, Michael Veksler, Sven Verdoolaege, "
-"Ronan Waide, Eric Warnke, Manfred Weichel, Morten Welinder, "
-"Jan Willamowius, Carl Williams, Karl Guenter Wuensch, Eric Youngdale, "
-"James Youngman, Mikolaj Zalewski, and John Zero.";
+"Bob Amstadt, "
+"Dag Asheim, "
+"Martin Ayotte, "
+"Peter Bajusz, "
+"Georg Beyerle, "
+"Ross Biro, "
+"Uwe Bonnes, "
+"Erik Bos, "
+"Fons Botman, "
+"John Brezak, "
+"Andrew Bulhak, "
+"John Burton, "
+"Niels de Carpentier, "
+"Jimen Ching, "
+"David A. Cuthbert, "
+"Huw D. M. Davies, "
+"Roman Dolejsi, "
+"Frans van Dorsselaer, "
+"Chris Faherty, "
+"Paul Falstad, "
+"David Faure, "
+"Claus Fischer, "
+"Olaf Flebbe, "
+"Chad Fraleigh, "
+"Peter Galbavy, "
+"Ramon Garcia, "
+"Matthew Ghio, "
+"Jody Goldberg, "
+"Hans de Graaff, "
+"Charles M. Hannum, "
+"Adrian Harvey, "
+"John Harvey, "
+"Cameron Heide, "
+"Jochen Hoenicke, "
+"Onno Hovers, "
+"Jeffrey Hsu, "
+"Miguel de Icaza, "
+"Jukka Iivonen, "
+"Lee Jaekil, "
+"Alexandre Julliard, "
+"Bang Jun-Young, "
+"Pavel Kankovsky, "
+"Jochen Karrer, "
+"Andreas Kirschbaum, "
+"Albrecht Kleine, "
+"Jon Konrath, "
+"Alex Korobka, "
+"Greg Kreider, "
+"Anand Kumria, "
+"Scott A. Laird, "
+"Andrew Lewycky, "
+"Martin von Loewis, "
+"Michiel van Loon, "
+"Kenneth MacDonald, "
+"Peter MacDonald, "
+"William Magro, "
+"Juergen Marquardt, "
+"Ricardo Massaro, "
+"Marcus Meissner, "
+"Graham Menhennitt, "
+"David Metcalfe, "
+"Bruce Milner, "
+"Steffen Moeller, "
+"Andreas Mohr, "
+"Philippe De Muyter, "
+"Itai Nahshon, "
+"Henrik Olsen, "
+"Michael Patra, "
+"Dimitrie O. Paun, "
+"Jim Peterson, "
+"Robert Pouliot, "
+"Keith Reynolds, "
+"Slaven Rezic, "
+"John Richardson, "
+"Rick Richardson, "
+"Doug Ridgway, "
+"Bernhard Rosenkraenzer, "
+"Johannes Ruscheinski, "
+"Thomas Sandford, "
+"Constantine Sapuntzakis, "
+"Pablo Saratxaga, "
+"Daniel Schepler, "
+"Peter Schlaile, "
+"Ulrich Schmid, "
+"Bernd Schmidt, "
+"Ingo Schneider, "
+"Victor Schneider, "
+"Yngvi Sigurjonsson, "
+"Stephen Simmons, "
+"Rick Sladkey, "
+"William Smith, "
+"Dominik Strasser, "
+"Vadim Strizhevsky, "
+"Erik Svendsen, "
+"Tristan Tarrant, "
+"Andrew Taylor, "
+"Duncan C Thomson, "
+"Goran Thyni, "
+"Jimmy Tirtawangsa, "
+"Jon Tombs, "
+"Linus Torvalds, "
+"Gregory Trubetskoy, "
+"Petri Tuomola, "
+"Michael Veksler, "
+"Sven Verdoolaege, "
+"Ronan Waide, "
+"Eric Warnke, "
+"Manfred Weichel, "
+"Morten Welinder, "
+"Lawson Whitney, "
+"Jan Willamowius, "
+"Carl Williams, "
+"Karl Guenter Wuensch, "
+"Eric Youngdale, "
+"James Youngman, "
+"Mikolaj Zalewski, "
+"and John Zero.";
 
 const WINE_LANGUAGE_DEF Languages[] =
 {
diff --git a/misc/network.c b/misc/network.c
index 3768fc9..4ebd1ff 100644
--- a/misc/network.c
+++ b/misc/network.c
@@ -153,8 +153,8 @@
 /**************************************************************************
  *				WNetGetConnection	[USER.512]
  */
-int WINAPI WNetGetConnection(LPSTR lpLocalName, 
-                             LPSTR lpRemoteName, UINT16 *cbRemoteName)
+int WINAPI WNetGetConnection16(LPSTR lpLocalName, 
+                               LPSTR lpRemoteName, UINT16 *cbRemoteName)
 {
     const char *path;
 
@@ -402,4 +402,11 @@
 }
 
 
-
+DWORD
+WNetGetConnection32A(LPCSTR localname,LPSTR remotename,LPDWORD buflen)
+{
+	UINT16	x;
+	DWORD	ret = WNetGetConnection16(localname,remotename,&x);
+	*buflen = x;
+	return ret;
+}
diff --git a/misc/ntdll.c b/misc/ntdll.c
index 43b6a5d..aeef87a 100644
--- a/misc/ntdll.c
+++ b/misc/ntdll.c
@@ -510,3 +510,27 @@
 	/* returns file io completion status */
 	return 0;
 }
+/*
+These functions were originally in CRTDLL. CRTFLL now call the C-Lib 
+function directly. So they were moved here
+*/
+
+/*********************************************************************
+ *                  atoi          (NDLL.885)
+ */
+INT32 NTDLL_atoi(LPCSTR x)
+{
+    if (!x) return 0;
+    return atoi(x);
+}
+
+/*********************************************************************
+ *                  atol          (NTDLL.886)
+ */
+LONG NTDLL_atol(LPCSTR x)
+{
+    if (!x) return 0;
+    return atol(x);
+}
+
+
diff --git a/misc/ole2.c b/misc/ole2.c
index 5f65195..8996ce9 100644
--- a/misc/ole2.c
+++ b/misc/ole2.c
@@ -17,8 +17,8 @@
  */
 DWORD WINAPI OleBuildVersion()
 {
-	dprintf_ole(stddeb,"OleBuildVersion()\n");
-	return (rmm<<16)+rup;
+    dprintf_ole(stddeb,"OleBuildVersion()\n");
+    return (rmm<<16)+rup;
 }
 
 /***********************************************************************
@@ -35,5 +35,14 @@
  */
 void WINAPI OleUninitialize()
 {
-	dprintf_ole(stdnimp,"OleUninitialize()\n");
+    dprintf_ole(stdnimp,"OleUninitialize()\n");
 }
+
+/***********************************************************************
+ *           OleFlushClipboard   [OLE2.76]
+ */
+HRESULT WINAPI OleFlushClipboard()
+{
+    return S_OK;
+}
+
diff --git a/misc/ole2nls.c b/misc/ole2nls.c
index df08c93..5fd924e 100644
--- a/misc/ole2nls.c
+++ b/misc/ole2nls.c
@@ -125,6 +125,7 @@
 	LOCALE_ENTRY(IPOSSEPBYSPACE),
 	LOCALE_ENTRY(INEGSYMPRECEDES),
 	LOCALE_ENTRY(INEGSEPBYSPACE),
+/*	LOCALE_ENTRY(FONTSIGNATURE),*/
 	{NULL,0},
 };
 
@@ -183,7 +184,7 @@
 /***********************************************************************
  *           GetUserDefaultLCID       (OLE2NLS.1)
  */
-DWORD WINAPI GetUserDefaultLCID()
+LCID WINAPI GetUserDefaultLCID()
 {
 /* Default sorting, neutral sublanguage */
     switch(Options.language)
@@ -224,7 +225,7 @@
 /***********************************************************************
  *         GetSystemDefaultLCID       (OLE2NLS.2)
  */
-DWORD WINAPI GetSystemDefaultLCID()
+LCID WINAPI GetSystemDefaultLCID()
 {
 	return GetUserDefaultLCID();
 }
@@ -232,7 +233,7 @@
 /***********************************************************************
  *         GetUserDefaultLangID       (OLE2NLS.3)
  */
-WORD WINAPI GetUserDefaultLangID()
+LANGID WINAPI GetUserDefaultLangID()
 {
 	return (WORD)GetUserDefaultLCID();
 }
@@ -240,7 +241,7 @@
 /***********************************************************************
  *         GetSystemDefaultLangID     (OLE2NLS.4)
  */
-WORD WINAPI GetSystemDefaultLangID()
+LANGID WINAPI GetSystemDefaultLangID()
 {
 	return GetUserDefaultLangID();
 }
@@ -261,6 +262,9 @@
 
 	dprintf_ole(stddeb,"GetLocaleInfo32A(%8lX,%8lX,%p,%4X)\n",
 			lcid,LCType,buf,len);
+
+	LCType &= ~(LOCALE_NOUSEROVERRIDE|LOCALE_USE_CP_ACP);
+
 	/* As an option, we could obtain the value from win.ini.
 	   This would not match the Wine compile-time option.
 	   Also, not all identifiers are available from win.ini */
@@ -303,8 +307,8 @@
 LOCVAL(LOCALE_SNATIVECTRYNAME,"Deutschland")
 LOCVAL(LOCALE_IDEFAULTLANGUAGE,"9")
 LOCVAL(LOCALE_IDEFAULTCOUNTRY,"49")
+LOCVAL(LOCALE_IDEFAULTCODEPAGE,"851")
 /* Dunno
-LOCVAL(LOCALE_IDEFAULTCODEPAGE)
 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE)
 */
 LOCVAL(LOCALE_SLIST,";")
@@ -522,8 +526,6 @@
 
     case LANG_En:
     	switch (LCType) {
-/* This definitions apply to Germany only. Users in Austria 
-   or Switzerland might want to modify them */
 LOCVAL(LOCALE_ILANGUAGE,"9")
 LOCVAL(LOCALE_SLANGUAGE,"English")
 LOCVAL(LOCALE_SENGLANGUAGE,"English")
@@ -536,8 +538,8 @@
 LOCVAL(LOCALE_SNATIVECTRYNAME,"Deutschland")
 LOCVAL(LOCALE_IDEFAULTLANGUAGE,"9")
 LOCVAL(LOCALE_IDEFAULTCOUNTRY,"49")
+LOCVAL(LOCALE_IDEFAULTCODEPAGE,"437")
 /* Dunno
-LOCVAL(LOCALE_IDEFAULTCODEPAGE)
 LOCVAL(LOCALE_IDEFAULTANSICODEPAGE)
 */
 LOCVAL(LOCALE_SLIST,";")
@@ -1685,7 +1687,8 @@
 	if(!found) {
 		fprintf(stderr,"'%s' not supported for your language.\n",
 			retString);
-		return 0;
+		retString = "<WINE-NLS-unknown>";
+		/*return 0;*/
 	}
 	if (buf)
 		lstrcpyn32A(buf,retString,len);
@@ -2029,3 +2032,59 @@
 	return strlen(languages[i].langname); /* same as strlenW(langname); */
 }
 
+
+INT32 WINAPI LCMapString32A(
+	LCID lcid,DWORD mapflags,LPCSTR srcstr,INT32 srclen,LPSTR dststr,
+	INT32 dstlen
+) {
+	int	i,len;
+
+	fprintf(stderr,"LCMapStringA(0x%04lx,0x%08lx,%s,%d,%p,%d)\n",
+		lcid,mapflags,srcstr,srclen,dststr,dstlen
+	);
+	if (!dstlen || !dststr) {
+		dststr = srcstr;
+	}
+	if (!srclen) srclen = strlen(srcstr);
+	if (!dstlen) dstlen = strlen(dststr);
+	len = dstlen;
+	if (srclen < len)
+		len = srclen;
+	if (mapflags & LCMAP_LOWERCASE) {
+		for (i=0;i<len;i++)
+			dststr[i]=tolower(srcstr[i]);
+		mapflags &= ~LCMAP_LOWERCASE;
+	}
+	if (mapflags)
+		fprintf(stderr,"	unimplemented flags: 0x%08lx\n",mapflags);
+	return len;
+}
+
+/* FIXME: implement everyhting & correct */
+
+INT32 WINAPI LCMapString32W(
+	LCID lcid,DWORD mapflags,LPCWSTR srcstr,INT32 srclen,LPWSTR dststr,
+	INT32 dstlen
+) {
+	int	i,len;
+
+	fprintf(stderr,"LCMapStringW(0x%04lx,0x%08lx,%p,%d,%p,%d)\n",
+		lcid,mapflags,srcstr,srclen,dststr,dstlen
+	);
+	if (!dstlen || !dststr) {
+		dststr = srcstr;
+	}
+	if (!srclen) srclen = strlen(srcstr);
+	if (!dstlen) dstlen = strlen(dststr);
+	len = dstlen;
+	if (srclen < len)
+		len = srclen;
+	if (mapflags & LCMAP_LOWERCASE) {
+		for (i=0;i<len;i++)
+			dststr[i]=tolower(srcstr[i]);
+		mapflags &= ~LCMAP_LOWERCASE;
+	}
+	if (mapflags)
+		fprintf(stderr,"	unimplemented flags: 0x%08lx\n",mapflags);
+	return len;
+}
diff --git a/misc/printdrv.c b/misc/printdrv.c
index 2a6cc30..1ad9e09 100644
--- a/misc/printdrv.c
+++ b/misc/printdrv.c
@@ -83,7 +83,7 @@
                                 LPSTR pDeviceName, LPDEVMODE32A pDevModeOutput,
                                   LPDEVMODE32A pDevModeInput,DWORD fMode )
 {
-    fprintf(stderr,"DocumentPropertiesA(%d,%d,%s,%p,%p,%d)\n",
+    fprintf(stderr,"DocumentPropertiesA(%d,%d,%s,%p,%p,%ld)\n",
 	hWnd,hPrinter,pDeviceName,pDevModeOutput,pDevModeInput,fMode
     );
     return 1;
diff --git a/misc/registry.c b/misc/registry.c
index 56dea7d..e14b342 100644
--- a/misc/registry.c
+++ b/misc/registry.c
@@ -2093,11 +2093,33 @@
 		hkey,lpszValueName,lpdwReserved,lpdwType,lpbData,
 		lpcbData?*lpcbData:0
 	);
+	if (lpszValueName)
+		lpszValueNameW=strdupA2W(lpszValueName);
+	else 
+		lpszValueNameW=NULL;
+
+	if (lpdwType)
+		type=*lpdwType;
+
 	if (lpbData) {
-		/* double buffer */
-		buf	= (LPBYTE)xmalloc((*lpcbData)*2);
-		myxlen	= *lpcbData*2;
+		myxlen  = 0;
 		mylen	= &myxlen;
+		buf	= xmalloc(4);
+		ret=RegQueryValueEx32W(
+			hkey,
+			lpszValueNameW,
+			lpdwReserved,
+			&type,
+			buf,
+			mylen
+		);
+		free(buf);
+		if (ret==ERROR_MORE_DATA) {
+			buf	= (LPBYTE)xmalloc(*mylen);
+		} else {
+			buf	= (LPBYTE)xmalloc(2*(*lpcbData));
+			myxlen  = 2*(*lpcbData);
+		}
 	} else {
 		buf=NULL;
 		if (lpcbData) {
@@ -2106,13 +2128,6 @@
 		} else
 			mylen	= NULL;
 	}
-	if (lpszValueName)
-		lpszValueNameW=strdupA2W(lpszValueName);
-	else 
-		lpszValueNameW=NULL;
-
-	if (lpdwType)
-		type=*lpdwType;
 	ret=RegQueryValueEx32W(
 		hkey,
 		lpszValueNameW,
diff --git a/misc/shell.c b/misc/shell.c
index b3a9ffe..63e618a 100644
--- a/misc/shell.c
+++ b/misc/shell.c
@@ -46,7 +46,7 @@
 
 #pragma pack(4)
 
-extern HGLOBAL16 CURSORICON_LoadHandler( HGLOBAL16, HINSTANCE16, BOOL32);
+extern HICON16   LoadIconHandler( HGLOBAL16 hResource, BOOL16 bNew );
 extern WORD 	 GetIconID( HGLOBAL16 hResource, DWORD resType );
 
 static const char*	lpstrMsgWndCreated = "OTHERWINDOWCREATED";
@@ -688,34 +688,40 @@
       if( nIconIndex == (UINT16)-1 ) RetPtr[0] = iconDirCount;
       else if( nIconIndex < iconDirCount )
       {
-	   UINT16   i, icon;
+	  UINT16   i, icon;
 
-	   if( n > iconDirCount - nIconIndex ) n = iconDirCount - nIconIndex;
+	  if( n > iconDirCount - nIconIndex ) n = iconDirCount - nIconIndex;
 
-	   for( i = nIconIndex; i < nIconIndex + n; i++ ) 
-	   {
-	       /* .ICO files have only one icon directory */
+	  for( i = nIconIndex; i < nIconIndex + n; i++ ) 
+	  {
+	      /* .ICO files have only one icon directory */
 
-	       if( lpiID == NULL )
+	      if( lpiID == NULL )
 	           hIcon = SHELL_LoadResource( hInstance, hFile, pIconDir + i, 
 							      *(WORD*)pData );
-	       RetPtr[i-nIconIndex] = GetIconID( hIcon, 3 );
-	       GlobalFree16(hIcon); 
-           }
+	      RetPtr[i-nIconIndex] = GetIconID( hIcon, 3 );
+	      GlobalFree16(hIcon); 
+          }
 
-	   for( icon = nIconIndex; icon < nIconIndex + n; icon++ )
-	   {
-	       hIcon = 0;
-	       if( lpiID )
+	  for( icon = nIconIndex; icon < nIconIndex + n; icon++ )
+	  {
+	      hIcon = 0;
+	      if( lpiID )
 		   hIcon = ICO_LoadIcon( hInstance, hFile, 
 					 lpiID->idEntries + RetPtr[icon-nIconIndex]);
-	       else
+	      else
 	         for( i = 0; i < iconCount; i++ )
 		   if( pIconStorage[i].id == (RetPtr[icon-nIconIndex] | 0x8000) )
 		     hIcon = SHELL_LoadResource( hInstance, hFile, pIconStorage + i,
 								    *(WORD*)pData );
-	       RetPtr[icon-nIconIndex] = (hIcon)?CURSORICON_LoadHandler( hIcon, hInstance, FALSE ):0;
-	   }
+	      if( hIcon )
+	      {
+		  RetPtr[icon-nIconIndex] = LoadIconHandler( hIcon, TRUE ); 
+		  FarSetOwner( RetPtr[icon-nIconIndex], GetExePtr(hInstance) );
+	      }
+	      else
+		  RetPtr[icon-nIconIndex] = 0;
+	  }
       }
     if( lpiID ) HeapFree( GetProcessHeap(), 0, lpiID);
     else HeapFree( GetProcessHeap(), 0, pData);
@@ -1030,3 +1036,9 @@
 	*numargs=i;
 	return argv;
 }
+
+void WINAPI Control_RunDLL(DWORD a1,DWORD a2,LPSTR a3,DWORD a4) {
+	fprintf(stderr,"Control_RunDLL(0x%08lx,0x%08lx,%s,0x%08lx)\n",
+		a1,a2,a3,a4
+	);
+}
diff --git a/misc/spy.c b/misc/spy.c
index 65490b9..56cebfe 100644
--- a/misc/spy.c
+++ b/misc/spy.c
@@ -9,6 +9,7 @@
 #include <stdio.h>
 #include <string.h>
 #include "windows.h"
+#include "win.h"
 #include "module.h"
 #include "options.h"
 #include "stddebug.h"
@@ -568,6 +569,7 @@
 
 
 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
+static BOOL16 SPY_ExcludeDWP = 0;
 static int SPY_IndentLevel  = 0;
 
 #define SPY_EXCLUDE(msg) \
@@ -578,17 +580,56 @@
  */
 const char *SPY_GetMsgName( UINT32 msg )
 {
-    static char buffer[20];
+    static char msg_buffer[20];
 
     if (msg <= SPY_MAX_MSGNUM)
     {
         if (!MessageTypeNames[msg]) return "???";
         return MessageTypeNames[msg];
     }
-    sprintf( buffer, "WM_USER+%04x", msg - WM_USER );
-    return buffer;
+    sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER );
+    return msg_buffer;
 }
 
+/***********************************************************************
+ *           SPY_GetWndName
+ */
+const char *SPY_GetWndName( HWND32 hwnd )
+{
+    static char wnd_buffer[16];
+
+    WND* pWnd = WIN_FindWndPtr( hwnd );
+    if( pWnd )
+    {
+	INT32 n = sizeof(wnd_buffer) - 6;
+	LPSTR p = wnd_buffer;
+	LPSTR src;
+	
+        char  postfix;
+	
+	if( pWnd->text && pWnd->text[0] != '\0' )
+	{
+	    src = pWnd->text;
+	    *(p++) = postfix = '\"';
+	    while ((n-- > 1) && *src) *p++ = *src++;
+	}
+	else /* get class name */
+	{
+	    INT32 len;
+
+	    *(p++)='{';
+	    GlobalGetAtomName32A( pWnd->class->atomName, p, n + 1);
+	    src = p += (len = lstrlen32A(p));
+	    if( len >= n ) src = wnd_buffer;	/* something nonzero */
+	    postfix = '}';
+	}
+	if( *src ) for( n = 0; n < 3; n++ ) *(p++)='.';
+	*(p++) = postfix;
+	*(p++) = '\0';
+    }
+    else lstrcpy32A( wnd_buffer, "\"NULL\"" );
+    return wnd_buffer;
+}
 
 /***********************************************************************
  *           SPY_EnterMessage
@@ -596,20 +637,24 @@
 void SPY_EnterMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg,
                        WPARAM32 wParam, LPARAM lParam )
 {
+    LPCSTR pname;
+
     if (!debugging_message || SPY_EXCLUDE(msg)) return;
 
     /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
     switch(iFlag)
     {
     case SPY_DISPATCHMESSAGE16:
-        dprintf_message(stddeb,"%*s(%04x) message [%04x] %s dispatched  wp=%04x lp=%08lx\n",
-                        SPY_IndentLevel, "", hWnd, msg, SPY_GetMsgName( msg ),
+	pname = SPY_GetWndName(hWnd);
+        dprintf_message(stddeb,"%*s(%04x) %-16s message [%04x] %s dispatched  wp=%04x lp=%08lx\n",
+                        SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
                         wParam, lParam);
         break;
 
     case SPY_DISPATCHMESSAGE32:
-        dprintf_message(stddeb,"%*s(%08x) message [%04x] %s dispatched  wp=%08x lp=%08lx\n",
-                        SPY_IndentLevel, "", hWnd, msg, SPY_GetMsgName( msg ),
+	pname = SPY_GetWndName(hWnd);
+        dprintf_message(stddeb,"%*s(%08x) %-16s message [%04x] %s dispatched  wp=%08x lp=%08lx\n",
+                        SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
                         wParam, lParam);
         break;
 
@@ -618,32 +663,36 @@
         {
             char taskName[30];
             HTASK16 hTask = GetWindowTask16(hWnd);
+
             if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
             else if (!hTask) strcpy( taskName, "Wine" );
             else sprintf( taskName, "task %04x %s",
-                          hTask, MODULE_GetModuleName( GetExePtr(hTask) ) );
+                          hTask, MODULE_GetModuleName(hTask) );
+	    pname = SPY_GetWndName(hWnd);
 
             if (iFlag == SPY_SENDMESSAGE16)
-                dprintf_message(stddeb,"%*s(%04x) message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
-                                SPY_IndentLevel, "", hWnd, msg,
-                                SPY_GetMsgName( msg ), taskName, wParam,
-                                lParam );
+                dprintf_message(stddeb,
+				"%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
+                                SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ), 
+				taskName, wParam, lParam );
             else
-                dprintf_message(stddeb,"%*s(%08x) message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
-                                SPY_IndentLevel, "", hWnd, msg,
-                                SPY_GetMsgName( msg ), taskName, wParam,
-                                lParam );
+                dprintf_message(stddeb,
+				"%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
+                                SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ), 
+				taskName, wParam, lParam );
         }
         break;   
 
     case SPY_DEFWNDPROC16:
-        dprintf_message(stddeb, "%*s(%04x) DefWindowProc: %s [%04x]  wp=%04x lp=%08lx\n",
+	if( SPY_ExcludeDWP ) return;
+        dprintf_message(stddeb, "%*s(%04x)  DefWindowProc16: %s [%04x]  wp=%04x lp=%08lx\n",
                         SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
                         msg, wParam, lParam );
         break;
 
     case SPY_DEFWNDPROC32:
-        dprintf_message(stddeb, "%*s(%08x) DefWindowProc: %s [%04x]  wp=%08x lp=%08lx\n",
+	if( SPY_ExcludeDWP ) return;
+        dprintf_message(stddeb, "%*s(%08x)  DefWindowProc32: %s [%04x]  wp=%08x lp=%08lx\n",
                         SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
                         msg, wParam, lParam );
         break;
@@ -657,29 +706,51 @@
  */
 void SPY_ExitMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg, LRESULT lReturn )
 {
-    if (!debugging_message || SPY_EXCLUDE(msg)) return;
+    LPCSTR pname;
+
+    if (!debugging_message || SPY_EXCLUDE(msg) ||
+	(SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND32)) )
+	return;
+
     if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
 
     switch(iFlag)
     {
+    case SPY_RESULT_DEFWND16:
+	dprintf_message(stddeb,"%*s(%04x)  DefWindowProc16: %s [%04x] returned %08lx\n",
+			SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
+	break;
+
+    case SPY_RESULT_DEFWND32:
+	dprintf_message(stddeb,"%*s(%08x)  DefWindowProc32: %s [%04x] returned %08lx\n",
+			SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
+	break;
+
     case SPY_RESULT_OK16:
-        dprintf_message(stddeb,"%*s(%04x) message [%04x] %s returned %08lx\n",
-                        SPY_IndentLevel, "", hWnd, msg,
+	pname = SPY_GetWndName(hWnd);
+        dprintf_message(stddeb,"%*s(%04x) %-16s message [%04x] %s returned %08lx\n",
+                        SPY_IndentLevel, "", hWnd, pname, msg,
                         SPY_GetMsgName( msg ), lReturn );
         break;
+
     case SPY_RESULT_OK32:
-        dprintf_message(stddeb,"%*s(%08x) message [%04x] %s returned %08lx\n",
-                        SPY_IndentLevel, "", hWnd, msg,
+	pname = SPY_GetWndName(hWnd);
+        dprintf_message(stddeb,"%*s(%08x) %-16s message [%04x] %s returned %08lx\n",
+                        SPY_IndentLevel, "", hWnd, pname, msg,
                         SPY_GetMsgName( msg ), lReturn );
         break; 
+
     case SPY_RESULT_INVALIDHWND16:
-        dprintf_message(stddeb,"%*s(%04x) message [%04x] %s HAS INVALID HWND\n",
-                        SPY_IndentLevel, "", hWnd, msg,
+	pname = SPY_GetWndName(hWnd);
+        dprintf_message(stddeb,"%*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
+                        SPY_IndentLevel, "", hWnd, pname, msg,
                         SPY_GetMsgName( msg ) );
         break;
+
     case SPY_RESULT_INVALIDHWND32:
-        dprintf_message(stddeb,"%*s(%08x) message [%04x] %s HAS INVALID HWND\n",
-                        SPY_IndentLevel, "", hWnd, msg,
+	pname = SPY_GetWndName(hWnd);
+        dprintf_message(stddeb,"%*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
+                        SPY_IndentLevel, "", hWnd, pname, msg,
                         SPY_GetMsgName( msg ) );
         break;
    }
@@ -712,5 +783,8 @@
             for (i = 0; i <= SPY_MAX_MSGNUM; i++)
                 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
     }
+
+    SPY_ExcludeDWP = PROFILE_GetWineIniInt( "Spy", "ExcludeDWP", 0 );
+
     return 1;
 }
diff --git a/misc/ver.c b/misc/ver.c
index 89426ca..dc6836c 100644
--- a/misc/ver.c
+++ b/misc/ver.c
@@ -1,7 +1,8 @@
 /* 
  * Implementation of VER.DLL
  * 
- * Copyright 1996 Marcus Meissner
+ * Copyright 1996,1997 Marcus Meissner
+ * Copyright 1997 David Cuthbert
  */
 #include <stdlib.h>
 #include <stdio.h>
@@ -166,8 +167,9 @@
 
 
 int
-read_ne_header(HFILE32 lzfd,LPIMAGE_OS2_HEADER nehd) {
+read_xx_header(HFILE32 lzfd) {
 	IMAGE_DOS_HEADER	mzh;
+	char			magic[2];
 
 	LZSeek32(lzfd,0,SEEK_SET);
 	if (sizeof(mzh)!=LZRead32(lzfd,&mzh,sizeof(mzh)))
@@ -175,22 +177,24 @@
 	if (mzh.e_magic!=IMAGE_DOS_SIGNATURE)
 		return 0;
 	LZSeek32(lzfd,mzh.e_lfanew,SEEK_SET);
-	LZREAD(nehd);
-	if (nehd->ne_magic == IMAGE_OS2_SIGNATURE) {
-		LZSeek32(lzfd,mzh.e_lfanew,SEEK_SET);
-		return 1;
-	}
-	fprintf(stderr,"misc/ver.c:read_ne_header:can't handle PE files yet.\n");
-	/* must handle PE files too. Later. */
+	if (2!=LZRead32(lzfd,magic,2))
+		return 0;
+	LZSeek32(lzfd,mzh.e_lfanew,SEEK_SET);
+	if (magic[0] == 'N' && magic[1] == 'E')
+		return IMAGE_OS2_SIGNATURE;
+	if (magic[0] == 'P' && magic[1] == 'E')
+		return IMAGE_NT_SIGNATURE;
+	fprintf(stderr,"misc/ver.c:read_ne_header:can't handle %*s files.\n",2,magic);
 	return 0;
 }
 
 
 int
 find_ne_resource(
-	HFILE32 lzfd,LPIMAGE_OS2_HEADER nehd,SEGPTR typeid,SEGPTR resid,
+	HFILE32 lzfd,SEGPTR typeid,SEGPTR resid,
 	BYTE **resdata,int *reslen,DWORD *off
 ) {
+	IMAGE_OS2_HEADER nehd;
 	NE_TYPEINFO	ti;
 	NE_NAMEINFO	ni;
 	int		i;
@@ -198,7 +202,12 @@
 	DWORD		nehdoffset;
 
 	nehdoffset = LZTELL(lzfd);
-	LZSeek32(lzfd,nehd->resource_tab_offset,SEEK_CUR);
+	LZREAD(&nehd);
+	if (nehd.resource_tab_offset==nehd.rname_tab_offset) {
+		dprintf_ver(stddeb,"no resources in NE dll\n");
+		return 0;
+	}
+	LZSeek32(lzfd,nehd.resource_tab_offset+nehdoffset,SEEK_SET);
 	LZREAD(&shiftcount);
 	dprintf_ver(stddeb,"shiftcount is %d\n",shiftcount);
 	dprintf_ver(stddeb,"reading resource typeinfo dir.\n");
@@ -212,6 +221,7 @@
 		if (!ti.type_id)
 			return 0;
 		dprintf_ver(stddeb,"    ti.typeid =%04x,count=%d\n",ti.type_id,ti.count);
+
 		skipflag=0;
 		if (!HIWORD(typeid)) {
 			if ((ti.type_id&0x8000)&&(typeid!=ti.type_id))
@@ -227,7 +237,7 @@
 				whereleft = LZTELL(lzfd);
 				LZSeek32(
 					lzfd,
-					nehdoffset+nehd->resource_tab_offset+ti.type_id,
+					nehdoffset+nehd.resource_tab_offset+ti.type_id,
 					SEEK_SET
 				);
 				LZREAD(&len);
@@ -268,7 +278,7 @@
 					whereleft = LZTELL(lzfd);
 					  LZSeek32(
 						lzfd,
-						nehdoffset+nehd->resource_tab_offset+ni.id,
+						nehdoffset+nehd.resource_tab_offset+ni.id,
 						SEEK_SET
 					);
 					LZREAD(&len);
@@ -302,31 +312,135 @@
 	}
 }
 
+extern LPIMAGE_RESOURCE_DIRECTORY GetResDirEntryW(
+	LPIMAGE_RESOURCE_DIRECTORY resdirptr,LPCWSTR name,DWORD root
+);
+
+/* Loads the specified PE resource.
+ * FIXME: shouldn't load the whole image
+ */
+int
+find_pe_resource(
+	HFILE32 lzfd,LPWSTR typeid,LPWSTR resid,
+	BYTE **resdata,int *reslen,DWORD *off
+) {
+	IMAGE_NT_HEADERS pehd;
+	int		i;
+	UINT32		nrofsections;
+	DWORD		imagesize,pehdoffset;
+	BYTE		*image;
+	IMAGE_DATA_DIRECTORY		resdir;
+	LPIMAGE_RESOURCE_DIRECTORY	resourcedir,xresdir;
+	LPIMAGE_RESOURCE_DATA_ENTRY	xresdata;
+	LPIMAGE_SECTION_HEADER		sections;
+
+	pehdoffset = LZTELL(lzfd);
+	LZREAD(&pehd);
+	resdir = pehd.OptionalHeader.DataDirectory[IMAGE_FILE_RESOURCE_DIRECTORY];
+	dprintf_ver(stddeb,"find_pe_resource(.,%p,%p,....)\n",typeid,resid);
+	if (!resdir.Size) {
+		fprintf(stderr,"misc/ver.c:find_pe_resource() no resource directory found in PE file.\n");
+		return 0;
+	}
+	imagesize = pehd.OptionalHeader.SizeOfImage;
+	image = HeapAlloc(GetProcessHeap(),0,imagesize);
+	nrofsections = pehd.FileHeader.NumberOfSections;
+
+	sections = (LPIMAGE_SECTION_HEADER)HeapAlloc(GetProcessHeap(),0,pehd.FileHeader.NumberOfSections*sizeof(IMAGE_SECTION_HEADER));
+	LZSeek32(lzfd,
+		pehdoffset+
+		sizeof(DWORD)+	/* Signature */
+		sizeof(IMAGE_FILE_HEADER)+	
+		pehd.FileHeader.SizeOfOptionalHeader,
+		SEEK_SET
+	);
+	if (	nrofsections*sizeof(IMAGE_SECTION_HEADER)!=
+		LZRead32(lzfd,sections,nrofsections*sizeof(IMAGE_SECTION_HEADER))
+	) {
+		HeapFree(GetProcessHeap(),0,image);
+		return 0;
+	}
+	for (i=0;i<nrofsections;i++) {
+		if (sections[i].Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA)
+			continue;
+		LZSeek32(lzfd,sections[i].PointerToRawData,SEEK_SET);
+		if (	sections[i].SizeOfRawData!=
+			LZRead32(lzfd,image+sections[i].VirtualAddress,sections[i].SizeOfRawData)
+		)
+			continue;
+	}
+	resourcedir = (LPIMAGE_RESOURCE_DIRECTORY)(image+resdir.VirtualAddress);
+	xresdir = GetResDirEntryW(resourcedir,typeid,(DWORD)resourcedir);
+	if (!xresdir) {
+		dprintf_ver(stddeb,"...no typeid entry found for %p\n",typeid);
+		HeapFree(GetProcessHeap(),0,image);
+		return 0;
+	}
+	xresdir = GetResDirEntryW(xresdir,resid,(DWORD)resourcedir);
+	if (!xresdir) {
+		dprintf_ver(stddeb,"...no resid entry found for %p\n",resid);
+		HeapFree(GetProcessHeap(),0,image);
+		return 0;
+	}
+	
+	xresdir = GetResDirEntryW(xresdir,0,(DWORD)resourcedir);
+	if (!xresdir) {
+		dprintf_ver(stddeb,"...no 0 (default language) entry found for %p\n",resid);
+		HeapFree(GetProcessHeap(),0,image);
+		return 0;
+	}
+	xresdata = (LPIMAGE_RESOURCE_DATA_ENTRY)xresdir;
+	*reslen	= xresdata->Size;
+	*resdata= (LPBYTE)xmalloc(*reslen);
+	memcpy(*resdata,image+xresdata->OffsetToData,*reslen);
+	/* find physical address for virtual offset */
+	for (i=0;i<nrofsections;i++) {
+		if (sections[i].Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA)
+			continue;
+		if (	(xresdata->OffsetToData >= sections[i].VirtualAddress)&&
+			(xresdata->OffsetToData < sections[i].VirtualAddress+sections[i].SizeOfRawData)
+		) {
+			*off = (DWORD)(xresdata->OffsetToData)-(DWORD)(sections[i].VirtualAddress)+(DWORD)(sections[i].PointerToRawData);
+			break;
+		}
+	}
+	HeapFree(GetProcessHeap(),0,image);
+	HeapFree(GetProcessHeap(),0,sections);
+	return 1;
+}
+
 /* GetFileResourceSize				[VER.2] */
 DWORD WINAPI GetFileResourceSize(LPCSTR filename,SEGPTR restype,SEGPTR resid,
                                  LPDWORD off)
 {
 	HFILE32			lzfd;
 	OFSTRUCT		ofs;
-	BYTE			*resdata;
-	int			reslen;
-	IMAGE_OS2_HEADER	nehd;
+	BYTE			*resdata = NULL;
+	int			reslen,res;
 
 	dprintf_ver(stddeb,"GetFileResourceSize(%s,%lx,%lx,%p)\n",
 		filename,(LONG)restype,(LONG)resid,off
 	);
 	lzfd=LZOpenFile32A(filename,&ofs,OF_READ);
-	if (lzfd==0)
+	if (!lzfd)
 		return 0;
-	if (!read_ne_header(lzfd,&nehd)) {
-		LZClose32(lzfd);
-		return 0;
+	switch (read_xx_header(lzfd)) {
+	case 0:
+	    res=0;
+	    break;
+	case IMAGE_OS2_SIGNATURE:
+	    res=find_ne_resource(lzfd,restype,resid,&resdata,&reslen,off);
+	    break;
+	case IMAGE_NT_SIGNATURE:
+	    res=find_pe_resource(lzfd,(LPWSTR)restype,(LPWSTR)resid,&resdata,&reslen,off);
+	    break;
 	}
-	if (!find_ne_resource(lzfd,&nehd,restype,resid,&resdata,&reslen,off)) {
-		LZClose32(lzfd);
-		return 0;
+	if (!res) {
+	    LZClose32(lzfd);
+	    return 0;
 	}
-	free(resdata);
+	if (resdata)
+		free(resdata);
 	LZClose32(lzfd);
 	return reslen;
 }
@@ -337,9 +451,9 @@
 {
 	HFILE32			lzfd;
 	OFSTRUCT		ofs;
-	BYTE			*resdata;
-	int			reslen=datalen;
-	IMAGE_OS2_HEADER	nehd;
+	BYTE			*resdata=NULL;
+	int			res,reslen=datalen;
+
 	dprintf_ver(stddeb,"GetFileResource(%s,%lx,%lx,%ld,%ld,%p)\n",
 		filename,(LONG)restype,(LONG)resid,off,datalen,data
 	);
@@ -348,20 +462,26 @@
 	if (lzfd==0)
 		return 0;
 	if (!off) {
-		if (!read_ne_header(lzfd,&nehd)) {
-			LZClose32(lzfd);
-			return 0;
+		switch (read_xx_header(lzfd)) {
+		case 0:	res=0;
+			break;
+		case IMAGE_OS2_SIGNATURE:
+			res= find_ne_resource(lzfd,restype,resid,&resdata,&reslen,&off);
+			break;
+		case IMAGE_NT_SIGNATURE:
+			res= find_pe_resource(lzfd,restype,resid,&resdata,&reslen,&off);
+			break;
 		}
-		if (!find_ne_resource(lzfd,&nehd,restype,resid,&resdata,&reslen,&off)) {
-			LZClose32(lzfd);
+		LZClose32(lzfd);
+		if (!res)
 			return 0;
-		}
+		if (reslen>datalen) reslen = datalen;
+		memcpy(data,resdata,reslen);
 		free(resdata);
+		return reslen;
 	}
 	LZSeek32(lzfd,off,SEEK_SET);
-	if (reslen>datalen)
-		reslen=datalen;
-	LZRead32(lzfd,data,reslen);
+	reslen = LZRead32(lzfd,data,datalen);
 	LZClose32(lzfd);
 	return reslen;
 }
@@ -369,8 +489,8 @@
 /* GetFileVersionInfoSize			[VER.6] */
 DWORD WINAPI GetFileVersionInfoSize16(LPCSTR filename,LPDWORD handle)
 {
-	DWORD	len,ret;
-	BYTE	buf[72];
+	DWORD	len,ret,isuni=0;
+	BYTE	buf[144];
 	VS_FIXEDFILEINFO *vffi;
 
 	dprintf_ver(stddeb,"GetFileVersionInfoSize16(%s,%p)\n",filename,handle);
@@ -384,15 +504,41 @@
 		return 0;
 
 	vffi=(VS_FIXEDFILEINFO*)(buf+0x14);
-	if (vffi->dwSignature != VS_FFI_SIGNATURE)
-		return 0;
+	if (vffi->dwSignature != VS_FFI_SIGNATURE) {
+		/* unicode resource */
+		if (vffi->dwSignature == 0x004f0049) {
+			isuni = 1;
+			vffi = (VS_FIXEDFILEINFO*)(buf+0x28);
+		} else {
+			fprintf(stderr,"vffi->dwSignature is 0x%08lx, but not 0x%08lx!\n",
+				vffi->dwSignature,VS_FFI_SIGNATURE
+			);
+			return 0;
+		}
+	}
 	if (*(WORD*)buf < len)
 		len = *(WORD*)buf;
-	dprintf_ver(stddeb,"->strucver=%ld.%ld,filever=%ld.%ld,productver=%ld.%ld,flagmask=%lx,flags=%lx,OS=",
+	dprintf_ver(stddeb,"	structversion=0x%lx.0x%lx,\n    fileversion=0x%lx.0x%lx,\n    productversion=0x%lx.0x%lx,\n    flagmask=0x%lx,\n    flags=",
 		(vffi->dwStrucVersion>>16),vffi->dwStrucVersion&0xFFFF,
 		vffi->dwFileVersionMS,vffi->dwFileVersionLS,
 		vffi->dwProductVersionMS,vffi->dwProductVersionLS,
-		vffi->dwFileFlagsMask,vffi->dwFileFlags
+		vffi->dwFileFlagsMask
+	);
+	if (vffi->dwFileFlags & VS_FF_DEBUG) 
+		dprintf_ver(stddeb,"DEBUG,");
+	if (vffi->dwFileFlags & VS_FF_PRERELEASE)
+		dprintf_ver(stddeb,"PRERELEASE,");
+	if (vffi->dwFileFlags & VS_FF_PATCHED)
+		dprintf_ver(stddeb,"PATCHED,");
+	if (vffi->dwFileFlags & VS_FF_PRIVATEBUILD)
+		dprintf_ver(stddeb,"PRIVATEBUILD,");
+	if (vffi->dwFileFlags & VS_FF_INFOINFERRED)
+		dprintf_ver(stddeb,"INFOINFERRED,");
+	if (vffi->dwFileFlags & VS_FF_SPECIALBUILD)
+		dprintf_ver(stddeb,"SPECIALBUILD,");
+	dprintf_ver(stddeb,"\n    OS=0x%lx.0x%lx (",
+		(vffi->dwFileOS&0xFFFF0000)>>16,
+		vffi->dwFileOS&0x0000FFFF
 	);
 	switch (vffi->dwFileOS&0xFFFF0000) {
 	case VOS_DOS:dprintf_ver(stddeb,"DOS,");break;
@@ -401,7 +547,7 @@
 	case VOS_NT:dprintf_ver(stddeb,"NT,");break;
 	case VOS_UNKNOWN:
 	default:
-		dprintf_ver(stddeb,"UNKNOWN(%ld),",vffi->dwFileOS&0xFFFF0000);break;
+		dprintf_ver(stddeb,"UNKNOWN(0x%lx),",vffi->dwFileOS&0xFFFF0000);break;
 	}
 	switch (vffi->dwFileOS & 0xFFFF) {
 	case VOS__BASE:dprintf_ver(stddeb,"BASE");break;
@@ -409,21 +555,22 @@
 	case VOS__WINDOWS32:dprintf_ver(stddeb,"WIN32");break;
 	case VOS__PM16:dprintf_ver(stddeb,"PM16");break;
 	case VOS__PM32:dprintf_ver(stddeb,"PM32");break;
-	default:dprintf_ver(stddeb,"UNKNOWN(%ld)",vffi->dwFileOS&0xFFFF);break;
+	default:dprintf_ver(stddeb,"UNKNOWN(0x%lx)",vffi->dwFileOS&0xFFFF);break;
 	}
+	dprintf_ver(stddeb,")\n    ");
 	switch (vffi->dwFileType) {
 	default:
 	case VFT_UNKNOWN:
-		dprintf_ver(stddeb,"filetype=Unknown(%ld)",vffi->dwFileType);
+		dprintf_ver(stddeb,"filetype=Unknown(0x%lx)",vffi->dwFileType);
 		break;
-	case VFT_APP:dprintf_ver(stddeb,"filetype=APP");break;
-	case VFT_DLL:dprintf_ver(stddeb,"filetype=DLL");break;
+	case VFT_APP:dprintf_ver(stddeb,"filetype=APP,");break;
+	case VFT_DLL:dprintf_ver(stddeb,"filetype=DLL,");break;
 	case VFT_DRV:
 		dprintf_ver(stddeb,"filetype=DRV,");
 		switch(vffi->dwFileSubtype) {
 		default:
 		case VFT2_UNKNOWN:
-			dprintf_ver(stddeb,"UNKNOWN(%ld)",vffi->dwFileSubtype);
+			dprintf_ver(stddeb,"UNKNOWN(0x%lx)",vffi->dwFileSubtype);
 			break;
 		case VFT2_DRV_PRINTER:
 			dprintf_ver(stddeb,"PRINTER");
@@ -464,7 +611,7 @@
 		dprintf_ver(stddeb,"filetype=FONT.");
 		switch (vffi->dwFileSubtype) {
 		default:
-			dprintf_ver(stddeb,"UNKNOWN(%ld)",vffi->dwFileSubtype);
+			dprintf_ver(stddeb,"UNKNOWN(0x%lx)",vffi->dwFileSubtype);
 			break;
 		case VFT2_FONT_RASTER:dprintf_ver(stddeb,"RASTER");break;
 		case VFT2_FONT_VECTOR:dprintf_ver(stddeb,"VECTOR");break;
@@ -474,7 +621,7 @@
 	case VFT_VXD:dprintf_ver(stddeb,"filetype=VXD");break;
 	case VFT_STATIC_LIB:dprintf_ver(stddeb,"filetype=STATIC_LIB");break;
 	}
-	dprintf_ver(stddeb,"filedata=%lx.%lx\n",vffi->dwFileDateMS,vffi->dwFileDateLS);
+	dprintf_ver(stddeb,"\n    filedata=0x%lx.0x%lx\n",vffi->dwFileDateMS,vffi->dwFileDateLS);
 	return len;
 }
 
@@ -749,7 +896,7 @@
 
 /* VerInstallFileA				[VERSION.7] */
 static LPBYTE
-_fetch_versioninfo(LPSTR fn) {
+_fetch_versioninfo(LPSTR fn,VS_FIXEDFILEINFO **vffi) {
     DWORD	alloclen;
     LPBYTE	buf;
     DWORD	ret;
@@ -766,8 +913,14 @@
 	    free(buf);
 	    alloclen = *(WORD*)buf;
 	    buf = xmalloc(alloclen);
-	} else
+	} else {
+	    *vffi = (VS_FIXEDFILEINFO*)(buf+0x14);
+	    if ((*vffi)->dwSignature == 0x004f0049) /* hack to detect unicode */
+	    	*vffi = (VS_FIXEDFILEINFO*)(buf+0x28);
+	    if ((*vffi)->dwSignature != VS_FFI_SIGNATURE)
+	    	fprintf(stderr,"_fetch_versioninfo:bad VS_FIXEDFILEINFO signature 0x%08lx\n",(*vffi)->dwSignature);
 	    return buf;
+	}
     }
 }
 
@@ -868,16 +1021,14 @@
     }
     xret = 0;
     if (!(flags & VIFF_FORCEINSTALL)) {
-    	buf1 = _fetch_versioninfo(destfn);
+	VS_FIXEDFILEINFO *destvffi,*tmpvffi;
+    	buf1 = _fetch_versioninfo(destfn,&destvffi);
 	if (buf1) {
-	    buf2 = _fetch_versioninfo(tmpfn);
+	    buf2 = _fetch_versioninfo(tmpfn,&tmpvffi);
 	    if (buf2) {
 	    	char	*tbuf1,*tbuf2;
-		VS_FIXEDFILEINFO *destvffi,*tmpvffi;
 		UINT32	len1,len2;
 
-		destvffi= (VS_FIXEDFILEINFO*)(buf1+0x14);
-		tmpvffi = (VS_FIXEDFILEINFO*)(buf2+0x14);
 		len1=len2=40;
 
 		/* compare file versions */
@@ -974,7 +1125,7 @@
 
 
 /* FIXME: UNICODE? */
-struct db {
+struct dbA {
 	WORD	nextoff;
 	WORD	datalen;
 /* in memory structure... */
@@ -985,11 +1136,25 @@
  */
 };
 
+/* FIXME: UNICODE? */
+struct dbW {
+	WORD	nextoff;
+	WORD	datalen;
+	WORD	btext;		/* type of data */
+/* in memory structure... */
+	WCHAR	name[1]; 	/* padded to dword alignment */
+/* .... 
+	WCHAR	data[datalen];     padded to dword alignment
+	BYTE	subdirdata[];      until nextoff
+ */
+};
+
+/* this one used for Win16 resources, which are always in ASCII format */
 static BYTE*
-_find_data(BYTE *block,LPCSTR str, WORD buff_remain) {
+_find_dataA(BYTE *block,LPCSTR str, WORD buff_remain) {
 	char	*nextslash;
 	int	substrlen, inc_size;
-	struct	db	*db;
+	struct	dbA	*db;
 
 	while (*str && *str=='\\')
 		str++;
@@ -1006,7 +1171,7 @@
 
 
 	while (1) {
-		db=(struct db*)block;
+		db=(struct dbA*)block;
 		dprintf_ver(stddeb,"db=%p,db->nextoff=%d,db->datalen=%d,db->name=%s,db->data=%s\n",
 			db,db->nextoff,db->datalen,db->name,(char*)((char*)db+4+((strlen(db->name)+4)&~3))
 		);
@@ -1018,7 +1183,7 @@
 			if (nextslash) {
 				inc_size = 4+((strlen(db->name)+4)&~3)+((db->datalen+3)&~3);
 
-				return _find_data( block+inc_size ,nextslash,
+				return _find_dataA( block+inc_size ,nextslash,
 							buff_remain - inc_size);
 			}
 			else
@@ -1030,13 +1195,54 @@
 	}
 }
 
+/* this one used for Win32 resources, which are always in UNICODE format */
+extern LPWSTR CRTDLL_wcschr(LPWSTR str,WCHAR xchar);
+static BYTE*
+_find_dataW(BYTE *block,LPCWSTR str, WORD buff_remain) {
+	LPWSTR	nextslash;
+	int	substrlen, inc_size;
+	struct	dbW	*db;
+
+	while (*str && *str=='\\')
+		str++;
+	if (NULL!=(nextslash=CRTDLL_wcschr(str,'\\')))
+		substrlen=nextslash-str;
+	else
+		substrlen=lstrlen32W(str);
+	if (nextslash!=NULL) {
+		while (*nextslash && *nextslash=='\\')
+			nextslash++;
+		if (!*nextslash)
+			nextslash=NULL;
+	}
+
+
+	while (1) {
+		db=(struct dbW*)block;
+		if ((!db->nextoff) || (!buff_remain)) /* no more entries ? */
+			return NULL;
+
+		if (!lstrncmp32W(db->name,str,substrlen)) {
+			if (nextslash) {
+				inc_size = 8+((lstrlen32W(db->name)*sizeof(WCHAR)+4)&~3)+((db->datalen+3)&~3);
+
+				return _find_dataW( block+inc_size ,nextslash,
+							buff_remain - inc_size);
+			} else
+				return block;
+		}
+		inc_size=((db->nextoff+3)&~3);
+		block=block+inc_size;
+		buff_remain=buff_remain-inc_size;
+	}
+}
+
 /* VerQueryValue 			[VER.11] */
 /* take care, 'buffer' is NOT a SEGPTR, it just points to one */
 DWORD WINAPI VerQueryValue16(SEGPTR segblock,LPCSTR subblock,SEGPTR *buffer,
                              UINT16 *buflen)
 {
 	BYTE	*block=PTR_SEG_TO_LIN(segblock),*b;
-	struct	db	*db;
 	char	*s;
 
 	dprintf_ver(stddeb,"VerQueryValue16(%p,%s,%p,%d)\n",
@@ -1044,16 +1250,36 @@
 	);
 	s=(char*)xmalloc(strlen("VS_VERSION_INFO\\")+strlen(subblock)+1);
 	strcpy(s,"VS_VERSION_INFO\\");strcat(s,subblock);
-	b=_find_data(block, s, *(WORD *)block);
-	if (b==NULL) {
-		*buflen=0;
-		return 0;
+
+	/* check for UNICODE version */
+	if (	(*(DWORD*)(block+0x14) != VS_FFI_SIGNATURE) && 
+		(*(DWORD*)(block+0x28) == VS_FFI_SIGNATURE)
+	) {
+		struct	dbW	*db;
+		LPWSTR	wstr;
+		wstr = HEAP_strdupAtoW(GetProcessHeap(),0,s);
+		b=_find_dataW(block, wstr, *(WORD *)block);
+		HeapFree(GetProcessHeap(),0,wstr);
+		if (!b) {
+			fprintf(stderr,"key %s not found in versionresource.\n",subblock);
+			*buflen=0;
+			return 0;
+		}
+		db=(struct dbW*)b;
+		b	= b+8+((lstrlen32W(db->name)*sizeof(WCHAR)+4)&~3);
+		*buflen	= db->datalen;
+	} else {
+		struct	dbA	*db;
+		b=_find_dataA(block, s, *(WORD *)block);
+		if (!b) {
+			fprintf(stderr,"key %s not found in versionresource.\n",subblock);
+			*buflen=0;
+			return 0;
+		}
+		db=(struct dbA*)b;
+		b	= b+4+((lstrlen32A(db->name)+4)&~3);
+		*buflen	= db->datalen;
 	}
-	db=(struct db*)b;
-	*buflen	= db->datalen;
-	/* let b point to data area */
-	b	= b+4+((strlen(db->name)+4)&~3);
-	/* now look up what the resp. SEGPTR would be ... */
 	*buffer	= (b-block)+segblock;
 	dprintf_ver(stddeb,"	-> %s=%s\n",subblock,b);
 	return 1;
@@ -1063,23 +1289,42 @@
                               LPVOID *vbuffer,UINT32 *buflen)
 {
 	BYTE	*b,*block=(LPBYTE)vblock,**buffer=(LPBYTE*)vbuffer;
-	struct	db	*db;
-	char	*s;
+	LPSTR	s;
 
 	dprintf_ver(stddeb,"VerQueryValue32A(%p,%s,%p,%d)\n",
 		block,subblock,buffer,*buflen
 	);
 	s=(char*)xmalloc(strlen("VS_VERSION_INFO\\")+strlen(subblock)+1);
 	strcpy(s,"VS_VERSION_INFO\\");strcat(s,subblock);
-	b=_find_data(block, s, *(WORD *)block);
-	if (b==NULL) {
-		*buflen=0;
-		return 0;
+	/* check for UNICODE version */
+	if (	(*(DWORD*)(block+0x14) != VS_FFI_SIGNATURE) && 
+		(*(DWORD*)(block+0x28) == VS_FFI_SIGNATURE)
+	) {
+		LPWSTR	wstr;
+		struct	dbW	*db;
+		wstr = HEAP_strdupAtoW(GetProcessHeap(),0,s);
+		b=_find_dataW(block, wstr, *(WORD *)block);
+		HeapFree(GetProcessHeap(),0,wstr);
+		if (!b) {
+			fprintf(stderr,"key %s not found in versionresource.\n",subblock);
+			*buflen=0;
+			return 0;
+		}
+		db=(struct dbW*)b;
+		*buflen	= db->datalen;
+		b	= b+8+((lstrlen32W(db->name)*sizeof(WCHAR)+4)&~3);
+	} else {
+		struct	dbA	*db;
+		b=_find_dataA(block, s, *(WORD *)block);
+		if (!b) {
+			fprintf(stderr,"key %s not found in versionresource.\n",subblock);
+			*buflen=0;
+			return 0;
+		}
+		db=(struct dbA*)b;
+		*buflen	= db->datalen;
+		b	= b+4+((lstrlen32A(db->name)+4)&~3);
 	}
-	db=(struct db*)b;
-	*buflen	= db->datalen;
-	/* let b point to data area */
-	b	= b+4+((strlen(db->name)+4)&~3);
 	*buffer	= b;
 	dprintf_ver(stddeb,"	-> %s=%s\n",subblock,b);
 	return 1;
@@ -1088,30 +1333,11 @@
 DWORD WINAPI VerQueryValue32W(LPVOID vblock,LPCWSTR subblock,LPVOID *vbuffer,
                               UINT32 *buflen)
 {
-	/* FIXME: hmm, we not only need to convert subblock, but also 
-	 *        the content...or?
-	 * And what about UNICODE version info?
-	 * And the NAMES of the values?
-	 */
-	BYTE		*b,**buffer=(LPBYTE*)vbuffer,*block=(LPBYTE)vblock;
-	struct	db	*db;
-	char		*s,*sb;
+	LPSTR		sb;
+	DWORD		ret;
 
 	sb = HEAP_strdupWtoA( GetProcessHeap(), 0, subblock );
-	s=(char*)xmalloc(strlen("VS_VERSION_INFO\\")+strlen(sb)+1);
-	strcpy(s,"VS_VERSION_INFO\\");strcat(s,sb);
-	b=_find_data(block, s, *(WORD *)block);
-	if (b==NULL) {
-		*buflen=0;
-		HeapFree( GetProcessHeap(), 0, sb );
-		return 0;
-	}
-	db=(struct db*)b;
-	*buflen	= db->datalen;
-	/* let b point to data area */
-	b	= b+4+((strlen(db->name)+4)&~3);
-	*buffer	= b;
-	dprintf_ver(stddeb,"	-> %s=%s\n",sb,b);
+	ret = VerQueryValue32A(vblock,sb,vbuffer,buflen);
         HeapFree( GetProcessHeap(), 0, sb );
 	return 1;
 }
diff --git a/misc/winsock.c b/misc/winsock.c
index 3246b41..bec016c 100644
--- a/misc/winsock.c
+++ b/misc/winsock.c
@@ -342,7 +342,11 @@
 
 INT32 WINSOCK_DeleteTaskWSI( TDB* pTask, LPWSINFO pwsi )
 {
-    /* WSACleanup() backend, called on task termination as well. */
+    /* WSACleanup() backend, called on task termination as well.
+     * Real DLL would have registered its own signal handler with
+     * TaskSetSignalHandler() and waited until USIG_TERMINATION/USIG_GPF
+     * but this scheme is much more straightforward.
+     */
 
     int	i, j, n;
 
diff --git a/misc/wsprintf.c b/misc/wsprintf.c
index f347fd5..9f11e07 100644
--- a/misc/wsprintf.c
+++ b/misc/wsprintf.c
@@ -331,7 +331,7 @@
  *           wvsnprintf32A   (Not a Windows API)
  */
 INT32 WINAPI wvsnprintf32A( LPSTR buffer, UINT32 maxlen, LPCSTR spec,
-                            LPCVOID args )
+                            va_list args )
 {
     WPRINTF_FORMAT format;
     LPSTR p = buffer;
@@ -351,21 +351,24 @@
         switch(format.type)
         {
         case WPR_WCHAR:
-            if ((*p = (CHAR)*(WCHAR *)args)) p++;
+            if ((*p = (CHAR)va_arg( args, WCHAR ))) p++;
             else if (format.width > 1) *p++ = ' ';
             else len = 0;
             break;
         case WPR_CHAR:
-            if ((*p = *(CHAR *)args)) p++;
+            if ((*p = va_arg( args, CHAR ))) p++;
             else if (format.width > 1) *p++ = ' ';
             else len = 0;
             break;
         case WPR_STRING:
-            if (len) memcpy( p, *(LPCSTR *)args, len );
+            if (len) memcpy( p, va_arg( args, LPCSTR ), len );
             p += len;
             break;
         case WPR_WSTRING:
-            for (i = 0; i < len; i++) *p++ = (CHAR)*(*(LPCWSTR *)args + i);
+            {
+                LPCWSTR ptr = va_arg( args, LPCWSTR );
+                for (i = 0; i < len; i++) *p++ = (CHAR)*ptr++;
+            }
             break;
         case WPR_HEXA:
             if ((format.flags & WPRINTF_PREFIX_HEX) && (maxlen > 3))
@@ -383,12 +386,12 @@
             for (i = len; i < format.precision; i++, maxlen--) *p++ = '0';
             if (len) memcpy( p, number, len );
             p += len;
+            (void)va_arg( args, INT32 ); /* Go to the next arg */
             break;
         }
         if (format.flags & WPRINTF_LEFTALIGN)
             for (i = format.precision; i < format.width; i++, maxlen--)
                 *p++ = ' ';
-        args = (INT32 *)args + 1;
         maxlen -= len;
     }
     *p = 0;
@@ -400,7 +403,7 @@
  *           wvsnprintf32W   (Not a Windows API)
  */
 INT32 WINAPI wvsnprintf32W( LPWSTR buffer, UINT32 maxlen, LPCWSTR spec,
-                            LPCVOID args )
+                            va_list args )
 {
     WPRINTF_FORMAT format;
     LPWSTR p = buffer;
@@ -420,20 +423,23 @@
         switch(format.type)
         {
         case WPR_WCHAR:
-            if ((*p = *(WCHAR *)args)) p++;
+            if ((*p = va_arg( args, WCHAR ))) p++;
             else if (format.width > 1) *p++ = ' ';
             else len = 0;
             break;
         case WPR_CHAR:
-            if ((*p = (WCHAR)*(CHAR *)args)) p++;
+            if ((*p = (WCHAR)va_arg( args, CHAR ))) p++;
             else if (format.width > 1) *p++ = ' ';
             else len = 0;
             break;
         case WPR_STRING:
-            for (i = 0; i < len; i++) *p++ = (WCHAR)*(*(LPCSTR *)args + i);
+            {
+                LPCSTR ptr = va_arg( args, LPCSTR );
+                for (i = 0; i < len; i++) *p++ = (WCHAR)*ptr++;
+            }
             break;
         case WPR_WSTRING:
-            if (len) memcpy( p, *(LPCWSTR *)args, len * sizeof(WCHAR) );
+            if (len) memcpy( p, va_arg( args, LPCWSTR ), len * sizeof(WCHAR) );
             p += len;
             break;
         case WPR_HEXA:
@@ -451,12 +457,12 @@
         case WPR_UNSIGNED:
             for (i = len; i < format.precision; i++, maxlen--) *p++ = '0';
             for (i = 0; i < len; i++) *p++ = (WCHAR)number[i];
+            (void)va_arg( args, INT32 ); /* Go to the next arg */
             break;
         }
         if (format.flags & WPRINTF_LEFTALIGN)
             for (i = format.precision; i < format.width; i++, maxlen--)
                 *p++ = ' ';
-        args = (INT32 *)args + 1;
         maxlen -= len;
     }
     *p = 0;
@@ -476,7 +482,7 @@
 /***********************************************************************
  *           wvsprintf32A   (USER32.586)
  */
-INT32 WINAPI wvsprintf32A( LPSTR buffer, LPCSTR spec, LPCVOID args )
+INT32 WINAPI wvsprintf32A( LPSTR buffer, LPCSTR spec, va_list args )
 {
     return wvsnprintf32A( buffer, 0xffffffff, spec, args );
 }
@@ -485,7 +491,7 @@
 /***********************************************************************
  *           wvsprintf32W   (USER32.587)
  */
-INT32 WINAPI wvsprintf32W( LPWSTR buffer, LPCWSTR spec, LPCVOID args )
+INT32 WINAPI wvsprintf32W( LPWSTR buffer, LPCWSTR spec, va_list args )
 {
     return wvsnprintf32W( buffer, 0xffffffff, spec, args );
 }
@@ -502,7 +508,7 @@
 
     va_start( valist, spec );
     /* Note: we call the 32-bit version, because the args are 32-bit */
-    res = (INT16)wvsprintf32A( buffer, spec, (LPCVOID)valist );
+    res = (INT16)wvsprintf32A( buffer, spec, valist );
     va_end( valist );
     return res;
 }
@@ -519,44 +525,75 @@
 
 
 /***********************************************************************
- *           wsprintf32A   (USER32.584)
+ *           wsprintf32A   (USER32.585)
  */
-/* Winelib version */
 INT32 WINAPIV wsprintf32A( LPSTR buffer, LPCSTR spec, ... )
 {
     va_list valist;
     INT32 res;
 
     va_start( valist, spec );
-    res = wvsprintf32A( buffer, spec, (LPCVOID)valist );
+    res = wvsprintf32A( buffer, spec, valist );
     va_end( valist );
     return res;
 }
 
-/* Emulator version */
-INT32 WINAPIV WIN32_wsprintf32A( DWORD *args )
-{
-    return wvsprintf32A( (LPSTR)args[0], (LPCSTR)args[1], (LPCVOID)&args[2] );
-}
-
 
 /***********************************************************************
- *           wsprintf32W   (USER32.585)
+ *           wsprintf32W   (USER32.586)
  */
-/* Winelib version */
 INT32 WINAPIV wsprintf32W( LPWSTR buffer, LPCWSTR spec, ... )
 {
     va_list valist;
     INT32 res;
 
     va_start( valist, spec );
-    res = wvsprintf32W( buffer, spec, (LPCVOID)valist );
+    res = wvsprintf32W( buffer, spec, valist );
     va_end( valist );
     return res;
 }
 
-/* Emulator version */
-INT32 WINAPIV WIN32_wsprintf32W( DWORD *args )
+
+/***********************************************************************
+ *           wsnprintf16   (Not a Windows API)
+ */
+INT16 WINAPIV wsnprintf16( LPSTR buffer, UINT16 maxlen, LPCSTR spec, ... )
 {
-    return wvsprintf32W( (LPWSTR)args[0], (LPCWSTR)args[1], (LPCVOID)&args[2]);
+    va_list valist;
+    INT16 res;
+
+    va_start( valist, spec );
+    res = wvsnprintf16( buffer, maxlen, spec, valist );
+    va_end( valist );
+    return res;
+}
+
+
+/***********************************************************************
+ *           wsnprintf32A   (Not a Windows API)
+ */
+INT32 WINAPIV wsnprintf32A( LPSTR buffer, UINT32 maxlen, LPCSTR spec, ... )
+{
+    va_list valist;
+    INT32 res;
+
+    va_start( valist, spec );
+    res = wvsnprintf32A( buffer, maxlen, spec, valist );
+    va_end( valist );
+    return res;
+}
+
+
+/***********************************************************************
+ *           wsnprintf32W   (Not a Windows API)
+ */
+INT32 WINAPIV wsnprintf32W( LPWSTR buffer, UINT32 maxlen, LPCWSTR spec, ... )
+{
+    va_list valist;
+    INT32 res;
+
+    va_start( valist, spec );
+    res = wvsnprintf32W( buffer, maxlen, spec, valist );
+    va_end( valist );
+    return res;
 }
diff --git a/miscemu/instr.c b/miscemu/instr.c
index 9e414c4..c101d21 100644
--- a/miscemu/instr.c
+++ b/miscemu/instr.c
@@ -187,7 +187,9 @@
     }
     if (segprefix != -1) seg = segprefix;
 
-    /* FIXME: should check limit of the segment here */
+    /* Make sure the segment and offset are valid */
+    if (((seg & 7) != 7) || IS_SELECTOR_FREE(seg)) return NULL;
+    if (GET_SEL_LIMIT(seg) < (base + (index << ss))) return NULL;
     return (BYTE *)PTR_SEG_OFF_TO_LIN( seg, (base + (index << ss)) );
 #undef GET_VAL
 }
diff --git a/msdos/int21.c b/msdos/int21.c
index d01e61f..8bcb950 100644
--- a/msdos/int21.c
+++ b/msdos/int21.c
@@ -102,15 +102,6 @@
 }
 
 
-static void ChopOffWhiteSpace(char *string)
-{
-	int length;
-
-	for (length = strlen(string) ; length ; length--)
-		if (string[length] == ' ')
-			string[length] = '\0';
-}
-
 void CreateBPB(int drive, BYTE *data)
 {
 	if (drive > 1) {
@@ -760,87 +751,11 @@
 static void DeleteFileFCB( CONTEXT *context )
 {
     fprintf( stderr, "DeleteFileFCB: not implemented yet\n" );
-#if 0
-	BYTE *fcb = PTR_SEG_OFF_TO_LIN(DS_reg(context), DX_reg(context));
-	struct dosdirent *dp;
-	char temp[256], *ptr;
-        int drive = DOS_GET_DRIVE( *fcb );
-
-	DumpFCB( fcb );
-
-        temp[0] = '\\';
-	strcpy(temp+1, DRIVE_GetDosCwd(drive));
-	strcat(temp, "\\");
-	strncat(temp, fcb + 1, 8);
-	ChopOffWhiteSpace(temp);
-	strncat(temp, fcb + 9, 3);
-	ChopOffWhiteSpace(temp);
-
-	if ((dp = DOS_opendir(temp)) == NULL) {
-		Error(InvalidDrive, EC_MediaError , EL_Disk);
-		AX_reg(context) = 0xff;
-		return;
-	}
-
-        temp[0] = '\\';
-	strcpy(temp+1, DRIVE_GetDosCwd(drive) );
-	strcat(temp, "\\");
-	
-	ptr = temp + strlen(temp);
-	
-	while (DOS_readdir(dp) != NULL)
-	{
-		strcpy(ptr, dp->filename);
-		dprintf_int(stddeb, "int21: delete file %s\n", temp);
-		/* unlink(DOS_GetUnixFileName(temp)); */
-	}
-	DOS_closedir(dp);
-	AX_reg(context) = 0;
-#endif
 }
 
 static void RenameFileFCB( CONTEXT *context )
 {
     fprintf( stderr, "RenameFileFCB: not implemented yet\n" );
-#if 0
-	BYTE *fcb = PTR_SEG_OFF_TO_LIN(DS_reg(context), DX_reg(context));
-	struct dosdirent *dp;
-	char temp[256], oldname[256], newname[256], *oldnameptr, *newnameptr;
-        int drive = DOS_GET_DRIVE( *fcb );
-
-	DumpFCB( fcb );
-
-        temp[0] = '\\';
-	strcpy(temp+1, DRIVE_GetDosCwd(drive) );
-	strcat(temp, "\\");
-	strncat(temp, fcb + 1, 8);
-	ChopOffWhiteSpace(temp);
-	strncat(temp, fcb + 9, 3);
-	ChopOffWhiteSpace(temp);
-
-	if ((dp = DOS_opendir(temp)) == NULL) {
-		Error(InvalidDrive, EC_MediaError , EL_Disk);
-		AX_reg(context) = 0xff;
-		return;
-	}
-
-        oldname[0] = '\\';
-	strcpy(oldname+1, DRIVE_GetDosCwd(drive) );
-	strcat(oldname, "\\");
-        strcpy( newname, oldname );
-	oldnameptr = oldname + strlen(oldname);
-	newnameptr = newname + strlen(newname);
-	
-	while (DOS_readdir(dp) != NULL)
-	{
-		strcpy(oldnameptr, dp->filename);
-		strcpy(newnameptr, fcb + 1);
-		dprintf_int(stddeb, "int21: renamefile %s -> %s\n",
-			oldname, newname);
-	}
-	DOS_closedir(dp);
-	AX_reg(context) = 0;
-#endif
 }
 
 
@@ -1627,6 +1542,14 @@
 	    }
 	    break;
         case 0x41:  /* Delete file */
+	    if (!DeleteFile32A(PTR_SEG_OFF_TO_LIN(
+	    				DS_reg(context),
+					DX_reg(context))
+	    )) {
+		SET_CFLAG(context);
+		AL_reg(context) = DOS_ExtendedError;
+	    }
+	    break;
         case 0x56:  /* Move (rename) file */
         default:
             fprintf( stderr, "Unimplemented int21 long file name function:\n");
diff --git a/multimedia/mmsystem.c b/multimedia/mmsystem.c
index b13221f..06b9743 100644
--- a/multimedia/mmsystem.c
+++ b/multimedia/mmsystem.c
@@ -2304,22 +2304,23 @@
                           const MMCKINFO * lpckParent, UINT16 uFlags)
 {
 	DWORD	dwfcc, dwOldPos;
-	LPMMIOINFO	lpmminfo;
+
 	dprintf_mmio(stddeb, "mmioDescend(%04X, %p, %p, %04X);\n", 
 				hmmio, lpck, lpckParent, uFlags);
-	if (lpck == NULL) return 0;
-	lpmminfo = (LPMMIOINFO)GlobalLock16(hmmio);
-	if (lpmminfo == NULL) return 0;
+
+	if (lpck == NULL)
+	    return 0;
+
 	dwfcc = lpck->ckid;
 	dprintf_mmio(stddeb, "mmioDescend // dwfcc=%08lX\n", dwfcc);
-	dprintf_mmio(stddeb, "mmioDescend // hfile = %ld\n", lpmminfo->dwReserved2);
-	dwOldPos = _llseek32((HFILE32)lpmminfo->dwReserved2, 0, SEEK_CUR);
+
+	dwOldPos = mmioSeek(hmmio, 0, SEEK_CUR);
 	dprintf_mmio(stddeb, "mmioDescend // dwOldPos=%ld\n", dwOldPos);
+
 	if (lpckParent != NULL) {
 		dprintf_mmio(stddeb, "mmioDescend // seek inside parent at %ld !\n", lpckParent->dwDataOffset);
-		dwOldPos = _llseek32((HFILE32)lpmminfo->dwReserved2,
-					lpckParent->dwDataOffset, SEEK_SET);
-		}
+		dwOldPos = mmioSeek(hmmio, lpckParent->dwDataOffset, SEEK_SET);
+	}
 /*
 
    It seems to be that FINDRIFF should not be treated the same as the 
@@ -2331,44 +2332,43 @@
 	if ((uFlags & MMIO_FINDCHUNK) || (uFlags & MMIO_FINDLIST)) {
 		dprintf_mmio(stddeb, "mmioDescend // MMIO_FINDxxxx dwfcc=%08lX !\n", dwfcc);
 		while (TRUE) {
-		        size_t ix;
+		        LONG ix;
 
-			ix =_lread32((HFILE32)lpmminfo->dwReserved2, (LPSTR)lpck, sizeof(MMCKINFO));
-			dprintf_mmio(stddeb, "mmioDescend // after _lread32 ix = %d req = %d, errno = %d\n",ix,sizeof(MMCKINFO),errno);
+			ix = mmioRead(hmmio, (LPSTR)lpck, sizeof(MMCKINFO));
+			dprintf_mmio(stddeb, "mmioDescend // after _lread32 ix = %ld req = %d, errno = %d\n",ix,sizeof(MMCKINFO),errno);
 			if (ix < sizeof(MMCKINFO)) {
 
-				_llseek32((HFILE32)lpmminfo->dwReserved2, dwOldPos, SEEK_SET);
-				GlobalUnlock16(hmmio);
+				mmioSeek(hmmio, dwOldPos, SEEK_SET);
 				dprintf_mmio(stddeb, "mmioDescend // return ChunkNotFound\n");
 				return MMIOERR_CHUNKNOTFOUND;
-				}
+			}
 			dprintf_mmio(stddeb, "mmioDescend // dwfcc=%08lX ckid=%08lX cksize=%08lX !\n", 
 									dwfcc, lpck->ckid, lpck->cksize);
-			if (dwfcc == lpck->ckid) break;
+			if (dwfcc == lpck->ckid)
+				break;
+
 			dwOldPos += lpck->cksize + 2 * sizeof(DWORD);
 			if (lpck->ckid == FOURCC_RIFF || lpck->ckid == FOURCC_LIST) 
 				dwOldPos += sizeof(DWORD);
-			_llseek32((HFILE32)lpmminfo->dwReserved2, dwOldPos, SEEK_SET);
-			}
+			mmioSeek(hmmio, dwOldPos, SEEK_SET);
 		}
+	}
 	else {
-		if (_lread32(LOWORD(lpmminfo->dwReserved2), (LPSTR)lpck, 
-				sizeof(MMCKINFO)) < sizeof(MMCKINFO)) {
-                    _llseek32((HFILE32)lpmminfo->dwReserved2, dwOldPos, SEEK_SET);
-			GlobalUnlock16(hmmio);
- 		        dprintf_mmio(stddeb, "mmioDescend // return ChunkNotFound 2nd\n");
+		if (mmioRead(hmmio, (LPSTR)lpck, sizeof(MMCKINFO)) < sizeof(MMCKINFO)) {
+			mmioSeek(hmmio, dwOldPos, SEEK_SET);
+			dprintf_mmio(stddeb, "mmioDescend // return ChunkNotFound 2nd\n");
 			return MMIOERR_CHUNKNOTFOUND;
-			}
 		}
+	}
 	lpck->dwDataOffset = dwOldPos + 2 * sizeof(DWORD);
 	if (lpck->ckid == FOURCC_RIFF || lpck->ckid == FOURCC_LIST) 
 		lpck->dwDataOffset += sizeof(DWORD);
-	lpmminfo->lDiskOffset = _llseek32((HFILE32)lpmminfo->dwReserved2, 
-                                          lpck->dwDataOffset, SEEK_SET);
-	GlobalUnlock16(hmmio);
+	mmioSeek(hmmio, lpck->dwDataOffset, SEEK_SET);
+
 	dprintf_mmio(stddeb, "mmioDescend // lpck->ckid=%08lX lpck->cksize=%ld !\n", 
 								lpck->ckid, lpck->cksize);
 	dprintf_mmio(stddeb, "mmioDescend // lpck->fccType=%08lX !\n", lpck->fccType);
+
 	return 0;
 }
 
diff --git a/multimedia/time.c b/multimedia/time.c
index 6242f85..cf4905a 100644
--- a/multimedia/time.c
+++ b/multimedia/time.c
@@ -32,7 +32,6 @@
     WORD wTimerID;
     WORD wCurTime;
     struct tagTIMERENTRY *Next;
-    struct tagTIMERENTRY *Prev;
 } TIMERENTRY, *LPTIMERENTRY;
 
 static LPTIMERENTRY lpTimerList = NULL;
@@ -137,23 +136,16 @@
 		  wDelay, wResol, lpFunc, dwUser, wFlags);
     if (!mmTimeStarted)
 	StartMMTime();
-    lpNewTimer = (LPTIMERENTRY) malloc(sizeof(TIMERENTRY));
+    lpNewTimer = (LPTIMERENTRY)xmalloc(sizeof(TIMERENTRY));
     if (lpNewTimer == NULL)
 	return 0;
     while (lpTimer != NULL) {
 	wNewID = MAX(wNewID, lpTimer->wTimerID);
-	if (lpTimer->Next == NULL)
-	    break;
 	lpTimer = lpTimer->Next;
     }
-    if (lpTimerList == NULL) {
-	lpTimerList = lpNewTimer;
-	lpNewTimer->Prev = NULL;
-    } else {
-	lpTimer->Next = lpNewTimer;
-	lpNewTimer->Prev = lpTimer;
-    }
-    lpNewTimer->Next = NULL;
+
+    lpNewTimer->Next = lpTimerList;
+    lpTimerList = lpNewTimer;
     lpNewTimer->wTimerID = wNewID + 1;
     lpNewTimer->wCurTime = wDelay;
     lpNewTimer->wDelay = wDelay;
@@ -173,19 +165,15 @@
  */
 WORD WINAPI timeKillEvent(WORD wID)
 {
-    LPTIMERENTRY lpTimer = lpTimerList;
-    while (lpTimer != NULL) {
-	if (wID == lpTimer->wTimerID) {
-	    if (lpTimer->Prev != NULL)
-		lpTimer->Prev->Next = lpTimer->Next;
-	    if (lpTimer->Next != NULL)
-		lpTimer->Next->Prev = lpTimer->Prev;
-	    free(lpTimer);
-	    if (lpTimer==lpTimerList)
-	    	lpTimerList=NULL;
+    LPTIMERENTRY xlptimer,*lpTimer = &lpTimerList;
+    while (*lpTimer) {
+	if (wID == (*lpTimer)->wTimerID) {
+	    xlptimer = (*lpTimer)->Next;
+	    free(*lpTimer);
+	    *lpTimer = xlptimer;
 	    return TRUE;
 	}
-	lpTimer = lpTimer->Next;
+	lpTimer = &((*lpTimer)->Next);
     }
     return 0;
 }
diff --git a/objects/bitmap.c b/objects/bitmap.c
index 6fe7a98..18df983 100644
--- a/objects/bitmap.c
+++ b/objects/bitmap.c
@@ -49,6 +49,80 @@
                       descr->image, 0, 0, 0, 0, descr->width, descr->height );
 }
 
+/***********************************************************************
+ *           BITMAP_GetBitsPadding
+ *
+ * Return number of bytes to pad a scanline of 16-bit aligned Windows DDB data.
+ */
+INT32 BITMAP_GetBitsPadding( int bmWidth, int bpp )
+{
+    INT32 pad;
+
+    switch (bpp) 
+    {
+    case 1:
+	if (!(bmWidth & 15)) pad = 0;
+	else pad = ((16 - (bmWidth & 15)) + 7) / 8;
+	break;
+
+    case 8:
+	pad = (2 - (bmWidth & 1)) & 1;
+	break;
+
+    case 24:
+	pad = (bmWidth*3) & 1;
+	break;
+
+    case 32:
+    case 16:
+    case 15:
+	pad = 0; /* we have 16bit alignment already */
+	break;
+
+    case 4:
+	if (!(bmWidth & 3)) pad = 0;
+	else pad = ((4 - (bmWidth & 3)) + 1) / 2;
+	break;
+
+    default:
+	fprintf(stderr,"GetBitsPadding: unknown depth %d, please report.\n", bpp );
+        return -1;
+    }
+    return pad;
+}
+
+/***********************************************************************
+ *           BITMAP_GetBitsWidth
+ *
+ * Return number of bytes taken by a scanline of 16-bit aligned Windows DDB data.
+ */
+INT32 BITMAP_GetBitsWidth( int bmWidth, int bpp )
+{
+    switch(bpp)
+    {
+    case 1:
+	return 2 * ((bmWidth+15) >> 4);
+
+    case 24:
+	bmWidth *= 3; /* fall through */
+    case 8:
+	return bmWidth + (bmWidth & 1);
+
+    case 32:
+	return bmWidth * 4;
+
+    case 16:
+    case 15:
+	return bmWidth * 2;
+
+    case 4:
+	return 2 * ((bmWidth+3) >> 2);
+
+    default:
+	fprintf(stderr,"GetBitsPadding: unknown depth %d, please report.\n", bpp );
+    }
+    return -1;
+}
 
 /***********************************************************************
  *           CreateBitmap16    (GDI.48)
@@ -200,46 +274,19 @@
       /* Only get entire lines */
     height = count / bmp->bitmap.bmWidthBytes;
     if (height > bmp->bitmap.bmHeight) height = bmp->bitmap.bmHeight;
+
     dprintf_bitmap(stddeb, "GetBitmapBits: %dx%d %d colors %p fetched height: %ld\n",
 	    bmp->bitmap.bmWidth, bmp->bitmap.bmHeight,
 	    1 << bmp->bitmap.bmBitsPixel, buffer, height );
-    if (!height) 
+
+    pad = BITMAP_GetBitsPadding( bmp->bitmap.bmWidth, bmp->bitmap.bmBitsPixel );
+
+    if (!height || (pad == -1))
     {
       GDI_HEAP_UNLOCK( hbitmap );
       return 0;
     }
 
-    switch (bmp->bitmap.bmBitsPixel) {
-    case 1:
-	if (!(bmp->bitmap.bmWidth & 15))
-		pad = 0;
-	else
-		pad = ((16 - (bmp->bitmap.bmWidth & 15)) + 7) / 8;
-    	break;
-    case 4:
-	if (!(bmp->bitmap.bmWidth & 3))
-	    pad = 0;
-	else
-	    pad = ((4 - (bmp->bitmap.bmWidth & 3)) + 1) / 2;
-	break;
-    case 8:
-    	pad = (2 - (bmp->bitmap.bmWidth & 1)) & 1;
-    	break;
-    case 15:
-    case 16:
-    	pad = 0; /* we have 16bit alignment already */
-	break;
-    case 24:
-    	pad = (bmp->bitmap.bmWidth*3) & 1;
-    	break;
-    default:
-	fprintf(stderr,"GetBitMapBits32: unknown depth %d, please report.\n",
-		bmp->bitmap.bmBitsPixel
-	);
-	GDI_HEAP_UNLOCK( hbitmap );
-	return 0;
-    }
-
     /* Hack: change the bitmap height temporarily to avoid */
     /*       getting unnecessary bitmap rows. */
     old_height = bmp->bitmap.bmHeight;
@@ -354,41 +401,15 @@
       /* Only set entire lines */
     height = count / bmp->bitmap.bmWidthBytes;
     if (height > bmp->bitmap.bmHeight) height = bmp->bitmap.bmHeight;
-    if (!height) 
+
+    pad = BITMAP_GetBitsPadding( bmp->bitmap.bmWidth, bmp->bitmap.bmBitsPixel );
+
+    if (!height || (pad == -1)) 
     {
       GDI_HEAP_UNLOCK( hbitmap );
       return 0;
     }
 	
-    switch (bmp->bitmap.bmBitsPixel) {
-    case 1:
-	if (!(bmp->bitmap.bmWidth & 15))
-		pad = 0;
-	else
-		pad = ((16 - (bmp->bitmap.bmWidth & 15)) + 7) / 8;
-    	break;
-    case 4:
-	if (!(bmp->bitmap.bmWidth & 3))
-	    pad = 0;
-	else
-	    pad = ((4 - (bmp->bitmap.bmWidth & 3)) + 1) / 2;
-	break;
-    case 8:
-    	pad = (2 - (bmp->bitmap.bmWidth & 1)) & 1;
-    	break;
-    case 15:
-    case 16:
-    	pad = 0; /* we have 16bit alignment already */
-	break;
-    case 24:
-    	pad = (bmp->bitmap.bmWidth*3) & 1;
-    	break;
-    default:
-	fprintf(stderr,"SetBitMapBits32: unknown depth %d, please report.\n",
-		bmp->bitmap.bmBitsPixel
-	);
-	return 0;
-    }
     sbuf = (LPBYTE)buffer;
 
     widthbytes	= DIB_GetXImageWidthBytes(bmp->bitmap.bmWidth,bmp->bitmap.bmBitsPixel);
@@ -497,6 +518,29 @@
 	return 0;
 }
 
+HANDLE32 WINAPI LoadImage32W( HINSTANCE32 hinst, LPCWSTR name, UINT32 type,
+                              INT32 desiredx, INT32 desiredy, UINT32 loadflags)
+{
+	if (HIWORD(name)) {
+		dprintf_resource(stddeb,"LoadImage32W(0x%04x,%p,%d,%d,%d,0x%08x)\n",
+			hinst,name,type,desiredx,desiredy,loadflags
+		);
+	} else {
+		dprintf_resource(stddeb,"LoadImage32W(0x%04x,%p,%d,%d,%d,0x%08x)\n",
+			hinst,name,type,desiredx,desiredy,loadflags
+		);
+	}
+	switch (type) {
+	case IMAGE_BITMAP:
+		return LoadBitmap32W(hinst,name);
+	case IMAGE_ICON:
+		return LoadIcon32W(hinst,name);
+	case IMAGE_CURSOR:
+		return LoadCursor32W(hinst,name);
+	}
+	return 0;
+}
+
 /**********************************************************************
  *	    CopyImage32    (USER32.60)
  *
diff --git a/objects/brush.c b/objects/brush.c
index 5f216f2..b3fdb31 100644
--- a/objects/brush.c
+++ b/objects/brush.c
@@ -7,6 +7,7 @@
 #include <stdlib.h>
 #include "brush.h"
 #include "bitmap.h"
+#include "syscolor.h"
 #include "metafile.h"
 #include "color.h"
 #include "stddebug.h"
@@ -241,18 +242,80 @@
  */
 HBRUSH16 WINAPI GetSysColorBrush16( INT16 index )
 {
-    fprintf( stderr, "Unimplemented stub: GetSysColorBrush16(%d)\n", index );
-    return GetStockObject32(LTGRAY_BRUSH);
+    return (HBRUSH16)GetSysColorBrush32(index);
 }
 
 
 /***********************************************************************
  *           GetSysColorBrush32    (USER32.289)
  */
-HBRUSH32 WINAPI GetSysColorBrush32( INT32 index)
+HBRUSH32 WINAPI GetSysColorBrush32( INT32 index )
 {
-    fprintf( stderr, "Unimplemented stub: GetSysColorBrush32(%d)\n", index );
-    return GetStockObject32(LTGRAY_BRUSH);
+  switch(index){
+  case COLOR_SCROLLBAR:
+    return sysColorObjects.hbrushScrollbar;
+  case COLOR_BACKGROUND: /* same as COLOR_DESKTOP */
+    return sysColorObjects.hbrushScrollbar; /*FIXME*/
+  case COLOR_ACTIVECAPTION:
+    return sysColorObjects.hbrushActiveCaption;
+  case COLOR_INACTIVECAPTION:
+    return sysColorObjects.hbrushInactiveCaption;
+  case COLOR_MENU:
+    return sysColorObjects.hbrushMenu;
+  case COLOR_WINDOW:
+    return sysColorObjects.hbrushWindow;
+  case COLOR_WINDOWFRAME:
+    fprintf( stderr, "GetSysColorBrush32: Unimplemented index(%d)\n", index );
+    break;
+  case COLOR_MENUTEXT:
+    fprintf( stderr, "GetSysColorBrush32: Unimplemented index(%d)\n", index );
+    break;
+  case COLOR_WINDOWTEXT:
+    fprintf( stderr, "GetSysColorBrush32: Unimplemented index(%d)\n", index );
+    break;
+  case COLOR_CAPTIONTEXT:
+    fprintf( stderr, "GetSysColorBrush32: Unimplemented index(%d)\n", index );
+    break;
+  case COLOR_ACTIVEBORDER:
+    return sysColorObjects.hbrushActiveBorder;
+  case COLOR_INACTIVEBORDER:
+    return sysColorObjects.hbrushInactiveBorder;
+  case COLOR_APPWORKSPACE:
+    return sysColorObjects.hbrushActiveBorder; /*FIXME*/
+  case COLOR_HIGHLIGHT:
+    return sysColorObjects.hbrushHighlight;
+  case COLOR_HIGHLIGHTTEXT:
+    return sysColorObjects.hbrushHighlight; /*FIXME*/
+  case COLOR_BTNFACE: /* same as COLOR_3DFACE */
+    return sysColorObjects.hbrushBtnFace;
+  case COLOR_BTNSHADOW: /* same as COLOR_3DSHADOW */
+    return sysColorObjects.hbrushBtnShadow;
+  case COLOR_GRAYTEXT:
+    return sysColorObjects.hbrushBtnShadow; /*FIXME*/
+  case COLOR_BTNTEXT:
+    return sysColorObjects.hbrushBtnShadow; /*FIXME*/
+  case COLOR_INACTIVECAPTIONTEXT:
+    return sysColorObjects.hbrushBtnShadow; /*FIXME*/
+  case COLOR_BTNHIGHLIGHT: /* same as COLOR_(3DHIGH|3DHI|BTNHI)LIGHT */
+    return sysColorObjects.hbrushBtnHighlight;
+    /*  case COLOR_3DDKSHADOW: FIXME
+    fprintf( stderr, "GetSysColorBrush32: Unimplemented index(%d)\n", index );
+    break;
+  case COLOR_3DLIGHT:
+    fprintf( stderr, "GetSysColorBrush32: Unimplemented index(%d)\n", index );
+    break;
+  case COLOR_INFOTEXT:
+    fprintf( stderr, "GetSysColorBrush32: Unimplemented index(%d)\n", index );
+    break;
+  case COLOR_INFOBK:
+    fprintf( stderr, "GetSysColorBrush32: Unimplemented index(%d)\n", index );
+    break;*/
+  default:
+    fprintf( stderr, "GetSysColorBrush32: Unknown index(%d)\n", index );
+  }
+
+  return GetStockObject32(LTGRAY_BRUSH);
+
 }
 
 
@@ -299,5 +362,3 @@
     memcpy( buffer, &brush->logbrush, count );
     return count;
 }
-
-
diff --git a/objects/cursoricon.c b/objects/cursoricon.c
index 317f163..fb02109 100644
--- a/objects/cursoricon.c
+++ b/objects/cursoricon.c
@@ -2,6 +2,8 @@
  * Cursor and icon support
  *
  * Copyright 1995 Alexandre Julliard
+ *           1996 Martin Von Loewis
+ *           1997 Alex Korobka
  */
 
 /*
@@ -26,18 +28,22 @@
 
 #include <string.h>
 #include <stdlib.h>
+#include "heap.h"
 #include "windows.h"
+#include "peexe.h"
 #include "color.h"
 #include "bitmap.h"
 #include "callback.h"
 #include "cursoricon.h"
 #include "sysmetrics.h"
+#include "module.h"
 #include "win.h"
 #include "stddebug.h"
 #include "debug.h"
 #include "task.h"
 
 extern UINT16 COLOR_GetSystemPaletteSize();
+extern HGLOBAL16 USER_CallDefaultRsrcHandler( HGLOBAL16, HMODULE16, HRSRC16 );
 
 Cursor CURSORICON_XCursor = None;    /* Current X cursor */
 static HCURSOR32 hActiveCursor = 0;  /* Active cursor */
@@ -196,15 +202,14 @@
 
 
 /**********************************************************************
- *	    CURSORICON_LoadDirEntry
+ *	    CURSORICON_LoadDirEntry16
  *
  * Load the icon/cursor directory for a given resource name and find the
  * best matching entry.
  */
-static BOOL32 CURSORICON_LoadDirEntry( HINSTANCE32 hInstance, SEGPTR name,
-                                       INT32 width, INT32 height,
-                                       INT32 colors, BOOL32 fCursor,
-                                       CURSORICONDIRENTRY *dirEntry )
+static BOOL32 CURSORICON_LoadDirEntry16( HINSTANCE32 hInstance, SEGPTR name,
+                                         INT32 width, INT32 height, INT32 colors, 
+					 BOOL32 fCursor, CURSORICONDIRENTRY *dirEntry )
 {
     HRSRC16 hRsrc;
     HGLOBAL16 hMem;
@@ -231,30 +236,76 @@
 
 
 /**********************************************************************
- *	    CURSORICON_LoadHandler 
+ *          CURSORICON_LoadDirEntry32
  *
- * Create a cursor or icon from a resource.
+ * Load the icon/cursor directory for a given resource name and find the
+ * best matching entry.
  */
-HGLOBAL16 CURSORICON_LoadHandler( HGLOBAL16 handle, HINSTANCE16 hInstance,
-                                  BOOL32 fCursor )
+static BOOL32 CURSORICON_LoadDirEntry32( HINSTANCE32 hInstance, LPCWSTR name,
+                                         INT32 width, INT32 height, INT32 colors,
+                                         BOOL32 fCursor, CURSORICONDIRENTRY *dirEntry )
 {
-    static char* __loadhandlerStr = "CURSORICON_LoadHandler";
+    HANDLE32 hRsrc;
+    HANDLE32 hMem;
+    CURSORICONDIR *dir;
+    CURSORICONDIRENTRY *entry = NULL;
 
+    if (!(hRsrc = FindResource32W( hInstance, name,
+                (LPCWSTR)(fCursor ? RT_GROUP_CURSOR : RT_GROUP_ICON) )))
+        return FALSE;
+    if (!(hMem = LoadResource32( hInstance, hRsrc ))) return FALSE;
+    if ((dir = (CURSORICONDIR*)LockResource32( hMem )))
+    {
+        if (fCursor)
+            entry = (CURSORICONDIRENTRY *)CURSORICON_FindBestCursor( dir,
+                                                               width, height );
+        else
+            entry = (CURSORICONDIRENTRY *)CURSORICON_FindBestIcon( dir,
+                                                       width, height, colors );
+        if (entry) *dirEntry = *entry;
+    }
+    FreeResource32( hMem );
+    return (entry != NULL);
+}
+
+
+/**********************************************************************
+ *	    CURSORICON_CreateFromResource
+ *
+ * Create a cursor or icon from in-memory resource template. 
+ *
+ * FIXME: Adjust icon size when width and height are nonzero (stretchblt).
+ *        Convert to mono when cFlag is LR_MONOCHROME. Do something
+ *        with cbSize parameter as well.
+ */
+static HGLOBAL16 CURSORICON_CreateFromResource( HINSTANCE32 hInstance, HGLOBAL16 hObj, LPBYTE bits,
+	 					UINT32 cbSize, BOOL32 bIcon, DWORD dwVersion, 
+						INT32 width, INT32 height, UINT32 cFlag )
+{
     int sizeAnd, sizeXor;
     HBITMAP32 hAndBits = 0, hXorBits = 0; /* error condition for later */
     BITMAPOBJ *bmpXor, *bmpAnd;
     POINT16 hotspot = { 0 ,0 };
-    CURSORICONINFO *info;
     BITMAPINFO *bmi;
     HDC32 hdc;
 
-    if (fCursor)  /* If cursor, get the hotspot */
+    dprintf_cursor(stddeb,"CreateFromResource: %08x (%u bytes), ver %08x, %ix%i %s %s\n",
+                        (unsigned)bits, cbSize, (unsigned)dwVersion, width, height,
+                                  bIcon ? "icon" : "cursor", cFlag ? "mono" : "" );
+    if (dwVersion == 0x00020000)
     {
-        POINT16 *pt = (POINT16 *)LockResource16( handle );
+	fprintf(stdnimp,"\t2.xx resources are not supported\n");
+	return 0;
+    }
+
+    if (bIcon)
+	bmi = (BITMAPINFO *)bits;
+    else /* get the hotspot */
+    {
+        POINT16 *pt = (POINT16 *)bits;
         hotspot = *pt;
         bmi = (BITMAPINFO *)(pt + 1);
     }
-    else bmi = (BITMAPINFO *)LockResource16( handle );
 
     /* Check bitmap header */
 
@@ -262,7 +313,7 @@
 	 (bmi->bmiHeader.biSize != sizeof(BITMAPINFOHEADER)  ||
 	  bmi->bmiHeader.biCompression != BI_RGB) )
     {
-          fprintf(stderr,"%s: invalid bitmap header.\n", __loadhandlerStr);
+          fprintf(stderr,"\tinvalid resource bitmap header.\n");
           return 0;
     }
 
@@ -329,7 +380,7 @@
 
     if( !hXorBits || !hAndBits ) 
     {
-	fprintf(stderr,"%s: unable to create a bitmap.\n", __loadhandlerStr );
+	fprintf(stderr,"\tunable to create an icon bitmap.\n");
 	return 0;
     }
 
@@ -340,46 +391,77 @@
     sizeXor = bmpXor->bitmap.bmHeight * bmpXor->bitmap.bmWidthBytes;
     sizeAnd = bmpAnd->bitmap.bmHeight * bmpAnd->bitmap.bmWidthBytes;
 
-    if (!(handle = GlobalAlloc16( GMEM_MOVEABLE,
-                                  sizeof(CURSORICONINFO) + sizeXor + sizeAnd)))
+    if (hObj) hObj = GlobalReAlloc16( hObj, 
+		     sizeof(CURSORICONINFO) + sizeXor + sizeAnd, GMEM_MOVEABLE );
+    if (!hObj) hObj = GlobalAlloc16( GMEM_MOVEABLE, 
+		     sizeof(CURSORICONINFO) + sizeXor + sizeAnd );
+    if (hObj)
     {
-        DeleteObject32( hXorBits );
-        DeleteObject32( hAndBits );
-        return 0;
+	CURSORICONINFO *info;
+
+	/* Make it owned by the module */
+	if (hInstance) FarSetOwner( hObj, MODULE_HANDLEtoHMODULE16(hInstance));
+
+	info = (CURSORICONINFO *)GlobalLock16( hObj );
+	info->ptHotSpot.x   = hotspot.x;
+	info->ptHotSpot.y   = hotspot.y;
+	info->nWidth        = bmpXor->bitmap.bmWidth;
+	info->nHeight       = bmpXor->bitmap.bmHeight;
+	info->nWidthBytes   = bmpXor->bitmap.bmWidthBytes;
+	info->bPlanes       = bmpXor->bitmap.bmPlanes;
+	info->bBitsPerPixel = bmpXor->bitmap.bmBitsPixel;
+
+	/* Transfer the bitmap bits to the CURSORICONINFO structure */
+
+	GetBitmapBits32( hAndBits, sizeAnd, (char *)(info + 1) );
+	GetBitmapBits32( hXorBits, sizeXor, (char *)(info + 1) + sizeAnd );
+	GlobalUnlock16( hObj );
     }
 
-    /* Make it owned by the module */
-    if (hInstance) FarSetOwner( handle, GetExePtr(hInstance) );
-
-    info = (CURSORICONINFO *)GlobalLock16( handle );
-    info->ptHotSpot.x   = hotspot.x;
-    info->ptHotSpot.y   = hotspot.y;
-    info->nWidth        = bmpXor->bitmap.bmWidth;
-    info->nHeight       = bmpXor->bitmap.bmHeight;
-    info->nWidthBytes   = bmpXor->bitmap.bmWidthBytes;
-    info->bPlanes       = bmpXor->bitmap.bmPlanes;
-    info->bBitsPerPixel = bmpXor->bitmap.bmBitsPixel;
-
-    /* Transfer the bitmap bits to the CURSORICONINFO structure */
-
-    GetBitmapBits32( hAndBits, sizeAnd, (char *)(info + 1) );
-    GetBitmapBits32( hXorBits, sizeXor, (char *)(info + 1) + sizeAnd );
     DeleteObject32( hXorBits );
     DeleteObject32( hAndBits );
-    GlobalUnlock16( handle );
-    return handle;
+    return hObj;
 }
 
+
 /**********************************************************************
- *	    CURSORICON_Load
+ *          CreateIconFromResourceEx16          (USER.450)
  *
- * Load a cursor or icon.
+ * FIXME: not sure about exact parameter types
  */
-static HGLOBAL16 CURSORICON_Load( HINSTANCE16 hInstance, SEGPTR name,
-                                  INT32 width, INT32 height, INT32 colors,
-                                  BOOL32 fCursor )
+HICON16 WINAPI CreateIconFromResourceEx16( LPBYTE bits, UINT16 cbSize, BOOL16 bIcon,
+                                    DWORD dwVersion, INT16 width, INT16 height, UINT16 cFlag )
 {
-    HGLOBAL16 handle, hRet;
+    TDB* pTask = (TDB*)GlobalLock16( GetCurrentTask() );
+    if( pTask )
+	return CURSORICON_CreateFromResource( pTask->hInstance, 0, bits, cbSize, bIcon, dwVersion,
+					      width, height, cFlag );
+    return 0;
+}
+
+
+/**********************************************************************
+ *          CreateIconFromResourceEx32          (USER32.76)
+ */
+HICON32 WINAPI CreateIconFromResourceEx32( LPBYTE bits, UINT32 cbSize,
+                                           BOOL32 bIcon, DWORD dwVersion,
+                                           INT32 width, INT32 height,
+                                           UINT32 cFlag )
+{
+    return CreateIconFromResourceEx16( bits, cbSize, bIcon, dwVersion, width, height, cFlag );
+}
+
+
+/**********************************************************************
+ *	    CURSORICON_Load16
+ *
+ * Load a cursor or icon from a 16-bit resource.
+ */
+static HGLOBAL16 CURSORICON_Load16( HINSTANCE16 hInstance, SEGPTR name,
+                                    INT32 width, INT32 height, INT32 colors,
+                                    BOOL32 fCursor )
+{
+    HGLOBAL16 handle;
     HRSRC16 hRsrc;
     CURSORICONDIRENTRY dirEntry;
 
@@ -396,19 +478,89 @@
 
     /* Find the best entry in the directory */
 
-    if (!CURSORICON_LoadDirEntry( hInstance, name, width, height,
-                                  colors, fCursor, &dirEntry )) return 0;
-
+    if ( !CURSORICON_LoadDirEntry16( hInstance, name, width, height,
+                                    colors, fCursor, &dirEntry ) )  return 0;
     /* Load the resource */
 
-    if (!(hRsrc = FindResource16( hInstance,
+    if ( (hRsrc = FindResource16( hInstance,
                                 MAKEINTRESOURCE( dirEntry.icon.wResId ),
-                                fCursor ? RT_CURSOR : RT_ICON ))) return 0;
-    if (!(handle = LoadResource16( hInstance, hRsrc ))) return 0;
+                                fCursor ? RT_CURSOR : RT_ICON )) )
+    {
+	/* 16-bit icon or cursor resources are processed
+	 * transparently by the LoadResource16() via custom
+	 * resource handlers set by SetResourceHandler().
+	 */
 
-    hRet = CURSORICON_LoadHandler( handle, hInstance, fCursor );
-    FreeResource16(handle);
-    return hRet;
+	if ( (handle = LoadResource16( hInstance, hRsrc )) )
+	    return handle;
+    }
+    return 0;
+}
+
+/**********************************************************************
+ *          CURSORICON_Load32
+ *
+ * Load a cursor or icon from a 32-bit resource.
+ */
+static HGLOBAL32 CURSORICON_Load32( HINSTANCE32 hInstance, LPCWSTR name,
+                                    int width, int height, int colors,
+                                    BOOL32 fCursor )
+{
+    HANDLE32 handle;
+    HANDLE32 hRsrc;
+    CURSORICONDIRENTRY dirEntry;
+
+    if(!hInstance)  /* OEM cursor/icon */
+    {
+	WORD resid;
+	if(HIWORD(name))
+	{
+            LPSTR ansi = HEAP_strdupWtoA(GetProcessHeap(),0,name);
+            if( ansi[0]=='#')        /*Check for '#xxx' name */
+            {
+                resid = atoi(ansi+1);
+                HeapFree( GetProcessHeap(), 0, ansi );
+            }
+            else
+            {
+                HeapFree( GetProcessHeap(), 0, ansi );
+                return 0;
+            }
+        }
+        else resid = LOWORD(name);
+        return OBM_LoadCursorIcon(resid, fCursor);
+    }
+
+    /* Find the best entry in the directory */
+ 
+    if ( !CURSORICON_LoadDirEntry32( hInstance, name, width, height,
+				    colors, fCursor, &dirEntry ) )  return 0;
+    /* Load the resource */
+
+    if ( (hRsrc = FindResource32W( hInstance,
+                      (LPWSTR) (DWORD) dirEntry.icon.wResId,
+                      (LPWSTR) (fCursor ? RT_CURSOR : RT_ICON ))) )
+    {
+	HANDLE32 h = 0;
+	if ( (handle = LoadResource32( hInstance, hRsrc )) )
+	{
+	    /* Hack to keep LoadCursor/Icon32() from spawning multiple
+	     * copies of the same object.
+	     */
+#define pRsrcEntry ((LPIMAGE_RESOURCE_DATA_ENTRY)hRsrc)
+	    if( !pRsrcEntry->ResourceHandle ) 
+	    {
+		LPBYTE bits = (LPBYTE)LockResource32( handle );
+		h = CURSORICON_CreateFromResource( hInstance, 0, bits, dirEntry.icon.dwBytesInRes, 
+					!fCursor, 0x00030000, width, height, LR_DEFAULTCOLOR );
+		pRsrcEntry->ResourceHandle = h;
+	    }
+	    else h = pRsrcEntry->ResourceHandle;
+#undef  pRsrcEntry
+	}
+	return h;
+    }
+    return 0;
 }
 
 
@@ -438,80 +590,86 @@
 /***********************************************************************
  *           CURSORICON_IconToCursor
  *
- * Converts bitmap to mono and truncates if icon is too large
+ * Converts bitmap to mono and truncates if icon is too large (should
+ * probably do StretchBlt() instead).
  */
 HCURSOR16 CURSORICON_IconToCursor(HICON16 hIcon, BOOL32 bSemiTransparent)
 {
  HCURSOR16       hRet = 0;
- CURSORICONINFO *ptr = NULL;
+ CURSORICONINFO *pIcon = NULL;
  HTASK16 	 hTask = GetCurrentTask();
  TDB*  		 pTask = (TDB *)GlobalLock16(hTask);
 
  if(hIcon && pTask)
-    if (!(ptr = (CURSORICONINFO*)GlobalLock16( hIcon ))) return FALSE;
-       if (ptr->bPlanes * ptr->bBitsPerPixel == 1)
+    if (!(pIcon = (CURSORICONINFO*)GlobalLock16( hIcon ))) return FALSE;
+       if (pIcon->bPlanes * pIcon->bBitsPerPixel == 1)
            hRet = CURSORICON_Copy( pTask->hInstance, hIcon );
        else
        {
            BYTE  pAndBits[128];
            BYTE  pXorBits[128];
-	   int   x, y, ix, iy, shift; 
-	   int   bpp = (ptr->bBitsPerPixel>=24)?32:ptr->bBitsPerPixel; /* this sucks */
-           BYTE* psPtr = (BYTE *)(ptr + 1) +
-                            ptr->nHeight * BITMAP_WIDTH_BYTES(ptr->nWidth,1);
-           BYTE* pxbPtr = pXorBits;
-           unsigned *psc = NULL, val = 0;
-           unsigned val_base = 0xffffffff >> (32 - bpp);
+	   int   maxx, maxy, ix, iy, bpp = pIcon->bBitsPerPixel;
+           BYTE* psPtr, *pxbPtr = pXorBits;
+           unsigned xor_width, and_width, val_base = 0xffffffff >> (32 - bpp);
            BYTE* pbc = NULL;
 
            COLORREF       col;
            CURSORICONINFO cI;
 
+	   dprintf_icon(stddeb, "IconToCursor:[%04x] %ix%i %ibpp (bogus %ibps)\n", 
+		hIcon, pIcon->nWidth, pIcon->nHeight, pIcon->bBitsPerPixel, pIcon->nWidthBytes );
+
+	   xor_width = BITMAP_GetBitsWidth( pIcon->nWidth, bpp );
+	   and_width =  BITMAP_GetBitsWidth( pIcon->nWidth, 1 );
+	   psPtr = (BYTE *)(pIcon + 1) + pIcon->nHeight * and_width;
+
            memset(pXorBits, 0, 128);
            cI.bBitsPerPixel = 1; cI.bPlanes = 1;
            cI.ptHotSpot.x = cI.ptHotSpot.y = 15;
            cI.nWidth = 32; cI.nHeight = 32;
-           cI.nWidthBytes = 4;	/* 1bpp */
+           cI.nWidthBytes = 4;	/* 32x1bpp */
 
-           x = (ptr->nWidth > 32) ? 32 : ptr->nWidth;
-           y = (ptr->nHeight > 32) ? 32 : ptr->nHeight;
+           maxx = (pIcon->nWidth > 32) ? 32 : pIcon->nWidth;
+           maxy = (pIcon->nHeight > 32) ? 32 : pIcon->nHeight;
 
-           for( iy = 0; iy < y; iy++ )
+           for( iy = 0; iy < maxy; iy++ )
            {
-              val = BITMAP_WIDTH_BYTES( ptr->nWidth, 1 );
-              memcpy( pAndBits + iy * 4,
-                     (BYTE *)(ptr + 1) + iy * val, (val>4) ? 4 : val);
-              shift = iy % 2;
+	      unsigned shift = iy % 2; 
 
-              for( ix = 0; ix < x; ix++ )
+              memcpy( pAndBits + iy * 4, (BYTE *)(pIcon + 1) + iy * and_width, 
+					 (and_width > 4) ? 4 : and_width );
+              for( ix = 0; ix < maxx; ix++ )
               {
                 if( bSemiTransparent && ((ix+shift)%2) )
                 {
+		    /* set AND bit, XOR bit stays 0 */
+
                     pbc = pAndBits + iy * 4 + ix/8;
                    *pbc |= 0x80 >> (ix%8);
                 }
                 else
                 {
-                  psc = (unsigned*)(psPtr + (ix * bpp)/8);
-                  val = ((*psc) >> (ix * bpp)%8) & val_base;
+		    /* keep AND bit, set XOR bit */
+
+		  unsigned *psc = (unsigned*)(psPtr + (ix * bpp)/8);
+                  unsigned  val = ((*psc) >> (ix * bpp)%8) & val_base;
                   col = COLOR_ToLogical(val);
-                  if( GetRValue(col) > 0xa0 ||
-                      GetGValue(col) > 0x80 ||
-                      GetBValue(col) > 0xa0 )
+		  if( (GetRValue(col) + GetGValue(col) + GetBValue(col)) > 0x180 )
                   {
                     pbc = pxbPtr + ix/8;
                    *pbc |= 0x80 >> (ix%8);
                   }
                 }
               }
-              psPtr += ptr->nWidthBytes;
+              psPtr += xor_width;
               pxbPtr += 4;
            }
+
            hRet = CreateCursorIconIndirect( pTask->hInstance , &cI, pAndBits, pXorBits);
 
            if( !hRet ) /* fall back on default drag cursor */
                 hRet = CURSORICON_Copy( pTask->hInstance ,
-                              CURSORICON_Load(0,MAKEINTRESOURCE(OCR_DRAGOBJECT),
+                              CURSORICON_Load16(0,MAKEINTRESOURCE(OCR_DRAGOBJECT),
                                          SYSMETRICS_CXCURSOR, SYSMETRICS_CYCURSOR, 1, TRUE) );
        }
 
@@ -531,8 +689,8 @@
         dprintf_cursor( stddeb, "LoadCursor16: %04x %04x\n",
                         hInstance, LOWORD(name) );
 
-    return CURSORICON_Load( hInstance, name,
-                            SYSMETRICS_CXCURSOR, SYSMETRICS_CYCURSOR, 1, TRUE);
+    return CURSORICON_Load16( hInstance, name,
+                              SYSMETRICS_CXCURSOR, SYSMETRICS_CYCURSOR, 1, TRUE);
 }
 
 
@@ -548,9 +706,9 @@
         dprintf_icon( stddeb, "LoadIcon: %04x %04x\n",
                       hInstance, LOWORD(name) );
 
-    return CURSORICON_Load( hInstance, name,
-                            SYSMETRICS_CXICON, SYSMETRICS_CYICON,
-                            MIN( 16, COLOR_GetSystemPaletteSize() ), FALSE );
+    return CURSORICON_Load16( hInstance, name,
+                              SYSMETRICS_CXICON, SYSMETRICS_CYICON,
+                              MIN( 16, COLOR_GetSystemPaletteSize() ), FALSE );
 }
 
 
@@ -691,7 +849,7 @@
 {
     dprintf_icon( stddeb, "DestroyIcon: %04x\n", hIcon );
     /* FIXME: should check for OEM icon here */
-    return (GlobalFree16( hIcon ) == 0);
+    return (FreeResource16( hIcon ) == 0);
 }
 
 
@@ -711,7 +869,7 @@
 {
     dprintf_cursor( stddeb, "DestroyCursor: %04x\n", hCursor );
     /* FIXME: should check for OEM cursor here */
-    return (GlobalFree16( hCursor ) != 0);
+    return (FreeResource16( hCursor ) != 0);
 }
 
 
@@ -1093,6 +1251,53 @@
     if (rect) CopyRect32( rect, &CURSOR_ClipRect );
 }
 
+/**********************************************************************
+ *          LookupIconIdFromDirectoryEx16	(USER.364)
+ *
+ * FIXME: exact parameter sizes
+ */
+UINT16 WINAPI LookupIconIdFromDirectoryEx16( CURSORICONDIR *dir, BOOL16 bIcon,
+	     INT16 width, INT16 height, UINT16 cFlag )
+{
+    UINT16 retVal = 0;
+    if( dir && !dir->idReserved && (dir->idType & 3) )
+    {
+	int colors = (cFlag == LR_MONOCHROME) ? 2 : COLOR_GetSystemPaletteSize();
+	if( bIcon )
+	{
+	    ICONDIRENTRY* entry;
+	    entry = CURSORICON_FindBestIcon( dir, width, height, colors );
+	    if( entry ) retVal = entry->wResId;
+	}
+	else
+	{
+	    CURSORDIRENTRY* entry;
+	    entry = CURSORICON_FindBestCursor( dir, width, height );
+	    if( entry ) retVal = entry->wResId;
+	}
+    }
+    else dprintf_cursor(stddeb,"IconId: invalid resource directory\n");
+    return retVal;
+}
+
+/**********************************************************************
+ *          LookupIconIdFromDirectoryEx32       (USER32.379)
+ */
+INT32 WINAPI LookupIconIdFromDirectoryEx32( CURSORICONDIR *dir, BOOL32 bIcon,
+             INT32 width, INT32 height, UINT32 cFlag )
+{
+    return LookupIconIdFromDirectoryEx16( dir, bIcon, width, height, cFlag );
+}
+
+/**********************************************************************
+ *          LookupIconIdFromDirectory		(USER32.378)
+ */
+INT32 WINAPI LookupIconIdFromDirectory( CURSORICONDIR *dir, BOOL32 bIcon )
+{
+    return LookupIconIdFromDirectoryEx16( dir, bIcon, 
+	   bIcon ? SYSMETRICS_CXICON : SYSMETRICS_CXCURSOR,
+	   bIcon ? SYSMETRICS_CYICON : SYSMETRICS_CYCURSOR, bIcon ? 0 : LR_MONOCHROME );
+}
 
 /**********************************************************************
  *	    GetIconID    (USER.455)
@@ -1100,52 +1305,143 @@
 WORD WINAPI GetIconID( HGLOBAL16 hResource, DWORD resType )
 {
     CURSORICONDIR *lpDir = (CURSORICONDIR *)GlobalLock16(hResource);
-/* LockResource16(hResource); */
-
-    if (!lpDir || lpDir->idReserved ||
-        ((lpDir->idType != 1) && (lpDir->idType != 2)))
-    {
-        dprintf_cursor(stddeb,"GetIconID: invalid resource directory\n");
-        return 0;
-    }
 
     dprintf_cursor( stddeb, "GetIconID: hRes=%04x, entries=%i\n",
-                    hResource, lpDir->idCount );
+                    hResource, lpDir ? lpDir->idCount : 0);
 
     switch(resType)
     {
-    case 1:  /* cursor */
-        {
-            CURSORDIRENTRY *entry = CURSORICON_FindBestCursor( lpDir,
-                                    SYSMETRICS_CXCURSOR, SYSMETRICS_CYCURSOR );
-            return entry ? entry->wResId : 0;
-        }
-    case 3:  /* icon */
-        {
-            ICONDIRENTRY * entry =  CURSORICON_FindBestIcon( lpDir,
-                                    SYSMETRICS_CXICON, SYSMETRICS_CYICON,
-                                    MIN( 16, COLOR_GetSystemPaletteSize() ) );
-            return entry ? entry->wResId : 0;
-        }
+	case RT_CURSOR:
+	     return (WORD)LookupIconIdFromDirectoryEx16( lpDir, FALSE, 
+			  SYSMETRICS_CXCURSOR, SYSMETRICS_CYCURSOR, LR_MONOCHROME );
+	case RT_ICON:
+	     return (WORD)LookupIconIdFromDirectoryEx16( lpDir, TRUE,
+			  SYSMETRICS_CXICON, SYSMETRICS_CYICON, 0 );
+	default:
+	     fprintf( stderr, "GetIconID: invalid res type %ld\n", resType );
     }
-    fprintf( stderr, "GetIconID: invalid res type %ld\n", resType );
     return 0;
 }
 
+/**********************************************************************
+ *          LoadCursorIconHandler    (USER.336)
+ *
+ * Supposed to load resources of Windows 2.x applications.
+ */
+HGLOBAL16 WINAPI LoadCursorIconHandler( HGLOBAL16 hResource, HMODULE16 hModule, HRSRC16 hRsrc )
+{
+    fprintf(stderr,"hModule[%04x]: old 2.x resources are not supported!\n", hModule);
+    return (HGLOBAL16)0;
+}
+
+/**********************************************************************
+ *          LoadDIBIconHandler    (USER.357)
+ * 
+ * RT_ICON resource loader, installed by USER_SignalProc when module
+ * is initialized.
+ */
+HGLOBAL16 WINAPI LoadDIBIconHandler( HGLOBAL16 hMemObj, HMODULE16 hModule, HRSRC16 hRsrc )
+{
+    /* If hResource is zero we must allocate a new memory block, if it's
+     * non-zero but GlobalLock() returns NULL then it was discarded and
+     * we have to recommit some memory, otherwise we just need to check 
+     * the block size. See LoadProc() in 16-bit SDK for more.
+     */
+
+     hMemObj = USER_CallDefaultRsrcHandler( hMemObj, hModule, hRsrc );
+     if( hMemObj )
+     {
+	 LPBYTE bits = (LPBYTE)GlobalLock16( hMemObj );
+	 hMemObj = CURSORICON_CreateFromResource( hModule, hMemObj, bits, 
+		   SizeofResource16(hModule, hRsrc), TRUE, 0x00030000, 
+		   SYSMETRICS_CXICON, SYSMETRICS_CYICON, LR_DEFAULTCOLOR );
+     }
+     return hMemObj;
+}
+
+/**********************************************************************
+ *          LoadDIBCursorHandler    (USER.356)
+ *
+ * RT_CURSOR resource loader. Same as above.
+ */
+HGLOBAL16 WINAPI LoadDIBCursorHandler( HGLOBAL16 hMemObj, HMODULE16 hModule, HRSRC16 hRsrc )
+{
+    hMemObj = USER_CallDefaultRsrcHandler( hMemObj, hModule, hRsrc );
+    if( hMemObj )
+    {
+	LPBYTE bits = (LPBYTE)GlobalLock16( hMemObj );
+	hMemObj = CURSORICON_CreateFromResource( hModule, hMemObj, bits,
+		  SizeofResource16(hModule, hRsrc), FALSE, 0x00030000,
+		  SYSMETRICS_CXCURSOR, SYSMETRICS_CYCURSOR, LR_MONOCHROME );
+    }
+    return hMemObj;
+}
 
 /**********************************************************************
  *	    LoadIconHandler    (USER.456)
  */
 HICON16 WINAPI LoadIconHandler( HGLOBAL16 hResource, BOOL16 bNew )
 {
+    LPBYTE bits = (LPBYTE)LockResource16( hResource );
+
     dprintf_cursor(stddeb,"LoadIconHandler: hRes=%04x\n",hResource);
 
-    if( !bNew )
-      {
-	fprintf(stdnimp,"LoadIconHandler: 2.xx resources are not supported\n");
-        return 0;
-      }
-    return CURSORICON_LoadHandler( hResource, 0, FALSE);
+    return CURSORICON_CreateFromResource( 0, 0, bits, 0, TRUE, 
+		      bNew ? 0x00030000 : 0x00020000, 0, 0, LR_DEFAULTCOLOR );
+}
+
+/***********************************************************************
+ *           LoadCursorW                (USER32.361)
+ */
+HCURSOR32 WINAPI LoadCursor32W(HINSTANCE32 hInstance, LPCWSTR name)
+{
+    return CURSORICON_Load32( hInstance, name,
+                              SYSMETRICS_CXCURSOR, SYSMETRICS_CYCURSOR, 1, TRUE);
+}
+
+/***********************************************************************
+ *           LoadCursorA                (USER32.358)
+ */
+HCURSOR32 WINAPI LoadCursor32A(HINSTANCE32 hInstance, LPCSTR name)
+{
+        HCURSOR32 res=0;
+        if(!HIWORD(name))
+                return LoadCursor32W(hInstance,(LPCWSTR)name);
+        else
+        {
+            LPWSTR uni = HEAP_strdupAtoW( GetProcessHeap(), 0, name );
+            res = LoadCursor32W(hInstance, uni);
+            HeapFree( GetProcessHeap(), 0, uni);
+        }
+        return res;
+}
+
+/***********************************************************************
+ *           LoadIconW          (USER32.363)
+ */
+HICON32 WINAPI LoadIcon32W(HINSTANCE32 hInstance, LPCWSTR name)
+{
+    return CURSORICON_Load32( hInstance, name,
+                              SYSMETRICS_CXICON, SYSMETRICS_CYICON,
+                              MIN( 16, COLOR_GetSystemPaletteSize() ), FALSE );
+}
+
+/***********************************************************************
+ *           LoadIconA          (USER32.362)
+ */
+HICON32 WINAPI LoadIcon32A(HINSTANCE32 hInstance, LPCSTR name)
+{
+    HICON32 res=0;
+
+    if( !HIWORD(name) )
+	return LoadIcon32W(hInstance, (LPCWSTR)name);
+    else
+    {
+	LPWSTR uni = HEAP_strdupAtoW( GetProcessHeap(), 0, name );
+	res = LoadIcon32W( hInstance, uni );
+	HeapFree( GetProcessHeap(), 0, uni );
+    }
+    return res;
 }
 
 /**********************************************************************
diff --git a/objects/dc.c b/objects/dc.c
index 77d3996..ed3b3fd 100644
--- a/objects/dc.c
+++ b/objects/dc.c
@@ -232,6 +232,16 @@
     if (dc->w.flags & DC_DIRTY) CLIPPING_UpdateGCRegion(dc);
 
     val.function = DC_XROPfunction[dc->w.ROPmode-1];
+    /*
+    ** Let's replace GXinvert by GXxor with (black xor white)
+    ** This solves the selection color and leak problems in excel
+    ** FIXME : Let's do that only if we work with X-pixels, not with Win-pixels
+    */
+    if (val.function == GXinvert)
+	{
+	val.foreground = BlackPixelOfScreen(screen) ^ WhitePixelOfScreen(screen);
+	val.function = GXxor;
+	}
     val.fill_style = dc->u.x.brush.fillStyle;
     switch(val.fill_style)
     {
@@ -338,7 +348,7 @@
     }
     else val.line_style = LineSolid;
     val.line_width = dc->u.x.pen.width;
-    val.cap_style  = CapRound;
+    val.cap_style  = (val.line_width <= 1) ? CapNotLast : CapRound;
     val.join_style = JoinMiter;
     XChangeGC( display, dc->u.x.gc, 
 	       GCFunction | GCForeground | GCBackground | GCLineWidth |
diff --git a/objects/dib.c b/objects/dib.c
index 9746225..5035ec34 100644
--- a/objects/dib.c
+++ b/objects/dib.c
@@ -299,13 +299,13 @@
 
     while (lines--)
     {
-	for (i = srcwidth/2, x = 0; i > 0; i--)
+	for (i = dstwidth/2, x = 0; i > 0; i--)
 	{
 	    BYTE pix = *bits++;
 	    XPutPixel( bmpImage, x++, lines, colors[pix >> 4] );
 	    XPutPixel( bmpImage, x++, lines, colors[pix & 0x0f] );
 	}
-        if (srcwidth & 1) XPutPixel( bmpImage, x, lines, colors[*bits >> 4] );
+        if (dstwidth & 1) XPutPixel( bmpImage, x, lines, colors[*bits >> 4] );
         srcbits += linebytes;
         bits	 = srcbits;
     }
@@ -1125,3 +1125,15 @@
         SetDIBits32( hdc, handle, 0, height, bits, data, coloruse );
     return handle;
 }
+
+HBITMAP32 CreateDIBSection(
+	HDC32 hdc,BITMAPINFO *bmi,UINT32 usage, LPVOID **bits,HANDLE32 section,
+	DWORD offset
+) {
+	fprintf(stderr,"CreateDIBSection(%d,[w=%ld,h=%ld],%d,%p,0x%08x,%ld),stub\n",
+		hdc,bmi->bmiHeader.biWidth,bmi->bmiHeader.biHeight,usage,bits,section,offset
+	);
+	*bits = 0xCafeBabe;
+	return 0;
+}
+
diff --git a/objects/font.c b/objects/font.c
index 216962f..941881a 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -804,11 +804,12 @@
     }
 
     if (!dc->funcs->pGetTextMetrics ||
-        !dc->funcs->pGetTextMetrics( dc,metrics ))
+        !dc->funcs->pGetTextMetrics( dc, metrics ))
         return FALSE;
-    /* map them from device to logic coordinatesystem before returning.
-     * FIXME: should this be in the device driver?
-     */
+
+    /* device layer returns values in device units
+     * therefore we have to convert them to logical */
+
 #define WDPTOLP(x) ((x<0)?					\
 		(-abs((x)*dc->wndExtX/dc->vportExtX)):		\
 		(abs((x)*dc->wndExtX/dc->vportExtX)))
diff --git a/objects/metafile.c b/objects/metafile.c
index ad8622a..ba27f44 100644
--- a/objects/metafile.c
+++ b/objects/metafile.c
@@ -727,16 +727,16 @@
     case META_CREATEREGION:
 	 {
 	    int i;
-	    HRGN32 h1,h2,hrgn=CreateRectRgn32(mr->rdParam[7],mr->rdParam[8],
-					      mr->rdParam[9],mr->rdParam[10]);
-	    for (i=0,h1=CreateRectRgn32(0,0,0,0);i<mr->rdParam[5];i++)
+	    HRGN32 h2,hrgn=CreateRectRgn32(mr->rdParam[7],mr->rdParam[8],
+                                           mr->rdParam[9],mr->rdParam[10]);
+	    for (i = 0; i < mr->rdParam[5]; i++)
 	    {
 	     if (mr->rdParam[11+i*6]==2)
 	     { 
 	       h2=CreateRectRgn32(mr->rdParam[14+i*6],mr->rdParam[12+i*6],
 				  mr->rdParam[15+i*6],mr->rdParam[13+i*6]);
-	       CombineRgn32(hrgn,h1,h2,mr->rdParam[16+i*6]);	/* e.g. RGN_OR */
-	       h1=hrgn;
+	       CombineRgn32(hrgn,hrgn,h2,mr->rdParam[16+i*6]);	/* e.g. RGN_OR */
+               DeleteObject32( h2 );
 	     }
 	    }
 	    MF_AddHandle(ht, nHandles,hrgn);
diff --git a/objects/text.c b/objects/text.c
index 1b46830..7e66e56 100644
--- a/objects/text.c
+++ b/objects/text.c
@@ -254,7 +254,7 @@
                 HPEN32 hpen = CreatePen32( PS_SOLID, 1, GetTextColor32(hdc) );
                 HPEN32 oldPen = SelectObject32( hdc, hpen );
                 MoveTo(hdc, x + prefix_x, y + tm.tmAscent + 1 );
-                LineTo32(hdc, x + prefix_end, y + tm.tmAscent + 1 );
+                LineTo32(hdc, x + prefix_end + 1, y + tm.tmAscent + 1 );
                 SelectObject32( hdc, oldPen );
                 DeleteObject32( hpen );
             }
@@ -312,6 +312,31 @@
     return ret;
 }
 
+/***********************************************************************
+ *           DrawTextEx32A    (USER32.164)
+ */
+INT32 DrawTextEx32A( HDC32 hdc, LPCSTR str, INT32 count,
+                     LPRECT32 rect, UINT32 flags, LPDRAWTEXTPARAMS dtp )
+{
+    fprintf(stderr,"DrawTextEx32A(%d,'%s',%d,%p,0x%08x,%p)\n",
+    	hdc,str,count,rect,flags,dtp
+    );
+    /*FIXME: ignores extended functionality ... */
+    return DrawText32A(hdc,str,count,rect,flags);
+}
+
+/***********************************************************************
+ *           DrawTextEx32W    (USER32.165)
+ */
+INT32 DrawTextEx32W( HDC32 hdc, LPCWSTR str, INT32 count,
+                     LPRECT32 rect, UINT32 flags, LPDRAWTEXTPARAMS dtp )
+{
+    fprintf(stderr,"DrawTextEx32A(%d,%p,%d,%p,0x%08x,%p)\n",
+    	hdc,str,count,rect,flags,dtp
+    );
+    /*FIXME: ignores extended functionality ... */
+    return DrawText32W(hdc,str,count,rect,flags);
+}
 
 /***********************************************************************
  *           ExtTextOut16    (GDI.351)
diff --git a/scheduler/process.c b/scheduler/process.c
index 2819562..25087fa 100644
--- a/scheduler/process.c
+++ b/scheduler/process.c
@@ -22,7 +22,7 @@
 #define HTABLE_SIZE  0x30  /* Handle table initial size */
 #define HTABLE_INC   0x10  /* Handle table increment */
 
-#define BOOT_HTABLE_SIZE  5
+#define BOOT_HTABLE_SIZE  10
 
 static HANDLE_ENTRY boot_handles[BOOT_HTABLE_SIZE];
 
@@ -146,6 +146,7 @@
     if ((h < pCurrentProcess->handle_table->count) ||
         PROCESS_GrowHandleTable( pCurrentProcess ))
     {
+        entry = &pCurrentProcess->handle_table->entries[h];
         entry->flags = flags;
         entry->ptr   = ptr;
         LeaveCriticalSection( &pCurrentProcess->crit_section );
@@ -251,7 +252,7 @@
 /***********************************************************************
  *           PROCESS_FillEnvDB
  */
-static BOOL32 PROCESS_FillEnvDB( PDB32 *pdb, TDB *pTask )
+static BOOL32 PROCESS_FillEnvDB( PDB32 *pdb, TDB *pTask, LPCSTR cmd_line )
 {
     LPSTR p, env;
     INT32 count = 0;
@@ -278,9 +279,15 @@
     HeapFree( pdb->heap, 0, array );
     array = NULL;
 
+    /* Copy the command line */
+
+    if (!(pdb->env_db->cmd_line = HEAP_strdupA( pdb->heap, 0, cmd_line )))
+        goto error;
+
     return TRUE;
 
 error:
+    if (pdb->env_db->cmd_line) HeapFree( pdb->heap, 0, pdb->env_db->cmd_line );
     if (array) HeapFree( pdb->heap, 0, array );
     if (pdb->env_db->environ) HeapFree( pdb->heap, 0, pdb->env_db->environ );
     return FALSE;
@@ -290,7 +297,7 @@
 /***********************************************************************
  *           PROCESS_Create
  */
-PDB32 *PROCESS_Create( TDB *pTask )
+PDB32 *PROCESS_Create( TDB *pTask, LPCSTR cmd_line )
 {
     PDB32 *pdb = HeapAlloc( SystemHeap, HEAP_ZERO_MEMORY, sizeof(PDB32) );
     if (!pdb) return NULL;
@@ -310,7 +317,7 @@
     if (!(pdb->env_db = HeapAlloc(pdb->heap, HEAP_ZERO_MEMORY, sizeof(ENVDB))))
         goto error;
     if (!(pdb->handle_table = PROCESS_AllocHandleTable( pdb ))) goto error;
-    if (!PROCESS_FillEnvDB( pdb, pTask )) goto error;
+    if (!PROCESS_FillEnvDB( pdb, pTask, cmd_line )) goto error;
     return pdb;
 
 error:
@@ -352,6 +359,7 @@
  */
 void WINAPI ExitProcess( DWORD status )
 {
+    __RESTORE_ES;  /* Necessary for Pietrek's showseh example program */
     TASK_KillCurrentTask( status );
 }
 
diff --git a/scheduler/thread.c b/scheduler/thread.c
index 7d1bbe2..c350aee 100644
--- a/scheduler/thread.c
+++ b/scheduler/thread.c
@@ -16,6 +16,7 @@
 #include "stddebug.h"
 
 THDB *pCurrentThread = NULL;
+static K32OBJ_LIST THREAD_List;
 
 /***********************************************************************
  *           THREAD_GetPtr
@@ -29,7 +30,7 @@
 
     if (handle == 0xfffffffe)  /* Self-thread handle */
     {
-        thread = (THDB *)GetCurrentThreadId();
+        thread = THREAD_Current();
         K32OBJ_IncCount( &thread->header );
     }
     else thread = (THDB *)PROCESS_GetObjPtr( handle, K32OBJ_THREAD );
@@ -38,6 +39,19 @@
 
 
 /***********************************************************************
+ *           THREAD_Current
+ *
+ * Return the current thread THDB pointer.
+ */
+THDB *THREAD_Current(void)
+{
+    /* FIXME: should probably use %fs register here */
+    assert( pCurrentThread );
+    return pCurrentThread;
+}
+
+
+/***********************************************************************
  *           THREAD_Create
  */
 THDB *THREAD_Create( PDB32 *pdb, DWORD stack_size,
@@ -88,6 +102,10 @@
     thdb->context.Eip     = (DWORD)start_addr;
     thdb->context.Esp     = (DWORD)thdb->teb.stack_top;
 
+    /* Add the thread to the linked list */
+
+    K32OBJ_AddTail( &THREAD_List, &thdb->header );
+
     return thdb;
 
 error:
@@ -104,10 +122,42 @@
 void THREAD_Destroy( K32OBJ *ptr )
 {
     THDB *thdb = (THDB *)ptr;
+
     assert( ptr->type == K32OBJ_THREAD );
     ptr->type = K32OBJ_UNKNOWN;
+
+    /* Note: when we get here, the thread has already been removed */
+    /* from the thread list */
+
+    /* Free the associated memory */
+
     SELECTOR_FreeBlock( thdb->teb_sel, 1 );
     HeapFree( SystemHeap, 0, thdb );
+
+}
+
+
+/***********************************************************************
+ *           THREAD_SwitchThread
+ *
+ * Return the thread we want to switch to, and switch the contexts.
+ */
+THDB *THREAD_SwitchThread( CONTEXT *context )
+{
+    K32OBJ *cur;
+    THDB *next;
+    if (!pCurrentThread) return NULL;
+    cur = K32OBJ_RemoveHead( &THREAD_List );
+    K32OBJ_AddTail( &THREAD_List, cur );
+    K32OBJ_DecCount( cur );
+    next = (THDB *)THREAD_List.head;
+    if (next != pCurrentThread)
+    {
+        pCurrentThread->context = *context;
+        pCurrentThread = next;
+        *context = pCurrentThread->context;
+    }
+    return pCurrentThread;
 }
 
 
@@ -150,9 +200,7 @@
  */
 DWORD WINAPI GetCurrentThreadId(void)
 {
-    /* FIXME: should probably use %fs register here */
-    assert( pCurrentThread );
-    return (DWORD)pCurrentThread;
+    return (DWORD)THREAD_Current();
 }
 
 
@@ -161,7 +209,7 @@
  */
 DWORD WINAPI GetLastError(void)
 {
-    THDB *thread = (THDB *)GetCurrentThreadId();
+    THDB *thread = THREAD_Current();
     return thread->last_error;
 }
 
@@ -173,7 +221,7 @@
 {
     THDB *thread;
     if (!pCurrentThread) return;  /* FIXME */
-    thread = (THDB *)GetCurrentThreadId();
+    thread = THREAD_Current();
     thread->last_error = error;
 }
 
@@ -194,7 +242,7 @@
 DWORD WINAPI TlsAlloc(void)
 {
     DWORD i, mask, ret = 0;
-    THDB *thread = (THDB *)GetCurrentThreadId();
+    THDB *thread = THREAD_Current();
     DWORD *bits = thread->process->tls_bits;
     EnterCriticalSection( &thread->process->crit_section );
     if (*bits == 0xffffffff)
@@ -221,7 +269,7 @@
 BOOL32 WINAPI TlsFree( DWORD index )
 {
     DWORD mask;
-    THDB *thread = (THDB *)GetCurrentThreadId();
+    THDB *thread = THREAD_Current();
     DWORD *bits = thread->process->tls_bits;
     if (index >= 64)
     {
@@ -250,7 +298,7 @@
  */
 LPVOID WINAPI TlsGetValue( DWORD index )
 {
-    THDB *thread = (THDB *)GetCurrentThreadId();
+    THDB *thread = THREAD_Current();
     if (index >= 64)
     {
         SetLastError( ERROR_INVALID_PARAMETER );
@@ -266,7 +314,7 @@
  */
 BOOL32 WINAPI TlsSetValue( DWORD index, LPVOID value )
 {
-    THDB *thread = (THDB *)GetCurrentThreadId();
+    THDB *thread = THREAD_Current();
     if (index >= 64)
     {
         SetLastError( ERROR_INVALID_PARAMETER );
@@ -335,3 +383,26 @@
     fprintf(stdnimp,"TerminateThread(0x%08lx,%ld), STUB!\n",threadid,exitcode);
     return TRUE;
 }
+
+/**********************************************************************
+ *           GetExitCodeThread   (KERNEL32)
+ */
+BOOL32 WINAPI GetExitCodeThread(HANDLE32 hthread,LPDWORD exitcode)
+{
+    THDB *thread;
+    
+    if (!(thread = THREAD_GetPtr( hthread ))) return FALSE;
+    if (exitcode) *exitcode = thread->exit_code;
+    K32OBJ_DecCount( &thread->header );
+    return TRUE;
+}
+
+/**********************************************************************
+ *           ResumeThread   (KERNEL32)
+ */
+BOOL32 WINAPI ResumeThread(DWORD threadid)
+{
+    fprintf(stdnimp,"ResumeThread(0x%08lx), STUB!\n",threadid);
+    return TRUE;
+}
+
diff --git a/tools/build-spec.txt b/tools/build-spec.txt
index 8d73148..cf79621 100644
--- a/tools/build-spec.txt
+++ b/tools/build-spec.txt
@@ -61,16 +61,14 @@
 - "register" for a function using CPU register to pass arguments
 - "stdcall" for a normal Win32 function
 - "cdecl" for a Win32 function using the C calling convention
+- "varargs" for a Win32 function taking a variable number of arguments
 
 "ARGTYPE" should be one of:
-- "byte"
 - "word"
 - "long"
 - "ptr" (linear pointer)
 - "str" (linear pointer to a null-terminated string)
-- "s_byte" (signed byte)
 - "s_word" (signed word)
-- "s_long" (signed long)
 - "segptr" (segmented pointer).
 - "segstr" (segmented pointer to a null-terminated string)
 
@@ -91,11 +89,11 @@
 
 	100 pascal GetFocus() WIN_GetFocus()
 
-To declare a function using a variable number of arguments, specify
-the function as taking no arguments. In this special case, in Win32
-the called function will be passed a pointer to the first arg; in
-Win16, the args are available with CURRENT_STACK16->args. See the
-wsprintf* functions in user.spec and user32.spec for an example.
+To declare a function using a variable number of arguments in Win16,
+specify the function as taking no arguments. The arguments are then
+available with CURRENT_STACK16->args. In Win32, specify the function
+as 'varargs' and declare it with a '...' parameter in the C file.  See
+the wsprintf* functions in user.spec and user32.spec for an example.
 
 Stub ordinals:
 ==============
diff --git a/tools/build.c b/tools/build.c
index 327a8e8..1803272 100644
--- a/tools/build.c
+++ b/tools/build.c
@@ -43,6 +43,7 @@
     TYPE_STUB,         /* unimplemented stub */
     TYPE_STDCALL,      /* stdcall function (Win32) */
     TYPE_CDECL,        /* cdecl function (Win32) */
+    TYPE_VARARGS,      /* varargs function (Win32) */
     TYPE_EXTERN,       /* external symbol (Win32) */
     TYPE_NBTYPES
 } ORD_TYPE;
@@ -61,6 +62,7 @@
     "stub",         /* TYPE_STUB */
     "stdcall",      /* TYPE_STDCALL */
     "cdecl",        /* TYPE_CDECL */
+    "varargs",      /* TYPE_VARARGS */
     "extern"        /* TYPE_EXTERN */
 };
 
@@ -104,6 +106,11 @@
 typedef struct
 {
     char link_name[80];
+} ORD_VARARGS;
+
+typedef struct
+{
+    char link_name[80];
 } ORD_EXTERN;
 
 typedef struct
@@ -118,6 +125,7 @@
         ORD_FUNCTION   func;
         ORD_RETURN     ret;
         ORD_ABS        abs;
+        ORD_VARARGS    vargs;
         ORD_EXTERN     ext;
     } u;
 } ORDDEF;
@@ -128,8 +136,9 @@
 static char DLLName[80];
 static char DLLFileName[80];
 int Limit = 0;
-int Base = 0;
+int Base = MAX_ORDINALS;
 int DLLHeapSize = 0;
+char *SpecName;
 FILE *SpecFp;
 
 char *ParseBuffer = NULL;
@@ -231,9 +240,9 @@
     {
 	ParseBuffer = xmalloc(512);
 	ParseNext = ParseBuffer;
-	Line++;
 	while (1)
 	{
+            Line++;
 	    if (fgets(ParseBuffer, 511, SpecFp) == NULL)
 		return NULL;
 	    if (ParseBuffer[0] != '#')
@@ -244,9 +253,9 @@
     while ((token = GetTokenInLine()) == NULL)
     {
 	ParseNext = ParseBuffer;
-	Line++;
 	while (1)
 	{
+            Line++;
 	    if (fgets(ParseBuffer, 511, SpecFp) == NULL)
 		return NULL;
 	    if (ParseBuffer[0] != '#')
@@ -273,7 +282,8 @@
     char *token = GetToken();
     if (*token != '(')
     {
-	fprintf(stderr, "%d: Expected '(' got '%s'\n", Line, token);
+	fprintf(stderr, "%s:%d: Expected '(' got '%s'\n",
+                SpecName, Line, token);
 	return -1;
     }
 
@@ -296,15 +306,16 @@
 	
 	if (endptr == NULL || *endptr != '\0')
 	{
-	    fprintf(stderr, "%d: Expected number value, got '%s'\n", Line,
-		    token);
+	    fprintf(stderr, "%s:%d: Expected number value, got '%s'\n",
+                    SpecName, Line, token);
 	    return -1;
 	}
     }
     
     if (token == NULL)
     {
-	fprintf(stderr, "%d: End of file in variable declaration\n", Line);
+	fprintf(stderr, "%s:%d: End of file in variable declaration\n",
+                SpecName, Line);
 	return -1;
     }
 
@@ -330,19 +341,22 @@
     case SPEC_WIN16:
         if (odp->type == TYPE_STDCALL)
         {
-            fprintf( stderr, "%d: 'stdcall' not supported for Win16\n", Line );
+            fprintf( stderr, "%s:%d: 'stdcall' not supported for Win16\n",
+                     SpecName, Line );
             return -1;
         }
         if (odp->type == TYPE_CDECL)
         {
-            fprintf( stderr, "%d: 'cdecl' not supported for Win16\n", Line );
+            fprintf( stderr, "%s:%d: 'cdecl' not supported for Win16\n",
+                     SpecName, Line );
             return -1;
         }
         break;
     case SPEC_WIN32:
         if ((odp->type == TYPE_PASCAL) || (odp->type == TYPE_PASCAL_16))
         {
-            fprintf( stderr, "%d: 'pascal' not supported for Win32\n", Line );
+            fprintf( stderr, "%s:%d: 'pascal' not supported for Win32\n",
+                     SpecName, Line );
             return -1;
         }
         break;
@@ -353,7 +367,8 @@
     token = GetToken();
     if (*token != '(')
     {
-	fprintf(stderr, "%d: Expected '(' got '%s'\n", Line, token);
+	fprintf(stderr, "%s:%d: Expected '(' got '%s'\n",
+                SpecName, Line, token);
 	return -1;
     }
 
@@ -363,9 +378,9 @@
 	if (*token == ')')
 	    break;
 
-        if (!strcmp(token, "byte") || !strcmp(token, "word"))
+        if (!strcmp(token, "word"))
             odp->u.func.arg_types[i] = 'w';
-        else if (!strcmp(token, "s_byte") || !strcmp(token, "s_word"))
+        else if (!strcmp(token, "s_word"))
             odp->u.func.arg_types[i] = 's';
         else if (!strcmp(token, "long") || !strcmp(token, "segptr"))
             odp->u.func.arg_types[i] = 'l';
@@ -375,24 +390,32 @@
 	    odp->u.func.arg_types[i] = 't';
 	else if (!strcmp(token, "segstr"))
 	    odp->u.func.arg_types[i] = 'T';
+        else if (!strcmp(token, "double"))
+        {
+            odp->u.func.arg_types[i++] = 'l';
+            odp->u.func.arg_types[i] = 'l';
+        }
         else
         {
-            fprintf(stderr, "%d: Unknown variable type '%s'\n", Line, token);
+            fprintf(stderr, "%s:%d: Unknown variable type '%s'\n",
+                    SpecName, Line, token);
             return -1;
         }
         if (SpecType == SPEC_WIN32)
         {
-            if (strcmp(token, "long") && strcmp(token, "ptr"))
+            if (strcmp(token, "long") &&
+                strcmp(token, "ptr") &&
+                strcmp(token, "double"))
             {
-                fprintf( stderr, "%d: Type '%s' not supported for Win32\n",
-                         Line, token );
+                fprintf( stderr, "%s:%d: Type '%s' not supported for Win32\n",
+                         SpecName, Line, token );
                 return -1;
             }
         }
     }
-    if (*token != ')')
+    if ((*token != ')') || (i >= sizeof(odp->u.func.arg_types)))
     {
-        fprintf( stderr, "%d: Too many arguments\n", Line );
+        fprintf( stderr, "%s:%d: Too many arguments\n", SpecName, Line );
         return -1;
     }
     odp->u.func.arg_types[i] = '\0';
@@ -416,8 +439,8 @@
     int value = strtol(token, &endptr, 0);
     if (endptr == NULL || *endptr != '\0')
     {
-	fprintf(stderr, "%d: Expected number value, got '%s'\n", Line,
-		token);
+	fprintf(stderr, "%s:%d: Expected number value, got '%s'\n",
+                SpecName, Line, token);
 	return -1;
     }
 
@@ -440,8 +463,8 @@
     odp->u.ret.arg_size = strtol(token, &endptr, 0);
     if (endptr == NULL || *endptr != '\0')
     {
-	fprintf(stderr, "%d: Expected number value, got '%s'\n", Line,
-		token);
+	fprintf(stderr, "%s:%d: Expected number value, got '%s'\n",
+                SpecName, Line, token);
 	return -1;
     }
 
@@ -449,8 +472,8 @@
     odp->u.ret.ret_value = strtol(token, &endptr, 0);
     if (endptr == NULL || *endptr != '\0')
     {
-	fprintf(stderr, "%d: Expected number value, got '%s'\n", Line,
-		token);
+	fprintf(stderr, "%s:%d: Expected number value, got '%s'\n",
+                SpecName, Line, token);
 	return -1;
     }
 
@@ -472,6 +495,42 @@
 
 
 /*******************************************************************
+ *         ParseVarargs
+ *
+ * Parse an 'varargs' definition.
+ */
+static int ParseVarargs( ORDDEF *odp )
+{
+    char *token;
+
+    if (SpecType == SPEC_WIN16)
+    {
+        fprintf( stderr, "%s:%d: 'varargs' not supported for Win16\n",
+                 SpecName, Line );
+        return -1;
+    }
+
+    token = GetToken();
+    if (*token != '(')
+    {
+	fprintf(stderr, "%s:%d: Expected '(' got '%s'\n",
+                SpecName, Line, token);
+	return -1;
+    }
+    token = GetToken();
+    if (*token != ')')
+    {
+	fprintf(stderr, "%s:%d: Expected ')' got '%s'\n",
+                SpecName, Line, token);
+	return -1;
+    }
+
+    strcpy( odp->u.vargs.link_name, GetToken() );
+    return 0;
+}
+
+
+/*******************************************************************
  *         ParseExtern
  *
  * Parse an 'extern' definition.
@@ -480,7 +539,8 @@
 {
     if (SpecType == SPEC_WIN16)
     {
-        fprintf( stderr, "%d: 'extern' not supported for Win16\n", Line );
+        fprintf( stderr, "%s:%d: 'extern' not supported for Win16\n",
+                 SpecName, Line );
         return -1;
     }
     strcpy( odp->u.ext.link_name, GetToken() );
@@ -500,15 +560,16 @@
 
     if (ordinal >= MAX_ORDINALS)
     {
-	fprintf(stderr, "%d: Ordinal number too large\n", Line);
+	fprintf(stderr, "%s:%d: Ordinal number too large\n", SpecName, Line );
 	return -1;
     }
     if (ordinal > Limit) Limit = ordinal;
+    if (ordinal < Base) Base = ordinal;
 
     odp = &OrdinalDefinitions[ordinal];
     if (!(token = GetToken()))
     {
-	fprintf(stderr, "%d: Expected type after ordinal\n", Line);
+	fprintf(stderr, "%s:%d: Expected type after ordinal\n", SpecName, Line);
 	return -1;
     }
 
@@ -519,14 +580,14 @@
     if (odp->type >= TYPE_NBTYPES)
     {
         fprintf( stderr,
-                 "%d: Expected type after ordinal, found '%s' instead\n",
-                 Line, token );
+                 "%s:%d: Expected type after ordinal, found '%s' instead\n",
+                 SpecName, Line, token );
         return -1;
     }
 
     if (!(token = GetToken()))
     {
-        fprintf( stderr, "%d: Expected name after type\n", Line );
+        fprintf( stderr, "%s:%d: Expected name after type\n", SpecName, Line );
         return -1;
     }
     strcpy( odp->name, token );
@@ -550,6 +611,8 @@
 	return ParseReturn( odp );
     case TYPE_STUB:
 	return ParseStub( odp );
+    case TYPE_VARARGS:
+	return ParseVarargs( odp );
     case TYPE_EXTERN:
 	return ParseExtern( odp );
     default:
@@ -588,26 +651,18 @@
             else if (!strcmp(token, "win32" )) SpecType = SPEC_WIN32;
             else
             {
-                fprintf(stderr, "%d: Type must be 'win16' or 'win32'\n", Line);
+                fprintf(stderr, "%s:%d: Type must be 'win16' or 'win32'\n",
+                        SpecName, Line);
                 return -1;
             }
         }
-	else if (strcmp(token, "base") == 0)
-	{
-            token = GetToken();
-            if (!IsNumberString(token))
-            {
-		fprintf(stderr, "%d: Expected number after base\n", Line);
-		return -1;
-            }
-            Base = atoi(token);
-	}
 	else if (strcmp(token, "heap") == 0)
 	{
             token = GetToken();
             if (!IsNumberString(token))
             {
-		fprintf(stderr, "%d: Expected number after heap\n", Line);
+		fprintf(stderr, "%s:%d: Expected number after heap\n",
+                        SpecName, Line);
 		return -1;
             }
             DLLHeapSize = atoi(token);
@@ -624,7 +679,8 @@
 	else
 	{
 	    fprintf(stderr, 
-		    "%d: Expected name, id, length or ordinal\n", Line);
+		    "%s:%d: Expected name, id, length or ordinal\n",
+                    SpecName, Line);
 	    return -1;
 	}
     }
@@ -1009,8 +1065,7 @@
     fprintf( outfile, "\t.align 4\n" );
     fprintf( outfile, "Code_Start:\n\n" );
 
-    odp = OrdinalDefinitions;
-    for (i = 0; i <= Limit; i++, odp++)
+    for (i = Base, odp = OrdinalDefinitions + Base; i <= Limit; i++, odp++)
     {
         switch (odp->type)
         {
@@ -1091,6 +1146,7 @@
             fprintf( outfile, "\t.text\n" );
             break;
 
+        case TYPE_VARARGS:
         case TYPE_EXTERN:
             break;
 
@@ -1103,19 +1159,49 @@
 
     module_size = BuildModule32( outfile );
 
-    /* Output the DLL functions table */
+    /* Output the DLL functions table for no debugging code */
 
     fprintf( outfile, "\t.text\n" );
     fprintf( outfile, "\t.align 4\n" );
-    fprintf( outfile, "Functions:\n" );
-    odp = OrdinalDefinitions;
-    for (i = 0; i <= Limit; i++, odp++)
+    fprintf( outfile, "NoDbg_Functions:\n" );
+    for (i = Base, odp = OrdinalDefinitions + Base; i <= Limit; i++, odp++)
     {
         switch(odp->type)
         {
         case TYPE_INVALID:
             fprintf( outfile, "\t.long 0\n" );
             break;
+        case TYPE_VARARGS:
+            fprintf( outfile, "\t.long " PREFIX "%s\n",odp->u.vargs.link_name);
+            break;
+        case TYPE_EXTERN:
+            fprintf( outfile, "\t.long " PREFIX "%s\n", odp->u.ext.link_name );
+            break;
+        case TYPE_STDCALL:
+        case TYPE_CDECL:
+            fprintf( outfile, "\t.long " PREFIX "%s\n", odp->u.func.link_name);
+            break;
+        default:
+            fprintf( outfile, "\t.long %s_%d\n", DLLName, i );
+            break;
+        }
+    }
+
+    /* Output the DLL functions table for debugging code */
+
+    fprintf( outfile, "\t.text\n" );
+    fprintf( outfile, "\t.align 4\n" );
+    fprintf( outfile, "Functions:\n" );
+    for (i = Base, odp = OrdinalDefinitions + Base; i <= Limit; i++, odp++)
+    {
+        switch(odp->type)
+        {
+        case TYPE_INVALID:
+            fprintf( outfile, "\t.long 0\n" );
+            break;
+        case TYPE_VARARGS:
+            fprintf( outfile, "\t.long " PREFIX "%s\n",odp->u.vargs.link_name);
+            break;
         case TYPE_EXTERN:
             fprintf( outfile, "\t.long " PREFIX "%s\n", odp->u.ext.link_name );
             break;
@@ -1128,8 +1214,7 @@
     /* Output the DLL names table */
 
     fprintf( outfile, "FuncNames:\n" );
-    odp = OrdinalDefinitions;
-    for (i = 0; i <= Limit; i++, odp++)
+    for (i = Base, odp = OrdinalDefinitions + Base; i <= Limit; i++, odp++)
     {
         if (odp->type == TYPE_INVALID) fprintf( outfile, "\t.long 0\n" );
         else fprintf( outfile, "\t.long Name_%d\n", i );
@@ -1137,7 +1222,7 @@
 
     /* Output the DLL names */
 
-    for (i = 0, odp = OrdinalDefinitions; i <= Limit; i++, odp++)
+    for (i = Base, odp = OrdinalDefinitions + Base; i <= Limit; i++, odp++)
     {
         if (odp->type != TYPE_INVALID)
             fprintf( outfile, "Name_%d:\t.ascii \"%s\\0\"\n", i, odp->name );
@@ -1153,9 +1238,10 @@
     fprintf( outfile, "\t.long Module_Start\n" );     /* Module start */
     fprintf( outfile, "\t.long %d\n", module_size );  /* Module size */
     fprintf( outfile, "\t.long %d\n", Base );         /* Base */
-    fprintf( outfile, "\t.long %d\n", Limit+1 );      /* Size */
+    fprintf( outfile, "\t.long %d\n", Limit+1-Base ); /* Size */
     fprintf( outfile, "\t.long Code_Start\n" );       /* Code start */
     fprintf( outfile, "\t.long Functions\n" );        /* Functions */
+    fprintf( outfile, "\t.long NoDbg_Functions\n" );  /* Funcs without debug*/
     fprintf( outfile, "\t.long FuncNames\n" );        /* Function names */
 #ifdef USE_STABS
     fprintf( outfile, "\t.text\n");
@@ -1297,6 +1383,7 @@
  */
 static int BuildSpecFile( FILE *outfile, char *specname )
 {
+    SpecName = specname;
     SpecFp = fopen( specname, "r");
     if (SpecFp == NULL)
     {
@@ -1672,7 +1759,7 @@
 
     /* Setup %ebp to point to the previous stack frame (built by CallTo16) */
 
-    fprintf( outfile, "\taddl $24,%%ebp\n" );
+    fprintf( outfile, "\taddl $32,%%ebp\n" );
 
     /* Print the debug information before the call */
 
@@ -1695,6 +1782,14 @@
 
     if (debugging)
     {
+        if (reg_func)
+        {
+            /* Push again the address of the context struct in case */
+            /* it has been removed by an stdcall function */
+            fprintf( outfile, "\tleal -%d(%%ebp),%%esp\n",
+                     sizeof(CONTEXT) + 32 );
+            fprintf( outfile, "\tpushl %%esp\n" );
+        }
         fprintf( outfile, "\tpushl %%eax\n" );
         fprintf( outfile, "\tpushl $%d\n", reg_func ? 2 : (short_ret ? 1 : 0));
         fprintf( outfile, "\tcall " PREFIX "RELAY_DebugCallFrom16Ret\n" );
@@ -1702,6 +1797,13 @@
         fprintf( outfile, "\tpopl %%eax\n" );
     }
 
+#if 0
+    /* Restore the value of the saved 32-bit stack pointer */
+
+    fprintf( outfile, "\tleal -32(%%ebp),%%edx\n" );
+    fprintf( outfile, "movl %%edx," PREFIX "IF1632_Saved32_esp\n" );
+#endif
+
     /* Restore the 16-bit stack */
 
 #ifdef __svr4__
@@ -1785,26 +1887,28 @@
  *
  * Stack frame of the callback function:
  *  ...      ...
- * (ebp+20) arg2
- * (ebp+16) arg1
- * (ebp+12) func to call
- * (ebp+8)  code selector
+ * (ebp+16) arg2
+ * (ebp+12) arg1
+ * (ebp+8)  func to call
  * (ebp+4)  return address
  * (ebp)    previous ebp
  *
  * Prototypes for the CallTo16 functions:
- *   extern WORD CallTo16_word_xxx( FARPROC16 func, args... );
- *   extern LONG CallTo16_long_xxx( FARPROC16 func, args... );
- *   extern void CallTo16_regs_( const CONTEXT *context );
+ *   extern WINAPI WORD CallTo16_word_xxx( FARPROC16 func, args... );
+ *   extern WINAPI LONG CallTo16_long_xxx( FARPROC16 func, args... );
+ *   extern WINAPI LONG CallTo16_wndp_xxx( FARPROC16 func, args... );
+ *   extern WINAPI void CallTo16_regs_( const CONTEXT *context );
  */
 static void BuildCallTo16Func( FILE *outfile, char *profile )
 {
+    int window_proc = 0;
     int short_ret = 0;
     int reg_func = 0;
     char *args = profile + 5;
 
     if (!strncmp( "word_", profile, 5 )) short_ret = 1;
     else if (!strncmp( "regs_", profile, 5 )) reg_func = short_ret = 1;
+    else if (!strncmp( "wndp_", profile, 5 )) window_proc = 1;
     else if (strncmp( "long_", profile, 5 ))
     {
         fprintf( stderr, "Invalid function name '%s', ignored\n", profile );
@@ -1821,19 +1925,33 @@
     fprintf( outfile, "\t.globl " PREFIX "CallTo16_%s\n", profile );
     fprintf( outfile, PREFIX "CallTo16_%s:\n", profile );
 
-    /* Push code selector before return address to simulate a lcall */
-
-    fprintf( outfile, "\tpopl %%eax\n" );
-    fprintf( outfile, "\tpushl $0x%04x\n", WINE_CODE_SELECTOR );
-    fprintf( outfile, "\tpushl %%eax\n" );
-
     /* Entry code */
 
     fprintf( outfile, "\tpushl %%ebp\n" );
     fprintf( outfile, "\tmovl %%esp,%%ebp\n" );
 
+    /* Call the actual CallTo16 routine (simulate a lcall) */
+
+    fprintf( outfile, "\tpushw $0\n" );
+    fprintf( outfile, "\tpushw %%cs\n" );
+    fprintf( outfile, "\tcall do_callto16_%s\n", profile );
+
+    /* Exit code */
+
+    /* FIXME: this is a hack because of task.c */
+    if (!strcmp( profile, "word_" ))
+    {
+        fprintf( outfile, ".globl " PREFIX "CALLTO16_Restore\n" );
+        fprintf( outfile, PREFIX "CALLTO16_Restore:\n" );
+    }
+    fprintf( outfile, "\tpopl %%ebp\n" );
+    fprintf( outfile, "\tret $%d\n", strlen(args) + 1 );
+
+    /* Start of the actual CallTo16 routine */
+
     /* Save the 32-bit registers */
 
+    fprintf( outfile, "do_callto16_%s:\n", profile );
     fprintf( outfile, "\tpushl %%ebx\n" );
     fprintf( outfile, "\tpushl %%ecx\n" );
     fprintf( outfile, "\tpushl %%edx\n" );
@@ -1851,7 +1969,7 @@
     if (debugging)
     {
         /* Push the address of the first argument */
-        fprintf( outfile, "\tleal 12(%%ebx),%%eax\n" );
+        fprintf( outfile, "\tleal 8(%%ebx),%%eax\n" );
         fprintf( outfile, "\tpushl $%d\n", reg_func ? -1 : strlen(args) );
         fprintf( outfile, "\tpushl %%eax\n" );
         fprintf( outfile, "\tcall " PREFIX "RELAY_DebugCallTo16\n" );
@@ -1872,7 +1990,7 @@
     if (reg_func)
     {
         /* Get the registers. ebx is handled later on. */
-        fprintf( outfile, "\tmovl 12(%%ebx),%%ebx\n" );
+        fprintf( outfile, "\tmovl 8(%%ebx),%%ebx\n" );
         fprintf( outfile, "\tmovl %d(%%ebx),%%eax\n", CONTEXTOFFSET(SegEs) );
         fprintf( outfile, "\tmovw %%ax,%%es\n" );
         fprintf( outfile, "\tmovl %d(%%ebx),%%ebp\n", CONTEXTOFFSET(Ebp) );
@@ -1884,7 +2002,7 @@
     }
     else  /* not a register function */
     {
-        int pos = 16;  /* first argument position */
+        int pos = 12;  /* first argument position */
 
         /* Make %bp point to the previous stackframe (built by CallFrom16) */
         fprintf( outfile, "\tmovzwl %%sp,%%ebp\n" );
@@ -1931,15 +2049,17 @@
     {
         /* Push the called routine address */
 
-        fprintf( outfile, "\tpushl 12(%%ebx)\n" );
+        fprintf( outfile, "\tpushl 8(%%ebx)\n" );
 
-        /* Get previous ds from the 16-bit stack and */
-        /* set ax equal to ds for window procedures. */
-        fprintf( outfile, "\tmovw -10(%%ebp),%%ax\n" );
-#ifdef __svr4__
-        fprintf( outfile, "\tdata16\n");
-#endif
-        fprintf( outfile, "\tmovw %%ax,%%ds\n" );
+	if( window_proc )
+	{
+	    /* set ax to hInstance and initialize es and ds to ss */
+
+	    fprintf( outfile, "\tmovw -10(%%ebp),%%ax\n" );
+	    fprintf( outfile, "\tmovw %%ss, %%cx\n" );
+	    fprintf( outfile, "\tmovw %%cx, %%ds\n" );
+	    fprintf( outfile, "\tmovw %%cx, %%es\n" );
+	}
     }
 
     /* Jump to the called routine */
@@ -1962,9 +2082,9 @@
     /* Put return value into eax */
 
     fprintf( outfile, PREFIX "CALLTO16_Ret_long:\n" );
-    fprintf( outfile, "\tpushw %%dx\n" );
-    fprintf( outfile, "\tpushw %%ax\n" );
-    fprintf( outfile, "\tpopl %%eax\n" );
+    fprintf( outfile, "\tshll $16,%%edx\n" );
+    fprintf( outfile, "\tmovw %%ax,%%dx\n" );
+    fprintf( outfile, "\tmovl %%edx,%%eax\n" );
     fprintf( outfile, PREFIX "CALLTO16_Ret_word:\n" );
 
     /* Restore 32-bit segment registers */
@@ -1998,7 +2118,7 @@
 
     /* Return to caller */
 
-    fprintf( outfile, "\tpopl %%ebp\n" );
+/*    fprintf( outfile, "\tpopl %%ebp\n" );*/
     fprintf( outfile, "\tlret\n" );
 
     /* Declare the return address variables */
@@ -2170,19 +2290,6 @@
     fprintf( outfile, "\t.globl " PREFIX "CallFrom32_%s\n", profile );
     fprintf( outfile, PREFIX "CallFrom32_%s:\n", profile );
 
-#if 0
-    fprintf( outfile, "\tleal 8(%%esp),%%ebp\n" );
-    fprintf( outfile, "\tpushl $%d\n",  /* Nb args */
-             reg_func ? args | 0x80000000 : args);
-    fprintf( outfile, "\tpushl %%ebp\n" );
-    fprintf( outfile, "\tcall " PREFIX "RELAY_DebugCallFrom32\n" );
-    fprintf( outfile, "\tadd $8, %%esp\n" );
-    fprintf( outfile, "\tpopl  %%eax\n" );
-    fprintf( outfile, "\tpopl  %%eax\n" );
-    fprintf( outfile, "\tpopl  %%ebp\n" );
-    fprintf( outfile, "\tjmp %%eax\n" );
-#endif
-
     /* Entry code */
 
     fprintf( outfile, "\tleal 8(%%esp),%%ebp\n" );
@@ -2205,10 +2312,12 @@
         fprintf( outfile, "\tpushl %%eax\n" );
     }
 
+#if 0
     /* Set %es = %ds */
 
     fprintf( outfile, "\tmovw %%ds,%%ax\n" );
     fprintf( outfile, "\tmovw %%ax,%%es\n" );
+#endif
 
     /* Print the debugging info */
 
@@ -2311,7 +2420,8 @@
 
     fprintf( outfile, "\tmovl %%ebp,%%esp\n" );
     fprintf( outfile, "\tpopl %%ebp\n" );
-    fprintf( outfile, "\tret\n" );
+    if (args) fprintf( outfile, "\tret $%d\n", args );
+    else fprintf( outfile, "\tret\n" );
 }
 
 
diff --git a/win32/Makefile.in b/win32/Makefile.in
index 834ad62..b83223c 100644
--- a/win32/Makefile.in
+++ b/win32/Makefile.in
@@ -9,7 +9,6 @@
 	advapi.c \
 	code_page.c \
 	console.c \
-	cursoricon32.c \
 	environment.c \
 	error.c \
 	except.c \
diff --git a/win32/cursoricon32.c b/win32/cursoricon32.c
deleted file mode 100644
index b551663..0000000
--- a/win32/cursoricon32.c
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * Cursor and icon support
- *
- * Copyright 1995 Alexandre Julliard
- * Copyright 1996 Martin von Loewis
- */
-
-/*
- * Theory:
- *
- * Cursors and icons are stored in a global heap block, with the
- * following layout:
- *
- * CURSORICONINFO info;
- * BYTE[]         ANDbits;
- * BYTE[]         XORbits;
- *
- * The bits structures are in the format of a device-dependent bitmap.
- *
- * This layout is very sub-optimal, as the bitmap bits are stored in
- * the X client instead of in the server like other bitmaps; however,
- * some programs (notably Paint Brush) expect to be able to manipulate
- * the bits directly :-(
- */
-
-#include <string.h>
-#include <stdlib.h>
-#include "windows.h"
-#include "callback.h"
-#include "cursoricon.h"
-#include "sysmetrics.h"
-#include "win.h"
-#include "bitmap.h"
-#include "struct32.h"
-#include "heap.h"
-#include "task.h"
-#include "stddebug.h"
-#include "debug.h"
-#include "xmalloc.h"
-
-/* This dictionary could might eventually become a macro for better reuse */
-struct MAP_DWORD_DWORD
-{
-    DWORD key;
-    HANDLE32 value;
-};
-
-struct MAP_DWORD_DWORD *CURSORICON_map;
-int CURSORICON_count;
-
-BOOL32 CURSORICON_lookup(DWORD key,HANDLE32 *value)
-{
-	int i;
-	for(i=0;i<CURSORICON_count;i++)
-	{
-		if(key==CURSORICON_map[i].key)
-		{
-			*value=CURSORICON_map[i].value;
-			return TRUE;
-		}
-	}
-	return FALSE;
-}
-
-void CURSORICON_insert(DWORD key,DWORD value)
-{
-	if(!CURSORICON_count)
-	{
-		CURSORICON_count=1;
-		CURSORICON_map=malloc(sizeof(struct MAP_DWORD_DWORD));
-	}else{
-		CURSORICON_count++;
-		CURSORICON_map=realloc(CURSORICON_map,
-			sizeof(struct MAP_DWORD_DWORD)*CURSORICON_count);
-	}
-	CURSORICON_map[CURSORICON_count-1].key=key;
-	CURSORICON_map[CURSORICON_count-1].value=value;
-}
-
-/**********************************************************************
- *	    CURSORICON32_FindBestIcon
- *
- * Find the icon closest to the requested size and number of colors.
- */
-static ICONDIRENTRY32 *CURSORICON32_FindBestIcon( CURSORICONDIR32 *dir, 
-	int width, int height, int colors )
-{
-    int i, maxcolors, maxwidth, maxheight;
-    ICONDIRENTRY32 *entry, *bestEntry = NULL;
-
-    if (dir->idCount < 1)
-    {
-        fprintf( stderr, "Icon: empty directory!\n" );
-        return NULL;
-    }
-    if (dir->idCount == 1) return &dir->idEntries[0].icon;  /* No choice... */
-
-    /* First find the exact size with less colors */
-
-    maxcolors = 0;
-    for (i = 0, entry = &dir->idEntries[0].icon; i < dir->idCount; i++,entry++)
-        if ((entry->bWidth == width) && (entry->bHeight == height) &&
-            (entry->bColorCount <= colors) && (entry->bColorCount > maxcolors))
-        {
-            bestEntry = entry;
-            maxcolors = entry->bColorCount;
-        }
-    if (bestEntry) return bestEntry;
-
-    /* First find the exact size with more colors */
-
-    maxcolors = 255;
-    for (i = 0, entry = &dir->idEntries[0].icon; i < dir->idCount; i++,entry++)
-        if ((entry->bWidth == width) && (entry->bHeight == height) &&
-            (entry->bColorCount > colors) && (entry->bColorCount <= maxcolors))
-        {
-            bestEntry = entry;
-            maxcolors = entry->bColorCount;
-        }
-    if (bestEntry) return bestEntry;
-
-    /* Now find a smaller one with less colors */
-
-    maxcolors = maxwidth = maxheight = 0;
-    for (i = 0, entry = &dir->idEntries[0].icon; i < dir->idCount; i++,entry++)
-        if ((entry->bWidth <= width) && (entry->bHeight <= height) &&
-            (entry->bWidth >= maxwidth) && (entry->bHeight >= maxheight) &&
-            (entry->bColorCount <= colors) && (entry->bColorCount > maxcolors))
-        {
-            bestEntry = entry;
-            maxwidth  = entry->bWidth;
-            maxheight = entry->bHeight;
-            maxcolors = entry->bColorCount;
-        }
-    if (bestEntry) return bestEntry;
-
-    /* Now find a smaller one with more colors */
-
-    maxcolors = 255;
-    maxwidth = maxheight = 0;
-    for (i = 0, entry = &dir->idEntries[0].icon; i < dir->idCount; i++,entry++)
-        if ((entry->bWidth <= width) && (entry->bHeight <= height) &&
-            (entry->bWidth >= maxwidth) && (entry->bHeight >= maxheight) &&
-            (entry->bColorCount > colors) && (entry->bColorCount <= maxcolors))
-        {
-            bestEntry = entry;
-            maxwidth  = entry->bWidth;
-            maxheight = entry->bHeight;
-            maxcolors = entry->bColorCount;
-        }
-    if (bestEntry) return bestEntry;
-
-    /* Now find a larger one with less colors */
-
-    maxcolors = 0;
-    maxwidth = maxheight = 255;
-    for (i = 0, entry = &dir->idEntries[0].icon; i < dir->idCount; i++,entry++)
-        if ((entry->bWidth <= maxwidth) && (entry->bHeight <= maxheight) &&
-            (entry->bColorCount <= colors) && (entry->bColorCount > maxcolors))
-        {
-            bestEntry = entry;
-            maxwidth  = entry->bWidth;
-            maxheight = entry->bHeight;
-            maxcolors = entry->bColorCount;
-        }
-    if (bestEntry) return bestEntry;
-
-    /* Now find a larger one with more colors */
-
-    maxcolors = maxwidth = maxheight = 255;
-    for (i = 0, entry = &dir->idEntries[0].icon; i < dir->idCount; i++,entry++)
-        if ((entry->bWidth <= maxwidth) && (entry->bHeight <= maxheight) &&
-            (entry->bColorCount > colors) && (entry->bColorCount <= maxcolors))
-        {
-            bestEntry = entry;
-            maxwidth  = entry->bWidth;
-            maxheight = entry->bHeight;
-            maxcolors = entry->bColorCount;
-        }
-
-    return bestEntry;
-}
-
-
-/**********************************************************************
- *	    CURSORICON32_FindBestCursor
- *
- * Find the cursor closest to the requested size.
- */
-static CURSORDIRENTRY32 *CURSORICON32_FindBestCursor( CURSORICONDIR32 *dir,
-                                                  int width, int height )
-{
-    int i, maxwidth, maxheight;
-    CURSORDIRENTRY32 *entry, *bestEntry = NULL;
-
-    if (dir->idCount < 1)
-    {
-        fprintf( stderr, "Cursor: empty directory!\n" );
-        return NULL;
-    }
-    if (dir->idCount == 1) return &dir->idEntries[0].cursor; /* No choice... */
-
-    /* First find the largest one smaller than or equal to the requested size*/
-
-    maxwidth = maxheight = 0;
-    for(i = 0,entry = &dir->idEntries[0].cursor; i < dir->idCount; i++,entry++)
-        if ((entry->wWidth <= width) && (entry->wHeight <= height) &&
-            (entry->wWidth > maxwidth) && (entry->wHeight > maxheight))
-        {
-            bestEntry = entry;
-            maxwidth  = entry->wWidth;
-            maxheight = entry->wHeight;
-        }
-    if (bestEntry) return bestEntry;
-
-    /* Now find the smallest one larger than the requested size */
-
-    maxwidth = maxheight = 255;
-    for(i = 0,entry = &dir->idEntries[0].cursor; i < dir->idCount; i++,entry++)
-        if ((entry->wWidth < maxwidth) && (entry->wHeight < maxheight))
-        {
-            bestEntry = entry;
-            maxwidth  = entry->wWidth;
-            maxheight = entry->wHeight;
-        }
-
-    return bestEntry;
-}
-
-
-/**********************************************************************
- *	    CURSORICON32_LoadDirEntry
- *
- * Load the icon/cursor directory for a given resource name and find the
- * best matching entry.
- */
-static BOOL32 CURSORICON32_LoadDirEntry(HINSTANCE32 hInstance, LPCWSTR name,
-                                    int width, int height, int colors,
-                                    BOOL32 fCursor, CURSORICONDIRENTRY32 *dirEntry)
-{
-    HANDLE32 hRsrc;
-    HANDLE32 hMem;
-    CURSORICONDIR32 *dir;
-    CURSORICONDIRENTRY32 *entry = NULL;
-
-    if (!(hRsrc = FindResource32W( hInstance, name,
-                (LPCWSTR)(fCursor ? RT_GROUP_CURSOR : RT_GROUP_ICON) )))
-        return FALSE;
-    if (!(hMem = LoadResource32( hInstance, hRsrc ))) return FALSE;
-    if ((dir = (CURSORICONDIR32 *)LockResource32( hMem )))
-    {
-        if (fCursor)
-            entry = (CURSORICONDIRENTRY32 *)CURSORICON32_FindBestCursor( dir,
-                                                               width, height );
-        else
-            entry = (CURSORICONDIRENTRY32 *)CURSORICON32_FindBestIcon( dir,
-                                                       width, height, colors );
-        if (entry) *dirEntry = *entry;
-    }
-    FreeResource32( hMem );
-    return (entry != NULL);
-}
-
-
-/**********************************************************************
- *	    CURSORICON32_LoadHandler 
- *
- * Create a cursor or icon from a resource.
- */
-static HGLOBAL32 CURSORICON32_LoadHandler( HANDLE32 handle,
-                                           HINSTANCE32 hInstance,
-                                           BOOL32 fCursor )
-{
-    HBITMAP32 hAndBits, hXorBits;
-    HGLOBAL32 hRes;
-    HDC32 hdc;
-    int size, sizeAnd, sizeXor;
-    POINT16 hotspot = { 0 ,0 };
-    BITMAPOBJ *bmpXor, *bmpAnd;
-    BITMAPINFO *bmi, *pInfo;
-    CURSORICONINFO *info;
-    char *bits;
-
-	hRes=0;
-    if (fCursor)  /* If cursor, get the hotspot */
-    {
-        POINT16 *pt = (POINT16 *)LockResource32( handle );
-        hotspot = *pt;
-        bmi = (BITMAPINFO *)(pt + 1);
-    }
-    else bmi = (BITMAPINFO *)LockResource32( handle );
-
-    /* Create a copy of the bitmap header */
-
-    size = DIB_BitmapInfoSize( bmi, DIB_RGB_COLORS );
-    /* Make sure we have room for the monochrome bitmap later on */
-    size = MAX( size, sizeof(BITMAPINFOHEADER) + 2*sizeof(RGBQUAD) );
-    pInfo = (BITMAPINFO *)xmalloc( size );
-    memcpy( pInfo, bmi, size );
-
-    if (pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER))
-    {
-        if (pInfo->bmiHeader.biCompression != BI_RGB)
-        {
-            fprintf(stderr,"Unknown size for compressed icon bitmap.\n");
-            free( pInfo );
-            return 0;
-        }
-        pInfo->bmiHeader.biHeight /= 2;
-    }
-    else if (pInfo->bmiHeader.biSize == sizeof(BITMAPCOREHEADER))
-    {
-        BITMAPCOREHEADER *core = (BITMAPCOREHEADER *)pInfo;
-        core->bcHeight /= 2;
-    }
-    else
-    {
-        fprintf( stderr, "CURSORICON32_Load: Unknown bitmap length %ld!\n",
-                 pInfo->bmiHeader.biSize );
-        free( pInfo );
-        return 0;
-    }
-
-    /* Create the XOR bitmap */
-
-    if (!(hdc = GetDC32( 0 )))
-    {
-        free( pInfo );
-        return 0;
-    }
-
-    hXorBits = CreateDIBitmap32( hdc, &pInfo->bmiHeader, CBM_INIT,
-                                 (char*)bmi + size, pInfo, DIB_RGB_COLORS );
-
-    /* Fix the bitmap header to load the monochrome mask */
-
-    if (pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER))
-    {
-        BITMAPINFOHEADER *bih = &pInfo->bmiHeader;
-        RGBQUAD *rgb = pInfo->bmiColors;
-        bits = (char *)bmi + size +
-            DIB_GetDIBWidthBytes(bih->biWidth,bih->biBitCount)*bih->biHeight;
-        bih->biBitCount = 1;
-        bih->biClrUsed = bih->biClrImportant = 2;
-        rgb[0].rgbBlue = rgb[0].rgbGreen = rgb[0].rgbRed = 0x00;
-        rgb[1].rgbBlue = rgb[1].rgbGreen = rgb[1].rgbRed = 0xff;
-        rgb[0].rgbReserved = rgb[1].rgbReserved = 0;
-    }
-    else
-    {
-        BITMAPCOREHEADER *bch = (BITMAPCOREHEADER *)pInfo;
-        RGBTRIPLE *rgb = (RGBTRIPLE *)(bch + 1);
-        bits = (char *)bmi + size +
-            DIB_GetDIBWidthBytes(bch->bcWidth,bch->bcBitCount)*bch->bcHeight;
-        bch->bcBitCount = 1;
-        rgb[0].rgbtBlue = rgb[0].rgbtGreen = rgb[0].rgbtRed = 0x00;
-        rgb[1].rgbtBlue = rgb[1].rgbtGreen = rgb[1].rgbtRed = 0xff;
-    }
-
-    /* Create the AND bitmap */
-
-    hAndBits = CreateDIBitmap32( hdc, &pInfo->bmiHeader, CBM_INIT,
-                                 bits, pInfo, DIB_RGB_COLORS );
-    ReleaseDC32( 0, hdc );
-
-    /* Now create the CURSORICONINFO structure */
-
-    bmpXor = (BITMAPOBJ *) GDI_GetObjPtr( hXorBits, BITMAP_MAGIC );
-    bmpAnd = (BITMAPOBJ *) GDI_GetObjPtr( hAndBits, BITMAP_MAGIC );
-    sizeXor = bmpXor->bitmap.bmHeight * bmpXor->bitmap.bmWidthBytes;
-    sizeAnd = bmpAnd->bitmap.bmHeight * bmpAnd->bitmap.bmWidthBytes;
-
-    if (!(hRes = GlobalAlloc16( GMEM_MOVEABLE,
-                                sizeof(CURSORICONINFO) + sizeXor + sizeAnd)))
-    {
-        DeleteObject32( hXorBits );
-        DeleteObject32( hAndBits );
-        return 0;
-    }
-
-    /* Make it owned by the module */
-    if (hInstance) FarSetOwner( hRes, (WORD)(DWORD)GetExePtr(hInstance) );
-
-    info = (CURSORICONINFO *)GlobalLock16( hRes );
-    info->ptHotSpot.x   = hotspot.x;
-    info->ptHotSpot.y   = hotspot.y;
-    info->nWidth        = bmpXor->bitmap.bmWidth;
-    info->nHeight       = bmpXor->bitmap.bmHeight;
-    info->nWidthBytes   = bmpXor->bitmap.bmWidthBytes;
-    info->bPlanes       = bmpXor->bitmap.bmPlanes;
-    info->bBitsPerPixel = bmpXor->bitmap.bmBitsPixel;
-
-    /* Transfer the bitmap bits to the CURSORICONINFO structure */
-
-    GetBitmapBits32( hAndBits, sizeAnd, (char *)(info + 1) );
-    GetBitmapBits32( hXorBits, sizeXor, (char *)(info + 1) + sizeAnd );
-    DeleteObject32( hXorBits );
-    DeleteObject32( hAndBits );
-    GlobalUnlock16( hRes );
-    return hRes;
-}
-
-/**********************************************************************
- *	    CURSORICON32_Load
- *
- * Load a cursor or icon.
- */
-static HGLOBAL32 CURSORICON32_Load( HINSTANCE32 hInstance, LPCWSTR name,
-                                    int width, int height, int colors,
-                                    BOOL32 fCursor )
-{
-    HANDLE32 handle;
-    HANDLE32 hRet;
-    HANDLE32 hRsrc;
-    CURSORICONDIRENTRY32 dirEntry;
-
-	if(!hInstance)	/* OEM cursor/icon */
-	{
-		WORD resid;
-		if(HIWORD(name))
-		{
-			LPSTR ansi = HEAP_strdupWtoA(GetProcessHeap(),0,name);
-			if(ansi[0]=='#')	/*Check for '#xxx' name */
-			{
-                            resid = atoi(ansi+1);
-                            HeapFree( GetProcessHeap(), 0, ansi );
-			}
-                        else
-                        {
-                            HeapFree( GetProcessHeap(), 0, ansi );
-                            return 0;
-			}
-		}
-		else resid = LOWORD(name);
-		return OBM_LoadCursorIcon(resid, fCursor);
-	}
-
-    /* Find the best entry in the directory */
-
-    if (!CURSORICON32_LoadDirEntry( hInstance, name, width, height,
-                                  colors, fCursor, &dirEntry )) return 0;
-
-    /* Load the resource */
-
-    if (!(hRsrc = FindResource32W( hInstance,
-                      (LPWSTR) (DWORD) dirEntry.icon.wResId,
-                      (LPWSTR) (fCursor ? RT_CURSOR : RT_ICON )))) return 0;
-    if (!(handle = LoadResource32( hInstance, hRsrc ))) return 0;
-
-	/* Use the resource handle as key to detect multiple loading */
-	if(CURSORICON_lookup(handle,&hRet))
-		return hRet;
-
-    hRet = CURSORICON32_LoadHandler( handle, hInstance, fCursor );
-    /* Obsolete - FreeResource32(handle);*/
-	CURSORICON_insert(handle,hRet);
-    return hRet;
-}
-
-
-/***********************************************************************
- *           LoadCursorW		(USER32.361)
- */
-HCURSOR32 WINAPI LoadCursor32W(HINSTANCE32 hInstance,LPCWSTR name)
-{
-    return CURSORICON32_Load( hInstance, name,
-                            SYSMETRICS_CXCURSOR, SYSMETRICS_CYCURSOR, 1, TRUE);
-}
-
-/***********************************************************************
- *           LoadCursorA		(USER32.358)
- */
-HCURSOR32 WINAPI LoadCursor32A(HINSTANCE32 hInstance,LPCSTR name)
-{
-	HCURSOR32 res=0;
-	if(!HIWORD(name))
-		return LoadCursor32W(hInstance,(LPCWSTR)name);
-	else
-        {
-            LPWSTR uni = HEAP_strdupAtoW( GetProcessHeap(), 0, name );
-            res = LoadCursor32W(hInstance, uni);
-            HeapFree( GetProcessHeap(), 0, uni);
-	}
-	return res;
-}
-
-
-/***********************************************************************
- *           LoadIconW		(USER32.363)
- */
-HICON32 WINAPI LoadIcon32W(HINSTANCE32 hInstance,LPCWSTR name)
-{
-    return CURSORICON32_Load( hInstance, name,
-                            SYSMETRICS_CXICON, SYSMETRICS_CYICON,
-                            MIN( 16, 1 << screenDepth ), FALSE );
-}
-
-/***********************************************************************
- *           LoadIconA		(USER32.362)
- */
-HICON32 WINAPI LoadIcon32A(HINSTANCE32 hInstance,LPCSTR name)
-{
-	HICON32 res=0;
-	if(!HIWORD(name))
-		return LoadIcon32W(hInstance, (LPCWSTR)name);
-	else
-        {
-            LPWSTR uni = HEAP_strdupAtoW( GetProcessHeap(), 0, name );
-            res = LoadIcon32W( hInstance, uni );
-            HeapFree( GetProcessHeap(), 0, uni );
-	}
-	return res;
-}
-
diff --git a/win32/environment.c b/win32/environment.c
index cbe6259..1d676f8 100644
--- a/win32/environment.c
+++ b/win32/environment.c
@@ -24,7 +24,8 @@
     char *cp;
     PDB *pdb = (PDB *)GlobalLock16( GetCurrentPDB() );
 
-    lstrcpyn32A( buffer, MODULE_GetModuleName( GetExePtr(GetCurrentTask()) ),
+    /* FIXME: should use pCurrentProcess->env_db->cmd_line here */
+    lstrcpyn32A( buffer, MODULE_GetModuleName(GetCurrentTask()),
                  sizeof(buffer) - 1 );
     cp = buffer + strlen(buffer);
     if (pdb->cmdLine[0])
diff --git a/win32/file.c b/win32/file.c
index 79b75c6..23cfecc 100644
--- a/win32/file.c
+++ b/win32/file.c
@@ -239,7 +239,7 @@
  */
 VOID WINAPI SetFileApisToOEM(void)
 {
-    fprintf(stdnimp,"SetFileApisToOEM(),stub!\n");
+    /*fprintf(stdnimp,"SetFileApisToOEM(),stub!\n");*/
 }
 
 
@@ -248,7 +248,7 @@
  */
 VOID WINAPI SetFileApisToANSI(void)
 {
-    fprintf(stdnimp,"SetFileApisToANSI(),stub!\n");
+    /*fprintf(stdnimp,"SetFileApisToANSI(),stub!\n");*/
 }
 
 
diff --git a/win32/init.c b/win32/init.c
index 80a8191..ed836ed 100644
--- a/win32/init.c
+++ b/win32/init.c
@@ -19,35 +19,6 @@
 #include "xmalloc.h"
   
 /***********************************************************************
- *              GetModuleHandle         (KERNEL32.237)
- */
-HMODULE32 WINAPI WIN32_GetModuleHandleA(char *module)
-{
-    HMODULE32 hModule;
-
-    dprintf_win32(stddeb, "GetModuleHandleA: %s\n", module ? module : "NULL");
-/* Freecell uses the result of GetModuleHandleA(0) as the hInstance in
-all calls to e.g. CreateWindowEx. */
-    if (module == NULL) {
-	TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
-	hModule = pTask->hInstance;
-    } else
-	hModule = GetModuleHandle16(module);
-    dprintf_win32(stddeb, "GetModuleHandleA: returning %d\n", hModule );
-    return hModule;
-}
-
-HMODULE32 WINAPI WIN32_GetModuleHandleW(LPCWSTR module)
-{
-    HMODULE32 hModule;
-    LPSTR modulea = HEAP_strdupWtoA( GetProcessHeap(), 0, module );
-    hModule = WIN32_GetModuleHandleA( modulea );
-    HeapFree( GetProcessHeap(), 0, modulea );
-    return hModule;
-}
-
-
-/***********************************************************************
  *              GetStartupInfoA         (KERNEL32.273)
  */
 VOID WINAPI GetStartupInfo32A(LPSTARTUPINFO32A lpStartupInfo)
diff --git a/win32/k32obj.c b/win32/k32obj.c
index 944ecd7..9eb1b8c 100644
--- a/win32/k32obj.c
+++ b/win32/k32obj.c
@@ -90,6 +90,80 @@
 
 
 /***********************************************************************
+ *           K32OBJ_AddHead
+ *
+ * Add an object at the head of the list and increment its ref count.
+ */
+void K32OBJ_AddHead( K32OBJ_LIST *list, K32OBJ *ptr )
+{
+    K32OBJ_ENTRY *entry = HeapAlloc( SystemHeap, 0, sizeof(*entry) );
+    assert(entry);
+    K32OBJ_IncCount( ptr );
+    entry->obj = ptr;
+    if ((entry->next = list->head) != NULL) entry->next->prev = entry;
+    else list->tail = entry;
+    entry->prev = NULL;
+    list->head = entry;
+}
+
+
+/***********************************************************************
+ *           K32OBJ_AddTail
+ *
+ * Add an object at the tail of the list and increment its ref count.
+ */
+void K32OBJ_AddTail( K32OBJ_LIST *list, K32OBJ *ptr )
+{
+    K32OBJ_ENTRY *entry = HeapAlloc( SystemHeap, 0, sizeof(*entry) );
+    assert(entry);
+    K32OBJ_IncCount( ptr );
+    entry->obj = ptr;
+    if ((entry->prev = list->tail) != NULL) entry->prev->next = entry;
+    else list->head = entry;
+    entry->next = NULL;
+    list->tail = entry;
+}
+
+
+/***********************************************************************
+ *           K32OBJ_Remove
+ *
+ * Remove an object from the list and decrement its ref count.
+ */
+void K32OBJ_Remove( K32OBJ_LIST *list, K32OBJ *ptr )
+{
+    K32OBJ_ENTRY *entry = list->head;
+    while ((entry && (entry->obj != ptr))) entry = entry->next;
+    assert(entry);
+    if (entry->next) entry->next->prev = entry->prev;
+    else list->tail = entry->prev;
+    if (entry->prev) entry->prev->next = entry->next;
+    else list->head = entry->next;
+    HeapFree( SystemHeap, 0, entry );
+    K32OBJ_DecCount( ptr );
+}
+
+
+/***********************************************************************
+ *           K32OBJ_RemoveHead
+ *
+ * Remove the head of the list; its ref count is NOT decremented.
+ */
+K32OBJ *K32OBJ_RemoveHead( K32OBJ_LIST *list )
+{
+    K32OBJ *ptr;
+    K32OBJ_ENTRY *entry = list->head;
+    assert(entry);
+    assert(!entry->prev);
+    if ((list->head = entry->next) != NULL) entry->next->prev = NULL;
+    else list->tail = NULL;
+    ptr = entry->obj;
+    HeapFree( SystemHeap, 0, entry );
+    return ptr;
+}
+
+
+/***********************************************************************
  *           K32OBJ_AddName
  *
  * Add a name entry for an object. We don't check for duplicates here.
diff --git a/win32/newfns.c b/win32/newfns.c
index f8477fc..7954e72 100644
--- a/win32/newfns.c
+++ b/win32/newfns.c
@@ -14,6 +14,30 @@
 #include "debug.h"
 
 /****************************************************************************
+ *		UTRegister (KERNEL32.697)
+ */
+BOOL32 WINAPI UTRegister(HMODULE32 hModule,
+                      LPSTR lpsz16BITDLL,
+                      LPSTR lpszInitName,
+                      LPSTR lpszProcName,
+                      /*UT32PROC*/ LPVOID *ppfn32Thunk,
+                      /*FARPROC*/ LPVOID pfnUT32CallBack,
+                      LPVOID lpBuff)
+{
+    fprintf(stdnimp, "UTRegister Stub called!\n");
+    return TRUE;
+}
+
+/****************************************************************************
+ *		UTUnRegister (KERNEL32.698)
+ */
+BOOL32 WINAPI UTUnRegister(HMODULE32 hModule)
+{
+    fprintf(stdnimp, "UTUnRegister Stub called!\n");
+    return TRUE;
+}
+
+/****************************************************************************
  *		QueryPerformanceCounter (KERNEL32.415)
  */
 BOOL32 WINAPI QueryPerformanceCounter(LPLARGE_INTEGER counter)
@@ -23,14 +47,3 @@
 	counter->HighPart	= 0;
 	return TRUE;
 }
-
-/****************************************************************************
- *		DisableThreadLibraryCalls (KERNEL32.74)
- * Don't call DllEntryPoint for DLL_THREAD_{ATTACH,DETACH} if set.
- */
-BOOL32 WINAPI DisableThreadLibraryCalls(HMODULE32 hModule)
-{
-    fprintf(stdnimp, "DisableThreadLibraryCalls Stub called!\n");
-    return TRUE;
-}
-
diff --git a/win32/process.c b/win32/process.c
index ff4f2c5..6820269 100644
--- a/win32/process.c
+++ b/win32/process.c
@@ -364,56 +364,6 @@
 	return TRUE;
 }
 
-HINSTANCE32 WINAPI LoadLibraryEx32A(LPCSTR libname,HFILE32 hfile,DWORD flags)
-{
-    fprintf(stderr,"LoadLibraryEx32A(%s,%d,0x%08lx)\n",libname,hfile,flags);
-    return LoadLibrary32A(libname);
-}
-
-/***********************************************************************
- *           LoadLibraryA         (KERNEL32.365)
- * copied from LoadLibrary
- * This does not currently support built-in libraries
- */
-HINSTANCE32 WINAPI LoadLibrary32A(LPCSTR libname)
-{
-	HINSTANCE32 handle;
-	dprintf_module( stddeb, "LoadLibrary: (%08x) %s\n", (int)libname, libname);
-	handle = LoadModule16( libname, (LPVOID)-1 );
-	if (handle == (HINSTANCE32) -1)
-	{
-		char buffer[256];
-		strcpy( buffer, libname );
-		strcat( buffer, ".dll" );
-		handle = LoadModule16( buffer, (LPVOID)-1 );
-	}
-	/* Obtain module handle and call initialization function */
-#ifndef WINELIB
-	if (handle >= (HINSTANCE32)32) PE_InitializeDLLs( GetExePtr(handle), DLL_PROCESS_ATTACH, NULL);
-#endif
-	return handle;
-}
-
-/***********************************************************************
- *           LoadLibrary32W         (KERNEL32.368)
- */
-HINSTANCE32 WINAPI LoadLibrary32W(LPCWSTR libnameW)
-{
-    LPSTR libnameA = HEAP_strdupWtoA( GetProcessHeap(), 0, libnameW );
-    HINSTANCE32 ret = LoadLibrary32A( libnameA );
-    HeapFree( GetProcessHeap(), 0, libnameA );
-    return ret;
-}
-
-/***********************************************************************
- *           FreeLibrary
- */
-BOOL32 WINAPI FreeLibrary32(HINSTANCE32 hLibModule)
-{
-	fprintf(stderr,"FreeLibrary: empty stub\n");
-	return TRUE;
-}
-
 /**********************************************************************
  *          GetProcessAffinityMask
  */
@@ -462,7 +412,9 @@
 		appname,cmdline,processattributes,threadattributes,
 		inherithandles,creationflags,env,curdir,startupinfo,processinfo
 	);
-	return TRUE;
+	/* make from lcc uses system as fallback if CreateProcess returns
+	   FALSE, so return false */
+	return FALSE;
 }
 
 BOOL32 WINAPI ContinueDebugEvent(DWORD pid,DWORD tid,DWORD contstatus) {
diff --git a/windows/class.c b/windows/class.c
index e6422e9..ca349f0 100644
--- a/windows/class.c
+++ b/windows/class.c
@@ -210,14 +210,13 @@
  *           CLASS_FindClassByAtom
  *
  * Return a pointer to the class.
+ * hinstance has been normalized by the caller.
  */
-CLASS *CLASS_FindClassByAtom( ATOM atom, HINSTANCE16 hinstance )
+CLASS *CLASS_FindClassByAtom( ATOM atom, HINSTANCE32 hinstance )
 {
     CLASS * class;
 
-    if (hinstance != 0xffff) hinstance = GetExePtr(hinstance);
-
-      /* First search task-specific classes */
+    /* First search task-specific classes */
 
     for (class = firstClass; (class); class = class->next)
     {
@@ -308,8 +307,7 @@
 {
     ATOM atom;
     CLASS *classPtr;
-
-    HINSTANCE32 hInstance = (HINSTANCE32)GetExePtr( wc->hInstance );
+    HINSTANCE16 hInstance=GetExePtr(wc->hInstance);
 
     if (!(atom = GlobalAddAtom16( wc->lpszClassName ))) return 0;
     if (!(classPtr = CLASS_RegisterClass( atom, hInstance, wc->style,
@@ -347,11 +345,8 @@
     ATOM atom;
     CLASS *classPtr;
 
-    /* FIXME: this should not be necessary for Win32 */
-    HINSTANCE32 hInstance = (HINSTANCE32)GetExePtr( wc->hInstance );
-
     if (!(atom = GlobalAddAtom32A( wc->lpszClassName ))) return 0;
-    if (!(classPtr = CLASS_RegisterClass( atom, hInstance, wc->style,
+    if (!(classPtr = CLASS_RegisterClass( atom, wc->hInstance, wc->style,
                                           wc->cbClsExtra, wc->cbWndExtra,
                                           (WNDPROC16)wc->lpfnWndProc,
                                           WIN_PROC_32A )))
@@ -362,7 +357,7 @@
 
     dprintf_class( stddeb, "RegisterClass32A: atom=%04x wndproc=%08lx
 hinst=%04x bg=%04x style=%08x clsExt=%d winExt=%d class=%p name='%s'\n",
-                   atom, (DWORD)wc->lpfnWndProc, hInstance,
+                   atom, (DWORD)wc->lpfnWndProc, wc->hInstance,
                    wc->hbrBackground, wc->style, wc->cbClsExtra,
                    wc->cbWndExtra, classPtr,
                    HIWORD(wc->lpszClassName) ? wc->lpszClassName : "" );
@@ -384,11 +379,8 @@
     ATOM atom;
     CLASS *classPtr;
 
-    /* FIXME: this should not be necessary for Win32 */
-    HINSTANCE32 hInstance = (HINSTANCE32)GetExePtr( wc->hInstance );
-
     if (!(atom = GlobalAddAtom32W( wc->lpszClassName ))) return 0;
-    if (!(classPtr = CLASS_RegisterClass( atom, hInstance, wc->style,
+    if (!(classPtr = CLASS_RegisterClass( atom, wc->hInstance, wc->style,
                                           wc->cbClsExtra, wc->cbWndExtra,
                                           (WNDPROC16)wc->lpfnWndProc,
                                           WIN_PROC_32W )))
@@ -398,7 +390,7 @@
     }
 
     dprintf_class( stddeb, "RegisterClass32W: atom=%04x wndproc=%08lx hinst=%04x bg=%04x style=%08x clsExt=%d winExt=%d class=%p\n",
-                   atom, (DWORD)wc->lpfnWndProc, hInstance,
+                   atom, (DWORD)wc->lpfnWndProc, wc->hInstance,
                    wc->hbrBackground, wc->style, wc->cbClsExtra,
                    wc->cbWndExtra, classPtr );
     
@@ -418,8 +410,7 @@
 {
     ATOM atom;
     CLASS *classPtr;
-
-    HINSTANCE32 hInstance = (HINSTANCE32)GetExePtr( wc->hInstance );
+    HINSTANCE16 hInstance = GetExePtr( wc->hInstance );
 
     if (!(atom = GlobalAddAtom16( wc->lpszClassName ))) return 0;
     if (!(classPtr = CLASS_RegisterClass( atom, hInstance, wc->style,
@@ -454,11 +445,8 @@
     ATOM atom;
     CLASS *classPtr;
 
-    /* FIXME: this should not be necessary for Win32 */
-    HINSTANCE32 hInstance = (HINSTANCE32)GetExePtr( wc->hInstance );
-
     if (!(atom = GlobalAddAtom32A( wc->lpszClassName ))) return 0;
-    if (!(classPtr = CLASS_RegisterClass( atom, hInstance, wc->style,
+    if (!(classPtr = CLASS_RegisterClass( atom, wc->hInstance, wc->style,
                                           wc->cbClsExtra, wc->cbWndExtra,
                                           (WNDPROC16)wc->lpfnWndProc,
                                           WIN_PROC_32A )))
@@ -468,7 +456,7 @@
     }
 
     dprintf_class( stddeb, "RegisterClassEx32A: atom=%04x wndproc=%08lx hinst=%04x bg=%04x style=%08x clsExt=%d winExt=%d class=%p\n",
-                   atom, (DWORD)wc->lpfnWndProc, hInstance,
+                   atom, (DWORD)wc->lpfnWndProc, wc->hInstance,
                    wc->hbrBackground, wc->style, wc->cbClsExtra,
                    wc->cbWndExtra, classPtr );
     
@@ -489,11 +477,8 @@
     ATOM atom;
     CLASS *classPtr;
 
-    /* FIXME: this should not be necessary for Win32 */
-    HINSTANCE32 hInstance = (HINSTANCE32)GetExePtr( wc->hInstance );
-
     if (!(atom = GlobalAddAtom32W( wc->lpszClassName ))) return 0;
-    if (!(classPtr = CLASS_RegisterClass( atom, hInstance, wc->style,
+    if (!(classPtr = CLASS_RegisterClass( atom, wc->hInstance, wc->style,
                                           wc->cbClsExtra, wc->cbWndExtra,
                                           (WNDPROC16)wc->lpfnWndProc,
                                           WIN_PROC_32W )))
@@ -503,7 +488,7 @@
     }
 
     dprintf_class( stddeb, "RegisterClassEx32W: atom=%04x wndproc=%08lx hinst=%04x bg=%04x style=%08x clsExt=%d winExt=%d class=%p\n",
-                   atom, (DWORD)wc->lpfnWndProc, hInstance,
+                   atom, (DWORD)wc->lpfnWndProc, wc->hInstance,
                    wc->hbrBackground, wc->style, wc->cbClsExtra,
                    wc->cbWndExtra, classPtr );
     
@@ -540,7 +525,6 @@
     CLASS *classPtr;
     ATOM atom;
 
-    hInstance = GetExePtr( hInstance );  /* FIXME: not needed in Win32 */
     if (!(atom = GlobalFindAtom32A( className ))) return FALSE;
     if (!(classPtr = CLASS_FindClassByAtom( atom, hInstance )) ||
         (classPtr->hInstance != hInstance)) return FALSE;
@@ -556,7 +540,6 @@
     CLASS *classPtr;
     ATOM atom;
 
-    hInstance = GetExePtr( hInstance );  /* FIXME: not needed in Win32 */
     if (!(atom = GlobalFindAtom32W( className ))) return FALSE;
     if (!(classPtr = CLASS_FindClassByAtom( atom, hInstance )) ||
         (classPtr->hInstance != hInstance)) return FALSE;
@@ -910,7 +893,6 @@
     ATOM atom;
     CLASS *classPtr;
 
-    hInstance = GetExePtr( hInstance );  /* FIXME: not needed in Win32 */
     if (!(atom = GlobalFindAtom32A( name )) ||
         !(classPtr = CLASS_FindClassByAtom( atom, hInstance )) ||
 	(classPtr->hInstance && (hInstance != classPtr->hInstance)))
@@ -940,7 +922,6 @@
     ATOM atom;
     CLASS *classPtr;
 
-    hInstance = GetExePtr( hInstance );  /* FIXME: not needed in Win32 */
     if (!(atom = GlobalFindAtom32W( name )) ||
         !(classPtr = CLASS_FindClassByAtom( atom, hInstance )) ||
 	(classPtr->hInstance && (hInstance != classPtr->hInstance)))
@@ -1003,7 +984,6 @@
     ATOM atom;
     CLASS *classPtr;
 
-    hInstance = GetExePtr( hInstance );  /* FIXME: not needed in Win32 */
     if (!(atom = GlobalFindAtom32A( name )) ||
         !(classPtr = CLASS_FindClassByAtom( atom, hInstance )) ||
         (hInstance != classPtr->hInstance)) return FALSE;
@@ -1032,7 +1012,6 @@
     ATOM atom;
     CLASS *classPtr;
 
-    hInstance = GetExePtr( hInstance );  /* FIXME: not needed in Win32 */
     if (!(atom = GlobalFindAtom32W( name )) ||
         !(classPtr = CLASS_FindClassByAtom( atom, hInstance )) ||
         (hInstance != classPtr->hInstance)) return FALSE;
diff --git a/windows/defwnd.c b/windows/defwnd.c
index a5b5af4..8a2a7b3 100644
--- a/windows/defwnd.c
+++ b/windows/defwnd.c
@@ -418,7 +418,7 @@
         break;
     }
 
-    SPY_ExitMessage( SPY_RESULT_OK16, hwnd, msg, result );
+    SPY_ExitMessage( SPY_RESULT_DEFWND16, hwnd, msg, result );
     return result;
 }
 
@@ -479,7 +479,7 @@
         break;
     }
 
-    SPY_ExitMessage( SPY_RESULT_OK32, hwnd, msg, result );
+    SPY_ExitMessage( SPY_RESULT_DEFWND32, hwnd, msg, result );
     return result;
 }
 
diff --git a/windows/dialog.c b/windows/dialog.c
index 21ef5b0..31cd880 100644
--- a/windows/dialog.c
+++ b/windows/dialog.c
@@ -486,11 +486,14 @@
 
       /* Load menu */
 
-    if (template.menuName)
-    {
-        LPSTR str = SEGPTR_STRDUP( template.menuName );  /* FIXME: win32 */
-        hMenu = LoadMenu16( hInst, SEGPTR_GET(str) );
-        SEGPTR_FREE( str );
+    if (template.menuName) {
+	if (!HIWORD(hInst)) /* win32 modules always have hiword set */
+        {
+            LPSTR str = SEGPTR_STRDUP( template.menuName );
+	    hMenu = LoadMenu16( hInst, SEGPTR_GET(str) );
+            SEGPTR_FREE( str );
+	} else /* win32 modules always have hiword set */
+	    hMenu = LoadMenu32A( hInst, template.menuName );
     }
 
       /* Create custom font if needed */
@@ -566,7 +569,7 @@
                                  rect.left, rect.top, rect.right, rect.bottom,
                                  owner, hMenu, hInst, NULL );
     else
-        hwnd = CreateWindowEx16(template.exStyle, template.className,
+        hwnd = CreateWindowEx32A(template.exStyle, template.className,
                                 template.caption, template.style & ~WS_VISIBLE,
                                 rect.left, rect.top, rect.right, rect.bottom,
                                 owner, hMenu, hInst, NULL );
@@ -602,12 +605,17 @@
     {
        /* Send initialisation messages and set focus */
 
-       dlgInfo->hwndFocus = GetNextDlgTabItem32( hwnd, 0, FALSE );
-       if (SendMessage32A( hwnd, WM_INITDIALOG,
-                           (WPARAM32)dlgInfo->hwndFocus, param ))
-           SetFocus32( dlgInfo->hwndFocus );
-       if (template.style & WS_VISIBLE) ShowWindow32( hwnd, SW_SHOW );
-       return hwnd;
+	dlgInfo->hwndFocus = GetNextDlgTabItem32( hwnd, 0, FALSE );
+
+	if (SendMessage32A( hwnd, WM_INITDIALOG, (WPARAM32)dlgInfo->hwndFocus, param ))
+            SetFocus32( dlgInfo->hwndFocus );
+
+	if (template.style & WS_VISIBLE && !(wndPtr->dwStyle & WS_VISIBLE)) 
+	{
+	   ShowWindow32( hwnd, SW_SHOWNORMAL );	/* SW_SHOW doesn't always work */
+	   UpdateWindow32( hwnd );
+	}
+	return hwnd;
     }
 
     if( IsWindow32(hwnd) ) DestroyWindow32( hwnd );
diff --git a/windows/event.c b/windows/event.c
index 541bd46..c843ec9 100644
--- a/windows/event.c
+++ b/windows/event.c
@@ -290,6 +290,25 @@
    while( XCheckWindowEvent(display, pWnd->window, NoEventMask, &xe) );
 }
 
+
+/***********************************************************************
+ *           IsUserIdle		(USER.333)
+ *
+ * Check if we have pending X events.
+ */
+BOOL16 WINAPI IsUserIdle(void)
+{
+    struct timeval timeout = {0, 0};
+    fd_set check_set;
+
+    FD_ZERO(&check_set);
+    FD_SET(__event_x_connection, &check_set);
+    if( select(__event_x_connection + 1, &check_set, NULL, NULL, &timeout) > 0 )
+	return TRUE;
+    return FALSE;
+}
+
+
 /***********************************************************************
  *           EVENT_WaitNetEvent
  *
diff --git a/windows/hook.c b/windows/hook.c
index 7166bad..55e5785 100644
--- a/windows/hook.c
+++ b/windows/hook.c
@@ -88,16 +88,18 @@
 
 	case WH_CALLWNDPROC:
 	{
-	    INT32	(*localMap)(UINT16, WPARAM16, UINT32*, WPARAM32*, LPARAM*)
-			  = (bA) ? WINPROC_MapMsg16To32A : WINPROC_MapMsg16To32W;
 	    LPCWPSTRUCT16   lpcwp16 = PTR_SEG_TO_LIN(*plParam);
 	    LPCWPSTRUCT32   lpcwp32 = HeapAlloc( SystemHeap, 0, sizeof(*lpcwp32) );
 	    
 	    lpcwp32->hwnd = lpcwp16->hwnd;
 	    lpcwp32->lParam = lpcwp16->lParam;
 	    
-	    (*localMap)(lpcwp16->message, lpcwp16->wParam, 
-		       &lpcwp32->message, &lpcwp32->wParam, &lpcwp32->lParam );
+            if (bA) WINPROC_MapMsg16To32A( lpcwp16->message, lpcwp16->wParam, 
+                                           &lpcwp32->message, &lpcwp32->wParam,
+                                           &lpcwp32->lParam );
+            else WINPROC_MapMsg16To32W( lpcwp16->message, lpcwp16->wParam, 
+                                        &lpcwp32->message, &lpcwp32->wParam,
+                                        &lpcwp32->lParam );
 	    break;
 	}
 
@@ -264,11 +266,11 @@
 
 	case WH_CALLWNDPROC:
 	{
-            void          (*localUnMap)(UINT32, WPARAM32, LPARAM)
-                            = (bA) ? WINPROC_UnmapMsg16To32A : WINPROC_UnmapMsg16To32W;
             LPCWPSTRUCT32   lpcwp32 = (LPCWPSTRUCT32)lParam;
-
-            (*localUnMap)(lpcwp32->message, lpcwp32->wParam, lpcwp32->lParam );
+            if (bA) WINPROC_UnmapMsg16To32A( lpcwp32->message, lpcwp32->wParam,
+                                             lpcwp32->lParam );
+            else WINPROC_UnmapMsg16To32W( lpcwp32->message, lpcwp32->wParam,
+                                          lpcwp32->lParam );
 	    HeapFree( SystemHeap, 0, lpcwp32 );
             break;
 	}
@@ -392,16 +394,18 @@
 
       case WH_CALLWNDPROC:
       {
-          INT32       (*localMap)(UINT32, WPARAM32, UINT16*, WPARAM16*, LPARAM*)
-                          = (bA) ? WINPROC_MapMsg32ATo16 : WINPROC_MapMsg32WTo16;
           LPCWPSTRUCT32   lpcwp32 = (LPCWPSTRUCT32)*plParam;
 	  LPCWPSTRUCT16   lpcwp16 = SEGPTR_NEW( CWPSTRUCT16 );
 
           lpcwp16->hwnd = lpcwp32->hwnd;
           lpcwp16->lParam = lpcwp32->lParam;
 
-         (*localMap)(lpcwp32->message, lpcwp32->wParam,
-                    &lpcwp16->message, &lpcwp16->wParam, &lpcwp16->lParam );
+          if (bA) WINPROC_MapMsg32ATo16( lpcwp32->message, lpcwp32->wParam,
+                                         &lpcwp16->message, &lpcwp16->wParam,
+                                         &lpcwp16->lParam );
+          else WINPROC_MapMsg32WTo16( lpcwp32->message, lpcwp32->wParam,
+                                      &lpcwp16->message, &lpcwp16->wParam,
+                                      &lpcwp16->lParam );
 	  *plParam = (LPARAM)SEGPTR_GET( lpcwp16 );
           break;
       }
@@ -575,13 +579,14 @@
 
       case WH_CALLWNDPROC:
       {
-          void          (*localUnMap)(UINT32, WPARAM32, LPARAM, MSGPARAM16* )
-                          = (bA) ? WINPROC_UnmapMsg32ATo16 : WINPROC_UnmapMsg32WTo16;
           LPCWPSTRUCT16   lpcwp16 = (LPCWPSTRUCT16)PTR_SEG_TO_LIN(lParam);
 	  LPCWPSTRUCT32   lpcwp32 = (LPCWPSTRUCT32)lParamOrig;
 	  MSGPARAM16	  mp16 = { lpcwp16->wParam, lpcwp16->lParam, 0 };
 
-          (*localUnMap)(lpcwp32->message, lpcwp32->wParam, lpcwp32->lParam, &mp16 );
+          if (bA) WINPROC_UnmapMsg32ATo16( lpcwp32->message, lpcwp32->wParam,
+                                           lpcwp32->lParam, &mp16 );
+          else WINPROC_UnmapMsg32WTo16( lpcwp32->message, lpcwp32->wParam,
+                                        lpcwp32->lParam, &mp16 );
 	  SEGPTR_FREE( PTR_SEG_TO_LIN(lParam) );
           break;
       }
@@ -691,6 +696,7 @@
 	}
 	else
 	  lpcbtcwW->lpcs->lpszClass = (LPCWSTR)lpcbtcwA->lpcs->lpszClass;
+	*plParam = lpcbtcwW;
     }
     return;
 }
@@ -744,6 +750,7 @@
                                                    lpcbtcwW->lpcs->lpszClass );
 	else
 	  lpcbtcwA->lpcs->lpszClass = (LPSTR)lpcbtcwW->lpcs->lpszClass;
+	*plParam = lpcbtcwA;
     }
     return;
 }
@@ -840,11 +847,13 @@
     HQUEUE16 hQueue = 0;
 
     if ((id < WH_MINHOOK) || (id > WH_MAXHOOK)) return 0;
-    if (!(hInst = GetExePtr( hInst ))) return 0;
 
     dprintf_hook( stddeb, "Setting hook %d: %08x %04x %04x\n",
                   id, (UINT32)proc, hInst, hTask );
 
+    if (!hInst && (type!=HOOK_WIN16))
+    	hInst = GetModuleHandle32A(NULL);/*FIXME: correct? probably not */
+
     if (id == WH_JOURNALPLAYBACK) EnableHardwareInput(FALSE);
 
     if (hTask)  /* Task-specific hook */
@@ -1176,7 +1185,7 @@
 	return 0;
     }
 
-    handle = HOOK_SetHook( id, proc, HOOK_WIN16, hInst, hTask );
+    handle = HOOK_SetHook( id, proc, HOOK_WIN16, GetExePtr(hInst), hTask );
     return (handle) ? (FARPROC16)MAKELONG( handle, HOOK_MAGIC ) : NULL;
 }
 
@@ -1221,7 +1230,7 @@
 HHOOK WINAPI SetWindowsHookEx16( INT16 id, HOOKPROC16 proc, HINSTANCE16 hInst,
                                  HTASK16 hTask )
 {
-    HANDLE16 handle = HOOK_SetHook( id, proc, HOOK_WIN16, hInst, hTask );
+    HANDLE16 handle = HOOK_SetHook( id, proc, HOOK_WIN16, GetExePtr(hInst), hTask );
     return (handle) ? (HHOOK)MAKELONG( handle, HOOK_MAGIC ) : (HHOOK)NULL;
 }
 
diff --git a/windows/keyboard.c b/windows/keyboard.c
index be31d59..9421737 100644
--- a/windows/keyboard.c
+++ b/windows/keyboard.c
@@ -1184,9 +1184,21 @@
 /***********************************************************************
  *           GetKeyboardLayout			(USER32.249)
  */
-/*HKL*/ HANDLE32 WINAPI GetKeyboardLayout(DWORD dwLayout)
+HKL32 WINAPI GetKeyboardLayout(DWORD dwLayout)
 {
 	fprintf(stderr,"GetKeyboardLayout(%ld),STUB!\n",dwLayout);
-	return 0;
+	return (0xcafe<<16)|GetSystemDefaultLCID(); /* FIXME */
+}
+
+/***********************************************************************
+ *           GetKeyboardLayoutList		(USER32.250)
+ * FIXME
+ */
+INT32 WINAPI GetKeyboardLayoutList(INT32 nBuff,HKL32 *layouts)
+{
+	fprintf(stderr,"GetKeyboardLayoutList(%d,%p),STUB!\n",nBuff,layouts);
+	if (layouts)
+		layouts[0] = GetKeyboardLayout(0);
+	return 1;
 }
 
diff --git a/windows/mdi.c b/windows/mdi.c
index fe881b9..3fd4b95 100644
--- a/windows/mdi.c
+++ b/windows/mdi.c
@@ -32,7 +32,6 @@
 
 #define MDIF_NEEDUPDATE		0x0001
 
-
 static HBITMAP16 hBmpClose   = 0;
 static HBITMAP16 hBmpRestore = 0;
 
@@ -59,12 +58,12 @@
 
 static void MDI_PostUpdate(HWND16 hwnd, MDICLIENTINFO* ci, WORD recalc)
 {
- if( !(ci->mdiFlags & MDIF_NEEDUPDATE) )
-   {
-      ci->mdiFlags |= MDIF_NEEDUPDATE;
-      PostMessage16( hwnd, WM_MDICALCCHILDSCROLL, 0, 0);
-   }
- ci->sbRecalc = recalc;
+    if( !(ci->mdiFlags & MDIF_NEEDUPDATE) )
+    {
+	ci->mdiFlags |= MDIF_NEEDUPDATE;
+	PostMessage16( hwnd, WM_MDICALCCHILDSCROLL, 0, 0);
+    }
+    ci->sbRecalc = recalc;
 }
 
 /**********************************************************************
@@ -92,22 +91,22 @@
  */
 static BOOL32 MDI_MenuModifyItem(WND* clientWnd, HWND16 hWndChild )
 {
- char            buffer[128];
- MDICLIENTINFO  *clientInfo = (MDICLIENTINFO*)clientWnd->wExtra;
- WND            *wndPtr     = WIN_FindWndPtr(hWndChild);
- UINT32		 n          = sprintf(buffer, "%d ",
-                              wndPtr->wIDmenu - clientInfo->idFirstChild + 1);
- BOOL32		 bRet	    = 0;
+    char            buffer[128];
+    MDICLIENTINFO  *clientInfo = (MDICLIENTINFO*)clientWnd->wExtra;
+    WND            *wndPtr     = WIN_FindWndPtr(hWndChild);
+    UINT32	    n          = sprintf(buffer, "%d ",
+				 wndPtr->wIDmenu - clientInfo->idFirstChild + 1);
+    BOOL32	    bRet	    = 0;
 
- if( !clientInfo->hWindowMenu ) return 0;
+    if( !clientInfo->hWindowMenu ) return 0;
 
- if (wndPtr->text) lstrcpyn32A(buffer + n, wndPtr->text, sizeof(buffer) - n );
+    if (wndPtr->text) lstrcpyn32A(buffer + n, wndPtr->text, sizeof(buffer) - n );
 
- n    = GetMenuState32(clientInfo->hWindowMenu,wndPtr->wIDmenu ,MF_BYCOMMAND); 
- bRet = ModifyMenu32A(clientInfo->hWindowMenu , wndPtr->wIDmenu, 
+    n    = GetMenuState32(clientInfo->hWindowMenu,wndPtr->wIDmenu ,MF_BYCOMMAND); 
+    bRet = ModifyMenu32A(clientInfo->hWindowMenu , wndPtr->wIDmenu, 
                       MF_BYCOMMAND | MF_STRING, wndPtr->wIDmenu, buffer );
- CheckMenuItem32(clientInfo->hWindowMenu ,wndPtr->wIDmenu , n & MF_CHECKED);
- return bRet;
+    CheckMenuItem32(clientInfo->hWindowMenu ,wndPtr->wIDmenu , n & MF_CHECKED);
+    return bRet;
 }
 
 /**********************************************************************
@@ -115,29 +114,29 @@
  */
 static BOOL32 MDI_MenuDeleteItem(WND* clientWnd, HWND16 hWndChild )
 {
- char    	 buffer[128];
- MDICLIENTINFO  *clientInfo = (MDICLIENTINFO*)clientWnd->wExtra;
- WND    	*wndPtr     = WIN_FindWndPtr(hWndChild);
- UINT32		 index      = 0,id,n;
+    char    	 buffer[128];
+    MDICLIENTINFO *clientInfo = (MDICLIENTINFO*)clientWnd->wExtra;
+    WND    	*wndPtr     = WIN_FindWndPtr(hWndChild);
+    UINT32	 index      = 0,id,n;
 
- if( !clientInfo->nActiveChildren ||
-     !clientInfo->hWindowMenu ) return 0;
+    if( !clientInfo->nActiveChildren ||
+	!clientInfo->hWindowMenu ) return 0;
 
- id = wndPtr->wIDmenu;
- DeleteMenu32(clientInfo->hWindowMenu,id,MF_BYCOMMAND);
+    id = wndPtr->wIDmenu;
+    DeleteMenu32(clientInfo->hWindowMenu,id,MF_BYCOMMAND);
 
  /* walk the rest of MDI children to prevent gaps in the id 
   * sequence and in the menu child list */
 
- for( index = id+1; index <= clientInfo->nActiveChildren + 
-                             clientInfo->idFirstChild; index++ )
+    for( index = id+1; index <= clientInfo->nActiveChildren + 
+				clientInfo->idFirstChild; index++ )
     {
 	wndPtr = WIN_FindWndPtr(MDI_GetChildByID(clientWnd,index));
 	if( !wndPtr )
-	     {
+	{
 	      dprintf_mdi(stddeb,"MDIMenuDeleteItem: no window for id=%i\n",index);
 	      continue;
-    }
+	}
     
 	/* set correct id */
 	wndPtr->wIDmenu--;
@@ -150,40 +149,34 @@
 	ModifyMenu32A(clientInfo->hWindowMenu ,index ,MF_BYCOMMAND | MF_STRING,
                       index - 1 , buffer ); 
     }
- return 1;
+    return 1;
 }
 
 /**********************************************************************
  * 			MDI_GetWindow
  *
- * returns "activateable" child  or zero
+ * returns "activateable" child different from the current or zero
  */
-static HWND16 MDI_GetWindow(WND  *clientWnd, HWND16 hWnd, WORD wTo )
+static HWND16 MDI_GetWindow(WND *clientWnd, HWND16 hWnd, BOOL16 bNext, DWORD dwStyleMask )
 {
     MDICLIENTINFO *clientInfo = (MDICLIENTINFO*)clientWnd->wExtra;
-    WND *wndPtr, *pWnd, *pWndLast;
+    WND *wndPtr, *pWnd, *pWndLast = NULL;
     
+    dwStyleMask |= WS_DISABLED | WS_VISIBLE;
     if( !hWnd ) hWnd = clientInfo->hwndActiveChild;
 
     if( !(wndPtr = WIN_FindWndPtr(hWnd)) ) return 0;
 
-    pWnd = wndPtr;
-    pWndLast = NULL;
-    for (;;)
+    for ( pWnd = wndPtr->next; ; pWnd = pWnd->next )
     {
-        pWnd = pWnd->next;
-        if (!pWnd) pWnd = wndPtr->parent->child;
-        if (pWnd == wndPtr)  /* not found */
-        {
-            if (!wTo || !pWndLast) return 0;
-            break;
-        }
+        if (!pWnd ) pWnd = wndPtr->parent->child;
 
-        if ( !pWnd->owner && (pWnd->dwStyle & 
-			     (WS_VISIBLE | WS_DISABLED)) == WS_VISIBLE )
+        if ( pWnd == wndPtr ) break; /* went full circle */
+
+        if (!pWnd->owner && (pWnd->dwStyle & dwStyleMask) == WS_VISIBLE )
         {
-            pWndLast = pWnd;
-            if (!wTo) break;
+	    pWndLast = pWnd;
+	    if ( bNext ) break;
         }
     }
     return pWndLast ? pWndLast->hwndSelf : 0;
@@ -192,23 +185,23 @@
 /**********************************************************************
  *			MDI_CalcDefaultChildPos
  *
- *  It seems that default height is 2/3 of client rect
+ *  It seems that the default height is about 2/3 of the client rect
  */
 static void MDI_CalcDefaultChildPos( WND* w, WORD n, LPPOINT16 lpPos,
                                      INT32 delta)
 {
- RECT32 rect = w->rectClient;
- INT32  spacing = GetSystemMetrics32(SM_CYCAPTION) +
-                  GetSystemMetrics32(SM_CYFRAME) - 1; 
- INT32  nstagger;
+    INT32  nstagger;
+    RECT32 rect = w->rectClient;
+    INT32  spacing = GetSystemMetrics32(SM_CYCAPTION) +
+		     GetSystemMetrics32(SM_CYFRAME) - 1; 
 
- if( rect.bottom - rect.top - delta >= spacing ) 
-     rect.bottom -= delta;
+    if( rect.bottom - rect.top - delta >= spacing ) 
+	rect.bottom -= delta;
 
- nstagger = (rect.bottom - rect.top)/(3*spacing);
- lpPos[1].x = (rect.right - rect.left - nstagger*spacing);
- lpPos[1].y = (rect.bottom - rect.top - nstagger*spacing);
- lpPos[0].x = lpPos[0].y = spacing*(n%(nstagger+1));
+    nstagger = (rect.bottom - rect.top)/(3 * spacing);
+    lpPos[1].x = (rect.right - rect.left - nstagger * spacing);
+    lpPos[1].y = (rect.bottom - rect.top - nstagger * spacing);
+    lpPos[0].x = lpPos[0].y = spacing * (n%(nstagger+1));
 }
 
 /**********************************************************************
@@ -226,7 +219,7 @@
     ci = (MDICLIENTINFO *) w->wExtra;
 
     if (!fRefresh) 
-       {
+    {
 	HWND16 hwndFrame = GetParent16(hwnd);
 	HMENU32 oldFrameMenu = GetMenu32(hwndFrame);
         
@@ -234,7 +227,7 @@
 	    MDI_RestoreFrameMenu(w->parent, ci->hwndChildMaximized );
 
 	if( hmenuWindow && hmenuWindow!=ci->hWindowMenu )
-	  {
+	{
 	    /* delete menu items from ci->hWindowMenu 
 	     * and add them to hmenuWindow */
 
@@ -244,13 +237,13 @@
             AppendMenu32A( hmenuWindow, MF_SEPARATOR, 0, NULL);
 
 	    if( ci->nActiveChildren )
-	      {
+	    {
 	        INT32 j = i - ci->nActiveChildren + 1;
 		char buffer[100];
 		UINT32 id,state;
 
 		for( ; i >= j ; i-- )
-		   {
+		{
 		     id = GetMenuItemID32(ci->hWindowMenu,i );
 		     state = GetMenuState32(ci->hWindowMenu,i,MF_BYPOSITION); 
 
@@ -260,24 +253,24 @@
 		     InsertMenu32A(hmenuWindow, pos, MF_BYPOSITION | MF_STRING,
 					     id, buffer);
 		     CheckMenuItem32(hmenuWindow ,pos , MF_BYPOSITION | (state & MF_CHECKED));
-		   }
-	      }
+		}
+	    }
 
 	    /* remove separator */
 	    DeleteMenu32(ci->hWindowMenu, i, MF_BYPOSITION); 
 
 	    ci->hWindowMenu = hmenuWindow;
-	  } 
+	} 
 
 	if( hmenuFrame && hmenuFrame!=oldFrameMenu)
-	  {
+	{
 	    SetMenu32(hwndFrame, hmenuFrame);
 	    if( ci->hwndChildMaximized )
 	        MDI_AugmentFrameMenu(ci, w->parent, ci->hwndChildMaximized );
 	    return oldFrameMenu;
-	  }
+	}
 
-       }
+    }
     return 0;
 }
 
@@ -319,21 +312,21 @@
         cs->cy = pos[1].y;
 
     if( cs->x == CW_USEDEFAULT16 )
-      {
+    {
  	cs->x = pos[0].x;
 	cs->y = pos[0].y;
-      }
+    }
 
     /* restore current maximized child */
     if( style & WS_VISIBLE && ci->hwndChildMaximized )
-      {
+    {
 	if( style & WS_MAXIMIZE )
-	  SendMessage16(w->hwndSelf, WM_SETREDRAW, FALSE, 0L );
+	    SendMessage16(w->hwndSelf, WM_SETREDRAW, FALSE, 0L );
 	hwndMax = ci->hwndChildMaximized;
 	ShowWindow16( hwndMax, SW_SHOWNOACTIVATE );
 	if( style & WS_MAXIMIZE )
-	  SendMessage16(w->hwndSelf, WM_SETREDRAW, TRUE, 0L );
-      }
+	    SendMessage16(w->hwndSelf, WM_SETREDRAW, TRUE, 0L );
+    }
 
     /* this menu is needed to set a check mark in MDI_ChildActivate */
     AppendMenu32A(ci->hWindowMenu ,MF_STRING ,wIDmenu, lpstrDef );
@@ -342,11 +335,11 @@
 
     /* fix window style */
     if( !(w->dwStyle & MDIS_ALLCHILDSTYLES) )
-      {
+    {
         style &= (WS_CHILD | WS_CLIPSIBLINGS | WS_MINIMIZE | WS_MAXIMIZE |
                   WS_CLIPCHILDREN | WS_DISABLED | WS_VSCROLL | WS_HSCROLL );
         style |= (WS_VISIBLE | WS_OVERLAPPEDWINDOW);
-      }
+    }
 
     hwnd = CreateWindow16( (LPCSTR)PTR_SEG_TO_LIN(cs->szClass),
                            (LPCSTR)PTR_SEG_TO_LIN(cs->szTitle), style, 
@@ -364,20 +357,20 @@
 	if( wnd->dwStyle & WS_MINIMIZE && ci->hwndActiveChild )
 	    ShowWindow16( hwnd, SW_SHOWMINNOACTIVE );
 	else
-	  {
+	{
 	    SetWindowPos32( hwnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE );
 
 	    /* Set maximized state here in case hwnd didn't receive WM_SIZE
 	     * during CreateWindow - bad!
 	     */
 
-            if( wnd->dwStyle & WS_MAXIMIZE && !ci->hwndChildMaximized )
-              {
+            if((wnd->dwStyle & WS_MAXIMIZE) && !ci->hwndChildMaximized )
+            {
                 ci->hwndChildMaximized = wnd->hwndSelf;
                 MDI_AugmentFrameMenu( ci, w->parent, hwnd );
                 MDI_UpdateFrameText( w->parent, ci->self, MDI_REPAINTFRAME, NULL ); 
-	      }
-	  }
+	    }
+	}
         dprintf_mdi(stddeb, "MDICreateChild: created child - %04x\n",hwnd);
     }
     else
@@ -393,77 +386,73 @@
 
 /**********************************************************************
  *			MDI_ChildGetMinMaxInfo
+ *
+ * Note: The rule here is that client rect of the maximized MDI child 
+ *	 is equal to the client rect of the MDI client window.
  */
 static void MDI_ChildGetMinMaxInfo( WND* clientWnd, HWND16 hwnd,
                                     MINMAXINFO16* lpMinMax )
 {
- WND*	childWnd = WIN_FindWndPtr(hwnd);
- RECT32	rect 	 = clientWnd->rectClient;
+    WND*	childWnd = WIN_FindWndPtr(hwnd);
+    RECT32	rect 	 = clientWnd->rectClient;
 
- MapWindowPoints32(clientWnd->parent->hwndSelf, 
-                   ((MDICLIENTINFO*)clientWnd->wExtra)->self,
-                   (LPPOINT32)&rect, 2);
- AdjustWindowRectEx32( &rect, childWnd->dwStyle, 0, childWnd->dwExStyle );
+    MapWindowPoints32( clientWnd->parent->hwndSelf, 
+		     ((MDICLIENTINFO*)clientWnd->wExtra)->self, (LPPOINT32)&rect, 2);
+    AdjustWindowRectEx32( &rect, childWnd->dwStyle, 0, childWnd->dwExStyle );
 
- lpMinMax->ptMaxSize.x = rect.right -= rect.left;
- lpMinMax->ptMaxSize.y = rect.bottom -= rect.top;
+    lpMinMax->ptMaxSize.x = rect.right -= rect.left;
+    lpMinMax->ptMaxSize.y = rect.bottom -= rect.top;
 
- lpMinMax->ptMaxPosition.x = rect.left;
- lpMinMax->ptMaxPosition.y = rect.top; 
+    lpMinMax->ptMaxPosition.x = rect.left;
+    lpMinMax->ptMaxPosition.y = rect.top; 
 
- dprintf_mdi(stddeb,"\tChildMinMaxInfo: max rect (%i,%i - %i, %i)\n", 
+    dprintf_mdi(stddeb,"\tChildMinMaxInfo: max rect (%i,%i - %i, %i)\n", 
                         rect.left,rect.top,rect.right,rect.bottom);
-
 }
 
 /**********************************************************************
  *			MDI_SwitchActiveChild
  * 
- * Notes: SetWindowPos sends WM_CHILDACTIVATE to the child window that is
- *        being activated 
- *
- *	  wTo is basically lParam of WM_MDINEXT message or explicit 
- *        window handle
+ * Note: SetWindowPos sends WM_CHILDACTIVATE to the child window that is
+ *       being activated 
  */
 static void MDI_SwitchActiveChild( HWND16 clientHwnd, HWND16 childHwnd,
-                                   BOOL32 wTo )
+                                   BOOL32 bNextWindow )
 {
     WND		  *w	     = WIN_FindWndPtr(clientHwnd);
     HWND16	   hwndTo    = 0;
     HWND16	   hwndPrev  = 0;
     MDICLIENTINFO *ci;
 
-    hwndTo = MDI_GetWindow(w,childHwnd,(WORD)wTo);
+    hwndTo = MDI_GetWindow(w, childHwnd, bNextWindow, 0);
  
     ci = (MDICLIENTINFO *) w->wExtra;
 
     dprintf_mdi(stddeb, "MDI_SwitchActiveChild: from %04x, to %04x\n",childHwnd,hwndTo);
 
-    if ( !hwndTo ) return; 
+    if ( !hwndTo ) return; /* no window to switch to */
 
     hwndPrev = ci->hwndActiveChild;
 
     if ( hwndTo != hwndPrev )
+    {
+	BOOL32 bOptimize = 0;
+
+	if( ci->hwndChildMaximized )
 	{
-	  BOOL32 bOptimize = 0;
-
-	  if( ci->hwndChildMaximized )
-	    {
-	      bOptimize = 1; 
-	      w->dwStyle &= ~WS_VISIBLE;
-	    }
-
-	  SetWindowPos32( hwndTo, HWND_TOP, 0, 0, 0, 0, 
-			SWP_NOMOVE | SWP_NOSIZE );
-	  if( !wTo && hwndPrev )
-	    {
-	       SetWindowPos32( hwndPrev, HWND_BOTTOM, 0, 0, 0, 0, 
-		  	     SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
-	    }
-
-	  if( bOptimize )
-	       ShowWindow16( clientHwnd, SW_SHOW );
+	    bOptimize = 1; 
+	    w->dwStyle &= ~WS_VISIBLE;
 	}
+
+	SetWindowPos32( hwndTo, HWND_TOP, 0, 0, 0, 0, 
+			SWP_NOMOVE | SWP_NOSIZE );
+
+	if( bNextWindow && hwndPrev )
+	    SetWindowPos32( hwndPrev, HWND_BOTTOM, 0, 0, 0, 0, 
+		  	    SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );
+	if( bOptimize )
+	    ShowWindow16( clientHwnd, SW_SHOW );
+    }
 }
 
 	    
@@ -478,21 +467,21 @@
     if( childPtr )
     {
         if( child == ci->hwndActiveChild )
-          {
-	    MDI_SwitchActiveChild(parent,child,0);
+        {
+	    MDI_SwitchActiveChild(parent, child, TRUE);
 
 	    if( child == ci->hwndActiveChild )
-	      {
+	    {
 		ShowWindow16( child, SW_HIDE);
 		if( child == ci->hwndChildMaximized )
-		  {
+		{
 		    MDI_RestoreFrameMenu(w_parent->parent, child);
 		    ci->hwndChildMaximized = 0;
 		    MDI_UpdateFrameText(w_parent->parent,parent,TRUE,NULL);
-		  }
+		}
 
-                MDI_ChildActivate(w_parent,0);
-	      }
+                MDI_ChildActivate(w_parent, 0);
+	    }
 	    MDI_MenuDeleteItem(w_parent, child);
 	}
 	
@@ -501,10 +490,10 @@
         dprintf_mdi(stddeb,"MDIDestroyChild: child destroyed - %04x\n",child);
 
         if (flagDestroy)
-	   {
+	{
 	    MDI_PostUpdate(GetParent16(child), ci, SB_BOTH+1);
             DestroyWindow32(child);
-	   }
+	}
     }
 
     return 0;
@@ -552,16 +541,16 @@
        	if( clientInfo->hWindowMenu )
        	        CheckMenuItem32( clientInfo->hWindowMenu,
                                  wndPrev->wIDmenu, 0);
-      }
+    }
 
     /* set appearance */
     if( clientInfo->hwndChildMaximized )
       if( clientInfo->hwndChildMaximized != hWndChild )
         if( hWndChild )
-	        {
+	{
 		  clientInfo->hwndActiveChild = hWndChild;
 		  ShowWindow16( hWndChild, SW_SHOWMAXIMIZED);
-	        }
+	}
 	else
 		ShowWindow16( clientInfo->hwndActiveChild, 
 			    SW_SHOWNORMAL );
@@ -570,11 +559,11 @@
 
     /* check if we have any children left */
     if( !hWndChild )
-	{
-	    if( isActiveFrameWnd )
-		SetFocus32( clientInfo->self );
-	    return 0;
-	}
+    {
+	if( isActiveFrameWnd )
+	    SetFocus32( clientInfo->self );
+	return 0;
+    }
 	
     /* check menu item */
     if( clientInfo->hWindowMenu )
@@ -585,7 +574,7 @@
     SetWindowPos32( hWndChild, 0,0,0,0,0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
 
     if( isActiveFrameWnd )
-	  {
+    {
 	    SendMessage16( hWndChild, WM_NCACTIVATE, TRUE, 0L);
 	    if( GetFocus32() == clientInfo->self )
 		SendMessage16( clientInfo->self, WM_SETFOCUS, 
@@ -767,39 +756,42 @@
 static BOOL32 MDI_AugmentFrameMenu( MDICLIENTINFO* ci, WND *frame,
                                     HWND16 hChild )
 {
- WND*		child = WIN_FindWndPtr(hChild);
- HMENU16  	hSysPopup = 0;
+    WND*	child = WIN_FindWndPtr(hChild);
+    HMENU16  	hSysPopup = 0;
 
- dprintf_mdi(stddeb,"MDI_AugmentFrameMenu: frame %p,child %04x\n",frame,hChild);
+    dprintf_mdi(stddeb,"MDI_AugmentFrameMenu: frame %p,child %04x\n",frame,hChild);
 
- if( !frame->wIDmenu || !child->hSysMenu ) return 0; 
+    if( !frame->wIDmenu || !child->hSysMenu ) return 0; 
 
- /* create a copy of sysmenu popup and insert it into frame menu bar */
+    /* create a copy of sysmenu popup and insert it into frame menu bar */
 
- if (!(hSysPopup = LoadMenuIndirect32A(SYSRES_GetResPtr(SYSRES_MENU_SYSMENU))))
-     return 0;
+    if (!(hSysPopup = LoadMenuIndirect32A(SYSRES_GetResPtr(SYSRES_MENU_SYSMENU))))
+	return 0;
  
- dprintf_mdi(stddeb,"\t\tgot popup %04x\n in sysmenu %04x",hSysPopup,child->hSysMenu);
+    dprintf_mdi(stddeb,"\t\tgot popup %04x\n in sysmenu %04x",hSysPopup,child->hSysMenu);
  
- if( !InsertMenu32A(frame->wIDmenu,0,MF_BYPOSITION | MF_BITMAP | MF_POPUP,
+    if( !InsertMenu32A(frame->wIDmenu,0,MF_BYPOSITION | MF_BITMAP | MF_POPUP,
                     hSysPopup, (LPSTR)(DWORD)hBmpClose ))
-   {  DestroyMenu32(hSysPopup); return 0; }
+    {  
+	DestroyMenu32(hSysPopup); 
+	return 0; 
+    }
 
- if( !AppendMenu32A(frame->wIDmenu,MF_HELP | MF_BITMAP,
+    if( !AppendMenu32A(frame->wIDmenu,MF_HELP | MF_BITMAP,
                     SC_RESTORE, (LPSTR)(DWORD)hBmpRestore ))
-   {
-      RemoveMenu32(frame->wIDmenu,0,MF_BYPOSITION);
-      return 0;
-   }
+    {
+	RemoveMenu32(frame->wIDmenu,0,MF_BYPOSITION);
+	return 0;
+    }
 
- EnableMenuItem32(hSysPopup, SC_SIZE, MF_BYCOMMAND | MF_GRAYED);
- EnableMenuItem32(hSysPopup, SC_MOVE, MF_BYCOMMAND | MF_GRAYED);
- EnableMenuItem32(hSysPopup, SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED);
+    EnableMenuItem32(hSysPopup, SC_SIZE, MF_BYCOMMAND | MF_GRAYED);
+    EnableMenuItem32(hSysPopup, SC_MOVE, MF_BYCOMMAND | MF_GRAYED);
+    EnableMenuItem32(hSysPopup, SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED);
 
- /* redraw menu */
- DrawMenuBar32(frame->hwndSelf);
+    /* redraw menu */
+    DrawMenuBar32(frame->hwndSelf);
 
- return 1;
+    return 1;
 }
 
 /**********************************************************************
@@ -807,20 +799,19 @@
  */
 static BOOL32 MDI_RestoreFrameMenu( WND *frameWnd, HWND16 hChild )
 {
- INT32 nItems = GetMenuItemCount32(frameWnd->wIDmenu) - 1;
+    INT32 nItems = GetMenuItemCount32(frameWnd->wIDmenu) - 1;
 
- dprintf_mdi(stddeb,"MDI_RestoreFrameMenu: for child %04x\n",hChild);
+    dprintf_mdi(stddeb,"MDI_RestoreFrameMenu: for child %04x\n",hChild);
 
- if( GetMenuItemID32(frameWnd->wIDmenu,nItems) != SC_RESTORE )
-     return 0; 
+    if( GetMenuItemID32(frameWnd->wIDmenu,nItems) != SC_RESTORE )
+	return 0; 
 
+    RemoveMenu32(frameWnd->wIDmenu,0,MF_BYPOSITION);
+    DeleteMenu32(frameWnd->wIDmenu,nItems-1,MF_BYPOSITION);
 
- RemoveMenu32(frameWnd->wIDmenu,0,MF_BYPOSITION);
- DeleteMenu32(frameWnd->wIDmenu,nItems-1,MF_BYPOSITION);
+    DrawMenuBar32(frameWnd->hwndSelf);
 
- DrawMenuBar32(frameWnd->hwndSelf);
-
- return 1;
+    return 1;
 }
 
 /**********************************************************************
@@ -833,65 +824,63 @@
 static void MDI_UpdateFrameText( WND *frameWnd, HWND16 hClient,
                                  BOOL32 repaint, LPCSTR lpTitle )
 {
- char   lpBuffer[MDI_MAXTITLELENGTH+1];
- WND* 	clientWnd = WIN_FindWndPtr(hClient);
+    char   lpBuffer[MDI_MAXTITLELENGTH+1];
+    WND*   clientWnd = WIN_FindWndPtr(hClient);
+    MDICLIENTINFO *ci = (MDICLIENTINFO *) clientWnd->wExtra;
 
- MDICLIENTINFO *ci = (MDICLIENTINFO *) clientWnd->wExtra;
+    dprintf_mdi(stddeb, "MDI: repaint %i, frameText %s\n", repaint, (lpTitle)?lpTitle:"NULL");
 
- dprintf_mdi(stddeb, "MDI: repaint %i, frameText %s\n", repaint, (lpTitle)?lpTitle:"NULL");
+    /* store new "default" title if lpTitle is not NULL */
+    if (lpTitle) 
+    {
+	if (ci->frameTitle) HeapFree( SystemHeap, 0, ci->frameTitle );
+	ci->frameTitle = HEAP_strdupA( SystemHeap, 0, lpTitle );
+    }
 
- /* store new "default" title if lpTitle is not NULL */
- if (lpTitle) 
- {
-     if (ci->frameTitle) HeapFree( SystemHeap, 0, ci->frameTitle );
-     ci->frameTitle = HEAP_strdupA( SystemHeap, 0, lpTitle );
- }
+    if (ci->frameTitle)
+    {
+	WND* childWnd = WIN_FindWndPtr( ci->hwndChildMaximized );     
 
- if (ci->frameTitle)
-   {
-     WND* childWnd = WIN_FindWndPtr( ci->hwndChildMaximized );     
+	if( childWnd && childWnd->text )
+	{
+	    /* combine frame title and child title if possible */
 
-     if( childWnd && childWnd->text )
-       {
-	 /* combine frame title and child title if possible */
+	    LPCSTR lpBracket  = " - [";
+	    int	i_frame_text_length = strlen(ci->frameTitle);
+	    int	i_child_text_length = strlen(childWnd->text);
 
-	 LPCSTR lpBracket  = " - [";
-	 int	i_frame_text_length = strlen(ci->frameTitle);
-	 int    i_child_text_length = strlen(childWnd->text);
+	    lstrcpyn32A( lpBuffer, ci->frameTitle, MDI_MAXTITLELENGTH);
 
-	 lstrcpyn32A( lpBuffer, ci->frameTitle, MDI_MAXTITLELENGTH);
+	    if( i_frame_text_length + 6 < MDI_MAXTITLELENGTH )
+            {
+		strcat( lpBuffer, lpBracket );
 
-	 if( i_frame_text_length + 6 < MDI_MAXTITLELENGTH )
-         {
-	     strcat( lpBuffer, lpBracket );
-
-	     if( i_frame_text_length + i_child_text_length + 6 < MDI_MAXTITLELENGTH )
-             {
-                 strcat( lpBuffer, childWnd->text );
-                 strcat( lpBuffer, "]" );
-             }
-	     else
-             {
-                 lstrcpyn32A( lpBuffer + i_frame_text_length + 4, 
-                              childWnd->text,
-                              MDI_MAXTITLELENGTH - i_frame_text_length - 5 );
-                 strcat( lpBuffer, "]" );
+		if( i_frame_text_length + i_child_text_length + 6 < MDI_MAXTITLELENGTH )
+		{
+		    strcat( lpBuffer, childWnd->text );
+		    strcat( lpBuffer, "]" );
 		}
-	   }
-       }
-     else
-       {
-         strncpy(lpBuffer, ci->frameTitle, MDI_MAXTITLELENGTH );
-	 lpBuffer[MDI_MAXTITLELENGTH]='\0';
-       }
-   }
- else
-   lpBuffer[0] = '\0';
+		else
+		{
+		    lstrcpyn32A( lpBuffer + i_frame_text_length + 4, 
+				 childWnd->text, MDI_MAXTITLELENGTH - i_frame_text_length - 5 );
+		    strcat( lpBuffer, "]" );
+		}
+	    }
+	}
+	else
+	{
+            strncpy(lpBuffer, ci->frameTitle, MDI_MAXTITLELENGTH );
+	    lpBuffer[MDI_MAXTITLELENGTH]='\0';
+	}
+    }
+    else
+	lpBuffer[0] = '\0';
 
- DEFWND_SetText( frameWnd, lpBuffer );
- if( repaint == MDI_REPAINTFRAME)
-     SetWindowPos32(frameWnd->hwndSelf, 0,0,0,0,0, SWP_FRAMECHANGED |
-                    SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER );
+    DEFWND_SetText( frameWnd, lpBuffer );
+    if( repaint == MDI_REPAINTFRAME)
+	SetWindowPos32( frameWnd->hwndSelf, 0,0,0,0,0, SWP_FRAMECHANGED |
+			SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER );
 }
 
 
@@ -901,7 +890,7 @@
 /**********************************************************************
  *					MDIClientWndProc
  *
- * This function is the handler for all MDI requests.
+ * This function handles all MDI requests.
  */
 LRESULT WINAPI MDIClientWndProc(HWND16 hwnd, UINT16 message, WPARAM16 wParam,
                                 LPARAM lParam)
@@ -960,13 +949,15 @@
 	NC_HandleNCCalcSize( w, &rect );
 	w->rectClient = rect;
 
-	dprintf_mdi(stddeb,"MDI: Client created - hwnd = %04x, idFirst = %u\n",hwnd,ci->idFirstChild);
+	dprintf_mdi(stddeb,"MDI: Client created - hwnd = %04x, idFirst = %u\n",
+			   hwnd, ci->idFirstChild );
 
 	return 0;
       
       case WM_DESTROY:
 	if( ci->hwndChildMaximized ) MDI_RestoreFrameMenu(w, frameWnd->hwndSelf);
-	if((nItems = GetMenuItemCount32(ci->hWindowMenu)) > 0) {
+	if((nItems = GetMenuItemCount32(ci->hWindowMenu)) > 0) 
+	{
     	    ci->idFirstChild = nItems - 1;
 	    ci->nActiveChildren++; 		/* to delete a separator */
 	    while( ci->nActiveChildren-- )
@@ -1001,15 +992,15 @@
 	ci->mdiFlags |= MDIF_NEEDUPDATE;
 	MDIIconArrange(hwnd);
 	ci->sbRecalc = SB_BOTH+1;
-	SendMessage16(hwnd,WM_MDICALCCHILDSCROLL,0,0L);
+	SendMessage16(hwnd, WM_MDICALCCHILDSCROLL, 0, 0L);
 	return 0;
 	
       case WM_MDIMAXIMIZE:
 	ShowWindow16((HWND16)wParam, SW_MAXIMIZE);
 	return 0;
 
-      case WM_MDINEXT:
-	MDI_SwitchActiveChild(hwnd, (HWND16)wParam, (lParam)?1:0);
+      case WM_MDINEXT: /* lParam != 0 means previous window */
+	MDI_SwitchActiveChild(hwnd, (HWND16)wParam, (lParam)? FALSE : TRUE );
 	break;
 	
       case WM_MDIRESTORE:
@@ -1026,24 +1017,24 @@
       case WM_MDITILE:
 	ci->mdiFlags |= MDIF_NEEDUPDATE;
 	ShowScrollBar32(hwnd,SB_BOTH,FALSE);
-	MDITile(w, ci,wParam);
+	MDITile(w, ci, wParam);
         ci->mdiFlags &= ~MDIF_NEEDUPDATE;
         return 0;
 
       case WM_VSCROLL:
       case WM_HSCROLL:
 	ci->mdiFlags |= MDIF_NEEDUPDATE;
-        ScrollChildren32(hwnd,message,wParam,lParam);
+        ScrollChildren32(hwnd, message, wParam, lParam);
 	ci->mdiFlags &= ~MDIF_NEEDUPDATE;
         return 0;
 
       case WM_SETFOCUS:
 	if( ci->hwndActiveChild )
-	  {
+	{
 	   w = WIN_FindWndPtr( ci->hwndActiveChild );
 	   if( !(w->dwStyle & WS_MINIMIZE) )
 	       SetFocus32( ci->hwndActiveChild );
-	  } 
+	} 
 	return 0;
 	
       case WM_NCACTIVATE:
@@ -1076,7 +1067,7 @@
 			 rect.right - rect.left, rect.bottom - rect.top, 1);
 	}
 	else
-	  MDI_PostUpdate(hwnd, ci, SB_BOTH+1);
+	    MDI_PostUpdate(hwnd, ci, SB_BOTH+1);
 
 	break;
 
@@ -1251,7 +1242,8 @@
 	    SendMessage32W(hwndMDIClient, message, wParam, lParam);
 	    break;
 
-	  case WM_SETTEXT: {
+	  case WM_SETTEXT: 
+	  {
 	      LPSTR txt = HEAP_strdupWtoA(GetProcessHeap(),0,(LPWSTR)lParam);
 	      LRESULT ret = DefFrameProc32A( hwnd, hwndMDIClient, message,
                                      wParam, (DWORD)txt );
@@ -1311,7 +1303,7 @@
 
       case WM_SYSCOMMAND:
 	switch( wParam )
-	  {
+	{
 		case SC_MOVE:
 		     if( ci->hwndChildMaximized == hwnd) return 0;
 		     break;
@@ -1331,7 +1323,7 @@
 		case SC_PREVWINDOW:
 		     SendMessage16( ci->self, WM_MDINEXT, 0, 1);
 		     return 0;
-	  }
+	}
 	break;
 	
       case WM_GETMINMAXINFO:
@@ -1348,29 +1340,29 @@
 	/* do not change */
 
 	if( ci->hwndActiveChild == hwnd && wParam != SIZE_MAXIMIZED )
-	  {
+	{
   	    ci->hwndChildMaximized = 0;
 	    
 	    MDI_RestoreFrameMenu( clientWnd->parent, hwnd);
             MDI_UpdateFrameText( clientWnd->parent, ci->self,
                                  MDI_REPAINTFRAME, NULL );
-	  }
+	}
 
 	if( wParam == SIZE_MAXIMIZED )
-	  {
+	{
 	    HWND16 hMaxChild = ci->hwndChildMaximized;
 
 	    if( hMaxChild == hwnd ) break;
 
 	    if( hMaxChild)
-	      {	    
-	       SendMessage16( hMaxChild, WM_SETREDRAW, FALSE, 0L );
+	    {	    
+	        SendMessage16( hMaxChild, WM_SETREDRAW, FALSE, 0L );
 
-	       MDI_RestoreFrameMenu( clientWnd->parent, hMaxChild);
-	       ShowWindow16( hMaxChild, SW_SHOWNOACTIVATE);
+	        MDI_RestoreFrameMenu( clientWnd->parent, hMaxChild);
+	        ShowWindow16( hMaxChild, SW_SHOWNOACTIVATE);
 
-	       SendMessage16( hMaxChild, WM_SETREDRAW, TRUE, 0L );
-	      }
+	        SendMessage16( hMaxChild, WM_SETREDRAW, TRUE, 0L );
+	    }
 
 	    dprintf_mdi(stddeb,"\tMDI: maximizing child %04x\n", hwnd );
 
@@ -1379,16 +1371,16 @@
 	    MDI_AugmentFrameMenu( ci, clientWnd->parent, hwnd);
 	    MDI_UpdateFrameText( clientWnd->parent, ci->self,
 				 MDI_REPAINTFRAME, NULL ); 
-	  }
+	}
 
 	if( wParam == SIZE_MINIMIZED )
-	  {
-	    HWND16 switchTo = MDI_GetWindow(clientWnd, hwnd, 0);
+	{
+	    HWND16 switchTo = MDI_GetWindow(clientWnd, hwnd, TRUE, WS_MINIMIZE);
 
 	    if( switchTo )
 	        SendMessage16( switchTo, WM_CHILDACTIVATE, 0, 0L);
-	  }
-	  
+	}
+	 
 	MDI_PostUpdate(clientWnd->hwndSelf, ci, SB_BOTH+1);
 	break;
 
diff --git a/windows/message.c b/windows/message.c
index 6d4aa84..9470710 100644
--- a/windows/message.c
+++ b/windows/message.c
@@ -55,6 +55,32 @@
 }
 
 /***********************************************************************
+ *           MSG_SendParentNotify
+ *
+ * Send a WM_PARENTNOTIFY to all ancestors of the given window, unless
+ * the window has the WS_EX_NOPARENTNOTIFY style.
+ */
+static void MSG_SendParentNotify(WND* wndPtr, WORD event, WORD idChild, LPARAM lValue)
+{
+#define lppt ((LPPOINT16)&lValue)
+
+    /* pt has to be in the client coordinates of the parent window */
+
+    MapWindowPoints16( 0, wndPtr->hwndSelf, lppt, 1 );
+    while (wndPtr)
+    {
+	if (!(wndPtr->dwStyle & WS_CHILD) || (wndPtr->dwExStyle & WS_EX_NOPARENTNOTIFY)) break;
+	lppt->x += wndPtr->rectClient.left;
+	lppt->y += wndPtr->rectClient.top;
+	wndPtr = wndPtr->parent;
+	SendMessage32A( wndPtr->hwndSelf, WM_PARENTNOTIFY,
+			MAKEWPARAM( event, idChild ), lValue );
+    }
+#undef lppt
+}
+
+
+/***********************************************************************
  *           MSG_TranslateMouseMsg
  *
  * Translate an mouse hardware event into a real mouse message.
@@ -192,8 +218,7 @@
 	     * notification message is still WM_L/M/RBUTTONDOWN.
 	     */
 
-            WIN_SendParentNotify( hWnd, msg->message, 0,
-                              MAKELPARAM( screen_pt.x, screen_pt.y ) );
+            MSG_SendParentNotify( pWnd, msg->message, 0, MAKELPARAM(screen_pt.x, screen_pt.y) );
 
             /* Activate the window if needed */
 
diff --git a/windows/nonclient.c b/windows/nonclient.c
index 03f6091..fa30a1e 100644
--- a/windows/nonclient.c
+++ b/windows/nonclient.c
@@ -709,23 +709,23 @@
 
 	lpt[4].x = lpt[0].x = rect->left;
 	lpt[5].x = lpt[1].x = rect->left + width;
-	lpt[6].x = lpt[2].x = rect->right - width - 1;
-	lpt[7].x = lpt[3].x = rect->right - 1;
+	lpt[6].x = lpt[2].x = rect->right - 1;
+	lpt[7].x = lpt[3].x = rect->right - width - 1;
 
 	lpt[0].y = lpt[1].y = lpt[2].y = lpt[3].y = 
 		  rect->top + SYSMETRICS_CYFRAME + SYSMETRICS_CYSIZE;
 	lpt[4].y = lpt[5].y = lpt[6].y = lpt[7].y =
-		  rect->bottom - 1 - SYSMETRICS_CYFRAME - SYSMETRICS_CYSIZE;
+		  rect->bottom - SYSMETRICS_CYFRAME - SYSMETRICS_CYSIZE;
 
         lpt[8].x = lpt[9].x = lpt[10].x = lpt[11].x =
 		  rect->left + SYSMETRICS_CXFRAME + SYSMETRICS_CXSIZE;
 	lpt[12].x = lpt[13].x = lpt[14].x = lpt[15].x = 
-		  rect->right - 1 - SYSMETRICS_CXFRAME - SYSMETRICS_CYSIZE;
+		  rect->right - SYSMETRICS_CXFRAME - SYSMETRICS_CYSIZE;
 
 	lpt[12].y = lpt[8].y = rect->top; 
 	lpt[13].y = lpt[9].y = rect->top + height;
-	lpt[14].y = lpt[10].y = rect->bottom - height - 1; 
-	lpt[15].y = lpt[11].y = rect->bottom - 1;
+	lpt[14].y = lpt[10].y = rect->bottom - 1;
+	lpt[15].y = lpt[11].y = rect->bottom - height - 1;
 
 	GRAPH_DrawLines( hdc, lpt, 8, (HPEN32)0 );	/* 8 is the maximum */
 	InflateRect32( rect, -width - 1, -height - 1 );
@@ -868,7 +868,7 @@
     }
 
     MoveTo( hdc, r.left, r.bottom );
-    LineTo32( hdc, r.right-1, r.bottom );
+    LineTo32( hdc, r.right, r.bottom );
 
     if (style & WS_SYSMENU)
     {
diff --git a/windows/queue.c b/windows/queue.c
index a0f50c4..f9534cd 100644
--- a/windows/queue.c
+++ b/windows/queue.c
@@ -85,7 +85,7 @@
         }
         fprintf( stderr, "%04x %5d %4d %04x %s\n",
                  hQueue, queue->msgSize, queue->msgCount, queue->hTask,
-                 MODULE_GetModuleName( GetExePtr(queue->hTask) ) );
+                 MODULE_GetModuleName( queue->hTask ) );
         hQueue = queue->next;
     }
     fprintf( stderr, "\n" );
@@ -761,7 +761,7 @@
        HOOK_ResetQueueHooks( hNewQueue );
        if( WIN_GetDesktop()->hmemTaskQ == hQueue )
 	   WIN_GetDesktop()->hmemTaskQ = hNewQueue;
-       WIN_ResetQueueWindows( WIN_GetDesktop()->child, hQueue, hNewQueue );
+       WIN_ResetQueueWindows( WIN_GetDesktop(), hQueue, hNewQueue );
        QUEUE_DeleteMsgQueue( hQueue );
     }
 
diff --git a/windows/syscolor.c b/windows/syscolor.c
index 9f86835..e722daa 100644
--- a/windows/syscolor.c
+++ b/windows/syscolor.c
@@ -39,7 +39,11 @@
     "GrayText", "192 192 192",       /* COLOR_GRAYTEXT            */
     "ButtonText", "0 0 0",           /* COLOR_BTNTEXT             */
     "InactiveTitleText", "0 0 0",    /* COLOR_INACTIVECAPTIONTEXT */
-    "ButtonHilight", "255 255 255"   /* COLOR_BTNHIGHLIGHT        */
+    "ButtonHilight", "255 255 255",  /* COLOR_BTNHIGHLIGHT        */
+    "3DDarkShadow", "32 32 32",      /* COLOR_3DDKSHADOW          */
+    "3DLight", "192 192 192",        /* COLOR_3DLIGHT             */
+    "InfoText", "0 0 0",             /* COLOR_INFOTEXT            */
+    "InfoBackground", "255 255 192"  /* COLOR_INFOBK              */
 };
 
 static const char * const DefSysColors95[] =
@@ -64,11 +68,15 @@
     "GrayText", "192 192 192",       /* COLOR_GRAYTEXT            */
     "ButtonText", "0 0 0",           /* COLOR_BTNTEXT             */
     "InactiveTitleText", "0 0 0",    /* COLOR_INACTIVECAPTIONTEXT */
-    "ButtonHilight", "255 255 255"   /* COLOR_BTNHIGHLIGHT        */
+    "ButtonHilight", "255 255 255",  /* COLOR_BTNHIGHLIGHT        */
+    "3DDarkShadow", "32 32 32",      /* COLOR_3DDKSHADOW          */
+    "3DLight", "192 192 192",        /* COLOR_3DLIGHT             */
+    "InfoText", "0 0 0",             /* COLOR_INFOTEXT            */
+    "InfoBackground", "255 255 192"  /* COLOR_INFOBK              */
 };
 
 
-#define NUM_SYS_COLORS     (COLOR_BTNHIGHLIGHT+1)
+#define NUM_SYS_COLORS     (COLOR_INFOBK+1)
 
 static COLORREF SysColors[NUM_SYS_COLORS];
 
@@ -80,6 +88,7 @@
  */
 static void SYSCOLOR_SetColor( int index, COLORREF color )
 {
+    if (index < 0 || index >= NUM_SYS_COLORS) return;
     SysColors[index] = color;
     switch(index)
     {
@@ -149,6 +158,11 @@
 	DeleteObject32( sysColorObjects.hbrushBtnHighlight );
 	sysColorObjects.hbrushBtnHighlight = CreateSolidBrush32( color );
 	break;
+    case COLOR_3DDKSHADOW:
+    case COLOR_3DLIGHT:
+    case COLOR_INFOTEXT:
+    case COLOR_INFOBK:
+	break;
     }
 }
 
@@ -166,7 +180,7 @@
 	 i < NUM_SYS_COLORS; i++, p += 2)
     {
 	GetProfileString32A( "colors", p[0], p[1], buffer, 100 );
-	if (!sscanf( buffer, " %d %d %d", &r, &g, &b )) r = g = b = 0;
+	if (sscanf( buffer, " %d %d %d", &r, &g, &b ) != 3) r = g = b = 0;
 	SYSCOLOR_SetColor( i, RGB(r,g,b) );
     }
 }
@@ -177,7 +191,7 @@
  */
 COLORREF WINAPI GetSysColor16( INT16 nIndex )
 {
-    return SysColors[nIndex];
+    return GetSysColor32 (nIndex);
 }
 
 
@@ -186,15 +200,19 @@
  */
 COLORREF WINAPI GetSysColor32( INT32 nIndex )
 {
-    return SysColors[nIndex];
+    if (nIndex >= 0 && nIndex < NUM_SYS_COLORS)
+	return SysColors[nIndex];
+    else
+	return 0;
 }
 
 
 /*************************************************************************
  *             SetSysColors16   (USER.181)
  */
+/* FIXME -- check return type and insert comment if correct.  */
 VOID WINAPI SetSysColors16( INT16 nChanges, const INT16 *lpSysColor,
-                            const COLORREF *lpColorValues )
+			    const COLORREF *lpColorValues )
 {
     int i;
 
diff --git a/windows/user.c b/windows/user.c
index 8c7c9a5..90e7567 100644
--- a/windows/user.c
+++ b/windows/user.c
@@ -8,6 +8,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include "windows.h"
+#include "resource.h"
 #include "heap.h"
 #include "gdi.h"
 #include "user.h"
@@ -22,6 +23,8 @@
 
 WORD USER_HeapSel = 0;
 
+extern HGLOBAL16 LoadDIBCursorHandler( HGLOBAL16, HINSTANCE16, HRSRC16 );
+extern HGLOBAL16 LoadDIBIconHandler( HGLOBAL16, HINSTANCE16, HRSRC16 );
 extern BOOL32 MENU_PatchResidentPopup( HQUEUE16, WND* );
 extern void QUEUE_FlushMessages(HQUEUE16);
 
@@ -93,6 +96,35 @@
     return TRUE;
 }
 
+static RESOURCEHANDLER16 __r16loader = NULL;
+
+/**********************************************************************
+ *           USER_CallDefaultRsrcHandler
+ *
+ * Called by the LoadDIBIcon/CursorHandler().
+ */
+HGLOBAL16 USER_CallDefaultRsrcHandler( HGLOBAL16 hMemObj, HMODULE16 hModule, HRSRC16 hRsrc )
+{
+    return __r16loader( hMemObj, hModule, hRsrc );
+}
+
+/**********************************************************************
+ *           USER_InstallRsrcHandler
+ */
+static void USER_InstallRsrcHandler( HINSTANCE16 hInstance )
+{
+    FARPROC16 proc;
+
+    /* SetResourceHandler() returns previous function which is set
+     * when a module's resource table is loaded. */
+
+    proc = SetResourceHandler( hInstance, RT_ICON, (FARPROC32)LoadDIBIconHandler );
+    if(!__r16loader ) 
+	__r16loader = (RESOURCEHANDLER16)proc;
+    proc = SetResourceHandler( hInstance, RT_CURSOR, (FARPROC32)LoadDIBCursorHandler );
+    if(!__r16loader )
+	__r16loader = (RESOURCEHANDLER16)proc;
+}
 
 /**********************************************************************
  *           InitApp   (USER.5)
@@ -101,6 +133,15 @@
 {
     int queueSize;
 
+      /* InitTask() calls LibMain()'s of implicitly loaded DLLs 
+       * prior to InitApp() so there is no clean way to do
+       * SetTaskSignalHandler() in time. So, broken Windows bypasses 
+       * a pTask->userhandler on startup and simply calls a global 
+       * function pointer to the default USER signal handler.
+       */
+
+    USER_InstallRsrcHandler( hInstance );
+
       /* Create task message queue */
     queueSize = GetProfileInt32A( "windows", "DefaultQueueSize", 8 );
     if (!SetMessageQueue32( queueSize )) return 0;
@@ -109,9 +150,18 @@
 }
 
 /**********************************************************************
+ *           USER_ModuleUnload
+ */
+static void USER_ModuleUnload( HMODULE16 hModule )
+{
+    HOOK_FreeModuleHooks( hModule );
+    CLASS_FreeModuleClasses( hModule );
+}
+
+/**********************************************************************
  *           USER_AppExit
  */
-void USER_AppExit( HTASK16 hTask, HINSTANCE16 hInstance, HQUEUE16 hQueue )
+static void USER_AppExit( HTASK16 hTask, HINSTANCE16 hInstance, HQUEUE16 hQueue )
 {
     /* FIXME: empty clipboard if needed, maybe destroy menus (Windows
      *	      only complains about them but does nothing);
@@ -132,12 +182,18 @@
     HOOK_FreeQueueHooks( hQueue );
 
     QUEUE_SetExitingQueue( hQueue );
-    WIN_ResetQueueWindows( desktop->child, hQueue, (HQUEUE16)0);
+    WIN_ResetQueueWindows( desktop, hQueue, (HQUEUE16)0);
     QUEUE_SetExitingQueue( 0 );
 
     /* Free the message queue */
 
     QUEUE_DeleteMsgQueue( hQueue );
+
+    /* ModuleUnload() in "Internals" */
+
+    hInstance = GetExePtr( hInstance );
+    if( GetModuleUsage( hInstance ) <= 1 ) 
+	USER_ModuleUnload( hInstance );
 }
 
 
@@ -160,6 +216,34 @@
 
 
 /***********************************************************************
+ *           USER_SignalProc (USER.314)
+ */
+void WINAPI USER_SignalProc( HANDLE16 hTaskOrModule, UINT16 uCode,
+                             UINT16 uExitFn, HINSTANCE16 hInstance,
+                             HQUEUE16 hQueue )
+{
+    switch( uCode )
+    {
+	case USIG_GPF:
+	case USIG_TERMINATION:
+	     USER_AppExit( hTaskOrModule, hInstance, hQueue ); /* task */
+	     break;
+
+	case USIG_DLL_LOAD:
+	     USER_InstallRsrcHandler( hTaskOrModule ); /* module */
+	     break;
+
+	case USIG_DLL_UNLOAD:
+	     USER_ModuleUnload( hTaskOrModule ); /* module */
+	     break;
+
+	default:
+	     fprintf(stderr,"Unimplemented USER signal: %i\n", (int)uCode );
+    }
+}
+
+
+/***********************************************************************
  *           ExitWindows16   (USER.7)
  */
 BOOL16 WINAPI ExitWindows16( DWORD dwReturnCode, UINT16 wReserved )
diff --git a/windows/win.c b/windows/win.c
index 9f4375b..22d8eaf 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -270,41 +270,6 @@
 
 
 /***********************************************************************
- *           WIN_SendParentNotify
- *
- * Send a WM_PARENTNOTIFY to all ancestors of the given window, unless
- * the window has the WS_EX_NOPARENTNOTIFY style.
- */
-void WIN_SendParentNotify(HWND32 hwnd, WORD event, WORD idChild, LPARAM lValue)
-{
-    LPPOINT16 lppt = (LPPOINT16)&lValue;
-    WND     *wndPtr = WIN_FindWndPtr( hwnd );
-    BOOL32 bMouse = ((event <= WM_MOUSELAST) && (event >= WM_MOUSEFIRST));
-
-    /* if lValue contains cursor coordinates they have to be
-     * mapped to the client area of parent window */
-
-    if (bMouse) MapWindowPoints16( 0, hwnd, lppt, 1 );
-
-    while (wndPtr)
-    {
-        if ((wndPtr->dwExStyle & WS_EX_NOPARENTNOTIFY) ||
-	   !(wndPtr->dwStyle & WS_CHILD)) break;
-
-        if (bMouse)
-        {
-	    lppt->x += wndPtr->rectClient.left;
-	    lppt->y += wndPtr->rectClient.top;
-        }
-
-        wndPtr = wndPtr->parent;
-	SendMessage32A( wndPtr->hwndSelf, WM_PARENTNOTIFY, 
-                        MAKEWPARAM( event, idChild ), lValue );
-    }
-}
-
-
-/***********************************************************************
  *           WIN_DestroyWindow
  *
  * Destroy storage associated to a window. "Internals" p.358
@@ -377,20 +342,50 @@
 
 /***********************************************************************
  *           WIN_ResetQueueWindows
+ *
+ * Reset the queue of all the children of a given window.
+ * Return TRUE if something was done.
  */
-void WIN_ResetQueueWindows( WND* wnd, HQUEUE16 hQueue, HQUEUE16 hNew )
+BOOL32 WIN_ResetQueueWindows( WND* wnd, HQUEUE16 hQueue, HQUEUE16 hNew )
 {
-    WND* next;
+    BOOL32 ret = FALSE;
 
-    while (wnd)
+    if (hNew)  /* Set a new queue */
     {
-        next = wnd->next;
-        if (wnd->hmemTaskQ == hQueue)
-	   if( hNew ) wnd->hmemTaskQ = hNew;
-	   else DestroyWindow32( wnd->hwndSelf );
-        else WIN_ResetQueueWindows( wnd->child, hQueue, hNew );
-        wnd = next;
+        for (wnd = wnd->child; (wnd); wnd = wnd->next)
+        {
+            if (wnd->hmemTaskQ == hQueue)
+            {
+                wnd->hmemTaskQ = hNew;
+                ret = TRUE;
+            }
+            if (wnd->child)
+                ret |= WIN_ResetQueueWindows( wnd->child, hQueue, hNew );
+        }
     }
+    else  /* Queue is being destroyed */
+    {
+        while (wnd->child)
+        {
+            WND *tmp = wnd->child;
+            ret = FALSE;
+            while (tmp)
+            {
+                if (tmp->hmemTaskQ == hQueue)
+                {
+                    DestroyWindow32( tmp->hwndSelf );
+                    ret = TRUE;
+                    break;
+                }
+                if (tmp->child && WIN_ResetQueueWindows(tmp->child,hQueue,0))
+                    ret = TRUE;
+                else
+                    tmp = tmp->next;
+            }
+            if (!ret) break;
+        }
+    }
+    return ret;
 }
 
 /***********************************************************************
@@ -465,7 +460,7 @@
     WND *wndPtr;
     HWND16 hwnd, hwndLinkAfter;
     POINT32 maxSize, maxPos, minTrack, maxTrack;
-    LRESULT (*localSend32)(HWND32, UINT32, WPARAM32, LPARAM);
+    LRESULT (WINAPI *localSend32)(HWND32, UINT32, WPARAM32, LPARAM);
 
     dprintf_win( stddeb, "CreateWindowEx: " );
     if (HIWORD(cs->lpszName)) dprintf_win( stddeb, "'%s' ", cs->lpszName );
@@ -495,9 +490,7 @@
     }
 
     /* Find the window class */
-
-    if (!(classPtr = CLASS_FindClassByAtom( classAtom,
-                                            GetExePtr(cs->hInstance) )))
+    if (!(classPtr = CLASS_FindClassByAtom( classAtom, win32?cs->hInstance:GetExePtr(cs->hInstance) )))
     {
         char buffer[256];
         GlobalGetAtomName32A( classAtom, buffer, sizeof(buffer) );
@@ -703,8 +696,11 @@
                        LoadMenu(cs->hInstance,SEGPTR_GET(classPtr->menuNameA)):
                        LoadMenu(cs->hInstance,(SEGPTR)classPtr->menuNameA);
 #else
-            SEGPTR menuName = (SEGPTR)GetClassLong16( hwnd, GCL_MENUNAME );
-            if (menuName) cs->hMenu = LoadMenu16( cs->hInstance, menuName );
+	    SEGPTR menuName = (SEGPTR)GetClassLong16( hwnd, GCL_MENUNAME );
+	    if (HIWORD(cs->hInstance))
+	    	cs->hMenu = LoadMenu32A(cs->hInstance,PTR_SEG_TO_LIN(menuName));
+	    else
+	    	cs->hMenu = LoadMenu16(cs->hInstance,menuName);
 #endif
         }
         if (cs->hMenu) SetMenu32( hwnd, cs->hMenu );
@@ -732,6 +728,7 @@
             if (!(wndPtr->flags & WIN_NEED_SIZE))
             {
                 /* send it anyway */
+
                 SendMessage32A( hwnd, WM_SIZE, SIZE_RESTORED,
                                 MAKELONG(wndPtr->rectClient.right-wndPtr->rectClient.left,
                                          wndPtr->rectClient.bottom-wndPtr->rectClient.top));
@@ -740,27 +737,27 @@
                                           wndPtr->rectClient.top ) );
             }
 
-            WIN_SendParentNotify( hwnd, WM_CREATE, wndPtr->wIDmenu, (LPARAM)hwnd );
-            if (!IsWindow32(hwnd)) return 0;
-
             /* Show the window, maximizing or minimizing if needed */
 
-            if (wndPtr->dwStyle & WS_MINIMIZE)
+            if (wndPtr->dwStyle & (WS_MINIMIZE | WS_MAXIMIZE))
             {
 		RECT16 newPos;
+		UINT16 swFlag = (wndPtr->dwStyle & WS_MINIMIZE) ? SW_MINIMIZE : SW_MAXIMIZE;
                 wndPtr->dwStyle &= ~(WS_MAXIMIZE | WS_MINIMIZE);
-		WINPOS_MinMaximize( wndPtr, SW_MINIMIZE, &newPos );
-                SetWindowPos32( hwnd, 0, newPos.left, newPos.top, newPos.right, newPos.bottom,
-                                SWP_FRAMECHANGED | ((GetActiveWindow32())? SWP_NOACTIVATE : 0));
+		WINPOS_MinMaximize( wndPtr, swFlag, &newPos );
+		swFlag = ((wndPtr->dwStyle & WS_CHILD) || GetActiveWindow32()) ? SWP_NOACTIVATE : 0;
+                SetWindowPos32( hwnd, 0, newPos.left, newPos.top, 
+					 newPos.right, newPos.bottom, SWP_FRAMECHANGED | swFlag );
             }
-            else if (wndPtr->dwStyle & WS_MAXIMIZE)
-            {
-		RECT16 newPos;
-		wndPtr->dwStyle &= ~(WS_MAXIMIZE | WS_MINIMIZE);
-		WINPOS_MinMaximize( wndPtr, SW_MAXIMIZE, &newPos );
-                SetWindowPos32( hwnd, 0, newPos.left, newPos.top, newPos.right, newPos.bottom,
-                    ((GetActiveWindow32())? SWP_NOACTIVATE : 0) | SWP_FRAMECHANGED );
-            }
+
+	    if( wndPtr->dwStyle & WS_CHILD && !(wndPtr->dwExStyle & WS_EX_NOPARENTNOTIFY) )
+	    {
+		/* Notify the parent window only */
+
+		SendMessage32A( wndPtr->parent->hwndSelf, WM_PARENTNOTIFY,
+				MAKEWPARAM(WM_CREATE, wndPtr->wIDmenu), (LPARAM)hwnd );
+		if( !IsWindow32(hwnd) ) return 0;
+	    }
 
             if (cs->style & WS_VISIBLE) ShowWindow32( hwnd, SW_SHOW );
 
@@ -1000,8 +997,13 @@
     }
 
     if( !QUEUE_IsExitingQueue(wndPtr->hmemTaskQ) )
-	 WIN_SendParentNotify( hwnd, WM_DESTROY, wndPtr->wIDmenu, (LPARAM)hwnd );
-    if (!IsWindow32(hwnd)) return TRUE;
+	if( wndPtr->dwStyle & WS_CHILD && !(wndPtr->dwExStyle & WS_EX_NOPARENTNOTIFY) )
+	{
+	    /* Notify the parent window only */
+	    SendMessage32A( wndPtr->parent->hwndSelf, WM_PARENTNOTIFY,
+			    MAKEWPARAM(WM_DESTROY, wndPtr->wIDmenu), (LPARAM)hwnd );
+	    if( !IsWindow32(hwnd) ) return TRUE;
+	}
 
     if( wndPtr->window ) CLIPBOARD_DisOwn( wndPtr ); /* before window is unmapped */
 
@@ -1020,7 +1022,7 @@
     if( !(wndPtr->dwStyle & WS_CHILD) )
     {
       /* make sure top menu popup doesn't get destroyed */
-      MENU_PatchResidentPopup( TRUE, wndPtr );
+      MENU_PatchResidentPopup( (HQUEUE16)0xFFFF, wndPtr );
 
       for (;;)
       {
@@ -1214,7 +1216,7 @@
         /* with this name exists either. */
         if (!(atom = GlobalFindAtom32A( className ))) return 0;
     }
-    return WIN_FindWindow( 0, 0, atom, title );
+    return WIN_FindWindow( parent, child, atom, title );
 }
 
 
@@ -1235,7 +1237,7 @@
         if (!(atom = GlobalFindAtom32W( className ))) return 0;
     }
     buffer = HEAP_strdupWtoA( GetProcessHeap(), 0, title );
-    hwnd = WIN_FindWindow( 0, 0, atom, buffer );
+    hwnd = WIN_FindWindow( parent, child, atom, buffer );
     HeapFree( GetProcessHeap(), 0, buffer );
     return hwnd;
 }
@@ -1388,9 +1390,15 @@
     }
     switch(offset)
     {
-    case GWW_ID:         return (WORD)wndPtr->wIDmenu;
+    case GWW_ID:         
+    	if (HIWORD(wndPtr->wIDmenu))
+    		fprintf(stderr,"GetWindowWord32(GWW_ID) discards high bits of 0x%08x!\n",wndPtr->wIDmenu);
+    	return (WORD)wndPtr->wIDmenu;
     case GWW_HWNDPARENT: return wndPtr->parent ? wndPtr->parent->hwndSelf : 0;
-    case GWW_HINSTANCE:  return (WORD)wndPtr->hInstance;
+    case GWW_HINSTANCE:  
+    	if (HIWORD(wndPtr->hInstance))
+    		fprintf(stderr,"GetWindowWord32(GWW_HINSTANCE) discards high bits of 0x%08x!\n",wndPtr->hInstance);
+   	return (WORD)wndPtr->hInstance;
     default:
         fprintf( stderr, "GetWindowWord: invalid offset %d\n", offset );
         return 0;
@@ -1401,10 +1409,10 @@
 /**********************************************************************
  *	     WIN_GetWindowInstance
  */
-HINSTANCE16 WIN_GetWindowInstance( HWND32 hwnd )
+HINSTANCE32 WIN_GetWindowInstance( HWND32 hwnd )
 {
     WND * wndPtr = WIN_FindWndPtr( hwnd );
-    if (!wndPtr) return (HINSTANCE16)0;
+    if (!wndPtr) return (HINSTANCE32)0;
     return wndPtr->hInstance;
 }
 
@@ -1483,7 +1491,7 @@
                                                            type );
         case GWL_HWNDPARENT: return wndPtr->parent ?
                                         (HWND32)wndPtr->parent->hwndSelf : 0;
-        case GWL_HINSTANCE:  return (HINSTANCE32)wndPtr->hInstance;
+        case GWL_HINSTANCE:  return wndPtr->hInstance;
         default:
             fprintf( stderr, "GetWindowLong: unknown offset %d\n", offset );
     }
@@ -1501,6 +1509,7 @@
 {
     LONG *ptr, retval;
     WND * wndPtr = WIN_FindWndPtr( hwnd );
+
     if (!wndPtr) return 0;
     if (offset >= 0)
     {
@@ -1522,8 +1531,10 @@
     else switch(offset)
     {
         case GWL_ID:
+	    ptr = (DWORD*)&wndPtr->wIDmenu;
+	    break;
         case GWL_HINSTANCE:
-            return SetWindowWord32( hwnd, offset, (WORD)newval );
+            return SetWindowWord32( hwnd, offset, newval );
 	case GWL_WNDPROC:
             retval = (LONG)WINPROC_GetProc( wndPtr->winproc, type );
             WINPROC_SetProc( &wndPtr->winproc, (WNDPROC16)newval, 
diff --git a/windows/winhelp.c b/windows/winhelp.c
index 856d2d5..89be98b 100644
--- a/windows/winhelp.c
+++ b/windows/winhelp.c
@@ -52,11 +52,12 @@
 	switch(wCommand)
 	{
 		case HELP_CONTEXT:
-		case HELP_CONTENTS:
 		case HELP_SETCONTENTS:
+		case HELP_CONTENTS:
 		case HELP_CONTEXTPOPUP:
 		case HELP_FORCEFILE:
 		case HELP_HELPONHELP:
+		case HELP_FINDER:
 		case HELP_QUIT:
 			dsize=0;
 			break;
diff --git a/windows/winpos.c b/windows/winpos.c
index e418e7e..b7cadcb 100644
--- a/windows/winpos.c
+++ b/windows/winpos.c
@@ -274,10 +274,9 @@
 /*******************************************************************
  *         ClientToScreen16   (USER.28)
  */
-BOOL16 WINAPI ClientToScreen16( HWND16 hwnd, LPPOINT16 lppnt )
+void WINAPI ClientToScreen16( HWND16 hwnd, LPPOINT16 lppnt )
 {
     MapWindowPoints16( hwnd, 0, lppnt, 1 );
-    return TRUE;
 }
 
 
@@ -1566,14 +1565,19 @@
  */
 LONG WINPOS_HandleWindowPosChanging16( WND *wndPtr, WINDOWPOS16 *winpos )
 {
-    POINT32 maxSize;
+    POINT32 maxSize, minTrack;
     if (winpos->flags & SWP_NOSIZE) return 0;
     if ((wndPtr->dwStyle & WS_THICKFRAME) ||
 	((wndPtr->dwStyle & (WS_POPUP | WS_CHILD)) == 0))
     {
-	WINPOS_GetMinMaxInfo( wndPtr, &maxSize, NULL, NULL, NULL );
-	winpos->cx = MIN( winpos->cx, maxSize.x );
-	winpos->cy = MIN( winpos->cy, maxSize.y );
+	WINPOS_GetMinMaxInfo( wndPtr, &maxSize, NULL, &minTrack, NULL );
+	if (maxSize.x < winpos->cx) winpos->cx = maxSize.x;
+	if (maxSize.y < winpos->cy) winpos->cy = maxSize.y;
+	if (!(wndPtr->dwStyle & WS_MINIMIZE))
+	{
+	    if (winpos->cx < minTrack.x ) winpos->cx = minTrack.x;
+	    if (winpos->cy < minTrack.y ) winpos->cy = minTrack.y;
+	}
     }
     return 0;
 }
@@ -2380,14 +2384,19 @@
     int i;
     HDWP32 newhdwp = hdwp;
     HWND32 parent;
+    WND *pWnd;
 
     pDWP = (DWP *) USER_HEAP_LIN_ADDR( hdwp );
     if (!pDWP) return 0;
     if (hwnd == GetDesktopWindow32()) return 0;
 
-      /* All the windows of a DeferWindowPos() must have the same parent */
-
-    parent = WIN_FindWndPtr( hwnd )->parent->hwndSelf;
+    /* All the windows of a DeferWindowPos() must have the same parent */
+    if (!(pWnd=WIN_FindWndPtr( hwnd ))) {
+        USER_HEAP_FREE( hdwp );
+        return 0;
+    }
+    	
+    parent = pWnd->parent->hwndSelf;
     if (pDWP->actualCount == 0) pDWP->hwndParent = parent;
     else if (parent != pDWP->hwndParent)
     {
diff --git a/windows/winproc.c b/windows/winproc.c
index b2a9207..267029e 100644
--- a/windows/winproc.c
+++ b/windows/winproc.c
@@ -42,11 +42,6 @@
     BYTE       pushl_func;           /* pushl $proc */
     WNDPROC16  proc WINE_PACKED;
     BYTE       pushl_eax;            /* pushl %eax */
-    BYTE       pushl_ebp;            /* pushl %ebp */
-    BYTE       pushl_name;           /* pushl $name */
-    LPCSTR     name WINE_PACKED;
-    BYTE       pushl_thunk;          /* pushl $thunkfrom32 */
-    void     (*thunk32)() WINE_PACKED;
     BYTE       jmp;                  /* jmp   relay (relative jump)*/
     void     (*relay)() WINE_PACKED; /* WINPROC_CallProc32ATo16() */
 } WINPROC_THUNK_FROM32;
@@ -87,15 +82,14 @@
 LRESULT WINPROC_CallProc16To32W( HWND16 hwnd, UINT16 msg,
                                  WPARAM16 wParam, LPARAM lParam,
                                  WNDPROC32 func );
-static LRESULT WINPROC_CallProc32ATo16( WNDPROC16 func, HWND32 hwnd,
-                                        UINT32 msg, WPARAM32 wParam,
-                                        LPARAM lParam );
-static LRESULT WINPROC_CallProc32WTo16( WNDPROC16 func, HWND32 hwnd,
-                                        UINT32 msg, WPARAM32 wParam,
-                                        LPARAM lParam );
+static LRESULT WINAPI WINPROC_CallProc32ATo16( WNDPROC16 func, HWND32 hwnd,
+                                               UINT32 msg, WPARAM32 wParam,
+                                               LPARAM lParam );
+static LRESULT WINAPI WINPROC_CallProc32WTo16( WNDPROC16 func, HWND32 hwnd,
+                                               UINT32 msg, WPARAM32 wParam,
+                                               LPARAM lParam );
 
 extern void CallFrom16_long_wwwll(void);
-extern void CallFrom32_stdcall_5(void);
 
 static HANDLE32 WinProcHeap;
 
@@ -105,7 +99,6 @@
                                       WPARAM32 wParam, LPARAM lParam );
 
 static WINPROC_CALLWNDPROC16 WINPROC_CallWndProc16Ptr = WINPROC_CallWndProc16;
-static WINPROC_CALLWNDPROC32 WINPROC_CallWndProc32Ptr = WINPROC_CallWndProc32;
 
 
 /**********************************************************************
@@ -143,8 +136,8 @@
 static LRESULT WINPROC_CallWndProc32( WNDPROC32 proc, HWND32 hwnd, UINT32 msg,
                                       WPARAM32 wParam, LPARAM lParam )
 {
-/*  dprintf_relay( stddeb, "CallTo32(wndproc=%p,hwnd=%08x,msg=%08x,wp=%08x,lp=%08lx)\n",
-                   proc, hwnd, msg, wParam, lParam ); */
+    dprintf_relay( stddeb, "CallTo32(wndproc=%p,hwnd=%08x,msg=%08x,wp=%08x,lp=%08lx)\n",
+                   proc, hwnd, msg, wParam, lParam );
     return proc( hwnd, msg, wParam, lParam );
 }
 
@@ -159,15 +152,6 @@
 
 
 /**********************************************************************
- *	     WINPROC_SetCallWndProc32
- */
-void WINPROC_SetCallWndProc32( WINPROC_CALLWNDPROC32 proc )
-{
-    WINPROC_CallWndProc32Ptr = proc;
-}
-
-
-/**********************************************************************
  *	     WINPROC_GetPtr
  *
  * Return a pointer to the win proc.
@@ -238,14 +222,9 @@
             proc->thunk.t_from32.pushl_func  = 0x68;   /* pushl $proc */
             proc->thunk.t_from32.proc        = func;
             proc->thunk.t_from32.pushl_eax   = 0x50;   /* pushl %eax */
-            proc->thunk.t_from32.pushl_ebp   = 0x55;   /* pushl %ebp */
-            proc->thunk.t_from32.pushl_name  = 0x68;   /* pushl $name */
-            proc->thunk.t_from32.name        = "WINPROC_CallProc32ATo16";
-            proc->thunk.t_from32.pushl_thunk = 0x68;   /* pushl $thunkfrom32 */
-            proc->thunk.t_from32.thunk32     = (void(*)())WINPROC_CallProc32ATo16;
             proc->thunk.t_from32.jmp         = 0xe9;   /* jmp   relay*/
             proc->thunk.t_from32.relay =  /* relative jump */
-                (void (*)())((DWORD)CallFrom32_stdcall_5 -
+                (void(*)())((DWORD)WINPROC_CallProc32ATo16 -
                                      (DWORD)(&proc->thunk.t_from32.relay + 1));
             break;
         case WIN_PROC_32A:
@@ -1723,7 +1702,7 @@
     LRESULT result;
 
     if (WINPROC_MapMsg32ATo32W( msg, wParam, &lParam ) == -1) return 0;
-    result = WINPROC_CallWndProc32Ptr( func, hwnd, msg, wParam, lParam );
+    result = WINPROC_CallWndProc32( func, hwnd, msg, wParam, lParam );
     WINPROC_UnmapMsg32ATo32W( msg, wParam, lParam );
     return result;
 }
@@ -1741,7 +1720,7 @@
     LRESULT result;
 
     if (WINPROC_MapMsg32WTo32A( msg, wParam, &lParam ) == -1) return 0;
-    result = WINPROC_CallWndProc32Ptr( func, hwnd, msg, wParam, lParam );
+    result = WINPROC_CallWndProc32( func, hwnd, msg, wParam, lParam );
     WINPROC_UnmapMsg32WTo32A( msg, wParam, lParam );
     return result;
 }
@@ -1762,7 +1741,7 @@
 
     if (WINPROC_MapMsg16To32A( msg, wParam, &msg32, &wParam32, &lParam ) == -1)
         return 0;
-    result = WINPROC_CallWndProc32Ptr( func, hwnd, msg32, wParam32, lParam );
+    result = WINPROC_CallWndProc32( func, hwnd, msg32, wParam32, lParam );
     WINPROC_UnmapMsg16To32A( msg32, wParam32, lParam );
     return result;
 }
@@ -1783,7 +1762,7 @@
 
     if (WINPROC_MapMsg16To32W( msg, wParam, &msg32, &wParam32, &lParam ) == -1)
         return 0;
-    result = WINPROC_CallWndProc32Ptr( func, hwnd, msg32, wParam32, lParam );
+    result = WINPROC_CallWndProc32( func, hwnd, msg32, wParam32, lParam );
     WINPROC_UnmapMsg16To32W( msg32, wParam32, lParam );
     return result;
 }
@@ -1794,9 +1773,9 @@
  *
  * Call a 16-bit window procedure, translating the 32-bit args.
  */
-static LRESULT WINPROC_CallProc32ATo16( WNDPROC16 func, HWND32 hwnd,
-                                        UINT32 msg, WPARAM32 wParam,
-                                        LPARAM lParam )
+static LRESULT WINAPI WINPROC_CallProc32ATo16( WNDPROC16 func, HWND32 hwnd,
+                                               UINT32 msg, WPARAM32 wParam,
+                                               LPARAM lParam )
 {
     UINT16 msg16;
     MSGPARAM16 mp16;
@@ -1821,9 +1800,9 @@
  *
  * Call a 16-bit window procedure, translating the 32-bit args.
  */
-static LRESULT WINPROC_CallProc32WTo16( WNDPROC16 func, HWND32 hwnd,
-                                        UINT32 msg, WPARAM32 wParam,
-                                        LPARAM lParam )
+static LRESULT WINAPI WINPROC_CallProc32WTo16( WNDPROC16 func, HWND32 hwnd,
+                                               UINT32 msg, WPARAM32 wParam,
+                                               LPARAM lParam )
 {
     UINT16 msg16;
     MSGPARAM16 mp16;
@@ -1906,12 +1885,11 @@
 {
     WINDOWPROC *proc = WINPROC_GetPtr( (WNDPROC16)func );
 
-    if (!proc) return WINPROC_CallWndProc32Ptr( func, hwnd, msg,
-                                                wParam, lParam );
+    if (!proc) return WINPROC_CallWndProc32( func, hwnd, msg, wParam, lParam );
 
 #if testing
     func = WINPROC_GetProc( (HWINDOWPROC)proc, WIN_PROC_32A );
-    return WINPROC_CallWndProc32Ptr( func, hwnd, msg, wParam, lParam );
+    return WINPROC_CallWndProc32( func, hwnd, msg, wParam, lParam );
 #endif
 
     switch(proc->type)
@@ -1922,8 +1900,8 @@
                                         hwnd, msg, wParam, lParam );
     case WIN_PROC_32A:
         if (!proc->thunk.t_from16.proc) return 0;
-        return WINPROC_CallWndProc32Ptr( proc->thunk.t_from16.proc,
-                                         hwnd, msg, wParam, lParam );
+        return WINPROC_CallWndProc32( proc->thunk.t_from16.proc,
+                                      hwnd, msg, wParam, lParam );
     case WIN_PROC_32W:
         if (!proc->thunk.t_from16.proc) return 0;
         return WINPROC_CallProc32ATo32W( proc->thunk.t_from16.proc,
@@ -1943,12 +1921,11 @@
 {
     WINDOWPROC *proc = WINPROC_GetPtr( (WNDPROC16)func );
 
-    if (!proc) return WINPROC_CallWndProc32Ptr( func, hwnd, msg,
-                                                wParam, lParam );
+    if (!proc) return WINPROC_CallWndProc32( func, hwnd, msg, wParam, lParam );
 
 #if testing
     func = WINPROC_GetProc( (HWINDOWPROC)proc, WIN_PROC_32W );
-    return WINPROC_CallWndProc32Ptr( func, hwnd, msg, wParam, lParam );
+    return WINPROC_CallWndProc32( func, hwnd, msg, wParam, lParam );
 #endif
 
     switch(proc->type)
@@ -1963,8 +1940,8 @@
                                          hwnd, msg, wParam, lParam );
     case WIN_PROC_32W:
         if (!proc->thunk.t_from16.proc) return 0;
-        return WINPROC_CallWndProc32Ptr( proc->thunk.t_from16.proc,
-                                         hwnd, msg, wParam, lParam );
+        return WINPROC_CallWndProc32( proc->thunk.t_from16.proc,
+                                      hwnd, msg, wParam, lParam );
     default:
         fprintf( stderr, "CallWindowProc32W: invalid proc %p\n", proc );
         return 0;
