From 0c0e3bebb8acdd41e60843ed12c529d789b1ac85 Mon Sep 17 00:00:00 2001
From: Alexandre Julliard <julliard@winehq.org>
Date: Thu, 10 Dec 1998 15:49:22 +0000
Subject: [PATCH] Authors: Francis Beaudet <francis@macadamian.com>, Sylvain
 St-Germain <sylvain@macadamian.com>, Thuy Nguyen <thuy@macadamian.com> Lots
 of new stubs.

---
 controls/edit.c               |   2 -
 dlls/comctl32/Makefile.in     |   1 +
 dlls/comctl32/comctl32undoc.c |  93 +++++++++++
 dlls/comctl32/propsheet.c     |  65 ++++++++
 dlls/shell32/shell32_main.c   |  33 ++++
 files/file.c                  |  58 +++++++
 graphics/metafiledrv/init.c   |  57 ++++++-
 graphics/painting.c           |  66 ++++++++
 if1632/ddeml.spec             |  10 +-
 include/commctrl.h            | 174 ++++++++++++++++++++
 include/ddeml.h               |  23 ++-
 include/shlobj.h              |   4 -
 include/windows.h             |  20 ++-
 include/wintypes.h            |   1 +
 memory/string.c               | 101 ++++++++++++
 misc/ddeml.c                  | 122 ++++++++++++--
 misc/network.c                |  61 +++++++
 misc/printdrv.c               | 301 ++++++++++++++++++++++++++++++++++
 misc/tapi32.c                 |  34 ++++
 objects/bitmap.c              |  19 +++
 objects/dc.c                  |   9 +
 objects/enhmetafile.c         |  10 ++
 objects/font.c                |  12 +-
 objects/metafile.c            |  11 ++
 relay32/comctl32.spec         |  28 ++--
 relay32/gdi32.spec            |  24 +--
 relay32/kernel32.spec         |  11 +-
 relay32/mpr.spec              |  10 +-
 relay32/shell32.spec          |   4 +-
 relay32/tapi32.spec           |   4 +-
 relay32/user32.spec           |  26 +--
 relay32/winspool.spec         |  54 +++---
 win32/console.c               |  13 +-
 win32/kernel32.c              |  36 ++++
 win32/time.c                  |  13 ++
 windows/input.c               |  44 +++++
 windows/message.c             |  11 ++
 37 files changed, 1448 insertions(+), 117 deletions(-)
 create mode 100644 dlls/comctl32/propsheet.c

diff --git a/controls/edit.c b/controls/edit.c
index efc578afdbf..d9ccbba148e 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -43,8 +43,6 @@
 					   wrapped line, instead of in front of the next character */
 #define EF_USE_SOFTBRK		0x0100	/* Enable soft breaks in text. */
 
-typedef BOOL32 *LPBOOL32;
-
 typedef enum
 {
 	END_0 = 0,	/* line ends with terminating '\0' character */
diff --git a/dlls/comctl32/Makefile.in b/dlls/comctl32/Makefile.in
index 5f5869456aa..5bd0b5af739 100644
--- a/dlls/comctl32/Makefile.in
+++ b/dlls/comctl32/Makefile.in
@@ -20,6 +20,7 @@ C_SRCS = \
 	nativefont.c \
 	pager.c \
 	progress.c \
+	propsheet.c \
 	rebar.c \
 	status.c \
 	tab.c \
diff --git a/dlls/comctl32/comctl32undoc.c b/dlls/comctl32/comctl32undoc.c
index 3e9fa58e3eb..b3f8be45813 100644
--- a/dlls/comctl32/comctl32undoc.c
+++ b/dlls/comctl32/comctl32undoc.c
@@ -25,6 +25,15 @@
 
 extern HANDLE32 COMCTL32_hHeap; /* handle to the private heap */
 
+/*
+ * We put some function prototypes here that don't seem to belong in
+ * any header file. When they find their place, we can remove them.
+ */
+extern LPWSTR __cdecl CRTDLL_wcschr(LPCWSTR, WCHAR);
+extern LPSTR WINAPI lstrrchr(LPCSTR, LPCSTR, WORD);
+extern LPWSTR WINAPI lstrrchrw(LPCWSTR, LPCWSTR, WORD);
+extern LPWSTR WINAPI strstrw(LPCWSTR, LPCWSTR);
+
 
 /**************************************************************************
  * DPA_Merge [COMCTL32.11]
@@ -1781,3 +1790,87 @@ DSA_DestroyCallback (const HDSA hdsa, DSAENUMPROC enumProc, LPARAM lParam)
     return DSA_Destroy (hdsa);
 }
 
+/**************************************************************************
+ * StrCSpnA [COMCTL32.356]
+ *
+ */
+INT32 WINAPI COMCTL32_StrCSpnA( LPCSTR lpStr, LPCSTR lpSet) {
+  return strcspn(lpStr, lpSet);
+}
+
+/**************************************************************************
+ * StrChrW [COMCTL32.358]
+ *
+ */
+LPWSTR WINAPI COMCTL32_StrChrW( LPCWSTR lpStart, WORD wMatch) {
+  return CRTDLL_wcschr(lpStart, wMatch);
+}
+
+/**************************************************************************
+ * StrCmpNA [COMCTL32.352]
+ *
+ */
+INT32 WINAPI COMCTL32_StrCmpNA( LPCSTR lpStr1, LPCSTR lpStr2, int nChar) {
+  return lstrncmp32A(lpStr1, lpStr2, nChar);
+}
+
+/**************************************************************************
+ * StrCmpNW [COMCTL32.360]
+ *
+ */
+INT32 WINAPI COMCTL32_StrCmpNW( LPCWSTR lpStr1, LPCWSTR lpStr2, int nChar) {
+  return lstrncmp32W(lpStr1, lpStr2, nChar);
+}
+
+/**************************************************************************
+ * StrRChrA [COMCTL32.351]
+ *
+ */
+LPSTR WINAPI COMCTL32_StrRChrA( LPCSTR lpStart, LPCSTR lpEnd, WORD wMatch) {
+  return lstrrchr(lpStart, lpEnd, wMatch); 
+}
+
+/**************************************************************************
+ * StrRChrW [COMCTL32.359]
+ *
+ */
+LPWSTR WINAPI COMCTL32_StrRChrW( LPCWSTR lpStart, LPCWSTR lpEnd, WORD wMatch) {
+  return lstrrchrw(lpStart, lpEnd, wMatch); 
+}
+
+/**************************************************************************
+ * StrStrA [COMCTL32.354]
+ *
+ */
+LPSTR WINAPI COMCTL32_StrStrA( LPCSTR lpFirst, LPCSTR lpSrch) {
+  return strstr(lpFirst, lpSrch);
+}
+
+/**************************************************************************
+ * StrStrW [COMCTL32.362]
+ *
+ */
+LPWSTR WINAPI COMCTL32_StrStrW( LPCWSTR lpFirst, LPCWSTR lpSrch) {
+  return strstrw(lpFirst, lpSrch);
+}
+
+/**************************************************************************
+ * StrSpnW [COMCTL32.364]
+ *
+ */
+INT32 WINAPI COMCTL32_StrSpnW( LPWSTR lpStr, LPWSTR lpSet) {
+  LPWSTR lpLoop = lpStr;
+
+  /* validate ptr */
+  if ((lpStr == 0) || (lpSet == 0)) return 0;
+
+/* while(*lpLoop) { if lpLoop++; } */
+
+  for(; (*lpLoop != 0); lpLoop++)
+    if( CRTDLL_wcschr(lpSet, *(WORD*)lpLoop))
+      return (INT32)(lpLoop-lpStr);
+  
+  return (INT32)(lpLoop-lpStr);
+}
+
+
diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c
new file mode 100644
index 00000000000..4bfd3af7188
--- /dev/null
+++ b/dlls/comctl32/propsheet.c
@@ -0,0 +1,65 @@
+/*
+ * Property Sheets
+ *
+ * Copyright 1998 Francis Beaudet
+ *
+ * TODO:
+ *   - All the functions are simply stubs
+ *
+ */
+
+#include "windows.h"
+#include "commctrl.h"
+#include "win.h"
+#include "debug.h"
+
+/*****************************************************************
+ *            PropertySheet32A   (COMCTL32.84)
+ */
+INT32 WINAPI PropertySheet32A(LPCPROPSHEETHEADER32A propertySheetHeader)
+{
+    FIXME(commctrl, "(%p): stub\n", propertySheetHeader);
+
+    return -1;
+}
+
+/*****************************************************************
+ *            PropertySheet32W   (COMCTL32.85)
+ */
+INT32 WINAPI PropertySheet32W(LPCPROPSHEETHEADER32W propertySheetHeader)
+{
+    FIXME(commctrl, "(%p): stub\n", propertySheetHeader);
+
+    return -1;
+}
+
+/*****************************************************************
+ *            CreatePropertySheetPage32A   (COMCTL32.19)
+ */
+HPROPSHEETPAGE WINAPI CreatePropertySheetPage32A(LPCPROPSHEETPAGE32A lpPropSheetPage)
+{
+    FIXME(commctrl, "(%p): stub\n", lpPropSheetPage);
+
+    return 0;
+}
+
+/*****************************************************************
+ *            CreatePropertySheetPage32W   (COMCTL32.20)
+ */
+HPROPSHEETPAGE WINAPI CreatePropertySheetPage32W(LPCPROPSHEETPAGE32W lpPropSheetPage)
+{
+    FIXME(commctrl, "(%p): stub\n", lpPropSheetPage);
+
+    return 0;
+}
+
+/*****************************************************************
+ *            DestroyPropertySheetPage32   (COMCTL32.24)
+ */
+BOOL32 WINAPI DestroyPropertySheetPage32(HPROPSHEETPAGE hPropPage)
+{
+    FIXME(commctrl, "(0x%x): stub\n", hPropPage);
+
+    return FALSE;
+}
+
diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c
index 83439ffe488..ad42cdba381 100644
--- a/dlls/shell32/shell32_main.c
+++ b/dlls/shell32/shell32_main.c
@@ -287,6 +287,16 @@ HINSTANCE32 WINAPI FindExecutable32A( LPCSTR lpFile, LPCSTR lpDirectory,
     return retval;
 }
 
+/*************************************************************************
+ *             FindExecutable32W   (SHELL32.219)
+ */
+HINSTANCE32 WINAPI FindExecutable32W(LPCWSTR lpFile, LPCWSTR lpDirectory,
+                                     LPWSTR lpResult)
+{
+  FIXME(shell, "(%p,%p,%p): stub\n", lpFile, lpDirectory, lpResult);
+  return 31;    /* default - 'No association was found' */
+}
+
 typedef struct
 { LPCSTR  szApp;
     LPCSTR  szOtherStuff;
@@ -650,6 +660,29 @@ HINSTANCE32 WINAPI ShellExecute32A( HWND32 hWnd, LPCSTR lpOperation,
                            lpDirectory, iShowCmd );
 }
 
+/*************************************************************************
+ * ShellExecute32W [SHELL32.294]
+ * from shellapi.h
+ * WINSHELLAPI HINSTANCE APIENTRY ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, 
+ * LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd);   
+ */
+HINSTANCE32 WINAPI 
+ShellExecute32W(
+       HWND32 hwnd, 
+       LPCWSTR lpOperation, 
+       LPCWSTR lpFile, 
+       LPCWSTR lpParameters, 
+       LPCWSTR lpDirectory, 
+       INT32 nShowCmd) {
+
+       FIXME(shell,": stub\n");
+       return 0;
+}
+
+
+
+
+
 
 /*************************************************************************
  *             AboutDlgProc32  (not an exported API function)
diff --git a/files/file.c b/files/file.c
index e4afe2100a9..2b2216703e5 100644
--- a/files/file.c
+++ b/files/file.c
@@ -3,6 +3,10 @@
  *
  * Copyright 1993 John Burton
  * Copyright 1996 Alexandre Julliard
+ *
+ * TODO:
+ *    Fix the CopyFileEx methods to implement the "extented" functionality.
+ *    Right now, they simply call the CopyFile method.
  */
 
 #include <assert.h>
@@ -2005,6 +2009,60 @@ BOOL32 WINAPI CopyFile32W( LPCWSTR source, LPCWSTR dest, BOOL32 fail_if_exists)
 }
 
 
+/**************************************************************************
+ *           CopyFileEx32A   (KERNEL32.858)
+ *
+ * This implementation ignores most of the extra parameters passed-in into
+ * the "ex" version of the method and calls the CopyFile method.
+ * It will have to be fixed eventually.
+ */
+BOOL32 WINAPI CopyFileEx32A(LPCSTR             sourceFilename,
+                           LPCSTR             destFilename,
+                           LPPROGRESS_ROUTINE progressRoutine,
+                           LPVOID             appData,
+                           LPBOOL32           cancelFlagPointer,
+                           DWORD              copyFlags)
+{
+  BOOL32 failIfExists = FALSE;
+
+  /*
+   * Interpret the only flag that CopyFile can interpret.
+   */
+  if ( (copyFlags & COPY_FILE_FAIL_IF_EXISTS) != 0)
+  {
+    failIfExists = TRUE;
+  }
+
+  return CopyFile32A(sourceFilename, destFilename, failIfExists);
+}
+
+/**************************************************************************
+ *           CopyFileEx32W   (KERNEL32.859)
+ */
+BOOL32 WINAPI CopyFileEx32W(LPCWSTR            sourceFilename,
+                           LPCWSTR            destFilename,
+                           LPPROGRESS_ROUTINE progressRoutine,
+                           LPVOID             appData,
+                           LPBOOL32           cancelFlagPointer,
+                           DWORD              copyFlags)
+{
+    LPSTR sourceA = HEAP_strdupWtoA( GetProcessHeap(), 0, sourceFilename );
+    LPSTR destA   = HEAP_strdupWtoA( GetProcessHeap(), 0, destFilename );
+
+    BOOL32 ret = CopyFileEx32A(sourceA,
+                              destA,
+                              progressRoutine,
+                              appData,
+                              cancelFlagPointer,
+                              copyFlags);
+
+    HeapFree( GetProcessHeap(), 0, sourceA );
+    HeapFree( GetProcessHeap(), 0, destA );
+
+    return ret;
+}
+
+
 /***********************************************************************
  *              SetFileTime   (KERNEL32.650)
  */
diff --git a/graphics/metafiledrv/init.c b/graphics/metafiledrv/init.c
index 3aee5e05c9c..8684b0ad2e5 100644
--- a/graphics/metafiledrv/init.c
+++ b/graphics/metafiledrv/init.c
@@ -196,6 +196,23 @@ HDC32 WINAPI CreateMetaFile32A(
   return CreateMetaFile16( filename );
 }
 
+/**********************************************************************
+ *          CreateMetaFile32W   (GDI32.52)
+ */
+HDC32 WINAPI CreateMetaFile32W(LPCWSTR filename)
+{
+    LPSTR filenameA;
+    HDC32 hReturnDC;
+
+    filenameA = HEAP_strdupWtoA( GetProcessHeap(), 0, filename );
+
+    hReturnDC = CreateMetaFile32A(filenameA);
+
+    HeapFree( GetProcessHeap(), 0, filenameA );
+
+    return hReturnDC;
+}
+
 static DC *METAFILE_CloseMetaFile( HDC32 hdc ) 
 {
     DC *dc;
@@ -310,8 +327,8 @@ BOOL32 WINAPI DeleteMetaFile32(
 
 **********************************************************************/
 
-/*
-  need wide version as well
+/**********************************************************************
+ *          CreateEnhMetaFile32A   (GDI32.41)
 */
 HDC32 WINAPI CreateEnhMetaFile32A( 
     HDC32 hdc, /* optional reference DC */
@@ -351,9 +368,45 @@ HDC32 WINAPI CreateEnhMetaFile32A(
     TRACE(metafile, "returning %04x\n", dc->hSelf);
     return dc->hSelf;
 #endif
+
+    FIXME(metafile,
+         "(0x%lx,%s,%p,%s): stub\n",
+         hdc,
+         filename,
+         rect,
+         description);
+
     return 0;
 }
 
+/**********************************************************************
+ *          CreateEnhMetaFile32W   (GDI32.42)
+ */
+HDC32 WINAPI CreateEnhMetaFile32W(
+    HDC32         hdc,        /* optional reference DC */
+    LPCWSTR       filename,   /* optional filename for disk metafiles */
+    const RECT32* rect,       /* optional bounding rectangle */
+    LPCWSTR       description /* optional description */ 
+    )
+{
+    LPSTR filenameA;
+    LPSTR descriptionA;
+    HDC32 hReturnDC;
+
+    filenameA    = HEAP_strdupWtoA( GetProcessHeap(), 0, filename );
+    descriptionA = HEAP_strdupWtoA( GetProcessHeap(), 0, description );
+
+    hReturnDC = CreateEnhMetaFile32A(hdc,
+                                    filenameA,
+                                    rect,
+                                    descriptionA);
+
+    HeapFree( GetProcessHeap(), 0, filenameA );
+    HeapFree( GetProcessHeap(), 0, descriptionA );
+
+    return hReturnDC;
+}
+
 HENHMETAFILE32 WINAPI CloseEnhMetaFile32( 
                HDC32 hdc  /* metafile DC */
 	       )
diff --git a/graphics/painting.c b/graphics/painting.c
index 6992cf7d553..df9b38e1b52 100644
--- a/graphics/painting.c
+++ b/graphics/painting.c
@@ -126,6 +126,43 @@ BOOL32 WINAPI Arc32( HDC32 hdc, INT32 left, INT32 top, INT32 right,
     	   dc->funcs->pArc(dc,left,top,right,bottom,xstart,ystart,xend,yend);
 }
 
+/***********************************************************************
+ *           ArcTo32    (GDI32.8)
+ */
+BOOL32 WINAPI ArcTo32( HDC32 hdc, 
+                      INT32 left,   INT32 top, 
+                      INT32 right,  INT32 bottom,
+                      INT32 xstart, INT32 ystart,
+                      INT32 xend,   INT32 yend )
+{
+    BOOL32 result;
+
+    /*
+     * According to the documentation, a line is drawn from the current
+     * position to the starting point of the arc.
+     */
+    LineTo32(hdc, xstart, ystart);
+
+    /*
+     * Then the arc is drawn.
+     */
+    result = Arc32(hdc, 
+                  left, top,
+                  right, bottom,
+                  xstart, ystart,
+                  xend, yend);
+
+    /*
+     * If no error occured, the current position is moved to the ending
+     * point of the arc.
+     */
+    if (result)
+    {
+        MoveToEx32(hdc, xend, yend, NULL);
+    }
+
+    return result;
+}
 
 /***********************************************************************
  *           Pie16    (GDI.26)
@@ -1144,3 +1181,32 @@ BOOL32 WINAPI PolyBezierTo32( HDC32 hdc, const POINT32* lppt, DWORD cPoints )
     return ret;
 }
 
+
+/*************************************************************************
+ * StartDoc32W [GDI32.348]
+ * 
+ */
+INT32 WINAPI 
+StartDoc32W(HDC32 hdc ,const DOCINFO32W* doc) {
+  FIXME(gdi,"stub\n");
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 
+  return 0; /* failure*/
+}
+
+/******************************************************************************
+ *                 PolylineTo32      [GDI32.277]
+ */
+BOOL32 WINAPI PolylineTo32(HDC32 hdc, const POINT32 *lppt, DWORD cCount)
+{
+    FIXME(gdi, "(%d,%p,%ld): stub\n", hdc, lppt, cCount);
+    return 1;
+}
+
+/******************************************************************************
+ *                 AbortDoc32        [GDI32.0]
+ */
+INT32 WINAPI AbortDoc32(HDC32 hdc)
+{
+    FIXME(gdi, "(%d): stub\n", hdc);
+    return 1;
+}
diff --git a/if1632/ddeml.spec b/if1632/ddeml.spec
index 34aa4f90f65..39e8691221e 100644
--- a/if1632/ddeml.spec
+++ b/if1632/ddeml.spec
@@ -14,11 +14,11 @@ type	win16
             DdeClientTransaction16
 12 pascal DdeAbandonTransaction(long word long) DdeAbandonTransaction
 13 pascal DdePostAdvise(long word word) DdePostAdvise16
-14 pascal DdeCreateDataHandle(long ptr long long word word word) DdeCreateDataHandle
+14 pascal DdeCreateDataHandle(long ptr long long word word word) DdeCreateDataHandle16
 15 pascal DdeAddData(word ptr long long) DdeAddData
 16 pascal DdeGetData(word ptr long long) DdeGetData16
-17 pascal DdeAccessData(word ptr) DdeAccessData
-18 pascal DdeUnaccessData(word) DdeUnaccessData
+17 pascal DdeAccessData(word ptr) DdeAccessData16
+18 pascal DdeUnaccessData(word) DdeUnaccessData16
 19 pascal16 DdeFreeDataHandle(long) DdeFreeDataHandle16
 20 pascal16 DdeGetLastError(long) DdeGetLastError16
 21 pascal   DdeCreateStringHandle(long str s_word) DdeCreateStringHandle16
@@ -26,8 +26,8 @@ type	win16
 23 stub DdeQueryString #(long word ptr long word) DdeQueryString
 24 pascal16 DdeKeepStringHandle(long long) DdeKeepStringHandle16
 
-26 pascal DdeEnableCallback(long word word) DdeEnableCallback
+26 pascal DdeEnableCallback(long word word) DdeEnableCallback16
 27 pascal   DdeNameService(long long long s_word) DdeNameService16
 
-36 pascal DdeCmpStringHandles(word word) DdeCmpStringHandles
+36 pascal DdeCmpStringHandles(word word) DdeCmpStringHandles16
 37 pascal   DdeReconnect(long) DdeReconnect
diff --git a/include/commctrl.h b/include/commctrl.h
index 1bbf6b60928..fc6b1a82ff9 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -2503,8 +2503,182 @@ LRESULT WINAPI COMCTL32_SendNotify (HWND32, HWND32, UINT32, LPNMHDR);
 /* type and functionality of last parameter is still unknown */
 LRESULT WINAPI COMCTL32_SendNotifyEx (HWND32, HWND32, UINT32, LPNMHDR, DWORD);
 
+/*
+ * Property sheet support (callback procs)
+ */
+struct _PROPSHEETPAGE32A;  /** need to forward declare those structs **/
+struct _PROPSHEETPAGE32W;
+
+typedef UINT32 (CALLBACK *LPFNPSPCALLBACK32A)(HWND32, UINT32, struct _PROPSHEETPAGE32A*);
+typedef UINT32 (CALLBACK *LPFNPSPCALLBACK32W)(HWND32, UINT32, struct _PROPSHEETPAGE32W*);
+typedef INT32  (CALLBACK *PFNPROPSHEETCALLBACK32)(HWND32, UINT32, LPARAM);
+
+/*
+ * Property sheet support (structures)
+ */
+typedef struct _PROPSHEETPAGE32A
+{
+    DWORD              dwSize;
+    DWORD              dwFlags;
+    HINSTANCE32        hInstance;
+    union 
+    {
+        LPCSTR           lpszTemplate;
+        LPCDLGTEMPLATE   pResource;
+    }u;
+    union
+    {
+        HICON32          hIcon;
+        LPCSTR           pszIcon;
+    }u1;
+    LPCSTR             pszTitle;
+    DLGPROC32          pfnDlgProc;
+    LPARAM             lParam;
+    LPFNPSPCALLBACK32A pfnCallback;
+    UINT32*            pcRefParent;
+    LPCWSTR            pszHeaderTitle;
+    LPCWSTR            pszHeaderSubTitle;
+} PROPSHEETPAGE32A, *LPPROPSHEETPAGE32A;
+
+typedef const PROPSHEETPAGE32A *LPCPROPSHEETPAGE32A;
+
+typedef struct _PROPSHEETPAGE32W
+{
+    DWORD               dwSize;
+    DWORD               dwFlags;
+    HINSTANCE32         hInstance;
+    union 
+    {
+        LPCWSTR          lpszTemplate;
+        LPCDLGTEMPLATE   pResource;
+    }u;
+    union
+    {
+        HICON32          hIcon;
+        LPCWSTR          pszIcon;
+    }u2;
+    LPCWSTR            pszTitle;
+    DLGPROC32          pfnDlgProc;
+    LPARAM             lParam;
+    LPFNPSPCALLBACK32W pfnCallback;
+    UINT32*            pcRefParent;
+    LPCWSTR            pszHeaderTitle;
+    LPCWSTR            pszHeaderSubTitle;
+} PROPSHEETPAGE32W, *LPPROPSHEETPAGE32W;
+
+typedef const PROPSHEETPAGE32W *LPCPROPSHEETPAGE32W;
+
+struct _PSP;
+typedef struct _PSP *HPROPSHEETPAGE;
+
+
+typedef struct _PROPSHEETHEADER32A
+{
+    DWORD                    dwSize;
+    DWORD                    dwFlags;
+    HWND32                   hwndParent;
+    HINSTANCE32              hInstance;
+    union
+    {
+      HICON32                  hIcon;
+      LPCSTR                   pszIcon;
+    }u;
+    LPCSTR                   pszCaption;
+    UINT32                   nPages;
+    union
+    {
+        UINT32                 nStartPage;
+        LPCSTR                 pStartPage;
+    }u2;
+    union
+    {
+        LPCPROPSHEETPAGE32A    ppsp;
+        HPROPSHEETPAGE*        phpage;
+    }u3;
+    PFNPROPSHEETCALLBACK32   pfnCallback;
+    union
+    {
+        HBITMAP32              hbmWatermark;
+        LPCSTR                 pszbmWatermark;
+    }u4;
+    HPALETTE32               hplWatermark;
+    union
+    {
+        HBITMAP32              hbmHeader;
+        LPCSTR                 pszbmHeader;
+    }u5;
+} PROPSHEETHEADER32A, *LPPROPSHEETHEADER32A;
+
+typedef const PROPSHEETHEADER32A *LPCPROPSHEETHEADER32A;
+
+typedef struct _PROPSHEETHEADER32W
+{
+    DWORD                    dwSize;
+    DWORD                    dwFlags;
+    HWND32                   hwndParent;
+    HINSTANCE32              hInstance;
+    union
+    {
+      HICON32                  hIcon;
+      LPCSTR                   pszIcon;
+    }u;
+    LPCWSTR                  pszCaption;
+    UINT32                   nPages;
+    union
+    {
+        UINT32                 nStartPage;
+        LPCWSTR                pStartPage;
+    }u2;
+    union
+    {
+        LPCPROPSHEETPAGE32W    ppsp;
+        HPROPSHEETPAGE*        phpage;
+    }u3;
+    PFNPROPSHEETCALLBACK32   pfnCallback;
+    union
+    {
+        HBITMAP32              hbmWatermark;
+        LPCWSTR                pszbmWatermark;
+    }u4;
+    HPALETTE32               hplWatermark;
+    union
+    {
+        HBITMAP32              hbmHeader;
+        LPCWSTR                pszbmHeader;
+    }u5;
+} PROPSHEETHEADER32W, *LPPROPSHEETHEADER32W;
+
+typedef const PROPSHEETHEADER32W *LPCPROPSHEETHEADER32W;
+
+
+/*
+ * Property sheet support (methods)
+ */
+INT32 WINAPI PropertySheet32A(LPCPROPSHEETHEADER32A);
+INT32 WINAPI PropertySheet32W(LPCPROPSHEETHEADER32W);
+#define PropertySheet WINELIB_NAME(PropertySheet)
+HPROPSHEETPAGE WINAPI CreatePropertySheetPage32A(LPCPROPSHEETPAGE32A);
+HPROPSHEETPAGE WINAPI  CreatePropertySheetPage32W(LPCPROPSHEETPAGE32W);
+#define CreatePropertySheetPage WINELIB_NAME_AW(CreatePropertySheetPage)
+BOOL32 WINAPI DestroyPropertySheetPage32(HPROPSHEETPAGE hPropPage);
+#define DestroyPropertySheetPage WINELIB_NAME(DestroyPropertySheetPage)
+
+/*
+ * Property sheet support (UNICODE-WineLib)
+ */
+DECL_WINELIB_TYPE_AW(PROPSHEETPAGE) 
+DECL_WINELIB_TYPE_AW(LPPROPSHEETPAGE) 
+DECL_WINELIB_TYPE_AW(LPCPROPSHEETPAGE) 
+DECL_WINELIB_TYPE_AW(PROPSHEETHEADER) 
+DECL_WINELIB_TYPE_AW(LPPROPSHEETHEADER) 
+DECL_WINELIB_TYPE_AW(LPCPROPSHEETHEADER) 
+DECL_WINELIB_TYPE_AW(LPFNPSPCALLBACK) 
+DECL_WINELIB_TYPE(PFNPROPSHEETCALLBACK) 
+
 #ifdef __cplusplus
 }
 #endif
 
 #endif  /* __WINE_COMMCTRL_H */
+
+
diff --git a/include/ddeml.h b/include/ddeml.h
index 375448ce231..0f5838460e3 100644
--- a/include/ddeml.h
+++ b/include/ddeml.h
@@ -57,6 +57,9 @@ HCONVLIST WINAPI DdeConnectList32(DWORD,HSZ,HSZ,HCONVLIST,LPCONVCONTEXT32);
 HCONV     WINAPI DdeQueryNextServer16(HCONVLIST, HCONV);
 HCONV     WINAPI DdeQueryNextServer32(HCONVLIST, HCONV);
 #define   DdeQueryNextServer WINELIB_NAME(DdeQueryNextServer)
+DWORD     WINAPI DdeQueryString32A(DWORD, HSZ, LPSTR, DWORD, INT32);
+DWORD     WINAPI DdeQueryString32W(DWORD, HSZ, LPWSTR, DWORD, INT32);
+#define   DdeQueryString WINELIB_NAME(DdeQueryString)
 BOOL16    WINAPI DdeDisconnectList16(HCONVLIST);
 BOOL32    WINAPI DdeDisconnectList32(HCONVLIST);
 #define   DdeDisConnectList WINELIB_NAME(DdeDisconnectList)
@@ -67,7 +70,9 @@ BOOL16    WINAPI DdeDisconnect16(HCONV);
 BOOL32    WINAPI DdeDisconnect32(HCONV);
 #define   DdeDisconnect WINELIB_NAME(DdeDisconnect)
 BOOL16    WINAPI DdeSetUserHandle(HCONV,DWORD,DWORD);
-HDDEDATA  WINAPI DdeCreateHandleData(DWORD,LPBYTE,DWORD,DWORD,HSZ,UINT16,UINT16);
+HDDEDATA  WINAPI DdeCreateDataHandle16(DWORD,LPBYTE,DWORD,DWORD,HSZ,UINT16,UINT16);
+HDDEDATA  WINAPI DdeCreateDataHandle32(DWORD,LPBYTE,DWORD,DWORD,HSZ,UINT32,UINT32);
+#define   DdeCreateDataHandle WINELIB_NAME(DdeCreateDataHandle)
 HCONV     WINAPI DdeReconnect(HCONV);
 HSZ       WINAPI DdeCreateStringHandle16(DWORD,LPCSTR,INT16);
 HSZ       WINAPI DdeCreateStringHandle32A(DWORD,LPCSTR,INT32);
@@ -93,10 +98,18 @@ BOOL32    WINAPI DdePostAdvise32(DWORD,HSZ,HSZ);
 #define   DdePostAdvise WINELIB_NAME(DdePostAdvise)
 HDDEDATA  WINAPI DdeAddData(HDDEDATA,LPBYTE,DWORD,DWORD);
 DWORD     WINAPI DdeGetData(HDDEDATA,LPBYTE,DWORD,DWORD);
-LPBYTE    WINAPI DdeAccessData(HDDEDATA,LPDWORD);
-BOOL16    WINAPI DdeUnaccessData(HDDEDATA);
-BOOL16    WINAPI DdeEnableCallback(DWORD,HCONV,UINT16);
-int       WINAPI DdeCmpStringHandles(HSZ,HSZ);
+LPBYTE    WINAPI DdeAccessData16(HDDEDATA,LPDWORD);
+LPBYTE    WINAPI DdeAccessData32(HDDEDATA,LPDWORD);
+#define   DdeAccessData WINELIB_NAME(DdeAccessData)
+BOOL16    WINAPI DdeUnaccessData16(HDDEDATA);
+BOOL32    WINAPI DdeUnaccessData32(HDDEDATA);
+#define   DdeUnaccessData WINELIB_NAME(DdeUnaccessData)
+BOOL16    WINAPI DdeEnableCallback16(DWORD,HCONV,UINT16);
+BOOL32    WINAPI DdeEnableCallback32(DWORD,HCONV,UINT32);
+#define   DdeEnableCallback WINELIB_NAME(DdeEnableCallback)
+int       WINAPI DdeCmpStringHandles16(HSZ,HSZ);
+int       WINAPI DdeCmpStringHandles32(HSZ,HSZ);
+#define   DdeCmpStringHandles WINELIB_NAME(DdeCmpStringHandles)
 
 
 HDDEDATA  WINAPI DdeNameService16(DWORD,HSZ,HSZ,UINT16);
diff --git a/include/shlobj.h b/include/shlobj.h
index 459d3f7807f..ae5af71de16 100644
--- a/include/shlobj.h
+++ b/include/shlobj.h
@@ -543,10 +543,6 @@ typedef struct
 
 typedef const FOLDERSETTINGS * LPCFOLDERSETTINGS;
 
-/* FIXME; the next two lines are propersheet related, move to prsht.h when created */
-struct _PSP;
-typedef struct _PSP FAR* HPROPSHEETPAGE;
-
 typedef BOOL32 (CALLBACK FAR * LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM);
 typedef BOOL32 (CALLBACK FAR * LPFNADDPROPSHEETPAGES)(LPVOID, LPFNADDPROPSHEETPAGE,LPARAM);
 
diff --git a/include/windows.h b/include/windows.h
index 62537eeb80c..30134ae18e7 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -951,7 +951,6 @@ typedef struct _DEBUG_EVENT {
 #define IDCLOSE             8
 #define IDHELP              9      
 
-
 typedef struct
 {
     HWND16    hwnd;
@@ -2392,6 +2391,11 @@ typedef struct
 #define SEM_NOALIGNMENTFAULTEXCEPT  0x0004
 #define SEM_NOOPENFILEERRORBOX      0x8000
 
+/* CopyFileEx flags */
+#define COPY_FILE_FAIL_IF_EXISTS        0x00000001
+#define COPY_FILE_RESTARTABLE           0x00000002
+#define COPY_FILE_OPEN_SOURCE_FOR_WRITE 0x00000004
+
 /* GetTempFileName() Flags */
 #define TF_FORCEDRIVE	        0x80
 
@@ -6580,6 +6584,14 @@ typedef struct tagDLGITEMTEMPLATE
 }DLGITEMTEMPLATE, *LPDLGITEMTEMPLATE;
 typedef const DLGITEMTEMPLATE *LPCDLGITEMTEMPLATE;
 
+/*
+ * This one seems to be a Win32 only definition. It also is defined with
+ * WINAPI instead of CALLBACK in the windows headers.
+ */
+typedef DWORD (WINAPI *LPPROGRESS_ROUTINE)(LARGE_INTEGER, LARGE_INTEGER, LARGE_INTEGER, 
+                                           LARGE_INTEGER, DWORD, DWORD, HANDLE32,
+                                           HANDLE32, LPVOID);
+
 #pragma pack(4)
 
 /* Declarations for functions that exist only in Win16 */
@@ -6764,6 +6776,9 @@ HENHMETAFILE32 WINAPI CopyEnhMetaFile32W(HENHMETAFILE32,LPCWSTR);
 BOOL32      WINAPI CopyFile32A(LPCSTR,LPCSTR,BOOL32);
 BOOL32      WINAPI CopyFile32W(LPCWSTR,LPCWSTR,BOOL32);
 #define     CopyFile WINELIB_NAME_AW(CopyFile)
+BOOL32      WINAPI CopyFileEx32A(LPCSTR, LPCSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL32, DWORD);
+BOOL32      WINAPI CopyFileEx32W(LPCWSTR, LPCWSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL32, DWORD);
+#define     CopyFileEx WINELIB_NAME_AW(CopyFileEx)
 INT32       WINAPI CompareFileTime(LPFILETIME,LPFILETIME);
 BOOL32      WINAPI ControlService(HANDLE32,DWORD,LPSERVICE_STATUS);
 HANDLE32    WINAPI CreateEvent32A(LPSECURITY_ATTRIBUTES,BOOL32,BOOL32,LPCSTR);
@@ -6986,6 +7001,9 @@ BOOL32      WINAPI IsDBCSLeadByteEx(UINT32,BYTE);
 BOOL32      WINAPI IsProcessorFeaturePresent(DWORD);
 BOOL32      WINAPI IsWindowUnicode(HWND32);
 BOOL32      WINAPI IsValidLocale(DWORD,DWORD);
+HKL32       WINAPI LoadKeyboardLayout32A(LPCSTR,UINT32);
+HKL32       WINAPI LoadKeyboardLayout32W(LPCWSTR,UINT32);
+#define     LoadKeyboardLayout WINELIB_NAME_AW(LoadKeyboardLayout)
 BOOL32      WINAPI LocalFileTimeToFileTime(const FILETIME*,LPFILETIME);
 BOOL32      WINAPI LockFile(HFILE32,DWORD,DWORD,DWORD,DWORD);
 BOOL32      WINAPI LookupPrivilegeValue32A(LPCSTR,LPCSTR,LPVOID);
diff --git a/include/wintypes.h b/include/wintypes.h
index f265c4279ed..561f16da453 100644
--- a/include/wintypes.h
+++ b/include/wintypes.h
@@ -138,6 +138,7 @@ typedef INT32          *LPINT32;
 typedef UINT32         *LPUINT32;
 typedef HKEY           *LPHKEY;
 typedef FLOAT          *LPFLOAT;
+typedef BOOL32         *LPBOOL32;
 
 /* Special case: a segmented pointer is just a pointer in the user's code. */
 
diff --git a/memory/string.c b/memory/string.c
index e7c83ccf499..a0a89d7def0 100644
--- a/memory/string.c
+++ b/memory/string.c
@@ -52,6 +52,12 @@ static const BYTE STRING_Ansi2Oem[256] =
 #define OEM_TO_ANSI(ch) (STRING_Oem2Ansi[(unsigned char)(ch)])
 #define ANSI_TO_OEM(ch) (STRING_Ansi2Oem[(unsigned char)(ch)])
 
+/* Internaly used by strchr family functions */
+static BOOL32 ChrCmpA( WORD word1, WORD word2);
+static BOOL32 ChrCmpW( WORD word1, WORD word2);
+
+extern LPWSTR __cdecl CRTDLL_wcschr(LPCWSTR str,WCHAR xchar);
+
 
 /***********************************************************************
  *           hmemcpy   (KERNEL.348)
@@ -663,3 +669,98 @@ INT32 WINAPI LocalToWideChar32(
 	MultiByteToWideChar(CP_ACP,0,pLocal,-1,pWide,dwChars); 
   return lstrlen32W(pWide);
 }
+
+
+/***********************************************************************
+ *           lstrrchr   (Not a Windows API)
+ *
+ * This is the implementation meant to be invoked form within
+ * COMCTL32_StrRChrA and shell32(TODO)...
+ *
+ * Return a pointer to the last occurence of wMatch in lpStart
+ * not looking further than lpEnd...
+ */
+LPSTR WINAPI lstrrchr( LPCSTR lpStart, LPCSTR lpEnd, WORD wMatch )
+{
+  LPCSTR lpGotIt = NULL;
+
+  TRACE(string,"(%s, %s)\n", lpStart, lpEnd);
+
+  if (!lpEnd) lpEnd = lpStart + strlen(lpStart);
+
+  for(; lpStart < lpEnd; lpStart = CharNext32A(lpStart)) 
+    if (!ChrCmpA( GET_WORD(lpStart), wMatch)) 
+      lpGotIt = lpStart;
+    
+  return ((LPSTR)lpGotIt);
+}
+
+/***********************************************************************
+ *           lstrrchrw    (Not a Windows API)
+ *
+ * This is the implementation meant to be invoked form within
+ * COMCTL32_StrRChrW and shell32(TODO)...
+ *
+ * Return a pointer to the last occurence of wMatch in lpStart
+ * not looking further than lpEnd...
+ */  
+LPWSTR WINAPI lstrrchrw( LPCWSTR lpStart, LPCWSTR lpEnd, WORD wMatch )
+{
+  LPCWSTR lpGotIt = NULL;
+
+  TRACE(string,"(%p, %p, %c)\n", lpStart,      lpEnd, wMatch);
+  if (!lpEnd) lpEnd = lpStart + lstrlen32W(lpStart);
+
+  for(; lpStart < lpEnd; lpStart = CharNext32W(lpStart)) 
+    if (!ChrCmpW( GET_WORD(lpStart), wMatch)) 
+      lpGotIt = lpStart;
+    
+  return (LPWSTR)lpGotIt;
+}
+
+/***********************************************************************
+ *           strstrw   (Not a Windows API)
+ *
+ * This is the implementation meant to be invoked form within
+ * COMCTL32_StrStrW and shell32(TODO)...
+ *
+ */
+LPWSTR WINAPI strstrw( LPCWSTR lpFirst, LPCWSTR lpSrch) {
+  UINT32 uSrchLen  = (UINT32)lstrlen32W(lpSrch);
+  WORD wMatchBeg   = *(WORD*)lpSrch;
+
+  TRACE(string,"(%p, %p)\n", lpFirst,  lpSrch);
+
+  for(; 
+    ((lpFirst=CRTDLL_wcschr(lpFirst, wMatchBeg))!=0) && 
+      lstrncmp32W(lpFirst, lpSrch, uSrchLen); 
+    lpFirst++) {
+      continue;
+  }
+  return (LPWSTR)lpFirst;
+}
+
+
+/***********************************************************************
+ *           ChrCmpA   
+ * This fuction returns FALSE if both words match, TRUE otherwise...
+ */
+static BOOL32 ChrCmpA( WORD word1, WORD word2) {
+  if (LOBYTE(word1) == LOBYTE(word2)) {
+    if (IsDBCSLeadByte32(LOBYTE(word1))) {
+      return (word1 != word2);
+    }
+    return FALSE;
+  }
+  return TRUE;
+}
+
+/***********************************************************************
+ *           ChrCmpW   
+ * This fuction returns FALSE if both words match, TRUE otherwise...
+ */
+static BOOL32 ChrCmpW( WORD word1, WORD word2) {
+  return (word1 != word2);
+}
+
+
diff --git a/misc/ddeml.c b/misc/ddeml.c
index fdd421557ae..7f36086478d 100644
--- a/misc/ddeml.c
+++ b/misc/ddeml.c
@@ -145,6 +145,38 @@ HCONV WINAPI DdeQueryNextServer32( HCONVLIST hConvList, HCONV hConvPrev )
     return 0;
 }
 
+/*****************************************************************
+ * DdeQueryString32A [USER32.113]
+ */
+DWORD WINAPI DdeQueryString32A(DWORD idInst, HSZ hsz, LPSTR psz, DWORD cchMax, INT32 iCodePage)
+{
+    FIXME(ddeml,
+         "(%ld, 0x%lx, %p, %ld, %d): stub\n",
+         idInst,
+         hsz,
+         psz, 
+         cchMax,
+         iCodePage);
+
+    return 0;
+}
+
+/*****************************************************************
+ * DdeQueryString32W [USER32.114]
+ */
+DWORD WINAPI DdeQueryString32W(DWORD idInst, HSZ hsz, LPWSTR psz, DWORD cchMax, INT32 iCodePage)
+{
+    FIXME(ddeml,
+         "(%ld, 0x%lx, %p, %ld, %d): stub\n",
+         idInst,
+         hsz,
+         psz, 
+         cchMax,
+         iCodePage);
+
+    return 0;
+}
+
 
 /*****************************************************************
  *            DdeDisconnectList (DDEML.6)
@@ -211,14 +243,38 @@ BOOL16 WINAPI DdeSetUserHandle( HCONV hConv, DWORD id, DWORD hUser )
 }
 
 /*****************************************************************
- *            DdeCreateDataHandle (DDEML.14)
+ *            DdeCreateDataHandle16 (DDEML.14)
  */
-HDDEDATA WINAPI DdeCreateDataHandle( DWORD idInst, LPBYTE pSrc, DWORD cb, 
+HDDEDATA WINAPI DdeCreateDataHandle16( DWORD idInst, LPBYTE pSrc, DWORD cb, 
                                      DWORD cbOff, HSZ hszItem, UINT16 wFmt, 
                                      UINT16 afCmd )
 {
-    FIXME( ddeml, "(%ld,%p,%ld,%ld,%ld,%d,%d): stub\n",idInst,pSrc,cb,cbOff,
-           hszItem, wFmt, afCmd );
+    return DdeCreateDataHandle32(idInst,
+                                pSrc,
+                                cb,
+                                cbOff,
+                                hszItem,
+                                wFmt,
+                                afCmd);
+}
+
+/*****************************************************************
+ *            DdeCreateDataHandle32 (USER32.94)
+ */
+HDDEDATA WINAPI DdeCreateDataHandle32( DWORD idInst, LPBYTE pSrc, DWORD cb, 
+                                       DWORD cbOff, HSZ hszItem, UINT32 wFmt, 
+                                       UINT32 afCmd )
+{
+    FIXME( ddeml,
+          "(%ld,%p,%ld,%ld,0x%lx,%d,%d): stub\n",
+          idInst,
+          pSrc,
+          cb,
+          cbOff,
+           hszItem,
+          wFmt, 
+          afCmd );
+
     return 0;
 }
 
@@ -448,29 +504,55 @@ DWORD WINAPI DdeGetData16(
 
 
 /*****************************************************************
- *            DdeAccessData (DDEML.17)
+ *            DdeAccessData16 (DDEML.17)
+ */
+LPBYTE WINAPI DdeAccessData16( HDDEDATA hData, LPDWORD pcbDataSize )
+{
+     return DdeAccessData32(hData, pcbDataSize);
+}
+
+/*****************************************************************
+ *            DdeAccessData32 (USER32.88)
  */
-LPBYTE WINAPI DdeAccessData( HDDEDATA hData, LPDWORD pcbDataSize )
+LPBYTE WINAPI DdeAccessData32( HDDEDATA hData, LPDWORD pcbDataSize )
 {
-     FIXME( ddeml, "empty stub\n" );
+     FIXME( ddeml, "(%ld,%p): stub\n", hData, pcbDataSize);
      return 0;
 }
 
 /*****************************************************************
- *            DdeUnaccessData (DDEML.18)
+ *            DdeUnaccessData16 (DDEML.18)
  */
-BOOL16 WINAPI DdeUnaccessData( HDDEDATA hData )
+BOOL16 WINAPI DdeUnaccessData16( HDDEDATA hData )
 {
-     FIXME( ddeml, "empty stub\n" );
+     return DdeUnaccessData32(hData);
+}
+
+/*****************************************************************
+ *            DdeUnaccessData32 (USER32.118)
+ */
+BOOL32 WINAPI DdeUnaccessData32( HDDEDATA hData )
+{
+     FIXME( ddeml, "(0x%lx): stub\n", hData);
+
      return 0;
 }
 
 /*****************************************************************
- *            DdeEnableCallback (DDEML.26)
+ *            DdeEnableCallback16 (DDEML.26)
  */
-BOOL16 WINAPI DdeEnableCallback( DWORD idInst, HCONV hConv, UINT16 wCmd )
+BOOL16 WINAPI DdeEnableCallback16( DWORD idInst, HCONV hConv, UINT16 wCmd )
 {
-     FIXME( ddeml, "empty stub\n" );
+     return DdeEnableCallback32(idInst, hConv, wCmd);
+}
+
+/*****************************************************************
+ *            DdeEnableCallback32 (USER32.99)
+ */
+BOOL32 WINAPI DdeEnableCallback32( DWORD idInst, HCONV hConv, UINT32 wCmd )
+{
+     FIXME( ddeml, "(%ld, 0x%lx, %d) stub\n", idInst, hConv, wCmd);
+
      return 0;
 }
 
@@ -531,11 +613,19 @@ UINT32 WINAPI DdeGetLastError32( DWORD idInst )
 
 
 /*****************************************************************
- *            DdeCmpStringHandles (DDEML.36)
+ *            DdeCmpStringHandles16 (DDEML.36)
+ */
+int WINAPI DdeCmpStringHandles16( HSZ hsz1, HSZ hsz2 )
+{
+     return DdeCmpStringHandles32(hsz1, hsz2);
+}
+
+/*****************************************************************
+ *            DdeCmpStringHandles32 (USER32.91)
  */
-int WINAPI DdeCmpStringHandles( HSZ hsz1, HSZ hsz2 )
+int WINAPI DdeCmpStringHandles32( HSZ hsz1, HSZ hsz2 )
 {
-     FIXME( ddeml, "empty stub\n" );
+     FIXME( ddeml, "(0x%lx, 0x%lx): stub\n", hsz1, hsz2 );
      return 0;
 }
 
diff --git a/misc/network.c b/misc/network.c
index 85e3095ae58..de63eaf4899 100644
--- a/misc/network.c
+++ b/misc/network.c
@@ -761,3 +761,64 @@ DWORD WINAPI NPSGetProviderHandle32A(DWORD x) {
 	FIXME(mpr,"(0x%08lx),stub!\n",x);
 	return 0;
 }
+
+/*****************************************************************
+ *  WNetCancelConnection232A [MPR.53]
+ */
+DWORD WINAPI WNetCancelConnection232A(
+  LPCSTR lpName, 
+  DWORD dwFlags, 
+  BOOL32 fForce) {
+
+  FIXME(wnet,": stub\n");
+  return WN_SUCCESS;
+}
+
+/*****************************************************************
+ *  WNetCancelConnection232W [MPR.54]
+ */
+DWORD WINAPI WNetCancelConnection232W(
+  LPCWSTR lpName, 
+  DWORD dwFlags, 
+  BOOL32 fForce) {
+
+  FIXME(wnet,": stub\n");
+  return WN_SUCCESS;
+}
+
+/*****************************************************************
+ *  WNetCancelConnection32A [MPR.55]
+ */
+DWORD WINAPI WNetCancelConnection32A(
+  LPCSTR lpName, 
+  DWORD dwFlags, 
+  BOOL32 fForce) {
+
+  FIXME(wnet,": stub\n");
+  return WN_SUCCESS;
+}
+
+/*****************************************************************
+ *  WNetCancelConnection32W [MPR.56]
+ */
+DWORD WINAPI WNetCancelConnection32W(
+  LPCWSTR lpName, 
+  DWORD dwFlags, 
+  BOOL32 fForce) {
+
+  FIXME(wnet,": stub\n");
+  return WN_SUCCESS;
+}
+
+/*****************************************************************
+ *  WNetGetUser32W [MPR.87]
+ */
+DWORD WINAPI WNetGetUser32W(
+  LPCWSTR  lpName,
+  LPWSTR   lpUserName,
+  LPDWORD  lpnLength) {
+
+  FIXME(wnet,": stub\n");
+       SetLastError(WN_NO_NETWORK);
+  return WN_NO_NETWORK;
+}
diff --git a/misc/printdrv.c b/misc/printdrv.c
index 1af67440236..50bb32b0418 100644
--- a/misc/printdrv.c
+++ b/misc/printdrv.c
@@ -293,6 +293,18 @@ INT32 WINAPI DeviceCapabilities32A(LPCSTR printer,LPCSTR target,WORD z,
 }
 
 
+/*****************************************************************************
+ *          DeviceCapabilities32W 
+ */
+INT32 WINAPI DeviceCapabilities32W(LPCWSTR pDevice, LPCWSTR pPort,
+                                   WORD fwCapability, LPWSTR pOutput,
+                                   const DEVMODE32W *pDevMode)
+{
+    FIXME(print,"(%p,%p,%d,%p,%p): stub\n",
+          pDevice, pPort, fwCapability, pOutput, pDevMode);
+    return -1;
+}
+
 /******************************************************************
  *              DocumentProperties32A   [WINSPOOL.155]
  *
@@ -308,6 +320,20 @@ LONG WINAPI DocumentProperties32A(HWND32 hWnd,HANDLE32 hPrinter,
 }
 
 
+/*****************************************************************************
+ *          DocumentProperties32W 
+ */
+LONG WINAPI DocumentProperties32W(HWND32 hWnd, HANDLE32 hPrinter,
+                                  LPWSTR pDeviceName,
+                                  LPDEVMODE32W pDevModeOutput,
+                                  LPDEVMODE32W pDevModeInput, DWORD fMode)
+{
+    FIXME(print,"(%d,%d,%s,%p,%p,%ld): stub\n",
+          hWnd,hPrinter,pDeviceName,pDevModeOutput,pDevModeInput,fMode);
+    return -1;
+}
+
+
 /******************************************************************
  *              OpenPrinter32A        [WINSPOOL.196]
  *
@@ -414,3 +440,278 @@ DeletePort32A (LPSTR pName, HWND32 hWnd, LPSTR pPortName)
     return FALSE;
 }
 
+/******************************************************************************
+ *    SetPrinter32W  [WINSPOOL.214]
+ */
+BOOL32 WINAPI
+SetPrinter32W(
+  HANDLE32  hPrinter,
+  DWORD     Level,
+  LPBYTE    pPrinter,
+  DWORD     Command) {
+
+       FIXME(print,"():stub\n");
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+       return FALSE;
+}
+
+/******************************************************************************
+ *    WritePrinter32  [WINSPOOL.223]
+ */
+BOOL32 WINAPI
+WritePrinter32( 
+  HANDLE32  hPrinter,
+  LPVOID  pBuf,
+  DWORD   cbBuf,
+  LPDWORD pcWritten) {
+
+       FIXME(print,"():stub\n");
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+       return FALSE;
+}
+
+/*****************************************************************************
+ *          AddForm32A  [WINSPOOL.103]
+ */
+BOOL32 WINAPI AddForm32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pForm)
+{
+    FIXME(print, "(%d,%ld,%p): stub\n", hPrinter, Level, pForm);
+    return 1;
+}
+
+/*****************************************************************************
+ *          AddForm32W  [WINSPOOL.104]
+ */
+BOOL32 WINAPI AddForm32W(HANDLE32 hPrinter, DWORD Level, LPBYTE pForm)
+{
+    FIXME(print, "(%d,%ld,%p): stub\n", hPrinter, Level, pForm);
+    return 1;
+}
+
+/*****************************************************************************
+ *          AddJob32A  [WINSPOOL.105]
+ */
+BOOL32 WINAPI AddJob32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pData,
+                        DWORD cbBuf, LPDWORD pcbNeeded)
+{
+    FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pData, cbBuf,
+          pcbNeeded);
+    return 1;
+}
+
+/*****************************************************************************
+ *          AddJob32W  [WINSPOOL.106]
+ */
+BOOL32 WINAPI AddJob32W(HANDLE32 hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf,
+                        LPDWORD pcbNeeded)
+{
+    FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pData, cbBuf,
+          pcbNeeded);
+    return 1;
+}
+
+/*****************************************************************************
+ *          AddPrinter32A  [WINSPOOL.117]
+ */
+HANDLE32 WINAPI AddPrinter32A(LPSTR pName, DWORD Level, LPBYTE pPrinter)
+{
+    FIXME(print, "(%s,%ld,%p): stub\n", pName, Level, pPrinter);
+    return NULL;
+}
+
+/*****************************************************************************
+ *          AddPrinter32W  [WINSPOOL.122]
+ */
+HANDLE32 WINAPI AddPrinter32W(LPWSTR pName, DWORD Level, LPBYTE pPrinter)
+{
+    FIXME(print, "(%p,%ld,%p): stub\n", pName, Level, pPrinter);
+    return 0;
+}
+
+
+/*****************************************************************************
+ *          ClosePrinter32  [WINSPOOL.126]
+ */
+BOOL32 WINAPI ClosePrinter32(HANDLE32 hPrinter)
+{
+    FIXME(print, "(%d): stub\n", hPrinter);
+    return 1;
+}
+
+/*****************************************************************************
+ *          DeleteForm32A  [WINSPOOL.133]
+ */
+BOOL32 WINAPI DeleteForm32A(HANDLE32 hPrinter, LPSTR pFormName)
+{
+    FIXME(print, "(%d,%s): stub\n", hPrinter, pFormName);
+    return 1;
+}
+
+/*****************************************************************************
+ *          DeleteForm32W  [WINSPOOL.134]
+ */
+BOOL32 WINAPI DeleteForm32W(HANDLE32 hPrinter, LPWSTR pFormName)
+{
+    FIXME(print, "(%d,%s): stub\n", hPrinter, pFormName);
+    return 1;
+}
+
+/*****************************************************************************
+ *          DeletePrinter32  [WINSPOOL.143]
+ */
+BOOL32 DeletePrinter32(HANDLE32 hPrinter)
+{
+    FIXME(print, "(%d): stub\n", hPrinter);
+    return 1;
+}
+
+/*****************************************************************************
+ *          SetPrinter32A  [WINSPOOL.211]
+ */
+BOOL32 WINAPI SetPrinter32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pPrinter,
+                           DWORD Command)
+{
+    FIXME(print, "(%d,%ld,%p,%ld): stub\n",hPrinter,Level,pPrinter,Command);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          SetJob32A  [WINSPOOL.209]
+ */
+BOOL32 WINAPI SetJob32A(HANDLE32 hPrinter, DWORD JobId, DWORD Level,
+                       LPBYTE pJob, DWORD Command)
+{
+    FIXME(print, "(%d,%ld,%ld,%p,%ld): stub\n",hPrinter,JobId,Level,pJob,
+         Command);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          SetJob32W  [WINSPOOL.210]
+ */
+BOOL32 WINAPI SetJob32W(HANDLE32 hPrinter, DWORD JobId, DWORD Level,
+                       LPBYTE pJob, DWORD Command)
+{
+    FIXME(print, "(%d,%ld,%ld,%p,%ld): stub\n",hPrinter,JobId,Level,pJob,
+         Command);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          GetForm32A  [WINSPOOL.181]
+ */
+BOOL32 WINAPI GetForm32A(HANDLE32 hPrinter, LPSTR pFormName, DWORD Level,
+                 LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded)
+{
+    FIXME(print, "(%d,%s,%ld,%p,%ld,%p): stub\n",hPrinter,pFormName,
+         Level,pForm,cbBuf,pcbNeeded); 
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          GetForm32W  [WINSPOOL.182]
+ */
+BOOL32 WINAPI GetForm32W(HANDLE32 hPrinter, LPWSTR pFormName, DWORD Level,
+                 LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded)
+{
+    FIXME(print, "(%d,%s,%ld,%p,%ld,%p): stub\n",hPrinter,pFormName,
+         Level,pForm,cbBuf,pcbNeeded);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          SetForm32A  [WINSPOOL.207]
+ */
+BOOL32 WINAPI SetForm32A(HANDLE32 hPrinter, LPSTR pFormName, DWORD Level,
+                        LPBYTE pForm)
+{
+    FIXME(print, "(%d,%s,%ld,%p): stub\n",hPrinter,pFormName,Level,pForm);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          SetForm32W  [WINSPOOL.208]
+ */
+BOOL32 WINAPI SetForm32W(HANDLE32 hPrinter, LPWSTR pFormName, DWORD Level,
+                        LPBYTE pForm)
+{
+    FIXME(print, "(%d,%p,%ld,%p): stub\n",hPrinter,pFormName,Level,pForm);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          ReadPrinter32  [WINSPOOL.202]
+ */
+BOOL32 WINAPI ReadPrinter32(HANDLE32 hPrinter, LPVOID pBuf, DWORD cbBuf,
+                           LPDWORD pNoBytesRead)
+{
+    FIXME(print, "(%d,%p,%ld,%p): stub\n",hPrinter,pBuf,cbBuf,pNoBytesRead);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          ResetPrinter32A  [WINSPOOL.203]
+ */
+BOOL32 WINAPI ResetPrinter32A(HANDLE32 hPrinter, LPPRINTER_DEFAULTS32A pDefault)
+{
+    FIXME(print, "(%d, %p): stub\n", hPrinter, pDefault);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          ResetPrinter32W  [WINSPOOL.204]
+ */
+BOOL32 WINAPI ResetPrinter32W(HANDLE32 hPrinter, LPPRINTER_DEFAULTS32W pDefault)
+{
+    FIXME(print, "(%d, %p): stub\n", hPrinter, pDefault);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          GetPrinter32A  [WINSPOOL.187]
+ */
+BOOL32 WINAPI GetPrinter32A(HANDLE32 hPrinter, DWORD Level, LPBYTE pPrinter,
+                    DWORD cbBuf, LPDWORD pcbNeeded)
+{
+    FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pPrinter, 
+         cbBuf, pcbNeeded);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          GetPrinter32W  [WINSPOOL.194]
+ */
+BOOL32 WINAPI GetPrinter32W(HANDLE32 hPrinter, DWORD Level, LPBYTE pPrinter,
+                    DWORD cbBuf, LPDWORD pcbNeeded)
+{
+    FIXME(print, "(%d,%ld,%p,%ld,%p): stub\n", hPrinter, Level, pPrinter,
+          cbBuf, pcbNeeded);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          GetPrinterDriver32A  [WINSPOOL.190]
+ */
+BOOL32 WINAPI GetPrinterDriver32A(HANDLE32 hPrinter, LPSTR pEnvironment,
+                                 DWORD Level, LPBYTE pDriverInfo,
+                                 DWORD cbBuf, LPDWORD pcbNeeded)
+{
+    FIXME(print, "(%d,%s,%ld,%p,%ld,%p): stub\n",hPrinter,pEnvironment,
+         Level,pDriverInfo,cbBuf, pcbNeeded);
+    return FALSE;
+}
+
+/*****************************************************************************
+ *          GetPrinterDriver32W  [WINSPOOL.193]
+ */
+BOOL32 WINAPI GetPrinterDriver32W(HANDLE32 hPrinter, LPWSTR pEnvironment,
+                                  DWORD Level, LPBYTE pDriverInfo, 
+                                  DWORD cbBuf, LPDWORD pcbNeeded)
+{
+    FIXME(print, "(%d,%p,%ld,%p,%ld,%p): stub\n",hPrinter,pEnvironment,
+          Level,pDriverInfo,cbBuf, pcbNeeded);
+    return FALSE;
+}
+
+
+
diff --git a/misc/tapi32.c b/misc/tapi32.c
index 87e45fbeb4b..e5e223cbd80 100644
--- a/misc/tapi32.c
+++ b/misc/tapi32.c
@@ -40,3 +40,37 @@ UINT32 WINAPI lineNegotiateAPIVersion(
     *lpdwAPIVersion = dwAPIHighVersion;
     return 0;
 }
+
+/*************************************************************************
+ * lineRedirect32 [TAPI32.53]
+ * 
+ */
+LONG WINAPI lineRedirect32(
+  HANDLE32* hCall,
+  LPCSTR lpszDestAddress,
+  DWORD  dwCountryCode) {
+
+  FIXME(comm, ": stub.\n");
+  return -1;
+/*  return LINEERR_OPERATIONFAILED; */
+}
+
+/*************************************************************************
+ * tapiRequestMakeCall32 [TAPI32.113]
+ * 
+ */
+LONG WINAPI tapiRequestMakeCall32(
+  LPCSTR lpszDestAddress,
+  LPCSTR lpszAppName,
+  LPCSTR lpszCalledParty,
+  LPCSTR lpszComment) {
+
+  FIXME(comm, ": stub.\n");
+  return -1;
+/*  return TAPIERR_REQUESTQUEUEFULL; */
+}
+
+
+
+
+
diff --git a/objects/bitmap.c b/objects/bitmap.c
index d10c7c74484..f0697508176 100644
--- a/objects/bitmap.c
+++ b/objects/bitmap.c
@@ -928,3 +928,22 @@ DWORD WINAPI SetBitmapDimension( HBITMAP16 hbitmap, INT16 x, INT16 y )
     return MAKELONG( size.cx, size.cy );
 }
 
+/***********************************************************************
+ *           MaskBlt32 [GDI32.252]
+ */
+BOOL32 WINAPI MaskBlt32(HDC32 hdcDest, 
+                       INT32 nXDest, INT32 nYDest, 
+                       INT32 nWidth, INT32 nHeight, 
+                       HDC32 hdcSource, 
+                       INT32 nXSrc, INT32 nYSrc,
+                       HBITMAP32 hbmMask, 
+                       INT32 xMask, INT32 yMask, 
+                       DWORD dwRop)
+{
+    FIXME(bitmap, "(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%ld): stub\n",
+          hdcDest,nXDest,nYDest,nWidth,nHeight,hdcSource,nXSrc,nYSrc,
+          hbmMask,xMask,yMask,dwRop);
+ 
+    return 1;
+}
+
diff --git a/objects/dc.c b/objects/dc.c
index b38663b6715..eb98918e99b 100644
--- a/objects/dc.c
+++ b/objects/dc.c
@@ -1250,3 +1250,12 @@ UINT16 WINAPI SetBoundsRect16(HDC16 hdc, const RECT16* rect, UINT16 flags)
     return DCB_RESET | DCB_DISABLE; /* bounding rectangle always empty and disabled*/
 }
 
+/***********************************************************************
+ *           SetBoundsRect32    (GDI32.307)
+ */
+UINT32 WINAPI SetBoundsRect32(HDC32 hdc, const RECT32* rect, UINT32 flags)
+{
+    FIXME(dc, "(): stub\n");
+    return DCB_DISABLE;   /* bounding rectangle always empty */
+}
+
diff --git a/objects/enhmetafile.c b/objects/enhmetafile.c
index c57b127208d..b405ca125be 100644
--- a/objects/enhmetafile.c
+++ b/objects/enhmetafile.c
@@ -38,6 +38,16 @@ HENHMETAFILE32 WINAPI GetEnhMetaFile32A(
   return hmf;
 }
 
+/*****************************************************************************
+ *          GetEnhMetaFile32W  (GDI32.180)
+ */
+HENHMETAFILE32 WINAPI GetEnhMetaFile32W(
+             LPCWSTR lpszMetaFile)  /* filename of enhanced metafile */ 
+{
+  FIXME(metafile, "(%p): stub\n", lpszMetaFile);
+  return NULL;
+}
+
 /*****************************************************************************
  *        GetEnhMetaFileHeader  (GDI32.178)
  *
diff --git a/objects/font.c b/objects/font.c
index 7c966f1ac91..9e0d53417e9 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -1020,7 +1020,17 @@ UINT32 WINAPI GetOutlineTextMetrics32A(
     return rtn;
 }
 
-
+/***********************************************************************
+ *           GetOutlineTextMetrics32W [GDI32.208]
+ */
+UINT32 WINAPI GetOutlineTextMetrics32W(
+    HDC32 hdc,    /* [in]  Handle of device context */
+    UINT32 cbData, /* [in]  Size of metric data array */
+    LPOUTLINETEXTMETRIC32W lpOTM)  /* [out] Address of metric data array */
+{
+    FIXME(font, "(%d,%d,%p): stub\n", hdc, cbData, lpOTM);
+    return 0; 
+}
 
 /***********************************************************************
  *           GetCharWidth16    (GDI.350)
diff --git a/objects/metafile.c b/objects/metafile.c
index 0bdbe9ce78b..bbd95c58a13 100644
--- a/objects/metafile.c
+++ b/objects/metafile.c
@@ -1068,6 +1068,17 @@ UINT32 WINAPI GetMetaFileBitsEx(
   return MIN(nSize, h->mtSize);
 }
 
+/******************************************************************
+ *         GetWinMetaFileBits [GDI32.241]
+ */
+UINT32 WINAPI GetWinMetaFileBits(HENHMETAFILE32 hemf,
+                                UINT32 cbBuffer, LPBYTE lpbBuffer,
+                                INT32 fnMapMode, HDC32 hdcRef)
+{
+  FIXME(metafile, "(%d,%d,%p,%d,%d): stub\n",
+        hemf, cbBuffer, lpbBuffer, fnMapMode, hdcRef);
+  return 0;
+}
 
 /******************************************************************
  *         MF_Meta_CreateRegion
diff --git a/relay32/comctl32.spec b/relay32/comctl32.spec
index bcf84c11967..3a2f96e8928 100644
--- a/relay32/comctl32.spec
+++ b/relay32/comctl32.spec
@@ -24,12 +24,12 @@ init	COMCTL32_LibMain
  16 stdcall CreateUpDownControl(long long long long long long long long long long long long) CreateUpDownControl
  17 stdcall InitCommonControls() InitCommonControls
  18 stub CreatePropertySheetPage
- 19 stub CreatePropertySheetPageA
- 20 stub CreatePropertySheetPageW
+ 19 stdcall CreatePropertySheetPageA(ptr) CreatePropertySheetPage32A
+ 20 stdcall CreatePropertySheetPageW(ptr) CreatePropertySheetPage32W
  21 stdcall CreateStatusWindow(long str long long) CreateStatusWindow32AW
  22 stdcall CreateStatusWindowW(long wstr long long) CreateStatusWindow32W
  23 stdcall CreateToolbarEx(long long long long long long ptr long long long long long long) CreateToolbarEx
- 24 stub DestroyPropertySheetPage
+ 24 stdcall DestroyPropertySheetPage(long) DestroyPropertySheetPage32
  25 stdcall DllGetVersion(ptr) COMCTL32_DllGetVersion
  26 stub DllInstall
  27 stdcall DrawStatusText(long ptr ptr long) DrawStatusText32AW
@@ -89,8 +89,8 @@ init	COMCTL32_LibMain
  81 stdcall InitCommonControlsEx(ptr) InitCommonControlsEx
  82 stub InitializeFlatSB
  83 stub PropertySheet
- 84 stub PropertySheetA
- 85 stub PropertySheetW
+ 84 stdcall PropertySheetA(ptr) PropertySheet32A
+ 85 stdcall PropertySheetW(ptr) PropertySheet32W
  86 stub UninitializeFlatSB
  87 stub _TrackMouseEvent
 
@@ -138,20 +138,20 @@ init	COMCTL32_LibMain
 342 stdcall SendNotifyEx(long long long ptr long) COMCTL32_SendNotifyEx
 
 350 stdcall StrChrA(str str) COMCTL32_StrChrA
-351 stub StrRChrA
-352 stub StrCmpNA
+351 stdcall StrRChrA(str str long) COMCTL32_StrRChrA
+352 stdcall StrCmpNA(str str long) COMCTL32_StrCmpNA
 353 stub StrCmpNIA
-354 stub StrStrA
+354 stdcall StrStrA(str str) COMCTL32_StrStrA
 355 stdcall StrStrIA(str str) COMCTL32_StrStrIA
-356 stub StrCSpnA
+356 stdcall StrCSpnA(str str) COMCTL32_StrCSpnA
 357 stdcall StrToIntA(str) COMCTL32_StrToIntA
-358 stub StrChrW
-359 stub StrRChrW
-360 stub StrCmpNW
+358 stdcall StrChrW(wstr long) COMCTL32_StrChrW
+359 stdcall StrRChrW(wstr wstr long) COMCTL32_StrRChrW
+360 stdcall StrCmpNW(wstr wstr long) COMCTL32_StrCmpNW
 361 stub StrCmpNIW
-362 stub StrStrW
+362 stdcall StrStrW(wstr wstr) COMCTL32_StrStrW
 363 stub StrStrIW
-364 stub StrSpnW
+364 stdcall StrSpnW(wstr wstr) COMCTL32_StrSpnW
 365 stub StrToIntW
 366 stub StrChrIA
 367 stub StrChrIW
diff --git a/relay32/gdi32.spec b/relay32/gdi32.spec
index 6a9dc1e5df6..d8e1d87f727 100644
--- a/relay32/gdi32.spec
+++ b/relay32/gdi32.spec
@@ -2,7 +2,7 @@ name	gdi32
 type	win32
 init	MAIN_GdiInit
 
-  0 stub AbortDoc
+  0 stdcall AbortDoc(long) AbortDoc32
   1 stdcall AbortPath(long) AbortPath32
   2 stdcall AddFontResourceA(str) AddFontResource32A
   3 stub AddFontResourceTracking
@@ -10,7 +10,7 @@ init	MAIN_GdiInit
   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
+  8 stdcall ArcTo(long long long long long long long long long) ArcTo32
   9 stdcall BeginPath(long) BeginPath32
  10 stdcall BitBlt(long long long long long long long long long) BitBlt32
  11 stub CancelDC
@@ -43,8 +43,8 @@ init	MAIN_GdiInit
  38 stdcall CreateDiscardableBitmap(long long long) CreateDiscardableBitmap32
  39 stdcall CreateEllipticRgn(long long long long) CreateEllipticRgn32
  40 stdcall CreateEllipticRgnIndirect(ptr) CreateEllipticRgnIndirect32
- 41 stdcall CreateEnhMetaFileA(long ptr ptr ptr) CreateEnhMetaFile32A
- 42 stub CreateEnhMetaFileW
+ 41 stdcall CreateEnhMetaFileA(long str ptr str) CreateEnhMetaFile32A
+ 42 stdcall CreateEnhMetaFileW(long wstr ptr wstr) CreateEnhMetaFile32W
  43 stdcall CreateFontA(long long long long long long long long long long long long long str) CreateFont32A
  44 stdcall CreateFontIndirectA(ptr) CreateFontIndirect32A
  45 stdcall CreateFontIndirectW(ptr) CreateFontIndirect32W
@@ -54,7 +54,7 @@ init	MAIN_GdiInit
  49 stdcall CreateICA(str str str ptr) CreateIC32A
  50 stdcall CreateICW(wstr wstr wstr ptr) CreateIC32W
  51 stdcall CreateMetaFileA(str) CreateMetaFile32A
- 52 stub CreateMetaFileW
+ 52 stdcall CreateMetaFileW(wstr) CreateMetaFile32W
  53 stdcall CreatePalette(ptr) CreatePalette32
  54 stdcall CreatePatternBrush(long) CreatePatternBrush32
  55 stdcall CreatePen(long long long) CreatePen32
@@ -182,7 +182,7 @@ init	MAIN_GdiInit
 177 stdcall GetEnhMetaFileDescriptionW(long long ptr) GetEnhMetaFileDescription32W
 178 stdcall GetEnhMetaFileHeader(long long ptr) GetEnhMetaFileHeader
 179 stdcall GetEnhMetaFilePaletteEntries (long long ptr) GetEnhMetaFilePaletteEntries
-180 stub GetEnhMetaFileW
+180 stdcall GetEnhMetaFileW(wstr) GetEnhMetaFile32W
 181 stdcall GetFontData(long long long ptr long) GetFontData32
 182 stdcall GetFontLanguageInfo(long) GetFontLanguageInfo32
 183 stub GetFontResourceInfo
@@ -210,7 +210,7 @@ init	MAIN_GdiInit
 205 stdcall GetObjectType(long) GetObjectType
 206 stdcall GetObjectW(long long ptr) GetObject32W
 207 stdcall GetOutlineTextMetricsA(long long ptr) GetOutlineTextMetrics32A
-208 stub GetOutlineTextMetricsW
+208 stdcall GetOutlineTextMetricsW(long long ptr) GetOutlineTextMetrics32W
 209 stdcall GetPaletteEntries(long long long ptr) GetPaletteEntries32
 210 stdcall GetPath(long ptr ptr long) GetPath32
 211 stdcall GetPixel(long long long) GetPixel32
@@ -243,7 +243,7 @@ init	MAIN_GdiInit
 238 stub GetTransform
 239 stdcall GetViewportExtEx(long ptr) GetViewportExtEx32
 240 stdcall GetViewportOrgEx(long ptr) GetViewportOrgEx32
-241 stub GetWinMetaFileBits
+241 stdcall GetWinMetaFileBits(long long ptr long long) GetWinMetaFileBits
 242 stdcall GetWindowExtEx(long ptr) GetWindowExtEx32
 243 stdcall GetWindowOrgEx(long ptr) GetWindowOrgEx32
 244 stdcall GetWorldTransform(long ptr) GetWorldTransform
@@ -254,7 +254,7 @@ init	MAIN_GdiInit
 249 stdcall LineTo(long long long) LineTo32
 250 stub LoadImageColorMatcherA
 251 stub LoadImageColorMatcherW
-252 stub MaskBlt
+252 stdcall MaskBlt(long long long long long long long long long long long long) MaskBlt32
 253 stdcall ModifyWorldTransform(long ptr long) ModifyWorldTransform
 254 stdcall MoveToEx(long long long ptr) MoveToEx32
 255 stdcall OffsetClipRgn(long long long) OffsetClipRgn32
@@ -279,7 +279,7 @@ init	MAIN_GdiInit
 274 stub PolyTextOutW
 275 stdcall Polygon(long ptr long) Polygon32
 276 stdcall Polyline(long ptr long) Polyline32
-277 stub PolylineTo
+277 stdcall PolylineTo(long ptr long) PolylineTo32
 278 stdcall PtInRegion(long long long) PtInRegion32
 279 stdcall PtVisible(long long long) PtVisible32
 280 stdcall RealizePalette(long) RealizePalette32
@@ -309,7 +309,7 @@ init	MAIN_GdiInit
 304 stdcall SetBitmapDimensionEx(long long long ptr) SetBitmapDimensionEx32
 305 stdcall SetBkColor(long long) SetBkColor32
 306 stdcall SetBkMode(long long) SetBkMode32
-307 stub SetBoundsRect
+307 stdcall SetBoundsRect(long ptr long) SetBoundsRect32
 308 stdcall SetBrushOrgEx(long long long ptr) SetBrushOrgEx
 309 stub SetColorAdjustment
 310 stub SetColorSpace
@@ -350,7 +350,7 @@ init	MAIN_GdiInit
 345 stdcall SetWindowOrgEx(long long long ptr) SetWindowOrgEx32
 346 stdcall SetWorldTransform(long ptr) SetWorldTransform
 347 stdcall StartDocA(long ptr) StartDoc32A
-348 stub StartDocW
+348 stdcall StartDocW(long ptr) StartDoc32W
 349 stdcall StartPage(long) StartPage32 
 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
diff --git a/relay32/kernel32.spec b/relay32/kernel32.spec
index 015027d5586..bf27de17e31 100644
--- a/relay32/kernel32.spec
+++ b/relay32/kernel32.spec
@@ -585,6 +585,7 @@ init	MAIN_KernelInit
 567 register RaiseException() RaiseException
 568 stdcall ReadConsoleA(long ptr long ptr ptr) ReadConsole32A
 569 stdcall ReadConsoleInputA(long ptr long ptr) ReadConsoleInput32A
+570 stdcall ReadConsoleInputW(long ptr long ptr) ReadConsoleInput32W 
 570 stub ReadConsoleInputW
 571 stub ReadConsoleOutputA
 572 stub ReadConsoleOutputAttribute
@@ -698,7 +699,7 @@ init	MAIN_KernelInit
 680 stdcall SleepEx(long long) SleepEx
 681 stdcall SuspendThread(long) SuspendThread
 682 stdcall SystemTimeToFileTime(ptr ptr) SystemTimeToFileTime
-683 stub SystemTimeToTzSpecificLocalTime
+683 stdcall SystemTimeToTzSpecificLocalTime (ptr ptr ptr) SystemTimeToTzSpecificLocalTime32
 684 stdcall TerminateProcess(long long) TerminateProcess
 685 stdcall TerminateThread(long long) TerminateThread
 686 stub Thread32First
@@ -722,8 +723,8 @@ init	MAIN_KernelInit
 704 stdcall UnlockFile(long long long long long) UnlockFile
 705 stub UnlockFileEx
 706 stdcall UnmapViewOfFile(ptr) UnmapViewOfFile
-707 stub UpdateResourceA
-708 stub UpdateResourceW
+707 stdcall UpdateResourceA(long str str long ptr long) UpdateResource32A
+708 stdcall UpdateResourceW(long wstr wstr long ptr long) UpdateResource32W
 709 stdcall VerLanguageNameA(long str long) VerLanguageName32A
 710 stdcall VerLanguageNameW(long wstr long) VerLanguageName32W
 711 stdcall VirtualAlloc(ptr long long long) VirtualAlloc
@@ -874,8 +875,8 @@ init	MAIN_KernelInit
 # NT 4.0 additions
 856 stub CancelIo
 857 stub CancelWaitableTimer
-858 stub CopyFileExA
-859 stub CopyFileExW
+858 stdcall CopyFileExA (str str ptr ptr ptr long) CopyFileEx32A
+859 stdcall CopyFileExW (wstr wstr ptr ptr ptr long) CopyFileEx32W
 860 stub CreateFiber
 861 stub CreateWaitableTimerA
 862 stub CreateWaitableTimerW
diff --git a/relay32/mpr.spec b/relay32/mpr.spec
index 067f99141e1..09fa6f4850e 100644
--- a/relay32/mpr.spec
+++ b/relay32/mpr.spec
@@ -53,10 +53,10 @@ type win32
 0050 stdcall WNetAddConnectionA(str str str) WNetAddConnection32A
 0051 stdcall WNetAddConnectionW(wstr wstr wstr) WNetAddConnection32W
 0052 stdcall WNetCachePassword(str long str long long) WNetCachePassword
-0053 stub WNetCancelConnection2A
-0054 stub WNetCancelConnection2W
-0055 stub WNetCancelConnectionA
-0056 stub WNetCancelConnectionW
+0053 stdcall WNetCancelConnection2A(str long long) WNetCancelConnection232A
+0054 stdcall WNetCancelConnection2W(wstr long long) WNetCancelConnection232W
+0055 stdcall WNetCancelConnectionA(str long) WNetCancelConnection32A
+0056 stdcall WNetCancelConnectionW(wstr long) WNetCancelConnection32W
 0057 stub WNetCloseEnum
 0058 stdcall WNetConnectionDialog1A(ptr) WNetConnectionDialog1_32A
 0059 stdcall WNetConnectionDialog1W(ptr) WNetConnectionDialog1_32W
@@ -87,7 +87,7 @@ type win32
 0084 stub WNetGetUniversalNameA
 0085 stub WNetGetUniversalNameW
 0086 stdcall WNetGetUserA(str ptr ptr) WNetGetUser32A
-0087 stub WNetGetUserW
+0087 stdcall WNetGetUserW(wstr wstr ptr) WNetGetUser32W
 0088 stub WNetLogoffA
 0089 stub WNetLogoffW
 0090 stub WNetLogonA
diff --git a/relay32/shell32.spec b/relay32/shell32.spec
index 1c86019bdf1..8e0a11376b1 100644
--- a/relay32/shell32.spec
+++ b/relay32/shell32.spec
@@ -224,7 +224,7 @@ init	Shell32LibMain
  216 stub ExtractVersionResource16W   # exported by name
  217 stub FindExeDlgProc   # exported by name
  218 stdcall FindExecutableA(ptr ptr ptr) FindExecutable32A   # exported by name
- 219 stub FindExecutableW   # exported by name
+ 219 stdcall FindExecutableW(wstr wstr wstr) FindExecutable32W   # exported by name
  220 stdcall FreeIconList(long) FreeIconList   # exported by name
  221 stub InternalExtractIconListA   # exported by name
  222 stub InternalExtractIconListW   # exported by name
@@ -300,7 +300,7 @@ init	Shell32LibMain
  291 stdcall ShellExecuteEx (long) ShellExecuteEx32
  292 stdcall ShellExecuteExA (long) ShellExecuteEx32A
  293 stdcall ShellExecuteExW (long) ShellExecuteEx32W
- 294 stub ShellExecuteW
+ 294 stdcall ShellExecuteW (long wstr wstr wstr wstr long) ShellExecute32W
  295 stub ShellHookProc   # exported by name
  296 stdcall Shell_NotifyIcon(long ptr) Shell_NotifyIcon
  297 stdcall Shell_NotifyIconA(long ptr) Shell_NotifyIconA
diff --git a/relay32/tapi32.spec b/relay32/tapi32.spec
index 449df0cb7a8..3f45edd27c7 100644
--- a/relay32/tapi32.spec
+++ b/relay32/tapi32.spec
@@ -53,7 +53,7 @@ type	win32
  50 stub    linePark
  51 stub    linePickup
  52 stub    linePrepareAddToConference
- 53 stub    lineRedirect
+ 53 stdcall lineRedirect(long ptr long) lineRedirect32
  54 stub    lineRegisterRequestRecipient
  55 stub    lineReleaseUserUserInfo
  56 stub    lineRemoveFromConference
@@ -113,5 +113,5 @@ type	win32
 110 stub    phoneShutdown
 111 stub    tapiGetLocationInfo
 112 stub    tapiRequestDrop
-113 stub    tapiRequestMakeCall
+113 stdcall tapiRequestMakeCall(str str str str) tapiRequestMakeCall32
 114 stub    tapiRequestMediaCall
diff --git a/relay32/user32.spec b/relay32/user32.spec
index 0109b932663..08e282fd10d 100644
--- a/relay32/user32.spec
+++ b/relay32/user32.spec
@@ -2,7 +2,7 @@ name	user32
 type	win32
 init	MAIN_UserInit
 
-  1 stub ActivateKeyboardLayout
+  1 stdcall ActivateKeyboardLayout(long long) ActivateKeyboardLayout32
   2 stdcall AdjustWindowRect(ptr long long) AdjustWindowRect32
   3 stdcall AdjustWindowRectEx(ptr long long long) AdjustWindowRectEx32
   4 stdcall AnyPopup() AnyPopup32
@@ -89,18 +89,18 @@ init	MAIN_UserInit
  85 stub CreateWindowStationA
  86 stdcall CreateWindowStationW(wstr long long ptr) CreateWindowStation32W
  87 stub DdeAbandonTransaction
- 88 stub DdeAccessData
+ 88 stdcall DdeAccessData(long ptr) DdeAccessData32
  89 stub DdeAddData
  90 stdcall DdeClientTransaction(ptr long long long long long long ptr) DdeClientTransaction32
- 91 stub DdeCmpStringHandles
+ 91 stdcall DdeCmpStringHandles(long long) DdeCmpStringHandles32
  92 stdcall DdeConnect(long long long ptr) DdeConnect32
  93 stdcall DdeConnectList(long long long long ptr) DdeConnectList32
- 94 stub DdeCreateDataHandle
+ 94 stdcall DdeCreateDataHandle(long ptr long long long long long) DdeCreateDataHandle32
  95 stdcall DdeCreateStringHandleA(long str long) DdeCreateStringHandle32A
  96 stdcall DdeCreateStringHandleW(long wstr long) DdeCreateStringHandle32W
  97 stdcall DdeDisconnect(long) DdeDisconnect32
  98 stdcall DdeDisconnectList(long) DdeDisconnectList32
- 99 stub DdeEnableCallback
+ 99 stdcall DdeEnableCallback(long long long) DdeEnableCallback32
 100 stdcall DdeFreeDataHandle(long) DdeFreeDataHandle32
 101 stdcall DdeFreeStringHandle(long long) DdeFreeStringHandle32
 102 stdcall DdeGetData(long ptr long long) DdeGetData32
@@ -114,12 +114,12 @@ init	MAIN_UserInit
 110 stdcall DdePostAdvise(long long long) DdePostAdvise32
 111 stub DdeQueryConvInfo
 112 stdcall DdeQueryNextServer(long long) DdeQueryNextServer32
-113 stub DdeQueryStringA
-114 stub DdeQueryStringW
+113 stdcall DdeQueryStringA(long long ptr long long) DdeQueryString32A
+114 stdcall DdeQueryStringW(long long ptr long long) DdeQueryString32W
 115 stdcall DdeReconnect(long) DdeReconnect
 116 stub DdeSetQualityOfService
 117 stub DdeSetUserHandle
-118 stub DdeUnaccessData
+118 stdcall DdeUnaccessData(long) DdeUnaccessData32
 119 stdcall DdeUninitialize(long) DdeUninitialize32
 120 stdcall DefDlgProcA(long long long long) DefDlgProc32A
 121 stdcall DefDlgProcW(long long long long) DefDlgProc32W
@@ -164,7 +164,7 @@ init	MAIN_UserInit
 160 stdcall DrawIconEx(long long long long long long long long long) DrawIconEx32
 161 stdcall DrawMenuBar(long) DrawMenuBar32
 162 stdcall DrawStateA(long long ptr long long long long long long long) DrawState32A
-163 stub DrawStateW
+163 stdcall DrawStateW(long long ptr long long long long long long long) DrawState32W
 164 stdcall DrawTextA(long str long ptr long) DrawText32A
 165 stdcall DrawTextExA(long str long ptr long ptr) DrawTextEx32A
 166 stdcall DrawTextExW(long wstr long ptr long ptr) DrawTextEx32W
@@ -368,8 +368,8 @@ init	MAIN_UserInit
 364 stdcall LoadIconW(long wstr) LoadIcon32W
 365 stdcall LoadImageA(long str long long long long) LoadImage32A
 366 stdcall LoadImageW(long wstr long long long long) LoadImage32W
-367 stub LoadKeyboardLayoutA
-368 stub LoadKeyboardLayoutW
+367 stdcall LoadKeyboardLayoutA(str long) LoadKeyboardLayout32A
+368 stdcall LoadKeyboardLayoutW(wstr long) LoadKeyboardLayout32W
 369 stdcall LoadLocalFonts() LoadLocalFonts
 370 stdcall LoadMenuA(long str) LoadMenu32A
 371 stdcall LoadMenuIndirectA(ptr) LoadMenuIndirect32A
@@ -462,7 +462,7 @@ init	MAIN_UserInit
 458 stdcall SendMessageTimeoutW(long long long long ptr ptr) SendMessageTimeout32W
 459 stdcall SendMessageW(long long long long) SendMessage32W
 460 stdcall SendNotifyMessageA(long long long long) SendNotifyMessage32A
-461 stub SendNotifyMessageW
+461 stdcall SendNotifyMessageW(long long long long) SendNotifyMessage32W
 462 stub ServerSetFunctionPointers
 463 stdcall SetActiveWindow(long) SetActiveWindow32
 464 stdcall SetCapture(long) SetCapture32
@@ -549,7 +549,7 @@ init	MAIN_UserInit
 545 stdcall TileWindows(long long ptr long ptr) TileWindows
 546 stdcall ToAscii(long long ptr ptr long) ToAscii32
 547 stub ToAsciiEx
-548 stub ToUnicode
+548 stdcall ToUnicode(long long ptr wstr long long) ToUnicode32
 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
diff --git a/relay32/winspool.spec b/relay32/winspool.spec
index 7de40087c43..a99a998639c 100644
--- a/relay32/winspool.spec
+++ b/relay32/winspool.spec
@@ -3,10 +3,10 @@ type	win32
 
 101 stub ADVANCEDSETUPDIALOG
 102 stub AbortPrinter
-103 stub AddFormA
-104 stub AddFormW
-105 stub AddJobA
-106 stub AddJobW
+103 stdcall AddFormA(long long ptr) AddForm32A
+104 stdcall AddFormW(long long ptr) AddForm32W
+105 stdcall AddJobA(long long ptr long ptr) AddJob32A
+106 stdcall AddJobW(long long ptr long ptr) AddJob32W
 107 stdcall AddMonitorA(str long ptr) AddMonitor32A
 108 stub AddMonitorW
 109 stub AddPortA
@@ -17,24 +17,24 @@ type	win32
 114 stub AddPrintProcessorW
 115 stub AddPrintProvidorA
 116 stub AddPrintProvidorW
-117 stub AddPrinterA
+117 stdcall AddPrinterA(str long ptr) AddPrinter32A
 118 stub AddPrinterConnectionA
 119 stub AddPrinterConnectionW
 120 stub AddPrinterDriverA
 121 stub AddPrinterDriverW
-122 stub AddPrinterW
+122 stdcall AddPrinterW(wstr long ptr) AddPrinter32W
 123 stub AdvancedDocumentPropertiesA
 124 stub AdvancedDocumentPropertiesW
 125 stub AdvancedSetupDialog
-126 stub ClosePrinter
+126 stdcall ClosePrinter(long) ClosePrinter32
 127 stub ConfigurePortA
 128 stub ConfigurePortW
 129 stub ConnectToPrinterDlg
 130 stub CreatePrinterIC
 131 stub DEVICECAPABILITIES
 132 stub DEVICEMODE
-133 stub DeleteFormA
-134 stub DeleteFormW
+133 stdcall DeleteFormA(long str) DeleteForm32A
+134 stdcall DeleteFormW(long wstr) DeleteForm32W
 135 stdcall DeleteMonitorA(str str str) DeleteMonitor32A
 136 stub DeleteMonitorW
 137 stdcall DeletePortA(str long str) DeletePort32A
@@ -43,7 +43,7 @@ type	win32
 140 stub DeletePrintProcessorW
 141 stub DeletePrintProvidorA
 142 stub DeletePrintProvidorW
-143 stub DeletePrinter
+143 stdcall DeletePrinter(long) DeletePrinter32
 144 stub DeletePrinterConnectionA
 145 stub DeletePrinterConnectionW
 146 stdcall DeletePrinterDriverA(str str str) DeletePrinterDriver32A
@@ -52,7 +52,7 @@ type	win32
 149 stub DevQueryPrint
 150 stub DeviceCapabilities
 151 stdcall DeviceCapabilitiesA(str str long ptr ptr) DeviceCapabilities32A
-152 stub DeviceCapabilitiesW
+152 stdcall DeviceCapabilitiesW(wstr wstr long wstr ptr) DeviceCapabilities32W
 153 stub DeviceMode
 154 stub DocumentEvent
 155 stdcall DocumentPropertiesA(long long ptr ptr ptr long) DocumentProperties32A
@@ -81,20 +81,20 @@ type	win32
 178 stub FindFirstPrinterChangeNotification
 179 stub FindNextPrinterChangeNotification
 180 stub FreePrinterNotifyInfo
-181 stub GetFormA
-182 stub GetFormW
+181 stdcall GetFormA(long str long ptr long ptr) GetForm32A
+182 stdcall GetFormW(long wstr long ptr long ptr) GetForm32W
 183 stub GetJobA
 184 stub GetJobW
 185 stub GetPrintProcessorDirectoryA
 186 stub GetPrintProcessorDirectoryW
-187 stub GetPrinterA
+187 stdcall GetPrinterA(long long ptr long ptr) GetPrinter32A
 188 stub GetPrinterDataA
 189 stub GetPrinterDataW
-190 stub GetPrinterDriverA
+190 stdcall GetPrinterDriverA(long str long ptr long ptr) GetPrinterDriver32A
 191 stub GetPrinterDriverDirectoryA
 192 stub GetPrinterDriverDirectoryW
-193 stub GetPrinterDriverW
-194 stub GetPrinterW
+193 stdcall GetPrinterDriverW(long str long ptr long ptr) GetPrinterDriver32W
+194 stdcall GetPrinterW(long long ptr long ptr) GetPrinter32W
 195 stub InitializeDll
 196 stdcall OpenPrinterA(str ptr ptr) OpenPrinter32A
 197 stdcall OpenPrinterW(wstr ptr ptr) OpenPrinter32W
@@ -102,19 +102,19 @@ type	win32
 199 stub PrinterMessageBoxA
 200 stub PrinterMessageBoxW
 201 stub PrinterProperties
-202 stub ReadPrinter
-203 stub ResetPrinterA
-204 stub ResetPrinterW
+202 stdcall ReadPrinter(long ptr long ptr) ReadPrinter32
+203 stdcall ResetPrinterA(long ptr) ResetPrinter32A
+204 stdcall ResetPrinterW(long ptr) ResetPrinter32W
 205 stub ScheduleJob
 206 stub SetAllocFailCount
-207 stub SetFormA
-208 stub SetFormW
-209 stub SetJobA
-210 stub SetJobW
-211 stub SetPrinterA
+207 stdcall SetFormA(long str long ptr) SetForm32A
+208 stdcall SetFormW(long wstr long ptr) SetForm32W
+209 stdcall SetJobA(long long long ptr long) SetJob32A
+210 stdcall SetJobW(long long long ptr long) SetJob32W
+211 stdcall SetPrinterA(long long ptr long) SetPrinter32A
 212 stub SetPrinterDataA
 213 stub SetPrinterDataW
-214 stub SetPrinterW
+214 stdcall SetPrinterW(long long ptr long) SetPrinter32W
 215 stub SpoolerDevQueryPrintW
 216 stub SpoolerInit
 217 stub StartDocDlgA
@@ -123,4 +123,4 @@ type	win32
 220 stub StartDocPrinterW
 221 stub StartPagePrinter
 222 stub WaitForPrinterChange
-223 stub WritePrinter
+223 stdcall WritePrinter(long ptr long ptr) WritePrinter32
diff --git a/win32/console.c b/win32/console.c
index 089416c0711..5f0b9e7a41e 100644
--- a/win32/console.c
+++ b/win32/console.c
@@ -1077,7 +1077,7 @@ BOOL32 WINAPI ReadConsole32W( HANDLE32 hConsoleInput,
 
 
 /******************************************************************************
- * ReadConsoleInputA [KERNEL32.569]  Reads data from a console
+ * ReadConsoleInput32A [KERNEL32.569]  Reads data from a console
  *
  * PARAMS
  *    hConsoleInput        [I] Handle to console input buffer
@@ -1180,6 +1180,17 @@ BOOL32 WINAPI SetConsoleTitle32W( LPCWSTR title )
     return ret;
 }
 
+/***********************************************************************
+ *            ReadConsoleInput32W   (KERNEL32.570)
+ */
+BOOL32 WINAPI ReadConsoleInput32W(HANDLE32 hConsoleInput,
+                                LPINPUT_RECORD lpBuffer,
+                                DWORD nLength, LPDWORD lpNumberOfEventsRead)
+{
+    FIXME(console, "(%d,%p,%ld,%p): stub\n",hConsoleInput, lpBuffer, nLength,
+          lpNumberOfEventsRead);
+    return 0;
+}
 
 /***********************************************************************
  *            FlushConsoleInputBuffer   (KERNEL32.132)
diff --git a/win32/kernel32.c b/win32/kernel32.c
index b90a01a4583..5faf0d34c79 100644
--- a/win32/kernel32.c
+++ b/win32/kernel32.c
@@ -22,6 +22,7 @@
 #include "debug.h"
 #include "flatthunk.h"
 #include "syslevel.h"
+#include "winerror.h"
 
 
 /***********************************************************************
@@ -1104,3 +1105,38 @@ REGS_ENTRYPOINT(K32Thk1632Epilog)
    }
 }
 
+/***********************************************************************
+ *           UpdateResource32A                 (KERNEL32.707)
+ */
+BOOL32 WINAPI UpdateResource32A(
+  HANDLE32  hUpdate,
+  LPCSTR  lpType,
+  LPCSTR  lpName,
+  WORD    wLanguage,
+  LPVOID  lpData,
+  DWORD   cbData) {
+
+  FIXME(win32, ": stub\n");
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return FALSE;
+}
+
+/***********************************************************************
+ *           UpdateResource32W                 (KERNEL32.708)
+ */
+BOOL32 WINAPI UpdateResource32W(
+  HANDLE32  hUpdate,
+  LPCWSTR lpType,
+  LPCWSTR lpName,
+  WORD    wLanguage,
+  LPVOID  lpData,
+  DWORD   cbData) {
+
+  FIXME(win32, ": stub\n");
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return FALSE;
+}
+
+
+
+
diff --git a/win32/time.c b/win32/time.c
index fc82034710d..dbcca6780d3 100644
--- a/win32/time.c
+++ b/win32/time.c
@@ -138,3 +138,16 @@ BOOL32 WINAPI SetTimeZoneInformation(const LPTIME_ZONE_INFORMATION tzinfo)
 VOID WINAPI GetSystemTimeAsFileTime(LPFILETIME systemtimeAsfiletime) {
 	DOSFS_UnixTimeToFileTime(time(NULL),systemtimeAsfiletime,0);
 }
+
+/***********************************************************************
+ *              SystemTimeToTzSpecificLocalTime32  (KERNEL32.683)
+ */
+BOOL32 WINAPI SystemTimeToTzSpecificLocalTime32(
+  LPTIME_ZONE_INFORMATION lpTimeZoneInformation,
+  LPSYSTEMTIME lpUniversalTime,
+  LPSYSTEMTIME lpLocalTime) {
+
+  FIXME(win32, ":stub\n"); 
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 
+       return FALSE;
+}
diff --git a/windows/input.c b/windows/input.c
index e38e90e77ea..f82585bcff7 100644
--- a/windows/input.c
+++ b/windows/input.c
@@ -791,6 +791,17 @@ HKL32 WINAPI GetKeyboardLayout(DWORD dwLayout)
         return layout;
 }
 
+/**********************************************************************
+ *           ActivateKeyboardLayout32      (USER32.1)
+ */
+HKL32 WINAPI ActivateKeyboardLayout32(HKL32 hLayout, UINT32 flags)
+{
+    FIXME(keyboard, "(%d, %d): stub\n", hLayout, flags);
+
+    return 0;
+}
+
+
 /***********************************************************************
  *           GetKeyboardLayoutList		(USER32.251)
  * FIXME
@@ -820,3 +831,36 @@ BOOL32 WINAPI UnregisterHotKey(HWND32 hwnd,INT32 id) {
 	return TRUE;
 }
 
+
+/***********************************************************************
+ *           ToUnicode32                       (USER32.548)
+ */
+INT32 WINAPI ToUnicode32(
+  UINT32 wVirtKey,
+  UINT32 wScanCode,
+  PBYTE  lpKeyState,
+  LPWSTR pwszBuff,
+  int    cchBuff,
+  UINT32 wFlags) {
+
+       FIXME(keyboard,": stub\n");
+       return 0;
+}
+
+/***********************************************************************
+ *           LoadKeyboardLayout32A                (USER32.367)
+ */
+HKL32 WINAPI LoadKeyboardLayout32A(LPCSTR pwszKLID, UINT32 Flags)
+{
+  FIXME(keyboard, "%s, %d): stub\n", pwszKLID, Flags);
+  return 0; 
+}
+
+/***********************************************************************
+ *           LoadKeyboardLayout32W                (USER32.368)
+ */
+HKL32 WINAPI LoadKeyboardLayout32W(LPCWSTR pwszKLID, UINT32 Flags)
+{
+  FIXME(keyboard, "%p, %d): stub\n", pwszKLID, Flags);
+  return 0;
+}
diff --git a/windows/message.c b/windows/message.c
index c7ad72d35bd..db0e657ca03 100644
--- a/windows/message.c
+++ b/windows/message.c
@@ -1981,6 +1981,17 @@ LONG WINAPI SendNotifyMessage32A(HWND32 hwnd,UINT32 msg,WPARAM32 wParam,LPARAM l
 	}
 	return ret;
 }
+
+/***********************************************************************
+ *           SendNotifyMessage32W    (USER32.461)
+ */
+BOOL32 WINAPI SendNotifyMessage32W(HWND32 hWnd, UINT32 msg, WPARAM32 wParam,
+                                   LPARAM lParam)
+{
+  FIXME(msg, "(%04x,%08x,%08x,%08lx): stub\n", hWnd, msg, wParam, lParam);
+  return 0; 
+}
+
 /***********************************************************************
  *           SendMessageCallBack32A
  * FIXME: It's like PostMessage. The callback gets called when the message
-- 
GitLab