diff --git a/include/animate.h b/include/animate.h
index e988dd8..cfde3f2 100644
--- a/include/animate.h
+++ b/include/animate.h
@@ -11,7 +11,7 @@
 typedef struct tagANIMATE_INFO
 {
     LPVOID  lpAvi;   /* pointer to avi data */
-    HFILE32 hFile;   /* handle to avi file */
+    HFILE hFile;   /* handle to avi file */
 } ANIMATE_INFO;
 
 
diff --git a/include/bitmap.h b/include/bitmap.h
index 7336e82..35b58ea 100644
--- a/include/bitmap.h
+++ b/include/bitmap.h
@@ -48,8 +48,8 @@
 typedef struct tagBITMAPOBJ
 {
     GDIOBJHDR   header;
-    BITMAP32    bitmap;
-    SIZE32      size;   /* For SetBitmapDimension() */
+    BITMAP    bitmap;
+    SIZE      size;   /* For SetBitmapDimension() */
 
     DDBITMAP	*DDBitmap;
 
@@ -60,23 +60,23 @@
 
   /* objects/bitmap.c */
 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 INT32   BITMAP_GetPadding( INT32 width, INT32 depth );
-extern INT32   BITMAP_GetWidthBytes( INT32 width, INT32 depth );
-extern HBITMAP32 BITMAP_LoadBitmap32W(HINSTANCE32 instance,LPCWSTR name,
-  UINT32 loadflags);
-extern HBITMAP32 BITMAP_CopyBitmap( HBITMAP32 hbitmap );
+extern INT   BITMAP_GetObject( BITMAPOBJ * bmp, INT count, LPVOID buffer );
+extern BOOL  BITMAP_DeleteObject( HBITMAP16 hbitmap, BITMAPOBJ * bitmap );
+extern INT   BITMAP_GetPadding( INT width, INT depth );
+extern INT   BITMAP_GetWidthBytes( INT width, INT depth );
+extern HBITMAP BITMAP_LoadBitmapW(HINSTANCE instance,LPCWSTR name,
+  UINT loadflags);
+extern HBITMAP BITMAP_CopyBitmap( HBITMAP hbitmap );
 
   /* objects/dib.c */
 extern int DIB_GetDIBWidthBytes( int width, int depth );
 extern int DIB_BitmapInfoSize( BITMAPINFO * info, WORD coloruse );
 extern int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, DWORD *width,
                               int *height, WORD *bpp, WORD *compr );
-extern void DIB_UpdateDIBSection( DC *dc, BOOL32 toDIB );
+extern void DIB_UpdateDIBSection( DC *dc, BOOL toDIB );
 extern void DIB_DeleteDIBSection( BITMAPOBJ *bmp );
 extern void DIB_SelectDIBSection( DC *dc, BITMAPOBJ *bmp );
-extern void DIB_FixColorsToLoadflags(BITMAPINFO * bmi, UINT32 loadflags,
+extern void DIB_FixColorsToLoadflags(BITMAPINFO * bmi, UINT loadflags,
   BYTE pix);
 
 #endif  /* __WINE_BITMAP_H */
diff --git a/include/brush.h b/include/brush.h
index 8c136d9..5ca8b58 100644
--- a/include/brush.h
+++ b/include/brush.h
@@ -13,13 +13,13 @@
 typedef struct
 {
     GDIOBJHDR   header;
-    LOGBRUSH32  logbrush;
+    LOGBRUSH  logbrush;
 } BRUSHOBJ;
 
 #define NB_HATCH_STYLES  6
 
 extern INT16 BRUSH_GetObject16( BRUSHOBJ * brush, INT16 count, LPSTR buffer );
-extern INT32 BRUSH_GetObject32( BRUSHOBJ * brush, INT32 count, LPSTR buffer );
-extern BOOL32 BRUSH_DeleteObject( HBRUSH16 hbrush, BRUSHOBJ * brush );
+extern INT BRUSH_GetObject( BRUSHOBJ * brush, INT count, LPSTR buffer );
+extern BOOL BRUSH_DeleteObject( HBRUSH16 hbrush, BRUSHOBJ * brush );
 
 #endif  /* __WINE_BRUSH_H */
diff --git a/include/button.h b/include/button.h
index 377f1b2..42d29f7 100644
--- a/include/button.h
+++ b/include/button.h
@@ -28,7 +28,7 @@
 
 #define BUTTON_STATE(hwnd)     ((WIN_FindWndPtr(hwnd))->wExtra[0])
 
-extern LRESULT WINAPI ButtonWndProc( HWND32 hWnd, UINT32 uMsg,
-                                     WPARAM32 wParam, LPARAM lParam );
+extern LRESULT WINAPI ButtonWndProc( HWND hWnd, UINT uMsg,
+                                     WPARAM wParam, LPARAM lParam );
 
 #endif  /* __WINE_BUTTON_H */
diff --git a/include/cache.h b/include/cache.h
index aa10b03..32d52dd 100644
--- a/include/cache.h
+++ b/include/cache.h
@@ -11,7 +11,7 @@
 
 #include "wintypes.h"
 
-HBRUSH32  CACHE_GetPattern55AABrush(void);
-HBITMAP32 CACHE_GetPattern55AABitmap(void);
+HBRUSH  CACHE_GetPattern55AABrush(void);
+HBITMAP CACHE_GetPattern55AABitmap(void);
 
 #endif /* __WINE_CACHE_H */
diff --git a/include/callback.h b/include/callback.h
index fe0728c..64e925c 100644
--- a/include/callback.h
+++ b/include/callback.h
@@ -20,9 +20,9 @@
 
 typedef struct
 {
-    LONG (CALLBACK *CallRegisterShortProc)( CONTEXT *, INT32 );
-    LONG (CALLBACK *CallRegisterLongProc)( CONTEXT *, INT32 );
-    BOOL32 (CALLBACK *CallTaskRescheduleProc)(void);
+    LONG (CALLBACK *CallRegisterShortProc)( CONTEXT *, INT );
+    LONG (CALLBACK *CallRegisterLongProc)( CONTEXT *, INT );
+    BOOL (CALLBACK *CallTaskRescheduleProc)(void);
     VOID (CALLBACK *CallFrom16WndProc)(void);
     LRESULT (CALLBACK *CallWndProc)( WNDPROC16, HWND16, UINT16,
                                      WPARAM16, LPARAM );
@@ -40,7 +40,7 @@
     WORD (CALLBACK *CallLocalNotifyFunc)( FARPROC16, WORD, HLOCAL16, WORD );
     HGLOBAL16 (CALLBACK *CallResourceHandlerProc)( FARPROC16, HGLOBAL16, HMODULE16, HRSRC16 );
     DWORD (CALLBACK *CallWOWCallbackProc)( FARPROC16, DWORD );
-    BOOL32 (CALLBACK *CallWOWCallback16Ex)( FARPROC16, DWORD, DWORD, LPVOID, 
+    BOOL (CALLBACK *CallWOWCallback16Ex)( FARPROC16, DWORD, DWORD, LPVOID, 
                                             LPDWORD );
     LRESULT (CALLBACK *CallASPIPostProc)( FARPROC16, SEGPTR );
     /* Following are the graphics driver callbacks */
@@ -75,54 +75,54 @@
 {
     BOOL16 WINAPI (*PeekMessage16)( LPMSG16 msg, HWND16 hwnd, 
                                     UINT16 first, UINT16 last, UINT16 flags );
-    BOOL32 WINAPI (*PeekMessage32A)( LPMSG32 lpmsg, HWND32 hwnd,
-                                     UINT32 min, UINT32 max, UINT32 wRemoveMsg );
-    BOOL32 WINAPI (*PeekMessage32W)( LPMSG32 lpmsg, HWND32 hwnd, 
-                                     UINT32 min, UINT32 max, UINT32 wRemoveMsg );
+    BOOL WINAPI (*PeekMessageA)( LPMSG lpmsg, HWND hwnd,
+                                     UINT min, UINT max, UINT wRemoveMsg );
+    BOOL WINAPI (*PeekMessageW)( LPMSG lpmsg, HWND hwnd, 
+                                     UINT min, UINT max, UINT wRemoveMsg );
 
     BOOL16 WINAPI (*GetMessage16)( SEGPTR msg, HWND16 hwnd, 
                                    UINT16 first, UINT16 last );
-    BOOL32 WINAPI (*GetMessage32A)( MSG32* lpmsg, HWND32 hwnd, 
-                                    UINT32 min, UINT32 max );
-    BOOL32 WINAPI (*GetMessage32W)( MSG32* lpmsg, HWND32 hwnd, 
-                                    UINT32 min, UINT32 max );
+    BOOL WINAPI (*GetMessageA)( MSG* lpmsg, HWND hwnd, 
+                                    UINT min, UINT max );
+    BOOL WINAPI (*GetMessageW)( MSG* lpmsg, HWND hwnd, 
+                                    UINT min, UINT max );
 
     LRESULT WINAPI (*SendMessage16)( HWND16 hwnd, UINT16 msg, 
                                      WPARAM16 wParam, LPARAM lParam );
-    LRESULT WINAPI (*SendMessage32A)( HWND32 hwnd, UINT32 msg, 
-                                      WPARAM32 wParam, LPARAM lParam );
-    LRESULT WINAPI (*SendMessage32W)( HWND32 hwnd, UINT32 msg, 
-                                      WPARAM32 wParam, LPARAM lParam );
+    LRESULT WINAPI (*SendMessageA)( HWND hwnd, UINT msg, 
+                                      WPARAM wParam, LPARAM lParam );
+    LRESULT WINAPI (*SendMessageW)( HWND hwnd, UINT msg, 
+                                      WPARAM wParam, LPARAM lParam );
 
     BOOL16 WINAPI (*PostMessage16)( HWND16 hwnd, UINT16 message, 
                                     WPARAM16 wParam, LPARAM lParam );
-    BOOL32 WINAPI (*PostMessage32A)( HWND32 hwnd, UINT32 message, 
-                                     WPARAM32 wParam, LPARAM lParam );
-    BOOL32 WINAPI (*PostMessage32W)( HWND32 hwnd, UINT32 message, 
-                                     WPARAM32 wParam, LPARAM lParam );
+    BOOL WINAPI (*PostMessageA)( HWND hwnd, UINT message, 
+                                     WPARAM wParam, LPARAM lParam );
+    BOOL WINAPI (*PostMessageW)( HWND hwnd, UINT message, 
+                                     WPARAM wParam, LPARAM lParam );
 
     BOOL16 WINAPI (*PostAppMessage16)( HTASK16 hTask, UINT16 message, 
                                        WPARAM16 wParam, LPARAM lParam );
-    BOOL32 WINAPI (*PostThreadMessage32A)( DWORD idThread , UINT32 message,
-                                           WPARAM32 wParam, LPARAM lParam );
-    BOOL32 WINAPI (*PostThreadMessage32W)( DWORD idThread , UINT32 message,
-                                           WPARAM32 wParam, LPARAM lParam );
+    BOOL WINAPI (*PostThreadMessageA)( DWORD idThread , UINT message,
+                                           WPARAM wParam, LPARAM lParam );
+    BOOL WINAPI (*PostThreadMessageW)( DWORD idThread , UINT message,
+                                           WPARAM wParam, LPARAM lParam );
 
     BOOL16 WINAPI (*TranslateMessage16)( const MSG16 *msg );
-    BOOL32 WINAPI (*TranslateMessage32)( const MSG32 *msg );
+    BOOL WINAPI (*TranslateMessage)( const MSG *msg );
 
     LONG WINAPI (*DispatchMessage16)( const MSG16* msg );
-    LONG WINAPI (*DispatchMessage32A)( const MSG32* msg );
-    LONG WINAPI (*DispatchMessage32W)( const MSG32* msg );
+    LONG WINAPI (*DispatchMessageA)( const MSG* msg );
+    LONG WINAPI (*DispatchMessageW)( const MSG* msg );
 
     BOOL16 WINAPI (*RedrawWindow16)( HWND16 hwnd, const RECT16 *rectUpdate,
                                      HRGN16 hrgnUpdate, UINT16 flags );
 
-    BOOL32 WINAPI (*RedrawWindow32)( HWND32 hwnd, const RECT32 *rectUpdate,
-                                     HRGN32 hrgnUpdate, UINT32 flags );
+    BOOL WINAPI (*RedrawWindow)( HWND hwnd, const RECT *rectUpdate,
+                                     HRGN hrgnUpdate, UINT flags );
 
-    HQUEUE16 WINAPI (*InitThreadInput)( WORD unknown, WORD flags );
-    void WINAPI (*UserYield)( void );
+    HQUEUE16 WINAPI (*InitThreadInput16)( WORD unknown, WORD flags );
+    void WINAPI (*UserYield16)( void );
     
 }  CALLOUT_TABLE;
 
diff --git a/include/cdrom.h b/include/cdrom.h
index 0c34054..dcec85b 100644
--- a/include/cdrom.h
+++ b/include/cdrom.h
@@ -58,8 +58,8 @@
 int	CDAUDIO_Pause(WINE_CDAUDIO* wcda, int pauseOn);
 int	CDAUDIO_SetDoor(WINE_CDAUDIO* wcda, int open);
 UINT16 	CDAUDIO_GetNumberOfTracks(WINE_CDAUDIO* wcda);
-BOOL32 	CDAUDIO_GetTracksInfo(WINE_CDAUDIO* wcda);
-BOOL32	CDAUDIO_GetCDStatus(WINE_CDAUDIO* wcda);
+BOOL 	CDAUDIO_GetTracksInfo(WINE_CDAUDIO* wcda);
+BOOL	CDAUDIO_GetCDStatus(WINE_CDAUDIO* wcda);
 
 #define CDFRAMES_PERSEC 		75
 #define CDFRAMES_PERMIN 		4500
diff --git a/include/class.h b/include/class.h
index 8d4ade6..8fac41c 100644
--- a/include/class.h
+++ b/include/class.h
@@ -17,16 +17,16 @@
 typedef struct tagCLASS
 {
     struct tagCLASS *next;          /* Next class */
-    UINT32           magic;         /* Magic number */
-    UINT32           cWindows;      /* Count of existing windows */
-    UINT32           style;         /* Class style */
+    UINT           magic;         /* Magic number */
+    UINT           cWindows;      /* Count of existing windows */
+    UINT           style;         /* Class style */
     HWINDOWPROC      winproc;       /* Window procedure */ 
-    INT32            cbClsExtra;    /* Class extra bytes */
-    INT32            cbWndExtra;    /* Window extra bytes */
+    INT            cbClsExtra;    /* Class extra bytes */
+    INT            cbWndExtra;    /* Window extra bytes */
     LPSTR            menuNameA;     /* Default menu name (ASCII string) */
     LPWSTR           menuNameW;     /* Default menu name (Unicode) */
     struct tagDCE   *dce;           /* Class DCE (if CS_CLASSDC) */
-    HINSTANCE32      hInstance;     /* Module that created the task */
+    HINSTANCE      hInstance;     /* Module that created the task */
     HICON16          hIcon;         /* Default icon */
     HICON16          hIconSm;       /* Default small icon */
     HCURSOR16        hCursor;       /* Default cursor */
@@ -40,6 +40,6 @@
 extern void CLASS_DumpClass( CLASS *class );
 extern void CLASS_WalkClasses(void);
 extern void CLASS_FreeModuleClasses( HMODULE16 hModule );
-extern CLASS *CLASS_FindClassByAtom( ATOM atom, HINSTANCE32 hinstance );
+extern CLASS *CLASS_FindClassByAtom( ATOM atom, HINSTANCE hinstance );
 
 #endif  /* __WINE_CLASS_H */
diff --git a/include/clipboard.h b/include/clipboard.h
index ac00b97..f17b467 100644
--- a/include/clipboard.h
+++ b/include/clipboard.h
@@ -4,30 +4,30 @@
 #include "win.h"
 #include "wintypes.h"
 
-typedef struct tagCLIPFORMAT {
+typedef struct tagWINE_CLIPFORMAT {
     WORD	wFormatID;
     WORD	wRefCount;
     WORD	wDataPresent;
     LPSTR	Name;
-    HANDLE32	hData32;
+    HANDLE	hData32;
     DWORD	BufSize;
-    struct tagCLIPFORMAT *PrevFormat;
-    struct tagCLIPFORMAT *NextFormat;
+    struct tagWINE_CLIPFORMAT *PrevFormat;
+    struct tagWINE_CLIPFORMAT *NextFormat;
     HANDLE16    hData16;
-} CLIPFORMAT, *LPCLIPFORMAT;
+} WINE_CLIPFORMAT, *LPWINE_CLIPFORMAT;
 
 typedef struct _CLIPBOARD_DRIVER
 {
     void (*pEmptyClipboard)(void);
-    void (*pSetClipboardData)(UINT32);
-    BOOL32 (*pRequestSelection)(void);
-    void (*pResetOwner)(WND *, BOOL32);
+    void (*pSetClipboardData)(UINT);
+    BOOL (*pRequestSelection)(void);
+    void (*pResetOwner)(WND *, BOOL);
 } CLIPBOARD_DRIVER;
 
 CLIPBOARD_DRIVER *CLIPBOARD_GetDriver(void);
 
 extern void CLIPBOARD_ResetLock(HQUEUE16 hqRef, HQUEUE16 hqNew);
-extern void CLIPBOARD_DeleteRecord(LPCLIPFORMAT lpFormat, BOOL32 bChange);
-extern BOOL32 CLIPBOARD_IsPresent(WORD wFormat);
+extern void CLIPBOARD_DeleteRecord(LPWINE_CLIPFORMAT lpFormat, BOOL bChange);
+extern BOOL CLIPBOARD_IsPresent(WORD wFormat);
 
 #endif /* __WINE_CLIPBOARD_H */
diff --git a/include/color.h b/include/color.h
index d58f7b3..4907ab2 100644
--- a/include/color.h
+++ b/include/color.h
@@ -14,20 +14,20 @@
 #define PC_SYS_RESERVED 0x40		/* system palentry is not to be mapped to */
 #define PC_SYS_MAPPED   0x10		/* logical palentry is a direct alias for system palentry */
 
-extern BOOL32     COLOR_Init(void);
+extern BOOL     COLOR_Init(void);
 extern void	  COLOR_Cleanup(void);
 extern COLORREF	  COLOR_ToLogical(int pixel);
 extern int 	  COLOR_ToPhysical( DC *dc, COLORREF color );
-extern int 	  COLOR_SetMapping( PALETTEOBJ* pal, UINT32 uStart, UINT32 uNum, BOOL32 mapOnly );
-extern BOOL32 	  COLOR_IsSolid( COLORREF color );
+extern int 	  COLOR_SetMapping( PALETTEOBJ* pal, UINT uStart, UINT uNum, BOOL mapOnly );
+extern BOOL 	  COLOR_IsSolid( COLORREF color );
 extern UINT16	  COLOR_GetSystemPaletteSize(void);
 extern UINT16	  COLOR_GetSystemPaletteFlags(void);
 extern const PALETTEENTRY* COLOR_GetSystemPaletteTemplate(void);
-extern BOOL32	  COLOR_GetMonoPlane( int* );
+extern BOOL	  COLOR_GetMonoPlane( int* );
 
 extern COLORREF	  COLOR_LookupNearestColor( PALETTEENTRY*, int, COLORREF );
-extern int        COLOR_PaletteLookupPixel( PALETTEENTRY*, int, int* , COLORREF, BOOL32 );
-extern COLORREF   COLOR_GetSystemPaletteEntry(UINT32);
+extern int        COLOR_PaletteLookupPixel( PALETTEENTRY*, int, int* , COLORREF, BOOL );
+extern COLORREF   COLOR_GetSystemPaletteEntry(UINT);
 extern int COLOR_LookupSystemPixel(COLORREF col);
 
 extern int 	COLOR_mapEGAPixel[16];
diff --git a/include/combo.h b/include/combo.h
index 3cf3b6b..0e4f157 100644
--- a/include/combo.h
+++ b/include/combo.h
@@ -28,17 +28,17 @@
 typedef struct
 {
    WND*    	self;
-   HWND32  	owner;
-   UINT32  	dwStyle;
-   HWND32  	hWndEdit;
-   HWND32  	hWndLBox;
-   UINT32  	wState;
-   HFONT32 	hFont;
-   RECT32  	RectCombo;
-   RECT32  	RectEdit;
-   RECT32  	RectButton;
-   INT32   	droppedWidth;		/* last two are not used unless set */
-   INT32   	editHeight;		/* explicitly */
+   HWND  	owner;
+   UINT  	dwStyle;
+   HWND  	hWndEdit;
+   HWND  	hWndLBox;
+   UINT  	wState;
+   HFONT 	hFont;
+   RECT  	RectCombo;
+   RECT  	RectEdit;
+   RECT  	RectButton;
+   INT   	droppedWidth;		/* last two are not used unless set */
+   INT   	editHeight;		/* explicitly */
 } HEADCOMBO,*LPHEADCOMBO;
 
 /*
@@ -51,9 +51,9 @@
 #define CB_HASSTRINGS( lphc ) ((lphc)->dwStyle & CBS_HASSTRINGS)
 #define CB_HWND( lphc )       ((lphc)->self->hwndSelf)
 
-BOOL32 	COMBO_FlipListbox( LPHEADCOMBO, BOOL32 );
-HWND32 	COMBO_GetLBWindow( WND* );
-LRESULT COMBO_Directory( LPHEADCOMBO, UINT32, LPSTR, BOOL32 );
+BOOL 	COMBO_FlipListbox( LPHEADCOMBO, BOOL );
+HWND 	COMBO_GetLBWindow( WND* );
+LRESULT COMBO_Directory( LPHEADCOMBO, UINT, LPSTR, BOOL );
 
 #endif /* __WINE_COMBO_H */
 
diff --git a/include/comboex.h b/include/comboex.h
index 26fb625..338b29a 100644
--- a/include/comboex.h
+++ b/include/comboex.h
@@ -11,7 +11,7 @@
 typedef struct tagCOMBOEX_INFO
 {
     HIMAGELIST himl;
-    HWND32     hwndCombo;
+    HWND     hwndCombo;
     DWORD      dwExtStyle;
 
 
diff --git a/include/commctrl.h b/include/commctrl.h
index 990b05e..91d2fde 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -31,8 +31,8 @@
 extern "C" {
 #endif
 
-BOOL32 WINAPI ShowHideMenuCtl (HWND32, UINT32, LPINT32);
-VOID WINAPI GetEffectiveClientRect (HWND32, LPRECT32, LPINT32);
+BOOL WINAPI ShowHideMenuCtl (HWND, UINT, LPINT);
+VOID WINAPI GetEffectiveClientRect (HWND, LPRECT, LPINT);
 VOID WINAPI InitCommonControls (VOID);
 
 typedef struct tagINITCOMMONCONTROLSEX {
@@ -40,7 +40,7 @@
     DWORD dwICC;
 } INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;
 
-BOOL32 WINAPI InitCommonControlsEx (LPINITCOMMONCONTROLSEX);
+BOOL WINAPI InitCommonControlsEx (LPINITCOMMONCONTROLSEX);
 
 #define ICC_LISTVIEW_CLASSES   0x00000001  /* listview, header */
 #define ICC_TREEVIEW_CLASSES   0x00000002  /* treeview, tooltips */
@@ -106,8 +106,8 @@
 
 
 /* callback constants */
-#define LPSTR_TEXTCALLBACK32A    ((LPSTR)-1L)
-#define LPSTR_TEXTCALLBACK32W    ((LPWSTR)-1L)
+#define LPSTR_TEXTCALLBACKA    ((LPSTR)-1L)
+#define LPSTR_TEXTCALLBACKW    ((LPWSTR)-1L)
 #define LPSTR_TEXTCALLBACK WINELIB_NAME_AW(LPSTR_TEXTCALLBACK)
 
 #define I_IMAGECALLBACK          (-1)
@@ -124,13 +124,13 @@
 typedef struct tagNMTOOLTIPSCREATED
 {
     NMHDR  hdr;
-    HWND32 hwndToolTips;
+    HWND hwndToolTips;
 } NMTOOLTIPSCREATED, *LPNMTOOLTIPSCREATED;
 
 
 #ifndef CCSIZEOF_STRUCT
 #define CCSIZEOF_STRUCT(name, member) \
-    (((INT32)((LPBYTE)(&((name*)0)->member)-((LPBYTE)((name*)0))))+ \
+    (((INT)((LPBYTE)(&((name*)0)->member)-((LPBYTE)((name*)0))))+ \
     sizeof(((name*)0)->member))
 #endif
 
@@ -183,17 +183,17 @@
 {
 	NMHDR	hdr;
 	DWORD	dwDrawStage;
-	HDC32	hdc;
-	RECT32	rc;
+	HDC	hdc;
+	RECT	rc;
 	DWORD	dwItemSpec; 
-	UINT32	uItemState;
+	UINT	uItemState;
 	LPARAM	lItemlParam;
 } NMCUSTOMDRAW, *LPNMCUSTOMDRAW;
 
 typedef struct tagNMTTCUSTOMDRAW
 {
     NMCUSTOMDRAW nmcd;
-    UINT32       uDrawFlags;
+    UINT       uDrawFlags;
 } NMTTCUSTOMDRAW, *LPNMTTCUSTOMDRAW;
 
 
@@ -202,14 +202,14 @@
 /* StatusWindow */
 
 #define STATUSCLASSNAME16	"msctls_statusbar"
-#define STATUSCLASSNAME32A	"msctls_statusbar32"
+#define STATUSCLASSNAMEA	"msctls_statusbar32"
 /* Does not work. gcc creates 4 byte wide strings.
  * #define STATUSCLASSNAME32W	L"msctls_statusbar32"
  */
 static const WCHAR	_scn32w[] = {
 'm','s','c','t','l','s','_','s','t','a','t','u','s','b','a','r','3','2',0
 };
-#define STATUSCLASSNAME32W	_scn32w
+#define STATUSCLASSNAMEW	_scn32w
 #define STATUSCLASSNAME		WINELIB_NAME_AW(STATUSCLASSNAME)
 
 #define SBT_NOBORDERS		0x0100
@@ -220,14 +220,14 @@
 
 #define SBARS_SIZEGRIP		0x0100
 
-#define SB_SETTEXT32A		(WM_USER+1)
-#define SB_SETTEXT32W		(WM_USER+11)
+#define SB_SETTEXTA		(WM_USER+1)
+#define SB_SETTEXTW		(WM_USER+11)
 #define SB_SETTEXT		WINELIB_NAME_AW(SB_SETTEXT)
-#define SB_GETTEXT32A		(WM_USER+2)
-#define SB_GETTEXT32W		(WM_USER+13)
+#define SB_GETTEXTA		(WM_USER+2)
+#define SB_GETTEXTW		(WM_USER+13)
 #define SB_GETTEXT		WINELIB_NAME_AW(SB_GETTEXT)
-#define SB_GETTEXTLENGTH32A	(WM_USER+3)
-#define SB_GETTEXTLENGTH32W	(WM_USER+12)
+#define SB_GETTEXTLENGTHA	(WM_USER+3)
+#define SB_GETTEXTLENGTHW	(WM_USER+12)
 #define SB_GETTEXTLENGTH	WINELIB_NAME_AW(SB_GETTEXTLENGTH)
 #define SB_SETPARTS		(WM_USER+4)
 #define SB_GETPARTS		(WM_USER+6)
@@ -237,11 +237,11 @@
 #define SB_GETRECT		(WM_USER+10)
 #define SB_ISSIMPLE		(WM_USER+14)
 #define SB_SETICON		(WM_USER+15)
-#define SB_SETTIPTEXT32A	(WM_USER+16)
-#define SB_SETTIPTEXT32W	(WM_USER+17)
+#define SB_SETTIPTEXTA	(WM_USER+16)
+#define SB_SETTIPTEXTW	(WM_USER+17)
 #define SB_SETTIPTEXT		WINELIB_NAME_AW(SB_SETTIPTEXT)
-#define SB_GETTIPTEXT32A	(WM_USER+18)
-#define SB_GETTIPTEXT32W	(WM_USER+19)
+#define SB_GETTIPTEXTA	(WM_USER+18)
+#define SB_GETTIPTEXTW	(WM_USER+19)
 #define SB_GETTIPTEXT		WINELIB_NAME_AW(SB_GETTIPTEXT)
 #define SB_GETICON		(WM_USER+20)
 #define SB_SETBKCOLOR		CCM_SETBKCOLOR   /* lParam = bkColor */
@@ -252,14 +252,14 @@
 #define SBN_LAST		(0U-899U)
 #define SBN_SIMPLEMODECHANGE	(SBN_FIRST-0)
 
-HWND32 WINAPI CreateStatusWindow32A (INT32, LPCSTR, HWND32, UINT32);
-HWND32 WINAPI CreateStatusWindow32W (INT32, LPCWSTR, HWND32, UINT32);
+HWND WINAPI CreateStatusWindowA (INT, LPCSTR, HWND, UINT);
+HWND WINAPI CreateStatusWindowW (INT, LPCWSTR, HWND, UINT);
 #define CreateStatusWindow WINELIB_NAME_AW(CreateStatusWindow)
-VOID WINAPI DrawStatusText32A (HDC32, LPRECT32, LPCSTR, UINT32);
-VOID WINAPI DrawStatusText32W (HDC32, LPRECT32, LPCWSTR, UINT32);
+VOID WINAPI DrawStatusTextA (HDC, LPRECT, LPCSTR, UINT);
+VOID WINAPI DrawStatusTextW (HDC, LPRECT, LPCWSTR, UINT);
 #define DrawStatusText WINELIB_NAME_AW(DrawStatusText)
-VOID WINAPI MenuHelp (UINT32, WPARAM32, LPARAM, HMENU32,
-                      HINSTANCE32, HWND32, LPUINT32);
+VOID WINAPI MenuHelp (UINT, WPARAM, LPARAM, HMENU,
+                      HINSTANCE, HWND, LPUINT);
 
 /**************************************************************************
  *  Drag List control
@@ -267,9 +267,9 @@
 
 typedef struct tagDRAGLISTINFO
 {
-    UINT32  uNotification;
-    HWND32  hWnd;
-    POINT32 ptCursor;
+    UINT  uNotification;
+    HWND  hWnd;
+    POINT ptCursor;
 } DRAGLISTINFO, *LPDRAGLISTINFO;
 
 #define DL_BEGINDRAG            (WM_USER+133)
@@ -284,22 +284,22 @@
 
 #define DRAGLISTMSGSTRING       TEXT("commctrl_DragListMsg")
 
-BOOL32 WINAPI MakeDragList (HWND32);
-VOID   WINAPI DrawInsert (HWND32, HWND32, INT32);
-INT32  WINAPI LBItemFromPt (HWND32, POINT32, BOOL32);
+BOOL WINAPI MakeDragList (HWND);
+VOID   WINAPI DrawInsert (HWND, HWND, INT);
+INT  WINAPI LBItemFromPt (HWND, POINT, BOOL);
 
   
 /* UpDown */
 
 #define UPDOWN_CLASS16          "msctls_updown"
-#define UPDOWN_CLASS32A         "msctls_updown32"
-#define UPDOWN_CLASS32W         L"msctls_updown32"
+#define UPDOWN_CLASSA         "msctls_updown32"
+#define UPDOWN_CLASSW         L"msctls_updown32"
 #define UPDOWN_CLASS            WINELIB_NAME_AW(UPDOWN_CLASS)
 
 typedef struct tagUDACCEL
 {
-    UINT32 nSec;
-    UINT32 nInc;
+    UINT nSec;
+    UINT nInc;
 } UDACCEL;
 
 #define UD_MAXVAL          0x7fff
@@ -318,8 +318,8 @@
 #define UDN_LAST           (0U-740)
 #define UDN_DELTAPOS       (UDN_FIRST-1)
 
-#define UDM_SETRANGE       (WM_USER+101)
-#define UDM_GETRANGE       (WM_USER+102)
+#define UDM_SETRANGE16       (WM_USER+101)
+#define UDM_GETRANGE16       (WM_USER+102)
 #define UDM_SETPOS         (WM_USER+103)
 #define UDM_GETPOS         (WM_USER+104)
 #define UDM_SETBUDDY       (WM_USER+105)
@@ -328,26 +328,26 @@
 #define UDM_GETACCEL       (WM_USER+108)
 #define UDM_SETBASE        (WM_USER+109)
 #define UDM_GETBASE        (WM_USER+110)
-#define UDM_SETRANGE32     (WM_USER+111)
-#define UDM_GETRANGE32     (WM_USER+112)
+#define UDM_SETRANGE     (WM_USER+111)
+#define UDM_GETRANGE     (WM_USER+112)
 
-HWND32 WINAPI CreateUpDownControl (DWORD, INT32, INT32, INT32, INT32,
-                                   HWND32, INT32, HINSTANCE32, HWND32,
-                                   INT32, INT32, INT32);
+HWND WINAPI CreateUpDownControl (DWORD, INT, INT, INT, INT,
+                                   HWND, INT, HINSTANCE, HWND,
+                                   INT, INT, INT);
 
 /* Progress Bar */
 
-#define PROGRESS_CLASS32A   "msctls_progress32"
-#define PROGRESS_CLASS32W  L"msctls_progress32"
+#define PROGRESS_CLASSA   "msctls_progress32"
+#define PROGRESS_CLASSW  L"msctls_progress32"
 #define PROGRESS_CLASS16    "msctls_progress"
 #define PROGRESS_CLASS      WINELIB_NAME_AW(PROGRESS_CLASS)
 
-#define PBM_SETRANGE        (WM_USER+1)
+#define PBM_SETRANGE16        (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)
-#define PBM_SETRANGE32      (WM_USER+6)
+#define PBM_SETRANGE      (WM_USER+6)
 #define PBM_GETRANGE        (WM_USER+7)
 #define PBM_GETPOS          (WM_USER+8)
 #define PBM_SETBARCOLOR     (WM_USER+9)
@@ -358,8 +358,8 @@
 
 typedef struct
 {
-    INT32 iLow;
-    INT32 iHigh;
+    INT iLow;
+    INT iHigh;
 } PBRANGE, *PPBRANGE;
 
 
@@ -405,11 +405,11 @@
 
 typedef struct _IMAGEINFO
 {
-    HBITMAP32 hbmImage;
-    HBITMAP32 hbmMask;
-    INT32     Unused1;
-    INT32     Unused2;
-    RECT32    rcImage;
+    HBITMAP hbmImage;
+    HBITMAP hbmMask;
+    INT     Unused1;
+    INT     Unused2;
+    RECT    rcImage;
 } IMAGEINFO;
 
 
@@ -417,65 +417,65 @@
 {
     DWORD       cbSize;
     HIMAGELIST  himl;
-    INT32       i;
-    HDC32       hdcDst;
-    INT32       x;
-    INT32       y;
-    INT32       cx;
-    INT32       cy;
-    INT32       xBitmap;  /* x offest from the upperleft of bitmap */
-    INT32       yBitmap;  /* y offset from the upperleft of bitmap */
+    INT       i;
+    HDC       hdcDst;
+    INT       x;
+    INT       y;
+    INT       cx;
+    INT       cy;
+    INT       xBitmap;  /* x offest from the upperleft of bitmap */
+    INT       yBitmap;  /* y offset from the upperleft of bitmap */
     COLORREF    rgbBk;
     COLORREF    rgbFg;
-    UINT32      fStyle;
+    UINT      fStyle;
     DWORD       dwRop;
 } IMAGELISTDRAWPARAMS, *LPIMAGELISTDRAWPARAMS;
 
  
-INT32      WINAPI ImageList_Add(HIMAGELIST,HBITMAP32,HBITMAP32);
-INT32      WINAPI ImageList_AddIcon (HIMAGELIST, HICON32);
-INT32      WINAPI ImageList_AddMasked(HIMAGELIST,HBITMAP32,COLORREF);
-BOOL32     WINAPI ImageList_BeginDrag(HIMAGELIST,INT32,INT32,INT32);
-BOOL32     WINAPI ImageList_Copy(HIMAGELIST,INT32,HIMAGELIST,INT32,INT32);
-HIMAGELIST WINAPI ImageList_Create(INT32,INT32,UINT32,INT32,INT32);
-BOOL32     WINAPI ImageList_Destroy(HIMAGELIST);
-BOOL32     WINAPI ImageList_DragEnter(HWND32,INT32,INT32);
-BOOL32     WINAPI ImageList_DragLeave(HWND32); 
-BOOL32     WINAPI ImageList_DragMove(INT32,INT32);
-BOOL32     WINAPI ImageList_DragShowNolock (BOOL32);
-BOOL32     WINAPI ImageList_Draw(HIMAGELIST,INT32,HDC32,INT32,INT32,UINT32);
-BOOL32     WINAPI ImageList_DrawEx(HIMAGELIST,INT32,HDC32,INT32,INT32,INT32,
-                                   INT32,COLORREF,COLORREF,UINT32);
-BOOL32     WINAPI ImageList_DrawIndirect(IMAGELISTDRAWPARAMS*); 
+INT      WINAPI ImageList_Add(HIMAGELIST,HBITMAP,HBITMAP);
+INT      WINAPI ImageList_AddIcon (HIMAGELIST, HICON);
+INT      WINAPI ImageList_AddMasked(HIMAGELIST,HBITMAP,COLORREF);
+BOOL     WINAPI ImageList_BeginDrag(HIMAGELIST,INT,INT,INT);
+BOOL     WINAPI ImageList_Copy(HIMAGELIST,INT,HIMAGELIST,INT,INT);
+HIMAGELIST WINAPI ImageList_Create(INT,INT,UINT,INT,INT);
+BOOL     WINAPI ImageList_Destroy(HIMAGELIST);
+BOOL     WINAPI ImageList_DragEnter(HWND,INT,INT);
+BOOL     WINAPI ImageList_DragLeave(HWND); 
+BOOL     WINAPI ImageList_DragMove(INT,INT);
+BOOL     WINAPI ImageList_DragShowNolock (BOOL);
+BOOL     WINAPI ImageList_Draw(HIMAGELIST,INT,HDC,INT,INT,UINT);
+BOOL     WINAPI ImageList_DrawEx(HIMAGELIST,INT,HDC,INT,INT,INT,
+                                   INT,COLORREF,COLORREF,UINT);
+BOOL     WINAPI ImageList_DrawIndirect(IMAGELISTDRAWPARAMS*); 
 HIMAGELIST WINAPI ImageList_Duplicate(HIMAGELIST);
-BOOL32     WINAPI ImageList_EndDrag(VOID);
+BOOL     WINAPI ImageList_EndDrag(VOID);
 COLORREF   WINAPI ImageList_GetBkColor(HIMAGELIST);
-HIMAGELIST WINAPI ImageList_GetDragImage(POINT32*,POINT32*);
-HICON32    WINAPI ImageList_GetIcon(HIMAGELIST,INT32,UINT32);
-BOOL32     WINAPI ImageList_GetIconSize(HIMAGELIST,INT32*,INT32*);
-INT32      WINAPI ImageList_GetImageCount(HIMAGELIST);
-BOOL32     WINAPI ImageList_GetImageInfo(HIMAGELIST,INT32,IMAGEINFO*);
-BOOL32     WINAPI ImageList_GetImageRect(HIMAGELIST,INT32,LPRECT32);
-HIMAGELIST WINAPI ImageList_LoadImage32A(HINSTANCE32,LPCSTR,INT32,INT32,
-                                         COLORREF,UINT32,UINT32);
-HIMAGELIST WINAPI ImageList_LoadImage32W(HINSTANCE32,LPCWSTR,INT32,INT32,
-                                         COLORREF,UINT32,UINT32);
+HIMAGELIST WINAPI ImageList_GetDragImage(POINT*,POINT*);
+HICON    WINAPI ImageList_GetIcon(HIMAGELIST,INT,UINT);
+BOOL     WINAPI ImageList_GetIconSize(HIMAGELIST,INT*,INT*);
+INT      WINAPI ImageList_GetImageCount(HIMAGELIST);
+BOOL     WINAPI ImageList_GetImageInfo(HIMAGELIST,INT,IMAGEINFO*);
+BOOL     WINAPI ImageList_GetImageRect(HIMAGELIST,INT,LPRECT);
+HIMAGELIST WINAPI ImageList_LoadImageA(HINSTANCE,LPCSTR,INT,INT,
+                                         COLORREF,UINT,UINT);
+HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE,LPCWSTR,INT,INT,
+                                         COLORREF,UINT,UINT);
 #define    ImageList_LoadImage WINELIB_NAME_AW(ImageList_LoadImage)
-HIMAGELIST WINAPI ImageList_Merge(HIMAGELIST,INT32,HIMAGELIST,INT32,INT32,INT32);
+HIMAGELIST WINAPI ImageList_Merge(HIMAGELIST,INT,HIMAGELIST,INT,INT,INT);
 #ifdef __IStream_INTREFACE_DEFINED__
-HIMAGELIST WINAPI ImageList_Read(LPSTREAM32);
+HIMAGELIST WINAPI ImageList_Read(LPSTREAM);
 #endif
-BOOL32     WINAPI ImageList_Remove(HIMAGELIST,INT32);
-BOOL32     WINAPI ImageList_Replace(HIMAGELIST,INT32,HBITMAP32,HBITMAP32);
-INT32      WINAPI ImageList_ReplaceIcon(HIMAGELIST,INT32,HICON32);
+BOOL     WINAPI ImageList_Remove(HIMAGELIST,INT);
+BOOL     WINAPI ImageList_Replace(HIMAGELIST,INT,HBITMAP,HBITMAP);
+INT      WINAPI ImageList_ReplaceIcon(HIMAGELIST,INT,HICON);
 COLORREF   WINAPI ImageList_SetBkColor(HIMAGELIST,COLORREF);
-BOOL32     WINAPI ImageList_SetDragCursorImage(HIMAGELIST,INT32,INT32,INT32);
+BOOL     WINAPI ImageList_SetDragCursorImage(HIMAGELIST,INT,INT,INT);
 
-BOOL32     WINAPI ImageList_SetIconSize(HIMAGELIST,INT32,INT32);
-BOOL32     WINAPI ImageList_SetImageCount(HIMAGELIST,INT32);
-BOOL32     WINAPI ImageList_SetOverlayImage(HIMAGELIST,INT32,INT32);
+BOOL     WINAPI ImageList_SetIconSize(HIMAGELIST,INT,INT);
+BOOL     WINAPI ImageList_SetImageCount(HIMAGELIST,INT);
+BOOL     WINAPI ImageList_SetOverlayImage(HIMAGELIST,INT,INT);
 #ifdef __IStream_INTREFACE_DEFINED__
-BOOL32     WINAPI ImageList_Write(HIMAGELIST, LPSTREAM32);
+BOOL     WINAPI ImageList_Write(HIMAGELIST, LPSTREAM);
 #endif
 
 #ifndef __WINE__
@@ -490,29 +490,29 @@
 /* Flat Scrollbar control */
 
 #define FLATSB_CLASS16        "flatsb_class"
-#define FLATSB_CLASS32A       "flatsb_class32"
-#define FLATSB_CLASS32W       L"flatsb_class32"
+#define FLATSB_CLASSA       "flatsb_class32"
+#define FLATSB_CLASSW       L"flatsb_class32"
 #define FLATSB_CLASS          WINELIB_NAME_AW(FLATSB_CLASS)
 
-BOOL32  WINAPI FlatSB_EnableScrollBar(HWND32, INT32, UINT32);
-BOOL32  WINAPI FlatSB_ShowScrollBar(HWND32, INT32, BOOL32);
-BOOL32  WINAPI FlatSB_GetScrollRange(HWND32, INT32, LPINT32, LPINT32);
-BOOL32  WINAPI FlatSB_GetScrollInfo(HWND32, INT32, LPSCROLLINFO);
-INT32   WINAPI FlatSB_GetScrollPos(HWND32, INT32);
-BOOL32  WINAPI FlatSB_GetScrollProp(HWND32, INT32, LPINT32);
-INT32   WINAPI FlatSB_SetScrollPos(HWND32, INT32, INT32, BOOL32);
-INT32   WINAPI FlatSB_SetScrollInfo(HWND32, INT32, LPSCROLLINFO, BOOL32);
-INT32   WINAPI FlatSB_SetScrollRange(HWND32, INT32, INT32, INT32, BOOL32);
-BOOL32  WINAPI FlatSB_SetScrollProp(HWND32, UINT32, INT32, BOOL32);
-BOOL32  WINAPI InitializeFlatSB(HWND32);
-HRESULT WINAPI UninitializeFlatSB(HWND32);
+BOOL  WINAPI FlatSB_EnableScrollBar(HWND, INT, UINT);
+BOOL  WINAPI FlatSB_ShowScrollBar(HWND, INT, BOOL);
+BOOL  WINAPI FlatSB_GetScrollRange(HWND, INT, LPINT, LPINT);
+BOOL  WINAPI FlatSB_GetScrollInfo(HWND, INT, LPSCROLLINFO);
+INT   WINAPI FlatSB_GetScrollPos(HWND, INT);
+BOOL  WINAPI FlatSB_GetScrollProp(HWND, INT, LPINT);
+INT   WINAPI FlatSB_SetScrollPos(HWND, INT, INT, BOOL);
+INT   WINAPI FlatSB_SetScrollInfo(HWND, INT, LPSCROLLINFO, BOOL);
+INT   WINAPI FlatSB_SetScrollRange(HWND, INT, INT, INT, BOOL);
+BOOL  WINAPI FlatSB_SetScrollProp(HWND, UINT, INT, BOOL);
+BOOL  WINAPI InitializeFlatSB(HWND);
+HRESULT WINAPI UninitializeFlatSB(HWND);
 
 
 /* Header control */
 
 #define WC_HEADER16		"SysHeader" 
-#define WC_HEADER32A		"SysHeader32" 
-#define WC_HEADER32W		L"SysHeader32" 
+#define WC_HEADERA		"SysHeader32" 
+#define WC_HEADERW		L"SysHeader32" 
 #define WC_HEADER		WINELIB_NAME_AW(WC_HEADER)
  
 #define HDS_HORZ                0x0000 
@@ -554,15 +554,15 @@
 
 #define HDM_FIRST               0x1200
 #define HDM_GETITEMCOUNT        (HDM_FIRST+0)
-#define HDM_INSERTITEM32A       (HDM_FIRST+1)
-#define HDM_INSERTITEM32W       (HDM_FIRST+10)
+#define HDM_INSERTITEMA       (HDM_FIRST+1)
+#define HDM_INSERTITEMW       (HDM_FIRST+10)
 #define HDM_INSERTITEM		WINELIB_NAME_AW(HDM_INSERTITEM)
 #define HDM_DELETEITEM          (HDM_FIRST+2)
-#define HDM_GETITEM32A          (HDM_FIRST+3)
-#define HDM_GETITEM32W          (HDM_FIRST+11)
+#define HDM_GETITEMA          (HDM_FIRST+3)
+#define HDM_GETITEMW          (HDM_FIRST+11)
 #define HDM_GETITEM		WINELIB_NAME_AW(HDM_GETITEM)
-#define HDM_SETITEM32A          (HDM_FIRST+4)
-#define HDM_SETITEM32W          (HDM_FIRST+12)
+#define HDM_SETITEMA          (HDM_FIRST+4)
+#define HDM_SETITEMW          (HDM_FIRST+12)
 #define HDM_SETITEM		WINELIB_NAME_AW(HDM_SETITEM)
 #define HDM_LAYOUT              (HDM_FIRST+5)
 #define HDM_HITTEST             (HDM_FIRST+6)
@@ -580,180 +580,180 @@
 
 #define HDN_FIRST               (0U-300U)
 #define HDN_LAST                (0U-399U)
-#define HDN_ITEMCHANGING32A     (HDN_FIRST-0)
-#define HDN_ITEMCHANGING32W     (HDN_FIRST-20)
+#define HDN_ITEMCHANGINGA     (HDN_FIRST-0)
+#define HDN_ITEMCHANGINGW     (HDN_FIRST-20)
 #define HDN_ITEMCHANGING WINELIB_NAME_AW(HDN_ITEMCHANGING)
-#define HDN_ITEMCHANGED32A      (HDN_FIRST-1)
-#define HDN_ITEMCHANGED32W      (HDN_FIRST-21)
+#define HDN_ITEMCHANGEDA      (HDN_FIRST-1)
+#define HDN_ITEMCHANGEDW      (HDN_FIRST-21)
 #define HDN_ITEMCHANGED WINELIB_NAME_AW(HDN_ITEMCHANGED)
-#define HDN_ITEMCLICK32A        (HDN_FIRST-2)
-#define HDN_ITEMCLICK32W        (HDN_FIRST-22)
+#define HDN_ITEMCLICKA        (HDN_FIRST-2)
+#define HDN_ITEMCLICKW        (HDN_FIRST-22)
 #define HDN_ITEMCLICK WINELIB_NAME_AW(HDN_ITEMCLICK)
-#define HDN_ITEMDBLCLICK32A     (HDN_FIRST-3)
-#define HDN_ITEMDBLCLICK32W     (HDN_FIRST-23)
+#define HDN_ITEMDBLCLICKA     (HDN_FIRST-3)
+#define HDN_ITEMDBLCLICKW     (HDN_FIRST-23)
 #define HDN_ITEMDBLCLICK WINELIB_NAME_AW(HDN_ITEMDBLCLICK)
-#define HDN_DIVIDERDBLCLICK32A  (HDN_FIRST-5)
-#define HDN_DIVIDERDBLCLICK32W  (HDN_FIRST-25)
+#define HDN_DIVIDERDBLCLICKA  (HDN_FIRST-5)
+#define HDN_DIVIDERDBLCLICKW  (HDN_FIRST-25)
 #define HDN_DIVIDERDBLCLICK WINELIB_NAME_AW(HDN_DIVIDERDBLCLICK)
-#define HDN_BEGINTRACK32A       (HDN_FIRST-6)
-#define HDN_BEGINTRACK32W       (HDN_FIRST-26)
+#define HDN_BEGINTRACKA       (HDN_FIRST-6)
+#define HDN_BEGINTRACKW       (HDN_FIRST-26)
 #define HDN_BEGINTRACK WINELIB_NAME_AW(HDN_BEGINTRACK)
-#define HDN_ENDTRACK32A         (HDN_FIRST-7)
-#define HDN_ENDTRACK32W         (HDN_FIRST-27)
+#define HDN_ENDTRACKA         (HDN_FIRST-7)
+#define HDN_ENDTRACKW         (HDN_FIRST-27)
 #define HDN_ENDTRACK WINELIB_NAME_AW(HDN_ENDTRACK)
-#define HDN_TRACK32A            (HDN_FIRST-8)
-#define HDN_TRACK32W            (HDN_FIRST-28)
+#define HDN_TRACKA            (HDN_FIRST-8)
+#define HDN_TRACKW            (HDN_FIRST-28)
 #define HDN_TRACK WINELIB_NAME_AW(HDN_TRACK)
-#define HDN_GETDISPINFO32A      (HDN_FIRST-9)
-#define HDN_GETDISPINFO32W      (HDN_FIRST-29)
+#define HDN_GETDISPINFOA      (HDN_FIRST-9)
+#define HDN_GETDISPINFOW      (HDN_FIRST-29)
 #define HDN_GETDISPINFO WINELIB_NAME_AW(HDN_GETDISPINFO)
 #define HDN_BEGINDRACK          (HDN_FIRST-10)
 #define HDN_ENDDRACK            (HDN_FIRST-11)
 
 typedef struct _HD_LAYOUT
 {
-    RECT32      *prc;
-    WINDOWPOS32 *pwpos;
+    RECT      *prc;
+    WINDOWPOS *pwpos;
 } HDLAYOUT, *LPHDLAYOUT;
 
 #define HD_LAYOUT   HDLAYOUT
 
-typedef struct _HD_ITEM32A
+typedef struct _HD_ITEMA
 {
-    UINT32    mask;
-    INT32     cxy;
+    UINT    mask;
+    INT     cxy;
     LPSTR     pszText;
-    HBITMAP32 hbm;
-    INT32     cchTextMax;
-    INT32     fmt;
+    HBITMAP hbm;
+    INT     cchTextMax;
+    INT     fmt;
     LPARAM    lParam;
-    INT32     iImage;
-    INT32     iOrder;
-} HDITEM32A, *LPHDITEM32A;
+    INT     iImage;
+    INT     iOrder;
+} HDITEMA, *LPHDITEMA;
 
-typedef struct _HD_ITEM32W
+typedef struct _HD_ITEMW
 {
-    UINT32    mask;
-    INT32     cxy;
+    UINT    mask;
+    INT     cxy;
     LPWSTR    pszText;
-    HBITMAP32 hbm;
-    INT32     cchTextMax;
-    INT32     fmt;
+    HBITMAP hbm;
+    INT     cchTextMax;
+    INT     fmt;
     LPARAM    lParam;
-    INT32     iImage;
-    INT32     iOrder;
-} HDITEM32W, *LPHDITEM32W;
+    INT     iImage;
+    INT     iOrder;
+} HDITEMW, *LPHDITEMW;
 
 #define HDITEM   WINELIB_NAME_AW(HDITEM)
 #define LPHDITEM WINELIB_NAME_AW(LPHDITEM)
 #define HD_ITEM  HDITEM
 
-#define HDITEM_V1_SIZE32A CCSIZEOF_STRUCT(HDITEM32A, lParam)
-#define HDITEM_V1_SIZE32W CCSIZEOF_STRUCT(HDITEM32W, lParam)
+#define HDITEM_V1_SIZEA CCSIZEOF_STRUCT(HDITEMA, lParam)
+#define HDITEM_V1_SIZEW CCSIZEOF_STRUCT(HDITEMW, lParam)
 #define HDITEM_V1_SIZE WINELIB_NAME_AW(HDITEM_V1_SIZE)
 
 typedef struct _HD_HITTESTINFO
 {
-    POINT32 pt;
-    UINT32  flags;
-    INT32   iItem;
+    POINT pt;
+    UINT  flags;
+    INT   iItem;
 } HDHITTESTINFO, *LPHDHITTESTINFO;
 
 #define HD_HITTESTINFO   HDHITTESTINFO
 
-typedef struct tagNMHEADER32A
+typedef struct tagNMHEADERA
 {
     NMHDR     hdr;
-    INT32     iItem;
-    INT32     iButton;
-    HDITEM32A *pitem;
-} NMHEADER32A, *LPNMHEADER32A;
+    INT     iItem;
+    INT     iButton;
+    HDITEMA *pitem;
+} NMHEADERA, *LPNMHEADERA;
 
-typedef struct tagNMHEADER32W
+typedef struct tagNMHEADERW
 {
     NMHDR     hdr;
-    INT32     iItem;
-    INT32     iButton;
-    HDITEM32W *pitem;
-} NMHEADER32W, *LPNMHEADER32W;
+    INT     iItem;
+    INT     iButton;
+    HDITEMW *pitem;
+} NMHEADERW, *LPNMHEADERW;
 
 #define NMHEADER		WINELIB_NAME_AW(NMHEADER)
 #define LPNMHEADER		WINELIB_NAME_AW(LPNMHEADER)
 #define HD_NOTIFY               NMHEADER
 
-typedef struct tagNMHDDISPINFO32A
+typedef struct tagNMHDDISPINFOA
 {
     NMHDR     hdr;
-    INT32     iItem;
-    UINT32    mask;
+    INT     iItem;
+    UINT    mask;
     LPSTR     pszText;
-    INT32     cchTextMax;
-    INT32     iImage;
+    INT     cchTextMax;
+    INT     iImage;
     LPARAM    lParam;
-} NMHDDISPINFO32A, *LPNMHDDISPINFO32A;
+} NMHDDISPINFOA, *LPNMHDDISPINFOA;
 
-typedef struct tagNMHDDISPINFO32W
+typedef struct tagNMHDDISPINFOW
 {
     NMHDR     hdr;
-    INT32     iItem;
-    UINT32    mask;
+    INT     iItem;
+    UINT    mask;
     LPWSTR    pszText;
-    INT32     cchTextMax;
-    INT32     iImage;
+    INT     cchTextMax;
+    INT     iImage;
     LPARAM    lParam;
-} NMHDDISPINFO32W, *LPNMHDDISPINFO32W;
+} NMHDDISPINFOW, *LPNMHDDISPINFOW;
 
 #define NMHDDISPINFO		WINELIB_NAME_AW(NMHDDISPINFO)
 #define LPNMHDDISPINFO		WINELIB_NAME_AW(LPNMHDDISPINFO)
 
 #define Header_GetItemCount(hwndHD) \
-  (INT32)SendMessage32A((hwndHD),HDM_GETITEMCOUNT,0,0L)
-#define Header_InsertItem32A(hwndHD,i,phdi) \
-  (INT32)SendMessage32A((hwndHD),HDM_INSERTITEM32A,(WPARAM32)(INT32)(i),(LPARAM)(const HDITEM32A*)(phdi))
-#define Header_InsertItem32W(hwndHD,i,phdi) \
-  (INT32)SendMessage32W((hwndHD),HDM_INSERTITEM32W,(WPARAM32)(INT32)(i),(LPARAM)(const HDITEM32W*)(phdi))
+  (INT)SendMessageA((hwndHD),HDM_GETITEMCOUNT,0,0L)
+#define Header_InsertItemA(hwndHD,i,phdi) \
+  (INT)SendMessageA((hwndHD),HDM_INSERTITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi))
+#define Header_InsertItemW(hwndHD,i,phdi) \
+  (INT)SendMessageW((hwndHD),HDM_INSERTITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi))
 #define Header_InsertItem WINELIB_NAME_AW(Header_InsertItem)
 #define Header_DeleteItem(hwndHD,i) \
-  (BOOL32)SendMessage32A((hwndHD),HDM_DELETEITEM,(WPARAM32)(INT32)(i),0L)
-#define Header_GetItem32A(hwndHD,i,phdi) \
-  (BOOL32)SendMessage32A((hwndHD),HDM_GETITEM32A,(WPARAM32)(INT32)(i),(LPARAM)(HDITEM32A*)(phdi))
-#define Header_GetItem32W(hwndHD,i,phdi) \
-  (BOOL32)SendMessage32W((hwndHD),HDM_GETITEM32W,(WPARAM32)(INT32)(i),(LPARAM)(HDITEM32W*)(phdi))
+  (BOOL)SendMessageA((hwndHD),HDM_DELETEITEM,(WPARAM)(INT)(i),0L)
+#define Header_GetItemA(hwndHD,i,phdi) \
+  (BOOL)SendMessageA((hwndHD),HDM_GETITEMA,(WPARAM)(INT)(i),(LPARAM)(HDITEMA*)(phdi))
+#define Header_GetItemW(hwndHD,i,phdi) \
+  (BOOL)SendMessageW((hwndHD),HDM_GETITEMW,(WPARAM)(INT)(i),(LPARAM)(HDITEMW*)(phdi))
 #define Header_GetItem WINELIB_NAME_AW(Header_GetItem)
-#define Header_SetItem32A(hwndHD,i,phdi) \
-  (BOOL32)SendMessage32A((hwndHD),HDM_SETITEM32A,(WPARAM32)(INT32)(i),(LPARAM)(const HDITEM32A*)(phdi))
-#define Header_SetItem32W(hwndHD,i,phdi) \
-  (BOOL32)SendMessage32W((hwndHD),HDM_SETITEM32W,(WPARAM32)(INT32)(i),(LPARAM)(const HDITEM32W*)(phdi))
+#define Header_SetItemA(hwndHD,i,phdi) \
+  (BOOL)SendMessageA((hwndHD),HDM_SETITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi))
+#define Header_SetItemW(hwndHD,i,phdi) \
+  (BOOL)SendMessageW((hwndHD),HDM_SETITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi))
 #define Header_SetItem WINELIB_NAME_AW(Header_SetItem)
 #define Header_Layout(hwndHD,playout) \
-  (BOOL32)SendMessage32A((hwndHD),HDM_LAYOUT,0,(LPARAM)(LPHDLAYOUT)(playout))
+  (BOOL)SendMessageA((hwndHD),HDM_LAYOUT,0,(LPARAM)(LPHDLAYOUT)(playout))
 #define Header_GetItemRect(hwnd,iItem,lprc) \
-  (BOOL32)SendMessage32A((hwnd),HDM_GETITEMRECT,(WPARAM32)iItem,(LPARAM)lprc)
+  (BOOL)SendMessageA((hwnd),HDM_GETITEMRECT,(WPARAM)iItem,(LPARAM)lprc)
 #define Header_SetImageList(hwnd,himl) \
-  (HIMAGELIST)SendMessage32A((hwnd),HDM_SETIMAGELIST,0,(LPARAM)himl)
+  (HIMAGELIST)SendMessageA((hwnd),HDM_SETIMAGELIST,0,(LPARAM)himl)
 #define Header_GetImageList(hwnd) \
-  (HIMAGELIST)SendMessage32A((hwnd),HDM_GETIMAGELIST,0,0)
+  (HIMAGELIST)SendMessageA((hwnd),HDM_GETIMAGELIST,0,0)
 #define Header_OrderToIndex(hwnd,i) \
-  (INT32)SendMessage32A((hwnd),HDM_ORDERTOINDEX,(WPARAM32)i,0)
+  (INT)SendMessageA((hwnd),HDM_ORDERTOINDEX,(WPARAM)i,0)
 #define Header_CreateDragImage(hwnd,i) \
-  (HIMAGELIST)SendMessage32A((hwnd),HDM_CREATEDRAGIMAGE,(WPARAM32)i,0)
+  (HIMAGELIST)SendMessageA((hwnd),HDM_CREATEDRAGIMAGE,(WPARAM)i,0)
 #define Header_GetOrderArray(hwnd,iCount,lpi) \
-  (BOOL32)SendMessage32A((hwnd),HDM_GETORDERARRAY,(WPARAM32)iCount,(LPARAM)lpi)
+  (BOOL)SendMessageA((hwnd),HDM_GETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi)
 #define Header_SetOrderArray(hwnd,iCount,lpi) \
-  (BOOL32)SendMessage32A((hwnd),HDM_SETORDERARRAY,(WPARAM32)iCount,(LPARAM)lpi)
+  (BOOL)SendMessageA((hwnd),HDM_SETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi)
 #define Header_SetHotDivider(hwnd,fPos,dw) \
-  (INT32)SendMessage32A((hwnd),HDM_SETHOTDIVIDER,(WPARAM32)fPos,(LPARAM)dw)
+  (INT)SendMessageA((hwnd),HDM_SETHOTDIVIDER,(WPARAM)fPos,(LPARAM)dw)
 #define Header_SetUnicodeFormat(hwnd,fUnicode) \
-  (BOOL32)SendMessage32A((hwnd),HDM_SETUNICODEFORMAT,(WPARAM32)(fUnicode),0)
+  (BOOL)SendMessageA((hwnd),HDM_SETUNICODEFORMAT,(WPARAM)(fUnicode),0)
 #define Header_GetUnicodeFormat(hwnd) \
-  (BOOL32)SendMessage32A((hwnd),HDM_GETUNICODEFORMAT,0,0)
+  (BOOL)SendMessageA((hwnd),HDM_GETUNICODEFORMAT,0,0)
 
 
 /* Toolbar */
 
 #define TOOLBARCLASSNAME16      "ToolbarWindow" 
-#define TOOLBARCLASSNAME32W     L"ToolbarWindow32" 
-#define TOOLBARCLASSNAME32A     "ToolbarWindow32" 
+#define TOOLBARCLASSNAMEW     L"ToolbarWindow32" 
+#define TOOLBARCLASSNAMEA     "ToolbarWindow32" 
 #define TOOLBARCLASSNAME WINELIB_NAME_AW(TOOLBARCLASSNAME)
 
 #define CMB_MASKED              0x02 
@@ -805,23 +805,23 @@
 #define TB_SETSTATE              (WM_USER+17)
 #define TB_GETSTATE              (WM_USER+18)
 #define TB_ADDBITMAP             (WM_USER+19)
-#define TB_ADDBUTTONS32A         (WM_USER+20)
-#define TB_ADDBUTTONS32W         (WM_USER+68)
+#define TB_ADDBUTTONSA         (WM_USER+20)
+#define TB_ADDBUTTONSW         (WM_USER+68)
 #define TB_ADDBUTTONS WINELIB_NAME_AW(TB_ADDBUTTONS)
 #define TB_HITTEST               (WM_USER+69)
-#define TB_INSERTBUTTON32A       (WM_USER+21)
-#define TB_INSERTBUTTON32W       (WM_USER+67)
+#define TB_INSERTBUTTONA       (WM_USER+21)
+#define TB_INSERTBUTTONW       (WM_USER+67)
 #define TB_INSERTBUTTON WINELIB_NAME_AW(TB_INSERTBUTTON)
 #define TB_DELETEBUTTON          (WM_USER+22)
 #define TB_GETBUTTON             (WM_USER+23)
 #define TB_BUTTONCOUNT           (WM_USER+24)
 #define TB_COMMANDTOINDEX        (WM_USER+25)
-#define TB_SAVERESTORE32A        (WM_USER+26)
-#define TB_SAVERESTORE32W        (WM_USER+76)
+#define TB_SAVERESTOREA        (WM_USER+26)
+#define TB_SAVERESTOREW        (WM_USER+76)
 #define TB_SAVERESTORE WINELIB_NAME_AW(TB_SAVERESTORE)
 #define TB_CUSTOMIZE             (WM_USER+27)
-#define TB_ADDSTRING32A          (WM_USER+28) 
-#define TB_ADDSTRING32W          (WM_USER+77) 
+#define TB_ADDSTRINGA          (WM_USER+28) 
+#define TB_ADDSTRINGW          (WM_USER+77) 
 #define TB_ADDSTRING WINELIB_NAME_AW(TB_ADDSTRING)
 #define TB_GETITEMRECT           (WM_USER+29)
 #define TB_BUTTONSTRUCTSIZE      (WM_USER+30)
@@ -837,8 +837,8 @@
 #define TB_SETCMDID              (WM_USER+42)
 #define TB_CHANGEBITMAP          (WM_USER+43)
 #define TB_GETBITMAP             (WM_USER+44)
-#define TB_GETBUTTONTEXT32A      (WM_USER+45)
-#define TB_GETBUTTONTEXT32W      (WM_USER+75)
+#define TB_GETBUTTONTEXTA      (WM_USER+45)
+#define TB_GETBUTTONTEXTW      (WM_USER+75)
 #define TB_GETBUTTONTEXT WINELIB_NAME_AW(TB_GETBUTTONTEXT)
 #define TB_REPLACEBITMAP         (WM_USER+46)
 #define TB_SETINDENT             (WM_USER+47)
@@ -857,19 +857,19 @@
 #define TB_SETMAXTEXTROWS        (WM_USER+60)
 #define TB_GETTEXTROWS           (WM_USER+61)
 #define TB_GETOBJECT             (WM_USER+62)
-#define TB_GETBUTTONINFO32W      (WM_USER+63)
-#define TB_GETBUTTONINFO32A      (WM_USER+65)
+#define TB_GETBUTTONINFOW      (WM_USER+63)
+#define TB_GETBUTTONINFOA      (WM_USER+65)
 #define TB_GETBUTTONINFO WINELIB_NAME_AW(TB_GETBUTTONINFO)
-#define TB_SETBUTTONINFO32W      (WM_USER+64)
-#define TB_SETBUTTONINFO32A      (WM_USER+66)
+#define TB_SETBUTTONINFOW      (WM_USER+64)
+#define TB_SETBUTTONINFOA      (WM_USER+66)
 #define TB_SETBUTTONINFO WINELIB_NAME_AW(TB_SETBUTTONINFO)
 #define TB_SETDRAWTEXTFLAGS      (WM_USER+70)
 #define TB_GETHOTITEM            (WM_USER+71)
 #define TB_SETHOTITEM            (WM_USER+72)
 #define TB_SETANCHORHIGHLIGHT    (WM_USER+73)
 #define TB_GETANCHORHIGHLIGHT    (WM_USER+74)
-#define TB_MAPACCELERATOR32A     (WM_USER+78)
-#define TB_MAPACCELERATOR32W     (WM_USER+90)
+#define TB_MAPACCELERATORA     (WM_USER+78)
+#define TB_MAPACCELERATORW     (WM_USER+90)
 #define TB_MAPACCELERATOR WINELIB_NAME_AW(TB_MAPACCELERATOR)
 #define TB_GETINSERTMARK         (WM_USER+79)
 #define TB_SETINSERTMARK         (WM_USER+80)
@@ -889,19 +889,19 @@
 
 #define TBN_FIRST               (0U-700U)
 #define TBN_LAST                (0U-720U)
-#define TBN_GETBUTTONINFO32A    (TBN_FIRST-0)
-#define TBN_GETBUTTONINFO32W    (TBN_FIRST-20)
+#define TBN_GETBUTTONINFOA    (TBN_FIRST-0)
+#define TBN_GETBUTTONINFOW    (TBN_FIRST-20)
 #define TBN_GETBUTTONINFO WINELIB_NAME_AW(TBN_GETBUTTONINFO)
-#define TBN_GETINFOTIP32A       (TBN_FIRST-18)
-#define TBN_GETINFOTIP32W       (TBN_FIRST-19)
+#define TBN_GETINFOTIPA       (TBN_FIRST-18)
+#define TBN_GETINFOTIPW       (TBN_FIRST-19)
 #define TBN_GETINFOTIP WINELIB_NAME_AW(TBN_GETINFOTIP)
 
 
 /* This is just for old CreateToolbar. */
 /* Don't use it in new programs. */
 typedef struct _OLDTBBUTTON {
-    INT32 iBitmap;
-    INT32 idCommand;
+    INT iBitmap;
+    INT idCommand;
     BYTE  fsState;
     BYTE  fsStyle;
     BYTE  bReserved[2];
@@ -911,13 +911,13 @@
 
 
 typedef struct _TBBUTTON {
-    INT32 iBitmap;
-    INT32 idCommand;
+    INT iBitmap;
+    INT idCommand;
     BYTE  fsState;
     BYTE  fsStyle;
     BYTE  bReserved[2];
     DWORD dwData;
-    INT32 iString;
+    INT iString;
 } TBBUTTON, *PTBBUTTON, *LPTBBUTTON;
 typedef const TBBUTTON *LPCTBBUTTON;
 
@@ -928,11 +928,11 @@
 } COLORMAP, *LPCOLORMAP;
 
 typedef struct tagTBADDBITMAP {
-    HINSTANCE32 hInst;
-    UINT32      nID;
+    HINSTANCE hInst;
+    UINT      nID;
 } TBADDBITMAP, *LPTBADDBITMAP;
 
-#define HINST_COMMCTRL         ((HINSTANCE32)-1)
+#define HINST_COMMCTRL         ((HINSTANCE)-1)
 #define IDB_STD_SMALL_COLOR     0
 #define IDB_STD_LARGE_COLOR     1
 #define IDB_VIEW_SMALL_COLOR    4
@@ -973,44 +973,44 @@
     HKEY   hkr;
     LPCSTR pszSubKey;
     LPCSTR pszValueName;
-} TBSAVEPARAMS32A, *LPTBSAVEPARAMS32A;
+} TBSAVEPARAMSA, *LPTBSAVEPARAMSA;
 
 typedef struct tagTBSAVEPARAMSW {
     HKEY   hkr;
     LPCWSTR pszSubKey;
     LPCWSTR pszValueName;
-} TBSAVEPARAMSA32W, *LPTBSAVEPARAMSA32W;
+} TBSAVEPARAMSAW, *LPTBSAVEPARAMSAW;
 
 #define TBSAVEPARAMS   WINELIB_NAME_AW(TBSAVEPARAMS)
 #define LPTBSAVEPARAMS WINELIB_NAME_AW(LPTBSAVEPARAMS)
 
 typedef struct
 {
-    UINT32 cbSize;
+    UINT cbSize;
     DWORD  dwMask;
-    INT32  idCommand;
-    INT32  iImage;
+    INT  idCommand;
+    INT  iImage;
     BYTE   fsState;
     BYTE   fsStyle;
     WORD   cx;
     DWORD  lParam;
     LPSTR  pszText;
-    INT32  cchText;
-} TBBUTTONINFO32A, *LPTBBUTTONINFO32A;
+    INT  cchText;
+} TBBUTTONINFOA, *LPTBBUTTONINFOA;
 
 typedef struct
 {
-    UINT32 cbSize;
+    UINT cbSize;
     DWORD  dwMask;
-    INT32  idCommand;
-    INT32  iImage;
+    INT  idCommand;
+    INT  iImage;
     BYTE   fsState;
     BYTE   fsStyle;
     WORD   cx;
     DWORD  lParam;
     LPWSTR pszText;
-    INT32  cchText;
-} TBBUTTONINFO32W, *LPTBBUTTONINFO32W;
+    INT  cchText;
+} TBBUTTONINFOW, *LPTBBUTTONINFOW;
 
 #define TBBUTTONINFO   WINELIB_NAME_AW(TBBUTTONINFO)
 #define LPTBBUTTONINFO WINELIB_NAME_AW(LPTBBUTTONINFO)
@@ -1019,49 +1019,49 @@
 {
     NMHDR  hdr;
     LPSTR  pszText;
-    INT32  cchTextMax;
-    INT32  iItem;
+    INT  cchTextMax;
+    INT  iItem;
     LPARAM lParam;
-} NMTBGETINFOTIP32A, *LPNMTBGETINFOTIP32A;
+} NMTBGETINFOTIPA, *LPNMTBGETINFOTIPA;
 
 typedef struct tagNMTBGETINFOTIPW
 {
     NMHDR  hdr;
     LPWSTR pszText;
-    INT32  cchTextMax;
-    INT32  iItem;
+    INT  cchTextMax;
+    INT  iItem;
     LPARAM lParam;
-} NMTBGETINFOTIP32W, *LPNMTBGETINFOTIP32W;
+} NMTBGETINFOTIPW, *LPNMTBGETINFOTIPW;
 
 #define NMTBGETINFOTIP   WINELIB_NAME_AW(NMTBGETINFOFTIP)
 #define LPNMTBGETINFOTIP WINELIB_NAME_AW(LPNMTBGETINFOTIP)
 
 typedef struct
 {
-	HINSTANCE32 hInstOld;
-	UINT32      nIDOld;
-	HINSTANCE32 hInstNew;
-	UINT32      nIDNew;
-	INT32       nButtons;
+	HINSTANCE hInstOld;
+	UINT      nIDOld;
+	HINSTANCE hInstNew;
+	UINT      nIDNew;
+	INT       nButtons;
 } TBREPLACEBITMAP, *LPTBREPLACEBITMAP;
 
-HWND32 WINAPI
-CreateToolbar(HWND32, DWORD, UINT32, INT32, HINSTANCE32,
-              UINT32, LPCOLDTBBUTTON, INT32); 
+HWND WINAPI
+CreateToolbar(HWND, DWORD, UINT, INT, HINSTANCE,
+              UINT, LPCOLDTBBUTTON, INT); 
  
-HWND32 WINAPI
-CreateToolbarEx(HWND32, DWORD, UINT32, INT32,
-                HINSTANCE32, UINT32, LPCTBBUTTON, 
-                INT32, INT32, INT32, INT32, INT32, UINT32); 
+HWND WINAPI
+CreateToolbarEx(HWND, DWORD, UINT, INT,
+                HINSTANCE, UINT, LPCTBBUTTON, 
+                INT, INT, INT, INT, INT, UINT); 
 
-HBITMAP32 WINAPI
-CreateMappedBitmap (HINSTANCE32, INT32, UINT32, LPCOLORMAP, INT32); 
+HBITMAP WINAPI
+CreateMappedBitmap (HINSTANCE, INT, UINT, LPCOLORMAP, INT); 
 
 
 /* Tool tips */
 
 #define TOOLTIPS_CLASS16        "tooltips_class"
-#define TOOLTIPS_CLASS32A       "tooltips_class32"
+#define TOOLTIPS_CLASSA       "tooltips_class32"
 #define TOOLTIPS_CLASS32W       L"tooltips_class32"
 #define TOOLTIPS_CLASS          WINELIB_NAME_AW(TOOLTIPS_CLASS)
 
@@ -1088,37 +1088,37 @@
 
 #define TTM_ACTIVATE            (WM_USER+1)
 #define TTM_SETDELAYTIME        (WM_USER+3)
-#define TTM_ADDTOOL32A          (WM_USER+4)
-#define TTM_ADDTOOL32W          (WM_USER+50)
+#define TTM_ADDTOOLA          (WM_USER+4)
+#define TTM_ADDTOOLW          (WM_USER+50)
 #define TTM_ADDTOOL WINELIB_NAME_AW(TTM_ADDTOOL)
-#define TTM_DELTOOL32A          (WM_USER+5)
-#define TTM_DELTOOL32W          (WM_USER+51)
+#define TTM_DELTOOLA          (WM_USER+5)
+#define TTM_DELTOOLW          (WM_USER+51)
 #define TTM_DELTOOL WINELIB_NAME_AW(TTM_DELTOOL)
-#define TTM_NEWTOOLRECT32A      (WM_USER+6)
-#define TTM_NEWTOOLRECT32W      (WM_USER+52)
+#define TTM_NEWTOOLRECTA      (WM_USER+6)
+#define TTM_NEWTOOLRECTW      (WM_USER+52)
 #define TTM_NEWTOOLRECT WINELIB_NAME_AW(TTM_NEWTOOLRECT)
 #define TTM_RELAYEVENT          (WM_USER+7)
-#define TTM_GETTOOLINFO32A      (WM_USER+8)
-#define TTM_GETTOOLINFO32W      (WM_USER+53)
+#define TTM_GETTOOLINFOA      (WM_USER+8)
+#define TTM_GETTOOLINFOW      (WM_USER+53)
 #define TTM_GETTOOLINFO WINELIB_NAME_AW(TTM_GETTOOLINFO)
-#define TTM_SETTOOLINFO32A      (WM_USER+9)
-#define TTM_SETTOOLINFO32W      (WM_USER+54)
+#define TTM_SETTOOLINFOA      (WM_USER+9)
+#define TTM_SETTOOLINFOW      (WM_USER+54)
 #define TTM_SETTOOLINFO WINELIB_NAME_AW(TTM_SETTOOLINFO)
-#define TTM_HITTEST32A          (WM_USER+10)
-#define TTM_HITTEST32W          (WM_USER+55)
+#define TTM_HITTESTA          (WM_USER+10)
+#define TTM_HITTESTW          (WM_USER+55)
 #define TTM_HITTEST WINELIB_NAME_AW(TTM_HITTEST)
-#define TTM_GETTEXT32A          (WM_USER+11)
-#define TTM_GETTEXT32W          (WM_USER+56)
+#define TTM_GETTEXTA          (WM_USER+11)
+#define TTM_GETTEXTW          (WM_USER+56)
 #define TTM_GETTEXT WINELIB_NAME_AW(TTM_GETTEXT)
-#define TTM_UPDATETIPTEXT32A    (WM_USER+12)
-#define TTM_UPDATETIPTEXT32W    (WM_USER+57)
+#define TTM_UPDATETIPTEXTA    (WM_USER+12)
+#define TTM_UPDATETIPTEXTW    (WM_USER+57)
 #define TTM_UPDATETIPTEXT WINELIB_NAME_AW(TTM_UPDATETIPTEXT)
 #define TTM_GETTOOLCOUNT        (WM_USER+13)
-#define TTM_ENUMTOOLS32A        (WM_USER+14)
-#define TTM_ENUMTOOLS32W        (WM_USER+58)
+#define TTM_ENUMTOOLSA        (WM_USER+14)
+#define TTM_ENUMTOOLSW        (WM_USER+58)
 #define TTM_ENUMTOOLS WINELIB_NAME_AW(TTM_ENUMTOOLS)
-#define TTM_GETCURRENTTOOL32A   (WM_USER+15)
-#define TTM_GETCURRENTTOOL32W   (WM_USER+59)
+#define TTM_GETCURRENTTOOLA   (WM_USER+15)
+#define TTM_GETCURRENTTOOLW   (WM_USER+59)
 #define TTM_GETCURRENTTOOL WINELIB_NAME_AW(TTM_GETCURRENTTOOL)
 #define TTM_WINDOWFROMPOINT     (WM_USER+16)
 #define TTM_TRACKACTIVATE       (WM_USER+17)
@@ -1138,37 +1138,37 @@
 
 #define TTN_FIRST               (0U-520U)
 #define TTN_LAST                (0U-549U)
-#define TTN_GETDISPINFO32A      (TTN_FIRST-0)
-#define TTN_GETDISPINFO32W      (TTN_FIRST-10)
+#define TTN_GETDISPINFOA      (TTN_FIRST-0)
+#define TTN_GETDISPINFOW      (TTN_FIRST-10)
 #define TTN_GETDISPINFO WINELIB_NAME_AW(TTN_GETDISPINFO)
 #define TTN_SHOW                (TTN_FIRST-1)
 #define TTN_POP                 (TTN_FIRST-2)
 
 #define TTN_NEEDTEXT TTN_GETDISPINFO
-#define TTN_NEEDTEXTA TTN_GETDISPINFO32A
-#define TTN_NEEDTEXTW TTN_GETDISPINFO32W
+#define TTN_NEEDTEXTA TTN_GETDISPINFOA
+#define TTN_NEEDTEXTW TTN_GETDISPINFOW
 
 typedef struct tagTOOLINFOA {
-    UINT32 cbSize;
-    UINT32 uFlags;
-    HWND32 hwnd;
-    UINT32 uId;
-    RECT32 rect;
-    HINSTANCE32 hinst;
+    UINT cbSize;
+    UINT uFlags;
+    HWND hwnd;
+    UINT uId;
+    RECT rect;
+    HINSTANCE hinst;
     LPSTR lpszText;
     LPARAM lParam;
-} TTTOOLINFO32A, *LPTOOLINFO32A, *PTOOLINFO32A, *LPTTTOOLINFO32A;
+} TTTOOLINFOA, *LPTOOLINFOA, *PTOOLINFOA, *LPTTTOOLINFOA;
 
 typedef struct tagTOOLINFOW {
-    UINT32 cbSize;
-    UINT32 uFlags;
-    HWND32 hwnd;
-    UINT32 uId;
-    RECT32 rect;
-    HINSTANCE32 hinst;
+    UINT cbSize;
+    UINT uFlags;
+    HWND hwnd;
+    UINT uId;
+    RECT rect;
+    HINSTANCE hinst;
     LPWSTR lpszText;
     LPARAM lParam;
-} TTTOOLINFO32W, *LPTOOLINFO32W, *PTOOLINFO32W, *LPTTTOOLINFO32W;
+} TTTOOLINFOW, *LPTOOLINFOW, *PTOOLINFOW, *LPTTTOOLINFOW;
 
 #define TTTOOLINFO WINELIB_NAME_AW(TTTOOLINFO)
 #define TOOLINFO WINELIB_NAME_AW(TTTOOLINFO)
@@ -1176,23 +1176,23 @@
 #define LPTTTOOLINFO WINELIB_NAME_AW(LPTTTOOLINFO)
 #define LPTOOLINFO WINELIB_NAME_AW(LPTOOLINFO)
 
-#define TTTOOLINFO_V1_SIZE32A CCSIZEOF_STRUCT(TTTOOLINFO32A, lpszText)
-#define TTTOOLINFO_V1_SIZE32W CCSIZEOF_STRUCT(TTTOOLINFO32W, lpszText)
+#define TTTOOLINFO_V1_SIZEA CCSIZEOF_STRUCT(TTTOOLINFOA, lpszText)
+#define TTTOOLINFO_V1_SIZEW CCSIZEOF_STRUCT(TTTOOLINFOW, lpszText)
 #define TTTOOLINFO_V1_SIZE WINELIB_NAME_AW(TTTOOLINFO_V1_SIZE)
 
 typedef struct _TT_HITTESTINFOA
 {
-    HWND32        hwnd;
-    POINT32       pt;
-    TTTOOLINFO32A ti;
-} TTHITTESTINFO32A, *LPTTHITTESTINFO32A;
+    HWND        hwnd;
+    POINT       pt;
+    TTTOOLINFOA ti;
+} TTHITTESTINFOA, *LPTTHITTESTINFOA;
 
 typedef struct _TT_HITTESTINFOW
 {
-    HWND32        hwnd;
-    POINT32       pt;
-    TTTOOLINFO32W ti;
-} TTHITTESTINFO32W, *LPTTHITTESTINFO32W;
+    HWND        hwnd;
+    POINT       pt;
+    TTTOOLINFOW ti;
+} TTHITTESTINFOW, *LPTTHITTESTINFOW;
 
 #define TTHITTESTINFO WINELIB_NAME_AW(TTHITTESTINFO)
 #define LPTTHITTESTINFO WINELIB_NAME_AW(LPTTHITTESTINFO)
@@ -1202,30 +1202,30 @@
     NMHDR hdr;
     LPSTR lpszText;
     CHAR  szText[80];
-    HINSTANCE32 hinst;
-    UINT32      uFlags;
+    HINSTANCE hinst;
+    UINT      uFlags;
     LPARAM      lParam;
-} NMTTDISPINFO32A, *LPNMTTDISPINFO32A;
+} NMTTDISPINFOA, *LPNMTTDISPINFOA;
 
 typedef struct tagNMTTDISPINFOW
 {
     NMHDR       hdr;
     LPWSTR      lpszText;
     WCHAR       szText[80];
-    HINSTANCE32 hinst;
-    UINT32      uFlags;
+    HINSTANCE hinst;
+    UINT      uFlags;
     LPARAM      lParam;
-} NMTTDISPINFO32W, *LPNMTTDISPINFO32W;
+} NMTTDISPINFOW, *LPNMTTDISPINFOW;
 
 #define NMTTDISPINFO WINELIB_NAME_AW(NMTTDISPINFO)
 #define LPNMTTDISPINFO WINELIB_NAME_AW(LPNMTTDISPINFO)
 
-#define NMTTDISPINFO_V1_SIZE32A CCSIZEOF_STRUCT(NMTTDISPINFO32A, uFlags)
-#define NMTTDISPINFO_V1_SIZE32W CCSIZEOF_STRUCT(NMTTDISPINFO32W, uFlags)
+#define NMTTDISPINFO_V1_SIZEA CCSIZEOF_STRUCT(NMTTDISPINFOA, uFlags)
+#define NMTTDISPINFO_V1_SIZEW CCSIZEOF_STRUCT(NMTTDISPINFOW, uFlags)
 #define NMTTDISPINFO_V1_SIZE WINELIB_NAME_AW(NMTTDISPINFO_V1_SIZE)
 
-#define TOOLTIPTEXTW    NMTTDISPINFO32W
-#define TOOLTIPTEXTA    NMTTDISPINFO32A
+#define TOOLTIPTEXTW    NMTTDISPINFOW
+#define TOOLTIPTEXTA    NMTTDISPINFOA
 #define TOOLTIPTEXT     NMTTDISPINFO
 #define LPTOOLTIPTEXTW  LPNMTTDISPINFOW
 #define LPTOOLTIPTEXTA  LPNMTTDISPINFOA
@@ -1235,8 +1235,8 @@
 /* Rebar control */
 
 #define REBARCLASSNAME16        "ReBarWindow"
-#define REBARCLASSNAME32A       "ReBarWindow32"
-#define REBARCLASSNAME32W       L"ReBarWindow32"
+#define REBARCLASSNAMEA       "ReBarWindow32"
+#define REBARCLASSNAMEW       L"ReBarWindow32"
 #define REBARCLASSNAME          WINELIB_NAME_AW(REBARCLASSNAME)
 
 #define RBS_TOOLTIPS            0x0100
@@ -1282,15 +1282,15 @@
 #define RBHT_CLIENT             0x0003
 #define RBHT_GRABBER            0x0004
 
-#define RB_INSERTBAND32A        (WM_USER+1)
-#define RB_INSERTBAND32W        (WM_USER+10)
+#define RB_INSERTBANDA        (WM_USER+1)
+#define RB_INSERTBANDW        (WM_USER+10)
 #define RB_INSERTBAND           WINELIB_NAME_AW(RB_INSERTBAND)
 #define RB_DELETEBAND           (WM_USER+2)
 #define RB_GETBARINFO           (WM_USER+3)
 #define RB_SETBARINFO           (WM_USER+4)
-#define RB_GETBANDINFO32        (WM_USER+5)   /* just for compatibility */
-#define RB_SETBANDINFO32A       (WM_USER+6)
-#define RB_SETBANDINFO32W       (WM_USER+11)
+#define RB_GETBANDINFO        (WM_USER+5)   /* just for compatibility */
+#define RB_SETBANDINFOA       (WM_USER+6)
+#define RB_SETBANDINFOW       (WM_USER+11)
 #define RB_SETBANDINFO          WINELIB_NAME_AW(RB_SETBANDINFO)
 #define RB_SETPARENT            (WM_USER+7)
 #define RB_HITTEST              (WM_USER+8)
@@ -1310,9 +1310,9 @@
 #define RB_ENDDRAG              (WM_USER+25)
 #define RB_DRAGMOVE             (WM_USER+26)
 #define RB_GETBARHEIGHT         (WM_USER+27)
-#define RB_GETBANDINFO32W       (WM_USER+28)
-#define RB_GETBANDINFO32A       (WM_USER+29)
-#define RB_GETBANDINFO          WINELIB_NAME_AW(RB_GETBANDINFO)
+#define RB_GETBANDINFOW       (WM_USER+28)
+#define RB_GETBANDINFOA       (WM_USER+29)
+#define RB_GETBANDINFO16          WINELIB_NAME_AW(RB_GETBANDINFO16)
 #define RB_MINIMIZEBAND         (WM_USER+30)
 #define RB_MAXIMIZEBAND         (WM_USER+31)
 #define RB_GETBANDBORDERS       (WM_USER+34)
@@ -1340,111 +1340,111 @@
 
 typedef struct tagREBARINFO
 {
-    UINT32     cbSize;
-    UINT32     fMask;
+    UINT     cbSize;
+    UINT     fMask;
     HIMAGELIST himl;
 } REBARINFO, *LPREBARINFO;
 
 typedef struct tagREBARBANDINFOA
 {
-    UINT32    cbSize;
-    UINT32    fMask;
-    UINT32    fStyle;
+    UINT    cbSize;
+    UINT    fMask;
+    UINT    fStyle;
     COLORREF  clrFore;
     COLORREF  clrBack;
     LPSTR     lpText;
-    UINT32    cch;
-    INT32     iImage;
-    HWND32    hwndChild;
-    UINT32    cxMinChild;
-    UINT32    cyMinChild;
-    UINT32    cx;
-    HBITMAP32 hbmBack;
-    UINT32    wID;
-    UINT32    cyChild;
-    UINT32    cyMaxChild;
-    UINT32    cyIntegral;
-    UINT32    cxIdeal;
+    UINT    cch;
+    INT     iImage;
+    HWND    hwndChild;
+    UINT    cxMinChild;
+    UINT    cyMinChild;
+    UINT    cx;
+    HBITMAP hbmBack;
+    UINT    wID;
+    UINT    cyChild;
+    UINT    cyMaxChild;
+    UINT    cyIntegral;
+    UINT    cxIdeal;
     LPARAM    lParam;
-    UINT32    cxHeader;
-} REBARBANDINFO32A, *LPREBARBANDINFO32A;
+    UINT    cxHeader;
+} REBARBANDINFOA, *LPREBARBANDINFOA;
 
-typedef REBARBANDINFO32A const *LPCREBARBANDINFO32A;
+typedef REBARBANDINFOA const *LPCREBARBANDINFOA;
 
 typedef struct tagREBARBANDINFOW
 {
-    UINT32    cbSize;
-    UINT32    fMask;
-    UINT32    fStyle;
+    UINT    cbSize;
+    UINT    fMask;
+    UINT    fStyle;
     COLORREF  clrFore;
     COLORREF  clrBack;
     LPWSTR    lpText;
-    UINT32    cch;
-    INT32     iImage;
-    HWND32    hwndChild;
-    UINT32    cxMinChild;
-    UINT32    cyMinChild;
-    UINT32    cx;
-    HBITMAP32 hbmBack;
-    UINT32    wID;
-    UINT32    cyChild;
-    UINT32    cyMaxChild;
-    UINT32    cyIntegral;
-    UINT32    cxIdeal;
+    UINT    cch;
+    INT     iImage;
+    HWND    hwndChild;
+    UINT    cxMinChild;
+    UINT    cyMinChild;
+    UINT    cx;
+    HBITMAP hbmBack;
+    UINT    wID;
+    UINT    cyChild;
+    UINT    cyMaxChild;
+    UINT    cyIntegral;
+    UINT    cxIdeal;
     LPARAM    lParam;
-    UINT32    cxHeader;
-} REBARBANDINFO32W, *LPREBARBANDINFO32W;
+    UINT    cxHeader;
+} REBARBANDINFOW, *LPREBARBANDINFOW;
 
-typedef REBARBANDINFO32W const *LPCREBARBANDINFO32W;
+typedef REBARBANDINFOW const *LPCREBARBANDINFOW;
 
 #define REBARBANDINFO    WINELIB_NAME_AW(REBARBANDINFO)
 #define LPREBARBANDINFO  WINELIB_NAME_AW(LPREBARBANDINFO)
 #define LPCREBARBANDINFO WINELIB_NAME_AW(LPCREBARBANDINFO)
 
-#define REBARBANDINFO_V3_SIZE32A CCSIZEOF_STRUCT(REBARBANDINFO32A, wID)
-#define REBARBANDINFO_V3_SIZE32W CCSIZEOF_STRUCT(REBARBANDINFO32W, wID)
+#define REBARBANDINFO_V3_SIZEA CCSIZEOF_STRUCT(REBARBANDINFOA, wID)
+#define REBARBANDINFO_V3_SIZEW CCSIZEOF_STRUCT(REBARBANDINFOW, wID)
 #define REBARBANDINFO_V3_SIZE WINELIB_NAME_AW(REBARBANDINFO_V3_SIZE)
 
 typedef struct tagNMREBARCHILDSIZE
 {
     NMHDR  hdr;
-    UINT32 uBand;
-    UINT32 wID;
-    RECT32 rcChild;
-    RECT32 rcBand;
+    UINT uBand;
+    UINT wID;
+    RECT rcChild;
+    RECT rcBand;
 } NMREBARCHILDSIZE, *LPNMREBARCHILDSIZE;
 
 typedef struct tagNMREBAR
 {
     NMHDR  hdr;
     DWORD  dwMask;
-    UINT32 uBand;
-    UINT32 fStyle;
-    UINT32 wID;
+    UINT uBand;
+    UINT fStyle;
+    UINT wID;
     LPARAM lParam;
 } NMREBAR, *LPNMREBAR;
 
 typedef struct tagNMRBAUTOSIZE
 {
     NMHDR hdr;
-    BOOL32 fChanged;
-    RECT32 rcTarget;
-    RECT32 rcActual;
+    BOOL fChanged;
+    RECT rcTarget;
+    RECT rcActual;
 } NMRBAUTOSIZE, *LPNMRBAUTOSIZE;
 
 typedef struct _RB_HITTESTINFO
 {
-    POINT32 pt;
-    UINT32  flags;
-    INT32   iBand;
+    POINT pt;
+    UINT  flags;
+    INT   iBand;
 } RBHITTESTINFO, *LPRBHITTESTINFO;
 
 
 /* Trackbar control */
 
 #define TRACKBAR_CLASS16        "msctls_trackbar"
-#define TRACKBAR_CLASS32A       "msctls_trackbar32"
-#define TRACKBAR_CLASS32W       L"msctls_trackbar32"
+#define TRACKBAR_CLASSA       "msctls_trackbar32"
+#define TRACKBAR_CLASSW       L"msctls_trackbar32"
 #define TRACKBAR_CLASS  WINELIB_NAME_AW(TRACKBAR_CLASS)
 
 #define TBS_AUTOTICKS           0x0001
@@ -1519,8 +1519,8 @@
 
 /* Pager control */
 
-#define WC_PAGESCROLLER32A      "SysPager"
-#define WC_PAGESCROLLER32W      L"SysPager"
+#define WC_PAGESCROLLERA      "SysPager"
+#define WC_PAGESCROLLERW      L"SysPager"
 #define WC_PAGESCROLLER  WINELIB_NAME_AW(WC_PAGESCROLLER)
 
 #define PGS_VERT                0x00000000
@@ -1575,34 +1575,34 @@
 {
     NMHDR hdr;
     WORD  fwKeys;
-    RECT32 rcParent;
-    INT32  iDir;
-    INT32  iXpos;
-    INT32  iYpos;
-    INT32  iScroll;
+    RECT rcParent;
+    INT  iDir;
+    INT  iXpos;
+    INT  iYpos;
+    INT  iScroll;
 } NMPGSCROLL, *LPNMPGSCROLL;
 
 typedef struct
 {
     NMHDR hdr;
     DWORD dwFlag;
-    INT32 iWidth;
-    INT32 iHeight;
+    INT iWidth;
+    INT iHeight;
 } NMPGCALCSIZE, *LPNMPGCALCSIZE;
 
 
 /* Treeview control */
 
-#define WC_TREEVIEW32A          "SysTreeView32"
-#define WC_TREEVIEW32W          L"SysTreeView32"
+#define WC_TREEVIEWA          "SysTreeView32"
+#define WC_TREEVIEWW          L"SysTreeView32"
 #define WC_TREEVIEW             WINELIB_NAME_AW(WC_TREEVIEW)
 
 #define TVSIL_NORMAL            0
 #define TVSIL_STATE             2
 
 #define TV_FIRST                0x1100
-#define TVM_INSERTITEM32A       (TV_FIRST+0)
-#define TVM_INSERTITEM32W       (TV_FIRST+50)
+#define TVM_INSERTITEMA       (TV_FIRST+0)
+#define TVM_INSERTITEMW       (TV_FIRST+50)
 #define TVM_INSERTITEM          WINELIB_NAME_AW(TVM_INSERTITEM)
 #define TVM_DELETEITEM          (TV_FIRST+1)
 #define TVM_EXPAND              (TV_FIRST+2)
@@ -1614,14 +1614,14 @@
 #define TVM_SETIMAGELIST        (TV_FIRST+9)
 #define TVM_GETNEXTITEM         (TV_FIRST+10)
 #define TVM_SELECTITEM          (TV_FIRST+11)
-#define TVM_GETITEM32A          (TV_FIRST+12)
-#define TVM_GETITEM32W          (TV_FIRST+62)
+#define TVM_GETITEMA          (TV_FIRST+12)
+#define TVM_GETITEMW          (TV_FIRST+62)
 #define TVM_GETITEM             WINELIB_NAME_AW(TVM_GETITEM)
-#define TVM_SETITEM32A          (TV_FIRST+13)
-#define TVM_SETITEM32W          (TV_FIRST+63)
+#define TVM_SETITEMA          (TV_FIRST+13)
+#define TVM_SETITEMW          (TV_FIRST+63)
 #define TVM_SETITEM             WINELIB_NAME_AW(TVM_SETITEM)
-#define TVM_EDITLABEL32A        (TV_FIRST+14)
-#define TVM_EDITLABEL32W        (TV_FIRST+65)
+#define TVM_EDITLABELA        (TV_FIRST+14)
+#define TVM_EDITLABELW        (TV_FIRST+65)
 #define TVM_EDITLABEL           WINELIB_NAME_AW(TVM_EDITLABEL)
 #define TVM_GETEDITCONTROL      (TV_FIRST+15)
 #define TVM_GETVISIBLECOUNT     (TV_FIRST+16)
@@ -1631,8 +1631,8 @@
 #define TVM_ENSUREVISIBLE       (TV_FIRST+20)
 #define TVM_SORTCHILDRENCB      (TV_FIRST+21)
 #define TVM_ENDEDITLABELNOW     (TV_FIRST+22)
-#define TVM_GETISEARCHSTRING32A (TV_FIRST+23)
-#define TVM_GETISEARCHSTRING32W (TV_FIRST+64)
+#define TVM_GETISEARCHSTRINGA (TV_FIRST+23)
+#define TVM_GETISEARCHSTRINGW (TV_FIRST+64)
 #define TVM_GETISEARCHSTRING    WINELIB_NAME_AW(TVM_GETISEARCHSTRING)
 #define TVM_SETTOOLTIPS         (TV_FIRST+24)
 #define TVM_GETTOOLTIPS         (TV_FIRST+25)
@@ -1771,128 +1771,128 @@
 typedef struct _TREEITEM *HTREEITEM;
 
 typedef struct {
-      UINT32 mask;
+      UINT mask;
       HTREEITEM hItem;
-      UINT32 state;
-      UINT32 stateMask;
+      UINT state;
+      UINT stateMask;
       LPSTR  pszText;
-      INT32  cchTextMax;
-      INT32  iImage;
-      INT32  iSelectedImage;
-      INT32  cChildren;
+      INT  cchTextMax;
+      INT  iImage;
+      INT  iSelectedImage;
+      INT  cChildren;
       LPARAM lParam;
-} TVITEM32A, *LPTVITEM32A;
+} TVITEMA, *LPTVITEMA;
 
 typedef struct {
-      UINT32 mask;
+      UINT mask;
       HTREEITEM hItem;
-      UINT32 state;
-      UINT32 stateMask;
+      UINT state;
+      UINT stateMask;
       LPWSTR pszText;
-      INT32 cchTextMax;
-      INT32 iImage;
-      INT32 iSelectedImage;
-      INT32 cChildren;
+      INT cchTextMax;
+      INT iImage;
+      INT iSelectedImage;
+      INT cChildren;
       LPARAM lParam;
-} TVITEM32W, *LPTVITEM32W;
+} TVITEMW, *LPTVITEMW;
 
 #define TVITEM     WINELIB_NAME_AW(TVITEM)
 #define LPTVITEM   WINELIB_NAME_AW(LPTVITEM)
 #define TV_ITEM	    TVITEM
 
 typedef struct {
-      UINT32 mask;
+      UINT mask;
       HTREEITEM hItem;
-      UINT32 state;
-      UINT32 stateMask;
+      UINT state;
+      UINT stateMask;
       LPSTR  pszText;
-      INT32  cchTextMax;
-      INT32  iImage;
-      INT32  iSelectedImage;
-      INT32  cChildren;
+      INT  cchTextMax;
+      INT  iImage;
+      INT  iSelectedImage;
+      INT  cChildren;
       LPARAM lParam;
-      INT32 iIntegral;
-} TVITEMEX32A, *LPTVITEMEX32A;
+      INT iIntegral;
+} TVITEMEXA, *LPTVITEMEXA;
 
 typedef struct {
-      UINT32 mask;
+      UINT mask;
       HTREEITEM hItem;
-      UINT32 state;
-      UINT32 stateMask;
+      UINT state;
+      UINT stateMask;
       LPWSTR pszText;
-      INT32 cchTextMax;
-      INT32 iImage;
-      INT32 iSelectedImage;
-      INT32 cChildren;
+      INT cchTextMax;
+      INT iImage;
+      INT iSelectedImage;
+      INT cChildren;
       LPARAM lParam;
-      INT32 iIntegral;
-} TVITEMEX32W, *LPTVITEMEX32W;
+      INT iIntegral;
+} TVITEMEXW, *LPTVITEMEXW;
 
 #define TVITEMEX   WINELIB_NAME_AW(TVITEMEX)
 #define LPTVITEMEX WINELIB_NAME_AW(LPTVITEMEX)
 
-typedef struct tagTVINSERTSTRUCT32A {
+typedef struct tagTVINSERTSTRUCTA {
         HTREEITEM hParent;
         HTREEITEM hInsertAfter;
         union {
-           TVITEMEX32A itemex;
-           TVITEM32A   item;
+           TVITEMEXA itemex;
+           TVITEMA   item;
         } DUMMYUNIONNAME;
-} TVINSERTSTRUCT32A, *LPTVINSERTSTRUCT32A;
+} TVINSERTSTRUCTA, *LPTVINSERTSTRUCTA;
 
-typedef struct tagTVINSERTSTRUCT32W {
+typedef struct tagTVINSERTSTRUCTW {
         HTREEITEM hParent;
         HTREEITEM hInsertAfter;
         union {
-           TVITEMEX32W itemex;
-           TVITEM32W   item;
+           TVITEMEXW itemex;
+           TVITEMW   item;
         } DUMMYUNIONNAME;
-} TVINSERTSTRUCT32W, *LPTVINSERTSTRUCT32W;
+} TVINSERTSTRUCTW, *LPTVINSERTSTRUCTW;
 
 #define TV_INSERTSTRUCT   WINELIB_NAME_AW(TVINSERTSTRUCT)
 #define LPTV_INSERTSTRUCT WINELIB_NAME_AW(LPTVINSERTSTRUCT)
 
-#define TVINSERTSTRUCT_V1_SIZE32A CCSIZEOF_STRUCT(TVINSERTSTRUCT32A, item)
-#define TVINSERTSTRUCT_V1_SIZE32W CCSIZEOF_STRUCT(TVINSERTSTRUCT32W, item)
+#define TVINSERTSTRUCT_V1_SIZEA CCSIZEOF_STRUCT(TVINSERTSTRUCTA, item)
+#define TVINSERTSTRUCT_V1_SIZEW CCSIZEOF_STRUCT(TVINSERTSTRUCTW, item)
 #define TVINSERTSTRUCT_V1_SIZE    WINELIB_NAME_AW(TVINSERTSTRUCT_V1_SIZE)
 
 
 
-typedef struct tagNMTREEVIEW32A {
+typedef struct tagNMTREEVIEWA {
 	NMHDR	hdr;
-	UINT32	action;
-	TVITEM32A	itemOld;
-	TVITEM32A	itemNew;
-	POINT32	ptDrag;
-} NMTREEVIEW32A, *LPNMTREEVIEW32A;
+	UINT	action;
+	TVITEMA	itemOld;
+	TVITEMA	itemNew;
+	POINT	ptDrag;
+} NMTREEVIEWA, *LPNMTREEVIEWA;
 
-typedef struct tagNMTREEVIEW32W {
+typedef struct tagNMTREEVIEWW {
 	NMHDR	hdr;
-	UINT32	action;
-	TVITEM32W	itemOld;
-	TVITEM32W	itemNew;
-	POINT32	ptDrag;
-} NMTREEVIEW32W, *LPNMTREEVIEW32W;
+	UINT	action;
+	TVITEMW	itemOld;
+	TVITEMW	itemNew;
+	POINT	ptDrag;
+} NMTREEVIEWW, *LPNMTREEVIEWW;
 
 #define NMTREEVIEW     WINELIB_NAME_AW(NMTREEVIEW)
 #define NM_TREEVIEW    WINELIB_NAME_AW(NMTREEVIEW)
 #define LPNMTREEVIEW   WINELIB_NAME_AW(LPNMTREEVIEW)
 
-typedef struct tagTVDISPINFO32A {
+typedef struct tagTVDISPINFOA {
 	NMHDR	hdr;
-	TVITEM32A	item;
-} NMTVDISPINFO32A, *LPNMTVDISPINFO32A;
+	TVITEMA	item;
+} NMTVDISPINFOA, *LPNMTVDISPINFOA;
 
-typedef struct tagTVDISPINFO32W {
+typedef struct tagTVDISPINFOW {
 	NMHDR	hdr;
-	TVITEM32W	item;
-} NMTVDISPINFO32W, *LPNMTVDISPINFO32W;
+	TVITEMW	item;
+} NMTVDISPINFOW, *LPNMTVDISPINFOW;
 
 #define NMTVDISPINFO            WINELIB_NAME_AW(NMTVDISPINFO)
 #define LPNMTVDISPINFO          WINELIB_NAME_AW(LPNMTVDISPINFO)
 #define TV_DISPINFO             NMTVDISPINFO
 
-typedef INT32 (CALLBACK *PFNTVCOMPARE)(LPARAM, LPARAM, LPARAM);
+typedef INT (CALLBACK *PFNTVCOMPARE)(LPARAM, LPARAM, LPARAM);
 
 typedef struct tagTVSORTCB
 {
@@ -1905,8 +1905,8 @@
 #define LPTV_SORTCB LPTVSORTCB
 
 typedef struct tagTVHITTESTINFO {
-        POINT32 pt;
-        UINT32 flags;
+        POINT pt;
+        UINT flags;
         HTREEITEM hItem;
 } TVHITTESTINFO, *LPTVHITTESTINFO;
 
@@ -1924,67 +1924,66 @@
     NMCUSTOMDRAW nmcd;
     COLORREF     clrText;
     COLORREF     clrTextBk;
-    INT32 iLevel;                 /* IE>0x0400 */
+    INT iLevel;                 /* IE>0x0400 */
 } NMTVCUSTOMDRAW, *LPNMTVCUSTOMDRAW;
 
 /* Treeview tooltips */
 
-typedef struct tagNMTVGETINFOTIP32A
+typedef struct tagNMTVGETINFOTIPA
 {
     NMHDR hdr;
     LPSTR pszText;
-    INT32 cchTextMax;
+    INT cchTextMax;
     HTREEITEM hItem;
     LPARAM lParam;
-} NMTVGETINFOTIP32A, *LPNMTVGETINFOTIP32A;
+} NMTVGETINFOTIPA, *LPNMTVGETINFOTIPA;
 
-typedef struct tagNMTVGETINFOTIP32W
+typedef struct tagNMTVGETINFOTIPW
 {
     NMHDR hdr;
     LPWSTR pszText;
-    INT32 cchTextMax;
+    INT cchTextMax;
     HTREEITEM hItem;
     LPARAM lParam;
-} NMTVGETINFOTIP32W, *LPNMTVGETINFOTIP32W;
-
-
-#define NMTVGETINFOTIP          WINELIB_NAME(NMTVGETINFOTIP)
+} NMTVGETINFOTIPW, *LPNMTVGETINFOTIPW;
 
 
 
 
 
-#define TreeView_InsertItem32A(hwnd, phdi) \
-  (INT32)SendMessage32A((hwnd), TVM_INSERTITEM32A, 0, \
-                            (LPARAM)(LPTVINSERTSTRUCT32A)(phdi))
+
+
+#define TreeView_InsertItemA(hwnd, phdi) \
+  (INT)SendMessageA((hwnd), TVM_INSERTITEMA, 0, \
+                            (LPARAM)(LPTVINSERTSTRUCTA)(phdi))
 #define TreeView_DeleteItem(hwnd, hItem) \
-  (BOOL32)SendMessage32A((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hItem))
+  (BOOL)SendMessageA((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hItem))
 #define TreeView_DeleteAllItems(hwnd) \
-  (BOOL32)SendMessage32A((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT)
+  (BOOL)SendMessageA((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT)
 #define TreeView_Expand(hwnd, hitem, code) \
- (BOOL32)SendMessage32A((hwnd), TVM_EXPAND, (WPARAM)code, \
+ (BOOL)SendMessageA((hwnd), TVM_EXPAND, (WPARAM)code, \
 	(LPARAM)(HTREEITEM)(hitem))
 
 #define TreeView_GetItemRect(hwnd, hitem, prc, code) \
- (*(HTREEITEM *)prc = (hitem), (BOOL)SendMessage32A((hwnd), \
-			TVM_GETITEMRECT, (WPARAM32)(code), (LPARAM)(RECT *)(prc)))
+ (*(HTREEITEM *)prc = (hitem), (BOOL)SendMessageA((hwnd), \
+			TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc)))
 
 #define TreeView_GetCount(hwnd) \
-    (UINT32)SendMessage32A((hwnd), TVM_GETCOUNT, 0, 0)
+    (UINT)SendMessageA((hwnd), TVM_GETCOUNT, 0, 0)
 #define TreeView_GetIndent(hwnd) \
-    (UINT32)SendMessage32A((hwnd), TVM_GETINDENT, 0, 0)
+    (UINT)SendMessageA((hwnd), TVM_GETINDENT, 0, 0)
 #define TreeView_SetIndent(hwnd, indent) \
-    (BOOL32)SendMessage32A((hwnd), TVM_SETINDENT, (WPARAM)indent, 0)
+    (BOOL)SendMessageA((hwnd), TVM_SETINDENT, (WPARAM)indent, 0)
 
 #define TreeView_GetImageList(hwnd, iImage) \
-    (HIMAGELIST)SendMessage32A((hwnd), TVM_GETIMAGELIST, iImage, 0)
+    (HIMAGELIST)SendMessageA((hwnd), TVM_GETIMAGELIST, iImage, 0)
 
 #define TreeView_SetImageList(hwnd, himl, iImage) \
-    (HIMAGELIST)SendMessage32A((hwnd), TVM_SETIMAGELIST, iImage, \
- (LPARAM)(UINT32)(HIMAGELIST)(himl))
+    (HIMAGELIST)SendMessageA((hwnd), TVM_SETIMAGELIST, iImage, \
+ (LPARAM)(UINT)(HIMAGELIST)(himl))
 
 #define TreeView_GetNextItem(hwnd, hitem, code) \
-    (HTREEITEM)SendMessage32A((hwnd), TVM_GETNEXTITEM, (WPARAM)code,\
+    (HTREEITEM)SendMessageA((hwnd), TVM_GETNEXTITEM, (WPARAM)code,\
 (LPARAM)(HTREEITEM) (hitem))
 
 #define TreeView_GetChild(hwnd, hitem) \
@@ -2014,8 +2013,8 @@
 
 
 #define TreeView_Select(hwnd, hitem, code) \
- (UINT32)SendMessage32A((hwnd), TVM_SELECTITEM, (WPARAM32)code, \
-(LPARAM)(UINT32)(hitem))
+ (UINT)SendMessageA((hwnd), TVM_SELECTITEM, (WPARAM)code, \
+(LPARAM)(UINT)(hitem))
 
 
 #define TreeView_SelectItem(hwnd, hitem) \
@@ -2027,75 +2026,75 @@
 		TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE)
 */
 
-#define TreeView_GetItem32A(hwnd, pitem) \
- (BOOL32)SendMessage32A((hwnd), TVM_GETITEM32A, 0, (LPARAM) (TVITEM32A *)(pitem))
+#define TreeView_GetItemA(hwnd, pitem) \
+ (BOOL)SendMessageA((hwnd), TVM_GETITEMA, 0, (LPARAM) (TVITEMA *)(pitem))
 
-#define TreeView_SetItem32A(hwnd, pitem) \
- (BOOL32)SendMessage32A((hwnd), TVM_SETITEM32A, 0, (LPARAM)(const TVITEM32A *)(pitem)) 
+#define TreeView_SetItemA(hwnd, pitem) \
+ (BOOL)SendMessageA((hwnd), TVM_SETITEMA, 0, (LPARAM)(const TVITEMA *)(pitem)) 
 
 #define TreeView_EditLabel(hwnd, hitem) \
-    (HWND)SendMessage32A((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem))
+    (HWND)SendMessageA((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem))
 
 
 #define TreeView_GetEditControl(hwnd) \
-    (HWND)SendMessage32A((hwnd), TVM_GETEDITCONTROL, 0, 0)
+    (HWND)SendMessageA((hwnd), TVM_GETEDITCONTROL, 0, 0)
 
 #define TreeView_GetVisibleCount(hwnd) \
-    (UINT32)SendMessage32A((hwnd), TVM_GETVISIBLECOUNT, 0, 0)
+    (UINT)SendMessageA((hwnd), TVM_GETVISIBLECOUNT, 0, 0)
 
 #define TreeView_HitTest(hwnd, lpht) \
-    (HTREEITEM)SendMessage32A((hwnd), TVM_HITTEST, 0,\
+    (HTREEITEM)SendMessageA((hwnd), TVM_HITTEST, 0,\
 (LPARAM)(LPTVHITTESTINFO)(lpht))
 
 #define TreeView_CreateDragImage(hwnd, hitem) \
-    (HIMAGELIST)SendMessage32A((hwnd), TVM_CREATEDRAGIMAGE, 0,\
+    (HIMAGELIST)SendMessageA((hwnd), TVM_CREATEDRAGIMAGE, 0,\
 (LPARAM)(HTREEITEM)(hitem))
 
 #define TreeView_SortChildren(hwnd, hitem, recurse) \
-    (BOOL32)SendMessage32A((hwnd), TVM_SORTCHILDREN, (WPARAM32)recurse,\
+    (BOOL)SendMessageA((hwnd), TVM_SORTCHILDREN, (WPARAM)recurse,\
 (LPARAM)(HTREEITEM)(hitem))
 
 #define TreeView_EnsureVisible(hwnd, hitem) \
-    (BOOL32)SendMessage32A((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(UINT32)(hitem))
+    (BOOL)SendMessageA((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(UINT)(hitem))
 
 #define TreeView_SortChildrenCB(hwnd, psort, recurse) \
-    (BOOL32)SendMessage32A((hwnd), TVM_SORTCHILDRENCB, (WPARAM32)recurse, \
+    (BOOL)SendMessageA((hwnd), TVM_SORTCHILDRENCB, (WPARAM)recurse, \
     (LPARAM)(LPTV_SORTCB)(psort))
 
 #define TreeView_EndEditLabelNow(hwnd, fCancel) \
-    (BOOL32)SendMessage32A((hwnd), TVM_ENDEDITLABELNOW, (WPARAM32)fCancel, 0)
+    (BOOL)SendMessageA((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)fCancel, 0)
 
 #define TreeView_GetISearchString(hwndTV, lpsz) \
-    (BOOL32)SendMessage32A((hwndTV), TVM_GETISEARCHSTRING, 0, \
+    (BOOL)SendMessageA((hwndTV), TVM_GETISEARCHSTRING, 0, \
 							(LPARAM)(LPTSTR)lpsz)
 
 #define TreeView_SetItemHeight(hwnd,  iHeight) \
-    (INT32)SendMessage32A((hwnd), TVM_SETITEMHEIGHT, (WPARAM32)iHeight, 0)
+    (INT)SendMessageA((hwnd), TVM_SETITEMHEIGHT, (WPARAM)iHeight, 0)
 #define TreeView_GetItemHeight(hwnd) \
-    (INT32)SendMessage32A((hwnd), TVM_GETITEMHEIGHT, 0, 0)
+    (INT)SendMessageA((hwnd), TVM_GETITEMHEIGHT, 0, 0)
 
 #define TreeView_SetBkColor(hwnd, clr) \
-    (COLORREF)SendMessage32A((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)clr)
+    (COLORREF)SendMessageA((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)clr)
 
 #define TreeView_SetTextColor(hwnd, clr) \
-    (COLORREF)SendMessage32A((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)clr)
+    (COLORREF)SendMessageA((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)clr)
 
 #define TreeView_GetBkColor(hwnd) \
-    (COLORREF)SendMessage32A((hwnd), TVM_GETBKCOLOR, 0, 0)
+    (COLORREF)SendMessageA((hwnd), TVM_GETBKCOLOR, 0, 0)
 
 #define TreeView_GetTextColor(hwnd) \
-    (COLORREF)SendMessage32A((hwnd), TVM_GETTEXTCOLOR, 0, 0)
+    (COLORREF)SendMessageA((hwnd), TVM_GETTEXTCOLOR, 0, 0)
 
 #define TreeView_SetScrollTime(hwnd, uTime) \
-    (UINT32)SendMessage32A((hwnd), TVM_SETSCROLLTIME, uTime, 0)
+    (UINT)SendMessageA((hwnd), TVM_SETSCROLLTIME, uTime, 0)
 
 #define TreeView_GetScrollTime(hwnd) \
-    (UINT32)SendMessage32A((hwnd), TVM_GETSCROLLTIME, 0, 0)
+    (UINT)SendMessageA((hwnd), TVM_GETSCROLLTIME, 0, 0)
 
 #define TreeView_SetInsertMarkColor(hwnd, clr) \
-    (COLORREF)SendMessage32A((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)clr)
+    (COLORREF)SendMessageA((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)clr)
 #define TreeView_GetInsertMarkColor(hwnd) \
-    (COLORREF)SendMessage32A((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0)
+    (COLORREF)SendMessageA((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0)
 
 
 
@@ -2107,8 +2106,8 @@
 
 /* Listview control */
 
-#define WC_LISTVIEW32A          "SysListView32"
-#define WC_LISTVIEW32W          L"SysListView32"
+#define WC_LISTVIEWA          "SysListView32"
+#define WC_LISTVIEWW          L"SysListView32"
 #define WC_LISTVIEW  WINELIB_NAME_AW(WC_LISTVIEW)
 
 #define LVS_ICON                0x0000
@@ -2214,46 +2213,46 @@
 #define LVM_GETIMAGELIST        (LVM_FIRST+2)
 #define LVM_SETIMAGELIST        (LVM_FIRST+3)
 #define LVM_GETITEMCOUNT        (LVM_FIRST+4)
-#define LVM_GETITEM32A          (LVM_FIRST+5)
-#define LVM_GETITEM32W          (LVM_FIRST+75)
+#define LVM_GETITEMA          (LVM_FIRST+5)
+#define LVM_GETITEMW          (LVM_FIRST+75)
 #define LVM_GETITEM             WINELIB_NAME_AW(LVM_GETITEM)
-#define LVM_SETITEM32A          (LVM_FIRST+6)
-#define LVM_SETITEM32W          (LVM_FIRST+76)
+#define LVM_SETITEMA          (LVM_FIRST+6)
+#define LVM_SETITEMW          (LVM_FIRST+76)
 #define LVM_SETITEM             WINELIB_NAME_AW(LVM_SETITEM)
-#define LVM_INSERTITEM32A       (LVM_FIRST+7)
-#define LVM_INSERTITEM32W       (LVM_FIRST+77)
+#define LVM_INSERTITEMA       (LVM_FIRST+7)
+#define LVM_INSERTITEMW       (LVM_FIRST+77)
 #define LVM_INSERTITEM          WINELIB_NAME_AW(LVM_INSERTITEM)
 #define LVM_DELETEITEM          (LVM_FIRST+8)
 #define LVM_DELETEALLITEMS      (LVM_FIRST+9)
 #define LVM_GETCALLBACKMASK     (LVM_FIRST+10)
 #define LVM_SETCALLBACKMASK     (LVM_FIRST+11)
 #define LVM_GETNEXTITEM         (LVM_FIRST+12)
-#define LVM_FINDITEM32A         (LVM_FIRST+13)
-#define LVM_FINDITEM32W         (LVM_FIRST+83)
+#define LVM_FINDITEMA         (LVM_FIRST+13)
+#define LVM_FINDITEMW         (LVM_FIRST+83)
 #define LVM_FINDITEM            WINELIB_NAME_AW(LVM_FINDITEM)
 #define LVM_GETITEMRECT         (LVM_FIRST+14)
-#define LVM_SETITEMPOSITION     (LVM_FIRST+15)
+#define LVM_SETITEMPOSITION16     (LVM_FIRST+15)
 #define LVM_GETITEMPOSITION     (LVM_FIRST+16)
-#define LVM_GETSTRINGWIDTH32A   (LVM_FIRST+17)
-#define LVM_GETSTRINGWIDTH32W   (LVM_FIRST+87)
+#define LVM_GETSTRINGWIDTHA   (LVM_FIRST+17)
+#define LVM_GETSTRINGWIDTHW   (LVM_FIRST+87)
 #define LVM_GETSTRINGWIDTH      WINELIB_NAME_AW(LVM_GETSTRINGWIDTH)
 #define LVM_HITTEST             (LVM_FIRST+18)
 #define LVM_ENSUREVISIBLE       (LVM_FIRST+19)
 #define LVM_SCROLL              (LVM_FIRST+20)
 #define LVM_REDRAWITEMS         (LVM_FIRST+21)
 #define LVM_ARRANGE             (LVM_FIRST+22)
-#define LVM_EDITLABEL32A        (LVM_FIRST+23)
-#define LVM_EDITLABEL32W        (LVM_FIRST+118)
+#define LVM_EDITLABELA        (LVM_FIRST+23)
+#define LVM_EDITLABELW        (LVM_FIRST+118)
 #define LVM_EDITLABEL           WINELIB_NAME_AW(LVM_EDITLABEL)
 #define LVM_GETEDITCONTROL      (LVM_FIRST+24)
-#define LVM_GETCOLUMN32A        (LVM_FIRST+25)
-#define LVM_GETCOLUMN32W        (LVM_FIRST+95)
+#define LVM_GETCOLUMNA        (LVM_FIRST+25)
+#define LVM_GETCOLUMNW        (LVM_FIRST+95)
 #define LVM_GETCOLUMN           WINELIB_NAME_AW(LVM_GETCOLUMN)
-#define LVM_SETCOLUMN32A        (LVM_FIRST+26)
-#define LVM_SETCOLUMN32W        (LVM_FIRST+96)
+#define LVM_SETCOLUMNA        (LVM_FIRST+26)
+#define LVM_SETCOLUMNW        (LVM_FIRST+96)
 #define LVM_SETCOLUMN           WINELIB_NAME_AW(LVM_SETCOLUMN)
-#define LVM_INSERTCOLUMN32A     (LVM_FIRST+27)
-#define LVM_INSERTCOLUMN32W     (LVM_FIRST+97)
+#define LVM_INSERTCOLUMNA     (LVM_FIRST+27)
+#define LVM_INSERTCOLUMNW     (LVM_FIRST+97)
 #define LVM_INSERTCOLUMN        WINELIB_NAME_AW(LVM_INSERTCOLUMN)
 #define LVM_DELETECOLUMN        (LVM_FIRST+28)
 #define LVM_GETCOLUMNWIDTH      (LVM_FIRST+29)
@@ -2272,19 +2271,19 @@
 #define LVM_UPDATE              (LVM_FIRST+42)
 #define LVM_SETITEMSTATE        (LVM_FIRST+43)
 #define LVM_GETITEMSTATE        (LVM_FIRST+44)
-#define LVM_GETITEMTEXT32A      (LVM_FIRST+45)
-#define LVM_GETITEMTEXT32W      (LVM_FIRST+115)
+#define LVM_GETITEMTEXTA      (LVM_FIRST+45)
+#define LVM_GETITEMTEXTW      (LVM_FIRST+115)
 #define LVM_GETITEMTEXT         WINELIB_NAME_AW(LVM_GETITEMTEXT)
-#define LVM_SETITEMTEXT32A      (LVM_FIRST+46)
-#define LVM_SETITEMTEXT32W      (LVM_FIRST+116)
+#define LVM_SETITEMTEXTA      (LVM_FIRST+46)
+#define LVM_SETITEMTEXTW      (LVM_FIRST+116)
 #define LVM_SETITEMTEXT         WINELIB_NAME_AW(LVM_SETITEMTEXT)
 #define LVM_SETITEMCOUNT        (LVM_FIRST+47)
 #define LVM_SORTITEMS           (LVM_FIRST+48)
-#define LVM_SETITEMPOSITION32   (LVM_FIRST+49)
+#define LVM_SETITEMPOSITION   (LVM_FIRST+49)
 #define LVM_GETSELECTEDCOUNT    (LVM_FIRST+50)
 #define LVM_GETITEMSPACING      (LVM_FIRST+51)
-#define LVM_GETISEARCHSTRING32A (LVM_FIRST+52)
-#define LVM_GETISEARCHSTRING32W (LVM_FIRST+117)
+#define LVM_GETISEARCHSTRINGA (LVM_FIRST+52)
+#define LVM_GETISEARCHSTRINGW (LVM_FIRST+117)
 #define LVM_GETISEARCHSTRING    WINELIB_NAME_AW(LVM_GETISEARCHSTRING)
 #define LVM_SETICONSPACING      (LVM_FIRST+53)
 #define LVM_SETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+54)
@@ -2301,11 +2300,11 @@
 #define LVM_SETWORKAREAS        (LVM_FIRST+65)
 #define LVM_GETSELECTIONMARK    (LVM_FIRST+66)
 #define LVM_SETSELECTIONMARK    (LVM_FIRST+67)
-#define LVM_SETBKIMAGE32A       (LVM_FIRST+68)
-#define LVM_SETBKIMAGE32W       (LVM_FIRST+138)
+#define LVM_SETBKIMAGEA       (LVM_FIRST+68)
+#define LVM_SETBKIMAGEW       (LVM_FIRST+138)
 #define LVM_SETBKIMAGE          WINELIB_NAME_AW(LVM_SETBKIMAGE)
-#define LVM_GETBKIMAGE32A       (LVM_FIRST+69)
-#define LVM_GETBKIMAGE32W       (LVM_FIRST+139)
+#define LVM_GETBKIMAGEA       (LVM_FIRST+69)
+#define LVM_GETBKIMAGEW       (LVM_FIRST+139)
 #define LVM_GETBKIMAGE          WINELIB_NAME_AW(LVM_GETBKIMAGE)
 #define LVM_GETWORKAREAS        (LVM_FIRST+70)
 #define LVM_SETHOVERTIME        (LVM_FIRST+71)
@@ -2322,27 +2321,27 @@
 #define LVN_INSERTITEM          (LVN_FIRST-2)
 #define LVN_DELETEITEM          (LVN_FIRST-3)
 #define LVN_DELETEALLITEMS      (LVN_FIRST-4)
-#define LVN_BEGINLABELEDIT32A   (LVN_FIRST-5)
-#define LVN_BEGINLABELEDIT32W   (LVN_FIRST-75)
+#define LVN_BEGINLABELEDITA   (LVN_FIRST-5)
+#define LVN_BEGINLABELEDITW   (LVN_FIRST-75)
 #define LVN_BEGINLABELEDIT WINELIB_NAME_AW(LVN_BEGINLABELEDIT)
-#define LVN_ENDLABELEDIT32A     (LVN_FIRST-6)
-#define LVN_ENDLABELEDIT32W     (LVN_FIRST-76)
+#define LVN_ENDLABELEDITA     (LVN_FIRST-6)
+#define LVN_ENDLABELEDITW     (LVN_FIRST-76)
 #define LVN_ENDLABELEDIT WINELIB_NAME_AW(LVN_ENDLABELEDIT)
 #define LVN_COLUMNCLICK         (LVN_FIRST-8)
 #define LVN_BEGINDRAG           (LVN_FIRST-9)
 #define LVN_BEGINRDRAG          (LVN_FIRST-11)
 #define LVN_ODCACHEHINT         (LVN_FIRST-13)
-#define LVN_ODFINDITEM32A       (LVN_FIRST-52)
-#define LVN_ODFINDITEM32W       (LVN_FIRST-79)
+#define LVN_ODFINDITEMA       (LVN_FIRST-52)
+#define LVN_ODFINDITEMW       (LVN_FIRST-79)
 #define LVN_ODFINDITEM WINELIB_NAME_AW(LVN_ODFINDITEM)
 #define LVN_ITEMACTIVATE        (LVN_FIRST-14)
 #define LVN_ODSTATECHANGED      (LVN_FIRST-15)
 #define LVN_HOTTRACK            (LVN_FIRST-21)
-#define LVN_GETDISPINFO32A      (LVN_FIRST-50)
-#define LVN_GETDISPINFO32W      (LVN_FIRST-77)
+#define LVN_GETDISPINFOA      (LVN_FIRST-50)
+#define LVN_GETDISPINFOW      (LVN_FIRST-77)
 #define LVN_GETDISPINFO WINELIB_NAME_AW(LVN_GETDISPINFO)
-#define LVN_SETDISPINFO32A      (LVN_FIRST-51)
-#define LVN_SETDISPINFO32W      (LVN_FIRST-78)
+#define LVN_SETDISPINFOA      (LVN_FIRST-51)
+#define LVN_SETDISPINFOW      (LVN_FIRST-78)
 #define LVN_SETDISPINFO WINELIB_NAME_AW(LVN_SETDISPINFO)
 
 #define LVA_ALIGNLEFT           0x0000
@@ -2352,70 +2351,70 @@
 
 typedef struct tagLVITEMA
 {
-    UINT32 mask;
-    INT32  iItem;
-    INT32  iSubItem;
-    UINT32 state;
-    UINT32 stateMask;
+    UINT mask;
+    INT  iItem;
+    INT  iSubItem;
+    UINT state;
+    UINT stateMask;
     LPSTR  pszText;
-    INT32  cchTextMax;
-    INT32  iImage;
+    INT  cchTextMax;
+    INT  iImage;
     LPARAM lParam;
-    INT32  iIndent;	/* (_WIN32_IE >= 0x0300) */
-} LVITEM32A, *LPLVITEM32A;
+    INT  iIndent;	/* (_WIN32_IE >= 0x0300) */
+} LVITEMA, *LPLVITEMA;
 
 typedef struct tagLVITEMW
 {
-    UINT32 mask;
-    INT32  iItem;
-    INT32  iSubItem;
-    UINT32 state;
-    UINT32 stateMask;
+    UINT mask;
+    INT  iItem;
+    INT  iSubItem;
+    UINT state;
+    UINT stateMask;
     LPWSTR pszText;
-    INT32  cchTextMax;
-    INT32  iImage;
+    INT  cchTextMax;
+    INT  iImage;
     LPARAM lParam;
-    INT32  iIndent;	/* (_WIN32_IE >= 0x0300) */
-} LVITEM32W, *LPLVITEM32W;
+    INT  iIndent;	/* (_WIN32_IE >= 0x0300) */
+} LVITEMW, *LPLVITEMW;
 
 #define LVITEM   WINELIB_NAME_AW(LVITEM)
 #define LPLVITEM WINELIB_NAME_AW(LPLVITEM)
 
-#define LVITEM_V1_SIZE32A CCSIZEOF_STRUCT(LVITEM32A, lParam)
-#define LVITEM_V1_SIZE32W CCSIZEOF_STRUCT(LVITEM32W, lParam)
+#define LVITEM_V1_SIZEA CCSIZEOF_STRUCT(LVITEMA, lParam)
+#define LVITEM_V1_SIZEW CCSIZEOF_STRUCT(LVITEMW, lParam)
 #define LVITEM_V1_SIZE WINELIB_NAME_AW(LVITEM_V1_SIZE)
 
 #define LV_ITEM LVITEM
 
 typedef struct tagLVCOLUMNA
 {
-    UINT32 mask;
-    INT32  fmt;
-    INT32  cx;
+    UINT mask;
+    INT  fmt;
+    INT  cx;
     LPSTR  pszText;
-    INT32  cchTextMax;
-    INT32  iSubItem;
-    INT32  iImage;  /* (_WIN32_IE >= 0x0300) */
-    INT32  iOrder;  /* (_WIN32_IE >= 0x0300) */
-} LVCOLUMN32A, *LPLVCOLUMN32A;
+    INT  cchTextMax;
+    INT  iSubItem;
+    INT  iImage;  /* (_WIN32_IE >= 0x0300) */
+    INT  iOrder;  /* (_WIN32_IE >= 0x0300) */
+} LVCOLUMNA, *LPLVCOLUMNA;
 
 typedef struct tagLVCOLUMNW
 {
-    UINT32 mask;
-    INT32  fmt;
-    INT32  cx;
+    UINT mask;
+    INT  fmt;
+    INT  cx;
     LPWSTR pszText;
-    INT32  cchTextMax;
-    INT32  iSubItem;
-    INT32  iImage;	/* (_WIN32_IE >= 0x0300) */
-    INT32  iOrder;	/* (_WIN32_IE >= 0x0300) */
-} LVCOLUMN32W, *LPLVCOLUMN32W;
+    INT  cchTextMax;
+    INT  iSubItem;
+    INT  iImage;	/* (_WIN32_IE >= 0x0300) */
+    INT  iOrder;	/* (_WIN32_IE >= 0x0300) */
+} LVCOLUMNW, *LPLVCOLUMNW;
 
 #define LVCOLUMN   WINELIB_NAME_AW(LVCOLUMN)
 #define LPLVCOLUMN WINELIB_NAME_AW(LPLVCOLUMN)
 
-#define LVCOLUMN_V1_SIZE32A CCSIZEOF_STRUCT(LVCOLUMN32A, iSubItem)
-#define LVCOLUMN_V1_SIZE32W CCSIZEOF_STRUCT(LVCOLUMN32W, iSubItem)
+#define LVCOLUMN_V1_SIZEA CCSIZEOF_STRUCT(LVCOLUMNA, iSubItem)
+#define LVCOLUMN_V1_SIZEW CCSIZEOF_STRUCT(LVCOLUMNW, iSubItem)
 #define LVCOLUMN_V1_SIZE WINELIB_NAME_AW(LVCOLUMN_V1_SIZE)
 
 #define LV_COLUMN       LVCOLUMN
@@ -2424,12 +2423,12 @@
 typedef struct tagNMLISTVIEW
 {
     NMHDR   hdr;
-    INT32   iItem;
-    INT32   iSubItem;
-    UINT32  uNewState;
-    UINT32  uOldState;
-    UINT32  uChanged;
-    POINT32 ptAction;
+    INT   iItem;
+    INT   iSubItem;
+    UINT  uNewState;
+    UINT  uOldState;
+    UINT  uChanged;
+    POINT ptAction;
     LPARAM  lParam;
 } NMLISTVIEW, *LPNMLISTVIEW;
 
@@ -2440,14 +2439,14 @@
 typedef struct tagLVDISPINFO
 {
     NMHDR     hdr;
-    LVITEM32A item;
-} NMLVDISPINFO32A, *LPNMLVDISPINFO32A;
+    LVITEMA item;
+} NMLVDISPINFOA, *LPNMLVDISPINFOA;
 
 typedef struct tagLVDISPINFOW
 {
     NMHDR     hdr;
-    LVITEM32W item;
-} NMLVDISPINFO32W, *LPNMLVDISPINFO32W;
+    LVITEMW item;
+} NMLVDISPINFOW, *LPNMLVDISPINFOW;
 
 #define NMLVDISPINFO   WINELIB_NAME_AW(NMLVDISPINFO)
 #define LPNMLVDISPINFO WINELIB_NAME_AW(LPNMLVDISPINFO)
@@ -2460,17 +2459,17 @@
 {
   NMHDR hdr;
   WORD  wVKey;
-  UINT32 flags;
+  UINT flags;
 } NMLVKEYDOWN, *LPNMLVKEYDOWN;
 
 #define LV_KEYDOWN     NMLVKEYDOWN
 
 typedef struct tagLVHITTESTINFO
 {
-    POINT32 pt;
-    UINT32  flags;
-    INT32   iItem;
-    INT32   iSubItem;
+    POINT pt;
+    UINT  flags;
+    INT   iItem;
+    INT   iSubItem;
 } LVHITTESTINFO, *LPLVHITTESTINFO;
 
 #define LV_HITTESTINFO LVHITTESTINFO
@@ -2479,65 +2478,65 @@
 
 typedef struct tagLVFINDINFO
 {
-	UINT32 flags;
+	UINT flags;
 	LPCSTR psz;
 	LPARAM lParam;
-	POINT32 pt;
-	UINT32 vkDirection;
+	POINT pt;
+	UINT vkDirection;
 } LVFINDINFO, *LPLVFINDINFO;
 
 #define LV_FINDINFO LVFINDINFO
 
 typedef struct tagTCHITTESTINFO
 {
-	POINT32 pt;
-	UINT32 flags;
+	POINT pt;
+	UINT flags;
 } TCHITTESTINFO, *LPTCHITTESTINFO;
 
 #define TC_HITTESTINFO TCHITTESTINFO
 
-typedef INT32 (CALLBACK *PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM);
+typedef INT (CALLBACK *PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM);
 
 #define ListView_SetBkColor(hwnd,clrBk) \
-    (BOOL32)SendMessage32A((hwnd),LVM_SETBKCOLOR,0,(LPARAM)(COLORREF)(clrBk))
+    (BOOL)SendMessageA((hwnd),LVM_SETBKCOLOR,0,(LPARAM)(COLORREF)(clrBk))
 #define ListView_GetImageList(hwnd,iImageList) \
-    (HIMAGELIST)SendMessage32A((hwnd),LVM_GETIMAGELIST,(WPARAM)(INT32)(iImageList),0L)
+    (HIMAGELIST)SendMessageA((hwnd),LVM_GETIMAGELIST,(WPARAM)(INT)(iImageList),0L)
 #define ListView_SetImageList(hwnd,himl,iImageList) \
-    (HIMAGELIST)(UINT32)SendMessage32A((hwnd),LVM_SETIMAGELIST,(WPARAM32)(iImageList),(LPARAM)(UINT32)(HIMAGELIST)(himl))
+    (HIMAGELIST)(UINT)SendMessageA((hwnd),LVM_SETIMAGELIST,(WPARAM)(iImageList),(LPARAM)(UINT)(HIMAGELIST)(himl))
 #define ListView_GetItemCount(hwnd) \
-    (INT32)SendMessage32A((hwnd),LVM_GETITEMCOUNT,0,0L)
-#define ListView_GetItem32A(hwnd,pitem) \
-    (BOOL32)SendMessage32A((hwnd),LVM_GETITEM32A,0,(LPARAM)(LVITEM32A *)(pitem))
-#define ListView_GetItem32W(hwnd,pitem) \
-    (BOOL32)SendMessage32W((hwnd),LVM_GETITEM32W,0,(LPARAM)(LVITEM32W *)(pitem))
+    (INT)SendMessageA((hwnd),LVM_GETITEMCOUNT,0,0L)
+#define ListView_GetItemA(hwnd,pitem) \
+    (BOOL)SendMessageA((hwnd),LVM_GETITEMA,0,(LPARAM)(LVITEMA *)(pitem))
+#define ListView_GetItemW(hwnd,pitem) \
+    (BOOL)SendMessageW((hwnd),LVM_GETITEMW,0,(LPARAM)(LVITEMW *)(pitem))
 #define ListView_GetItem WINELIB_NAME_AW(ListView_GetItem)
 #define ListView_HitTest(hwnd,pinfo) \
-    (INT32)SendMessage32A((hwnd),LVMHITTEST,0,(LPARAM)(LPLVHITTESTINFO)(pinfo))
-#define ListView_InsertItem32A(hwnd,pitem) \
-    (INT32)SendMessage32A((hwnd),LVM_INSERTITEM32A,0,(LPARAM)(const LVITEM32A *)(pitem))
-#define ListView_InsertItem32W(hwnd,pitem) \
-    (INT32)SendMessage32W((hwnd),LVM_INSERTITEM32W,0,(LPARAM)(const LVITEM32W *)(pitem))
+    (INT)SendMessageA((hwnd),LVMHITTEST,0,(LPARAM)(LPLVHITTESTINFO)(pinfo))
+#define ListView_InsertItemA(hwnd,pitem) \
+    (INT)SendMessageA((hwnd),LVM_INSERTITEMA,0,(LPARAM)(const LVITEMA *)(pitem))
+#define ListView_InsertItemW(hwnd,pitem) \
+    (INT)SendMessageW((hwnd),LVM_INSERTITEMW,0,(LPARAM)(const LVITEMW *)(pitem))
 #define ListView_InsertItem WINELIB_NAME_AW(ListView_InsertItem)
 #define ListView_DeleteAllItems(hwnd) \
-    (BOOL32)SendMessage32A((hwnd),LVM_DELETEALLITEMS,0,0L)
-#define ListView_InsertColumn32A(hwnd,iCol,pcol) \
-    (INT32)SendMessage32A((hwnd),LVM_INSERTCOLUMN32A,(WPARAM32)(INT32)(iCol),(LPARAM)(const LVCOLUMN32A *)(pcol))
-#define ListView_InsertColumn32W(hwnd,iCol,pcol) \
-    (INT32)SendMessage32W((hwnd),LVM_INSERTCOLUMN32W,(WPARAM32)(INT32)(iCol),(LPARAM)(const LVCOLUMN32W *)(pcol))
+    (BOOL)SendMessageA((hwnd),LVM_DELETEALLITEMS,0,0L)
+#define ListView_InsertColumnA(hwnd,iCol,pcol) \
+    (INT)SendMessageA((hwnd),LVM_INSERTCOLUMNA,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNA *)(pcol))
+#define ListView_InsertColumnW(hwnd,iCol,pcol) \
+    (INT)SendMessageW((hwnd),LVM_INSERTCOLUMNW,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNW *)(pcol))
 #define ListView_InsertColumn WINELIB_NAME_AW(ListView_InsertColumn)
 #define ListView_SortItems(hwndLV,_pfnCompare,_lPrm) \
-    (BOOL32)SendMessage32A((hwndLV),LVM_SORTITEMS,(WPARAM32)(LPARAM)_lPrm,(LPARAM)(PFNLVCOMPARE)_pfnCompare)
+    (BOOL)SendMessageA((hwndLV),LVM_SORTITEMS,(WPARAM)(LPARAM)_lPrm,(LPARAM)(PFNLVCOMPARE)_pfnCompare)
 #define ListView_SetItemPosition(hwndLV, i, x, y) \
-    (BOOL32)SendMessage32A((hwndLV),LVM_SETITEMPOSITION,(WPARAM32)(INT32)(i),MAKELPARAM((x),(y)))
+    (BOOL)SendMessageA((hwndLV),LVM_SETITEMPOSITION16,(WPARAM)(INT)(i),MAKELPARAM((x),(y)))
 #define ListView_GetSelectedCount(hwndLV) \
-    (UINT32)SendMessage32A((hwndLV),LVM_GETSELECTEDCOUNT,0,0L)
+    (UINT)SendMessageA((hwndLV),LVM_GETSELECTEDCOUNT,0,0L)
 
 
 /* Tab Control */
 
 #define WC_TABCONTROL16		 "SysTabControl"
-#define WC_TABCONTROL32A	 "SysTabControl32"
-#define WC_TABCONTROL32W	L"SysTabControl32"
+#define WC_TABCONTROLA	 "SysTabControl32"
+#define WC_TABCONTROLW	L"SysTabControl32"
 
 #define WC_TABCONTROL		WINELIB_NAME_AW(WC_TABCONTROL)
 
@@ -2572,13 +2571,13 @@
 #define TCM_SETIMAGELIST        (TCM_FIRST + 3)
 #define TCM_GETITEMCOUNT	(TCM_FIRST + 4)
 #define TCM_GETITEM				WINELIB_NAME_AW(TCM_GETITEM)
-#define TCM_GETITEM32A			(TCM_FIRST + 5)
-#define TCM_GETITEM32W			(TCM_FIRST + 60)
-#define TCM_SETITEM32A			(TCM_FIRST + 6)
-#define TCM_SETITEM32W			(TCM_FIRST + 61)
+#define TCM_GETITEMA			(TCM_FIRST + 5)
+#define TCM_GETITEMW			(TCM_FIRST + 60)
+#define TCM_SETITEMA			(TCM_FIRST + 6)
+#define TCM_SETITEMW			(TCM_FIRST + 61)
 #define TCM_SETITEM				WINELIB_NAME_AW(TCM_SETITEM)
-#define TCM_INSERTITEM32A		(TCM_FIRST + 7)
-#define TCM_INSERTITEM32W		(TCM_FIRST + 62)
+#define TCM_INSERTITEMA		(TCM_FIRST + 7)
+#define TCM_INSERTITEMW		(TCM_FIRST + 62)
 #define TCM_INSERTITEM			WINELIB_NAME_AW(TCM_INSERTITEM)
 #define TCM_DELETEITEM          (TCM_FIRST + 8)
 #define TCM_DELETEALLITEMS      (TCM_FIRST + 9)
@@ -2623,26 +2622,26 @@
 #define TCHT_ONITEM       (TCHT_ONITEMICON | TCHT_ONITEMLABEL)
 
 
-typedef struct tagTCITEM32A {
-    UINT32 mask;
-    UINT32 dwState;
-    UINT32 dwStateMask;
+typedef struct tagTCITEMA {
+    UINT mask;
+    UINT dwState;
+    UINT dwStateMask;
     LPSTR  pszText;
-    INT32  cchTextMax;
-    INT32  iImage;
+    INT  cchTextMax;
+    INT  iImage;
     LPARAM lParam;
-} TCITEM32A, *LPTCITEM32A;
+} TCITEMA, *LPTCITEMA;
 
-typedef struct tagTCITEM32W
+typedef struct tagTCITEMW
 {
-    UINT32 mask;
+    UINT mask;
     DWORD  dwState;
     DWORD  dwStateMask;
     LPWSTR pszText;
-    INT32  cchTextMax;
-    INT32  iImage;
+    INT  cchTextMax;
+    INT  iImage;
     LPARAM lParam;
-} TCITEM32W, *LPTCITEM32W;
+} TCITEMW, *LPTCITEMW;
 
 #define TCITEM   WINELIB_NAME_AW(TCITEM)
 #define LPTCITEM WINELIB_NAME_AW(LPTCITEM)
@@ -2658,20 +2657,20 @@
 
 /* ComboBoxEx control */
 
-#define WC_COMBOBOXEX32A        "ComboBoxEx32"
-#define WC_COMBOBOXEX32W        L"ComboBoxEx32"
+#define WC_COMBOBOXEXA        "ComboBoxEx32"
+#define WC_COMBOBOXEXW        L"ComboBoxEx32"
 #define WC_COMBOBOXEX           WINELIB_NAME_AW(WC_COMBOBOXEX)
 
-#define CBEM_INSERTITEM32A      (WM_USER+1)
-#define CBEM_INSERTITEM32W      (WM_USER+11)
+#define CBEM_INSERTITEMA      (WM_USER+1)
+#define CBEM_INSERTITEMW      (WM_USER+11)
 #define CBEM_INSERTITEM         WINELIB_NAME_AW(CBEM_INSERTITEM)
 #define CBEM_SETIMAGELIST       (WM_USER+2)
 #define CBEM_GETIMAGELIST       (WM_USER+3)
-#define CBEM_GETITEM32A         (WM_USER+4)
-#define CBEM_GETITEM32W         (WM_USER+13)
+#define CBEM_GETITEMA         (WM_USER+4)
+#define CBEM_GETITEMW         (WM_USER+13)
 #define CBEM_GETITEM            WINELIB_NAME_AW(CBEM_GETITEM)
-#define CBEM_SETITEM32A         (WM_USER+5)
-#define CBEM_SETITEM32W         (WM_USER+12)
+#define CBEM_SETITEMA         (WM_USER+5)
+#define CBEM_SETITEMW         (WM_USER+12)
 #define CBEM_SETITEM            WINELIB_NAME_AW(CBEM_SETITEM)
 #define CBEM_GETCOMBOCONTROL    (WM_USER+6)
 #define CBEM_GETEDITCONTROL     (WM_USER+7)
@@ -2690,8 +2689,8 @@
 /* Hotkey control */
 
 #define HOTKEY_CLASS16          "msctls_hotkey"
-#define HOTKEY_CLASS32A         "msctls_hotkey32"
-#define HOTKEY_CLASS32W         L"msctls_hotkey32"
+#define HOTKEY_CLASSA         "msctls_hotkey32"
+#define HOTKEY_CLASSW         L"msctls_hotkey32"
 #define HOTKEY_CLASS            WINELIB_NAME_AW(HOTKEY_CLASS)
 
 #define HOTKEYF_SHIFT           0x01
@@ -2715,8 +2714,8 @@
 
 /* animate control */
 
-#define ANIMATE_CLASS32A        "SysAnimate32"
-#define ANIMATE_CLASS32W        L"SysAnimate32"
+#define ANIMATE_CLASSA        "SysAnimate32"
+#define ANIMATE_CLASSW        L"SysAnimate32"
 #define ANIMATE_CLASS           WINELIB_NAME_AW(ANIMATE_CLASS)
 
 #define ACS_CENTER              0x0001
@@ -2724,8 +2723,8 @@
 #define ACS_AUTOPLAY            0x0004
 #define ACS_TIMER               0x0008  /* no threads, just timers */
 
-#define ACM_OPEN32A             (WM_USER+100)
-#define ACM_OPEN32W             (WM_USER+103)
+#define ACM_OPENA             (WM_USER+100)
+#define ACM_OPENW             (WM_USER+103)
 #define ACM_OPEN                WINELIB_NAME_AW(ACM_OPEN)
 #define ACM_PLAY                (WM_USER+101)
 #define ACM_STOP                (WM_USER+102)
@@ -2733,37 +2732,37 @@
 #define ACN_START               1
 #define ACN_STOP                2
 
-#define Animate_Create32A(hwndP,id,dwStyle,hInstance) \
-    CreateWindow32A(ANIMATE_CLASS32A,NULL,dwStyle,0,0,0,0,hwndP,(HMENU32)(id),hInstance,NULL)
-#define Animate_Create32W(hwndP,id,dwStyle,hInstance) \
-    CreateWindow32W(ANIMATE_CLASS32W,NULL,dwStyle,0,0,0,0,hwndP,(HMENU32)(id),hInstance,NULL)
+#define Animate_CreateA(hwndP,id,dwStyle,hInstance) \
+    CreateWindowA(ANIMATE_CLASSA,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL)
+#define Animate_CreateW(hwndP,id,dwStyle,hInstance) \
+    CreateWindowW(ANIMATE_CLASSW,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL)
 #define Animate_Create WINELIB_NAME_AW(Animate_Create)
-#define Animate_Open32A(hwnd,szName) \
-    (BOOL32)SendMessage32A(hwnd,ACM_OPEN32A,0,(LPARAM)(LPSTR)(szName))
-#define Animate_Open32W(hwnd,szName) \
-    (BOOL32)SendMessage32W(hwnd,ACM_OPEN32W,0,(LPARAM)(LPWSTR)(szName))
+#define Animate_OpenA(hwnd,szName) \
+    (BOOL)SendMessageA(hwnd,ACM_OPENA,0,(LPARAM)(LPSTR)(szName))
+#define Animate_OpenW(hwnd,szName) \
+    (BOOL)SendMessageW(hwnd,ACM_OPENW,0,(LPARAM)(LPWSTR)(szName))
 #define Animate_Open WINELIB_NAME_AW(Animate_Open)
-#define Animate_OpenEx32A(hwnd,hInst,szName) \
-    (BOOL32)SendMessage32A(hwnd,ACM_OPEN32A,(WPARAM32)hInst,(LPARAM)(LPSTR)(szName))
-#define Animate_OpenEx32W(hwnd,hInst,szName) \
-    (BOOL32)SendMessage32W(hwnd,ACM_OPEN32W,(WPARAM32)hInst,(LPARAM)(LPWSTR)(szName))
+#define Animate_OpenExA(hwnd,hInst,szName) \
+    (BOOL)SendMessageA(hwnd,ACM_OPENA,(WPARAM)hInst,(LPARAM)(LPSTR)(szName))
+#define Animate_OpenExW(hwnd,hInst,szName) \
+    (BOOL)SendMessageW(hwnd,ACM_OPENW,(WPARAM)hInst,(LPARAM)(LPWSTR)(szName))
 #define Animate_OpenEx WINELIB_NAME_AW(Animate_OpenEx)
 #define Animate_Play(hwnd,from,to,rep) \
-    (BOOL32)SendMessage32A(hwnd,ACM_PLAY,(WPARAM32)(UINT32)(rep),(LPARAM)MAKELONG(from,to))
+    (BOOL)SendMessageA(hwnd,ACM_PLAY,(WPARAM)(UINT)(rep),(LPARAM)MAKELONG(from,to))
 #define Animate_Stop(hwnd) \
-    (BOOL32)SendMessage32A(hwnd,ACM_STOP,0,0)
+    (BOOL)SendMessageA(hwnd,ACM_STOP,0,0)
 #define Animate_Close(hwnd) \
-    (BOOL32)SendMessage32A(hwnd,ACM_OPEN32A,0,0)
+    (BOOL)SendMessageA(hwnd,ACM_OPENA,0,0)
 #define Animate_Seek(hwnd,frame) \
-    (BOOL32)SendMessage32A(hwnd,ACM_PLAY,1,(LPARAM)MAKELONG(frame,frame))
+    (BOOL)SendMessageA(hwnd,ACM_PLAY,1,(LPARAM)MAKELONG(frame,frame))
 
 
 /**************************************************************************
  * IP Address control
  */
 
-#define WC_IPADDRESS32A		"SysIPAddress32"
-#define WC_IPADDRESS32W		L"SysIPAddress32"
+#define WC_IPADDRESSA		"SysIPAddress32"
+#define WC_IPADDRESSW		L"SysIPAddress32"
 #define WC_IPADDRESS		WINELIB_NAME_AW(WC_IPADDRESS)
 
 #define IPM_CLEARADDRESS	(WM_USER+100)
@@ -2780,8 +2779,8 @@
 typedef struct tagNMIPADDRESS
 {
     NMHDR hdr;
-    INT32 iField;
-    INT32 iValue;
+    INT iField;
+    INT iValue;
 } NMIPADDRESS, *LPNMIPADDRESS;
 
 #define MAKEIPRANGE(low,high) \
@@ -2799,8 +2798,8 @@
  * Native Font control
  */
 
-#define WC_NATIVEFONTCTL32A	"NativeFontCtl"
-#define WC_NATIVEFONTCTL32W	L"NativeFontCtl"
+#define WC_NATIVEFONTCTLA	"NativeFontCtl"
+#define WC_NATIVEFONTCTLW	L"NativeFontCtl"
 #define WC_NATIVEFONTCTL	WINELIB_NAME_AW(WC_NATIVEFONTCTL)
 
 #define NFS_EDIT		0x0001
@@ -2814,8 +2813,8 @@
  * Month calendar control
  */
 
-#define MONTHCAL_CLASS32A	"SysMonthCal32"
-#define MONTHCAL_CLASS32W	L"SysMonthCal32"
+#define MONTHCAL_CLASSA	"SysMonthCal32"
+#define MONTHCAL_CLASSW	L"SysMonthCal32"
 #define MONTHCAL_CLASS		WINELIB_NAME_AW(MONTHCAL_CLASS)
 
 
@@ -2823,8 +2822,8 @@
  * Date and time picker control
  */
 
-#define DATETIMEPICK_CLASS32A	"SysDateTimePick32"
-#define DATETIMEPICK_CLASS32W	L"SysDateTimePick32"
+#define DATETIMEPICK_CLASSA	"SysDateTimePick32"
+#define DATETIMEPICK_CLASSW	L"SysDateTimePick32"
 #define DATETIMEPICK_CLASS	WINELIB_NAME_AW(DATETIMEPICK_CLASS)
 
 #define DTM_FIRST        0x1000
@@ -2833,8 +2832,8 @@
 #define DTM_SETSYSTEMTIME	(DTM_FIRST+2)
 #define DTM_GETRANGE		(DTM_FIRST+3)
 #define DTM_SETRANGE		(DTM_FIRST+4)
-#define DTM_SETFORMAT32A	(DTM_FIRST+5)
-#define DTM_SETFORMAT32W	(DTM_FIRST + 50)
+#define DTM_SETFORMATA	(DTM_FIRST+5)
+#define DTM_SETFORMATW	(DTM_FIRST + 50)
 #define DTM_SETFORMAT		WINELIB_NAME_AW(DTM_SETFORMAT)
 #define DTM_SETMCCOLOR		(DTM_FIRST+6)
 #define DTM_GETMCCOLOR		(DTM_FIRST+7)
@@ -2864,14 +2863,14 @@
 
 LPVOID WINAPI COMCTL32_Alloc (DWORD);
 LPVOID WINAPI COMCTL32_ReAlloc (LPVOID, DWORD);
-BOOL32 WINAPI COMCTL32_Free (LPVOID);
+BOOL WINAPI COMCTL32_Free (LPVOID);
 DWORD  WINAPI COMCTL32_GetSize (LPVOID);
 
 
-INT32  WINAPI Str_GetPtr32A (LPCSTR, LPSTR, INT32);
-BOOL32 WINAPI Str_SetPtr32A (LPSTR *, LPCSTR);
-INT32  WINAPI Str_GetPtr32W (LPCWSTR, LPWSTR, INT32);
-BOOL32 WINAPI Str_SetPtr32W (LPWSTR *, LPCWSTR);
+INT  WINAPI Str_GetPtrA (LPCSTR, LPSTR, INT);
+BOOL WINAPI Str_SetPtrA (LPSTR *, LPCSTR);
+INT  WINAPI Str_GetPtrW (LPCWSTR, LPWSTR, INT);
+BOOL WINAPI Str_SetPtrW (LPWSTR *, LPCWSTR);
 #define Str_GetPtr WINELIB_NAME_AW(Str_GetPtr)
 #define Str_SetPtr WINELIB_NAME_AW(Str_SetPtr)
 
@@ -2880,79 +2879,79 @@
 
 typedef struct _DSA
 {
-    INT32  nItemCount;
+    INT  nItemCount;
     LPVOID pData;
-    INT32  nMaxCount;
-    INT32  nItemSize;
-    INT32  nGrow;
+    INT  nMaxCount;
+    INT  nItemSize;
+    INT  nGrow;
 } DSA, *HDSA;
 
-HDSA   WINAPI DSA_Create (INT32, INT32);
-BOOL32 WINAPI DSA_DeleteAllItems (const HDSA);
-INT32  WINAPI DSA_DeleteItem (const HDSA, INT32);
-BOOL32 WINAPI DSA_Destroy (const HDSA);
-BOOL32 WINAPI DSA_GetItem (const HDSA, INT32, LPVOID);
-LPVOID WINAPI DSA_GetItemPtr (const HDSA, INT32);
-INT32  WINAPI DSA_InsertItem (const HDSA, INT32, LPVOID);
-BOOL32 WINAPI DSA_SetItem (const HDSA, INT32, LPVOID);
+HDSA   WINAPI DSA_Create (INT, INT);
+BOOL WINAPI DSA_DeleteAllItems (const HDSA);
+INT  WINAPI DSA_DeleteItem (const HDSA, INT);
+BOOL WINAPI DSA_Destroy (const HDSA);
+BOOL WINAPI DSA_GetItem (const HDSA, INT, LPVOID);
+LPVOID WINAPI DSA_GetItemPtr (const HDSA, INT);
+INT  WINAPI DSA_InsertItem (const HDSA, INT, LPVOID);
+BOOL WINAPI DSA_SetItem (const HDSA, INT, LPVOID);
 
-typedef INT32 (CALLBACK *DSAENUMPROC)(LPVOID, DWORD);
+typedef INT (CALLBACK *DSAENUMPROC)(LPVOID, DWORD);
 VOID   WINAPI DSA_EnumCallback (const HDSA, DSAENUMPROC, LPARAM);
-BOOL32 WINAPI DSA_DestroyCallback (const HDSA, DSAENUMPROC, LPARAM);
+BOOL WINAPI DSA_DestroyCallback (const HDSA, DSAENUMPROC, LPARAM);
 
 
 /* Dynamic Pointer Array */
 
 typedef struct _DPA
 {
-    INT32    nItemCount;
+    INT    nItemCount;
     LPVOID   *ptrs; 
-    HANDLE32 hHeap;
-    INT32    nGrow;
-    INT32    nMaxCount;
+    HANDLE hHeap;
+    INT    nGrow;
+    INT    nMaxCount;
 } DPA, *HDPA;
 
-HDPA   WINAPI DPA_Create (INT32);
-HDPA   WINAPI DPA_CreateEx (INT32, HANDLE32);
-BOOL32 WINAPI DPA_Destroy (const HDPA);
+HDPA   WINAPI DPA_Create (INT);
+HDPA   WINAPI DPA_CreateEx (INT, HANDLE);
+BOOL WINAPI DPA_Destroy (const HDPA);
 HDPA   WINAPI DPA_Clone (const HDPA, const HDPA);
-LPVOID WINAPI DPA_GetPtr (const HDPA, INT32);
-INT32  WINAPI DPA_GetPtrIndex (const HDPA, LPVOID);
-BOOL32 WINAPI DPA_Grow (const HDPA, INT32);
-BOOL32 WINAPI DPA_SetPtr (const HDPA, INT32, LPVOID);
-INT32  WINAPI DPA_InsertPtr (const HDPA, INT32, LPVOID);
-LPVOID WINAPI DPA_DeletePtr (const HDPA, INT32);
-BOOL32 WINAPI DPA_DeleteAllPtrs (const HDPA);
+LPVOID WINAPI DPA_GetPtr (const HDPA, INT);
+INT  WINAPI DPA_GetPtrIndex (const HDPA, LPVOID);
+BOOL WINAPI DPA_Grow (const HDPA, INT);
+BOOL WINAPI DPA_SetPtr (const HDPA, INT, LPVOID);
+INT  WINAPI DPA_InsertPtr (const HDPA, INT, LPVOID);
+LPVOID WINAPI DPA_DeletePtr (const HDPA, INT);
+BOOL WINAPI DPA_DeleteAllPtrs (const HDPA);
 
-typedef INT32 (CALLBACK *PFNDPACOMPARE)(LPVOID, LPVOID, LPARAM);
-BOOL32 WINAPI DPA_Sort (const HDPA, PFNDPACOMPARE, LPARAM);
+typedef INT (CALLBACK *PFNDPACOMPARE)(LPVOID, LPVOID, LPARAM);
+BOOL WINAPI DPA_Sort (const HDPA, PFNDPACOMPARE, LPARAM);
 
 #define DPAS_SORTED             0x0001
 #define DPAS_INSERTBEFORE       0x0002
 #define DPAS_INSERTAFTER        0x0004
  
-INT32  WINAPI DPA_Search (const HDPA, LPVOID, INT32, PFNDPACOMPARE, LPARAM, UINT32);
+INT  WINAPI DPA_Search (const HDPA, LPVOID, INT, PFNDPACOMPARE, LPARAM, UINT);
 
 #define DPAM_SORT               0x0001
 
-BOOL32 WINAPI DPA_Merge (const HDPA, const HDPA, DWORD, PFNDPACOMPARE, LPVOID, LPARAM);
+BOOL WINAPI DPA_Merge (const HDPA, const HDPA, DWORD, PFNDPACOMPARE, LPVOID, LPARAM);
 
-typedef INT32 (CALLBACK *DPAENUMPROC)(LPVOID, DWORD);
+typedef INT (CALLBACK *DPAENUMPROC)(LPVOID, DWORD);
 VOID   WINAPI DPA_EnumCallback (const HDPA, DPAENUMPROC, LPARAM);
-BOOL32 WINAPI DPA_DestroyCallback (const HDPA, DPAENUMPROC, LPARAM);
+BOOL WINAPI DPA_DestroyCallback (const HDPA, DPAENUMPROC, LPARAM);
 
 
-#define DPA_GetPtrCount(hdpa)  (*(INT32*)(hdpa))
-#define DPA_GetPtrPtr(hdpa)    (*((LPVOID**)((BYTE*)(hdpa)+sizeof(INT32))))
+#define DPA_GetPtrCount(hdpa)  (*(INT*)(hdpa))
+#define DPA_GetPtrPtr(hdpa)    (*((LPVOID**)((BYTE*)(hdpa)+sizeof(INT))))
 #define DPA_FastGetPtr(hdpa,i) (DPA_GetPtrPtr(hdpa)[i])
 
 
 /* notification helper functions */
 
-LRESULT WINAPI COMCTL32_SendNotify (HWND32, HWND32, UINT32, LPNMHDR);
+LRESULT WINAPI COMCTL32_SendNotify (HWND, HWND, UINT, LPNMHDR);
 
 /* type and functionality of last parameter is still unknown */
-LRESULT WINAPI COMCTL32_SendNotifyEx (HWND32, HWND32, UINT32, LPNMHDR, DWORD);
+LRESULT WINAPI COMCTL32_SendNotifyEx (HWND, HWND, UINT, LPNMHDR, DWORD);
 
 #ifdef __cplusplus
 }
diff --git a/include/commdlg.h b/include/commdlg.h
index 34ce9e0..1d0103a 100644
--- a/include/commdlg.h
+++ b/include/commdlg.h
@@ -38,7 +38,7 @@
 
 /* WINE internal flags */
 #define OFN_UNICODE		     0x40000000	/*to differ between 32W/A hook*/
-#define OFN_WINE32		     0x80000000	/* comdlg32 */
+#define OFN_WINE		     0x80000000	/* comdlg32 */
 
 #define OFN_SHAREFALLTHROUGH     2
 #define OFN_SHARENOWARN          1
@@ -69,8 +69,8 @@
 
 typedef struct {
 	DWORD		lStructSize;
-	HWND32		hwndOwner;
-	HINSTANCE32	hInstance;
+	HWND		hwndOwner;
+	HINSTANCE	hInstance;
 	LPCSTR		lpstrFilter;
 	LPSTR		lpstrCustomFilter;
 	DWORD		nMaxCustFilter;
@@ -86,14 +86,14 @@
 	WORD		nFileExtension;
 	LPCSTR		lpstrDefExt;
 	LPARAM		lCustData;
-	WNDPROC32	lpfnHook;
+	WNDPROC	lpfnHook;
 	LPCSTR		lpTemplateName;
-} OPENFILENAME32A,*LPOPENFILENAME32A;
+} OPENFILENAMEA,*LPOPENFILENAMEA;
 
 typedef struct {
 	DWORD		lStructSize;
-	HWND32		hwndOwner;
-	HINSTANCE32	hInstance;
+	HWND		hwndOwner;
+	HINSTANCE	hInstance;
 	LPCWSTR		lpstrFilter;
 	LPWSTR		lpstrCustomFilter;
 	DWORD		nMaxCustFilter;
@@ -109,9 +109,9 @@
 	WORD		nFileExtension;
 	LPCWSTR		lpstrDefExt;
 	LPARAM		lCustData;
-	WNDPROC32	lpfnHook;
+	WNDPROC	lpfnHook;
 	LPCWSTR		lpTemplateName;
-} OPENFILENAME32W,*LPOPENFILENAME32W;
+} OPENFILENAMEW,*LPOPENFILENAMEW;
 
 DECL_WINELIB_TYPE_AW(OPENFILENAME)
 DECL_WINELIB_TYPE_AW(LPOPENFILENAME)
@@ -119,21 +119,21 @@
 typedef struct
 {
 	NMHDR           hdr;
-	LPOPENFILENAME32A lpOFN;
+	LPOPENFILENAMEA lpOFN;
 	LPSTR           pszFile;
-} OFNOTIFY32A, *LPOFNOTIFY32A;
+} OFNOTIFYA, *LPOFNOTIFYA;
 
 typedef struct
 {
 	NMHDR           hdr;
-	LPOPENFILENAME32W lpOFN;
+	LPOPENFILENAMEW lpOFN;
 	LPWSTR          pszFile;
-} OFNOTIFY32W, *LPOFNOTIFY32W;
+} OFNOTIFYW, *LPOFNOTIFYW;
 
 DECL_WINELIB_TYPE_AW(OFNOTIFY)
 DECL_WINELIB_TYPE_AW(LPOFNOTIFY)
  
-typedef UINT32 (CALLBACK *LPCCHOOKPROC) (HWND32, UINT32, WPARAM32, LPARAM);
+typedef UINT (CALLBACK *LPCCHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
 
 typedef struct {
 	DWORD		lStructSize;
@@ -150,29 +150,29 @@
 
 typedef struct {
 	DWORD		lStructSize;
-	HWND32		hwndOwner;
-	HWND32		hInstance;
+	HWND		hwndOwner;
+	HWND		hInstance;
 	DWORD	        rgbResult;
 	LPDWORD         lpCustColors;
 	DWORD 		Flags;
 	DWORD		lCustData;
         LPCCHOOKPROC    lpfnHook;
 	LPCSTR 		lpTemplateName;
-} CHOOSECOLOR32A;
-typedef CHOOSECOLOR32A *LPCHOOSECOLOR32A;
+} CHOOSECOLORA;
+typedef CHOOSECOLORA *LPCHOOSECOLORA;
 
 typedef struct {
 	DWORD		lStructSize;
-	HWND32		hwndOwner;
-	HWND32		hInstance;
+	HWND		hwndOwner;
+	HWND		hInstance;
 	DWORD	        rgbResult;
 	LPDWORD         *lpCustColors;
 	DWORD 		Flags;
 	DWORD		lCustData;
         LPCCHOOKPROC    lpfnHook;
 	LPCWSTR 	lpTemplateName;
-} CHOOSECOLOR32W;
-typedef CHOOSECOLOR32W *LPCHOOSECOLOR32W;
+} CHOOSECOLORW;
+typedef CHOOSECOLORW *LPCHOOSECOLORW;
 
 DECL_WINELIB_TYPE_AW(CHOOSECOLOR)
 DECL_WINELIB_TYPE_AW(LPCHOOSECOLOR)
@@ -203,8 +203,8 @@
 
 typedef struct {
 	DWORD		lStructSize;
-	HWND32		hwndOwner;
-	HINSTANCE32	hInstance;
+	HWND		hwndOwner;
+	HINSTANCE	hInstance;
 
 	DWORD		Flags;
 	LPSTR		lpstrFindWhat;
@@ -212,14 +212,14 @@
 	WORD		wFindWhatLen;
 	WORD 		wReplaceWithLen;
 	LPARAM 		lCustData;
-        WNDPROC32       lpfnHook;
+        WNDPROC       lpfnHook;
 	LPCSTR 		lpTemplateName;
-	} FINDREPLACE32A, *LPFINDREPLACE32A;
+	} FINDREPLACEA, *LPFINDREPLACEA;
 
 typedef struct {
 	DWORD		lStructSize;
-	HWND32		hwndOwner;
-	HINSTANCE32	hInstance;
+	HWND		hwndOwner;
+	HINSTANCE	hInstance;
 
 	DWORD		Flags;
 	LPWSTR		lpstrFindWhat;
@@ -227,9 +227,9 @@
 	WORD		wFindWhatLen;
 	WORD 		wReplaceWithLen;
 	LPARAM 		lCustData;
-        WNDPROC32       lpfnHook;
+        WNDPROC       lpfnHook;
 	LPCWSTR		lpTemplateName;
-	} FINDREPLACE32W, *LPFINDREPLACE32W;
+	} FINDREPLACEW, *LPFINDREPLACEW;
 	
 DECL_WINELIB_TYPE_AW(FINDREPLACE)
 DECL_WINELIB_TYPE_AW(LPFINDREPLACE)
@@ -282,43 +282,43 @@
 
 typedef struct
 {
-	UINT32  	lStructSize; 
-	HWND32 		hwndOwner; 
-	HDC32  		hDC; 
-	LPLOGFONT32A    lpLogFont; 
-	INT32		iPointSize; 
-	UINT32		Flags; 
+	UINT  	lStructSize; 
+	HWND 		hwndOwner; 
+	HDC  		hDC; 
+	LPLOGFONTA    lpLogFont; 
+	INT		iPointSize; 
+	UINT		Flags; 
 	COLORREF	rgbColors; 
 	LPARAM		lCustData; 
-	WNDPROC32 	lpfnHook; 
+	WNDPROC 	lpfnHook; 
 	LPCSTR		lpTemplateName; 
-	HINSTANCE32	hInstance; 
+	HINSTANCE	hInstance; 
 	LPSTR		lpszStyle; 
 	UINT16		nFontType; 
 	UINT16	___MISSING_ALIGNMENT__; 
-	INT32   	nSizeMin; 
-	INT32		nSizeMax; 
-} CHOOSEFONT32A, *LPCHOOSEFONT32A;
+	INT   	nSizeMin; 
+	INT		nSizeMax; 
+} CHOOSEFONTA, *LPCHOOSEFONTA;
 
 typedef struct
 {
-	UINT32  	lStructSize; 
-	HWND32 		hwndOwner; 
-	HDC32  		hDC; 
-	LPLOGFONT32W    lpLogFont; 
-	INT32		iPointSize; 
-	UINT32		Flags; 
+	UINT  	lStructSize; 
+	HWND 		hwndOwner; 
+	HDC  		hDC; 
+	LPLOGFONTW    lpLogFont; 
+	INT		iPointSize; 
+	UINT		Flags; 
 	COLORREF	rgbColors; 
 	LPARAM		lCustData; 
-	WNDPROC32 	lpfnHook; 
+	WNDPROC 	lpfnHook; 
 	LPCWSTR		lpTemplateName; 
-	HINSTANCE32	hInstance; 
+	HINSTANCE	hInstance; 
 	LPWSTR		lpszStyle; 
 	UINT16		nFontType; 
 	UINT16	___MISSING_ALIGNMENT__; 
-	INT32   	nSizeMin; 
-	INT32		nSizeMax; 
-} CHOOSEFONT32W, *LPCHOOSEFONT32W;
+	INT   	nSizeMin; 
+	INT		nSizeMax; 
+} CHOOSEFONTW, *LPCHOOSEFONTW;
 
 DECL_WINELIB_TYPE_AW(CHOOSEFONT)
 DECL_WINELIB_TYPE_AW(LPCHOOSEFONT)
@@ -423,54 +423,54 @@
     HGLOBAL16        hSetupTemplate;
 } PRINTDLG16, *LPPRINTDLG16;
 
-typedef UINT32 (CALLBACK *LPPRINTHOOKPROC) (HWND32, UINT32, WPARAM32, LPARAM);
-typedef UINT32 (CALLBACK *LPSETUPHOOKPROC) (HWND32, UINT32, WPARAM32, LPARAM);
+typedef UINT (CALLBACK *LPPRINTHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
+typedef UINT (CALLBACK *LPSETUPHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
 
 typedef struct tagPDA
 {
     DWORD            lStructSize;
-    HWND32           hwndOwner;
-    HGLOBAL32        hDevMode;
-    HGLOBAL32        hDevNames;
-    HDC32            hDC;
+    HWND           hwndOwner;
+    HGLOBAL        hDevMode;
+    HGLOBAL        hDevNames;
+    HDC            hDC;
     DWORD            Flags;
     WORD             nFromPage;
     WORD             nToPage;
     WORD             nMinPage;
     WORD             nMaxPage;
     WORD             nCopies;
-    HINSTANCE32      hInstance;
+    HINSTANCE      hInstance;
     LPARAM           lCustData;
     LPPRINTHOOKPROC  lpfnPrintHook;
     LPSETUPHOOKPROC  lpfnSetupHook;
     LPCSTR           lpPrintTemplateName;
     LPCSTR           lpSetupTemplateName;
-    HGLOBAL32        hPrintTemplate;
-    HGLOBAL32        hSetupTemplate;
-} PRINTDLG32A, *LPPRINTDLG32A;
+    HGLOBAL        hPrintTemplate;
+    HGLOBAL        hSetupTemplate;
+} PRINTDLGA, *LPPRINTDLGA;
 
 typedef struct tagPDW
 {
     DWORD            lStructSize;
-    HWND32           hwndOwner;
-    HGLOBAL32        hDevMode;
-    HGLOBAL32        hDevNames;
-    HDC32            hDC;
+    HWND           hwndOwner;
+    HGLOBAL        hDevMode;
+    HGLOBAL        hDevNames;
+    HDC            hDC;
     DWORD            Flags;
     WORD             nFromPage;
     WORD             nToPage;
     WORD             nMinPage;
     WORD             nMaxPage;
     WORD             nCopies;
-    HINSTANCE32      hInstance;
+    HINSTANCE      hInstance;
     LPARAM           lCustData;
     LPPRINTHOOKPROC  lpfnPrintHook;
     LPSETUPHOOKPROC  lpfnSetupHook;
     LPCWSTR          lpPrintTemplateName;
     LPCWSTR          lpSetupTemplateName;
-    HGLOBAL32        hPrintTemplate;
-    HGLOBAL32        hSetupTemplate;
-} PRINTDLG32W, *LPPRINTDLG32W;
+    HGLOBAL        hPrintTemplate;
+    HGLOBAL        hSetupTemplate;
+} PRINTDLGW, *LPPRINTDLGW;
 
 DECL_WINELIB_TYPE_AW(PRINTDLG)
 DECL_WINELIB_TYPE_AW(LPPRINTDLG)
@@ -558,44 +558,44 @@
 #define WM_PSD_ENVSTAMPRECT	(WM_USER+5)
 #define WM_PSD_YAFULLPAGERECT	(WM_USER+6)
 
-typedef UINT32 (CALLBACK* LPPAGEPAINTHOOK)( HWND32, UINT32, WPARAM32, LPARAM );
-typedef UINT32 (CALLBACK* LPPAGESETUPHOOK)( HWND32, UINT32, WPARAM32, LPARAM );
+typedef UINT (CALLBACK* LPPAGEPAINTHOOK)( HWND, UINT, WPARAM, LPARAM );
+typedef UINT (CALLBACK* LPPAGESETUPHOOK)( HWND, UINT, WPARAM, LPARAM );
 
-typedef struct tagPSD32A
+typedef struct tagPSDA
 {
 	DWORD		lStructSize;
-	HWND32		hwndOwner;
-	HGLOBAL32	hDevMode;
-	HGLOBAL32	hDevNames;
+	HWND		hwndOwner;
+	HGLOBAL	hDevMode;
+	HGLOBAL	hDevNames;
 	DWORD		Flags;
-	POINT32		ptPaperSize;
-	RECT32		rtMinMargin;
-	RECT32		rtMargin;
-	HINSTANCE32	hInstance;
+	POINT		ptPaperSize;
+	RECT		rtMinMargin;
+	RECT		rtMargin;
+	HINSTANCE	hInstance;
 	LPARAM		lCustData;
 	LPPAGESETUPHOOK	lpfnPageSetupHook;
 	LPPAGEPAINTHOOK	lpfnPagePaintHook;
 	LPCSTR		lpPageSetupTemplateName;
-	HGLOBAL32	hPageSetupTemplate;
-} PAGESETUPDLG32A,*LPPAGESETUPDLG32A;
+	HGLOBAL	hPageSetupTemplate;
+} PAGESETUPDLGA,*LPPAGESETUPDLGA;
 
-typedef struct tagPSD32W
+typedef struct tagPSDW
 {
 	DWORD		lStructSize;
-	HWND32		hwndOwner;
-	HGLOBAL32	hDevMode;
-	HGLOBAL32	hDevNames;
+	HWND		hwndOwner;
+	HGLOBAL	hDevMode;
+	HGLOBAL	hDevNames;
 	DWORD		Flags;
-	POINT32		ptPaperSize;
-	RECT32		rtMinMargin;
-	RECT32		rtMargin;
-	HINSTANCE32	hInstance;
+	POINT		ptPaperSize;
+	RECT		rtMinMargin;
+	RECT		rtMargin;
+	HINSTANCE	hInstance;
 	LPARAM		lCustData;
 	LPPAGESETUPHOOK	lpfnPageSetupHook;
 	LPPAGEPAINTHOOK	lpfnPagePaintHook;
 	LPCWSTR		lpPageSetupTemplateName;
-	HGLOBAL32	hPageSetupTemplate;
-} PAGESETUPDLG32W,*LPPAGESETUPDLG32W;
+	HGLOBAL	hPageSetupTemplate;
+} PAGESETUPDLGW,*LPPAGESETUPDLGW;
 DECL_WINELIB_TYPE_AW(PAGESETUPDLG)
 DECL_WINELIB_TYPE_AW(LPPAGESETUPDLG)
 
@@ -620,57 +620,57 @@
 #define PSD_DISABLEPAGEPAINTING           0x00080000
 
 BOOL16  WINAPI ChooseColor16(LPCHOOSECOLOR16 lpChCol);
-BOOL32  WINAPI ChooseColor32A(LPCHOOSECOLOR32A lpChCol);
-BOOL32  WINAPI ChooseColor32W(LPCHOOSECOLOR32W lpChCol);
+BOOL  WINAPI ChooseColorA(LPCHOOSECOLORA lpChCol);
+BOOL  WINAPI ChooseColorW(LPCHOOSECOLORW lpChCol);
 #define ChooseColor WINELIB_NAME_AW(ChooseColor)
 DWORD   WINAPI CommDlgExtendedError(void);
 HWND16  WINAPI FindText16( SEGPTR find);
-HWND32  WINAPI FindText32A(LPFINDREPLACE32A lpFind);
-HWND32  WINAPI FindText32W(LPFINDREPLACE32W lpFind);
+HWND  WINAPI FindTextA(LPFINDREPLACEA lpFind);
+HWND  WINAPI FindTextW(LPFINDREPLACEW lpFind);
 #define FindText WINELIB_NAME_AW(FindText)
 INT16   WINAPI GetFileTitle16(LPCSTR lpFile, LPSTR lpTitle, UINT16 cbBuf);
-INT16   WINAPI GetFileTitle32A(LPCSTR lpFile, LPSTR lpTitle, UINT32 cbBuf);
-INT16   WINAPI GetFileTitle32W(LPCWSTR lpFile, LPWSTR lpTitle, UINT32 cbBuf);
+INT16   WINAPI GetFileTitleA(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf);
+INT16   WINAPI GetFileTitleW(LPCWSTR lpFile, LPWSTR lpTitle, UINT cbBuf);
 #define GetFileTitle WINELIB_NAME_AW(GetFileTitle)
 BOOL16  WINAPI GetOpenFileName16(SEGPTR ofn);
-BOOL32  WINAPI GetOpenFileName32A(LPOPENFILENAME32A ofn);
-BOOL32  WINAPI GetOpenFileName32W(LPOPENFILENAME32W ofn);
+BOOL  WINAPI GetOpenFileNameA(LPOPENFILENAMEA ofn);
+BOOL  WINAPI GetOpenFileNameW(LPOPENFILENAMEW ofn);
 #define GetOpenFileName WINELIB_NAME_AW(GetOpenFileName)
 BOOL16  WINAPI GetSaveFileName16(SEGPTR ofn);
-BOOL32  WINAPI GetSaveFileName32A(LPOPENFILENAME32A ofn);
-BOOL32  WINAPI GetSaveFileName32W(LPOPENFILENAME32W ofn);
+BOOL  WINAPI GetSaveFileNameA(LPOPENFILENAMEA ofn);
+BOOL  WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn);
 #define GetSaveFileName WINELIB_NAME_AW(GetSaveFileName)
-BOOL32 WINAPI PageSetupDlg32A( LPPAGESETUPDLG32A );
-BOOL32 WINAPI PageSetupDlg32W( LPPAGESETUPDLG32W );
+BOOL WINAPI PageSetupDlgA( LPPAGESETUPDLGA );
+BOOL WINAPI PageSetupDlgW( LPPAGESETUPDLGW );
 #define PageSetupDlg WINELIB_NAME_AW(PageSetupDlg)
 BOOL16  WINAPI PrintDlg16( SEGPTR print);
-BOOL32  WINAPI PrintDlg32A( LPPRINTDLG32A printdlg);
-BOOL32  WINAPI PrintDlg32W( LPPRINTDLG32W printdlg);
+BOOL  WINAPI PrintDlgA( LPPRINTDLGA printdlg);
+BOOL  WINAPI PrintDlgW( LPPRINTDLGW printdlg);
 #define PrintDlg WINELIB_NAME_AW(PrintDlg)
 HWND16  WINAPI ReplaceText16( SEGPTR find);
-HWND32  WINAPI ReplaceText32A( LPFINDREPLACE32A lpFind);
-HWND32  WINAPI ReplaceText32W( LPFINDREPLACE32W lpFind);
+HWND  WINAPI ReplaceTextA( LPFINDREPLACEA lpFind);
+HWND  WINAPI ReplaceTextW( LPFINDREPLACEW lpFind);
 #define ReplaceText WINELIB_NAME_AW(ReplaceText)
 BOOL16  WINAPI ChooseFont16(LPCHOOSEFONT16);
-BOOL32  WINAPI ChooseFont32A(LPCHOOSEFONT32A);
-BOOL32  WINAPI ChooseFont32W(LPCHOOSEFONT32W);
+BOOL  WINAPI ChooseFontA(LPCHOOSEFONTA);
+BOOL  WINAPI ChooseFontW(LPCHOOSEFONTW);
 #define ChooseFont WINELIB_NAME_AW(ChooseFont)
-LRESULT WINAPI FileOpenDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
-LRESULT WINAPI FileSaveDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
-LRESULT WINAPI ColorDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
+LRESULT WINAPI FileOpenDlgProc16(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
+LRESULT WINAPI FileSaveDlgProc16(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
+LRESULT WINAPI ColorDlgProc16(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
 LRESULT WINAPI FindTextDlgProc16(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
-LRESULT WINAPI FindTextDlgProc32A(HWND32 hWnd, UINT32 wMsg, WPARAM32 wParam, LPARAM lParam);
-LRESULT WINAPI FindTextDlgProc32W(HWND32 hWnd, UINT32 wMsg, WPARAM32 wParam, LPARAM lParam);
+LRESULT WINAPI FindTextDlgProcA(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
+LRESULT WINAPI FindTextDlgProcW(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
 #define FindTextDlgProc WINELIB_NAME_AW(FindTextDlgProc)
 LRESULT WINAPI ReplaceTextDlgProc16(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
-LRESULT WINAPI ReplaceTextDlgProc32A(HWND32 hWnd, UINT32 wMsg, WPARAM32 wParam, LPARAM lParam);
-LRESULT WINAPI ReplaceTextDlgProc32W(HWND32 hWnd, UINT32 wMsg, WPARAM32 wParam, LPARAM lParam);
+LRESULT WINAPI ReplaceTextDlgProcA(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
+LRESULT WINAPI ReplaceTextDlgProcW(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
 #define ReplaceTextProc WINELIB_NAME_AW(ReplaceTextDlgProc)
-LRESULT WINAPI PrintDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
-LRESULT WINAPI PrintSetupDlgProc(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
+LRESULT WINAPI PrintDlgProc16(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
+LRESULT WINAPI PrintSetupDlgProc16(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);
 LRESULT WINAPI FormatCharDlgProc16(HWND16,UINT16,WPARAM16,LPARAM);
-LRESULT WINAPI FormatCharDlgProc32A(HWND32,UINT32,WPARAM32,LPARAM);
-LRESULT WINAPI FormatCharDlgProc32W(HWND32,UINT32,WPARAM32,LPARAM);
+LRESULT WINAPI FormatCharDlgProcA(HWND,UINT,WPARAM,LPARAM);
+LRESULT WINAPI FormatCharDlgProcW(HWND,UINT,WPARAM,LPARAM);
 #define FormatCharDlgProc WINELIB_NAME_AW(FormatCharDlgProc)
 #ifdef __cplusplus
 }
diff --git a/include/cursoricon.h b/include/cursoricon.h
index 470b887..4702b58 100644
--- a/include/cursoricon.h
+++ b/include/cursoricon.h
@@ -70,10 +70,10 @@
 #pragma pack(4)
 
 extern HCURSOR16 CURSORICON_IconToCursor( HICON16 hIcon,
-                                          BOOL32 bSemiTransparent );
+                                          BOOL bSemiTransparent );
 
-extern HGLOBAL32 CURSORICON_Load32( HINSTANCE32 hInstance, LPCWSTR name,
+extern HGLOBAL CURSORICON_Load( HINSTANCE hInstance, LPCWSTR name,
                                     int width, int height, int colors,
-                                    BOOL32 fCursor, UINT32 loadflags);
+                                    BOOL fCursor, UINT loadflags);
 				    
 #endif /* __WINE_CURSORICON_H */
diff --git a/include/d3d.h b/include/d3d.h
index 18306a6..814e316 100644
--- a/include/d3d.h
+++ b/include/d3d.h
@@ -504,7 +504,7 @@
 	D3DCOLORMODEL	dcmColorModel;
 	DWORD		dwDevCaps;
 	D3DTRANSFORMCAPS dtcTransformCaps;
-	BOOL32		bClipping;
+	BOOL		bClipping;
 	D3DLIGHTINGCAPS	dlcLightingCaps;
 	D3DPRIMCAPS	dpcLineCaps;
 	D3DPRIMCAPS	dpcTriCaps;
@@ -543,7 +543,7 @@
 typedef struct {
     DWORD		dwSize;
     DWORD		dwFlags;
-    BOOL32		bHardware;
+    BOOL		bHardware;
     D3DCOLORMODEL	dcmColorModel;
     GUID		guid;
     DWORD		dwCaps;
@@ -1106,7 +1106,7 @@
 typedef struct _D3DBRANCH { 
   DWORD dwMask; 
   DWORD dwValue; 
-  BOOL32  bNegate; 
+  BOOL  bNegate; 
   DWORD dwOffset; 
 } D3DBRANCH, *LPD3DBRANCH; 
 
@@ -1344,9 +1344,9 @@
   STDMETHOD(TransformVertices) (THIS_ DWORD, LPD3DTRANSFORMDATA, DWORD, LPDWORD) PURE;
   STDMETHOD(LightElements) (THIS_ DWORD, LPD3DLIGHTDATA) PURE;
   STDMETHOD(SetBackground) (THIS_ D3DMATERIALHANDLE) PURE;
-  STDMETHOD(GetBackground) (THIS_ LPD3DMATERIALHANDLE, LPBOOL32) PURE;
+  STDMETHOD(GetBackground) (THIS_ LPD3DMATERIALHANDLE, LPBOOL) PURE;
   STDMETHOD(SetBackgroundDepth) (THIS_ LPDIRECTDRAWSURFACE) PURE;
-  STDMETHOD(GetBackgroundDepth) (THIS_ LPDIRECTDRAWSURFACE*, LPBOOL32) PURE;
+  STDMETHOD(GetBackgroundDepth) (THIS_ LPDIRECTDRAWSURFACE*, LPBOOL) PURE;
   STDMETHOD(Clear) (THIS_ DWORD, LPD3DRECT, DWORD) PURE;
   STDMETHOD(AddLight) (THIS_ LPDIRECT3DLIGHT) PURE;
   STDMETHOD(DeleteLight) (THIS_ LPDIRECT3DLIGHT) PURE;
@@ -1372,9 +1372,9 @@
   STDMETHOD(TransformVertices) (THIS_ DWORD, LPD3DTRANSFORMDATA, DWORD, LPDWORD) PURE;
   STDMETHOD(LightElements) (THIS_ DWORD, LPD3DLIGHTDATA) PURE;
   STDMETHOD(SetBackground) (THIS_ D3DMATERIALHANDLE) PURE;
-  STDMETHOD(GetBackground) (THIS_ LPD3DMATERIALHANDLE, LPBOOL32) PURE;
+  STDMETHOD(GetBackground) (THIS_ LPD3DMATERIALHANDLE, LPBOOL) PURE;
   STDMETHOD(SetBackgroundDepth) (THIS_ LPDIRECTDRAWSURFACE) PURE;
-  STDMETHOD(GetBackgroundDepth) (THIS_ LPDIRECTDRAWSURFACE*, LPBOOL32) PURE;
+  STDMETHOD(GetBackgroundDepth) (THIS_ LPDIRECTDRAWSURFACE*, LPBOOL) PURE;
   STDMETHOD(Clear) (THIS_ DWORD, LPD3DRECT, DWORD) PURE;
   STDMETHOD(AddLight) (THIS_ LPDIRECT3DLIGHT) PURE;
   STDMETHOD(DeleteLight) (THIS_ LPDIRECT3DLIGHT) PURE;
@@ -1456,7 +1456,7 @@
 
   /* This flags is set to TRUE if we allocated ourselves the
      data buffer */
-  BOOL32 need_free;
+  BOOL need_free;
 
   void (*execute)(LPDIRECT3DEXECUTEBUFFER this,
 		  LPDIRECT3DDEVICE dev,
diff --git a/include/dc.h b/include/dc.h
index a422ce9..95903e0 100644
--- a/include/dc.h
+++ b/include/dc.h
@@ -15,16 +15,16 @@
 #define CLIP_KEEPRGN	0x0004
 
 extern DC * DC_AllocDC( const DC_FUNCTIONS *funcs );
-extern DC * DC_GetDCPtr( HDC32 hdc );
+extern DC * DC_GetDCPtr( HDC hdc );
 extern void DC_InitDC( DC * dc );
 extern void DC_UpdateXforms( DC * dc );
 
 
 /* objects/clipping.c */
-INT32 CLIPPING_IntersectClipRect( DC * dc, INT32 left, INT32 top,
-    INT32 right, INT32 bottom, UINT32 flags );
-INT32 CLIPPING_IntersectVisRect( DC * dc, INT32 left, INT32 top,
-    INT32 right, INT32 bottom, BOOL32 exclude );
+INT CLIPPING_IntersectClipRect( DC * dc, INT left, INT top,
+    INT right, INT bottom, UINT flags );
+INT CLIPPING_IntersectVisRect( DC * dc, INT left, INT top,
+    INT right, INT bottom, BOOL exclude );
 extern void CLIPPING_UpdateGCRegion( DC * dc );
 
 #endif /* __WINE_DC_H */
diff --git a/include/dce.h b/include/dce.h
index 96db5d1..3fa10cb 100644
--- a/include/dce.h
+++ b/include/dce.h
@@ -37,21 +37,21 @@
 typedef struct tagDCE
 {
     struct tagDCE *next;
-    HDC32          hDC;
-    HWND32         hwndCurrent;
-    HWND32         hwndDC;
-    HRGN32         hClipRgn;
+    HDC          hDC;
+    HWND         hwndCurrent;
+    HWND         hwndDC;
+    HRGN         hClipRgn;
     DCE_TYPE       type;
     DWORD          DCXflags;
 } DCE;
 
 
 extern void  DCE_Init(void);
-extern DCE*  DCE_AllocDCE( HWND32 hWnd, DCE_TYPE type );
+extern DCE*  DCE_AllocDCE( HWND hWnd, DCE_TYPE type );
 extern DCE*  DCE_FreeDCE( DCE *dce );
 extern void  DCE_FreeWindowDCE( WND* );
-extern INT16 DCE_ExcludeRgn( HDC32, WND*, HRGN32 );
-extern HRGN32 DCE_GetVisRgn( HWND32, WORD, HWND32, WORD );
-extern BOOL32 DCE_InvalidateDCE( WND*, const RECT32* );
+extern INT16 DCE_ExcludeRgn( HDC, WND*, HRGN );
+extern HRGN DCE_GetVisRgn( HWND, WORD, HWND, WORD );
+extern BOOL DCE_InvalidateDCE( WND*, const RECT* );
 
 #endif  /* __WINE_DCE_H */
diff --git a/include/dde_proc.h b/include/dde_proc.h
index e8a7ab1..84697cf 100644
--- a/include/dde_proc.h
+++ b/include/dde_proc.h
@@ -51,9 +51,9 @@
 void dde_wnd_setup();		   /* setup Data structure of DDE windows */
 
 /* Send ack. to hnd indicating that posted/sent msg. got to destination*/
-void dde_proc_send_ack(HWND16 wnd, BOOL32 val);
-BOOL32 DDE_PostMessage( MSG16 *msg);
-BOOL32 DDE_SendMessage( MSG16 *msg);
+void dde_proc_send_ack(HWND16 wnd, BOOL val);
+BOOL DDE_PostMessage( MSG16 *msg);
+BOOL DDE_SendMessage( MSG16 *msg);
 int DDE_GetRemoteMessage();
 void DDE_DestroyWindow(HWND16 hwnd); /* delete DDE info regarding hwnd */
 void DDE_TestDDE(HWND16 hwnd);	   /* do we have dde handling in the window ?*/
diff --git a/include/ddeml.h b/include/ddeml.h
index cf76a8d..a8f6f3f 100644
--- a/include/ddeml.h
+++ b/include/ddeml.h
@@ -132,9 +132,8 @@
 
 typedef HDDEDATA (CALLBACK *PFNCALLBACK16)(UINT16,UINT16,HCONV,HSZ,HSZ,
                                            HDDEDATA,DWORD,DWORD);
-typedef HDDEDATA (CALLBACK *PFNCALLBACK32)(UINT32,UINT32,HCONV,HSZ,HSZ,
+typedef HDDEDATA (CALLBACK *PFNCALLBACK)(UINT,UINT,HCONV,HSZ,HSZ,
                                            HDDEDATA,DWORD,DWORD);
-DECL_WINELIB_TYPE(PFNCALLBACK)
 
 /***************************************************
 
@@ -154,13 +153,13 @@
 
 typedef struct
 {
-    UINT32  cb;
-    UINT32  wFlags;
-    UINT32  wCountryID;
-    INT32   iCodePage;
+    UINT  cb;
+    UINT  wFlags;
+    UINT  wCountryID;
+    INT   iCodePage;
     DWORD   dwLangID;
     DWORD   dwSecurity;
-} CONVCONTEXT32, *LPCONVCONTEXT32;
+} CONVCONTEXT, *LPCONVCONTEXT;
 
 //  Internal data structures
 
@@ -172,89 +171,69 @@
     BOOL16		Win16;		/* flag to indicate Win16 API used to initialize */
     LPDWORD            	Instance_id;  // needed to track monitor usage
     struct DDE_HANDLE_ENTRY    *Next_Entry;
-    PFNCALLBACK32	CallBack;
+    PFNCALLBACK	CallBack;
     DWORD               CBF_Flags;
     DWORD               Monitor_flags;
-    UINT32              Txn_count;      // count transactions open to simplify closure
+    UINT              Txn_count;      // count transactions open to simplify closure
 } DDE_HANDLE_ENTRY;
 
 //            Interface Definitions
 
-DECL_WINELIB_TYPE(CONVCONTEXT)
-DECL_WINELIB_TYPE(LPCONVCONTEXT)
 
 UINT16    WINAPI DdeInitialize16(LPDWORD,PFNCALLBACK16,DWORD,DWORD);
-UINT32    WINAPI DdeInitialize32A(LPDWORD,PFNCALLBACK32,DWORD,DWORD);
-UINT32    WINAPI DdeInitialize32W(LPDWORD,PFNCALLBACK32,DWORD,DWORD);
+UINT    WINAPI DdeInitializeA(LPDWORD,PFNCALLBACK,DWORD,DWORD);
+UINT    WINAPI DdeInitializeW(LPDWORD,PFNCALLBACK,DWORD,DWORD);
 #define   DdeInitialize WINELIB_NAME_AW(DdeInitialize)
 BOOL16    WINAPI DdeUninitialize16(DWORD);
-BOOL32    WINAPI DdeUninitialize32(DWORD);
-#define   DdeUninitialize WINELIB_NAME(DdeUninitialize)
+BOOL    WINAPI DdeUninitialize(DWORD);
 HCONVLIST WINAPI DdeConnectList16(DWORD,HSZ,HSZ,HCONVLIST,LPCONVCONTEXT16);
-HCONVLIST WINAPI DdeConnectList32(DWORD,HSZ,HSZ,HCONVLIST,LPCONVCONTEXT32);
-#define   DdeConnectList WINELIB_NAME(DdeConnectList)
+HCONVLIST WINAPI DdeConnectList(DWORD,HSZ,HSZ,HCONVLIST,LPCONVCONTEXT);
 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);
+HCONV     WINAPI DdeQueryNextServer(HCONVLIST, HCONV);
+DWORD     WINAPI DdeQueryStringA(DWORD, HSZ, LPSTR, DWORD, INT);
+DWORD     WINAPI DdeQueryStringW(DWORD, HSZ, LPWSTR, DWORD, INT);
 #define   DdeQueryString WINELIB_NAME_AW(DdeQueryString)
 BOOL16    WINAPI DdeDisconnectList16(HCONVLIST);
-BOOL32    WINAPI DdeDisconnectList32(HCONVLIST);
-#define   DdeDisConnectList WINELIB_NAME(DdeDisconnectList)
+BOOL    WINAPI DdeDisconnectList(HCONVLIST);
 HCONV     WINAPI DdeConnect16(DWORD,HSZ,HSZ,LPCONVCONTEXT16);
-HCONV     WINAPI DdeConnect32(DWORD,HSZ,HSZ,LPCONVCONTEXT32);
-#define   DdeConnect WINELIB_NAME(DdeConnect)
+HCONV     WINAPI DdeConnect(DWORD,HSZ,HSZ,LPCONVCONTEXT);
 BOOL16    WINAPI DdeDisconnect16(HCONV);
-BOOL32    WINAPI DdeDisconnect32(HCONV);
-#define   DdeDisconnect WINELIB_NAME(DdeDisconnect)
-BOOL16    WINAPI DdeSetUserHandle(HCONV,DWORD,DWORD);
+BOOL    WINAPI DdeDisconnect(HCONV);
+BOOL16    WINAPI DdeSetUserHandle16(HCONV,DWORD,DWORD);
 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)
+HDDEDATA  WINAPI DdeCreateDataHandle(DWORD,LPBYTE,DWORD,DWORD,HSZ,UINT,UINT);
 HCONV     WINAPI DdeReconnect(HCONV);
 HSZ       WINAPI DdeCreateStringHandle16(DWORD,LPCSTR,INT16);
-HSZ       WINAPI DdeCreateStringHandle32A(DWORD,LPCSTR,INT32);
-HSZ       WINAPI DdeCreateStringHandle32W(DWORD,LPCWSTR,INT32);
+HSZ       WINAPI DdeCreateStringHandleA(DWORD,LPCSTR,INT);
+HSZ       WINAPI DdeCreateStringHandleW(DWORD,LPCWSTR,INT);
 #define   DdeCreateStringHandle WINELIB_NAME_AW(DdeCreateStringHandle)
 BOOL16    WINAPI DdeFreeStringHandle16(DWORD,HSZ);
-BOOL32    WINAPI DdeFreeStringHandle32(DWORD,HSZ);
-#define   DdeFreeStringHandle WINELIB_NAME(DdeFreeStringHandle)
+BOOL    WINAPI DdeFreeStringHandle(DWORD,HSZ);
 BOOL16    WINAPI DdeFreeDataHandle16(HDDEDATA);
-BOOL32    WINAPI DdeFreeDataHandle32(HDDEDATA);
-#define   DdeFreeDataHandle WINELIB_NAME(DdeFreeDataHandle)
+BOOL    WINAPI DdeFreeDataHandle(HDDEDATA);
 BOOL16    WINAPI DdeKeepStringHandle16(DWORD,HSZ);
-BOOL32    WINAPI DdeKeepStringHandle32(DWORD,HSZ);
-#define   DdeKeepStringHandle WINELIB_NAME(DdeKeepStringHandle)
+BOOL    WINAPI DdeKeepStringHandle(DWORD,HSZ);
 HDDEDATA  WINAPI DdeClientTransaction16(LPVOID,DWORD,HCONV,HSZ,UINT16,
                                         UINT16,DWORD,LPDWORD);
-HDDEDATA  WINAPI DdeClientTransaction32(LPBYTE,DWORD,HCONV,HSZ,UINT32,
-                                        UINT32,DWORD,LPDWORD);
-#define   DdeClientTransaction WINELIB_NAME(DdeClientTransaction)
-BOOL16    WINAPI DdeAbandonTransaction(DWORD,HCONV,DWORD);
+HDDEDATA  WINAPI DdeClientTransaction(LPBYTE,DWORD,HCONV,HSZ,UINT,
+                                        UINT,DWORD,LPDWORD);
+BOOL16    WINAPI DdeAbandonTransaction16(DWORD,HCONV,DWORD);
 BOOL16    WINAPI DdePostAdvise16(DWORD,HSZ,HSZ);
-BOOL32    WINAPI DdePostAdvise32(DWORD,HSZ,HSZ);
-#define   DdePostAdvise WINELIB_NAME(DdePostAdvise)
-HDDEDATA  WINAPI DdeAddData(HDDEDATA,LPBYTE,DWORD,DWORD);
+BOOL    WINAPI DdePostAdvise(DWORD,HSZ,HSZ);
+HDDEDATA  WINAPI DdeAddData16(HDDEDATA,LPBYTE,DWORD,DWORD);
 DWORD     WINAPI DdeGetData(HDDEDATA,LPBYTE,DWORD,DWORD);
 LPBYTE    WINAPI DdeAccessData16(HDDEDATA,LPDWORD);
-LPBYTE    WINAPI DdeAccessData32(HDDEDATA,LPDWORD);
-#define   DdeAccessData WINELIB_NAME(DdeAccessData)
+LPBYTE    WINAPI DdeAccessData(HDDEDATA,LPDWORD);
 BOOL16    WINAPI DdeUnaccessData16(HDDEDATA);
-BOOL32    WINAPI DdeUnaccessData32(HDDEDATA);
-#define   DdeUnaccessData WINELIB_NAME(DdeUnaccessData)
+BOOL    WINAPI DdeUnaccessData(HDDEDATA);
 BOOL16    WINAPI DdeEnableCallback16(DWORD,HCONV,UINT16);
-BOOL32    WINAPI DdeEnableCallback32(DWORD,HCONV,UINT32);
-#define   DdeEnableCallback WINELIB_NAME(DdeEnableCallback)
+BOOL    WINAPI DdeEnableCallback(DWORD,HCONV,UINT);
 int       WINAPI DdeCmpStringHandles16(HSZ,HSZ);
-int       WINAPI DdeCmpStringHandles32(HSZ,HSZ);
-#define   DdeCmpStringHandles WINELIB_NAME(DdeCmpStringHandles)
+int       WINAPI DdeCmpStringHandles(HSZ,HSZ);
 
 HDDEDATA  WINAPI DdeNameService16(DWORD,HSZ,HSZ,UINT16);
-HDDEDATA  WINAPI DdeNameService32(DWORD,HSZ,HSZ,UINT32);
-#define   DdeNameService WINELIB_NAME(DdeNameService)
+HDDEDATA  WINAPI DdeNameService(DWORD,HSZ,HSZ,UINT);
 UINT16    WINAPI DdeGetLastError16(DWORD);
-UINT32    WINAPI DdeGetLastError32(DWORD);
-#define   DdeGetLastError WINELIB_NAME(DdeGetLastError)
+UINT    WINAPI DdeGetLastError(DWORD);
 
 #endif  /* __WINE__DDEML_H */
diff --git a/include/ddraw.h b/include/ddraw.h
index 5c568e0..1115e25 100644
--- a/include/ddraw.h
+++ b/include/ddraw.h
@@ -692,19 +692,19 @@
 	DWORD	dwReserved1;
 } DDCOLORCONTROL,*LPDDCOLORCONTROL;
 
-typedef BOOL32 (CALLBACK * LPDDENUMCALLBACK32A)(GUID *, LPSTR, LPSTR, LPVOID);
-typedef BOOL32 (CALLBACK * LPDDENUMCALLBACK32W)(GUID *, LPWSTR, LPWSTR, LPVOID);
+typedef BOOL (CALLBACK * LPDDENUMCALLBACKA)(GUID *, LPSTR, LPSTR, LPVOID);
+typedef BOOL (CALLBACK * LPDDENUMCALLBACKW)(GUID *, LPWSTR, LPWSTR, LPVOID);
 DECL_WINELIB_TYPE_AW(LPDDENUMCALLBACK)
 
 typedef HRESULT (CALLBACK * LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID);
 typedef HRESULT (CALLBACK * LPDDENUMSURFACESCALLBACK)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID);
 
-typedef BOOL32 (CALLBACK * LPDDENUMCALLBACKEX32A)(GUID *, LPSTR, LPSTR, LPVOID, HMONITOR);
-typedef BOOL32 (CALLBACK * LPDDENUMCALLBACKEX32W)(GUID *, LPWSTR, LPWSTR, LPVOID, HMONITOR);
+typedef BOOL (CALLBACK * LPDDENUMCALLBACKEXA)(GUID *, LPSTR, LPSTR, LPVOID, HMONITOR);
+typedef BOOL (CALLBACK * LPDDENUMCALLBACKEXW)(GUID *, LPWSTR, LPWSTR, LPVOID, HMONITOR);
 DECL_WINELIB_TYPE_AW(LPDDENUMCALLBACKEX)
 
-HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEX32A lpCallback, LPVOID lpContext, DWORD dwFlags);
-HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEX32W lpCallback, LPVOID lpContext, DWORD dwFlags);
+HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags);
+HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags);
 
 /* flags for DirectDrawEnumerateEx */
 #define DDENUM_ATTACHEDSECONDARYDEVICES	0x00000001
@@ -806,9 +806,9 @@
 
 typedef struct _DDBLTBATCH
 {
-    LPRECT32		lprDest;
+    LPRECT		lprDest;
     LPDIRECTDRAWSURFACE	lpDDSSrc;
-    LPRECT32		lprSrc;
+    LPRECT		lprSrc;
     DWORD		dwFlags;
     LPDDBLTFX		lpDDBltFx;
 } DDBLTBATCH,*LPDDBLTBATCH;
@@ -866,12 +866,12 @@
     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
     STDMETHOD_(ULONG,Release) (THIS) PURE;
     /*** IDirectDrawClipper methods ***/
-    STDMETHOD(GetClipList)(THIS_ LPRECT32, LPRGNDATA, LPDWORD) PURE;
-    STDMETHOD(GetHWnd)(THIS_ HWND32 FAR *) PURE;
+    STDMETHOD(GetClipList)(THIS_ LPRECT, LPRGNDATA, LPDWORD) PURE;
+    STDMETHOD(GetHWnd)(THIS_ HWND FAR *) PURE;
     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD) PURE;
-    STDMETHOD(IsClipListChanged)(THIS_ BOOL32 FAR *) PURE;
+    STDMETHOD(IsClipListChanged)(THIS_ BOOL FAR *) PURE;
     STDMETHOD(SetClipList)(THIS_ LPRGNDATA,DWORD) PURE;
-    STDMETHOD(SetHWnd)(THIS_ DWORD, HWND32 ) PURE;
+    STDMETHOD(SetHWnd)(THIS_ DWORD, HWND ) PURE;
 } *LPDIRECTDRAWCLIPPER_VTABLE,IDirectDrawClipper_VTable;
 
 struct IDirectDrawClipper {
@@ -903,26 +903,26 @@
     STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE;
     STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
     STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
-    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL32* ) PURE;
+    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL* ) PURE;
     STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
     STDMETHOD(RestoreDisplayMode)(THIS) PURE;
-    STDMETHOD(SetCooperativeLevel)(THIS_ HWND32, DWORD) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
     STDMETHOD(SetDisplayMode)(THIS_ DWORD , DWORD ,DWORD ) PURE;
-    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE32 ) PURE;
+    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
 } *LPDIRECTDRAW_VTABLE,IDirectDraw_VTable;
 
 struct _common_directdrawdata {
     DWORD			screen_depth;
     DWORD                       depth;          /* SetDisplayMode */
     DWORD			height,width;	/* SetDisplayMode */
-    HWND32                      mainWindow;     /* SetCooperativeLevel */
+    HWND                      mainWindow;     /* SetCooperativeLevel */
 
     /* This is for Wine's fake mainWindow.
        We need it also in DGA mode to make some games (for example Monkey Island III work) */
     ATOM		winclass;
-    HWND32		window;
+    HWND		window;
     Window		drawable;
-    PAINTSTRUCT32	ps;
+    PAINTSTRUCT	ps;
     int			paintable;
 };
 
@@ -989,12 +989,12 @@
 /*38*/	STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE;
 /*3C*/	STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
 /*40*/	STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
-/*44*/	STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL32* ) PURE;
+/*44*/	STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL* ) PURE;
 /*48*/	STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
 /*4C*/	STDMETHOD(RestoreDisplayMode)(THIS) PURE;
-/*50*/	STDMETHOD(SetCooperativeLevel)(THIS_ HWND32, DWORD) PURE;
+/*50*/	STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
 /*54*/	STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD, DWORD, DWORD, DWORD) PURE;
-/*58*/	STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE32 ) PURE;
+/*58*/	STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
     /*** Added in the v2 interface ***/
 /*5C*/	STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE;
 } IDirectDraw2_VTable,*LPDIRECTDRAW2_VTABLE;
@@ -1038,16 +1038,16 @@
 /*38*/	STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE;
 /*3C*/	STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
 /*40*/	STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
-/*44*/	STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL32* ) PURE;
+/*44*/	STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL* ) PURE;
 /*48*/	STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
 /*4C*/	STDMETHOD(RestoreDisplayMode)(THIS) PURE;
-/*50*/	STDMETHOD(SetCooperativeLevel)(THIS_ HWND32, DWORD) PURE;
+/*50*/	STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
 /*54*/	STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD, DWORD, DWORD, DWORD) PURE;
-/*58*/	STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE32 ) PURE;
+/*58*/	STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
     /*** Added in the v2 interface ***/
 /*5C*/	STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE;
     /*** Added in the V4 Interface ***/
-/*60*/   STDMETHOD(GetSurfaceFromDC) (THIS_ HDC32, LPDIRECTDRAWSURFACE *) PURE;
+/*60*/   STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE *) PURE;
 /*64*/   STDMETHOD(RestoreAllSurfaces)(THIS) PURE;
 /*68*/   STDMETHOD(TestCooperativeLevel)(THIS) PURE;
 /*6C*/   STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER, DWORD ) PURE;
@@ -1092,10 +1092,10 @@
     STDMETHOD_(ULONG,Release) (THIS) PURE;
     /*** IDirectDrawSurface methods ***/
     STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE;
-    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT32) PURE;
-    STDMETHOD(Blt)(THIS_ LPRECT32,LPDIRECTDRAWSURFACE, LPRECT32,DWORD, LPDDBLTFX) PURE;
+    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
+    STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX) PURE;
     STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
-    STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT32,DWORD) PURE;
+    STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD) PURE;
     STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE) PURE;
     STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
     STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
@@ -1105,7 +1105,7 @@
     STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
     STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;
     STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
-    STDMETHOD(GetDC)(THIS_ HDC32 FAR *) PURE;
+    STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;
     STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
     STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
     STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;
@@ -1113,15 +1113,15 @@
     STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
     STDMETHOD(IsLost)(THIS) PURE;
-    STDMETHOD(Lock)(THIS_ LPRECT32,LPDDSURFACEDESC,DWORD flags,HANDLE32) PURE;
-    STDMETHOD(ReleaseDC)(THIS_ HDC32) PURE;
+    STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD flags,HANDLE) PURE;
+    STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
     STDMETHOD(Restore)(THIS) PURE;
     STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
     STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
     STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
     STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
     STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
-    STDMETHOD(UpdateOverlay)(THIS_ LPRECT32, LPDIRECTDRAWSURFACE,LPRECT32,DWORD, LPDDOVERLAYFX) PURE;
+    STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
     STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
     STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE) PURE;
 } *LPDIRECTDRAWSURFACE_VTABLE,IDirectDrawSurface_VTable;
@@ -1145,10 +1145,10 @@
     STDMETHOD_(ULONG,Release) (THIS) PURE;
     /*** IDirectDrawSurface methods ***/
     STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE2) PURE;
-    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT32) PURE;
-    STDMETHOD(Blt)(THIS_ LPRECT32,LPDIRECTDRAWSURFACE2, LPRECT32,DWORD, LPDDBLTFX) PURE;
+    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
+    STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX) PURE;
     STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
-    STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT32,DWORD) PURE;
+    STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD) PURE;
     STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE2) PURE;
     STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
     STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
@@ -1158,7 +1158,7 @@
     STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
     STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;
     STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
-    STDMETHOD(GetDC)(THIS_ HDC32 FAR *) PURE;
+    STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;
     STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
     STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
     STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;
@@ -1166,15 +1166,15 @@
     STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
     STDMETHOD(IsLost)(THIS) PURE;
-    STDMETHOD(Lock)(THIS_ LPRECT32,LPDDSURFACEDESC,DWORD,HANDLE32) PURE;
-    STDMETHOD(ReleaseDC)(THIS_ HDC32) PURE;
+    STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;
+    STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
     STDMETHOD(Restore)(THIS) PURE;
     STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
     STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
     STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
     STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
     STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
-    STDMETHOD(UpdateOverlay)(THIS_ LPRECT32, LPDIRECTDRAWSURFACE2,LPRECT32,DWORD, LPDDOVERLAYFX) PURE;
+    STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
     STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
     STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE2) PURE;
     /*** Added in the v2 interface ***/
@@ -1202,10 +1202,10 @@
 /*08*/STDMETHOD_(ULONG,Release) (THIS) PURE;
     /*** IDirectDrawSurface methods ***/
 /*0c*/STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE3) PURE;
-/*10*/STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT32) PURE;
-/*14*/STDMETHOD(Blt)(THIS_ LPRECT32,LPDIRECTDRAWSURFACE3, LPRECT32,DWORD, LPDDBLTFX) PURE;
+/*10*/STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
+/*14*/STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX) PURE;
 /*18*/STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
-/*1c*/STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT32,DWORD) PURE;
+/*1c*/STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD) PURE;
 /*20*/STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE3) PURE;
 /*24*/STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;    
 /*28*/STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
@@ -1215,7 +1215,7 @@
 /*38*/STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
 /*3c*/STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;
 /*40*/STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
-/*44*/STDMETHOD(GetDC)(THIS_ HDC32 FAR *) PURE;
+/*44*/STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;
 /*48*/STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
 /*4c*/STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
 /*50*/STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;
@@ -1223,15 +1223,15 @@
 /*58*/STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
 /*5c*/STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
 /*60*/STDMETHOD(IsLost)(THIS) PURE;
-/*64*/STDMETHOD(Lock)(THIS_ LPRECT32,LPDDSURFACEDESC,DWORD,HANDLE32) PURE;
-/*68*/STDMETHOD(ReleaseDC)(THIS_ HDC32) PURE;
+/*64*/STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;
+/*68*/STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
 /*6c*/STDMETHOD(Restore)(THIS) PURE;
 /*70*/STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
 /*74*/STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
 /*78*/STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
 /*7c*/STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
 /*80*/STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
-/*84*/STDMETHOD(UpdateOverlay)(THIS_ LPRECT32, LPDIRECTDRAWSURFACE3,LPRECT32,DWORD, LPDDOVERLAYFX) PURE;
+/*84*/STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
 /*88*/STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
 /*8c*/STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE3) PURE;
     /*** Added in the v2 interface ***/
@@ -1262,10 +1262,10 @@
 /*08*/STDMETHOD_(ULONG,Release) (THIS) PURE;
     /*** IDirectDrawSurface methods ***/
 /*0c*/STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE4) PURE;
-/*10*/STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT32) PURE;
-/*14*/STDMETHOD(Blt)(THIS_ LPRECT32,LPDIRECTDRAWSURFACE4, LPRECT32,DWORD, LPDDBLTFX) PURE;
+/*10*/STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
+/*14*/STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX) PURE;
 /*18*/STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
-/*1c*/STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT32,DWORD) PURE;
+/*1c*/STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD) PURE;
 /*20*/STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE4) PURE;
 /*24*/STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;    
 /*28*/STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
@@ -1275,7 +1275,7 @@
 /*38*/STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
 /*3c*/STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;
 /*40*/STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
-/*44*/STDMETHOD(GetDC)(THIS_ HDC32 FAR *) PURE;
+/*44*/STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;
 /*48*/STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
 /*4c*/STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
 /*50*/STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;
@@ -1283,15 +1283,15 @@
 /*58*/STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
 /*5c*/STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
 /*60*/STDMETHOD(IsLost)(THIS) PURE;
-/*64*/STDMETHOD(Lock)(THIS_ LPRECT32,LPDDSURFACEDESC,DWORD,HANDLE32) PURE;
-/*68*/STDMETHOD(ReleaseDC)(THIS_ HDC32) PURE;
+/*64*/STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;
+/*68*/STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
 /*6c*/STDMETHOD(Restore)(THIS) PURE;
 /*70*/STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
 /*74*/STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
 /*78*/STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
 /*7c*/STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
 /*80*/STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
-/*84*/STDMETHOD(UpdateOverlay)(THIS_ LPRECT32, LPDIRECTDRAWSURFACE4,LPRECT32,DWORD, LPDDOVERLAYFX) PURE;
+/*84*/STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
 /*88*/STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
 /*8c*/STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE4) PURE;
     /*** Added in the v2 interface ***/
@@ -1344,8 +1344,8 @@
 #undef STDMETHOD_
 
 HRESULT WINAPI DirectDrawCreate(LPGUID,LPDIRECTDRAW*,LPUNKNOWN);
-HRESULT WINAPI DirectDrawEnumerate32A(LPDDENUMCALLBACK32A,LPVOID);
-HRESULT WINAPI DirectDrawEnumerate32W(LPDDENUMCALLBACK32W,LPVOID);
+HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA,LPVOID);
+HRESULT WINAPI DirectDrawEnumerateW(LPDDENUMCALLBACKW,LPVOID);
 HRESULT WINAPI DirectDrawCreateClipper(DWORD,LPDIRECTDRAWCLIPPER*,LPUNKNOWN);
 #define DirectDrawEnumerate WINELIB_NAME_AW(DirectDrawEnumerate)
 #endif
diff --git a/include/debugger.h b/include/debugger.h
index ec12229..602f25c 100644
--- a/include/debugger.h
+++ b/include/debugger.h
@@ -145,17 +145,17 @@
 extern unsigned int dbg_mode;
 
   /* debugger/break.c */
-extern void DEBUG_SetBreakpoints( BOOL32 set );
+extern void DEBUG_SetBreakpoints( BOOL set );
 extern int DEBUG_FindBreakpoint( const DBG_ADDR *addr );
 extern void DEBUG_AddBreakpoint( const DBG_ADDR *addr );
 extern void DEBUG_DelBreakpoint( int num );
-extern void DEBUG_EnableBreakpoint( int num, BOOL32 enable );
+extern void DEBUG_EnableBreakpoint( int num, BOOL enable );
 extern void DEBUG_InfoBreakpoints(void);
 extern void DEBUG_AddTaskEntryBreakpoint( HTASK16 hTask );
-extern BOOL32 DEBUG_HandleTrap(void);
-extern BOOL32 DEBUG_ShouldContinue( enum exec_mode mode, int * count );
+extern BOOL DEBUG_HandleTrap(void);
+extern BOOL DEBUG_ShouldContinue( enum exec_mode mode, int * count );
 extern enum exec_mode DEBUG_RestartExecution( enum exec_mode mode, int count );
-extern BOOL32 DEBUG_IsFctReturn(void);
+extern BOOL DEBUG_IsFctReturn(void);
 
   /* debugger/db_disasm.c */
 extern void DEBUG_Disasm( DBG_ADDR *addr, int display );
@@ -200,9 +200,9 @@
 extern struct name_hash * DEBUG_AddInvSymbol( const char *name, 
 					   const DBG_ADDR *addr,
 					   const char * sourcefile);
-extern BOOL32 DEBUG_GetSymbolValue( const char * name, const int lineno,
+extern BOOL DEBUG_GetSymbolValue( const char * name, const int lineno,
 				    DBG_ADDR *addr, int );
-extern BOOL32 DEBUG_SetSymbolValue( const char * name, const DBG_ADDR *addr );
+extern BOOL DEBUG_SetSymbolValue( const char * name, const DBG_ADDR *addr );
 extern const char * DEBUG_FindNearestSymbol( const DBG_ADDR *addr, int flag,
 					     struct name_hash ** rtn,
 					     unsigned int ebp,
@@ -224,12 +224,12 @@
 extern int DEBUG_SetSymbolBPOff(struct name_hash * sym, unsigned int len);
 extern int DEBUG_GetSymbolAddr(struct name_hash * sym, DBG_ADDR * addr);
 extern int DEBUG_cmp_sym(const void * p1, const void * p2);
-extern BOOL32 DEBUG_GetLineNumberAddr( struct name_hash *, const int lineno, 
+extern BOOL DEBUG_GetLineNumberAddr( struct name_hash *, const int lineno, 
 				DBG_ADDR *addr, int bp_flag );
 
 extern int DEBUG_SetLocalSymbolType(struct wine_locals * sym, 
 				    struct datatype * type);
-BOOL32 DEBUG_Normalize(struct name_hash * nh );
+BOOL DEBUG_Normalize(struct name_hash * nh );
 
   /* debugger/info.c */
 extern void DEBUG_PrintBasic( const DBG_ADDR *addr, int count, char format );
@@ -243,8 +243,8 @@
 						     int flag );
 
   /* debugger/memory.c */
-extern BOOL32 DEBUG_IsBadReadPtr( const DBG_ADDR *address, int size );
-extern BOOL32 DEBUG_IsBadWritePtr( const DBG_ADDR *address, int size );
+extern BOOL DEBUG_IsBadReadPtr( const DBG_ADDR *address, int size );
+extern BOOL DEBUG_IsBadWritePtr( const DBG_ADDR *address, int size );
 extern int DEBUG_ReadMemory( const DBG_ADDR *address );
 extern void DEBUG_WriteMemory( const DBG_ADDR *address, int value );
 extern void DEBUG_ExamineMemory( const DBG_ADDR *addr, int count, char format);
@@ -253,7 +253,7 @@
 extern void DEBUG_SetRegister( enum debug_regs reg, int val );
 extern int DEBUG_GetRegister( enum debug_regs reg );
 extern void DEBUG_InfoRegisters(void);
-extern BOOL32 DEBUG_ValidateRegisters(void);
+extern BOOL DEBUG_ValidateRegisters(void);
 extern void DEBUG_SetSigContext( const SIGCONTEXT *sigcontext );
 extern void DEBUG_GetSigContext( SIGCONTEXT *sigcontext );
 extern int DEBUG_PrintRegister(enum debug_regs reg);
@@ -273,7 +273,7 @@
 extern int DEBUG_ParseStabs(char * addr, unsigned int load_offset, unsigned int staboff, int stablen, unsigned int strtaboff, int strtablen);
 
   /* debugger/msc.c */
-extern int DEBUG_RegisterDebugInfo( HMODULE32, const char *);
+extern int DEBUG_RegisterDebugInfo( HMODULE, const char *);
 extern int DEBUG_ProcessDeferredDebug(void);
 extern int DEBUG_RegisterELFDebugInfo(int load_addr, u_long size, char * name);
 extern void DEBUG_InfoShare(void);
@@ -321,12 +321,12 @@
 extern void wine_debug( int signal, SIGCONTEXT *regs );
 
   /* miscemu/instr.c */
-extern BOOL32 INSTR_EmulateInstruction( SIGCONTEXT* );
+extern BOOL INSTR_EmulateInstruction( SIGCONTEXT* );
 
   /* loader/signal.c */
 extern void (*fnWINE_Debugger)(int,SIGCONTEXT*);
 extern void (*ctx_debug_call)( int, CONTEXT* );
-extern BOOL32 (*fnINSTR_EmulateInstruction)( SIGCONTEXT* );
+extern BOOL (*fnINSTR_EmulateInstruction)( SIGCONTEXT* );
 
 
 #endif  /* __WINE_DEBUGGER_H */
diff --git a/include/desktop.h b/include/desktop.h
index fa49ffa..09acd3d 100644
--- a/include/desktop.h
+++ b/include/desktop.h
@@ -15,10 +15,10 @@
 
 typedef struct tagDESKTOP
 {
-  HBRUSH32                hbrushPattern;
-  HBITMAP32               hbitmapWallPaper;
-  SIZE32                  bitmapSize;
-  BOOL32                  fTileWallPaper;
+  HBRUSH                hbrushPattern;
+  HBITMAP               hbitmapWallPaper;
+  SIZE                  bitmapSize;
+  BOOL                  fTileWallPaper;
   struct tagMONITOR      *pPrimaryMonitor;
   struct _DESKTOP_DRIVER *pDriver;         /* Desktop driver */
   void                   *pDriverData;     /* Desktop driver data */
@@ -33,8 +33,8 @@
 extern int DESKTOP_GetScreenHeight(void);
 extern int DESKTOP_GetScreenDepth(void);
 
-extern BOOL32 DESKTOP_SetPattern( LPCSTR pattern );
-extern LRESULT WINAPI DesktopWndProc( HWND32 hwnd, UINT32 message,
-                                      WPARAM32 wParam, LPARAM lParam );
+extern BOOL DESKTOP_SetPattern( LPCSTR pattern );
+extern LRESULT WINAPI DesktopWndProc( HWND hwnd, UINT message,
+                                      WPARAM wParam, LPARAM lParam );
 
 #endif  /* __WINE_DESKTOP_H */
diff --git a/include/device.h b/include/device.h
index 456ef22..6a5216c 100644
--- a/include/device.h
+++ b/include/device.h
@@ -1,5 +1,5 @@
 #ifndef __WINE_DEVICE_H
 #define __WINE_DEVICE_H
-extern HANDLE32 DEVICE_Open( LPCSTR filename, DWORD access,
+extern HANDLE DEVICE_Open( LPCSTR filename, DWORD access,
                              LPSECURITY_ATTRIBUTES sa );
 #endif
diff --git a/include/dialog.h b/include/dialog.h
index fae9c9b..dbd90fe 100644
--- a/include/dialog.h
+++ b/include/dialog.h
@@ -18,7 +18,7 @@
 
 typedef struct
 {
-    INT32       msgResult;   /* +00 Last message result */
+    INT       msgResult;   /* +00 Last message result */
     HWINDOWPROC dlgProc;     /* +04 Dialog procedure */
     LONG        userInfo;    /* +08 User information (for DWL_USER) */
 
@@ -29,7 +29,7 @@
     HMENU16     hMenu;       /* Dialog menu */
     UINT16      xBaseUnit;   /* Dialog units (depends on the font) */
     UINT16      yBaseUnit;
-    INT32	idResult;    /* EndDialog() result / default pushbutton ID */
+    INT	idResult;    /* EndDialog() result / default pushbutton ID */
     UINT16      flags;       /* EndDialog() called for this dialog */
     HGLOBAL16   hDialogHeap;
 } DIALOGINFO;
@@ -38,11 +38,11 @@
 
 #define DF_END  0x0001
 
-extern BOOL32 DIALOG_Init(void);
-extern HWND32 DIALOG_CreateIndirect( HINSTANCE32 hInst, LPCSTR dlgTemplate,
-                                     BOOL32 win32Template, HWND32 owner,
+extern BOOL DIALOG_Init(void);
+extern HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCSTR dlgTemplate,
+                                     BOOL win32Template, HWND owner,
                                      DLGPROC16 dlgProc, LPARAM param,
                                      WINDOWPROCTYPE procType );
-extern INT32 DIALOG_DoDialogBox( HWND32 hwnd, HWND32 owner );
+extern INT DIALOG_DoDialogBox( HWND hwnd, HWND owner );
 
 #endif  /* __WINE_DIALOG_H */
diff --git a/include/dinput.h b/include/dinput.h
index 0da1989..ebfb470 100644
--- a/include/dinput.h
+++ b/include/dinput.h
@@ -59,8 +59,8 @@
 typedef struct IDirectInputDeviceA IDirectInputDeviceA,*LPDIRECTINPUTDEVICEA;
 typedef struct IDirectInputDevice2A IDirectInputDevice2A,*LPDIRECTINPUTDEVICE2A;
 typedef struct IDirectInputEffect IDirectInputEffect,*LPDIRECTINPUTEFFECT;
-typedef struct SysKeyboard32A SysKeyboard32A,*LPSYSKEYBOARD32A;
-typedef struct SysMouse32A SysMouse32A,*LPSYSMOUSE32A;
+typedef struct SysKeyboardA SysKeyboardA,*LPSYSKEYBOARDA;
+typedef struct SysMouseA SysMouseA,*LPSYSMOUSEA;
 
 #define DI_OK                           S_OK
 #define DI_NOTATTACHED                  S_FALSE
@@ -173,7 +173,7 @@
     WORD	wExponent;
     WORD	wReserved;
 #endif /* DIRECTINPUT_VERSION >= 0x0500 */
-} DIDEVICEOBJECTINSTANCE32A, *LPDIDEVICEOBJECTINSTANCE32A,*LPCDIDEVICEOBJECTINSTANCE32A;
+} DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA,*LPCDIDEVICEOBJECTINSTANCEA;
 
 typedef struct {
     DWORD	dwSize;
@@ -193,7 +193,7 @@
     WORD	wExponent;
     WORD	wReserved;
 #endif /* DIRECTINPUT_VERSION >= 0x0500 */
-} DIDEVICEOBJECTINSTANCE32W, *LPDIDEVICEOBJECTINSTANCE32W,*LPCDIDEVICEOBJECTINSTANCE32W;
+} DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW,*LPCDIDEVICEOBJECTINSTANCEW;
 DECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE)
 DECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE)
 
@@ -210,7 +210,7 @@
     WORD	wUsagePage;
     WORD	wUsage;
 #endif /* DIRECTINPUT_VERSION >= 0x0500 */
-} DIDEVICEINSTANCE32A, *LPDIDEVICEINSTANCE32A, *LPCDIDEVICEINSTANCE32A;
+} DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA, *LPCDIDEVICEINSTANCEA;
 
 typedef struct {
     DWORD	dwSize;
@@ -224,20 +224,20 @@
     WORD	wUsagePage;
     WORD	wUsage;
 #endif /* DIRECTINPUT_VERSION >= 0x0500 */
-} DIDEVICEINSTANCE32W, *LPDIDEVICEINSTANCE32W, *LPCDIDEVICEINSTANCE32W;
+} DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW, *LPCDIDEVICEINSTANCEW;
 DECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE)
 DECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE)
 DECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE)
 
-typedef BOOL32 (CALLBACK * LPDIENUMDEVICESCALLBACK32A)(LPCDIDEVICEINSTANCE32A,LPVOID);
-typedef BOOL32 (CALLBACK * LPDIENUMDEVICESCALLBACK32W)(LPCDIDEVICEINSTANCE32W,LPVOID);
+typedef BOOL (CALLBACK * LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA,LPVOID);
+typedef BOOL (CALLBACK * LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW,LPVOID);
 DECL_WINELIB_TYPE_AW(LPDIENUMDEVICESCALLBACK)
 
-typedef BOOL32 (CALLBACK * LPDIENUMDEVICEOBJECTSCALLBACK32A)(LPCDIDEVICEOBJECTINSTANCE32A, LPVOID);
-typedef BOOL32 (CALLBACK * LPDIENUMDEVICEOBJECTSCALLBACK32W)(LPCDIDEVICEOBJECTINSTANCE32W,LPVOID);
+typedef BOOL (CALLBACK * LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA, LPVOID);
+typedef BOOL (CALLBACK * LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW,LPVOID);
 DECL_WINELIB_TYPE_AW(LPDIENUMDEVICEOBJECTSCALLBACK)
 
-typedef BOOL32 (CALLBACK * LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID);
+typedef BOOL (CALLBACK * LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID);
 
 #define DIK_ESCAPE          0x01
 #define DIK_1               0x02
@@ -632,8 +632,8 @@
 typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW;
 typedef const DIEFFECTINFO  *LPCDIEFFECTINFO;
 
-typedef BOOL32 (CALLBACK * LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID);
-typedef BOOL32 (CALLBACK * LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID);
+typedef BOOL (CALLBACK * LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID);
+typedef BOOL (CALLBACK * LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID);
 
 typedef struct DIEFFESCAPE {
 	DWORD			dwSize;
@@ -649,7 +649,7 @@
  */
 #define ICOM_INTERFACE IDirectInputEffect
 #define IDirectInputEffect_METHODS \
-    ICOM_METHOD3(HRESULT,Initialize,      HINSTANCE32,, DWORD,, REFGUID,) \
+    ICOM_METHOD3(HRESULT,Initialize,      HINSTANCE,, DWORD,, REFGUID,) \
     ICOM_METHOD1(HRESULT,GetEffectGuid,   LPGUID,) \
     ICOM_METHOD2(HRESULT,GetParameters,   LPDIEFFECT,, DWORD,) \
     ICOM_METHOD2(HRESULT,SetParameters,   LPCDIEFFECT,, DWORD,) \
@@ -690,7 +690,7 @@
 #define ICOM_INTERFACE IDirectInputDeviceA
 #define IDirectInputDeviceA_METHODS \
     ICOM_METHOD1(HRESULT,GetCapabilities, LPDIDEVCAPS,lpDIDevCaps) \
-    ICOM_METHOD3(HRESULT,EnumObjects, LPDIENUMDEVICEOBJECTSCALLBACK32A,lpCallback, LPVOID,pvRef, DWORD,dwFlags) \
+    ICOM_METHOD3(HRESULT,EnumObjects, LPDIENUMDEVICEOBJECTSCALLBACKA,lpCallback, LPVOID,pvRef, DWORD,dwFlags) \
     ICOM_METHOD2(HRESULT,GetProperty, REFGUID,rguidProp, LPDIPROPHEADER,pdiph) \
     ICOM_METHOD2(HRESULT,SetProperty, REFGUID,rguidProp, LPCDIPROPHEADER,pdiph) \
     ICOM_METHOD (HRESULT,Acquire) \
@@ -698,12 +698,12 @@
     ICOM_METHOD2(HRESULT,GetDeviceState, DWORD,cbData, LPVOID,lpvData) \
     ICOM_METHOD4(HRESULT,GetDeviceData, DWORD,cbObjectData, LPDIDEVICEOBJECTDATA,rgdod, LPDWORD,pdwInOut, DWORD,dwFlags) \
     ICOM_METHOD1(HRESULT,SetDataFormat, LPCDIDATAFORMAT,lpdf) \
-    ICOM_METHOD1(HRESULT,SetEventNotification, HANDLE32,hEvent) \
-    ICOM_METHOD2(HRESULT,SetCooperativeLevel, HWND32,hwnd, DWORD,dwFlags) \
-    ICOM_METHOD3(HRESULT,GetObjectInfo, LPDIDEVICEOBJECTINSTANCE32A,pdidoi, DWORD,dwObj, DWORD,dwHow) \
-    ICOM_METHOD1(HRESULT,GetDeviceInfo, LPDIDEVICEINSTANCE32A,pdidi) \
-    ICOM_METHOD2(HRESULT,RunControlPanel, HWND32,hwndOwner, DWORD,dwFlags) \
-    ICOM_METHOD3(HRESULT,Initialize, HINSTANCE32,hinst, DWORD,dwVersion, REFGUID,rguid)
+    ICOM_METHOD1(HRESULT,SetEventNotification, HANDLE,hEvent) \
+    ICOM_METHOD2(HRESULT,SetCooperativeLevel, HWND,hwnd, DWORD,dwFlags) \
+    ICOM_METHOD3(HRESULT,GetObjectInfo, LPDIDEVICEOBJECTINSTANCEA,pdidoi, DWORD,dwObj, DWORD,dwHow) \
+    ICOM_METHOD1(HRESULT,GetDeviceInfo, LPDIDEVICEINSTANCEA,pdidi) \
+    ICOM_METHOD2(HRESULT,RunControlPanel, HWND,hwndOwner, DWORD,dwFlags) \
+    ICOM_METHOD3(HRESULT,Initialize, HINSTANCE,hinst, DWORD,dwVersion, REFGUID,rguid)
 #define IDirectInputDeviceA_IMETHODS \
     IUnknown_IMETHODS \
     IDirectInputDeviceA_METHODS
@@ -810,10 +810,10 @@
 #define ICOM_INTERFACE IDirectInputA
 #define IDirectInputA_METHODS \
     ICOM_METHOD3(HRESULT,CreateDevice,    REFGUID,rguid, LPDIRECTINPUTDEVICEA*,lplpDirectInputDevice, LPUNKNOWN,pUnkOuter) \
-    ICOM_METHOD4(HRESULT,EnumDevices,     DWORD,dwDevType, LPDIENUMDEVICESCALLBACK32A,lpCallback, LPVOID,pvRef, DWORD,dwFlags) \
+    ICOM_METHOD4(HRESULT,EnumDevices,     DWORD,dwDevType, LPDIENUMDEVICESCALLBACKA,lpCallback, LPVOID,pvRef, DWORD,dwFlags) \
     ICOM_METHOD1(HRESULT,GetDeviceStatus, REFGUID,rguidInstance) \
-    ICOM_METHOD2(HRESULT,RunControlPanel, HWND32,hwndOwner, DWORD,dwFlags) \
-    ICOM_METHOD2(HRESULT,Initialize,      HINSTANCE32,hinst, DWORD,dwVersion)
+    ICOM_METHOD2(HRESULT,RunControlPanel, HWND,hwndOwner, DWORD,dwFlags) \
+    ICOM_METHOD2(HRESULT,Initialize,      HINSTANCE,hinst, DWORD,dwVersion)
 #define IDirectInputA_IMETHODS \
     IUnknown_IMETHODS \
     IDirectInputA_METHODS
diff --git a/include/dosexe.h b/include/dosexe.h
index 1d2aef1..2898aac 100644
--- a/include/dosexe.h
+++ b/include/dosexe.h
@@ -43,8 +43,8 @@
 
 extern void MZ_Tick( WORD handle );
 
-extern HINSTANCE16 MZ_CreateProcess( LPCSTR name, LPCSTR cmdline, LPCSTR env, BOOL32 inherit,
-                                     LPSTARTUPINFO32A startup, LPPROCESS_INFORMATION info );
+extern HINSTANCE16 MZ_CreateProcess( LPCSTR name, LPCSTR cmdline, LPCSTR env, BOOL inherit,
+                                     LPSTARTUPINFOA startup, LPPROCESS_INFORMATION info );
 extern int DOSVM_Enter( PCONTEXT context );
 extern void DOSVM_SetTimer( unsigned ticks );
 extern unsigned DOSVM_GetTimer( void );
diff --git a/include/dplay.h b/include/dplay.h
index d6d5506..2b4887d 100644
--- a/include/dplay.h
+++ b/include/dplay.h
@@ -334,14 +334,14 @@
 
 
 
-typedef BOOL32 (CALLBACK* LPDPENUMDPCALLBACKW)(
+typedef BOOL (CALLBACK* LPDPENUMDPCALLBACKW)(
     LPGUID      lpguidSP,
     LPWSTR      lpSPName,
     DWORD       dwMajorVersion,
     DWORD       dwMinorVersion,
     LPVOID      lpContext);
 
-typedef BOOL32 (CALLBACK* LPDPENUMDPCALLBACKA)(
+typedef BOOL (CALLBACK* LPDPENUMDPCALLBACKA)(
     LPGUID      lpguidSP,
     LPSTR       lpSPName,       /* ptr to str w/ driver description */
     DWORD       dwMajorVersion, /* Major # of driver spec in lpguidSP */
@@ -351,7 +351,7 @@
 typedef const GUID   *LPCGUID;
 typedef const DPNAME *LPCDPNAME;
 
-typedef BOOL32 (CALLBACK* LPDPENUMCONNECTIONSCALLBACK)(
+typedef BOOL (CALLBACK* LPDPENUMCONNECTIONSCALLBACK)(
     LPCGUID     lpguidSP,
     LPVOID      lpConnection,
     DWORD       dwConnectionSize,
@@ -359,7 +359,7 @@
     DWORD       dwFlags,
     LPVOID      lpContext);
 
-typedef BOOL32 (CALLBACK* LPDPENUMSESSIONSCALLBACK)(
+typedef BOOL (CALLBACK* LPDPENUMSESSIONSCALLBACK)(
     LPDPSESSIONDESC lpDPSessionDesc,
     LPVOID      lpContext,
     LPDWORD     lpdwTimeOut,
@@ -384,30 +384,30 @@
 
 
 
-typedef BOOL32 (CALLBACK* LPDPENUMADDRESSCALLBACK)(
+typedef BOOL (CALLBACK* LPDPENUMADDRESSCALLBACK)(
     REFGUID         guidDataType,
     DWORD           dwDataSize,
     LPCVOID         lpData,
     LPVOID          lpContext );
 
-typedef BOOL32 (CALLBACK* LPDPLENUMADDRESSTYPESCALLBACK)(
+typedef BOOL (CALLBACK* LPDPLENUMADDRESSTYPESCALLBACK)(
     REFGUID         guidDataType,
     LPVOID          lpContext,
     DWORD           dwFlags );
 
-typedef BOOL32 (CALLBACK* LPDPLENUMLOCALAPPLICATIONSCALLBACK)(
+typedef BOOL (CALLBACK* LPDPLENUMLOCALAPPLICATIONSCALLBACK)(
     LPCDPLAPPINFO   lpAppInfo,
     LPVOID          lpContext,
     DWORD           dwFlags );
 
-typedef BOOL32 (CALLBACK* LPDPENUMPLAYERSCALLBACK2)(
+typedef BOOL (CALLBACK* LPDPENUMPLAYERSCALLBACK2)(
     DPID            dpId,
     DWORD           dwPlayerType,
     LPCDPNAME       lpName,
     DWORD           dwFlags,
     LPVOID          lpContext );
 
-typedef BOOL32 (CALLBACK* LPDPENUMSESSIONSCALLBACK2)(
+typedef BOOL (CALLBACK* LPDPENUMSESSIONSCALLBACK2)(
     LPCDPSESSIONDESC2   lpThisSD,
     LPDWORD             lpdwTimeOut,
     DWORD               dwFlags,
@@ -433,7 +433,7 @@
     STDMETHOD(AddPlayerToGroup)     (THIS_ DPID, DPID) PURE;
     STDMETHOD(Close)                (THIS) PURE;
     STDMETHOD(CreateGroup)          (THIS_ LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE;
-    STDMETHOD(CreatePlayer)         (THIS_ LPDPID,LPDPNAME,HANDLE32,LPVOID,DWORD,DWORD) PURE;
+    STDMETHOD(CreatePlayer)         (THIS_ LPDPID,LPDPNAME,HANDLE,LPVOID,DWORD,DWORD) PURE;
     STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE;
     STDMETHOD(DestroyGroup)         (THIS_ DPID) PURE;
     STDMETHOD(DestroyPlayer)        (THIS_ DPID) PURE;
@@ -474,7 +474,7 @@
     STDMETHOD(AddPlayerToGroup)     (THIS_ DPID, DPID) PURE;
     STDMETHOD(Close)                (THIS) PURE;
     STDMETHOD(CreateGroup)          (THIS_ LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE;
-    STDMETHOD(CreatePlayer)         (THIS_ LPDPID,LPDPNAME,HANDLE32,LPVOID,DWORD,DWORD) PURE;
+    STDMETHOD(CreatePlayer)         (THIS_ LPDPID,LPDPNAME,HANDLE,LPVOID,DWORD,DWORD) PURE;
     STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE;
     STDMETHOD(DestroyGroup)         (THIS_ DPID) PURE;
     STDMETHOD(DestroyPlayer)        (THIS_ DPID) PURE;
@@ -667,10 +667,10 @@
     STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;       
     STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;                                  
     STDMETHOD(ReceiveLobbyMessage)  (THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;                  
-    STDMETHOD(RunApplication)       (THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE32) PURE;               
+    STDMETHOD(RunApplication)       (THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE;               
     STDMETHOD(SendLobbyMessage)     (THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;                             
     STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;                           
-    STDMETHOD(SetLobbyMessageEvent) (THIS_ DWORD, DWORD, HANDLE32) PURE;
+    STDMETHOD(SetLobbyMessageEvent) (THIS_ DWORD, DWORD, HANDLE) PURE;
 
 
 } DIRECTPLAYLOBBY_VTABLE, *LPDIRECTPLAYLOBBY_VTABLE;
@@ -692,10 +692,10 @@
     STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;       
     STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;                                  
     STDMETHOD(ReceiveLobbyMessage)  (THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;                  
-    STDMETHOD(RunApplication)       (THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE32) PURE;               
+    STDMETHOD(RunApplication)       (THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE;               
     STDMETHOD(SendLobbyMessage)     (THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;                             
     STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;                           
-    STDMETHOD(SetLobbyMessageEvent) (THIS_ DWORD, DWORD, HANDLE32) PURE;
+    STDMETHOD(SetLobbyMessageEvent) (THIS_ DWORD, DWORD, HANDLE) PURE;
 
     /*  IDirectPlayLobby2 Methods */
     STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT, DWORD, LPVOID, LPDWORD) PURE;
diff --git a/include/drive.h b/include/drive.h
index f4aea64..f392c7d 100644
--- a/include/drive.h
+++ b/include/drive.h
@@ -39,13 +39,13 @@
 extern DWORD DRIVE_GetSerialNumber( int drive );
 extern int DRIVE_SetSerialNumber( int drive, DWORD serial );
 extern DRIVETYPE DRIVE_GetType( int drive );
-extern UINT32 DRIVE_GetFlags( int drive );
+extern UINT DRIVE_GetFlags( int drive );
 extern int DRIVE_Chdir( int drive, const char *path );
 extern int DRIVE_Disable( int drive  );
 extern int DRIVE_Enable( int drive  );
 extern int DRIVE_SetLogicalMapping ( int existing_drive, int new_drive );
 extern int DRIVE_OpenDevice( int drive, int flags );
-extern int DRIVE_RawRead(BYTE drive, DWORD begin, DWORD length, BYTE *dataptr, BOOL32 fake_success );
-extern int DRIVE_RawWrite(BYTE drive, DWORD begin, DWORD length, BYTE *dataptr, BOOL32 fake_success );
+extern int DRIVE_RawRead(BYTE drive, DWORD begin, DWORD length, BYTE *dataptr, BOOL fake_success );
+extern int DRIVE_RawWrite(BYTE drive, DWORD begin, DWORD length, BYTE *dataptr, BOOL fake_success );
 
 #endif  /* __WINE_DRIVE_H */
diff --git a/include/driver.h b/include/driver.h
index 362a8d3..eee0979 100644
--- a/include/driver.h
+++ b/include/driver.h
@@ -47,10 +47,8 @@
     DWORD   			dwDCISize;
     LPCWSTR  			lpszDCISectionName;
     LPCWSTR  			lpszDCIAliasName;
-} DRVCONFIGINFO32, *LPDRVCONFIGINFO32;
+} DRVCONFIGINFO, *LPDRVCONFIGINFO;
 
-DECL_WINELIB_TYPE(DRVCONFIGINFO)
-DECL_WINELIB_TYPE(LPDRVCONFIGINFO)
 
 /* GetDriverInfo16 references this structure, so this a struct defined
  * in the Win16 API.
@@ -66,31 +64,27 @@
 
 LRESULT WINAPI DefDriverProc16(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg, 
                                LPARAM dwParam1, LPARAM dwParam2);
-LRESULT WINAPI DefDriverProc32(DWORD dwDriverIdentifier, HDRVR32 hdrvr,
-                               UINT32 Msg, LPARAM lParam1, LPARAM lParam2);
-#define DefDriverProc WINELIB_NAME(DefDriverProc)
+LRESULT WINAPI DefDriverProc(DWORD dwDriverIdentifier, HDRVR hdrvr,
+                               UINT Msg, LPARAM lParam1, LPARAM lParam2);
 HDRVR16 WINAPI OpenDriver16(LPCSTR szDriverName, LPCSTR szSectionName,
                             LPARAM lParam2);
-HDRVR32 WINAPI OpenDriver32A(LPCSTR szDriverName, LPCSTR szSectionName,
+HDRVR WINAPI OpenDriverA(LPCSTR szDriverName, LPCSTR szSectionName,
                              LPARAM lParam2);
-HDRVR32 WINAPI OpenDriver32W(LPCWSTR szDriverName, LPCWSTR szSectionName,
+HDRVR WINAPI OpenDriverW(LPCWSTR szDriverName, LPCWSTR szSectionName,
                              LPARAM lParam2);
 #define OpenDriver WINELIB_NAME_AW(OpenDriver)
 LRESULT WINAPI CloseDriver16(HDRVR16 hDriver, LPARAM lParam1, LPARAM lParam2);
-LRESULT WINAPI CloseDriver32(HDRVR32 hDriver, LPARAM lParam1, LPARAM lParam2);
-#define CloseDriver WINELIB_NAME(CloseDriver)
+LRESULT WINAPI CloseDriver(HDRVR hDriver, LPARAM lParam1, LPARAM lParam2);
 LRESULT WINAPI SendDriverMessage16( HDRVR16 hDriver, UINT16 message,
                                     LPARAM lParam1, LPARAM lParam2 );
-LRESULT WINAPI SendDriverMessage32( HDRVR32 hDriver, UINT32 message,
+LRESULT WINAPI SendDriverMessage( HDRVR hDriver, UINT message,
                                     LPARAM lParam1, LPARAM lParam2 );
-#define SendDriverMessage WINELIB_NAME(SendDriverMessage)
 HMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16 hDriver);
-HMODULE32 WINAPI GetDriverModuleHandle32(HDRVR32 hDriver);
-#define GetDriverModuleHandle WINELIB_NAME(GetDriverModuleHandle)
+HMODULE WINAPI GetDriverModuleHandle(HDRVR hDriver);
 
 /* only win31 version for those below ? */
-HDRVR16 WINAPI GetNextDriver(HDRVR16, DWORD);
-BOOL16 WINAPI GetDriverInfo(HDRVR16, DRIVERINFOSTRUCT16 *);
+HDRVR16 WINAPI GetNextDriver16(HDRVR16, DWORD);
+BOOL16 WINAPI GetDriverInfo16(HDRVR16, DRIVERINFOSTRUCT16 *);
 
 /* The following definitions are WINE internals */
 /* FIXME: This is a WINE internal struct and should be moved in include/wine directory */
@@ -109,8 +103,8 @@
 	  DRIVERPROC16          lpDrvProc;
        } d16;
        struct {
-	  HMODULE32		hModule;
-	  DRIVERPROC32		lpDrvProc;
+	  HMODULE		hModule;
+	  DRIVERPROC		lpDrvProc;
        } d32;
     } d;
     DWORD		  	dwDriverID;
@@ -125,18 +119,18 @@
 #define WINE_DI_TYPE_32		0x00000002ul
 
 LPWINE_DRIVER	DRIVER_RegisterDriver16(LPCSTR, HMODULE16, DRIVERPROC16, LPARAM);
-LPWINE_DRIVER	DRIVER_RegisterDriver32(LPCSTR, HMODULE32, DRIVERPROC32, LPARAM);
+LPWINE_DRIVER	DRIVER_RegisterDriver32(LPCSTR, HMODULE, DRIVERPROC, LPARAM);
 
 #if 0
 #errro "it's never used"
 /* internal */
 typedef struct
 {
-    UINT32			length;
-    HDRVR32			hDriver;
-    HMODULE32			hModule;
+    UINT			length;
+    HDRVR			hDriver;
+    HMODULE			hModule;
     CHAR			szAliasName[128];
-} DRIVERINFOSTRUCT32A, *LPDRIVERINFOSTRUCT32A;
+} DRIVERINFOSTRUCTA, *LPDRIVERINFOSTRUCTA;
 #endif
 
 #endif  /* __WINE_DRIVER_H */
diff --git a/include/dsound.h b/include/dsound.h
index 3d874cf..3332c4d 100644
--- a/include/dsound.h
+++ b/include/dsound.h
@@ -149,7 +149,7 @@
 typedef struct _DSBPOSITIONNOTIFY
 {
 	DWORD		dwOffset;
-	HANDLE32	hEventNotify;
+	HANDLE	hEventNotify;
 } DSBPOSITIONNOTIFY,*LPDSBPOSITIONNOTIFY;
 
 typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY;
@@ -168,8 +168,8 @@
 
 typedef LPVOID* LPLPVOID;
 
-typedef BOOL32 (CALLBACK *LPDSENUMCALLBACK32W)(LPGUID,LPWSTR,LPWSTR,LPVOID);
-typedef BOOL32 (CALLBACK *LPDSENUMCALLBACK32A)(LPGUID,LPSTR,LPSTR,LPVOID);
+typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID,LPWSTR,LPWSTR,LPVOID);
+typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID,LPSTR,LPSTR,LPVOID);
 
 extern HRESULT WINAPI DirectSoundCreate(REFGUID lpGUID,LPDIRECTSOUND * ppDS,IUnknown *pUnkOuter );
 
@@ -191,7 +191,7 @@
     STDMETHOD( CreateSoundBuffer)(THIS_ LPDSBUFFERDESC, LPLPDIRECTSOUNDBUFFER, IUnknown FAR *) PURE;
     STDMETHOD( GetCaps)(THIS_ LPDSCAPS ) PURE;
     STDMETHOD( DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER, LPLPDIRECTSOUNDBUFFER ) PURE;
-    STDMETHOD( SetCooperativeLevel)(THIS_ HWND32, DWORD ) PURE;
+    STDMETHOD( SetCooperativeLevel)(THIS_ HWND, DWORD ) PURE;
     STDMETHOD( Compact)(THIS ) PURE;
     STDMETHOD( GetSpeakerConfig)(THIS_ LPDWORD ) PURE;
     STDMETHOD( SetSpeakerConfig)(THIS_ DWORD ) PURE;
@@ -220,7 +220,7 @@
     /*** IDirectSoundBuffer methods ***/
 
     STDMETHOD(           GetCaps)(THIS_ LPDSBCAPS ) PURE;
-    STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD,LPDWORD ) PURE;
+    STDMETHOD(GetCurrentPosition16)(THIS_ LPDWORD,LPDWORD ) PURE;
     STDMETHOD(         GetFormat)(THIS_ LPWAVEFORMATEX, DWORD, LPDWORD ) PURE;
     STDMETHOD(         GetVolume)(THIS_ LPLONG ) PURE;
     STDMETHOD(            GetPan)(THIS_ LPLONG ) PURE;
diff --git a/include/file.h b/include/file.h
index a38ae07..652b9bf 100644
--- a/include/file.h
+++ b/include/file.h
@@ -32,46 +32,46 @@
 
 /* files/file.c */
 extern void FILE_SetDosError(void);
-extern HFILE32 FILE_DupUnixHandle( int fd, DWORD access );
-extern BOOL32 FILE_Stat( LPCSTR unixName, BY_HANDLE_FILE_INFORMATION *info );
+extern HFILE FILE_DupUnixHandle( int fd, DWORD access );
+extern BOOL FILE_Stat( LPCSTR unixName, BY_HANDLE_FILE_INFORMATION *info );
 extern HFILE16 FILE_Dup2( HFILE16 hFile1, HFILE16 hFile2 );
-extern HFILE32 FILE_CreateFile( LPCSTR filename, DWORD access, DWORD sharing,
+extern HFILE FILE_CreateFile( LPCSTR filename, DWORD access, DWORD sharing,
                                 LPSECURITY_ATTRIBUTES sa, DWORD creation,
-                                DWORD attributes, HANDLE32 template );
-extern HFILE32 FILE_CreateDevice( int client_id, DWORD access,
+                                DWORD attributes, HANDLE template );
+extern HFILE FILE_CreateDevice( int client_id, DWORD access,
                                   LPSECURITY_ATTRIBUTES sa );
 extern LPVOID FILE_dommap( int unix_handle, LPVOID start,
                            DWORD size_high, DWORD size_low,
                            DWORD offset_high, DWORD offset_low,
                            int prot, int flags );
 extern int FILE_munmap( LPVOID start, DWORD size_high, DWORD size_low );
-extern HFILE16 FILE_AllocDosHandle( HANDLE32 handle );
-extern BOOL32 FILE_InitProcessDosHandles( void );
-extern HANDLE32 FILE_GetHandle32( HFILE16 hfile );
-extern HFILE16 _lcreat16_uniq( LPCSTR path, INT32 attr );
+extern HFILE16 FILE_AllocDosHandle( HANDLE handle );
+extern BOOL FILE_InitProcessDosHandles( void );
+extern HANDLE FILE_GetHandle( HFILE16 hfile );
+extern HFILE16 _lcreat16_uniq( LPCSTR path, INT attr );
 
 /* files/directory.c */
 extern int DIR_Init(void);
-extern UINT32 DIR_GetWindowsUnixDir( LPSTR path, UINT32 count );
-extern UINT32 DIR_GetSystemUnixDir( LPSTR path, UINT32 count );
+extern UINT DIR_GetWindowsUnixDir( LPSTR path, UINT count );
+extern UINT DIR_GetSystemUnixDir( LPSTR path, UINT count );
 extern DWORD DIR_SearchPath( LPCSTR path, LPCSTR name, LPCSTR ext,
-                             DOS_FULL_NAME *full_name, BOOL32 win32 );
+                             DOS_FULL_NAME *full_name, BOOL win32 );
 
 /* files/dos_fs.c */
 extern void DOSFS_UnixTimeToFileTime( time_t unixtime, LPFILETIME ft,
                                       DWORD remainder );
 extern time_t DOSFS_FileTimeToUnixTime( const FILETIME *ft, DWORD *remainder );
-extern BOOL32 DOSFS_ToDosFCBFormat( LPCSTR name, LPSTR buffer );
+extern BOOL DOSFS_ToDosFCBFormat( LPCSTR name, LPSTR buffer );
 extern const DOS_DEVICE *DOSFS_GetDevice( const char *name );
-extern const DOS_DEVICE *DOSFS_GetDeviceByHandle( HFILE32 hFile );
-extern HFILE32 DOSFS_OpenDevice( const char *name, DWORD access );
-extern BOOL32 DOSFS_FindUnixName( LPCSTR path, LPCSTR name, LPSTR long_buf,
-                                  INT32 long_len, LPSTR short_buf,
-                                  BOOL32 ignore_case );
-extern BOOL32 DOSFS_GetFullName( LPCSTR name, BOOL32 check_last,
+extern const DOS_DEVICE *DOSFS_GetDeviceByHandle( HFILE hFile );
+extern HFILE DOSFS_OpenDevice( const char *name, DWORD access );
+extern BOOL DOSFS_FindUnixName( LPCSTR path, LPCSTR name, LPSTR long_buf,
+                                  INT long_len, LPSTR short_buf,
+                                  BOOL ignore_case );
+extern BOOL DOSFS_GetFullName( LPCSTR name, BOOL check_last,
                                  DOS_FULL_NAME *full );
 extern int DOSFS_FindNext( const char *path, const char *short_mask,
                            const char *long_mask, int drive, BYTE attr,
-                           int skip, WIN32_FIND_DATA32A *entry );
+                           int skip, WIN32_FIND_DATAA *entry );
 
 #endif  /* __WINE_FILE_H */
diff --git a/include/flatthunk.h b/include/flatthunk.h
index 57e4257..2a8059b 100644
--- a/include/flatthunk.h
+++ b/include/flatthunk.h
@@ -96,7 +96,7 @@
 struct SLTargetDB
 {
      struct SLTargetDB *   next;
-     PDB32 *               process;
+     PDB *               process;
      DWORD *               targetTable;
 };
 
diff --git a/include/font.h b/include/font.h
index a1bc16a..28cccf5 100644
--- a/include/font.h
+++ b/include/font.h
@@ -55,19 +55,19 @@
 
 #define FONTCACHE 	32	/* dynamic font cache size */
 
-extern BOOL32 FONT_Init( UINT16* pTextCaps );
+extern BOOL FONT_Init( UINT16* pTextCaps );
 extern INT16  FONT_GetObject16( FONTOBJ * font, INT16 count, LPSTR buffer );
-extern INT32  FONT_GetObject32A( FONTOBJ * font, INT32 count, LPSTR buffer );
-extern INT32  FONT_GetObject32W( FONTOBJ * font, INT32 count, LPSTR buffer );
-extern void FONT_LogFont32ATo16( const LOGFONT32A* font32, LPLOGFONT16 font16 );
-extern void FONT_LogFont32WTo16( const LOGFONT32W* font32, LPLOGFONT16 font16 );
-extern void FONT_LogFont16To32A( const LPLOGFONT16 font16, LPLOGFONT32A font32 );
-extern void FONT_LogFont16To32W( const LPLOGFONT16 font16, LPLOGFONT32W font32 );
-extern void FONT_TextMetric32Ato16(const LPTEXTMETRIC32A ptm32, LPTEXTMETRIC16 ptm16 );
-extern void FONT_TextMetric32Wto16(const LPTEXTMETRIC32W ptm32, LPTEXTMETRIC16 ptm16 );
-extern void FONT_TextMetric16to32A(const LPTEXTMETRIC16 ptm16, LPTEXTMETRIC32A ptm32 );
-extern void FONT_TextMetric16to32W(const LPTEXTMETRIC16 ptm16, LPTEXTMETRIC32W ptm32 );
-extern void FONT_TextMetric32Ato32W(const LPTEXTMETRIC32A ptm32A, LPTEXTMETRIC32W ptm32W );
+extern INT  FONT_GetObjectA( FONTOBJ * font, INT count, LPSTR buffer );
+extern INT  FONT_GetObjectW( FONTOBJ * font, INT count, LPSTR buffer );
+extern void FONT_LogFont32ATo16( const LOGFONTA* font32, LPLOGFONT16 font16 );
+extern void FONT_LogFont32WTo16( const LOGFONTW* font32, LPLOGFONT16 font16 );
+extern void FONT_LogFont16To32A( const LPLOGFONT16 font16, LPLOGFONTA font32 );
+extern void FONT_LogFont16To32W( const LPLOGFONT16 font16, LPLOGFONTW font32 );
+extern void FONT_TextMetric32Ato16(const LPTEXTMETRICA ptm32, LPTEXTMETRIC16 ptm16 );
+extern void FONT_TextMetric32Wto16(const LPTEXTMETRICW ptm32, LPTEXTMETRIC16 ptm16 );
+extern void FONT_TextMetric16to32A(const LPTEXTMETRIC16 ptm16, LPTEXTMETRICA ptm32 );
+extern void FONT_TextMetric16to32W(const LPTEXTMETRIC16 ptm16, LPTEXTMETRICW ptm32 );
+extern void FONT_TextMetric32Ato32W(const LPTEXTMETRICA ptm32A, LPTEXTMETRICW ptm32W );
 
 
 
diff --git a/include/gdi.h b/include/gdi.h
index 90c0ea3..5ec178d 100644
--- a/include/gdi.h
+++ b/include/gdi.h
@@ -107,117 +107,117 @@
     short         breakExtra;        /* breakTotalExtra / breakCount */
     short         breakRem;          /* breakTotalExtra % breakCount */
 
-    RECT32        totalExtent;
+    RECT        totalExtent;
     BYTE          bitsPerPixel;
 
-    INT32         MapMode;
-    INT32         GraphicsMode;      /* Graphics mode */
-    INT32         DCOrgX;            /* DC origin */
-    INT32         DCOrgY;
+    INT         MapMode;
+    INT         GraphicsMode;      /* Graphics mode */
+    INT         DCOrgX;            /* DC origin */
+    INT         DCOrgY;
     FARPROC16     lpfnPrint;         /* AbortProc for Printing */
-    INT32         CursPosX;          /* Current position */
-    INT32         CursPosY;
-    INT32         ArcDirection;
+    INT         CursPosX;          /* Current position */
+    INT         CursPosY;
+    INT         ArcDirection;
     XFORM         xformWorld2Wnd;    /* World-to-window transformation */
     XFORM         xformWorld2Vport;  /* World-to-viewport transformation */
     XFORM         xformVport2World;  /* Inverse of the above transformation */
-    BOOL32        vport2WorldValid;  /* Is xformVport2World valid? */
+    BOOL        vport2WorldValid;  /* Is xformVport2World valid? */
 } WIN_DC_INFO;
 
 typedef struct tagDC
 {
     GDIOBJHDR      header;
-    HDC32          hSelf;            /* Handle to this DC */
+    HDC          hSelf;            /* Handle to this DC */
     const struct tagDC_FUNCS *funcs; /* DC function table */
     void          *physDev;          /* Physical device (driver-specific) */
-    INT32          saveLevel;
+    INT          saveLevel;
     DWORD          dwHookData;
     FARPROC16      hookProc;
 
-    INT32          wndOrgX;          /* Window origin */
-    INT32          wndOrgY;
-    INT32          wndExtX;          /* Window extent */
-    INT32          wndExtY;
-    INT32          vportOrgX;        /* Viewport origin */
-    INT32          vportOrgY;
-    INT32          vportExtX;        /* Viewport extent */
-    INT32          vportExtY;
+    INT          wndOrgX;          /* Window origin */
+    INT          wndOrgY;
+    INT          wndExtX;          /* Window extent */
+    INT          wndExtY;
+    INT          vportOrgX;        /* Viewport origin */
+    INT          vportOrgY;
+    INT          vportExtX;        /* Viewport extent */
+    INT          vportExtY;
 
     WIN_DC_INFO w;
 } DC;
 
 /* Device functions for the Wine driver interface */
 
-typedef INT32 (*DEVICEFONTENUMPROC)(LPENUMLOGFONT16,LPNEWTEXTMETRIC16,UINT16,LPARAM);
+typedef INT (*DEVICEFONTENUMPROC)(LPENUMLOGFONT16,LPNEWTEXTMETRIC16,UINT16,LPARAM);
 
 typedef struct tagDC_FUNCS
 {
-    BOOL32     (*pArc)(DC*,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32);
-    BOOL32     (*pBitBlt)(DC*,INT32,INT32,INT32,INT32,DC*,INT32,INT32,DWORD);
-    LONG       (*pBitmapBits)(HBITMAP32,void*,LONG,WORD);
-    BOOL32     (*pChord)(DC*,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32);
-    BOOL32     (*pCreateBitmap)(HBITMAP32); 
-    BOOL32     (*pCreateDC)(DC*,LPCSTR,LPCSTR,LPCSTR,const DEVMODE16*);
-    BOOL32     (*pDeleteDC)(DC*);
-    BOOL32     (*pDeleteObject)(HGDIOBJ32);
-    BOOL32     (*pEllipse)(DC*,INT32,INT32,INT32,INT32);
-    BOOL32     (*pEnumDeviceFonts)(DC*,LPLOGFONT16,DEVICEFONTENUMPROC,LPARAM);
-    INT32      (*pEscape)(DC*,INT32,INT32,SEGPTR,SEGPTR);
-    INT32      (*pExcludeClipRect)(DC*,INT32,INT32,INT32,INT32);
-    INT32      (*pExcludeVisRect)(DC*,INT32,INT32,INT32,INT32);
-    BOOL32     (*pExtFloodFill)(DC*,INT32,INT32,COLORREF,UINT32);
-    BOOL32     (*pExtTextOut)(DC*,INT32,INT32,UINT32,const RECT32*,LPCSTR,UINT32,const INT32*);
-    BOOL32     (*pGetCharWidth)(DC*,UINT32,UINT32,LPINT32);
-    COLORREF   (*pGetPixel)(DC*,INT32,INT32);
-    BOOL32     (*pGetTextExtentPoint)(DC*,LPCSTR,INT32,LPSIZE32);
-    BOOL32     (*pGetTextMetrics)(DC*,TEXTMETRIC32A*);
-    INT32      (*pIntersectClipRect)(DC*,INT32,INT32,INT32,INT32);
-    INT32      (*pIntersectVisRect)(DC*,INT32,INT32,INT32,INT32);
-    BOOL32     (*pLineTo)(DC*,INT32,INT32);
-    HANDLE32   (*pLoadOEMResource)(WORD,WORD);
-    BOOL32     (*pMoveToEx)(DC*,INT32,INT32,LPPOINT32);
-    INT32      (*pOffsetClipRgn)(DC*,INT32,INT32);
-    BOOL32     (*pOffsetViewportOrg)(DC*,INT32,INT32);
-    BOOL32     (*pOffsetWindowOrg)(DC*,INT32,INT32);
-    BOOL32     (*pPaintRgn)(DC*,HRGN32);
-    BOOL32     (*pPatBlt)(DC*,INT32,INT32,INT32,INT32,DWORD);
-    BOOL32     (*pPie)(DC*,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32);
-    BOOL32     (*pPolyPolygon)(DC*,const POINT32*,const INT32*,UINT32);
-    BOOL32     (*pPolyPolyline)(DC*,const POINT32*,const DWORD*,DWORD);
-    BOOL32     (*pPolygon)(DC*,const POINT32*,INT32);
-    BOOL32     (*pPolyline)(DC*,const POINT32*,INT32);
-    BOOL32     (*pPolyBezier)(DC*,POINT32, const POINT32*,DWORD);
-    UINT32     (*pRealizePalette)(DC*);
-    BOOL32     (*pRectangle)(DC*,INT32,INT32,INT32,INT32);
-    BOOL32     (*pRestoreDC)(DC*,INT32);
-    BOOL32     (*pRoundRect)(DC*,INT32,INT32,INT32,INT32,INT32,INT32);
-    INT32      (*pSaveDC)(DC*);
-    BOOL32     (*pScaleViewportExt)(DC*,INT32,INT32,INT32,INT32);
-    BOOL32     (*pScaleWindowExt)(DC*,INT32,INT32,INT32,INT32);
-    INT32      (*pSelectClipRgn)(DC*,HRGN32);
-    HANDLE32   (*pSelectObject)(DC*,HANDLE32);
-    HPALETTE32 (*pSelectPalette)(DC*,HPALETTE32,BOOL32);
+    BOOL     (*pArc)(DC*,INT,INT,INT,INT,INT,INT,INT,INT);
+    BOOL     (*pBitBlt)(DC*,INT,INT,INT,INT,DC*,INT,INT,DWORD);
+    LONG       (*pBitmapBits)(HBITMAP,void*,LONG,WORD);
+    BOOL     (*pChord)(DC*,INT,INT,INT,INT,INT,INT,INT,INT);
+    BOOL     (*pCreateBitmap)(HBITMAP); 
+    BOOL     (*pCreateDC)(DC*,LPCSTR,LPCSTR,LPCSTR,const DEVMODE16*);
+    BOOL     (*pDeleteDC)(DC*);
+    BOOL     (*pDeleteObject)(HGDIOBJ);
+    BOOL     (*pEllipse)(DC*,INT,INT,INT,INT);
+    BOOL     (*pEnumDeviceFonts)(DC*,LPLOGFONT16,DEVICEFONTENUMPROC,LPARAM);
+    INT      (*pEscape)(DC*,INT,INT,SEGPTR,SEGPTR);
+    INT      (*pExcludeClipRect)(DC*,INT,INT,INT,INT);
+    INT      (*pExcludeVisRect)(DC*,INT,INT,INT,INT);
+    BOOL     (*pExtFloodFill)(DC*,INT,INT,COLORREF,UINT);
+    BOOL     (*pExtTextOut)(DC*,INT,INT,UINT,const RECT*,LPCSTR,UINT,const INT*);
+    BOOL     (*pGetCharWidth)(DC*,UINT,UINT,LPINT);
+    COLORREF   (*pGetPixel)(DC*,INT,INT);
+    BOOL     (*pGetTextExtentPoint)(DC*,LPCSTR,INT,LPSIZE);
+    BOOL     (*pGetTextMetrics)(DC*,TEXTMETRICA*);
+    INT      (*pIntersectClipRect)(DC*,INT,INT,INT,INT);
+    INT      (*pIntersectVisRect)(DC*,INT,INT,INT,INT);
+    BOOL     (*pLineTo)(DC*,INT,INT);
+    HANDLE   (*pLoadOEMResource)(WORD,WORD);
+    BOOL     (*pMoveToEx)(DC*,INT,INT,LPPOINT);
+    INT      (*pOffsetClipRgn)(DC*,INT,INT);
+    BOOL     (*pOffsetViewportOrg)(DC*,INT,INT);
+    BOOL     (*pOffsetWindowOrg)(DC*,INT,INT);
+    BOOL     (*pPaintRgn)(DC*,HRGN);
+    BOOL     (*pPatBlt)(DC*,INT,INT,INT,INT,DWORD);
+    BOOL     (*pPie)(DC*,INT,INT,INT,INT,INT,INT,INT,INT);
+    BOOL     (*pPolyPolygon)(DC*,const POINT*,const INT*,UINT);
+    BOOL     (*pPolyPolyline)(DC*,const POINT*,const DWORD*,DWORD);
+    BOOL     (*pPolygon)(DC*,const POINT*,INT);
+    BOOL     (*pPolyline)(DC*,const POINT*,INT);
+    BOOL     (*pPolyBezier)(DC*,POINT, const POINT*,DWORD);
+    UINT     (*pRealizePalette)(DC*);
+    BOOL     (*pRectangle)(DC*,INT,INT,INT,INT);
+    BOOL     (*pRestoreDC)(DC*,INT);
+    BOOL     (*pRoundRect)(DC*,INT,INT,INT,INT,INT,INT);
+    INT      (*pSaveDC)(DC*);
+    BOOL     (*pScaleViewportExt)(DC*,INT,INT,INT,INT);
+    BOOL     (*pScaleWindowExt)(DC*,INT,INT,INT,INT);
+    INT      (*pSelectClipRgn)(DC*,HRGN);
+    HANDLE   (*pSelectObject)(DC*,HANDLE);
+    HPALETTE (*pSelectPalette)(DC*,HPALETTE,BOOL);
     COLORREF   (*pSetBkColor)(DC*,COLORREF);
     WORD       (*pSetBkMode)(DC*,WORD);
     VOID       (*pSetDeviceClipping)(DC*);
-    INT32      (*pSetDIBitsToDevice)(DC*,INT32,INT32,DWORD,DWORD,INT32,INT32,UINT32,UINT32,LPCVOID,const BITMAPINFO*,UINT32);
-    INT32      (*pSetMapMode)(DC*,INT32);
+    INT      (*pSetDIBitsToDevice)(DC*,INT,INT,DWORD,DWORD,INT,INT,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
+    INT      (*pSetMapMode)(DC*,INT);
     DWORD      (*pSetMapperFlags)(DC*,DWORD);
-    COLORREF   (*pSetPixel)(DC*,INT32,INT32,COLORREF);
+    COLORREF   (*pSetPixel)(DC*,INT,INT,COLORREF);
     WORD       (*pSetPolyFillMode)(DC*,WORD);
     WORD       (*pSetROP2)(DC*,WORD);
     WORD       (*pSetRelAbs)(DC*,WORD);
     WORD       (*pSetStretchBltMode)(DC*,WORD);
     WORD       (*pSetTextAlign)(DC*,WORD);
-    INT32      (*pSetTextCharacterExtra)(DC*,INT32);
+    INT      (*pSetTextCharacterExtra)(DC*,INT);
     DWORD      (*pSetTextColor)(DC*,DWORD);
-    INT32      (*pSetTextJustification)(DC*,INT32,INT32);
-    BOOL32     (*pSetViewportExt)(DC*,INT32,INT32);
-    BOOL32     (*pSetViewportOrg)(DC*,INT32,INT32);
-    BOOL32     (*pSetWindowExt)(DC*,INT32,INT32);
-    BOOL32     (*pSetWindowOrg)(DC*,INT32,INT32);
-    BOOL32     (*pStretchBlt)(DC*,INT32,INT32,INT32,INT32,DC*,INT32,INT32,INT32,INT32,DWORD);
-    INT32     (*pStretchDIBits)(DC*,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32,const void *,const BITMAPINFO *,UINT32,DWORD);
+    INT      (*pSetTextJustification)(DC*,INT,INT);
+    BOOL     (*pSetViewportExt)(DC*,INT,INT);
+    BOOL     (*pSetViewportOrg)(DC*,INT,INT);
+    BOOL     (*pSetWindowExt)(DC*,INT,INT);
+    BOOL     (*pSetWindowOrg)(DC*,INT,INT);
+    BOOL     (*pStretchBlt)(DC*,INT,INT,INT,INT,DC*,INT,INT,INT,INT,DWORD);
+    INT     (*pStretchDIBits)(DC*,INT,INT,INT,INT,INT,INT,INT,INT,const void *,const BITMAPINFO *,UINT,DWORD);
 } DC_FUNCTIONS;
 
   /* LoadOEMResource types */
@@ -284,7 +284,7 @@
  * transformation process is done in floating point internally. This function
  * is then used to round these coordinates to integer values.
  */
-static __inline__ INT32 WINE_UNUSED GDI_ROUND(FLOAT val)
+static __inline__ INT WINE_UNUSED GDI_ROUND(FLOAT val)
 {
    return (int)floor(val + 0.5);
 }
@@ -292,7 +292,7 @@
 /* Performs a viewport-to-world transformation on the specified point (which
  * is in floating point format). Returns TRUE if successful, else FALSE.
  */
-static __inline__ BOOL32 WINE_UNUSED INTERNAL_DPTOLP_FLOAT(DC *dc, FLOAT_POINT *point)
+static __inline__ BOOL WINE_UNUSED INTERNAL_DPTOLP_FLOAT(DC *dc, FLOAT_POINT *point)
 {
     FLOAT x, y;
     
@@ -316,7 +316,7 @@
 /* Performs a viewport-to-world transformation on the specified point (which
  * is in integer format). Returns TRUE if successful, else FALSE.
  */
-static __inline__ BOOL32 WINE_UNUSED INTERNAL_DPTOLP(DC *dc, LPPOINT32 point)
+static __inline__ BOOL WINE_UNUSED INTERNAL_DPTOLP(DC *dc, LPPOINT point)
 {
     FLOAT_POINT floatPoint;
     
@@ -354,7 +354,7 @@
 /* Performs a world-to-viewport transformation on the specified point (which
  * is in integer format).
  */
-static __inline__ void WINE_UNUSED INTERNAL_LPTODP(DC *dc, LPPOINT32 point)
+static __inline__ void WINE_UNUSED INTERNAL_LPTODP(DC *dc, LPPOINT point)
 {
     FLOAT_POINT floatPoint;
     
@@ -410,13 +410,13 @@
       ((HGDIOBJ16)(handle)<=LAST_STOCK_HANDLE)) ? \
       0 : LOCAL_Unlock( GDI_HeapSel, (handle) ))
 
-extern BOOL32 GDI_Init(void);
+extern BOOL GDI_Init(void);
 extern HGDIOBJ16 GDI_AllocObject( WORD, WORD );
-extern BOOL32 GDI_FreeObject( HGDIOBJ16 );
+extern BOOL GDI_FreeObject( HGDIOBJ16 );
 extern GDIOBJHDR * GDI_GetObjPtr( HGDIOBJ16, WORD );
 
-extern BOOL32 DRIVER_RegisterDriver( LPCSTR name, const DC_FUNCTIONS *funcs );
+extern BOOL DRIVER_RegisterDriver( LPCSTR name, const DC_FUNCTIONS *funcs );
 extern const DC_FUNCTIONS *DRIVER_FindDriver( LPCSTR name );
-extern BOOL32 DRIVER_UnregisterDriver( LPCSTR name );
+extern BOOL DRIVER_UnregisterDriver( LPCSTR name );
 
 #endif  /* __WINE_GDI_H */
diff --git a/include/global.h b/include/global.h
index 73f8011..1a9ee66 100644
--- a/include/global.h
+++ b/include/global.h
@@ -27,19 +27,19 @@
                                BOOL16 isCode, BOOL16 is32Bit,
                                BOOL16 isReadOnly );
 
-extern WORD WINAPI GlobalHandleToSel( HGLOBAL16 handle );
+extern WORD WINAPI GlobalHandleToSel16( HGLOBAL16 handle );
 
 /* memory/virtual.c */
-extern BOOL32 VIRTUAL_Init( void );
+extern BOOL VIRTUAL_Init( void );
 extern DWORD VIRTUAL_GetPageSize(void);
 extern DWORD VIRTUAL_GetGranularity(void);
 extern LPVOID VIRTUAL_MapFileW( LPCWSTR name );
 
-typedef BOOL32 (*HANDLERPROC)(LPVOID, LPCVOID);
-extern BOOL32 VIRTUAL_SetFaultHandler(LPCVOID addr, HANDLERPROC proc, LPVOID arg);
-extern BOOL32 VIRTUAL_HandleFault(LPCVOID addr);
+typedef BOOL (*HANDLERPROC)(LPVOID, LPCVOID);
+extern BOOL VIRTUAL_SetFaultHandler(LPCVOID addr, HANDLERPROC proc, LPVOID arg);
+extern BOOL VIRTUAL_HandleFault(LPCVOID addr);
 
 /* memory/atom.c */
-extern BOOL32 ATOM_Init( WORD globalTableSel );
+extern BOOL ATOM_Init( WORD globalTableSel );
 
 #endif  /* __WINE_GLOBAL_H */
diff --git a/include/header.h b/include/header.h
index df6e0e5..9d3ada9 100644
--- a/include/header.h
+++ b/include/header.h
@@ -10,40 +10,40 @@
 
 typedef struct 
 {
-    INT32     cxy;
-    HBITMAP32 hbm;
+    INT     cxy;
+    HBITMAP hbm;
     LPWSTR    pszText;
-    INT32     fmt;
+    INT     fmt;
     LPARAM    lParam;
-    INT32     iImage;
-    INT32     iOrder;		/* see documentation of HD_ITEM */
+    INT     iImage;
+    INT     iOrder;		/* see documentation of HD_ITEM */
 
-    BOOL32    bDown;		/* is item pressed? (used for drawing) */
-    RECT32    rect;		/* bounding rectangle of the item */
+    BOOL    bDown;		/* is item pressed? (used for drawing) */
+    RECT    rect;		/* bounding rectangle of the item */
 } HEADER_ITEM;
 
 
 typedef struct
 {
-    UINT32      uNumItem;	/* number of items (columns) */
-    INT32       nHeight;	/* height of the header (pixels) */
-    HFONT32     hFont;		/* handle to the current font */
-    HCURSOR32   hcurArrow;	/* handle to the arrow cursor */
-    HCURSOR32   hcurDivider;	/* handle to a cursor (used over dividers) <-|-> */
-    HCURSOR32   hcurDivopen;	/* handle to a cursor (used over dividers) <-||-> */
-    BOOL32      bCaptured;	/* Is the mouse captured? */
-    BOOL32      bPressed;	/* Is a header item pressed (down)? */
-    BOOL32      bTracking;	/* Is in tracking mode? */
-    BOOL32      bUnicode;       /* Unicode flag */
-    INT32       iMoveItem;	/* index of tracked item. (Tracking mode) */
-    INT32       xTrackOffset;	/* distance between the right side of the tracked item and the cursor */
-    INT32       xOldTrack;	/* track offset (see above) after the last WM_MOUSEMOVE */
-    INT32       nOldWidth;	/* width of a sizing item after the last WM_MOUSEMOVE */
-    INT32       iHotItem;	/* index of hot item (cursor is over this item) */
+    UINT      uNumItem;	/* number of items (columns) */
+    INT       nHeight;	/* height of the header (pixels) */
+    HFONT     hFont;		/* handle to the current font */
+    HCURSOR   hcurArrow;	/* handle to the arrow cursor */
+    HCURSOR   hcurDivider;	/* handle to a cursor (used over dividers) <-|-> */
+    HCURSOR   hcurDivopen;	/* handle to a cursor (used over dividers) <-||-> */
+    BOOL      bCaptured;	/* Is the mouse captured? */
+    BOOL      bPressed;	/* Is a header item pressed (down)? */
+    BOOL      bTracking;	/* Is in tracking mode? */
+    BOOL      bUnicode;       /* Unicode flag */
+    INT       iMoveItem;	/* index of tracked item. (Tracking mode) */
+    INT       xTrackOffset;	/* distance between the right side of the tracked item and the cursor */
+    INT       xOldTrack;	/* track offset (see above) after the last WM_MOUSEMOVE */
+    INT       nOldWidth;	/* width of a sizing item after the last WM_MOUSEMOVE */
+    INT       iHotItem;	/* index of hot item (cursor is over this item) */
 
     HIMAGELIST  himl;		/* handle to a image list (may be 0) */
     HEADER_ITEM *items;		/* pointer to array of HEADER_ITEM's */
-    LPINT32     pOrder;         /* pointer to order array */
+    LPINT     pOrder;         /* pointer to order array */
 } HEADER_INFO;
 
 
diff --git a/include/heap.h b/include/heap.h
index 269b5bc..9b66825 100644
--- a/include/heap.h
+++ b/include/heap.h
@@ -9,17 +9,17 @@
 
 #include "winbase.h"
 
-extern HANDLE32 SystemHeap;
-extern HANDLE32 SegptrHeap;
+extern HANDLE SystemHeap;
+extern HANDLE SegptrHeap;
 extern CRITICAL_SECTION *HEAP_SystemLock;
 
-extern int HEAP_IsInsideHeap( HANDLE32 heap, DWORD flags, LPCVOID ptr );
-extern SEGPTR HEAP_GetSegptr( HANDLE32 heap, DWORD flags, LPCVOID ptr );
-extern LPVOID HEAP_xalloc( HANDLE32 heap, DWORD flags, DWORD size );
-extern LPSTR HEAP_strdupA( HANDLE32 heap, DWORD flags, LPCSTR str );
-extern LPWSTR HEAP_strdupW( HANDLE32 heap, DWORD flags, LPCWSTR str );
-extern LPWSTR HEAP_strdupAtoW( HANDLE32 heap, DWORD flags, LPCSTR str );
-extern LPSTR HEAP_strdupWtoA( HANDLE32 heap, DWORD flags, LPCWSTR str );
+extern int HEAP_IsInsideHeap( HANDLE heap, DWORD flags, LPCVOID ptr );
+extern SEGPTR HEAP_GetSegptr( HANDLE heap, DWORD flags, LPCVOID ptr );
+extern LPVOID HEAP_xalloc( HANDLE heap, DWORD flags, DWORD size );
+extern LPSTR HEAP_strdupA( HANDLE heap, DWORD flags, LPCSTR str );
+extern LPWSTR HEAP_strdupW( HANDLE heap, DWORD flags, LPCWSTR str );
+extern LPWSTR HEAP_strdupAtoW( HANDLE heap, DWORD flags, LPCSTR str );
+extern LPSTR HEAP_strdupWtoA( HANDLE heap, DWORD flags, LPCWSTR str );
 
 /* SEGPTR helper macros */
 
@@ -56,7 +56,7 @@
     WORD wFlags;
     union {
         struct {
-            HANDLE32 hMem;
+            HANDLE hMem;
             DWORD dwReserved[3];
         } Block;
         struct {
diff --git a/include/hook.h b/include/hook.h
index 9d53a11..b98786a 100644
--- a/include/hook.h
+++ b/include/hook.h
@@ -25,28 +25,26 @@
 typedef struct
 {
   LPARAM        lParam;
-  WPARAM32      wParam;
-  UINT32        message;
-  HWND32        hwnd;
-} CWPSTRUCT32, *LPCWPSTRUCT32;
+  WPARAM      wParam;
+  UINT        message;
+  HWND        hwnd;
+} CWPSTRUCT, *LPCWPSTRUCT;
 
-DECL_WINELIB_TYPE(CWPSTRUCT)
-DECL_WINELIB_TYPE(LPCWPSTRUCT)
 
 /* hook type mask */
 #define HOOK_MAPTYPE (HOOK_WIN16 | HOOK_WIN32A | HOOK_WIN32W)
 
 extern HOOKPROC16 HOOK_GetProc16( HHOOK hhook );
-extern BOOL32 HOOK_IsHooked( INT16 id );
+extern BOOL HOOK_IsHooked( INT16 id );
 extern LRESULT HOOK_CallHooks16( INT16 id, INT16 code, WPARAM16 wParam,
 				 LPARAM lParam );
-extern LRESULT HOOK_CallHooks32A( INT32 id, INT32 code, WPARAM32 wParam,
+extern LRESULT HOOK_CallHooksA( INT id, INT code, WPARAM wParam,
 				  LPARAM lParam );
-extern LRESULT HOOK_CallHooks32W( INT32 id, INT32 code, WPARAM32 wParam,
+extern LRESULT HOOK_CallHooksW( INT id, INT code, WPARAM wParam,
 				  LPARAM lParam );
 extern void HOOK_FreeModuleHooks( HMODULE16 hModule );
 extern void HOOK_FreeQueueHooks( HQUEUE16 hQueue );
 extern void HOOK_ResetQueueHooks( HQUEUE16 hQueue );
-extern HOOKPROC32 HOOK_GetProc( HHOOK hook );
+extern HOOKPROC HOOK_GetProc( HHOOK hook );
 
 #endif  /* __WINE_HOOK_H */
diff --git a/include/hotkey.h b/include/hotkey.h
index c8dc19d..46f813c 100644
--- a/include/hotkey.h
+++ b/include/hotkey.h
@@ -9,9 +9,9 @@
 
 typedef struct tagHOTKEY_INFO
 {
-    HFONT32 hFont;
-    BOOL32  bFocus;
-    INT32   nHeight;
+    HFONT hFont;
+    BOOL  bFocus;
+    INT   nHeight;
 
 } HOTKEY_INFO;
 
diff --git a/include/imagehlp.h b/include/imagehlp.h
index 53897be..fc404b2 100644
--- a/include/imagehlp.h
+++ b/include/imagehlp.h
@@ -13,13 +13,13 @@
  * Types
  */
 
-typedef PVOID DIGEST_HANDLE32; 
+typedef PVOID DIGEST_HANDLE; 
 
 /***********************************************************************
  * Enums/Defines
  */
 
-typedef enum _IMAGEHLP_STATUS_REASON32 {
+typedef enum _IMAGEHLP_STATUS_REASON {
   BindOutOfMemory,
   BindRvaToVaFailed,
   BindNoRoomInImage,
@@ -34,7 +34,7 @@
   BindImageComplete,
   BindMismatchedSymbols,
   BindSymbolsNotUpdated
-} IMAGEHLP_STATUS_REASON32;
+} IMAGEHLP_STATUS_REASON;
 
 #define BIND_NO_BOUND_IMPORTS  0x00000001
 #define BIND_NO_UPDATE         0x00000002
@@ -82,12 +82,12 @@
 #define CHECKSUM_MAPVIEW_FAILURE 3
 #define CHECKSUM_UNICODE_FAILURE 4
 
-typedef enum _ADRESS_MODE32 {
+typedef enum _ADRESS_MODE {
   AddrMode1616,
   AddrMode1632,
   AddrModeReal,
   AddrModeFlat
-} ADDRESS_MODE32;
+} ADDRESS_MODE;
 
 #define SYMOPT_CASE_INSENSITIVE  0x00000001
 #define SYMOPT_UNDNAME           0x00000002
@@ -99,7 +99,7 @@
 #define SYMF_OMAP_GENERATED   0x00000001
 #define SYMF_OMAP_MODIFIED    0x00000002
 
-typedef enum _SYM_TYPE32 {
+typedef enum _SYM_TYPE {
   SymNone,
   SymCoff,
   SymCv,
@@ -143,14 +143,14 @@
  * Structures
  */
 
-typedef struct _IMAGE_DATA_DIRECTORY32 {
+typedef struct _IMAGE_DATA_DIRECTORY {
   DWORD VirtualAddress;
   DWORD Size;
-} IMAGE_DATA_DIRECTORY32, *PIMAGE_DATA_DIRECTORY32;
+} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
 
 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
 
-typedef struct _IMAGE_OPTIONAL_HEADER32 {
+typedef struct _IMAGE_OPTIONAL_HEADER {
 
   /* Standard fields */
 
@@ -187,10 +187,10 @@
   DWORD SizeOfHeapCommit;
   DWORD LoaderFlags;
   DWORD NumberOfRvaAndSizes;
-  IMAGE_DATA_DIRECTORY32 DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
-} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
+  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
+} IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER;
 
-typedef struct _IMAGE_FILE_HEADER32 {
+typedef struct _IMAGE_FILE_HEADER {
   WORD  Machine;
   WORD  NumberOfSections;
   DWORD TimeDateStamp;
@@ -198,17 +198,17 @@
   DWORD NumberOfSymbols;
   WORD  SizeOfOptionalHeader;
   WORD  Characteristics;
-} IMAGE_FILE_HEADER32, *PIMAGE_FILE_HEADER32;
+} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
 
-typedef struct _IMAGE_NT_HEADERS32 {
+typedef struct _IMAGE_NT_HEADERS {
   DWORD Signature;
-  IMAGE_FILE_HEADER32 FileHeader;
-  IMAGE_OPTIONAL_HEADER32 OptionalHeader;
-} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
+  IMAGE_FILE_HEADER FileHeader;
+  IMAGE_OPTIONAL_HEADER OptionalHeader;
+} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS;
 
 #define IMAGE_SIZEOF_SHORT_NAME 8
 
-typedef struct _IMAGE_SECTION_HEADER32 {
+typedef struct _IMAGE_SECTION_HEADER {
   BYTE  Name[IMAGE_SIZEOF_SHORT_NAME];
   union {
     DWORD PhysicalAddress;
@@ -222,24 +222,24 @@
   WORD  NumberOfRelocations;
   WORD  NumberOfLinenumbers;
   DWORD Characteristics;
-} IMAGE_SECTION_HEADER32, *PIMAGE_SECTION_HEADER32;
+} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
 
-typedef struct _LOADED_IMAGE32 {
+typedef struct _LOADED_IMAGE {
   LPSTR                   ModuleName;
-  HANDLE32                hFile;
+  HANDLE                hFile;
   PUCHAR                  MappedAddress;
-  PIMAGE_NT_HEADERS32     FileHeader;
-  PIMAGE_SECTION_HEADER32 LastRvaSection;
+  PIMAGE_NT_HEADERS     FileHeader;
+  PIMAGE_SECTION_HEADER LastRvaSection;
   ULONG                   NumberOfSections;
-  PIMAGE_SECTION_HEADER32 Sections;
+  PIMAGE_SECTION_HEADER Sections;
   ULONG                   Characteristics;
   BOOLEAN                 fSystemImage;
   BOOLEAN                 fDOSImage;
-  LIST_ENTRY32            Links;
+  LIST_ENTRY            Links;
   ULONG                   SizeOfImage;
-} LOADED_IMAGE32, *PLOADED_IMAGE32;
+} LOADED_IMAGE, *PLOADED_IMAGE;
 
-typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32 {
+typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
   DWORD Characteristics;
   DWORD TimeDateStamp;
   WORD  MajorVersion;
@@ -258,29 +258,29 @@
   WORD  Reserved1;
   PVOID EditList;
   DWORD Reserved[1];
-} IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32;
+} IMAGE_LOAD_CONFIG_DIRECTORY, *PIMAGE_LOAD_CONFIG_DIRECTORY;
 
-typedef struct _WIN_CERTIFICATE32 {
+typedef struct _WIN_CERTIFICATE {
   DWORD dwLength;
   WORD  wRevision;                   /*  WIN_CERT_REVISON_xxx */ 
   WORD  wCertificateType;            /*  WIN_CERT_TYPE_xxx */
   BYTE  bCertificate[ANYSIZE_ARRAY];
-} WIN_CERTIFICATE32, *PWIN_CERTIFICATE32;
+} WIN_CERTIFICATE, *PWIN_CERTIFICATE;
 
-typedef struct _API_VERSION32 {
+typedef struct _API_VERSION {
   USHORT  MajorVersion;
   USHORT  MinorVersion;
   USHORT  Revision;
   USHORT  Reserved;
-} API_VERSION32, *PAPI_VERSION32;
+} API_VERSION, *PAPI_VERSION;
 
-typedef struct _IMAGE_FUNCTION_ENTRY32 {
+typedef struct _IMAGE_FUNCTION_ENTRY {
   DWORD StartingAddress;
   DWORD EndingAddress;
   DWORD EndOfPrologue;
-} IMAGE_FUNCTION_ENTRY32, *PIMAGE_FUNCTION_ENTRY32;
+} IMAGE_FUNCTION_ENTRY, *PIMAGE_FUNCTION_ENTRY;
 
-typedef struct _IMAGE_DEBUG_DIRECTORY32 {
+typedef struct _IMAGE_DEBUG_DIRECTORY {
   DWORD Characteristics;
   DWORD TimeDateStamp;
   WORD  MajorVersion;
@@ -289,9 +289,9 @@
   DWORD SizeOfData;
   DWORD AddressOfRawData;
   DWORD PointerToRawData;
-} IMAGE_DEBUG_DIRECTORY32, *PIMAGE_DEBUG_DIRECTORY32;
+} IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;
 
-typedef struct _IMAGE_COFF_SYMBOLS_HEADER32 {
+typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
   DWORD NumberOfSymbols;
   DWORD LvaToFirstSymbol;
   DWORD NumberOfLinenumbers;
@@ -300,9 +300,9 @@
   DWORD RvaToLastByteOfCode;
   DWORD RvaToFirstByteOfData;
   DWORD RvaToLastByteOfData;
-} IMAGE_COFF_SYMBOLS_HEADER32, *PIMAGE_COFF_SYMBOLS_HEADER32;
+} IMAGE_COFF_SYMBOLS_HEADER, *PIMAGE_COFF_SYMBOLS_HEADER;
 
-typedef struct _FPO_DATA32 {
+typedef struct _FPO_DATA {
   DWORD ulOffStart;
   DWORD cbProcSize;
   DWORD cdwLocals;
@@ -313,10 +313,10 @@
   WORD  fUseBP   : 1;
   WORD  reserved : 1;
   WORD  cbFrame  : 2;
-} FPO_DATA32, *PFPO_DATA32;
+} FPO_DATA, *PFPO_DATA;
 
-typedef struct _IMAGE_DEBUG_INFORMATION32 {
-  LIST_ENTRY32 List;
+typedef struct _IMAGE_DEBUG_INFORMATION {
+  LIST_ENTRY List;
   DWORD        Size;
   PVOID        MappedBase;
   USHORT       Machine;
@@ -326,21 +326,21 @@
   DWORD        SizeOfImage;
   
   DWORD NumberOfSections;
-  PIMAGE_SECTION_HEADER32 Sections;
+  PIMAGE_SECTION_HEADER Sections;
 
   DWORD ExportedNamesSize;
   LPSTR ExportedNames;
 
   DWORD NumberOfFunctionTableEntries;
-  PIMAGE_FUNCTION_ENTRY32 FunctionTableEntries;
+  PIMAGE_FUNCTION_ENTRY FunctionTableEntries;
   DWORD LowestFunctionStartingAddress;
   DWORD HighestFunctionEndingAddress;
 
   DWORD NumberOfFpoTableEntries;
-  PFPO_DATA32 FpoTableEntries;
+  PFPO_DATA FpoTableEntries;
 
   DWORD SizeOfCoffSymbols;
-  PIMAGE_COFF_SYMBOLS_HEADER32 CoffSymbols;
+  PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
 
   DWORD SizeOfCodeViewSymbols;
   PVOID CodeViewSymbols;
@@ -351,20 +351,20 @@
 
   DWORD TimeDateStamp;
 
-  BOOL32 RomImage;
-  PIMAGE_DEBUG_DIRECTORY32 DebugDirectory;
+  BOOL RomImage;
+  PIMAGE_DEBUG_DIRECTORY DebugDirectory;
   DWORD  NumberOfDebugDirectories;
 
   DWORD Reserved[3];
-} IMAGE_DEBUG_INFORMATION32, *PIMAGE_DEBUG_INFORMATION32;
+} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
 
-typedef struct _ADDRESS32 {
+typedef struct _ADDRESS {
     DWORD          Offset;
     WORD           Segment;
-    ADDRESS_MODE32 Mode;
-} ADDRESS32, *PADDRESS32;
+    ADDRESS_MODE Mode;
+} ADDRESS, *PADDRESS;
 
-typedef struct _KDHELP32 {
+typedef struct _KDHELP {
   DWORD Thread;
   DWORD ThCallbackStack;
   DWORD NextCallback;
@@ -372,31 +372,31 @@
   DWORD KiCallUserMode;
   DWORD KeUserCallbackDispatcher;
   DWORD SystemRangeStart;
-} KDHELP32, *PKDHELP32;
+} KDHELP, *PKDHELP;
 
-typedef struct _STACKFRAME32 {
-  ADDRESS32 AddrPC;
-  ADDRESS32 AddrReturn;
-  ADDRESS32 AddrFrame;
-  ADDRESS32 AddrStack;
+typedef struct _STACKFRAME {
+  ADDRESS AddrPC;
+  ADDRESS AddrReturn;
+  ADDRESS AddrFrame;
+  ADDRESS AddrStack;
   PVOID     FuncTableEntry;
   DWORD     Params[4];
-  BOOL32    Far;
-  BOOL32    Virtual;
+  BOOL    Far;
+  BOOL    Virtual;
   DWORD     Reserved[3];
-  KDHELP32  KdHelp;
-} STACKFRAME32, *PSTACKFRAME32;
+  KDHELP  KdHelp;
+} STACKFRAME, *PSTACKFRAME;
 
-typedef struct _IMAGEHLP_SYMBOL32 {
+typedef struct _IMAGEHLP_SYMBOL {
   DWORD SizeOfStruct;
   DWORD Address;
   DWORD Size;
   DWORD Flags;
   DWORD MaxNameLength;
   CHAR  Name[ANYSIZE_ARRAY];
-} IMAGEHLP_SYMBOL32, *PIMAGEHLP_SYMBOL32;
+} IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
 
-typedef struct _IMAGEHLP_MODULE32 {
+typedef struct _IMAGEHLP_MODULE {
   DWORD      SizeOfStruct;
   DWORD      BaseOfImage;
   DWORD      ImageSize;
@@ -407,33 +407,33 @@
   CHAR       ModuleName[32];
   CHAR       ImageName[256];
   CHAR       LoadedImageName[256];
-} IMAGEHLP_MODULE32, *PIMAGEHLP_MODULE32;
+} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
 
-typedef struct _IMAGEHLP_LINE32 {
+typedef struct _IMAGEHLP_LINE {
   DWORD SizeOfStruct;
   DWORD Key;
   DWORD LineNumber;
   PCHAR FileName;
   DWORD Address;
-} IMAGEHLP_LINE32, *PIMAGEHLP_LINE32;
+} IMAGEHLP_LINE, *PIMAGEHLP_LINE;
 
-typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD32 {
+typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
   DWORD   SizeOfStruct;
   DWORD   BaseOfImage;
   DWORD   CheckSum;
   DWORD   TimeDateStamp;
   CHAR    FileName[MAX_PATH];
   BOOLEAN Reparse;
-} IMAGEHLP_DEFERRED_SYMBOL_LOAD32, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD32;
+} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
 
-typedef struct _IMAGEHLP_DUPLICATE_SYMBOL32 {
+typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
   DWORD              SizeOfStruct;
   DWORD              NumberOfDups;
-  PIMAGEHLP_SYMBOL32 Symbol;
+  PIMAGEHLP_SYMBOL Symbol;
   ULONG              SelectedSymbol;
-} IMAGEHLP_DUPLICATE_SYMBOL32, *PIMAGEHLP_DUPLICATE_SYMBOL32;
+} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
 
-typedef struct _IMAGE_DOS_HEADER32 {
+typedef struct _IMAGE_DOS_HEADER {
   WORD e_magic;
   WORD e_cblp;
   WORD e_cp;
@@ -453,9 +453,9 @@
   WORD e_oeminfo;
   WORD e_res2[10];
   LONG e_lfanew;
-} IMAGE_DOS_HEADER32, *PIMAGE_DOS_HEADER32;
+} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
 
-typedef struct _IMAGE_OS2_HEADER32 {
+typedef struct _IMAGE_OS2_HEADER {
   WORD ne_magic;
   CHAR ne_ver;
   CHAR ne_rev;
@@ -486,9 +486,9 @@
   WORD ne_psegrefbytes;
   WORD ne_swaparea;
   WORD ne_expver;
-} IMAGE_OS2_HEADER32, *PIMAGE_OS2_HEADER32;
+} IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER;
 
-typedef struct _IMAGE_VXD_HEADER32 {
+typedef struct _IMAGE_VXD_HEADER {
   WORD  e32_magic;
   BYTE  e32_border;
   BYTE  e32_worder;
@@ -540,278 +540,278 @@
   DWORD e32_winreslen;
   WORD  e32_devid;
   WORD  e32_ddkver;
-} IMAGE_VXD_HEADER32, *PIMAGE_VXD_HEADER32;
+} IMAGE_VXD_HEADER, *PIMAGE_VXD_HEADER;
 
 /***********************************************************************
  * Callbacks
  */
 
-typedef BOOL32 (CALLBACK *PIMAGEHLP_STATUS_ROUTINE32)(
-  IMAGEHLP_STATUS_REASON32 Reason, LPSTR ImageName, LPSTR DllName,
+typedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE)(
+  IMAGEHLP_STATUS_REASON Reason, LPSTR ImageName, LPSTR DllName,
   ULONG Va, ULONG Parameter
 );
 
-typedef BOOL32 (CALLBACK *PSYM_ENUMMODULES_CALLBACK32)(
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(
   LPSTR ModuleName, ULONG BaseOfDll, PVOID UserContext
 );
 
-typedef BOOL32 (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK32)(
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(
   LPSTR SymbolName, ULONG SymbolAddress, ULONG SymbolSize, 
   PVOID UserContext
 );
 
-typedef BOOL32 (CALLBACK *PENUMLOADED_MODULES_CALLBACK32)(
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(
   LPSTR ModuleName, ULONG ModuleBase, ULONG ModuleSize, 
   PVOID UserContext
 );
 
-typedef BOOL32 (CALLBACK *PSYMBOL_REGISTERED_CALLBACK32)(
-  HANDLE32 hProcess, ULONG ActionCode, PVOID CallbackData,
+typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(
+  HANDLE hProcess, ULONG ActionCode, PVOID CallbackData,
   PVOID UserContext
 );
 
-typedef BOOL32 (CALLBACK *DIGEST_FUNCTION32)(
-  DIGEST_HANDLE32 refdata, PBYTE pData, DWORD dwLength
+typedef BOOL (CALLBACK *DIGEST_FUNCTION)(
+  DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength
 );
 
-typedef BOOL32 (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE32)(
-  HANDLE32  hProcess, PCVOID lpBaseAddress, PVOID lpBuffer,
+typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(
+  HANDLE  hProcess, PCVOID lpBaseAddress, PVOID lpBuffer,
   DWORD nSize, PDWORD lpNumberOfBytesRead
 );
 
-typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE32)(
-  HANDLE32 hProcess, DWORD AddrBase
+typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(
+  HANDLE hProcess, DWORD AddrBase
 );
 
-typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE32)(
-  HANDLE32 hProcess, DWORD ReturnAddress);
+typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(
+  HANDLE hProcess, DWORD ReturnAddress);
 
-typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE32)(
-  HANDLE32 hProcess, HANDLE32 hThread, PADDRESS32 lpaddr
+typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(
+  HANDLE hProcess, HANDLE hThread, PADDRESS lpaddr
 );
 
 /***********************************************************************
  * Functions
  */
 
-BOOL32 WINAPI BindImage32(
+BOOL WINAPI BindImage(
   LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath
 );
-BOOL32 WINAPI BindImageEx32(
+BOOL WINAPI BindImageEx(
   DWORD Flags, LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath,
-  PIMAGEHLP_STATUS_ROUTINE32 StatusRoutine
+  PIMAGEHLP_STATUS_ROUTINE StatusRoutine
 );
-PIMAGE_NT_HEADERS32 WINAPI CheckSumMappedFile32(
+PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile(
   LPVOID BaseAddress, DWORD FileLength, 
   LPDWORD HeaderSum, LPDWORD CheckSum
 );
-BOOL32 WINAPI EnumerateLoadedModules32(
-  HANDLE32 hProcess,
-  PENUMLOADED_MODULES_CALLBACK32 EnumLoadedModulesCallback,
+BOOL WINAPI EnumerateLoadedModules(
+  HANDLE hProcess,
+  PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
   PVOID UserContext
 );
-HANDLE32 WINAPI FindDebugInfoFile32(
+HANDLE WINAPI FindDebugInfoFile(
   LPSTR FileName, LPSTR SymbolPath, LPSTR DebugFilePath
 );
-HANDLE32 WINAPI FindExecutableImage32(
+HANDLE WINAPI FindExecutableImage(
   LPSTR FileName, LPSTR SymbolPath, LPSTR ImageFilePath
 );
-BOOL32 WINAPI GetImageConfigInformation32(
-  PLOADED_IMAGE32 LoadedImage, 
-  PIMAGE_LOAD_CONFIG_DIRECTORY32 ImageConfigInformation
+BOOL WINAPI GetImageConfigInformation(
+  PLOADED_IMAGE LoadedImage, 
+  PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
 );
-DWORD WINAPI GetImageUnusedHeaderBytes32(
-  PLOADED_IMAGE32 LoadedImage,
+DWORD WINAPI GetImageUnusedHeaderBytes(
+  PLOADED_IMAGE LoadedImage,
   LPDWORD SizeUnusedHeaderBytes
 );
-DWORD WINAPI GetTimestampForLoadedLibrary32(
-  HMODULE32 Module
+DWORD WINAPI GetTimestampForLoadedLibrary(
+  HMODULE Module
 );
-BOOL32 WINAPI ImageAddCertificate32(
-  HANDLE32 FileHandle, PWIN_CERTIFICATE32 Certificate, PDWORD Index
+BOOL WINAPI ImageAddCertificate(
+  HANDLE FileHandle, PWIN_CERTIFICATE Certificate, PDWORD Index
 );
-PVOID WINAPI ImageDirectoryEntryToData32(
+PVOID WINAPI ImageDirectoryEntryToData(
   PVOID Base, BOOLEAN MappedAsImage, USHORT DirectoryEntry, PULONG Size
 );
-BOOL32 WINAPI ImageEnumerateCertificates32(
-  HANDLE32 FileHandle, WORD TypeFilter, PDWORD CertificateCount,
+BOOL WINAPI ImageEnumerateCertificates(
+  HANDLE FileHandle, WORD TypeFilter, PDWORD CertificateCount,
   PDWORD Indices, DWORD IndexCount
 );
-BOOL32 WINAPI ImageGetCertificateData32(
-  HANDLE32 FileHandle, DWORD CertificateIndex,
-  PWIN_CERTIFICATE32 Certificate, PDWORD RequiredLength
+BOOL WINAPI ImageGetCertificateData(
+  HANDLE FileHandle, DWORD CertificateIndex,
+  PWIN_CERTIFICATE Certificate, PDWORD RequiredLength
 );
-BOOL32 WINAPI ImageGetCertificateHeader32(
-  HANDLE32 FileHandle, DWORD CertificateIndex,
-  PWIN_CERTIFICATE32 Certificateheader
+BOOL WINAPI ImageGetCertificateHeader(
+  HANDLE FileHandle, DWORD CertificateIndex,
+  PWIN_CERTIFICATE Certificateheader
 );
-BOOL32 WINAPI ImageGetDigestStream32(
-  HANDLE32 FileHandle, DWORD DigestLevel,
-  DIGEST_FUNCTION32 DigestFunction, DIGEST_HANDLE32 DigestHandle
+BOOL WINAPI ImageGetDigestStream(
+  HANDLE FileHandle, DWORD DigestLevel,
+  DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle
 );
-PLOADED_IMAGE32 WINAPI ImageLoad32(
+PLOADED_IMAGE WINAPI ImageLoad(
   LPSTR DllName, LPSTR DllPath
 );
-PIMAGE_NT_HEADERS32 WINAPI ImageNtHeader32(
+PIMAGE_NT_HEADERS WINAPI ImageNtHeader(
   PVOID Base
 );
-BOOL32 WINAPI ImageRemoveCertificate32(
-  HANDLE32 FileHandle, DWORD Index
+BOOL WINAPI ImageRemoveCertificate(
+  HANDLE FileHandle, DWORD Index
 );
-PIMAGE_SECTION_HEADER32 WINAPI ImageRvaToSection32(
-  PIMAGE_NT_HEADERS32 NtHeaders, PVOID Base, ULONG Rva
+PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(
+  PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva
 );
-PVOID WINAPI ImageRvaToVa32(
-  PIMAGE_NT_HEADERS32 NtHeaders, PVOID Base, ULONG Rva,
-  PIMAGE_SECTION_HEADER32 *LastRvaSection
+PVOID WINAPI ImageRvaToVa(
+  PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva,
+  PIMAGE_SECTION_HEADER *LastRvaSection
 );
-BOOL32 WINAPI ImageUnload32(
-  PLOADED_IMAGE32 LoadedImage
+BOOL WINAPI ImageUnload(
+  PLOADED_IMAGE LoadedImage
 );
-PAPI_VERSION32 WINAPI ImagehlpApiVersion32(
+PAPI_VERSION WINAPI ImagehlpApiVersion(
   void 
 );
-PAPI_VERSION32 WINAPI ImagehlpApiVersionEx32(
-  PAPI_VERSION32 AppVersion
+PAPI_VERSION WINAPI ImagehlpApiVersionEx(
+  PAPI_VERSION AppVersion
 );
-BOOL32 WINAPI MakeSureDirectoryPathExists32(
+BOOL WINAPI MakeSureDirectoryPathExists(
   LPCSTR DirPath
 );
-BOOL32 WINAPI MapAndLoad32(
-  LPSTR ImageName, LPSTR DllPath, PLOADED_IMAGE32 LoadedImage,
-  BOOL32 DotDll, BOOL32 ReadOnly
+BOOL WINAPI MapAndLoad(
+  LPSTR ImageName, LPSTR DllPath, PLOADED_IMAGE LoadedImage,
+  BOOL DotDll, BOOL ReadOnly
 );
-PIMAGE_DEBUG_INFORMATION32 WINAPI MapDebugInformation32(
-  HANDLE32 FileHandle, LPSTR FileName,
+PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(
+  HANDLE FileHandle, LPSTR FileName,
   LPSTR SymbolPath, DWORD ImageBase
 );
-DWORD WINAPI MapFileAndCheckSum32A(
+DWORD WINAPI MapFileAndCheckSumA(
   LPSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum
 );
-DWORD WINAPI MapFileAndCheckSum32W(
+DWORD WINAPI MapFileAndCheckSumW(
   LPWSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum
 );
-BOOL32 WINAPI ReBaseImage32(
-  LPSTR CurrentImageName, LPSTR SymbolPath, BOOL32 fReBase,
-  BOOL32 fRebaseSysfileOk, BOOL32 fGoingDown, ULONG CheckImageSize,
+BOOL WINAPI ReBaseImage(
+  LPSTR CurrentImageName, LPSTR SymbolPath, BOOL fReBase,
+  BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize,
   ULONG *OldImageSize, ULONG *OldImageBase, ULONG *NewImageSize,
   ULONG *NewImageBase, ULONG TimeStamp
 );
-BOOL32 WINAPI RemovePrivateCvSymbolic32(
+BOOL WINAPI RemovePrivateCvSymbolic(
   PCHAR DebugData, PCHAR *NewDebugData, ULONG *NewDebugSize
 );
-VOID WINAPI RemoveRelocations32(
+VOID WINAPI RemoveRelocations(
   PCHAR ImageName
 );
-BOOL32 WINAPI SearchTreeForFile32(
+BOOL WINAPI SearchTreeForFile(
   LPSTR RootPath, LPSTR InputPathName, LPSTR OutputPathBuffer
 );
-BOOL32 WINAPI SetImageConfigInformation32(
-  PLOADED_IMAGE32 LoadedImage,
-  PIMAGE_LOAD_CONFIG_DIRECTORY32 ImageConfigInformation
+BOOL WINAPI SetImageConfigInformation(
+  PLOADED_IMAGE LoadedImage,
+  PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
 );
-BOOL32 WINAPI SplitSymbols32(
+BOOL WINAPI SplitSymbols(
   LPSTR ImageName, LPSTR SymbolsPath, 
   LPSTR SymbolFilePath, DWORD Flags
 );
-BOOL32 WINAPI StackWalk32(
-  DWORD MachineType, HANDLE32 hProcess, HANDLE32 hThread,
-  PSTACKFRAME32 StackFrame, PVOID ContextRecord,
-  PREAD_PROCESS_MEMORY_ROUTINE32 ReadMemoryRoutine,
-  PFUNCTION_TABLE_ACCESS_ROUTINE32 FunctionTableAccessRoutine,
-  PGET_MODULE_BASE_ROUTINE32 GetModuleBaseRoutine,
-  PTRANSLATE_ADDRESS_ROUTINE32 TranslateAddress
+BOOL WINAPI StackWalk(
+  DWORD MachineType, HANDLE hProcess, HANDLE hThread,
+  PSTACKFRAME StackFrame, PVOID ContextRecord,
+  PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,
+  PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
+  PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
+  PTRANSLATE_ADDRESS_ROUTINE TranslateAddress
 );
-BOOL32 WINAPI SymCleanup32(
-  HANDLE32 hProcess
+BOOL WINAPI SymCleanup(
+  HANDLE hProcess
 );
-BOOL32 WINAPI SymEnumerateModules32(
-  HANDLE32 hProcess, PSYM_ENUMMODULES_CALLBACK32 EnumModulesCallback,
+BOOL WINAPI SymEnumerateModules(
+  HANDLE hProcess, PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
   PVOID UserContext
 );
-BOOL32 WINAPI SymEnumerateSymbols32(
-  HANDLE32 hProcess, DWORD BaseOfDll,
-  PSYM_ENUMSYMBOLS_CALLBACK32 EnumSymbolsCallback, PVOID UserContext
+BOOL WINAPI SymEnumerateSymbols(
+  HANDLE hProcess, DWORD BaseOfDll,
+  PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext
 );
-PVOID WINAPI SymFunctionTableAccess32(
-  HANDLE32 hProcess, DWORD AddrBase
+PVOID WINAPI SymFunctionTableAccess(
+  HANDLE hProcess, DWORD AddrBase
 );
-DWORD WINAPI SymGetModuleBase32(
-  HANDLE32 hProcess, DWORD dwAddr
+DWORD WINAPI SymGetModuleBase(
+  HANDLE hProcess, DWORD dwAddr
 );
-BOOL32 WINAPI SymGetModuleInfo32(
-  HANDLE32 hProcess, DWORD dwAddr,
-  PIMAGEHLP_MODULE32 ModuleInfo
+BOOL WINAPI SymGetModuleInfo(
+  HANDLE hProcess, DWORD dwAddr,
+  PIMAGEHLP_MODULE ModuleInfo
 );
-DWORD WINAPI SymGetOptions32(
+DWORD WINAPI SymGetOptions(
   void
 );
-BOOL32 WINAPI SymGetSearchPath32(
-  HANDLE32 hProcess, LPSTR szSearchPath, DWORD SearchPathLength
+BOOL WINAPI SymGetSearchPath(
+  HANDLE hProcess, LPSTR szSearchPath, DWORD SearchPathLength
 );
-BOOL32 WINAPI SymGetSymFromAddr32(
-  HANDLE32 hProcess, DWORD dwAddr,
-  PDWORD pdwDisplacement, PIMAGEHLP_SYMBOL32 Symbol
+BOOL WINAPI SymGetSymFromAddr(
+  HANDLE hProcess, DWORD dwAddr,
+  PDWORD pdwDisplacement, PIMAGEHLP_SYMBOL Symbol
 );
-BOOL32 WINAPI SymGetSymFromName32(
-  HANDLE32 hProcess, LPSTR Name, PIMAGEHLP_SYMBOL32 Symbol
+BOOL WINAPI SymGetSymFromName(
+  HANDLE hProcess, LPSTR Name, PIMAGEHLP_SYMBOL Symbol
 );
-BOOL32 WINAPI SymGetSymNext32(
-  HANDLE32 hProcess, PIMAGEHLP_SYMBOL32 Symbol
+BOOL WINAPI SymGetSymNext(
+  HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol
 );
-BOOL32 WINAPI SymGetSymPrev32(
-  HANDLE32 hProcess, PIMAGEHLP_SYMBOL32 Symbol
+BOOL WINAPI SymGetSymPrev(
+  HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol
 );
-BOOL32 WINAPI SymInitialize32(
-  HANDLE32 hProcess, LPSTR UserSearchPath, BOOL32 fInvadeProcess
+BOOL WINAPI SymInitialize(
+  HANDLE hProcess, LPSTR UserSearchPath, BOOL fInvadeProcess
 );
-BOOL32 WINAPI SymLoadModule32(
-  HANDLE32 hProcess, HANDLE32 hFile, LPSTR ImageName, LPSTR ModuleName,
+BOOL WINAPI SymLoadModule(
+  HANDLE hProcess, HANDLE hFile, LPSTR ImageName, LPSTR ModuleName,
   DWORD BaseOfDll, DWORD SizeOfDll
 );
-BOOL32 WINAPI SymRegisterCallback32(
-  HANDLE32 hProcess, PSYMBOL_REGISTERED_CALLBACK32 CallbackFunction,
+BOOL WINAPI SymRegisterCallback(
+  HANDLE hProcess, PSYMBOL_REGISTERED_CALLBACK CallbackFunction,
   PVOID UserContext
 );
-DWORD WINAPI SymSetOptions32(
+DWORD WINAPI SymSetOptions(
   DWORD SymOptions
 );
-BOOL32 WINAPI SymSetSearchPath32(
-  HANDLE32 hProcess, LPSTR szSearchPath
+BOOL WINAPI SymSetSearchPath(
+  HANDLE hProcess, LPSTR szSearchPath
 );
-BOOL32 WINAPI SymUnDName32(
-  PIMAGEHLP_SYMBOL32 sym, LPSTR UnDecName, DWORD UnDecNameLength
+BOOL WINAPI SymUnDName(
+  PIMAGEHLP_SYMBOL sym, LPSTR UnDecName, DWORD UnDecNameLength
 );
-BOOL32 WINAPI SymUnloadModule32(
-  HANDLE32 hProcess, DWORD BaseOfDll
+BOOL WINAPI SymUnloadModule(
+  HANDLE hProcess, DWORD BaseOfDll
 );
-BOOL32 WINAPI TouchFileTimes32(
-  HANDLE32 FileHandle, LPSYSTEMTIME lpSystemTime
+BOOL WINAPI TouchFileTimes(
+  HANDLE FileHandle, LPSYSTEMTIME lpSystemTime
 );
-DWORD WINAPI UnDecorateSymbolName32(
+DWORD WINAPI UnDecorateSymbolName(
   LPCSTR DecoratedName, LPSTR UnDecoratedName,
   DWORD UndecoratedLength, DWORD Flags
 );
-BOOL32 WINAPI UnMapAndLoad32(
-  PLOADED_IMAGE32 LoadedImage
+BOOL WINAPI UnMapAndLoad(
+  PLOADED_IMAGE LoadedImage
 );
-BOOL32 WINAPI UnmapDebugInformation32(
-  PIMAGE_DEBUG_INFORMATION32 DebugInfo
+BOOL WINAPI UnmapDebugInformation(
+  PIMAGE_DEBUG_INFORMATION DebugInfo
 );
-BOOL32 WINAPI UpdateDebugInfoFile32(
+BOOL WINAPI UpdateDebugInfoFile(
   LPSTR ImageFileName, LPSTR SymbolPath,
-  LPSTR DebugFilePath, PIMAGE_NT_HEADERS32 NtHeaders
+  LPSTR DebugFilePath, PIMAGE_NT_HEADERS NtHeaders
 );
-BOOL32 WINAPI UpdateDebugInfoFileEx32(
+BOOL WINAPI UpdateDebugInfoFileEx(
   LPSTR ImageFileName, LPSTR SymbolPath, LPSTR DebugFilePath,
-  PIMAGE_NT_HEADERS32 NtHeaders, DWORD OldChecksum
+  PIMAGE_NT_HEADERS NtHeaders, DWORD OldChecksum
 );
 
 /***********************************************************************
  * Wine specific
  */
 
-extern HANDLE32 IMAGEHLP_hHeap32;
+extern HANDLE IMAGEHLP_hHeap;
 
 #endif  /* __WINE_IMAGEHLP_H */
 
diff --git a/include/imagelist.h b/include/imagelist.h
index 7db2bfa..9bc4cd0 100644
--- a/include/imagelist.h
+++ b/include/imagelist.h
@@ -11,21 +11,21 @@
 
 struct _IMAGELIST
 {
-    HBITMAP32 hbmImage;
-    HBITMAP32 hbmMask;
-    HBRUSH32  hbrBlend25;
-    HBRUSH32  hbrBlend50;
+    HBITMAP hbmImage;
+    HBITMAP hbmMask;
+    HBRUSH  hbrBlend25;
+    HBRUSH  hbrBlend50;
     COLORREF  clrBk;
     COLORREF  clrFg;
-    INT32     cInitial;
-    INT32     cGrow;
-    INT32     cMaxImage;
-    INT32     cCurImage;
-    INT32     cx;
-    INT32     cy;
-    UINT32    flags;
-    UINT32    uBitsPixel;
-    INT32     nOvlIdx[15];
+    INT     cInitial;
+    INT     cGrow;
+    INT     cMaxImage;
+    INT     cCurImage;
+    INT     cx;
+    INT     cy;
+    UINT    flags;
+    UINT    uBitsPixel;
+    INT     nOvlIdx[15];
 };
  
 typedef struct _IMAGELIST *HIMAGELIST;
diff --git a/include/imm.h b/include/imm.h
index 31ee343..b1d5964 100644
--- a/include/imm.h
+++ b/include/imm.h
@@ -7,10 +7,10 @@
 
 #include "wintypes.h"
 
-typedef HANDLE32 HIMC32;
-typedef HANDLE32 HIMCC32;
+typedef HANDLE HIMC;
+typedef HANDLE HIMCC;
 
-typedef HKL32 *LPHKL32;
+typedef HKL *LPHKL;
 
 typedef int (CALLBACK *REGISTERWORDENUMPROCA)(LPCSTR, DWORD, LPCSTR, LPVOID);
 typedef int (CALLBACK *REGISTERWORDENUMPROCW)(LPCWSTR, DWORD, LPCWSTR, LPVOID);
diff --git a/include/input.h b/include/input.h
index 45e2405..63bf4b2 100644
--- a/include/input.h
+++ b/include/input.h
@@ -7,8 +7,8 @@
 #ifndef __WINE_INPUT_H
 #define __WINE_INPUT_H
 
-extern BOOL32 MouseButtonsStates[3];
-extern BOOL32 AsyncMouseButtonsStates[3];
+extern BOOL MouseButtonsStates[3];
+extern BOOL AsyncMouseButtonsStates[3];
 extern BYTE InputKeyStateTable[256];
 extern BYTE QueueKeyStateTable[256];
 extern BYTE AsyncKeyStateTable[256];
diff --git a/include/ipaddress.h b/include/ipaddress.h
index 1c2a336..943b244 100644
--- a/include/ipaddress.h
+++ b/include/ipaddress.h
@@ -13,17 +13,17 @@
 	BYTE LowerLimit[4];
 	BYTE UpperLimit[4];
 
-	RECT32 	rcClient;
-	INT32	uFocus;
+	RECT 	rcClient;
+	INT	uFocus;
 } IPADDRESS_INFO;
 
 typedef struct tagIP_SUBCLASS_INFO
 {
-    WNDPROC32 wpOrigProc[4];
-    HWND32    hwndIP[4];
+    WNDPROC wpOrigProc[4];
+    HWND    hwndIP[4];
 	IPADDRESS_INFO *infoPtr;
 	WND 	  *wndPtr;
-    UINT32    uRefCount;
+    UINT    uRefCount;
 } IP_SUBCLASS_INFO, *LPIP_SUBCLASS_INFO;
 
 
diff --git a/include/k32obj.h b/include/k32obj.h
index 5294144..f9a00d5 100644
--- a/include/k32obj.h
+++ b/include/k32obj.h
@@ -53,11 +53,11 @@
 
 extern void K32OBJ_IncCount( K32OBJ *ptr );
 extern void K32OBJ_DecCount( K32OBJ *ptr );
-extern BOOL32 K32OBJ_IsValid( K32OBJ *ptr, K32OBJ_TYPE type );
-extern BOOL32 K32OBJ_AddName( K32OBJ *obj, LPCSTR name );
+extern BOOL K32OBJ_IsValid( K32OBJ *ptr, K32OBJ_TYPE type );
+extern BOOL K32OBJ_AddName( K32OBJ *obj, LPCSTR name );
 extern K32OBJ *K32OBJ_Create( K32OBJ_TYPE type, DWORD size, LPCSTR name,
                               int server_handle, DWORD access,
-                              SECURITY_ATTRIBUTES *sa, HANDLE32 *handle );
+                              SECURITY_ATTRIBUTES *sa, HANDLE *handle );
 extern K32OBJ *K32OBJ_FindName( LPCSTR name );
 extern K32OBJ *K32OBJ_FindNameType( LPCSTR name, K32OBJ_TYPE type );
 
diff --git a/include/libres.h b/include/libres.h
index 6b1e57d..593b044 100644
--- a/include/libres.h
+++ b/include/libres.h
@@ -6,8 +6,8 @@
 
 #include "wintypes.h"
 
-extern HRSRC32 LIBRES_FindResource( HINSTANCE32 hModule, LPCWSTR name, LPCWSTR type );
-extern HGLOBAL32 LIBRES_LoadResource( HINSTANCE32 hModule, HRSRC32 hRsrc );
-extern DWORD LIBRES_SizeofResource( HINSTANCE32 hModule, HRSRC32 hRsrc );
+extern HRSRC LIBRES_FindResource( HINSTANCE hModule, LPCWSTR name, LPCWSTR type );
+extern HGLOBAL LIBRES_LoadResource( HINSTANCE hModule, HRSRC hRsrc );
+extern DWORD LIBRES_SizeofResource( HINSTANCE hModule, HRSRC hRsrc );
 
 #endif /* __WINE_LIBRES_H */
diff --git a/include/listview.h b/include/listview.h
index f027c96..55ab3b5 100644
--- a/include/listview.h
+++ b/include/listview.h
@@ -10,11 +10,11 @@
 
 typedef struct tagLISTVIEW_ITEM
 {
-    UINT32 state;
+    UINT state;
     LPSTR  pszText;
-    INT32  iImage;
+    INT  iImage;
     LPARAM lParam;
-    INT32  iIndent;
+    INT  iIndent;
 
 } LISTVIEW_ITEM;
 
@@ -27,20 +27,20 @@
     HIMAGELIST himlNormal;
     HIMAGELIST himlSmall;
     HIMAGELIST himlState;
-  BOOL32 bLButtonDown;
-  BOOL32 bRButtonDown;
-    INT32      nColumnCount;
-  INT32 nFocusedItem;
-  INT32 nItemCount;
-  INT32 nItemHeight;
-  INT32 nColumnWidth;
-  INT32 nSelectionMark;
-    HWND32     hwndHeader;
-    HFONT32    hDefaultFont;
-    HFONT32    hFont;
-  INT32 nWidth;
-  INT32 nHeight;
-    BOOL32     bFocus;
+  BOOL bLButtonDown;
+  BOOL bRButtonDown;
+    INT      nColumnCount;
+  INT nFocusedItem;
+  INT nItemCount;
+  INT nItemHeight;
+  INT nColumnWidth;
+  INT nSelectionMark;
+    HWND     hwndHeader;
+    HFONT    hDefaultFont;
+    HFONT    hFont;
+  INT nWidth;
+  INT nHeight;
+    BOOL     bFocus;
     DWORD      dwExStyle;    /* extended listview style */
     HDPA       hdpaItems;
 
diff --git a/include/lzexpand.h b/include/lzexpand.h
index e3198fb..95b0a3e 100644
--- a/include/lzexpand.h
+++ b/include/lzexpand.h
@@ -20,33 +20,26 @@
 
 VOID        WINAPI LZDone(void);
 LONG        WINAPI CopyLZFile16(HFILE16,HFILE16);
-LONG        WINAPI CopyLZFile32(HFILE32,HFILE32);
-#define     CopyLZFile WINELIB_NAME(CopyLZFile)
+LONG        WINAPI CopyLZFile(HFILE,HFILE);
 HFILE16     WINAPI LZOpenFile16(LPCSTR,LPOFSTRUCT,UINT16);
-HFILE32     WINAPI LZOpenFile32A(LPCSTR,LPOFSTRUCT,UINT32);
-HFILE32     WINAPI LZOpenFile32W(LPCWSTR,LPOFSTRUCT,UINT32);
+HFILE     WINAPI LZOpenFileA(LPCSTR,LPOFSTRUCT,UINT);
+HFILE     WINAPI LZOpenFileW(LPCWSTR,LPOFSTRUCT,UINT);
 #define     LZOpenFile WINELIB_NAME_AW(LZOpenFile)
 INT16       WINAPI LZRead16(HFILE16,LPVOID,UINT16); 
-INT32       WINAPI LZRead32(HFILE32,LPVOID,UINT32); 
-#define     LZRead WINELIB_NAME(LZRead)
+INT       WINAPI LZRead(HFILE,LPVOID,UINT); 
 INT16       WINAPI LZStart16(void);
-INT32       WINAPI LZStart32(void);
-#define     LZStart WINELIB_NAME(LZStart)
+INT       WINAPI LZStart(void);
 void        WINAPI LZClose16(HFILE16);
-void        WINAPI LZClose32(HFILE32);
-#define     LZClose WINELIB_NAME(LZClose)
+void        WINAPI LZClose(HFILE);
 LONG        WINAPI LZCopy16(HFILE16,HFILE16);
-LONG        WINAPI LZCopy32(HFILE32,HFILE32);
-#define     LZCopy WINELIB_NAME(LZCopy)
+LONG        WINAPI LZCopy(HFILE,HFILE);
 HFILE16     WINAPI LZInit16(HFILE16);
-HFILE32     WINAPI LZInit32(HFILE32);
-#define     LZInit WINELIB_NAME(LZInit)
+HFILE     WINAPI LZInit(HFILE);
 LONG        WINAPI LZSeek16(HFILE16,LONG,INT16);
-LONG        WINAPI LZSeek32(HFILE32,LONG,INT32);
-#define     LZSeek WINELIB_NAME(LZSeek)
+LONG        WINAPI LZSeek(HFILE,LONG,INT);
 INT16       WINAPI GetExpandedName16(LPCSTR,LPSTR);
-INT32       WINAPI GetExpandedName32A(LPCSTR,LPSTR);
-INT32       WINAPI GetExpandedName32W(LPCWSTR,LPWSTR);
+INT       WINAPI GetExpandedNameA(LPCSTR,LPSTR);
+INT       WINAPI GetExpandedNameW(LPCWSTR,LPWSTR);
 #define     GetExpandedName WINELIB_NAME_AW(GetExpandedName)
 
 #endif  /* __WINE_LZEXPAND_H */
diff --git a/include/main.h b/include/main.h
index b6bf44d..6cd61ab 100644
--- a/include/main.h
+++ b/include/main.h
@@ -6,19 +6,19 @@
 #define __WINE_MAIN_H
 
 extern void MAIN_Usage(char*);
-extern BOOL32 MAIN_MainInit(void);
-extern BOOL32 MAIN_WineInit( int *argc, char *argv[] );
-extern HINSTANCE32 MAIN_WinelibInit( int *argc, char *argv[] );
+extern BOOL MAIN_MainInit(void);
+extern BOOL MAIN_WineInit( int *argc, char *argv[] );
+extern HINSTANCE MAIN_WinelibInit( int *argc, char *argv[] );
 extern int MAIN_GetLanguageID(char*lang, char*country, char*charset, char*dialect);
-extern BOOL32 MAIN_ParseDebugOptions(char *options);
+extern BOOL MAIN_ParseDebugOptions(char *options);
 
 extern void MAIN_ParseLanguageOption( char *arg );
 extern void MAIN_ParseModeOption( char *arg );
 
-extern BOOL32 RELAY_Init(void);
+extern BOOL RELAY_Init(void);
 extern int RELAY_ShowDebugmsgRelay(const char *func);
 extern void* CALL32_Init(void);
 
-extern BOOL32 THUNK_Init(void);
+extern BOOL THUNK_Init(void);
 
 #endif  /* __WINE_MAIN_H */
diff --git a/include/mdi.h b/include/mdi.h
index 074d458..ee872cd 100644
--- a/include/mdi.h
+++ b/include/mdi.h
@@ -20,26 +20,26 @@
 
 #define WM_MDICALCCHILDSCROLL   0x10AC /* this is exactly what Windows uses */
 
-extern LRESULT WINAPI MDIClientWndProc( HWND32 hwnd, UINT32 message, 
-                                        WPARAM32 wParam, LPARAM lParam );
+extern LRESULT WINAPI MDIClientWndProc( HWND hwnd, UINT message, 
+                                        WPARAM wParam, LPARAM lParam );
 
 typedef struct 
 {
-    UINT32      nActiveChildren;
-    HWND32      hwndChildMaximized;
-    HWND32      hwndActiveChild;
-    HMENU32     hWindowMenu;
-    UINT32      idFirstChild;
+    UINT      nActiveChildren;
+    HWND      hwndChildMaximized;
+    HWND      hwndActiveChild;
+    HMENU     hWindowMenu;
+    UINT      idFirstChild;
     LPSTR       frameTitle;
-    UINT32      nTotalCreated;
-    UINT32      mdiFlags;
-    UINT32      sbRecalc;   /* SB_xxx flags for scrollbar fixup */
-    HWND32      self;
+    UINT      nTotalCreated;
+    UINT      mdiFlags;
+    UINT      sbRecalc;   /* SB_xxx flags for scrollbar fixup */
+    HWND      self;
 } MDICLIENTINFO;
 
-extern HWND32  MDI_CreateMDIWindow32A(LPCSTR,LPCSTR,DWORD,INT32,INT32,
-                                INT32,INT32,HWND32,HINSTANCE32,LPARAM);
-extern HWND32  MDI_CreateMDIWindow32W(LPCWSTR,LPCWSTR,DWORD,INT32,INT32,
-                                INT32,INT32,HWND32,HINSTANCE32,LPARAM);
+extern HWND  MDI_CreateMDIWindowA(LPCSTR,LPCSTR,DWORD,INT,INT,
+                                INT,INT,HWND,HINSTANCE,LPARAM);
+extern HWND  MDI_CreateMDIWindowW(LPCWSTR,LPCWSTR,DWORD,INT,INT,
+                                INT,INT,HWND,HINSTANCE,LPARAM);
 #endif /* __WINE_MDI_H */
 
diff --git a/include/menu.h b/include/menu.h
index e7fdc61..e071a01 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -11,14 +11,14 @@
 #define MAGIC_RESTORE 2
 #define MAGIC_CLOSE   5
 
-extern BOOL32 MENU_Init(void);
-extern HMENU32 MENU_GetSysMenu(HWND32 hWndOwner, HMENU32 hSysPopup);
-extern UINT32 MENU_GetMenuBarHeight( HWND32 hwnd, UINT32 menubarWidth,
-                                     INT32 orgX, INT32 orgY );
-extern BOOL32 MENU_PatchResidentPopup( HQUEUE16, WND* );
-extern void MENU_TrackMouseMenuBar( WND *wnd, INT32 ht, POINT32 pt );
-extern void MENU_TrackKbdMenuBar( WND *wnd, UINT32 wParam, INT32 vkey );
-extern UINT32 MENU_DrawMenuBar( HDC32 hDC, LPRECT32 lprect,
-                                HWND32 hwnd, BOOL32 suppress_draw );
+extern BOOL MENU_Init(void);
+extern HMENU MENU_GetSysMenu(HWND hWndOwner, HMENU hSysPopup);
+extern UINT MENU_GetMenuBarHeight( HWND hwnd, UINT menubarWidth,
+                                     INT orgX, INT orgY );
+extern BOOL MENU_PatchResidentPopup( HQUEUE16, WND* );
+extern void MENU_TrackMouseMenuBar( WND *wnd, INT ht, POINT pt );
+extern void MENU_TrackKbdMenuBar( WND *wnd, UINT wParam, INT vkey );
+extern UINT MENU_DrawMenuBar( HDC hDC, LPRECT lprect,
+                                HWND hwnd, BOOL suppress_draw );
 
 #endif /* __WINE_MENU_H */
diff --git a/include/message.h b/include/message.h
index a6c8dd2..77c9dad 100644
--- a/include/message.h
+++ b/include/message.h
@@ -13,18 +13,18 @@
 extern DWORD MSG_WineStartTicks;  /* Ticks at Wine startup */
 
 /* message.c */
-extern BOOL32 MSG_InternalGetMessage( MSG32 *msg, HWND32 hwnd,
-                                      HWND32 hwndOwner, WPARAM32 code,
-                                      WORD flags, BOOL32 sendIdle );
+extern BOOL MSG_InternalGetMessage( MSG *msg, HWND hwnd,
+                                      HWND hwndOwner, WPARAM code,
+                                      WORD flags, BOOL sendIdle );
 
 /* timer.c */
-extern void TIMER_RemoveWindowTimers( HWND32 hwnd );
+extern void TIMER_RemoveWindowTimers( HWND hwnd );
 extern void TIMER_RemoveQueueTimers( HQUEUE16 hqueue );
 extern void TIMER_SwitchQueue( HQUEUE16 hOldQueue, HQUEUE16 hNewQueue );
 extern LONG TIMER_GetNextExpiration(void);
 extern void TIMER_ExpireTimers(void);
-extern BOOL32 TIMER_GetTimerMsg( MSG32 *msg, HWND32 hwnd,
-                                 HQUEUE16 hQueue, BOOL32 remove );
+extern BOOL TIMER_GetTimerMsg( MSG *msg, HWND hwnd,
+                                 HQUEUE16 hQueue, BOOL remove );
 
 #define EVENT_IO_READ		0
 #define EVENT_IO_WRITE		1
@@ -33,34 +33,34 @@
 /* event.c */
 
 typedef struct _EVENT_DRIVER {
-  BOOL32 (*pInit)(void);
+  BOOL (*pInit)(void);
   void   (*pAddIO)(int, unsigned);
   void   (*pDeleteIO)(int, unsigned);
-  BOOL32 (*pWaitNetEvent)(BOOL32, BOOL32);
+  BOOL (*pWaitNetEvent)(BOOL, BOOL);
   void   (*pSynchronize)(void);
-  BOOL32 (*pCheckFocus)(void);
-  BOOL32 (*pQueryPointer)(DWORD *, DWORD *, DWORD *);
+  BOOL (*pCheckFocus)(void);
+  BOOL (*pQueryPointer)(DWORD *, DWORD *, DWORD *);
   void   (*pDummyMotionNotify)(void);
-  BOOL32 (*pPending)(void);
+  BOOL (*pPending)(void);
   BOOL16 (*pIsUserIdle)(void);
   void   (*pWakeUp)(void);
 } EVENT_DRIVER;
 
 extern void EVENT_AddIO( int fd, unsigned flag );
 extern void EVENT_DeleteIO( int fd, unsigned flag );
-extern BOOL32 EVENT_Init( void );
-extern BOOL32 EVENT_WaitNetEvent( BOOL32 sleep, BOOL32 peek );
+extern BOOL EVENT_Init( void );
+extern BOOL EVENT_WaitNetEvent( BOOL sleep, BOOL peek );
 extern void EVENT_Synchronize(void);
-extern BOOL32 EVENT_CheckFocus( void );
-extern BOOL32 EVENT_QueryPointer(DWORD *posX, DWORD *posY, DWORD *state);
+extern BOOL EVENT_CheckFocus( void );
+extern BOOL EVENT_QueryPointer(DWORD *posX, DWORD *posY, DWORD *state);
 extern void EVENT_DummyMotionNotify(void);
-extern BOOL32 EVENT_Pending(void);
+extern BOOL EVENT_Pending(void);
 extern void EVENT_WakeUp(void);
 
 /* input.c */
 
-extern HWND32 EVENT_Capture( HWND32, INT16 );
-extern BOOL32 EVENT_QueryPointer( DWORD *posX, DWORD *posY, DWORD *state );
+extern HWND EVENT_Capture( HWND, INT16 );
+extern BOOL EVENT_QueryPointer( DWORD *posX, DWORD *posY, DWORD *state );
 
 extern void joySendMessages(void);
 
diff --git a/include/metafile.h b/include/metafile.h
index f334465..1abef44 100644
--- a/include/metafile.h
+++ b/include/metafile.h
@@ -14,29 +14,29 @@
 #define MFVERSION 0x300
 #define META_EOF 0x0000
 
-BOOL32 MF_MetaParam0(DC *dc, short func);
-BOOL32 MF_MetaParam1(DC *dc, short func, short param1);
-BOOL32 MF_MetaParam2(DC *dc, short func, short param1, short param2);
-BOOL32 MF_MetaParam4(DC *dc, short func, short param1, short param2, 
+BOOL MF_MetaParam0(DC *dc, short func);
+BOOL MF_MetaParam1(DC *dc, short func, short param1);
+BOOL MF_MetaParam2(DC *dc, short func, short param1, short param2);
+BOOL MF_MetaParam4(DC *dc, short func, short param1, short param2, 
 		   short param3, short param4);
-BOOL32 MF_MetaParam6(DC *dc, short func, short param1, short param2, 
+BOOL MF_MetaParam6(DC *dc, short func, short param1, short param2, 
 		   short param3, short param4, short param5, short param6);
-BOOL32 MF_MetaParam8(DC *dc, short func, short param1, short param2, 
+BOOL MF_MetaParam8(DC *dc, short func, short param1, short param2, 
 		   short param3, short param4, short param5,
 		   short param6, short param7, short param8);
-BOOL32 MF_CreateBrushIndirect(DC *dc, HBRUSH16 hBrush, LOGBRUSH16 *logbrush);
-BOOL32 MF_CreatePatternBrush(DC *dc, HBRUSH16 hBrush, LOGBRUSH16 *logbrush);
-BOOL32 MF_CreatePenIndirect(DC *dc, HPEN16 hPen, LOGPEN16 *logpen);
-BOOL32 MF_CreateFontIndirect(DC *dc, HFONT16 hFont, LOGFONT16 *logfont);
-BOOL32 MF_TextOut(DC *dc, short x, short y, LPCSTR str, short count);
-BOOL32 MF_ExtTextOut(DC *dc, short x, short y, UINT16 flags, const RECT16 *rect,
+BOOL MF_CreateBrushIndirect(DC *dc, HBRUSH16 hBrush, LOGBRUSH16 *logbrush);
+BOOL MF_CreatePatternBrush(DC *dc, HBRUSH16 hBrush, LOGBRUSH16 *logbrush);
+BOOL MF_CreatePenIndirect(DC *dc, HPEN16 hPen, LOGPEN16 *logpen);
+BOOL MF_CreateFontIndirect(DC *dc, HFONT16 hFont, LOGFONT16 *logfont);
+BOOL MF_TextOut(DC *dc, short x, short y, LPCSTR str, short count);
+BOOL MF_ExtTextOut(DC *dc, short x, short y, UINT16 flags, const RECT16 *rect,
                    LPCSTR str, short count, const INT16 *lpDx);
-BOOL32 MF_MetaPoly(DC *dc, short func, LPPOINT16 pt, short count);
-BOOL32 MF_BitBlt(DC *dcDest, short xDest, short yDest, short width,
+BOOL MF_MetaPoly(DC *dc, short func, LPPOINT16 pt, short count);
+BOOL MF_BitBlt(DC *dcDest, short xDest, short yDest, short width,
 	       short height, DC *dcSrc, short xSrc, short ySrc, DWORD rop);
-BOOL32 MF_StretchBlt(DC *dcDest, short xDest, short yDest, short widthDest,
+BOOL MF_StretchBlt(DC *dcDest, short xDest, short yDest, short widthDest,
 		   short heightDest, DC *dcSrc, short xSrc, short ySrc, 
 		   short widthSrc, short heightSrc, DWORD rop);
-INT16 MF_CreateRegion(DC *dc, HRGN32 hrgn);
+INT16 MF_CreateRegion(DC *dc, HRGN hrgn);
 #endif   /* __WINE_METAFILE_H */
 
diff --git a/include/metafiledrv.h b/include/metafiledrv.h
index 9686516..29048d1 100644
--- a/include/metafiledrv.h
+++ b/include/metafiledrv.h
@@ -18,63 +18,63 @@
 typedef struct
 {
     METAHEADER  *mh;           /* Pointer to metafile header */
-    UINT32       nextHandle;   /* Next handle number */
+    UINT       nextHandle;   /* Next handle number */
 } METAFILEDRV_PDEVICE;
 
 
 /* Metafile driver functions */
 
-extern BOOL32 MFDRV_BitBlt( struct tagDC *dcDst, INT32 xDst, INT32 yDst,
-                            INT32 width, INT32 height, struct tagDC *dcSrc,
-                            INT32 xSrc, INT32 ySrc, DWORD rop );
-extern BOOL32 MFDRV_PatBlt( struct tagDC *dc, INT32 left, INT32 top,
-                            INT32 width, INT32 height, DWORD rop );
-extern BOOL32 MFDRV_StretchBlt( struct tagDC *dcDst, INT32 xDst, INT32 yDst,
-                                INT32 widthDst, INT32 heightDst,
-                                struct tagDC *dcSrc, INT32 xSrc, INT32 ySrc,
-                                INT32 widthSrc, INT32 heightSrc, DWORD rop );
-extern INT32 MFDRV_SetMapMode( struct tagDC *dc, INT32 mode );
-extern BOOL32 MFDRV_SetViewportExt( struct tagDC *dc, INT32 x, INT32 y );
-extern BOOL32 MFDRV_SetViewportOrg( struct tagDC *dc, INT32 x, INT32 y );
-extern BOOL32 MFDRV_SetWindowExt( struct tagDC *dc, INT32 x, INT32 y );
-extern BOOL32 MFDRV_SetWindowOrg( struct tagDC *dc, INT32 x, INT32 y );
-extern BOOL32 MFDRV_OffsetViewportOrg( struct tagDC *dc, INT32 x, INT32 y );
-extern BOOL32 MFDRV_OffsetWindowOrg( struct tagDC *dc, INT32 x, INT32 y );
-extern BOOL32 MFDRV_ScaleViewportExt( struct tagDC *dc, INT32 xNum,
-                                      INT32 xDenom, INT32 yNum, INT32 yDenom );
-extern BOOL32 MFDRV_ScaleWindowExt( struct tagDC *dc, INT32 xNum, INT32 xDenom,
-                                    INT32 yNum, INT32 yDenom );
-extern BOOL32 MFDRV_MoveToEx(struct tagDC *dc, INT32 x, INT32 y, LPPOINT32 pt);
-extern BOOL32 MFDRV_LineTo( struct tagDC *dc, INT32 x, INT32 y );
-extern BOOL32 MFDRV_Arc( struct tagDC *dc, INT32 left, INT32 top, INT32 right,
-			 INT32 bottom, INT32 xstart, INT32 ystart, INT32 xend,
-			 INT32 yend );
-extern BOOL32 MFDRV_Pie( struct tagDC *dc, INT32 left, INT32 top, INT32 right,
-			 INT32 bottom, INT32 xstart, INT32 ystart, INT32 xend,
-			 INT32 yend );
-extern BOOL32 MFDRV_Chord( struct tagDC *dc, INT32 left, INT32 top, INT32 right,
-			   INT32 bottom, INT32 xstart, INT32 ystart, INT32 xend,
-			   INT32 yend );
-extern BOOL32 MFDRV_Ellipse( struct tagDC *dc, INT32 left, INT32 top,
-			     INT32 right, INT32 bottom );
-extern BOOL32 MFDRV_Rectangle( struct tagDC *dc, INT32 left, INT32 top,
-			       INT32 right, INT32 bottom);
-extern BOOL32 MFDRV_RoundRect( struct tagDC *dc, INT32 left, INT32 top,
-			       INT32 right, INT32 bottom, INT32 ell_width,
-			       INT32 ell_height );
-extern COLORREF MFDRV_SetPixel( struct tagDC *dc, INT32 x, INT32 y, COLORREF color );
-extern BOOL32 MFDRV_Polyline( struct tagDC *dc, const POINT32* pt,INT32 count);
-extern BOOL32 MFDRV_Polygon( struct tagDC *dc, const POINT32* pt, INT32 count );
-extern BOOL32 MFDRV_PolyPolygon( struct tagDC *dc, const POINT32* pt, const INT32* counts,
-				 UINT32 polygons);
-extern HGDIOBJ32 MFDRV_SelectObject( DC *dc, HGDIOBJ32 handle );
+extern BOOL MFDRV_BitBlt( struct tagDC *dcDst, INT xDst, INT yDst,
+                            INT width, INT height, struct tagDC *dcSrc,
+                            INT xSrc, INT ySrc, DWORD rop );
+extern BOOL MFDRV_PatBlt( struct tagDC *dc, INT left, INT top,
+                            INT width, INT height, DWORD rop );
+extern BOOL MFDRV_StretchBlt( struct tagDC *dcDst, INT xDst, INT yDst,
+                                INT widthDst, INT heightDst,
+                                struct tagDC *dcSrc, INT xSrc, INT ySrc,
+                                INT widthSrc, INT heightSrc, DWORD rop );
+extern INT MFDRV_SetMapMode( struct tagDC *dc, INT mode );
+extern BOOL MFDRV_SetViewportExt( struct tagDC *dc, INT x, INT y );
+extern BOOL MFDRV_SetViewportOrg( struct tagDC *dc, INT x, INT y );
+extern BOOL MFDRV_SetWindowExt( struct tagDC *dc, INT x, INT y );
+extern BOOL MFDRV_SetWindowOrg( struct tagDC *dc, INT x, INT y );
+extern BOOL MFDRV_OffsetViewportOrg( struct tagDC *dc, INT x, INT y );
+extern BOOL MFDRV_OffsetWindowOrg( struct tagDC *dc, INT x, INT y );
+extern BOOL MFDRV_ScaleViewportExt( struct tagDC *dc, INT xNum,
+                                      INT xDenom, INT yNum, INT yDenom );
+extern BOOL MFDRV_ScaleWindowExt( struct tagDC *dc, INT xNum, INT xDenom,
+                                    INT yNum, INT yDenom );
+extern BOOL MFDRV_MoveToEx(struct tagDC *dc, INT x, INT y, LPPOINT pt);
+extern BOOL MFDRV_LineTo( struct tagDC *dc, INT x, INT y );
+extern BOOL MFDRV_Arc( struct tagDC *dc, INT left, INT top, INT right,
+			 INT bottom, INT xstart, INT ystart, INT xend,
+			 INT yend );
+extern BOOL MFDRV_Pie( struct tagDC *dc, INT left, INT top, INT right,
+			 INT bottom, INT xstart, INT ystart, INT xend,
+			 INT yend );
+extern BOOL MFDRV_Chord( struct tagDC *dc, INT left, INT top, INT right,
+			   INT bottom, INT xstart, INT ystart, INT xend,
+			   INT yend );
+extern BOOL MFDRV_Ellipse( struct tagDC *dc, INT left, INT top,
+			     INT right, INT bottom );
+extern BOOL MFDRV_Rectangle( struct tagDC *dc, INT left, INT top,
+			       INT right, INT bottom);
+extern BOOL MFDRV_RoundRect( struct tagDC *dc, INT left, INT top,
+			       INT right, INT bottom, INT ell_width,
+			       INT ell_height );
+extern COLORREF MFDRV_SetPixel( struct tagDC *dc, INT x, INT y, COLORREF color );
+extern BOOL MFDRV_Polyline( struct tagDC *dc, const POINT* pt,INT count);
+extern BOOL MFDRV_Polygon( struct tagDC *dc, const POINT* pt, INT count );
+extern BOOL MFDRV_PolyPolygon( struct tagDC *dc, const POINT* pt, const INT* counts,
+				 UINT polygons);
+extern HGDIOBJ MFDRV_SelectObject( DC *dc, HGDIOBJ handle );
 extern COLORREF MFDRV_SetBkColor( DC *dc, COLORREF color );
 extern COLORREF MFDRV_SetTextColor( DC *dc, COLORREF color );
-extern BOOL32 MFDRV_ExtFloodFill( struct tagDC *dc, INT32 x, INT32 y,
-				  COLORREF color, UINT32 fillType );
-extern BOOL32 MFDRV_ExtTextOut( struct tagDC *dc, INT32 x, INT32 y,
-				UINT32 flags, const RECT32 *lprect, LPCSTR str,
-				UINT32 count, const INT32 *lpDx );
-extern BOOL32 MFDRV_PaintRgn( DC *dc, HRGN32 hrgn );
+extern BOOL MFDRV_ExtFloodFill( struct tagDC *dc, INT x, INT y,
+				  COLORREF color, UINT fillType );
+extern BOOL MFDRV_ExtTextOut( struct tagDC *dc, INT x, INT y,
+				UINT flags, const RECT *lprect, LPCSTR str,
+				UINT count, const INT *lpDx );
+extern BOOL MFDRV_PaintRgn( DC *dc, HRGN hrgn );
 
 #endif  /* __WINE_METAFILEDRV_H */
diff --git a/include/miscemu.h b/include/miscemu.h
index d7a1846..e4596ed 100644
--- a/include/miscemu.h
+++ b/include/miscemu.h
@@ -22,17 +22,17 @@
 extern DWORD DOSMEM_ErrorCall;
 extern DWORD DOSMEM_ErrorBuffer;
 
-extern BOOL32 DOSMEM_Init(HMODULE16 hModule);
+extern BOOL DOSMEM_Init(HMODULE16 hModule);
 extern void   DOSMEM_Tick(WORD timer);
 extern WORD   DOSMEM_AllocSelector(WORD);
 extern char * DOSMEM_MemoryBase(HMODULE16 hModule);
-extern LPVOID DOSMEM_GetBlock(HMODULE16 hModule, UINT32 size, UINT16* p);
-extern BOOL32 DOSMEM_FreeBlock(HMODULE16 hModule, void* ptr);
-extern LPVOID DOSMEM_ResizeBlock(HMODULE16 hModule, void* ptr, UINT32 size, UINT16* p);
-extern UINT32 DOSMEM_Available(HMODULE16 hModule);
+extern LPVOID DOSMEM_GetBlock(HMODULE16 hModule, UINT size, UINT16* p);
+extern BOOL DOSMEM_FreeBlock(HMODULE16 hModule, void* ptr);
+extern LPVOID DOSMEM_ResizeBlock(HMODULE16 hModule, void* ptr, UINT size, UINT16* p);
+extern UINT DOSMEM_Available(HMODULE16 hModule);
 extern LPVOID DOSMEM_MapRealToLinear(DWORD); /* real-mode to linear */
-extern LPVOID DOSMEM_MapDosToLinear(UINT32); /* linear DOS to Wine */
-extern UINT32 DOSMEM_MapLinearToDos(LPVOID); /* linear Wine to DOS */
+extern LPVOID DOSMEM_MapDosToLinear(UINT); /* linear DOS to Wine */
+extern UINT DOSMEM_MapLinearToDos(LPVOID); /* linear Wine to DOS */
 
 /* msdos/interrupts.c */
 extern FARPROC16 INT_GetPMHandler( BYTE intnum );
@@ -101,9 +101,9 @@
 extern void WINAPI XMS_Handler(CONTEXT*);
 
 /* loader/signal.c */
-extern BOOL32 SIGNAL_Init(void);
+extern BOOL SIGNAL_Init(void);
 extern void SIGNAL_SetHandler( int sig, void (*func)(), int flags );
-extern void SIGNAL_MaskAsyncEvents( BOOL32 flag );
+extern void SIGNAL_MaskAsyncEvents( BOOL flag );
 extern void SIGNAL_InitHandlers(void);
 
 /* misc/aspi.c */
diff --git a/include/mmsystem.h b/include/mmsystem.h
index a86b5ff..310a6f4 100644
--- a/include/mmsystem.h
+++ b/include/mmsystem.h
@@ -28,14 +28,11 @@
 typedef WORD    VERSION;        /* major (high byte), minor (low byte) */
 
 typedef UINT16	MMVERSION16;
-typedef UINT32	MMVERSION32;
-DECL_WINELIB_TYPE(MMVERSION)
+typedef UINT	MMVERSION;
 typedef UINT16	MCIDEVICEID16;
-typedef UINT32	MCIDEVICEID32;
-DECL_WINELIB_TYPE(MCIDEVICEID)
+typedef UINT	MCIDEVICEID;
 typedef	UINT16	MMRESULT16;
-typedef	UINT32	MMRESULT32;
-DECL_WINELIB_TYPE(MMRESULT)
+typedef	UINT	MMRESULT;
 
 typedef struct {
     UINT16    wType;		/* indicates the contents of the union */
@@ -58,7 +55,7 @@
 } MMTIME16,  *LPMMTIME16;
 
 typedef struct {
-    UINT32    wType;
+    UINT    wType;
     union {
 	DWORD ms;
 	DWORD sample;
@@ -76,9 +73,7 @@
 	    DWORD songptrpos;
 	} midi;
     } u;
-} MMTIME32,  *LPMMTIME32;
-DECL_WINELIB_TYPE(MMTIME)
-DECL_WINELIB_TYPE(LPMMTIME)
+} MMTIME,  *LPMMTIME;
 
 #define TIME_MS         0x0001  /* time in milliseconds */
 #define TIME_SAMPLES    0x0002  /* number of wave samples */
@@ -149,13 +144,12 @@
 #define CALLBACK_WINDOW     0x00010000l    /* dwCallback is a HWND */
 #define CALLBACK_TASK       0x00020000l    /* dwCallback is a HTASK */
 #define CALLBACK_FUNCTION   0x00030000l    /* dwCallback is a FARPROC */
-#define CALLBACK_FUNC32     0x00070000l    /* (ugly hack) 32-bit FARPROC */
+#define CALLBACK_FUNC     0x00070000l    /* (ugly hack) 32-bit FARPROC */
 #define CALLBACK32CONV(x)   ((((x)&CALLBACK_TYPEMASK)==CALLBACK_FUNCTION) ? \
-                             (((x)&~CALLBACK_TYPEMASK)|CALLBACK_FUNC32) : (x))
+                             (((x)&~CALLBACK_TYPEMASK)|CALLBACK_FUNC) : (x))
 
 typedef void (CALLBACK *LPDRVCALLBACK16) (HDRVR16 h, UINT16 uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
-typedef void (CALLBACK *LPDRVCALLBACK32) (HDRVR32 h, UINT32 uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
-DECL_WINELIB_TYPE(LPDRVCALLBACK)
+typedef void (CALLBACK *LPDRVCALLBACK) (HDRVR h, UINT uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
 
 #define MM_MICROSOFT            1       /* Microsoft Corp. */
 
@@ -177,11 +171,10 @@
 
 
 UINT16 WINAPI mmsystemGetVersion16(void);
-UINT32 WINAPI mmsystemGetVersion32(void);
-#define mmsystemGetVersion WINELIB_NAME(mmsystemGetVersion)
+UINT WINAPI mmsystemGetVersion(void);
 BOOL16 WINAPI sndPlaySound(LPCSTR lpszSoundName, UINT16 uFlags);
-BOOL32 WINAPI PlaySound32A(LPCSTR pszSound, HMODULE32 hmod, DWORD fdwSound);
-BOOL32 WINAPI PlaySound32W(LPCWSTR pszSound, HMODULE32 hmod, DWORD fdwSound);
+BOOL WINAPI PlaySoundA(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);
+BOOL WINAPI PlaySoundW(LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound);
 #define PlaySound WINELIB_NAME_AW(PlaySound)
 
 #define SND_SYNC            0x0000  /* play synchronously (default) */
@@ -209,10 +202,9 @@
 typedef HWAVEIN16 *LPHWAVEIN16;
 typedef HWAVEOUT16 *LPHWAVEOUT16;
 typedef LPDRVCALLBACK16 LPWAVECALLBACK16;
-typedef LPDRVCALLBACK32 LPWAVECALLBACK32;
-DECL_WINELIB_TYPE(LPWAVECALLBACK)
+typedef LPDRVCALLBACK LPWAVECALLBACK;
 typedef HMIXER16 *LPHMIXER16;
-typedef HMIXER32 *LPHMIXER32;
+typedef HMIXER *LPHMIXER;
 
 #define WOM_OPEN        MM_WOM_OPEN
 #define WOM_CLOSE       MM_WOM_CLOSE
@@ -257,24 +249,24 @@
 typedef struct {
     WORD	wMid;			/* manufacturer ID */
     WORD	wPid;			/* product ID */
-    MMVERSION32	vDriverVersion;		/* version of the driver */
+    MMVERSION	vDriverVersion;		/* version of the driver */
     CHAR	szPname[MAXPNAMELEN];	/* product name (0 terminated string) */
     DWORD	dwFormats;		/* formats supported */
     WORD	wChannels;		/* number of sources supported */
     WORD	wReserved1;		/* padding */
     DWORD	dwSupport;		/* functionality supported by driver */
-} WAVEOUTCAPS32A, *LPWAVEOUTCAPS32A;
+} WAVEOUTCAPSA, *LPWAVEOUTCAPSA;
 
 typedef struct {
     WORD	wMid;			/* manufacturer ID */
     WORD	wPid;			/* product ID */
-    MMVERSION32	vDriverVersion;		/* version of the driver */
+    MMVERSION	vDriverVersion;		/* version of the driver */
     WCHAR	szPname[MAXPNAMELEN];	/* product name (0 terminated string) */
     DWORD	dwFormats;		/* formats supported */
     WORD	wChannels;		/* number of sources supported */
     WORD	wReserved1;		/* padding */
     DWORD	dwSupport;		/* functionality supported by driver */
-} WAVEOUTCAPS32W, *LPWAVEOUTCAPS32W;
+} WAVEOUTCAPSW, *LPWAVEOUTCAPSW;
 DECL_WINELIB_TYPE_AW(WAVEOUTCAPS)
 DECL_WINELIB_TYPE_AW(LPWAVEOUTCAPS)
 
@@ -296,21 +288,21 @@
 typedef struct {
     WORD	wMid;			/* manufacturer ID */
     WORD	wPid;			/* product ID */
-    MMVERSION32	vDriverVersion;		/* version of the driver */
+    MMVERSION	vDriverVersion;		/* version of the driver */
     CHAR	szPname[MAXPNAMELEN];	/* product name (0 terminated string) */
     DWORD	dwFormats;		/* formats supported */
     WORD	wChannels;		/* number of channels supported */
     WORD	wReserved1;
-} WAVEINCAPS32A, *LPWAVEINCAPS32A;
+} WAVEINCAPSA, *LPWAVEINCAPSA;
 typedef struct {
     WORD	wMid;			/* manufacturer ID */
     WORD	wPid;			/* product ID */
-    MMVERSION32	vDriverVersion;		/* version of the driver */
+    MMVERSION	vDriverVersion;		/* version of the driver */
     WCHAR	szPname[MAXPNAMELEN];	/* product name (0 terminated string) */
     DWORD	dwFormats;		/* formats supported */
     WORD	wChannels;		/* number of channels supported */
     WORD	wReserved1;
-} WAVEINCAPS32W, *LPWAVEINCAPS32W;
+} WAVEINCAPSW, *LPWAVEINCAPSW;
 DECL_WINELIB_TYPE_AW(WAVEINCAPS)
 DECL_WINELIB_TYPE_AW(LPWAVEINCAPS)
 
@@ -360,116 +352,85 @@
 #endif
 
 UINT16 WINAPI waveOutGetNumDevs16(void);
-UINT32 WINAPI waveOutGetNumDevs32(void);
-#define waveOutGetNumDevs WINELIB_NAME(waveOutGetNumDevs)
+UINT WINAPI waveOutGetNumDevs(void);
 UINT16 WINAPI waveOutGetDevCaps16(UINT16,LPWAVEOUTCAPS16,UINT16);
-UINT32 WINAPI waveOutGetDevCaps32A(UINT32,LPWAVEOUTCAPS32A,UINT32);
-UINT32 WINAPI waveOutGetDevCaps32W(UINT32,LPWAVEOUTCAPS32W,UINT32);
+UINT WINAPI waveOutGetDevCapsA(UINT,LPWAVEOUTCAPSA,UINT);
+UINT WINAPI waveOutGetDevCapsW(UINT,LPWAVEOUTCAPSW,UINT);
 #define waveOutGetDevCaps WINELIB_NAME_AW(waveOutGetDevCaps)
 UINT16 WINAPI waveOutGetVolume16(UINT16,DWORD*);
-UINT32 WINAPI waveOutGetVolume32(UINT32,DWORD*);
-#define waveOutGetVolume WINELIB_NAME(waveOutGetVolume)
+UINT WINAPI waveOutGetVolume(UINT,DWORD*);
 UINT16 WINAPI waveOutSetVolume16(UINT16,DWORD);
-UINT32 WINAPI waveOutSetVolume32(UINT32,DWORD);
-#define waveOutSetVolume WINELIB_NAME(waveOutSetVolume)
+UINT WINAPI waveOutSetVolume(UINT,DWORD);
 UINT16 WINAPI waveOutGetErrorText16(UINT16,LPSTR,UINT16);
-UINT32 WINAPI waveOutGetErrorText32A(UINT32,LPSTR,UINT32);
-UINT32 WINAPI waveOutGetErrorText32W(UINT32,LPWSTR,UINT32);
+UINT WINAPI waveOutGetErrorTextA(UINT,LPSTR,UINT);
+UINT WINAPI waveOutGetErrorTextW(UINT,LPWSTR,UINT);
 #define waveOutGetErrorText WINELIB_NAME_AW(waveOutGetErrorText)
 UINT16 WINAPI waveOutOpen16(HWAVEOUT16*,UINT16,const LPWAVEFORMATEX,DWORD,DWORD,DWORD);
-UINT32 WINAPI waveOutOpen32(HWAVEOUT32*,UINT32,const LPWAVEFORMATEX,DWORD,DWORD,DWORD);
-#define waveOutOpen WINELIB_NAME(waveOutOpen)
+UINT WINAPI waveOutOpen(HWAVEOUT*,UINT,const LPWAVEFORMATEX,DWORD,DWORD,DWORD);
 UINT16 WINAPI waveOutClose16(HWAVEOUT16);
-UINT32 WINAPI waveOutClose32(HWAVEOUT32);
-#define waveOutClose WINELIB_NAME(waveOutClose)
+UINT WINAPI waveOutClose(HWAVEOUT);
 UINT16 WINAPI waveOutPrepareHeader16(HWAVEOUT16,WAVEHDR*,UINT16);
-UINT32 WINAPI waveOutPrepareHeader32(HWAVEOUT32,WAVEHDR*,UINT32);
-#define waveOutPrepareHeader WINELIB_NAME(waveOutPrepareHeader)
+UINT WINAPI waveOutPrepareHeader(HWAVEOUT,WAVEHDR*,UINT);
 UINT16 WINAPI waveOutUnprepareHeader16(HWAVEOUT16,WAVEHDR*,UINT16);
-UINT32 WINAPI waveOutUnprepareHeader32(HWAVEOUT32,WAVEHDR*,UINT32);
-#define waveOutUnprepareHeader WINELIB_NAME(waveOutUnprepareHeader)
+UINT WINAPI waveOutUnprepareHeader(HWAVEOUT,WAVEHDR*,UINT);
 UINT16 WINAPI waveOutWrite16(HWAVEOUT16,WAVEHDR*,UINT16);
-UINT32 WINAPI waveOutWrite32(HWAVEOUT32,WAVEHDR*,UINT32);
-#define waveOutWrite WINELIB_NAME(waveOutWrite)
+UINT WINAPI waveOutWrite(HWAVEOUT,WAVEHDR*,UINT);
 UINT16 WINAPI waveOutPause16(HWAVEOUT16);
-UINT32 WINAPI waveOutPause32(HWAVEOUT32);
-#define waveOutPause WINELIB_NAME(waveOutPause)
+UINT WINAPI waveOutPause(HWAVEOUT);
 UINT16 WINAPI waveOutRestart16(HWAVEOUT16);
-UINT32 WINAPI waveOutRestart32(HWAVEOUT32);
-#define waveOutRestart WINELIB_NAME(waveOutRestart)
+UINT WINAPI waveOutRestart(HWAVEOUT);
 UINT16 WINAPI waveOutReset16(HWAVEOUT16);
-UINT32 WINAPI waveOutReset32(HWAVEOUT32);
-#define waveOutReset WINELIB_NAME(waveOutReset)
+UINT WINAPI waveOutReset(HWAVEOUT);
 UINT16 WINAPI waveOutBreakLoop16(HWAVEOUT16);
-UINT32 WINAPI waveOutBreakLoop32(HWAVEOUT32);
-#define waveOutBreakLoop WINELIB_NAME(waveOutBreakLoop)
+UINT WINAPI waveOutBreakLoop(HWAVEOUT);
 UINT16 WINAPI waveOutGetPosition16(HWAVEOUT16,LPMMTIME16,UINT16);
-UINT32 WINAPI waveOutGetPosition32(HWAVEOUT32,LPMMTIME32,UINT32);
-#define waveOutGetPosition WINELIB_NAME(waveOutGetPosition)
+UINT WINAPI waveOutGetPosition(HWAVEOUT,LPMMTIME,UINT);
 UINT16 WINAPI waveOutGetPitch16(HWAVEOUT16,DWORD*);
-UINT32 WINAPI waveOutGetPitch32(HWAVEOUT32,DWORD*);
-#define waveOutGetPitch WINELIB_NAME(waveOutGetPitch)
+UINT WINAPI waveOutGetPitch(HWAVEOUT,DWORD*);
 UINT16 WINAPI waveOutSetPitch16(HWAVEOUT16,DWORD);
-UINT32 WINAPI waveOutSetPitch32(HWAVEOUT32,DWORD);
-#define waveOutSetPitch WINELIB_NAME(waveOutSetPitch)
+UINT WINAPI waveOutSetPitch(HWAVEOUT,DWORD);
 UINT16 WINAPI waveOutGetPlaybackRate16(HWAVEOUT16,DWORD*);
-UINT32 WINAPI waveOutGetPlaybackRate32(HWAVEOUT32,DWORD*);
-#define waveOutGetPlaybackRate WINELIB_NAME(waveOutGetPlaybackRate)
+UINT WINAPI waveOutGetPlaybackRate(HWAVEOUT,DWORD*);
 UINT16 WINAPI waveOutSetPlaybackRate16(HWAVEOUT16,DWORD);
-UINT32 WINAPI waveOutSetPlaybackRate32(HWAVEOUT32,DWORD);
-#define waveOutSetPlaybackRate WINELIB_NAME(waveOutSetPlaybackRate)
+UINT WINAPI waveOutSetPlaybackRate(HWAVEOUT,DWORD);
 UINT16 WINAPI waveOutGetID16(HWAVEOUT16,UINT16*);
-UINT32 WINAPI waveOutGetID32(HWAVEOUT32,UINT32*);
-#define waveOutGetID WINELIB_NAME(waveOutGetID)
+UINT WINAPI waveOutGetID(HWAVEOUT,UINT*);
 DWORD WINAPI waveOutMessage16(HWAVEOUT16,UINT16,DWORD,DWORD);
-DWORD WINAPI waveOutMessage32(HWAVEOUT32,UINT32,DWORD,DWORD);
-#define waveOutMessage WINELIB_NAME(waveOutMessage)
+DWORD WINAPI waveOutMessage(HWAVEOUT,UINT,DWORD,DWORD);
 
 UINT16 WINAPI waveInGetNumDevs16(void);
-UINT32 WINAPI waveInGetNumDevs32(void);
-#define waveInGetNumDevs WINELIB_NAME(waveInGetNumDevs)
+UINT WINAPI waveInGetNumDevs(void);
 UINT16 WINAPI waveInGetDevCaps16(UINT16,LPWAVEINCAPS16,UINT16);
-UINT32 WINAPI waveInGetDevCaps32A(UINT32,LPWAVEINCAPS32A,UINT32);
-UINT32 WINAPI waveInGetDevCaps32W(UINT32,LPWAVEINCAPS32W,UINT32);
+UINT WINAPI waveInGetDevCapsA(UINT,LPWAVEINCAPSA,UINT);
+UINT WINAPI waveInGetDevCapsW(UINT,LPWAVEINCAPSW,UINT);
 #define waveInGetDevCaps WINELIB_NAME_AW(waveInGetDevCaps)
 UINT16 WINAPI waveInGetErrorText16(UINT16,LPSTR,UINT16);
-UINT32 WINAPI waveInGetErrorText32A(UINT32,LPSTR,UINT32);
-UINT32 WINAPI waveInGetErrorText32W(UINT32,LPWSTR,UINT32);
+UINT WINAPI waveInGetErrorTextA(UINT,LPSTR,UINT);
+UINT WINAPI waveInGetErrorTextW(UINT,LPWSTR,UINT);
 #define waveInGetErrorText WINELIB_NAME_AW(waveInGetErrorText)
 UINT16 WINAPI waveInOpen16(HWAVEIN16*,UINT16,const LPWAVEFORMAT,DWORD,DWORD,DWORD);
-UINT32 WINAPI waveInOpen32(HWAVEIN32*,UINT32,const LPWAVEFORMAT,DWORD,DWORD,DWORD);
-#define waveInOpen WINELIB_NAME(waveInOpen)
+UINT WINAPI waveInOpen(HWAVEIN*,UINT,const LPWAVEFORMAT,DWORD,DWORD,DWORD);
 UINT16 WINAPI waveInClose16(HWAVEIN16);
-UINT32 WINAPI waveInClose32(HWAVEIN32);
-#define waveInClose WINELIB_NAME(waveInClose)
+UINT WINAPI waveInClose(HWAVEIN);
 UINT16 WINAPI waveInPrepareHeader16(HWAVEIN16,WAVEHDR*,UINT16);
-UINT32 WINAPI waveInPrepareHeader32(HWAVEIN32,WAVEHDR*,UINT32);
-#define waveInPrepareHeader WINELIB_NAME(waveInPrepareHeader)
+UINT WINAPI waveInPrepareHeader(HWAVEIN,WAVEHDR*,UINT);
 UINT16 WINAPI waveInUnprepareHeader16(HWAVEIN16,WAVEHDR*,UINT16);
-UINT32 WINAPI waveInUnprepareHeader32(HWAVEIN32,WAVEHDR*,UINT32);
-#define waveInUnprepareHeader WINELIB_NAME(waveInUnprepareHeader)
+UINT WINAPI waveInUnprepareHeader(HWAVEIN,WAVEHDR*,UINT);
 UINT16 WINAPI waveInAddBuffer16(HWAVEIN16,WAVEHDR*,UINT16);
-UINT32 WINAPI waveInAddBuffer32(HWAVEIN32,WAVEHDR*,UINT32);
-#define waveInAddBuffer WINELIB_NAME(waveInAddBuffer)
+UINT WINAPI waveInAddBuffer(HWAVEIN,WAVEHDR*,UINT);
 UINT16 WINAPI waveInStart16(HWAVEIN16);
-UINT32 WINAPI waveInStart32(HWAVEIN32);
-#define waveInStart WINELIB_NAME(waveInStart)
+UINT WINAPI waveInStart(HWAVEIN);
 UINT16 WINAPI waveInStop16(HWAVEIN16);
-UINT32 WINAPI waveInStop32(HWAVEIN32);
-#define waveInStop WINELIB_NAME(waveInStop)
+UINT WINAPI waveInStop(HWAVEIN);
 UINT16 WINAPI waveInReset16(HWAVEIN16);
-UINT32 WINAPI waveInReset32(HWAVEIN32);
-#define waveInReset WINELIB_NAME(waveInReset)
+UINT WINAPI waveInReset(HWAVEIN);
 UINT16 WINAPI waveInGetPosition16(HWAVEIN16,LPMMTIME16,UINT16);
-UINT32 WINAPI waveInGetPosition32(HWAVEIN32,LPMMTIME32,UINT32);
-#define waveInGetPosition WINELIB_NAME(waveInGetPosition)
+UINT WINAPI waveInGetPosition(HWAVEIN,LPMMTIME,UINT);
 UINT16 WINAPI waveInGetID16(HWAVEIN16,UINT16*);
-UINT32 WINAPI waveInGetID32(HWAVEIN32,UINT32*);
-#define waveInGetID WINELIB_NAME(waveInGetID)
+UINT WINAPI waveInGetID(HWAVEIN,UINT*);
 
 DWORD WINAPI waveInMessage16(HWAVEIN16,UINT16,DWORD,DWORD);
-DWORD WINAPI waveInMessage32(HWAVEIN32,UINT32,DWORD,DWORD);
-#define waveInMessage WINELIB_NAME(waveInMessage)
+DWORD WINAPI waveInMessage(HWAVEIN,UINT,DWORD,DWORD);
 
 #define MIDIERR_UNPREPARED    (MIDIERR_BASE + 0)   /* header not prepared */
 #define MIDIERR_STILLPLAYING  (MIDIERR_BASE + 1)   /* still something playing */
@@ -482,8 +443,7 @@
 typedef HMIDIIN16  *LPHMIDIIN16;
 typedef HMIDIOUT16  *LPHMIDIOUT16;
 typedef LPDRVCALLBACK16 LPMIDICALLBACK16;
-typedef LPDRVCALLBACK32 LPMIDICALLBACK32;
-DECL_WINELIB_TYPE(LPMIDICALLBACK)
+typedef LPDRVCALLBACK LPMIDICALLBACK;
 #define MIDIPATCHSIZE   128
 typedef WORD PATCHARRAY[MIDIPATCHSIZE];
 typedef WORD *LPPATCHARRAY;
@@ -528,26 +488,26 @@
 typedef struct {
     WORD	wMid;		/* manufacturer ID */
     WORD	wPid;		/* product ID */
-    MMVERSION32	vDriverVersion;	/* version of the driver */
+    MMVERSION	vDriverVersion;	/* version of the driver */
     CHAR	szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
     WORD	wTechnology;	/* type of device */
     WORD	wVoices;	/* # of voices (internal synth only) */
     WORD	wNotes;		/* max # of notes (internal synth only) */
     WORD	wChannelMask;	/* channels used (internal synth only) */
     DWORD	dwSupport;	/* functionality supported by driver */
-} MIDIOUTCAPS32A, *LPMIDIOUTCAPS32A;
+} MIDIOUTCAPSA, *LPMIDIOUTCAPSA;
 
 typedef struct {
     WORD	wMid;		/* manufacturer ID */
     WORD	wPid;		/* product ID */
-    MMVERSION32	vDriverVersion;	/* version of the driver */
+    MMVERSION	vDriverVersion;	/* version of the driver */
     WCHAR	szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
     WORD	wTechnology;	/* type of device */
     WORD	wVoices;	/* # of voices (internal synth only) */
     WORD	wNotes;		/* max # of notes (internal synth only) */
     WORD	wChannelMask;	/* channels used (internal synth only) */
     DWORD	dwSupport;	/* functionality supported by driver */
-} MIDIOUTCAPS32W, *LPMIDIOUTCAPS32W;
+} MIDIOUTCAPSW, *LPMIDIOUTCAPSW;
 
 DECL_WINELIB_TYPE_AW(MIDIOUTCAPS)
 DECL_WINELIB_TYPE_AW(LPMIDIOUTCAPS)
@@ -574,18 +534,18 @@
 typedef struct {
     WORD	wMid;		/* manufacturer ID */
     WORD	wPid;		/* product ID */
-    MMVERSION32	vDriverVersion;	/* version of the driver */
+    MMVERSION	vDriverVersion;	/* version of the driver */
     CHAR	szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
     DWORD	dwSupport;	/* included in win95 and higher */
-} MIDIINCAPS32A, *LPMIDIINCAPS32A;
+} MIDIINCAPSA, *LPMIDIINCAPSA;
 
 typedef struct {
     WORD	wMid;		/* manufacturer ID */
     WORD	wPid;		/* product ID */
-    MMVERSION32	vDriverVersion;	/* version of the driver */
+    MMVERSION	vDriverVersion;	/* version of the driver */
     WCHAR	szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
     DWORD	dwSupport;	/* included in win95 and higher */
-} MIDIINCAPS32W, *LPMIDIINCAPS32W;
+} MIDIINCAPSW, *LPMIDIINCAPSW;
 
 DECL_WINELIB_TYPE_AW(MIDIINCAPS)
 DECL_WINELIB_TYPE_AW(LPMIDIINCAPS)
@@ -598,7 +558,7 @@
     DWORD	dwFlags;	/* assorted flags (see defines) */
     struct midihdr_tag *lpNext;	/* reserved for driver */
     DWORD	reserved;	/* reserved for driver */
-} MIDIHDR, *LPMIDIHDR;
+} MIDIHDR16, *LPMIDIHDR16;
 
 /* It seems that Win32 has a slightly different structure than Win 16.
  * sigh....
@@ -614,7 +574,7 @@
     DWORD	dwOffset;	/* offset of playback in case of 
 				 * MIDISTRM buffer */
     DWORD	dwReserved[4];	/* reserved for driver */
-} MIDIHDR_WIN32, *LPMIDIHDR_WIN32;
+} MIDIHDR, *LPMIDIHDR;
 
 #define MHDR_DONE       0x00000001       /* done bit */
 #define MHDR_PREPARED   0x00000002       /* set if header prepared */
@@ -658,126 +618,93 @@
 #define	MEVT_VERSION	0x84
 
 UINT16 WINAPI midiOutGetNumDevs16(void);
-UINT32 WINAPI midiOutGetNumDevs32(void);
-#define midiOutGetNumDevs WINELIB_NAME(midiOutGetNumDevs)
+UINT WINAPI midiOutGetNumDevs(void);
 UINT16 WINAPI midiOutGetDevCaps16(UINT16,LPMIDIOUTCAPS16,UINT16);
-UINT32 WINAPI midiOutGetDevCaps32A(UINT32,LPMIDIOUTCAPS32A,UINT32);
-UINT32 WINAPI midiOutGetDevCaps32W(UINT32,LPMIDIOUTCAPS32W,UINT32);
+UINT WINAPI midiOutGetDevCapsA(UINT,LPMIDIOUTCAPSA,UINT);
+UINT WINAPI midiOutGetDevCapsW(UINT,LPMIDIOUTCAPSW,UINT);
 #define midiOutGetDevCaps WINELIB_NAME_AW(midiOutGetDevCaps)
 UINT16 WINAPI midiOutGetVolume16(UINT16,DWORD*);
-UINT32 WINAPI midiOutGetVolume32(UINT32,DWORD*);
-#define midiOutGetVolume WINELIB_NAME(midiOutGetVolume)
+UINT WINAPI midiOutGetVolume(UINT,DWORD*);
 UINT16 WINAPI midiOutSetVolume16(UINT16,DWORD);
-UINT32 WINAPI midiOutSetVolume32(UINT32,DWORD);
-#define midiOutSetVolume WINELIB_NAME(midiOutSetVolume)
+UINT WINAPI midiOutSetVolume(UINT,DWORD);
 UINT16 WINAPI midiOutGetErrorText16(UINT16,LPSTR,UINT16);
-UINT32 WINAPI midiOutGetErrorText32A(UINT32,LPSTR,UINT32);
-UINT32 WINAPI midiOutGetErrorText32W(UINT32,LPWSTR,UINT32);
+UINT WINAPI midiOutGetErrorTextA(UINT,LPSTR,UINT);
+UINT WINAPI midiOutGetErrorTextW(UINT,LPWSTR,UINT);
 #define midiOutGetErrorText WINELIB_NAME_AW(midiOutGetErrorText)
 UINT16 WINAPI midiGetErrorText(UINT16,LPSTR,UINT16);
 UINT16 WINAPI midiOutOpen16(HMIDIOUT16*,UINT16,DWORD,DWORD,DWORD);
-UINT32 WINAPI midiOutOpen32(HMIDIOUT32*,UINT32,DWORD,DWORD,DWORD);
-#define midiOutOpen WINELIB_NAME(midiOutOpen)
+UINT WINAPI midiOutOpen(HMIDIOUT*,UINT,DWORD,DWORD,DWORD);
 UINT16 WINAPI midiOutClose16(HMIDIOUT16);
-UINT32 WINAPI midiOutClose32(HMIDIOUT32);
-#define midiOutClose WINELIB_NAME(midiOutClose)
-UINT16 WINAPI midiOutPrepareHeader16(HMIDIOUT16,MIDIHDR*,UINT16);
-UINT32 WINAPI midiOutPrepareHeader32(HMIDIOUT32,MIDIHDR*,UINT32);
-#define midiOutPrepareHeader WINELIB_NAME(midiOutPrepareHeader)
-UINT16 WINAPI midiOutUnprepareHeader16(HMIDIOUT16,MIDIHDR*,UINT16);
-UINT32 WINAPI midiOutUnprepareHeader32(HMIDIOUT32,MIDIHDR*,UINT32);
-#define midiOutUnprepareHeader WINELIB_NAME(midiOutUnprepareHeader)
+UINT WINAPI midiOutClose(HMIDIOUT);
+UINT16 WINAPI midiOutPrepareHeader16(HMIDIOUT16,MIDIHDR16*,UINT16);
+UINT WINAPI midiOutPrepareHeader(HMIDIOUT,MIDIHDR16*,UINT);
+UINT16 WINAPI midiOutUnprepareHeader16(HMIDIOUT16,MIDIHDR16*,UINT16);
+UINT WINAPI midiOutUnprepareHeader(HMIDIOUT,MIDIHDR16*,UINT);
 UINT16 WINAPI midiOutShortMsg16(HMIDIOUT16,DWORD);
-UINT32 WINAPI midiOutShortMsg32(HMIDIOUT32,DWORD);
-#define midiOutShortMsg WINELIB_NAME(midiOutShortMsg)
-UINT16 WINAPI midiOutLongMsg16(HMIDIOUT16,MIDIHDR*,UINT16);
-UINT32 WINAPI midiOutLongMsg32(HMIDIOUT32,MIDIHDR*,UINT32);
-#define midiOutLongMsg WINELIB_NAME(midiOutLongMsg)
+UINT WINAPI midiOutShortMsg(HMIDIOUT,DWORD);
+UINT16 WINAPI midiOutLongMsg16(HMIDIOUT16,MIDIHDR16*,UINT16);
+UINT WINAPI midiOutLongMsg(HMIDIOUT,MIDIHDR16*,UINT);
 UINT16 WINAPI midiOutReset16(HMIDIOUT16);
-UINT32 WINAPI midiOutReset32(HMIDIOUT32);
-#define midiOutReset WINELIB_NAME(midiOutReset)
+UINT WINAPI midiOutReset(HMIDIOUT);
 UINT16 WINAPI midiOutCachePatches16(HMIDIOUT16,UINT16,WORD*,UINT16);
-UINT32 WINAPI midiOutCachePatches32(HMIDIOUT32,UINT32,WORD*,UINT32);
-#define midiOutCachePatches WINELIB_NAME(midiOutCachePatches)
+UINT WINAPI midiOutCachePatches(HMIDIOUT,UINT,WORD*,UINT);
 UINT16 WINAPI midiOutCacheDrumPatches16(HMIDIOUT16,UINT16,WORD*,UINT16);
-UINT32 WINAPI midiOutCacheDrumPatches32(HMIDIOUT32,UINT32,WORD*,UINT32);
-#define midiOutCacheDrumPatches WINELIB_NAME(midiOutCacheDrumPatches)
+UINT WINAPI midiOutCacheDrumPatches(HMIDIOUT,UINT,WORD*,UINT);
 UINT16 WINAPI midiOutGetID16(HMIDIOUT16,UINT16*);
-UINT32 WINAPI midiOutGetID32(HMIDIOUT32,UINT32*);
-#define midiOutGetID WINELIB_NAME(midiOutGetID)
+UINT WINAPI midiOutGetID(HMIDIOUT,UINT*);
 
 DWORD WINAPI midiOutMessage16(HMIDIOUT16,UINT16,DWORD,DWORD);
-DWORD WINAPI midiOutMessage32(HMIDIOUT32,UINT32,DWORD,DWORD);
-#define midiOutMessage WINELIB_NAME(midiOutMessage)
+DWORD WINAPI midiOutMessage(HMIDIOUT,UINT,DWORD,DWORD);
 
 UINT16 WINAPI midiInGetNumDevs16(void);
-UINT32 WINAPI midiInGetNumDevs32(void);
-#define midiInGetNumDevs WINELIB_NAME(midiInGetNumDevs)
+UINT WINAPI midiInGetNumDevs(void);
 UINT16 WINAPI midiInGetDevCaps16(UINT16,LPMIDIINCAPS16,UINT16);
-UINT32 WINAPI midiInGetDevCaps32A(UINT32,LPMIDIINCAPS32A,UINT32);
-UINT32 WINAPI midiInGetDevCaps32W(UINT32,LPMIDIINCAPS32W,UINT32);
+UINT WINAPI midiInGetDevCapsA(UINT,LPMIDIINCAPSA,UINT);
+UINT WINAPI midiInGetDevCapsW(UINT,LPMIDIINCAPSW,UINT);
 #define midiInGetDevCaps WINELIB_NAME_AW(midiInGetDevCaps)
 UINT16 WINAPI midiInGetErrorText16(UINT16,LPSTR,UINT16);
-UINT32 WINAPI midiInGetErrorText32A(UINT32,LPSTR,UINT32);
-UINT32 WINAPI midiInGetErrorText32W(UINT32,LPWSTR,UINT32);
+UINT WINAPI midiInGetErrorTextA(UINT,LPSTR,UINT);
+UINT WINAPI midiInGetErrorTextW(UINT,LPWSTR,UINT);
 #define midiInGetErrorText WINELIB_NAME_AW(midiInGetErrorText)
 UINT16 WINAPI midiInOpen16(HMIDIIN16*,UINT16,DWORD,DWORD,DWORD);
-UINT32 WINAPI midiInOpen32(HMIDIIN32*,UINT32,DWORD,DWORD,DWORD);
-#define midiInOpen WINELIB_NAME(midiInOpen)
+UINT WINAPI midiInOpen(HMIDIIN*,UINT,DWORD,DWORD,DWORD);
 UINT16 WINAPI midiInClose16(HMIDIIN16);
-UINT32 WINAPI midiInClose32(HMIDIIN32);
-#define midiInClose WINELIB_NAME(midiInClose)
-UINT16 WINAPI midiInPrepareHeader16(HMIDIIN16,MIDIHDR*,UINT16);
-UINT32 WINAPI midiInPrepareHeader32(HMIDIIN32,MIDIHDR*,UINT32);
-#define midiInPrepareHeader WINELIB_NAME(midiInPrepareHeader)
-UINT16 WINAPI midiInUnprepareHeader16(HMIDIIN16,MIDIHDR*,UINT16);
-UINT32 WINAPI midiInUnprepareHeader32(HMIDIIN32,MIDIHDR*,UINT32);
-#define midiInUnprepareHeader WINELIB_NAME(midiInUnprepareHeader)
-UINT16 WINAPI midiInAddBuffer16(HMIDIIN16,MIDIHDR*,UINT16);
-UINT32 WINAPI midiInAddBuffer32(HMIDIIN32,MIDIHDR*,UINT32);
-#define midiInAddBuffer WINELIB_NAME(midiInAddBuffer)
+UINT WINAPI midiInClose(HMIDIIN);
+UINT16 WINAPI midiInPrepareHeader16(HMIDIIN16,MIDIHDR16*,UINT16);
+UINT WINAPI midiInPrepareHeader(HMIDIIN,MIDIHDR16*,UINT);
+UINT16 WINAPI midiInUnprepareHeader16(HMIDIIN16,MIDIHDR16*,UINT16);
+UINT WINAPI midiInUnprepareHeader(HMIDIIN,MIDIHDR16*,UINT);
+UINT16 WINAPI midiInAddBuffer16(HMIDIIN16,MIDIHDR16*,UINT16);
+UINT WINAPI midiInAddBuffer(HMIDIIN,MIDIHDR16*,UINT);
 UINT16 WINAPI midiInStart16(HMIDIIN16);
-UINT32 WINAPI midiInStart32(HMIDIIN32);
-#define midiInStart WINELIB_NAME(midiInStart)
+UINT WINAPI midiInStart(HMIDIIN);
 UINT16 WINAPI midiInStop16(HMIDIIN16);
-UINT32 WINAPI midiInStop32(HMIDIIN32);
-#define midiInStop WINELIB_NAME(midiInStop)
+UINT WINAPI midiInStop(HMIDIIN);
 UINT16 WINAPI midiInReset16(HMIDIIN16);
-UINT32 WINAPI midiInReset32(HMIDIIN32);
-#define midiInReset WINELIB_NAME(midiInReset)
+UINT WINAPI midiInReset(HMIDIIN);
 UINT16 WINAPI midiInGetID16(HMIDIIN16,UINT16*);
-UINT32 WINAPI midiInGetID32(HMIDIIN32,UINT32*);
-#define midiInGetID WINELIB_NAME(midiInGetID)
+UINT WINAPI midiInGetID(HMIDIIN,UINT*);
 DWORD WINAPI midiInMessage16(HMIDIIN16,UINT16,DWORD,DWORD);
-DWORD WINAPI midiInMessage32(HMIDIIN32,UINT32,DWORD,DWORD);
-#define midiInMessage WINELIB_NAME(midiInMessage)
+DWORD WINAPI midiInMessage(HMIDIIN,UINT,DWORD,DWORD);
 
 MMRESULT16 WINAPI midiStreamClose16(HMIDISTRM16 hms);
-MMRESULT32 WINAPI midiStreamClose32(HMIDISTRM32 hms);
-#define midiStreamClose WINELIB_NAME(midiStreamClose)
-MMRESULT32 WINAPI midiStreamOpen32(HMIDISTRM32* phms, LPUINT32 uDeviceID, DWORD cMidi,
+MMRESULT WINAPI midiStreamClose(HMIDISTRM hms);
+MMRESULT WINAPI midiStreamOpen(HMIDISTRM* phms, LPUINT uDeviceID, DWORD cMidi,
 				   DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen); 
 MMRESULT16 WINAPI midiStreamOpen16(HMIDISTRM16* phms, LPUINT16 devid, DWORD cMidi,
 				   DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen); 
-#define midiStreamOpen WINELIB_NAME(midiStreamOpen)
-MMRESULT16 WINAPI midiStreamOut16(HMIDISTRM16 hms, LPMIDIHDR lpMidiHdr, UINT16 cbMidiHdr); 
-MMRESULT32 WINAPI midiStreamOut32(HMIDISTRM32 hms, LPMIDIHDR lpMidiHdr, UINT32 cbMidiHdr);
-#define midiStreamOut WINELIB_NAME(midiStreamOut)
+MMRESULT16 WINAPI midiStreamOut16(HMIDISTRM16 hms, LPMIDIHDR16 lpMidiHdr, UINT16 cbMidiHdr); 
+MMRESULT WINAPI midiStreamOut(HMIDISTRM hms, LPMIDIHDR16 lpMidiHdr, UINT cbMidiHdr);
 MMRESULT16 WINAPI midiStreamPause16(HMIDISTRM16 hms);
-MMRESULT32 WINAPI midiStreamPause32(HMIDISTRM32 hms);
-#define midiStreamPause WINELIB_NAME(midiStreamPause)
+MMRESULT WINAPI midiStreamPause(HMIDISTRM hms);
 MMRESULT16 WINAPI midiStreamPosition16(HMIDISTRM16 hms, LPMMTIME16 lpmmt, UINT16 cbmmt);
-MMRESULT32 WINAPI midiStreamPosition32(HMIDISTRM32 hms, LPMMTIME32 lpmmt, UINT32 cbmmt);
-#define midiStreamPosition WINELIB_NAME(midiStreamPosition)
+MMRESULT WINAPI midiStreamPosition(HMIDISTRM hms, LPMMTIME lpmmt, UINT cbmmt);
 MMRESULT16 WINAPI midiStreamProperty16(HMIDISTRM16 hms, LPBYTE lpPropData, DWORD dwProperty);
-MMRESULT32 WINAPI midiStreamProperty32(HMIDISTRM32 hms, LPBYTE lpPropData, DWORD dwProperty);
-#define midiStreamProperty WINELIB_NAME(midiStreamProperty)
+MMRESULT WINAPI midiStreamProperty(HMIDISTRM hms, LPBYTE lpPropData, DWORD dwProperty);
 MMRESULT16 WINAPI midiStreamRestart16(HMIDISTRM16 hms);
-MMRESULT32 WINAPI midiStreamRestart32(HMIDISTRM32 hms);
-#define midiStreamRestart WINELIB_NAME(midiStreamRestart)
+MMRESULT WINAPI midiStreamRestart(HMIDISTRM hms);
 MMRESULT16 WINAPI midiStreamStop16(HMIDISTRM16 hms);
-MMRESULT32 WINAPI midiStreamStop32(HMIDISTRM32 hms);
-#define midiStreamStop WINELIB_NAME(midiStreamStop)
+MMRESULT WINAPI midiStreamStop(HMIDISTRM hms);
 
 #define AUX_MAPPER     (-1)
 
@@ -793,22 +720,22 @@
 typedef struct {
     WORD	wMid;			/* manufacturer ID */
     WORD	wPid;			/* product ID */
-    MMVERSION32	vDriverVersion;		/* version of the driver */
+    MMVERSION	vDriverVersion;		/* version of the driver */
     CHAR	szPname[MAXPNAMELEN];	/* product name (NULL terminated string) */
     WORD	wTechnology;		/* type of device */
     WORD	wReserved1;		/* padding */
     DWORD	dwSupport;		/* functionality supported by driver */
-} AUXCAPS32A, *LPAUXCAPS32A;
+} AUXCAPSA, *LPAUXCAPSA;
 
 typedef struct {
     WORD	wMid;			/* manufacturer ID */
     WORD	wPid;			/* product ID */
-    MMVERSION32	vDriverVersion;		/* version of the driver */
+    MMVERSION	vDriverVersion;		/* version of the driver */
     WCHAR	szPname[MAXPNAMELEN];	/* product name (NULL terminated string) */
     WORD	wTechnology;		/* type of device */
     WORD	wReserved1;		/* padding */
     DWORD	dwSupport;		/* functionality supported by driver */
-} AUXCAPS32W, *LPAUXCAPS32W;
+} AUXCAPSW, *LPAUXCAPSW;
 
 #define AUXCAPS_CDAUDIO    1       /* audio from internal CD-ROM drive */
 #define AUXCAPS_AUXIN      2       /* audio from auxiliary input jacks */
@@ -817,31 +744,26 @@
 #define AUXCAPS_LRVOLUME        0x0002  /* separate left-right volume control */
 
 UINT16 WINAPI auxGetNumDevs16(void);
-UINT32 WINAPI auxGetNumDevs32(void);
-#define auxGetNumDevs WINELIB_NAME(auxGetNumDevs)
+UINT WINAPI auxGetNumDevs(void);
 UINT16 WINAPI auxGetDevCaps16 (UINT16,LPAUXCAPS16,UINT16);
-UINT32 WINAPI auxGetDevCaps32A(UINT32,LPAUXCAPS32A,UINT32);
-UINT32 WINAPI auxGetDevCaps32W(UINT32,LPAUXCAPS32W,UINT32);
+UINT WINAPI auxGetDevCapsA(UINT,LPAUXCAPSA,UINT);
+UINT WINAPI auxGetDevCapsW(UINT,LPAUXCAPSW,UINT);
 #define auxGetDevCaps WINELIB_NAME_AW(auxGetDevCaps)
 UINT16 WINAPI auxSetVolume16(UINT16,DWORD);
-UINT32 WINAPI auxSetVolume32(UINT32,DWORD);
-#define auxSetVolume WINELIB_NAME(auxSetVolume)
+UINT WINAPI auxSetVolume(UINT,DWORD);
 
 UINT16 WINAPI auxGetVolume16(UINT16,LPDWORD);
-UINT32 WINAPI auxGetVolume32(UINT32,LPDWORD);
-#define auxGetVolume WINELIB_NAME(auxGetVolume)
+UINT WINAPI auxGetVolume(UINT,LPDWORD);
 
 DWORD WINAPI auxOutMessage16(UINT16,UINT16,DWORD,DWORD);
-DWORD WINAPI auxOutMessage32(UINT32,UINT32,DWORD,DWORD);
-#define auxOutMessage WINELIB_NAME(auxOutMessage)
+DWORD WINAPI auxOutMessage(UINT,UINT,DWORD,DWORD);
 
 #define TIMERR_NOERROR        (0)                  /* no error */
 #define TIMERR_NOCANDO        (TIMERR_BASE+1)      /* request not completed */
 #define TIMERR_STRUCT         (TIMERR_BASE+33)     /* time struct size */
 
 typedef void (CALLBACK *LPTIMECALLBACK16)(UINT16 uTimerID, UINT16 uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
-typedef void (CALLBACK *LPTIMECALLBACK32)(UINT32 uTimerID, UINT32 uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
-DECL_WINELIB_TYPE(LPTIMECALLBACK)
+typedef void (CALLBACK *LPTIMECALLBACK)(UINT uTimerID, UINT uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
 
 #define TIME_ONESHOT		0x0000	/* program timer for single event */
 #define TIME_PERIODIC		0x0001	/* program for continuous periodic event */
@@ -855,32 +777,24 @@
 } TIMECAPS16,*LPTIMECAPS16;
 
 typedef struct {
-    UINT32	wPeriodMin;
-    UINT32	wPeriodMax;
-} TIMECAPS32, *LPTIMECAPS32;
+    UINT	wPeriodMin;
+    UINT	wPeriodMax;
+} TIMECAPS, *LPTIMECAPS;
 
-DECL_WINELIB_TYPE(TIMECAPS)
-DECL_WINELIB_TYPE(LPTIMECAPS)
 
 MMRESULT16 WINAPI timeGetSystemTime16(LPMMTIME16,UINT16);
-MMRESULT32 WINAPI timeGetSystemTime32(LPMMTIME32,UINT32);
-#define timeGetSystemTime WINELIB_NAME(timeGetSystemTime)
+MMRESULT WINAPI timeGetSystemTime(LPMMTIME,UINT);
 DWORD WINAPI timeGetTime(void);	/* same for win32/win16 */
 MMRESULT16 WINAPI timeSetEvent16(UINT16,UINT16,LPTIMECALLBACK16,DWORD,UINT16);
-MMRESULT32 WINAPI timeSetEvent32(UINT32,UINT32,LPTIMECALLBACK32,DWORD,UINT32);
-#define timeSetEvent WINELIB_NAME(timeSetEvent)
+MMRESULT WINAPI timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD,UINT);
 MMRESULT16 WINAPI timeKillEvent16(UINT16);
-MMRESULT32 WINAPI timeKillEvent32(UINT32);
-#define timeKillEvent WINELIB_NAME(timeKillEvent)
+MMRESULT WINAPI timeKillEvent(UINT);
 MMRESULT16 WINAPI timeGetDevCaps16(LPTIMECAPS16,UINT16);
-MMRESULT32 WINAPI timeGetDevCaps32(LPTIMECAPS32,UINT32);
-#define timeGetDevCaps WINELIB_NAME(timeGetDevCaps)
+MMRESULT WINAPI timeGetDevCaps(LPTIMECAPS,UINT);
 MMRESULT16 WINAPI timeBeginPeriod16(UINT16);
-MMRESULT32 WINAPI timeBeginPeriod32(UINT32);
-#define timeBeginPeriod WINELIB_NAME(timeBeginPeriod)
+MMRESULT WINAPI timeBeginPeriod(UINT);
 MMRESULT16 WINAPI timeEndPeriod16(UINT16);
-MMRESULT32 WINAPI timeEndPeriod32(UINT32);
-#define timeEndPeriod WINELIB_NAME(timeEndPeriod)
+MMRESULT WINAPI timeEndPeriod(UINT);
 
 #define JOYERR_NOERROR        (0)                  /* no error */
 #define JOYERR_PARMS          (JOYERR_BASE+5)      /* bad parameters */
@@ -976,55 +890,55 @@
     WORD wMid;
     WORD wPid;
     CHAR szPname[MAXPNAMELEN];
-    UINT32 wXmin;
-    UINT32 wXmax;
-    UINT32 wYmin;
-    UINT32 wYmax;
-    UINT32 wZmin;
-    UINT32 wZmax;
-    UINT32 wNumButtons;
-    UINT32 wPeriodMin;
-    UINT32 wPeriodMax;
-    UINT32 wRmin;
-    UINT32 wRmax;
-    UINT32 wUmin;
-    UINT32 wUmax;
-    UINT32 wVmin;
-    UINT32 wVmax;
-    UINT32 wCaps;
-    UINT32 wMaxAxes;
-    UINT32 wNumAxes;
-    UINT32 wMaxButtons;
+    UINT wXmin;
+    UINT wXmax;
+    UINT wYmin;
+    UINT wYmax;
+    UINT wZmin;
+    UINT wZmax;
+    UINT wNumButtons;
+    UINT wPeriodMin;
+    UINT wPeriodMax;
+    UINT wRmin;
+    UINT wRmax;
+    UINT wUmin;
+    UINT wUmax;
+    UINT wVmin;
+    UINT wVmax;
+    UINT wCaps;
+    UINT wMaxAxes;
+    UINT wNumAxes;
+    UINT wMaxButtons;
     CHAR szRegKey[MAXPNAMELEN];
     CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
-} JOYCAPS32A, *LPJOYCAPS32A;
+} JOYCAPSA, *LPJOYCAPSA;
 
 typedef struct {
     WORD wMid;
     WORD wPid;
     WCHAR szPname[MAXPNAMELEN];
-    UINT32 wXmin;
-    UINT32 wXmax;
-    UINT32 wYmin;
-    UINT32 wYmax;
-    UINT32 wZmin;
-    UINT32 wZmax;
-    UINT32 wNumButtons;
-    UINT32 wPeriodMin;
-    UINT32 wPeriodMax;
-    UINT32 wRmin;
-    UINT32 wRmax;
-    UINT32 wUmin;
-    UINT32 wUmax;
-    UINT32 wVmin;
-    UINT32 wVmax;
-    UINT32 wCaps;
-    UINT32 wMaxAxes;
-    UINT32 wNumAxes;
-    UINT32 wMaxButtons;
+    UINT wXmin;
+    UINT wXmax;
+    UINT wYmin;
+    UINT wYmax;
+    UINT wZmin;
+    UINT wZmax;
+    UINT wNumButtons;
+    UINT wPeriodMin;
+    UINT wPeriodMax;
+    UINT wRmin;
+    UINT wRmax;
+    UINT wUmin;
+    UINT wUmax;
+    UINT wVmin;
+    UINT wVmax;
+    UINT wCaps;
+    UINT wMaxAxes;
+    UINT wNumAxes;
+    UINT wMaxButtons;
     WCHAR szRegKey[MAXPNAMELEN];
     WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
-} JOYCAPS32W, *LPJOYCAPS32W;
+} JOYCAPSW, *LPJOYCAPSW;
 DECL_WINELIB_TYPE_AW(JOYCAPS)
 DECL_WINELIB_TYPE_AW(LPJOYCAPS)
 
@@ -1036,11 +950,11 @@
 } JOYINFO16, *LPJOYINFO16;
 
 typedef struct {
-    UINT32 wXpos;
-    UINT32 wYpos;
-    UINT32 wZpos;
-    UINT32 wButtons;
-} JOYINFO32, *LPJOYINFO32;
+    UINT wXpos;
+    UINT wYpos;
+    UINT wZpos;
+    UINT wButtons;
+} JOYINFO, *LPJOYINFO;
 
 typedef struct {
     DWORD	dwSize;		/* size of structure */
@@ -1058,32 +972,24 @@
     DWORD	dwReserved2;	/* reserved for future expansion */
 } JOYINFOEX,*LPJOYINFOEX;
 
-DECL_WINELIB_TYPE(JOYINFO)
-DECL_WINELIB_TYPE(LPJOYINFO)
 
 MMRESULT16 WINAPI joyGetDevCaps16 (UINT16,LPJOYCAPS16 ,UINT16);
-MMRESULT32 WINAPI joyGetDevCaps32A(UINT32,LPJOYCAPS32A,UINT32);
-MMRESULT32 WINAPI joyGetDevCaps32W(UINT32,LPJOYCAPS32W,UINT32);
+MMRESULT WINAPI joyGetDevCapsA(UINT,LPJOYCAPSA,UINT);
+MMRESULT WINAPI joyGetDevCapsW(UINT,LPJOYCAPSW,UINT);
 #define joyGetDevCaps WINELIB_NAME_AW(joyGetDevCaps)
 UINT16 WINAPI joyGetNumDevs16(void);
-UINT32 WINAPI joyGetNumDevs32(void);
-#define joyGetNumDevs WINELIB_NAME(joyGetNumDevs)
+UINT WINAPI joyGetNumDevs(void);
 MMRESULT16 WINAPI joyGetPos16(UINT16,LPJOYINFO16);
-MMRESULT32 WINAPI joyGetPos32(UINT32,LPJOYINFO32);
-#define joyGetPos WINELIB_NAME(joyGetPos)
-MMRESULT32 WINAPI joyGetPosEx(UINT32,LPJOYINFOEX);
+MMRESULT WINAPI joyGetPos(UINT,LPJOYINFO);
+MMRESULT WINAPI joyGetPosEx(UINT,LPJOYINFOEX);
 MMRESULT16 WINAPI joyGetThreshold16(UINT16,UINT16*);
-MMRESULT32 WINAPI joyGetThreshold32(UINT32,UINT32*);
-#define joyGetThreshold WINELIB_NAME(joyGetThreshold)
+MMRESULT WINAPI joyGetThreshold(UINT,UINT*);
 MMRESULT16 WINAPI joyReleaseCapture16(UINT16);
-MMRESULT32 WINAPI joyReleaseCapture32(UINT32);
-#define joyReleaseCapture WINELIB_NAME(joyReleaseCapture)
+MMRESULT WINAPI joyReleaseCapture(UINT);
 MMRESULT16 WINAPI joySetCapture16(HWND16,UINT16,UINT16,BOOL16);
-MMRESULT32 WINAPI joySetCapture32(HWND32,UINT32,UINT32,BOOL32);
-#define joySetCapture WINELIB_NAME(joySetCapture)
+MMRESULT WINAPI joySetCapture(HWND,UINT,UINT,BOOL);
 MMRESULT16 WINAPI joySetThreshold16(UINT16,UINT16);
-MMRESULT32 WINAPI joySetThreshold32(UINT32,UINT32);
-#define joySetThreshold WINELIB_NAME(joySetThreshold)
+MMRESULT WINAPI joySetThreshold(UINT,UINT);
 
 typedef struct {
 	WORD		wMid;		/* manufacturer id */
@@ -1097,20 +1003,20 @@
 typedef struct {
 	WORD		wMid;
 	WORD		wPid;
-	MMVERSION32	vDriverVersion;
+	MMVERSION	vDriverVersion;
 	CHAR		szPname[MAXPNAMELEN];
 	DWORD		fdwSupport;
 	DWORD		cDestinations;
-} MIXERCAPS32A,*LPMIXERCAPS32A;
+} MIXERCAPSA,*LPMIXERCAPSA;
 
 typedef struct {
 	WORD		wMid;
 	WORD		wPid;
-	MMVERSION32	vDriverVersion;
+	MMVERSION	vDriverVersion;
 	WCHAR		szPname[MAXPNAMELEN];
 	DWORD		fdwSupport;
 	DWORD		cDestinations;
-} MIXERCAPS32W,*LPMIXERCAPS32W;
+} MIXERCAPSW,*LPMIXERCAPSW;
 
 DECL_WINELIB_TYPE_AW(MIXERCAPS)
 DECL_WINELIB_TYPE_AW(LPMIXERCAPS)
@@ -1200,10 +1106,10 @@
 	DWORD	dwDeviceID;
 	WORD	wMid;
 	WORD	wPid;
-	MMVERSION32	vDriverVersion;
+	MMVERSION	vDriverVersion;
 	CHAR	szPname[MAXPNAMELEN];
     } Target;
-} MIXERLINE32A, *LPMIXERLINE32A;
+} MIXERLINEA, *LPMIXERLINEA;
 
 typedef struct {
     DWORD	cbStruct;
@@ -1223,10 +1129,10 @@
 	DWORD	dwDeviceID;
 	WORD	wMid;
 	WORD	wPid;
-	MMVERSION32	vDriverVersion;
+	MMVERSION	vDriverVersion;
 	WCHAR	szPname[MAXPNAMELEN];
     } Target;
-} MIXERLINE32W, *LPMIXERLINE32W;
+} MIXERLINEW, *LPMIXERLINEW;
 
 DECL_WINELIB_TYPE_AW(MIXERLINE)
 DECL_WINELIB_TYPE_AW(LPMIXERLINE)
@@ -1351,7 +1257,7 @@
 	DWORD		cbCustomData;
 	DWORD		dwReserved[6];
     } Metrics;
-} MIXERCONTROL32A, *LPMIXERCONTROL32A;
+} MIXERCONTROLA, *LPMIXERCONTROLA;
 
 typedef struct {
     DWORD		cbStruct;
@@ -1377,7 +1283,7 @@
 	DWORD		cbCustomData;
 	DWORD		dwReserved[6];
     } Metrics;
-} MIXERCONTROL32W, *LPMIXERCONTROL32W;
+} MIXERCONTROLW, *LPMIXERCONTROLW;
 
 DECL_WINELIB_TYPE_AW(MIXERCONTROL)
 DECL_WINELIB_TYPE_AW(LPMIXERCONTROL)
@@ -1403,8 +1309,8 @@
     } u;
     DWORD	cControls;
     DWORD	cbmxctrl;
-    LPMIXERCONTROL32A	pamxctrl;
-} MIXERLINECONTROLS32A, *LPMIXERLINECONTROLS32A;
+    LPMIXERCONTROLA	pamxctrl;
+} MIXERLINECONTROLSA, *LPMIXERLINECONTROLSA;
 
 typedef struct {
     DWORD	cbStruct;
@@ -1415,8 +1321,8 @@
     } u;
     DWORD	cControls;
     DWORD	cbmxctrl;
-    LPMIXERCONTROL32W	pamxctrl;
-} MIXERLINECONTROLS32W, *LPMIXERLINECONTROLS32W;
+    LPMIXERCONTROLW	pamxctrl;
+} MIXERLINECONTROLSW, *LPMIXERLINECONTROLSW;
 
 DECL_WINELIB_TYPE_AW(MIXERLINECONTROLS)
 DECL_WINELIB_TYPE_AW(LPMIXERLINECONTROLS)
@@ -1438,15 +1344,13 @@
     DWORD	dwControlID;
     DWORD	cChannels;
     union {
-        HWND32	hwndOwner;
+        HWND	hwndOwner;
         DWORD	cMultipleItems;
     } u;
     DWORD	cbDetails;
     LPVOID	paDetails;
-} MIXERCONTROLDETAILS32,*LPMIXERCONTROLDETAILS32;
+} MIXERCONTROLDETAILS,*LPMIXERCONTROLDETAILS;
 
-DECL_WINELIB_TYPE(MIXERCONTROLDETAILS)
-DECL_WINELIB_TYPE(LPMIXERCONTROLDETAILS)
 
 typedef struct {
     DWORD	dwParam1;
@@ -1458,13 +1362,13 @@
     DWORD	dwParam1;
     DWORD	dwParam2;
     CHAR	szName[MIXER_LONG_NAME_CHARS];
-} MIXERCONTROLDETAILS_LISTTEXT32A,*LPMIXERCONTROLDETAILS_LISTTEXT32A;
+} MIXERCONTROLDETAILS_LISTTEXTA,*LPMIXERCONTROLDETAILS_LISTTEXTA;
 
 typedef struct {
     DWORD	dwParam1;
     DWORD	dwParam2;
     WCHAR	szName[MIXER_LONG_NAME_CHARS];
-} MIXERCONTROLDETAILS_LISTTEXT32W,*LPMIXERCONTROLDETAILS_LISTTEXT32W;
+} MIXERCONTROLDETAILS_LISTTEXTW,*LPMIXERCONTROLDETAILS_LISTTEXTW;
 
 DECL_WINELIB_TYPE_AW(MIXERCONTROLDETAILS_LISTTEXT)
 DECL_WINELIB_TYPE_AW(LPMIXERCONTROLDETAILS_LISTTEXT)
@@ -1507,39 +1411,33 @@
 #define	MIXER_SETCONTROLDETAILSF_QUERYMASK	0x0000000FL
 
 UINT16 WINAPI mixerGetNumDevs16(void);
-UINT32 WINAPI mixerGetNumDevs32(void);
-#define mixerGetNumDevs WINELIB_NAME(mixerGetNumDevs)
+UINT WINAPI mixerGetNumDevs(void);
 UINT16 WINAPI mixerOpen16(LPHMIXER16,UINT16,DWORD,DWORD,DWORD);
-UINT32 WINAPI mixerOpen32(LPHMIXER32,UINT32,DWORD,DWORD,DWORD);
-#define mixerOpen WINELIB_NAME(mixerOpen)
+UINT WINAPI mixerOpen(LPHMIXER,UINT,DWORD,DWORD,DWORD);
 UINT16 WINAPI mixerClose16(HMIXER16);
-UINT32 WINAPI mixerClose32(HMIXER32);
-#define mixerClose WINELIB_NAME(mixerClose)
+UINT WINAPI mixerClose(HMIXER);
 UINT16 WINAPI mixerMessage16(HMIXER16,UINT16,DWORD,DWORD);
-UINT32 WINAPI mixerMessage32(HMIXER32,UINT32,DWORD,DWORD);
-#define mixerMessage WINELIB_NAME(mixerMessage)
+UINT WINAPI mixerMessage(HMIXER,UINT,DWORD,DWORD);
 UINT16 WINAPI mixerGetDevCaps16(UINT16,LPMIXERCAPS16,UINT16);
-UINT32 WINAPI mixerGetDevCaps32A(UINT32,LPMIXERCAPS32A,UINT32);
-UINT32 WINAPI mixerGetDevCaps32W(UINT32,LPMIXERCAPS32W,UINT32);
+UINT WINAPI mixerGetDevCapsA(UINT,LPMIXERCAPSA,UINT);
+UINT WINAPI mixerGetDevCapsW(UINT,LPMIXERCAPSW,UINT);
 #define mixerGetDevCaps WINELIB_NAME_AW(mixerGetDevCaps)
 UINT16 WINAPI mixerGetLineInfo16(HMIXEROBJ16,LPMIXERLINE16,DWORD);
-UINT32 WINAPI mixerGetLineInfo32A(HMIXEROBJ32,LPMIXERLINE32A,DWORD);
-UINT32 WINAPI mixerGetLineInfo32W(HMIXEROBJ32,LPMIXERLINE32W,DWORD);
+UINT WINAPI mixerGetLineInfoA(HMIXEROBJ,LPMIXERLINEA,DWORD);
+UINT WINAPI mixerGetLineInfoW(HMIXEROBJ,LPMIXERLINEW,DWORD);
 #define mixerGetLineInfo WINELIB_NAME_AW(mixerGetLineInfo)
 UINT16 WINAPI mixerGetID16(HMIXEROBJ16,LPUINT16,DWORD);
-UINT32 WINAPI mixerGetID32(HMIXEROBJ32,LPUINT32,DWORD);
-#define mixerGetID WINELIB_NAME(mixerGetID)
+UINT WINAPI mixerGetID(HMIXEROBJ,LPUINT,DWORD);
 UINT16 WINAPI mixerGetLineControls16(HMIXEROBJ16,LPMIXERLINECONTROLS16,DWORD);
-UINT32 WINAPI mixerGetLineControls32A(HMIXEROBJ32,LPMIXERLINECONTROLS32A,DWORD);
-UINT32 WINAPI mixerGetLineControls32W(HMIXEROBJ32,LPMIXERLINECONTROLS32W,DWORD);
+UINT WINAPI mixerGetLineControlsA(HMIXEROBJ,LPMIXERLINECONTROLSA,DWORD);
+UINT WINAPI mixerGetLineControlsW(HMIXEROBJ,LPMIXERLINECONTROLSW,DWORD);
 #define mixerGetLineControl WINELIB_NAME_AW(mixerGetLineControl)
 UINT16 WINAPI mixerGetControlDetails16(HMIXEROBJ16,LPMIXERCONTROLDETAILS16,DWORD);
-UINT32 WINAPI mixerGetControlDetails32A(HMIXEROBJ32,LPMIXERCONTROLDETAILS32,DWORD);
-UINT32 WINAPI mixerGetControlDetails32W(HMIXEROBJ32,LPMIXERCONTROLDETAILS32,DWORD);
+UINT WINAPI mixerGetControlDetailsA(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
+UINT WINAPI mixerGetControlDetailsW(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
 #define mixerGetControlDetails WINELIB_NAME_AW(mixerGetControlDetails)
 UINT16 WINAPI mixerSetControlDetails16(HMIXEROBJ16,LPMIXERCONTROLDETAILS16,DWORD);
-UINT32 WINAPI mixerSetControlDetails32(HMIXEROBJ32,LPMIXERCONTROLDETAILS32,DWORD);
-#define mixerSetControlDetails WINELIB_NAME(mixerSetControlDetails)
+UINT WINAPI mixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
 
 #define MMIOERR_BASE            256
 #define MMIOERR_FILENOTFOUND    (MMIOERR_BASE + 1)  /* file not found */
@@ -1558,9 +1456,8 @@
 typedef DWORD           FOURCC;         /* a four character code */
 typedef LONG (CALLBACK *LPMMIOPROC16)(LPSTR lpmmioinfo, UINT16 uMessage,
                                       LPARAM lParam1, LPARAM lParam2);
-typedef LONG (CALLBACK *LPMMIOPROC32)(LPSTR lpmmioinfo, UINT32 uMessage,
+typedef LONG (CALLBACK *LPMMIOPROC)(LPSTR lpmmioinfo, UINT uMessage,
                                       LPARAM lParam1, LPARAM lParam2);
-DECL_WINELIB_TYPE(LPMMIOPROC)
 
 typedef struct {
         DWORD		dwFlags;	/* general status flags */
@@ -1587,9 +1484,9 @@
 typedef struct {
         DWORD		dwFlags;
         FOURCC		fccIOProc;
-        LPMMIOPROC32	pIOProc;
-        UINT32		wErrorRet;
-        HTASK32		htask;
+        LPMMIOPROC	pIOProc;
+        UINT		wErrorRet;
+        HTASK		htask;
         /* fields maintained by MMIO functions during buffered I/O */
         LONG		cchBuffer;
         HPSTR		pchBuffer;
@@ -1603,12 +1500,9 @@
         /* other fields maintained by MMIO */
         DWORD		dwReserved1;
         DWORD		dwReserved2;
-        HMMIO32		hmmio;
-} MMIOINFO32, *PMMIOINFO32, *LPMMIOINFO32;
+        HMMIO		hmmio;
+} MMIOINFO, *PMMIOINFO, *LPMMIOINFO;
 
-DECL_WINELIB_TYPE(MMIOINFO)
-DECL_WINELIB_TYPE(PMMIOINFO)
-DECL_WINELIB_TYPE(LPMMIOINFO)
 
 typedef struct _MMCKINFO
 {
@@ -1682,99 +1576,85 @@
                 ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
 
 LPMMIOPROC16 WINAPI mmioInstallIOProc16(FOURCC,LPMMIOPROC16,DWORD);
-LPMMIOPROC32 WINAPI mmioInstallIOProc32A(FOURCC,LPMMIOPROC32,DWORD);
-LPMMIOPROC32 WINAPI mmioInstallIOProc32W(FOURCC,LPMMIOPROC32,DWORD);
+LPMMIOPROC WINAPI mmioInstallIOProcA(FOURCC,LPMMIOPROC,DWORD);
+LPMMIOPROC WINAPI mmioInstallIOProcW(FOURCC,LPMMIOPROC,DWORD);
 #define      mmioInstallIOProc WINELIB_NAME_AW(mmioInstallIOProc)
 
 FOURCC WINAPI	mmioStringToFOURCC16(LPCSTR,UINT16);
-FOURCC WINAPI	mmioStringToFOURCC32A(LPCSTR,UINT32);
-FOURCC WINAPI	mmioStringToFOURCC32W(LPCWSTR,UINT32);
+FOURCC WINAPI	mmioStringToFOURCCA(LPCSTR,UINT);
+FOURCC WINAPI	mmioStringToFOURCCW(LPCWSTR,UINT);
 #define mmioStringToFOURCC WINELIB_NAME_AW(mmioStringToFOURCC)
 HMMIO16	WINAPI	mmioOpen16 (LPSTR ,MMIOINFO16*,DWORD);
-HMMIO32	WINAPI	mmioOpen32A(LPSTR ,MMIOINFO32*,DWORD);
-HMMIO32	WINAPI	mmioOpen32W(LPWSTR,MMIOINFO32*,DWORD);
+HMMIO	WINAPI	mmioOpenA(LPSTR ,MMIOINFO*,DWORD);
+HMMIO	WINAPI	mmioOpenW(LPWSTR,MMIOINFO*,DWORD);
 #define		mmioOpen WINELIB_NAME_AW(mmioOpen)
 
 UINT16 WINAPI	mmioRename16(LPCSTR szFileName, LPCSTR szNewFileName,
      MMIOINFO16 * lpmmioinfo, DWORD dwRenameFlags);
-UINT32 WINAPI	mmioRename32A(LPCSTR szFileName, LPCSTR szNewFileName,
-     MMIOINFO32 * lpmmioinfo, DWORD dwRenameFlags);
-UINT32 WINAPI	mmioRename32W(LPCWSTR szFileName, LPCWSTR szNewFileName,
-     MMIOINFO32 * lpmmioinfo, DWORD dwRenameFlags);
+UINT WINAPI	mmioRenameA(LPCSTR szFileName, LPCSTR szNewFileName,
+     MMIOINFO * lpmmioinfo, DWORD dwRenameFlags);
+UINT WINAPI	mmioRenameW(LPCWSTR szFileName, LPCWSTR szNewFileName,
+     MMIOINFO * lpmmioinfo, DWORD dwRenameFlags);
 #define 	mmioRename WINELIB_NAME_AW(mmioRename)
 
 MMRESULT16 WINAPI mmioClose16(HMMIO16,UINT16);
-MMRESULT32 WINAPI mmioClose32(HMMIO32,UINT32);
-#define		  mmioClose WINELIB_NAME(mmioClose)
+MMRESULT WINAPI mmioClose(HMMIO,UINT);
 LONG WINAPI	mmioRead16(HMMIO16,HPSTR,LONG);
-LONG WINAPI	mmioRead32(HMMIO32,HPSTR,LONG);
-#define		mmioRead WINELIB_NAME(mmioRead)
+LONG WINAPI	mmioRead(HMMIO,HPSTR,LONG);
 LONG WINAPI	mmioWrite16(HMMIO16,HPCSTR,LONG);
-LONG WINAPI	mmioWrite32(HMMIO32,HPCSTR,LONG);
-#define		mmioWrite WINELIB_NAME(mmioWrite)
+LONG WINAPI	mmioWrite(HMMIO,HPCSTR,LONG);
 LONG WINAPI	mmioSeek16(HMMIO16,LONG,INT16);
-LONG WINAPI	mmioSeek32(HMMIO32,LONG,INT32);
-#define		mmioSeek WINELIB_NAME(mmioSeek)
+LONG WINAPI	mmioSeek(HMMIO,LONG,INT);
 MMRESULT16 WINAPI	mmioGetInfo16(HMMIO16,MMIOINFO16*,UINT16);
-MMRESULT32 WINAPI	mmioGetInfo32(HMMIO32,MMIOINFO32*,UINT32);
-#define			mmioGetInfo WINELIB_NAME(mmioGetInfo)
+MMRESULT WINAPI	mmioGetInfo(HMMIO,MMIOINFO*,UINT);
 MMRESULT16 WINAPI	mmioSetInfo16(HMMIO16,const MMIOINFO16*,UINT16);
-MMRESULT32 WINAPI	mmioSetInfo32(HMMIO32,const MMIOINFO32*,UINT32);
-#define			mmioSetInfo WINELIB_NAME(mmioSetInfo)
+MMRESULT WINAPI	mmioSetInfo(HMMIO,const MMIOINFO*,UINT);
 UINT16 WINAPI	mmioSetBuffer16(HMMIO16,LPSTR,LONG,UINT16);
-UINT32 WINAPI	mmioSetBuffer32(HMMIO32,LPSTR,LONG,UINT32);
-#define			mmioSetBuffer WINELIB_NAME(mmioSetBuffer)
+UINT WINAPI	mmioSetBuffer(HMMIO,LPSTR,LONG,UINT);
 UINT16 WINAPI	mmioFlush16(HMMIO16,UINT16);
-UINT32 WINAPI	mmioFlush32(HMMIO32,UINT32);
-#define		mmioFlush WINELIB_NAME(mmioFlush)
+UINT WINAPI	mmioFlush(HMMIO,UINT);
 UINT16 WINAPI	mmioAdvance16(HMMIO16,MMIOINFO16*,UINT16);
-UINT32 WINAPI	mmioAdvance32(HMMIO32,MMIOINFO32*,UINT32);
-#define		mmioAdvance WINELIB_NAME(mmioAdvance)
+UINT WINAPI	mmioAdvance(HMMIO,MMIOINFO*,UINT);
 LONG WINAPI mmioSendMessage(HMMIO16,UINT16,LPARAM,LPARAM);
 UINT16 WINAPI mmioDescend(HMMIO16,MMCKINFO*,const MMCKINFO*,UINT16);
 
 UINT16 WINAPI	mmioAscend16(HMMIO16,MMCKINFO*,UINT16);
-UINT32 WINAPI	mmioAscend32(HMMIO32,MMCKINFO*,UINT32);
-#define		mmioAscend WINELIB_NAME(mmioAscend)
+UINT WINAPI	mmioAscend(HMMIO,MMCKINFO*,UINT);
 UINT16 WINAPI 	mmioCreateChunk16(HMMIO16,MMCKINFO*,UINT16);
-UINT32 WINAPI 	mmioCreateChunk32(HMMIO32,MMCKINFO*,UINT32);
-#define		mmioCreateChunk WINELIB_NAME(mmioCreateChunk)
+UINT WINAPI 	mmioCreateChunk(HMMIO,MMCKINFO*,UINT);
 
 typedef UINT16 (CALLBACK *YIELDPROC)(UINT16,DWORD);
 
 DWORD WINAPI mciSendCommand16(UINT16,UINT16,DWORD,DWORD);
-DWORD WINAPI mciSendCommand32A(UINT32,UINT32,DWORD,DWORD);
-DWORD WINAPI mciSendCommand32W(UINT32,UINT32,DWORD,DWORD);
+DWORD WINAPI mciSendCommandA(UINT,UINT,DWORD,DWORD);
+DWORD WINAPI mciSendCommandW(UINT,UINT,DWORD,DWORD);
 #define mciSendCommand WINELIB_NAME_AW(mciSendCommand)
 
 DWORD WINAPI mciSendString16(LPCSTR,LPSTR,UINT16,HWND16);
-DWORD WINAPI mciSendString32A(LPCSTR,LPSTR,UINT32,HWND32);
-DWORD WINAPI mciSendString32W(LPCWSTR,LPSTR,UINT32,HWND32);
+DWORD WINAPI mciSendStringA(LPCSTR,LPSTR,UINT,HWND);
+DWORD WINAPI mciSendStringW(LPCWSTR,LPSTR,UINT,HWND);
 #define mciSendString WINELIB_NAME_AW(mciSendString)
 
 UINT16 WINAPI mciGetDeviceID16(LPCSTR);
-UINT32 WINAPI mciGetDeviceID32A(LPCSTR);
-UINT32 WINAPI mciGetDeviceID32W(LPCWSTR);
+UINT WINAPI mciGetDeviceIDA(LPCSTR);
+UINT WINAPI mciGetDeviceIDW(LPCWSTR);
 #define mciGetDeviceID WINELIB_NAME_AW(mciGetDeviceID)
 
 UINT16 WINAPI mciGetDeviceIDFromElementID16(DWORD,LPCSTR);
 
 BOOL16 WINAPI mciGetErrorString16 (DWORD,LPSTR,UINT16);
-BOOL32 WINAPI mciGetErrorString32A(DWORD,LPSTR,UINT32);
-BOOL32 WINAPI mciGetErrorString32W(DWORD,LPWSTR,UINT32);
+BOOL WINAPI mciGetErrorStringA(DWORD,LPSTR,UINT);
+BOOL WINAPI mciGetErrorStringW(DWORD,LPWSTR,UINT);
 #define mciGetErrorString WINELIB_NAME_AW(mciGetErrorString)
 
 BOOL16 WINAPI mciSetYieldProc16(UINT16,YIELDPROC,DWORD);
-BOOL32 WINAPI mciSetYieldProc32(UINT32,YIELDPROC,DWORD);
-#define mciSetYieldProc WINELIB_NAME(mciSetYieldProc)
+BOOL WINAPI mciSetYieldProc(UINT,YIELDPROC,DWORD);
 
 HTASK16 WINAPI mciGetCreatorTask16(UINT16);
-HTASK32 WINAPI mciGetCreatorTask32(UINT32);
-#define mciGetCreatorTask WINELIB_NAME(mciGetCreatorTask)
+HTASK WINAPI mciGetCreatorTask(UINT);
 
 YIELDPROC WINAPI mciGetYieldProc16(UINT16,DWORD*);
-YIELDPROC WINAPI mciGetYieldProc32(UINT32,DWORD*);
-#define mciGetYieldProc WINELIB_NAME(mciGetYieldProc)
+YIELDPROC WINAPI mciGetYieldProc(UINT,DWORD*);
 
 #define MCIERR_INVALID_DEVICE_ID        (MCIERR_BASE + 1)
 #define MCIERR_UNRECOGNIZED_KEYWORD     (MCIERR_BASE + 3)
@@ -2049,19 +1929,19 @@
 
 typedef struct {
 	DWORD		dwCallback;
-	MCIDEVICEID32	wDeviceID;
+	MCIDEVICEID	wDeviceID;
 	LPSTR		lpstrDeviceType;
 	LPSTR		lpstrElementName;
 	LPSTR		lpstrAlias;
-} MCI_OPEN_PARMS32A, *LPMCI_OPEN_PARMS32A;
+} MCI_OPEN_PARMSA, *LPMCI_OPEN_PARMSA;
 
 typedef struct {
 	DWORD		dwCallback;
-	MCIDEVICEID32	wDeviceID;
+	MCIDEVICEID	wDeviceID;
 	LPWSTR		lpstrDeviceType;
 	LPWSTR		lpstrElementName;
 	LPWSTR		lpstrAlias;
-} MCI_OPEN_PARMS32W, *LPMCI_OPEN_PARMS32W;
+} MCI_OPEN_PARMSW, *LPMCI_OPEN_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_OPEN_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_OPEN_PARMS)
@@ -2094,13 +1974,13 @@
 	DWORD   dwCallback;
 	LPSTR   lpstrReturn;
 	DWORD   dwRetSize;
-} MCI_INFO_PARMS32A, *LPMCI_INFO_PARMS32A;
+} MCI_INFO_PARMSA, *LPMCI_INFO_PARMSA;
 
 typedef struct {
 	DWORD   dwCallback;
 	LPSTR   lpstrReturn;
 	DWORD   dwRetSize;
-} MCI_INFO_PARMS32W, *LPMCI_INFO_PARMS32W;
+} MCI_INFO_PARMSW, *LPMCI_INFO_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_INFO_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_INFO_PARMS)
@@ -2125,16 +2005,16 @@
 	LPSTR	lpstrReturn;
 	DWORD	dwRetSize;
 	DWORD	dwNumber;
-	UINT32	wDeviceType;
-} MCI_SYSINFO_PARMS32A, *LPMCI_SYSINFO_PARMS32A;
+	UINT	wDeviceType;
+} MCI_SYSINFO_PARMSA, *LPMCI_SYSINFO_PARMSA;
 
 typedef struct {
 	DWORD	dwCallback;
 	LPWSTR	lpstrReturn;
 	DWORD	dwRetSize;
 	DWORD	dwNumber;
-	UINT32	wDeviceType;
-} MCI_SYSINFO_PARMS32W, *LPMCI_SYSINFO_PARMS32W;
+	UINT	wDeviceType;
+} MCI_SYSINFO_PARMSW, *LPMCI_SYSINFO_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_SYSINFO_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_SYSINFO_PARMS)
@@ -2155,12 +2035,10 @@
 
 typedef struct {
 	DWORD	dwCallback;
-	INT32	nVirtKey;
-	HWND32	hwndBreak;
-} MCI_BREAK_PARMS32, *LPMCI_BREAK_PARMS32;
+	INT	nVirtKey;
+	HWND	hwndBreak;
+} MCI_BREAK_PARMS, *LPMCI_BREAK_PARMS;
 
-DECL_WINELIB_TYPE(MCI_BREAK_PARMS)
-DECL_WINELIB_TYPE(LPMCI_BREAK_PARMS)
 
 typedef struct {
 	DWORD   dwCallback;
@@ -2180,12 +2058,12 @@
 typedef struct {
 	DWORD	dwCallback;
 	LPCSTR	lpfilename;
-} MCI_LOAD_PARMS32A, *LPMCI_LOAD_PARMS32A;
+} MCI_LOAD_PARMSA, *LPMCI_LOAD_PARMSA;
 
 typedef struct {
 	DWORD	dwCallback;
 	LPCWSTR	lpfilename;
-} MCI_LOAD_PARMS32W, *LPMCI_LOAD_PARMS32W;
+} MCI_LOAD_PARMSW, *LPMCI_LOAD_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_LOAD_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_LOAD_PARMS)
@@ -2260,12 +2138,12 @@
 typedef struct {
 	DWORD	dwCallback;
 	LPCSTR	lpstrCommand;
-} MCI_VD_ESCAPE_PARMS32A, *LPMCI_VD_ESCAPE_PARMS32A;
+} MCI_VD_ESCAPE_PARMSA, *LPMCI_VD_ESCAPE_PARMSA;
 
 typedef struct {
 	DWORD	dwCallback;
 	LPCWSTR	lpstrCommand;
-} MCI_VD_ESCAPE_PARMS32W, *LPMCI_VD_ESCAPE_PARMS32W;
+} MCI_VD_ESCAPE_PARMSW, *LPMCI_VD_ESCAPE_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_VD_ESCAPE_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_VD_ESCAPE_PARMS)
@@ -2308,21 +2186,21 @@
 
 typedef struct {
 	DWORD		dwCallback;
-	MCIDEVICEID32	wDeviceID;
+	MCIDEVICEID	wDeviceID;
 	LPCSTR		lpstrDeviceType;
 	LPCSTR		lpstrElementName;
 	LPCSTR		lpstrAlias;
 	DWORD   	dwBufferSeconds;
-} MCI_WAVE_OPEN_PARMS32A, *LPMCI_WAVE_OPEN_PARMS32A;
+} MCI_WAVE_OPEN_PARMSA, *LPMCI_WAVE_OPEN_PARMSA;
 
 typedef struct {
 	DWORD		dwCallback;
-	MCIDEVICEID32	wDeviceID;
+	MCIDEVICEID	wDeviceID;
 	LPCWSTR		lpstrDeviceType;
 	LPCWSTR		lpstrElementName;
 	LPCWSTR		lpstrAlias;
 	DWORD   	dwBufferSeconds;
-} MCI_WAVE_OPEN_PARMS32W, *LPMCI_WAVE_OPEN_PARMS32W;
+} MCI_WAVE_OPEN_PARMSW, *LPMCI_WAVE_OPEN_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_WAVE_OPEN_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_WAVE_OPEN_PARMS)
@@ -2357,18 +2235,16 @@
 	DWORD	dwCallback;
 	DWORD	dwTimeFormat;
 	DWORD	dwAudio;
-	UINT32	wInput;
-	UINT32	wOutput;
-	UINT32	wFormatTag;
-	UINT32	nChannels;
+	UINT	wInput;
+	UINT	wOutput;
+	UINT	wFormatTag;
+	UINT	nChannels;
 	DWORD	nSamplesPerSec;
 	DWORD	nAvgBytesPerSec;
-	UINT32	nBlockAlign;
-	UINT32	wBitsPerSample;
-} MCI_WAVE_SET_PARMS32, * LPMCI_WAVE_SET_PARMS32;
+	UINT	nBlockAlign;
+	UINT	wBitsPerSample;
+} MCI_WAVE_SET_PARMS, * LPMCI_WAVE_SET_PARMS;
 
-DECL_WINELIB_TYPE(MCI_WAVE_SET_PARMS)
-DECL_WINELIB_TYPE(LPMCI_WAVE_SET_PARMS)
 
 #define     MCI_SEQ_DIV_PPQN            (0 + MCI_SEQ_OFFSET)
 #define     MCI_SEQ_DIV_SMPTE_24        (1 + MCI_SEQ_OFFSET)
@@ -2469,23 +2345,23 @@
 
 typedef struct {
 	DWORD		dwCallback;
-	MCIDEVICEID32	wDeviceID;
+	MCIDEVICEID	wDeviceID;
 	LPCSTR		lpstrDeviceType;
 	LPCSTR		lpstrElementName;
 	LPCSTR		lpstrAlias;
 	DWORD		dwStyle;
-	HWND32		hWndParent;
-} MCI_ANIM_OPEN_PARMS32A, *LPMCI_ANIM_OPEN_PARMS32A;
+	HWND		hWndParent;
+} MCI_ANIM_OPEN_PARMSA, *LPMCI_ANIM_OPEN_PARMSA;
 
 typedef struct {
 	DWORD		dwCallback;
-	MCIDEVICEID32	wDeviceID;
+	MCIDEVICEID	wDeviceID;
 	LPCSTR		lpstrDeviceType;
 	LPCSTR		lpstrElementName;
 	LPCSTR		lpstrAlias;
 	DWORD		dwStyle;
-	HWND32		hWndParent;
-} MCI_ANIM_OPEN_PARMS32W, *LPMCI_ANIM_OPEN_PARMS32W;
+	HWND		hWndParent;
+} MCI_ANIM_OPEN_PARMSW, *LPMCI_ANIM_OPEN_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_ANIM_OPEN_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_ANIM_OPEN_PARMS)
@@ -2513,17 +2389,17 @@
 
 typedef struct {
 	DWORD	dwCallback;
-	HWND32	hWnd;
-	UINT32	nCmdShow;
+	HWND	hWnd;
+	UINT	nCmdShow;
 	LPCSTR	lpstrText;
-} MCI_ANIM_WINDOW_PARMS32A, *LPMCI_ANIM_WINDOW_PARMS32A;
+} MCI_ANIM_WINDOW_PARMSA, *LPMCI_ANIM_WINDOW_PARMSA;
 
 typedef struct {
 	DWORD	dwCallback;
-	HWND32	hWnd;
-	UINT32	nCmdShow;
+	HWND	hWnd;
+	UINT	nCmdShow;
 	LPCWSTR	lpstrText;
-} MCI_ANIM_WINDOW_PARMS32W, *LPMCI_ANIM_WINDOW_PARMS32W;
+} MCI_ANIM_WINDOW_PARMSW, *LPMCI_ANIM_WINDOW_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_ANIM_WINDOW_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_ANIM_WINDOW_PARMS)
@@ -2541,15 +2417,13 @@
 typedef struct {
 	DWORD	dwCallback;
 #ifdef MCI_USE_OFFEXT
-	POINT32	ptOffset;
-	POINT32	ptExtent;
+	POINT	ptOffset;
+	POINT	ptExtent;
 #else   /* ifdef MCI_USE_OFFEXT */
-	RECT32	rc;
+	RECT	rc;
 #endif  /* ifdef MCI_USE_OFFEXT */
-} MCI_ANIM_RECT_PARMS32, *LPMCI_ANIM_RECT_PARMS32;
+} MCI_ANIM_RECT_PARMS, *LPMCI_ANIM_RECT_PARMS;
 
-DECL_WINELIB_TYPE(MCI_ANIM_RECT_PARMS)
-DECL_WINELIB_TYPE(LPMCI_ANIM_RECT_PARMS)
 
 typedef struct {
 	DWORD   dwCallback;
@@ -2559,12 +2433,10 @@
 
 typedef struct {
 	DWORD   dwCallback;
-	RECT32  rc;
-	HDC32   hDC;
-} MCI_ANIM_UPDATE_PARMS32, *LPMCI_ANIM_UPDATE_PARMS32;
+	RECT  rc;
+	HDC   hDC;
+} MCI_ANIM_UPDATE_PARMS, *LPMCI_ANIM_UPDATE_PARMS;
 
-DECL_WINELIB_TYPE(MCI_ANIM_UPDATE_PARMS)
-DECL_WINELIB_TYPE(LPMCI_ANIM_UPDATE_PARMS)
 
 #define MCI_OVLY_OPEN_WS                0x00010000L
 #define MCI_OVLY_OPEN_PARENT            0x00020000L
@@ -2611,23 +2483,23 @@
 
 typedef struct {
 	DWORD		dwCallback;
-	MCIDEVICEID32	wDeviceID;
+	MCIDEVICEID	wDeviceID;
 	LPCSTR		lpstrDeviceType;
 	LPCSTR		lpstrElementName;
 	LPCSTR		lpstrAlias;
 	DWORD		dwStyle;
-	HWND32		hWndParent;
-} MCI_OVLY_OPEN_PARMS32A, *LPMCI_OVLY_OPEN_PARMS32A;
+	HWND		hWndParent;
+} MCI_OVLY_OPEN_PARMSA, *LPMCI_OVLY_OPEN_PARMSA;
 
 typedef struct {
 	DWORD		dwCallback;
-	MCIDEVICEID32	wDeviceID;
+	MCIDEVICEID	wDeviceID;
 	LPCWSTR		lpstrDeviceType;
 	LPCWSTR		lpstrElementName;
 	LPCWSTR		lpstrAlias;
 	DWORD		dwStyle;
-	HWND32		hWndParent;
-} MCI_OVLY_OPEN_PARMS32W, *LPMCI_OVLY_OPEN_PARMS32W;
+	HWND		hWndParent;
+} MCI_OVLY_OPEN_PARMSW, *LPMCI_OVLY_OPEN_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_OVLY_OPEN_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_OVLY_OPEN_PARMS)
@@ -2643,17 +2515,17 @@
 
 typedef struct {
 	DWORD	dwCallback;
-	HWND32	hWnd;
-	UINT32	nCmdShow;
+	HWND	hWnd;
+	UINT	nCmdShow;
 	LPCSTR	lpstrText;
-} MCI_OVLY_WINDOW_PARMS32A, *LPMCI_OVLY_WINDOW_PARMS32A;
+} MCI_OVLY_WINDOW_PARMSA, *LPMCI_OVLY_WINDOW_PARMSA;
 
 typedef struct {
 	DWORD	dwCallback;
-	HWND32	hWnd;
-	UINT32	nCmdShow;
+	HWND	hWnd;
+	UINT	nCmdShow;
 	LPCWSTR	lpstrText;
-} MCI_OVLY_WINDOW_PARMS32W, *LPMCI_OVLY_WINDOW_PARMS32W;
+} MCI_OVLY_WINDOW_PARMSW, *LPMCI_OVLY_WINDOW_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_OVLY_WINDOW_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_OVLY_WINDOW_PARMS)
@@ -2671,15 +2543,13 @@
 typedef struct {
 	DWORD   dwCallback;
 #ifdef MCI_USE_OFFEXT
-	POINT32 ptOffset;
-	POINT32 ptExtent;
+	POINT ptOffset;
+	POINT ptExtent;
 #else   /* ifdef MCI_USE_OFFEXT */
-	RECT32  rc;
+	RECT  rc;
 #endif  /* ifdef MCI_USE_OFFEXT */
-} MCI_OVLY_RECT_PARMS32, *LPMCI_OVLY_RECT_PARMS32;
+} MCI_OVLY_RECT_PARMS, *LPMCI_OVLY_RECT_PARMS;
 
-DECL_WINELIB_TYPE(MCI_OVLY_RECT_PARMS)
-DECL_WINELIB_TYPE(LPMCI_OVLY_RECT_PARMS)
 
 typedef struct {
 	DWORD   dwCallback;
@@ -2690,14 +2560,14 @@
 typedef struct {
 	DWORD   dwCallback;
 	LPCSTR  lpfilename;
-	RECT32  rc;
-} MCI_OVLY_SAVE_PARMS32A, *LPMCI_OVLY_SAVE_PARMS32A;
+	RECT  rc;
+} MCI_OVLY_SAVE_PARMSA, *LPMCI_OVLY_SAVE_PARMSA;
 
 typedef struct {
 	DWORD   dwCallback;
 	LPCWSTR  lpfilename;
-	RECT32  rc;
-} MCI_OVLY_SAVE_PARMS32W, *LPMCI_OVLY_SAVE_PARMS32W;
+	RECT  rc;
+} MCI_OVLY_SAVE_PARMSW, *LPMCI_OVLY_SAVE_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_OVLY_SAVE_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_OVLY_SAVE_PARMS)
@@ -2711,14 +2581,14 @@
 typedef struct {
 	DWORD	dwCallback;
 	LPCSTR	lpfilename;
-	RECT32	rc;
-} MCI_OVLY_LOAD_PARMS32A, *LPMCI_OVLY_LOAD_PARMS32A;
+	RECT	rc;
+} MCI_OVLY_LOAD_PARMSA, *LPMCI_OVLY_LOAD_PARMSA;
 
 typedef struct {
 	DWORD	dwCallback;
 	LPCWSTR	lpfilename;
-	RECT32	rc;
-} MCI_OVLY_LOAD_PARMS32W, *LPMCI_OVLY_LOAD_PARMS32W;
+	RECT	rc;
+} MCI_OVLY_LOAD_PARMSW, *LPMCI_OVLY_LOAD_PARMSW;
 
 DECL_WINELIB_TYPE_AW(MCI_OVLY_LOAD_PARMS)
 DECL_WINELIB_TYPE_AW(LPMCI_OVLY_LOAD_PARMS)
@@ -2920,32 +2790,26 @@
 } MCI_OPEN_DRIVER_PARMS, *LPMCI_OPEN_DRIVER_PARMS;
 
 DWORD  WINAPI mciGetDriverData16(UINT16 uDeviceID);
-DWORD  WINAPI mciGetDriverData32(UINT32 uDeviceID);
-#define mciGetDriverData WINELIB_NAME(mciGetDriverData)
+DWORD  WINAPI mciGetDriverData(UINT uDeviceID);
 
 BOOL16 WINAPI mciSetDriverData16(UINT16 uDeviceID, DWORD dwData);
-BOOL32 WINAPI mciSetDriverData32(UINT32 uDeviceID, DWORD dwData);
-#define mciSetDriverData WINELIB_NAME(mciSetDriverData)
+BOOL WINAPI mciSetDriverData(UINT uDeviceID, DWORD dwData);
 
 UINT16 WINAPI mciDriverYield16(UINT16 uDeviceID);
-UINT32 WINAPI mciDriverYield32(UINT32 uDeviceID);
-#define mciDriverYield WINELIB_NAME(mciDriverYield)
+UINT WINAPI mciDriverYield(UINT uDeviceID);
 
 BOOL16 WINAPI mciDriverNotify16(HWND16 hwndCallback, UINT16 uDeviceID,
                               UINT16 uStatus);
-BOOL32 WINAPI mciDriverNotify32(HWND32 hwndCallback, UINT32 uDeviceID,
-				UINT32 uStatus);
-#define mciDriverNotify WINELIB_NAME(mciDriverNotify)
+BOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID,
+				UINT uStatus);
 
 UINT16 WINAPI mciLoadCommandResource16(HINSTANCE16 hInstance,
                                      LPCSTR lpResName, UINT16 uType);
-UINT32 WINAPI mciLoadCommandResource32(HINSTANCE32 hInstance,
-				       LPCWSTR lpResName, UINT32 uType);
-#define mciLoadCommandResource WINELIB_NAME(mciLoadCommandResource)
+UINT WINAPI mciLoadCommandResource(HINSTANCE hInstance,
+				       LPCWSTR lpResName, UINT uType);
 
 BOOL16 WINAPI mciFreeCommandResource16(UINT16 uTable);
-BOOL32 WINAPI mciFreeCommandResource32(UINT32 uTable);
-#define mciFreeCommandResource WINELIB_NAME(mciFreeCommandResource)
+BOOL WINAPI mciFreeCommandResource(UINT uTable);
 
 #define DCB_NULL		0x0000
 #define DCB_WINDOW		0x0001			/* dwCallback is a HWND */
@@ -2955,7 +2819,7 @@
 #define DCB_TYPEMASK	0x0007
 #define DCB_NOSWITCH	0x0008			/* don't switch stacks for callback */
 
-BOOL16 WINAPI DriverCallback(DWORD dwCallBack, UINT16 uFlags, HANDLE16 hDev, 
+BOOL16 WINAPI DriverCallback16(DWORD dwCallBack, UINT16 uFlags, HANDLE16 hDev, 
                              WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2);
 DWORD WINAPI auxMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
 					DWORD dwParam1, DWORD dwParam2);
diff --git a/include/module.h b/include/module.h
index 5b7c384..51160e2 100644
--- a/include/module.h
+++ b/include/module.h
@@ -47,7 +47,7 @@
     WORD    min_swap_area;    /* 3c Min. swap area size */
     WORD    expected_version; /* 3e Expected Windows version */
     /* From here, these are extra fields not present in normal Windows */
-    HMODULE32  module32;      /* 40 PE module handle for Win32 modules */
+    HMODULE  module32;      /* 40 PE module handle for Win32 modules */
     HMODULE16  self;          /* 44 Handle for this module */
     WORD    self_loading_sel; /* 46 Selector used for self-loading apps. */
     LPDOSTASK lpDosTask;
@@ -94,7 +94,7 @@
     SEGPTR    cmdLine WINE_PACKED;  /* Command-line */
     SEGPTR    showCmd WINE_PACKED;  /* Code for ShowWindow() */
     SEGPTR    reserved WINE_PACKED;
-} LOADPARAMS;
+} LOADPARAMS16;
 
 typedef struct 
 {
@@ -102,7 +102,7 @@
     LPSTR lpCmdLine;
     UINT16 *lpCmdShow;
     DWORD dwReserved;
-} LOADPARAMS32;
+} LOADPARAMS;
 
 #pragma pack(4)
 
@@ -117,7 +117,7 @@
 		ELF_MODREF	elf;
 	} binfmt;
 
-	HMODULE32		module;
+	HMODULE		module;
 
 	int			nDeps;
 	struct _wine_modref	**deps;
@@ -143,15 +143,15 @@
     (((OFSTRUCT *)((char*)(pModule) + (pModule)->fileinfo))->szPathName)
 
 /* module.c */
-extern FARPROC32 MODULE_GetProcAddress32( HMODULE32 hModule, LPCSTR function, BOOL32 snoop );
-extern WINE_MODREF *MODULE32_LookupHMODULE( HMODULE32 hModule );
-extern void MODULE_InitializeDLLs( HMODULE32 root, DWORD type, LPVOID lpReserved );
-extern HMODULE32 MODULE_FindModule32( LPCSTR path );
-extern HMODULE32 MODULE_CreateDummyModule( const OFSTRUCT *ofs, LPCSTR modName );
+extern FARPROC MODULE_GetProcAddress( HMODULE hModule, LPCSTR function, BOOL snoop );
+extern WINE_MODREF *MODULE32_LookupHMODULE( HMODULE hModule );
+extern void MODULE_InitializeDLLs( HMODULE root, DWORD type, LPVOID lpReserved );
+extern HMODULE MODULE_FindModule( LPCSTR path );
+extern HMODULE MODULE_CreateDummyModule( const OFSTRUCT *ofs, LPCSTR modName );
 extern FARPROC16 MODULE_GetWndProcEntry16( const char *name );
-extern FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE32 hmodule, LPCSTR name );
-extern SEGPTR WINAPI HasGPHandler( SEGPTR address );
-HMODULE32 MODULE_LoadLibraryEx32A( LPCSTR libname, HFILE32 hfile, DWORD flags );
+extern FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE hmodule, LPCSTR name );
+extern SEGPTR WINAPI HasGPHandler16( SEGPTR address );
+HMODULE MODULE_LoadLibraryExA( LPCSTR libname, HFILE hfile, DWORD flags );
 
 /* loader/ne/module.c */
 extern NE_MODULE *NE_GetPtr( HMODULE16 hModule );
@@ -162,13 +162,13 @@
 extern FARPROC16 NE_GetEntryPoint( HMODULE16 hModule, WORD ordinal );
 extern FARPROC16 NE_GetEntryPointEx( HMODULE16 hModule, WORD ordinal, BOOL16 snoop );
 extern BOOL16 NE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset );
-extern HANDLE32 NE_OpenFile( NE_MODULE *pModule );
+extern HANDLE NE_OpenFile( NE_MODULE *pModule );
 extern HINSTANCE16 NE_LoadModule( LPCSTR name, HINSTANCE16 *hPrevInstance,
-                                  BOOL32 implicit, BOOL32 lib_only );
+                                  BOOL implicit, BOOL lib_only );
 
 /* loader/ne/resource.c */
 extern HGLOBAL16 WINAPI NE_DefResourceHandler(HGLOBAL16,HMODULE16,HRSRC16);
-extern BOOL32 NE_InitResourceHandler( HMODULE16 hModule );
+extern BOOL NE_InitResourceHandler( HMODULE16 hModule );
 extern HRSRC16 NE_FindResource( NE_MODULE *pModule, LPCSTR name, LPCSTR type );
 extern INT16 NE_AccessResource( NE_MODULE *pModule, HRSRC16 hRsrc );
 extern DWORD NE_SizeofResource( NE_MODULE *pModule, HRSRC16 hRsrc );
@@ -179,29 +179,29 @@
 
 
 /* loader/ne/segment.c */
-extern BOOL32 NE_LoadSegment( NE_MODULE *pModule, WORD segnum );
-extern BOOL32 NE_LoadAllSegments( NE_MODULE *pModule );
+extern BOOL NE_LoadSegment( NE_MODULE *pModule, WORD segnum );
+extern BOOL NE_LoadAllSegments( NE_MODULE *pModule );
 extern void NE_FixupPrologs( NE_MODULE *pModule );
 extern void NE_InitializeDLLs( HMODULE16 hModule );
-extern BOOL32 NE_CreateSegments( NE_MODULE *pModule );
+extern BOOL NE_CreateSegments( NE_MODULE *pModule );
 extern HINSTANCE16 NE_CreateInstance( NE_MODULE *pModule, HINSTANCE16 *prev,
-                                      BOOL32 lib_only );
+                                      BOOL lib_only );
 
 /* loader/ne/convert.c */
 HGLOBAL16 NE_LoadPEResource( NE_MODULE *pModule, WORD type, LPVOID bits, DWORD size );
 BOOL16 NE_FreePEResource( NE_MODULE *pModule, HGLOBAL16 handle );
 
 /* if1632/builtin.c */
-extern BOOL32 BUILTIN_Init(void);
-extern HMODULE16 BUILTIN_LoadModule( LPCSTR name, BOOL32 force );
+extern BOOL BUILTIN_Init(void);
+extern HMODULE16 BUILTIN_LoadModule( LPCSTR name, BOOL force );
 extern LPCSTR BUILTIN_GetEntryPoint16( WORD cs, WORD ip, WORD *pOrd );
-extern BOOL32 BUILTIN_ParseDLLOptions( const char *str );
+extern BOOL BUILTIN_ParseDLLOptions( const char *str );
 extern void BUILTIN_PrintDLLs(void);
 
 /* relay32/builtin.c */
-extern HMODULE32 BUILTIN32_LoadImage( LPCSTR name, OFSTRUCT *ofs, BOOL32 force );
+extern HMODULE BUILTIN32_LoadImage( LPCSTR name, OFSTRUCT *ofs, BOOL force );
 
 /* if1632/builtin.c */
-extern HMODULE16 (*fnBUILTIN_LoadModule)(LPCSTR name, BOOL32 force);
+extern HMODULE16 (*fnBUILTIN_LoadModule)(LPCSTR name, BOOL force);
 
 #endif  /* __WINE_MODULE_H */
diff --git a/include/mouse.h b/include/mouse.h
index 7c0c88a..1de96dd 100644
--- a/include/mouse.h
+++ b/include/mouse.h
@@ -36,12 +36,12 @@
     DWORD magic;
     DWORD keyState;
     DWORD time;
-    HWND32 hWnd;
+    HWND hWnd;
 
 } WINE_MOUSEEVENT;
 
 void MOUSE_SendEvent( DWORD mouseStatus, DWORD posX, DWORD posY,
-                      DWORD keyState, DWORD time, HWND32 hWnd );
+                      DWORD keyState, DWORD time, HWND hWnd );
 
 /***********************************
  * 	MouseWheel support (defines)
diff --git a/include/msacm.h b/include/msacm.h
index 8ed6d3f..f0fc2aa 100644
--- a/include/msacm.h
+++ b/include/msacm.h
@@ -17,11 +17,11 @@
 /* FIXME: Move to wintypes.h */
 #define DECLARE_HANDLE(a) \
 typedef HANDLE16 a##16; \
-typedef HANDLE32 a##32; \
+typedef HANDLE a; \
 typedef a##16 *P##a##16; \
 typedef a##16 *NP##a##16; \
 typedef a##16 *LP##a##16; \
-typedef a##32 *P##a##32;
+typedef a *P##a;
 
 DECLARE_HANDLE(HACMDRIVERID)
 DECLARE_HANDLE(HACMDRIVER)
@@ -107,16 +107,16 @@
 
 #define ACM_FILTERENUMF_DWFILTERTAG 0x00010000L
 
-#define ACMHELPMSGSTRING32A       "acmchoose_help"
-#define ACMHELPMSGSTRING32W       L"acmchoose_help"
+#define ACMHELPMSGSTRINGA       "acmchoose_help"
+#define ACMHELPMSGSTRINGW       L"acmchoose_help"
 #define ACMHELPMSGSTRING16       "acmchoose_help"
 
-#define ACMHELPMSGCONTEXTMENU32A  "acmchoose_contextmenu"
-#define ACMHELPMSGCONTEXTMENU32W  L"acmchoose_contextmenu"
+#define ACMHELPMSGCONTEXTMENUA  "acmchoose_contextmenu"
+#define ACMHELPMSGCONTEXTMENUW  L"acmchoose_contextmenu"
 #define ACMHELPMSGCONTEXTMENU16   "acmchoose_contextmenu"
 
-#define ACMHELPMSGCONTEXTHELP32A  "acmchoose_contexthelp"
-#define ACMHELPMSGCONTEXTHELP32W  L"acmchoose_contexthelp"
+#define ACMHELPMSGCONTEXTHELPA  "acmchoose_contexthelp"
+#define ACMHELPMSGCONTEXTHELPW  L"acmchoose_contexthelp"
 #define ACMHELPMSGCONTEXTHELP16   "acmchoose_contexthelp"
 
 #define MM_ACM_FORMATCHOOSE 0x8000
@@ -208,32 +208,32 @@
  * Callbacks
  */
 
-typedef BOOL32 (CALLBACK *ACMDRIVERENUMCB32)(
-  HACMDRIVERID32 hadid, DWORD dwInstance, DWORD fdwSupport
+typedef BOOL (CALLBACK *ACMDRIVERENUMCB)(
+  HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport
 );
 
 typedef BOOL16 (CALLBACK *ACMDRIVERENUMCB16)(
   HACMDRIVERID16 hadid, DWORD dwInstance, DWORD fdwSupport
 );
 
-typedef UINT32 (CALLBACK *ACMFILTERCHOOSEHOOKPROC32A)(
-  HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam
+typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCA)(
+  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
 );
 
-typedef UINT32 (CALLBACK *ACMFILTERCHOOSEHOOKPROC32W)(
-  HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam
+typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCW)(
+  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
 );
 
-typedef UINT32 (CALLBACK *ACMFILTERCHOOSEHOOKPROC16)(
-  HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam
+typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROC16)(
+  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
 );
 
-typedef UINT32 (CALLBACK *ACMFORMATCHOOSEHOOKPROC32A)(
-  HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam
+typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCA)(
+  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
 );
 
-typedef UINT32 (CALLBACK *ACMFORMATCHOOSEHOOKPROC32W)(
-  HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam
+typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCW)(
+  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
 );
 
 typedef UINT16 (CALLBACK *ACMFORMATCHOOSEHOOKPROC16)(
@@ -244,7 +244,7 @@
  * Structures
  */
 
-typedef struct _ACMDRIVERDETAILS32A
+typedef struct _ACMDRIVERDETAILSA
 {
   DWORD    cbStruct;
 
@@ -261,16 +261,16 @@
   DWORD    cFormatTags;
   DWORD    cFilterTags;
 
-  HICON32  hicon;
+  HICON  hicon;
 
   CHAR     szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
   CHAR     szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
   CHAR     szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
   CHAR     szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
   CHAR     szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
-} ACMDRIVERDETAILS32A, *PACMDRIVERDETAILS32A;
+} ACMDRIVERDETAILSA, *PACMDRIVERDETAILSA;
 
-typedef struct _ACMDRIVERDETAILS32W
+typedef struct _ACMDRIVERDETAILSW
 {
   DWORD    cbStruct;
 
@@ -287,14 +287,14 @@
   DWORD    cFormatTags;
   DWORD    cFilterTags;
 
-  HICON32  hicon;
+  HICON  hicon;
 
   WCHAR    szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
   WCHAR    szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
   WCHAR    szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
   WCHAR    szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
   WCHAR    szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
-} ACMDRIVERDETAILS32W, *PACMDRIVERDETAILS32W;
+} ACMDRIVERDETAILSW, *PACMDRIVERDETAILSW;
 
 typedef struct _ACMDRIVERDETAILS16
 {
@@ -322,12 +322,12 @@
   CHAR    szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
 } ACMDRIVERDETAILS16, *NPACMDRIVERDETAILS16, *LPACMDRIVERDETAILS16;
 
-typedef struct _ACMFILTERCHOOSE32A
+typedef struct _ACMFILTERCHOOSEA
 {
   DWORD         cbStruct;
   DWORD         fdwStyle;
 
-  HWND32        hwndOwner;
+  HWND        hwndOwner;
 
   PWAVEFILTER   pwfltr;
   DWORD         cbwfltr;
@@ -342,18 +342,18 @@
   DWORD         fdwEnum;
   PWAVEFILTER   pwfltrEnum;
     
-  HINSTANCE32   hInstance;
+  HINSTANCE   hInstance;
   LPCSTR        pszTemplateName;
   LPARAM        lCustData;
-  ACMFILTERCHOOSEHOOKPROC32A pfnHook;
-} ACMFILTERCHOOSE32A, *PACMFILTERCHOOSE32A;
+  ACMFILTERCHOOSEHOOKPROCA pfnHook;
+} ACMFILTERCHOOSEA, *PACMFILTERCHOOSEA;
 
-typedef struct _ACMFILTERCHOOSE32W
+typedef struct _ACMFILTERCHOOSEW
 {
   DWORD         cbStruct;
   DWORD         fdwStyle;
 
-  HWND32        hwndOwner;
+  HWND        hwndOwner;
 
   PWAVEFILTER   pwfltr;
   DWORD         cbwfltr;
@@ -368,11 +368,11 @@
   DWORD         fdwEnum;
   PWAVEFILTER   pwfltrEnum;
     
-  HINSTANCE32   hInstance;
+  HINSTANCE   hInstance;
   LPCWSTR       pszTemplateName;
   LPARAM        lCustData;
-  ACMFILTERCHOOSEHOOKPROC32W pfnHook;
-} ACMFILTERCHOOSE32W, *PACMFILTERCHOOSE32W;
+  ACMFILTERCHOOSEHOOKPROCW pfnHook;
+} ACMFILTERCHOOSEW, *PACMFILTERCHOOSEW;
 
 typedef struct _ACMFILTERCHOOSE16
 {
@@ -400,7 +400,7 @@
   ACMFILTERCHOOSEHOOKPROC16 pfnHook;
 } ACMFILTERCHOOSE16, *NPACMFILTERCHOOSE16, *LPACMFILTERCHOOSE16;
 
-typedef struct _ACMFILTERDETAILS32A
+typedef struct _ACMFILTERDETAILSA
 {
   DWORD           cbStruct;
   DWORD           dwFilterIndex;
@@ -409,9 +409,9 @@
   PWAVEFILTER     pwfltr;
   DWORD           cbwfltr;
   CHAR            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
-} ACMFILTERDETAILS32A, *PACMFILTERDETAILS32A;
+} ACMFILTERDETAILSA, *PACMFILTERDETAILSA;
 
-typedef struct _ACMFILTERDETAILS32W
+typedef struct _ACMFILTERDETAILSW
 {
   DWORD          cbStruct;
   DWORD          dwFilterIndex;
@@ -420,7 +420,7 @@
   PWAVEFILTER    pwfltr;
   DWORD          cbwfltr;
   WCHAR          szFilter[ACMFILTERDETAILS_FILTER_CHARS];
-} ACMFILTERDETAILS32W, *PACMFILTERDETAILS32W;
+} ACMFILTERDETAILSW, *PACMFILTERDETAILSW;
 
 typedef struct _ACMFILTERDETAILS16
 {
@@ -433,7 +433,7 @@
   CHAR           szFilter[ACMFILTERDETAILS_FILTER_CHARS];
 } ACMFILTERDETAILS16, *NPACMFILTERDETAILS16, *LPACMFILTERDETAILS16;
 
-typedef struct _ACMFILTERTAGDETAILS32A
+typedef struct _ACMFILTERTAGDETAILSA
 {
   DWORD cbStruct;
   DWORD dwFilterTagIndex;
@@ -442,9 +442,9 @@
   DWORD fdwSupport;
   DWORD cStandardFilters;
   CHAR  szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
-} ACMFILTERTAGDETAILS32A, *PACMFILTERTAGDETAILS32A;
+} ACMFILTERTAGDETAILSA, *PACMFILTERTAGDETAILSA;
 
-typedef struct _ACMFILTERTAGDETAILS32W
+typedef struct _ACMFILTERTAGDETAILSW
 {
   DWORD cbStruct;
   DWORD dwFilterTagIndex;
@@ -453,7 +453,7 @@
   DWORD fdwSupport;
   DWORD cStandardFilters;
   WCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
-} ACMFILTERTAGDETAILS32W, *PACMFILTERTAGDETAILS32W;
+} ACMFILTERTAGDETAILSW, *PACMFILTERTAGDETAILSW;
 
 typedef struct _ACMFILTERTAGDETAILS16
 {
@@ -466,12 +466,12 @@
   CHAR  szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
 } ACMFILTERTAGDETAILS16, *NPACMFILTERTAGDETAILS16, *LPACMFILTERTAGDETAILS16;
 
-typedef struct _ACMFORMATCHOOSE32A
+typedef struct _ACMFORMATCHOOSEA
 {
   DWORD           cbStruct;
   DWORD           fdwStyle;
  
-  HWND32          hwndOwner;
+  HWND          hwndOwner;
 
   PWAVEFORMATEX   pwfx;
   DWORD           cbwfx;
@@ -486,18 +486,18 @@
   DWORD           fdwEnum;
   PWAVEFORMATEX   pwfxEnum;
     
-  HINSTANCE32     hInstance;
+  HINSTANCE     hInstance;
   LPCSTR          pszTemplateName;
   LPARAM          lCustData;
-  ACMFORMATCHOOSEHOOKPROC32A pfnHook;
-} ACMFORMATCHOOSE32A, *PACMFORMATCHOOSE32A;
+  ACMFORMATCHOOSEHOOKPROCA pfnHook;
+} ACMFORMATCHOOSEA, *PACMFORMATCHOOSEA;
 
-typedef struct _ACMFORMATCHOOSE32W
+typedef struct _ACMFORMATCHOOSEW
 {
   DWORD           cbStruct;
   DWORD           fdwStyle;
     
-  HWND32          hwndOwner;
+  HWND          hwndOwner;
 
   PWAVEFORMATEX   pwfx;
   DWORD           cbwfx;
@@ -512,11 +512,11 @@
   DWORD           fdwEnum;
   LPWAVEFORMATEX  pwfxEnum;
     
-  HINSTANCE32     hInstance;
+  HINSTANCE     hInstance;
   LPCWSTR         pszTemplateName;
   LPARAM          lCustData;
-  ACMFORMATCHOOSEHOOKPROC32W pfnHook;
-} ACMFORMATCHOOSE32W, *PACMFORMATCHOOSE32W;
+  ACMFORMATCHOOSEHOOKPROCW pfnHook;
+} ACMFORMATCHOOSEW, *PACMFORMATCHOOSEW;
 
 typedef struct _ACMFORMATCHOOSE16
 {
@@ -544,7 +544,7 @@
   ACMFORMATCHOOSEHOOKPROC16 pfnHook;
 } ACMFORMATCHOOSE16, *NPACMFORMATCHOOSE16, *LPACMFORMATCHOOSE16;
 
-typedef struct _ACMFORMATDETAILS32A
+typedef struct _ACMFORMATDETAILSA
 {
   DWORD           cbStruct;
   DWORD           dwFormatIndex;
@@ -553,9 +553,9 @@
   PWAVEFORMATEX   pwfx;
   DWORD           cbwfx;
   CHAR            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
-} ACMFORMATDETAILS32A, *PACMFORMATDETAILS32A;
+} ACMFORMATDETAILSA, *PACMFORMATDETAILSA;
 
-typedef struct _ACMFORMATDETAILS32W
+typedef struct _ACMFORMATDETAILSW
 {
     DWORD           cbStruct;
     DWORD           dwFormatIndex;
@@ -564,7 +564,7 @@
     PWAVEFORMATEX   pwfx;
     DWORD           cbwfx;
     WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
-} ACMFORMATDETAILS32W, *PACMFORMATDETAILS32W;
+} ACMFORMATDETAILSW, *PACMFORMATDETAILSW;
 
 typedef struct _ACMFORMATDETAILS16
 {
@@ -577,7 +577,7 @@
     CHAR             szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
 } ACMFORMATDETAILS16, *NPACMFORMATDETAILS16, *LPACMFORMATDETAILS16;
 
-typedef struct _ACMFORMATTAGDETAILS32A
+typedef struct _ACMFORMATTAGDETAILSA
 {
   DWORD cbStruct;
   DWORD dwFormatTagIndex;
@@ -586,9 +586,9 @@
   DWORD fdwSupport;
   DWORD cStandardFormats;
   CHAR  szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
-} ACMFORMATTAGDETAILS32A, *PACMFORMATTAGDETAILS32A;
+} ACMFORMATTAGDETAILSA, *PACMFORMATTAGDETAILSA;
 
-typedef struct _ACMFORMATTAGDETAILS32W
+typedef struct _ACMFORMATTAGDETAILSW
 {
   DWORD cbStruct;
   DWORD dwFormatTagIndex;
@@ -597,7 +597,7 @@
   DWORD fdwSupport;
   DWORD cStandardFormats;
   WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
-} ACMFORMATTAGDETAILS32W, *PACMFORMATTAGDETAILS32W;
+} ACMFORMATTAGDETAILSW, *PACMFORMATTAGDETAILSW;
 
 typedef struct _ACMFORMATTAGDETAILS16
 {
@@ -625,19 +625,19 @@
   DWORD  dwDstUser;
   DWORD  dwReservedDriver[10];
 } ACMSTREAMHEADER16, *NPACMSTREAMHEADER16, *LPACMSTREAMHEADER16,
-  ACMSTREAMHEADER32, *PACMSTREAMHEADER32;
+  ACMSTREAMHEADER, *PACMSTREAMHEADER;
 
 /***********************************************************************
  * Callbacks 2
  */
 
-typedef BOOL32 (CALLBACK *ACMFILTERENUMCB32A)(
-  HACMDRIVERID32 hadid, PACMFILTERDETAILS32A pafd,
+typedef BOOL (CALLBACK *ACMFILTERENUMCBA)(
+  HACMDRIVERID hadid, PACMFILTERDETAILSA pafd,
   DWORD dwInstance, DWORD fdwSupport
 );
 
-typedef BOOL32 (CALLBACK *ACMFILTERENUMCB32W)(
-  HACMDRIVERID32 hadid, PACMFILTERDETAILS32W pafd,
+typedef BOOL (CALLBACK *ACMFILTERENUMCBW)(
+  HACMDRIVERID hadid, PACMFILTERDETAILSW pafd,
   DWORD dwInstance, DWORD fdwSupport
 );
 
@@ -646,13 +646,13 @@
  DWORD dwInstance, DWORD fdwSupport
 );
 
-typedef BOOL32 (CALLBACK *ACMFILTERTAGENUMCB32A)(
-  HACMDRIVERID32 hadid, PACMFILTERTAGDETAILS32A paftd,
+typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBA)(
+  HACMDRIVERID hadid, PACMFILTERTAGDETAILSA paftd,
   DWORD dwInstance, DWORD fdwSupport
 );
 
-typedef BOOL32 (CALLBACK *ACMFILTERTAGENUMCB32W)(
-  HACMDRIVERID32 hadid, PACMFILTERTAGDETAILS32W paftd,
+typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBW)(
+  HACMDRIVERID hadid, PACMFILTERTAGDETAILSW paftd,
   DWORD dwInstance, DWORD fdwSupport
 );
 
@@ -661,13 +661,13 @@
   DWORD dwInstance, DWORD fdwSupport
 );
 
-typedef BOOL32 (CALLBACK *ACMFORMATENUMCB32A)(
-  HACMDRIVERID32 hadid, PACMFORMATDETAILS32A pafd,
+typedef BOOL (CALLBACK *ACMFORMATENUMCBA)(
+  HACMDRIVERID hadid, PACMFORMATDETAILSA pafd,
   DWORD dwInstance, DWORD fdwSupport
 );
 
-typedef BOOL32 (CALLBACK *ACMFORMATENUMCB32W)(
-  HACMDRIVERID32 hadid, PACMFORMATDETAILS32W pafd,
+typedef BOOL (CALLBACK *ACMFORMATENUMCBW)(
+  HACMDRIVERID hadid, PACMFORMATDETAILSW pafd,
   DWORD dwInstance, DWORD fdwSupport
 );
 
@@ -676,13 +676,13 @@
   DWORD dwInstance, DWORD fdwSupport
 );
 
-typedef BOOL32 (CALLBACK *ACMFORMATTAGENUMCB32A)(
-  HACMDRIVERID32 hadid, PACMFORMATTAGDETAILS32A paftd,
+typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA)(
+  HACMDRIVERID hadid, PACMFORMATTAGDETAILSA paftd,
   DWORD dwInstance, DWORD fdwSupport
 );
 
-typedef BOOL32 (CALLBACK *ACMFORMATTAGENUMCB32W)(
-  HACMDRIVERID32 hadid, PACMFORMATTAGDETAILS32W paftd,
+typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW)(
+  HACMDRIVERID hadid, PACMFORMATTAGDETAILSW paftd,
   DWORD dwInstance, DWORD fdwSupport
 );
 
@@ -796,207 +796,207 @@
  * Functions - Win32
  */
 
-MMRESULT32 WINAPI acmDriverAdd32A(
-  PHACMDRIVERID32 phadid, HINSTANCE32 hinstModule,
+MMRESULT WINAPI acmDriverAddA(
+  PHACMDRIVERID phadid, HINSTANCE hinstModule,
   LPARAM lParam, DWORD dwPriority, DWORD fdwAdd
 );
-MMRESULT32 WINAPI acmDriverAdd32W(
-  PHACMDRIVERID32 phadid, HINSTANCE32 hinstModule,
+MMRESULT WINAPI acmDriverAddW(
+  PHACMDRIVERID phadid, HINSTANCE hinstModule,
   LPARAM lParam, DWORD dwPriority, DWORD fdwAdd
 );
-MMRESULT32 WINAPI acmDriverClose32(
-  HACMDRIVER32 had, DWORD fdwClose
+MMRESULT WINAPI acmDriverClose(
+  HACMDRIVER had, DWORD fdwClose
 );
-MMRESULT32 WINAPI acmDriverDetails32A(
-  HACMDRIVERID32 hadid, PACMDRIVERDETAILS32A padd, DWORD fdwDetails
+MMRESULT WINAPI acmDriverDetailsA(
+  HACMDRIVERID hadid, PACMDRIVERDETAILSA padd, DWORD fdwDetails
 );
-MMRESULT32 WINAPI acmDriverDetails32W(
-  HACMDRIVERID32 hadid, PACMDRIVERDETAILS32W padd, DWORD fdwDetails
+MMRESULT WINAPI acmDriverDetailsW(
+  HACMDRIVERID hadid, PACMDRIVERDETAILSW padd, DWORD fdwDetails
 );
-MMRESULT32 WINAPI acmDriverEnum32(
-  ACMDRIVERENUMCB32 fnCallback, DWORD dwInstance, DWORD fdwEnum
+MMRESULT WINAPI acmDriverEnum(
+  ACMDRIVERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum
 );
-MMRESULT32 WINAPI acmDriverID32(
-  HACMOBJ32 hao, PHACMDRIVERID32 phadid, DWORD fdwDriverID
+MMRESULT WINAPI acmDriverID(
+  HACMOBJ hao, PHACMDRIVERID phadid, DWORD fdwDriverID
 );
-LRESULT WINAPI acmDriverMessage32(
-  HACMDRIVER32 had, UINT32 uMsg, LPARAM lParam1, LPARAM lParam2
+LRESULT WINAPI acmDriverMessage(
+  HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARAM lParam2
 );
-MMRESULT32 WINAPI acmDriverOpen32(
-  PHACMDRIVER32 phad, HACMDRIVERID32 hadid, DWORD fdwOpen
+MMRESULT WINAPI acmDriverOpen(
+  PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen
 );
-MMRESULT32 WINAPI acmDriverPriority32(
-  HACMDRIVERID32 hadid, DWORD dwPriority, DWORD fdwPriority
+MMRESULT WINAPI acmDriverPriority(
+  HACMDRIVERID hadid, DWORD dwPriority, DWORD fdwPriority
 );
-MMRESULT32 WINAPI acmDriverRemove32(
-  HACMDRIVERID32 hadid, DWORD fdwRemove
+MMRESULT WINAPI acmDriverRemove(
+  HACMDRIVERID hadid, DWORD fdwRemove
 );
-MMRESULT32 WINAPI acmFilterChoose32A(
-  PACMFILTERCHOOSE32A pafltrc
+MMRESULT WINAPI acmFilterChooseA(
+  PACMFILTERCHOOSEA pafltrc
 );
-MMRESULT32 WINAPI acmFilterChoose32W(
-  PACMFILTERCHOOSE32W pafltrc
+MMRESULT WINAPI acmFilterChooseW(
+  PACMFILTERCHOOSEW pafltrc
 );
-MMRESULT32 WINAPI acmFilterDetails32A(
-  HACMDRIVER32 had, PACMFILTERDETAILS32A pafd, DWORD fdwDetails
+MMRESULT WINAPI acmFilterDetailsA(
+  HACMDRIVER had, PACMFILTERDETAILSA pafd, DWORD fdwDetails
 );
-MMRESULT32 WINAPI acmFilterDetails32W(
-  HACMDRIVER32 had, PACMFILTERDETAILS32W pafd, DWORD fdwDetails
+MMRESULT WINAPI acmFilterDetailsW(
+  HACMDRIVER had, PACMFILTERDETAILSW pafd, DWORD fdwDetails
 );
-MMRESULT32 WINAPI acmFilterEnum32A(
-  HACMDRIVER32 had, PACMFILTERDETAILS32A pafd, 
-  ACMFILTERENUMCB32A fnCallback, DWORD dwInstance, DWORD fdwEnum
+MMRESULT WINAPI acmFilterEnumA(
+  HACMDRIVER had, PACMFILTERDETAILSA pafd, 
+  ACMFILTERENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
 );
-MMRESULT32 WINAPI acmFilterEnum32W(
-  HACMDRIVER32 had, PACMFILTERDETAILS32W pafd, 
-  ACMFILTERENUMCB32W fnCallback, DWORD dwInstance, DWORD fdwEnum
+MMRESULT WINAPI acmFilterEnumW(
+  HACMDRIVER had, PACMFILTERDETAILSW pafd, 
+  ACMFILTERENUMCBW fnCallback, DWORD dwInstance, DWORD fdwEnum
 );
-MMRESULT32 WINAPI acmFilterTagDetails32A(
-  HACMDRIVER32 had, PACMFILTERTAGDETAILS32A paftd, DWORD fdwDetails
+MMRESULT WINAPI acmFilterTagDetailsA(
+  HACMDRIVER had, PACMFILTERTAGDETAILSA paftd, DWORD fdwDetails
 );
-MMRESULT32 WINAPI acmFilterTagDetails32W(
-  HACMDRIVER32 had, PACMFILTERTAGDETAILS32W paftd, DWORD fdwDetails
+MMRESULT WINAPI acmFilterTagDetailsW(
+  HACMDRIVER had, PACMFILTERTAGDETAILSW paftd, DWORD fdwDetails
 );
-MMRESULT32 WINAPI acmFilterTagEnum32A(
-  HACMDRIVER32 had, PACMFILTERTAGDETAILS32A paftd,
-  ACMFILTERTAGENUMCB32A fnCallback, DWORD dwInstance, DWORD fdwEnum
+MMRESULT WINAPI acmFilterTagEnumA(
+  HACMDRIVER had, PACMFILTERTAGDETAILSA paftd,
+  ACMFILTERTAGENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
 );
-MMRESULT32 WINAPI acmFilterTagEnum32W(
-  HACMDRIVER32 had, PACMFILTERTAGDETAILS32W paftd,
-  ACMFILTERTAGENUMCB32W fnCallback, DWORD dwInstance, DWORD fdwEnum
+MMRESULT WINAPI acmFilterTagEnumW(
+  HACMDRIVER had, PACMFILTERTAGDETAILSW paftd,
+  ACMFILTERTAGENUMCBW fnCallback, DWORD dwInstance, DWORD fdwEnum
 );
-MMRESULT32 WINAPI acmFormatChoose32A(
-  PACMFORMATCHOOSE32A pafmtc
+MMRESULT WINAPI acmFormatChooseA(
+  PACMFORMATCHOOSEA pafmtc
 );
-MMRESULT32 WINAPI acmFormatChoose32W(
-  PACMFORMATCHOOSE32W pafmtc
+MMRESULT WINAPI acmFormatChooseW(
+  PACMFORMATCHOOSEW pafmtc
 );
-MMRESULT32 WINAPI acmFormatDetails32A(
-  HACMDRIVER32 had, PACMFORMATDETAILS32A pafd, DWORD fdwDetails
+MMRESULT WINAPI acmFormatDetailsA(
+  HACMDRIVER had, PACMFORMATDETAILSA pafd, DWORD fdwDetails
 );
-MMRESULT32 WINAPI acmFormatDetails32W(
-  HACMDRIVER32 had, PACMFORMATDETAILS32W pafd, DWORD fdwDetails
+MMRESULT WINAPI acmFormatDetailsW(
+  HACMDRIVER had, PACMFORMATDETAILSW pafd, DWORD fdwDetails
 );
-MMRESULT32 WINAPI acmFormatEnum32A(
-  HACMDRIVER32 had, PACMFORMATDETAILS32A pafd,
-  ACMFORMATENUMCB32A fnCallback, DWORD dwInstance, DWORD fdwEnum
+MMRESULT WINAPI acmFormatEnumA(
+  HACMDRIVER had, PACMFORMATDETAILSA pafd,
+  ACMFORMATENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
 );
-MMRESULT32 WINAPI acmFormatEnum32W(
-  HACMDRIVER32 had, PACMFORMATDETAILS32W pafd,
-  ACMFORMATENUMCB32W fnCallback, DWORD dwInstance,  DWORD fdwEnum
+MMRESULT WINAPI acmFormatEnumW(
+  HACMDRIVER had, PACMFORMATDETAILSW pafd,
+  ACMFORMATENUMCBW fnCallback, DWORD dwInstance,  DWORD fdwEnum
 );
-MMRESULT32 WINAPI acmFormatSuggest32(
-  HACMDRIVER32 had, PWAVEFORMATEX pwfxSrc, PWAVEFORMATEX pwfxDst,
+MMRESULT WINAPI acmFormatSuggest(
+  HACMDRIVER had, PWAVEFORMATEX pwfxSrc, PWAVEFORMATEX pwfxDst,
   DWORD cbwfxDst, DWORD fdwSuggest
 );
-MMRESULT32 WINAPI acmFormatTagDetails32A(
-  HACMDRIVER32 had, PACMFORMATTAGDETAILS32A paftd, DWORD fdwDetails
+MMRESULT WINAPI acmFormatTagDetailsA(
+  HACMDRIVER had, PACMFORMATTAGDETAILSA paftd, DWORD fdwDetails
 );
-MMRESULT32 WINAPI acmFormatTagDetails32W(
-  HACMDRIVER32 had, PACMFORMATTAGDETAILS32W paftd, DWORD fdwDetails
+MMRESULT WINAPI acmFormatTagDetailsW(
+  HACMDRIVER had, PACMFORMATTAGDETAILSW paftd, DWORD fdwDetails
 );
-MMRESULT32 WINAPI acmFormatTagEnum32A(
-  HACMDRIVER32 had, PACMFORMATTAGDETAILS32A paftd,
-  ACMFORMATTAGENUMCB32A fnCallback, DWORD dwInstance, DWORD fdwEnum
+MMRESULT WINAPI acmFormatTagEnumA(
+  HACMDRIVER had, PACMFORMATTAGDETAILSA paftd,
+  ACMFORMATTAGENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
 );
-MMRESULT32 WINAPI acmFormatTagEnum32W(
-  HACMDRIVER32 had, PACMFORMATTAGDETAILS32W paftd,
-  ACMFORMATTAGENUMCB32W fnCallback, DWORD dwInstance, DWORD fdwEnum
+MMRESULT WINAPI acmFormatTagEnumW(
+  HACMDRIVER had, PACMFORMATTAGDETAILSW paftd,
+  ACMFORMATTAGENUMCBW fnCallback, DWORD dwInstance, DWORD fdwEnum
 );
-DWORD WINAPI acmGetVersion32(
+DWORD WINAPI acmGetVersion(
 );
-MMRESULT32 WINAPI acmMetrics32(
-  HACMOBJ32 hao, UINT32  uMetric, LPVOID  pMetric
+MMRESULT WINAPI acmMetrics(
+  HACMOBJ hao, UINT  uMetric, LPVOID  pMetric
 );
-MMRESULT32 WINAPI acmStreamClose32(
-  HACMSTREAM32 has, DWORD fdwClose
+MMRESULT WINAPI acmStreamClose(
+  HACMSTREAM has, DWORD fdwClose
 );
-MMRESULT32 WINAPI acmStreamConvert32(
-  HACMSTREAM32 has, PACMSTREAMHEADER32 pash, DWORD fdwConvert
+MMRESULT WINAPI acmStreamConvert(
+  HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwConvert
 );
-MMRESULT32 WINAPI acmStreamMessage32(
-  HACMSTREAM32 has, UINT32 uMsg, LPARAM lParam1, LPARAM lParam2
+MMRESULT WINAPI acmStreamMessage(
+  HACMSTREAM has, UINT uMsg, LPARAM lParam1, LPARAM lParam2
 );
-MMRESULT32 WINAPI acmStreamOpen32(
-  PHACMSTREAM32 phas, HACMDRIVER32 had, PWAVEFORMATEX pwfxSrc,
+MMRESULT WINAPI acmStreamOpen(
+  PHACMSTREAM phas, HACMDRIVER had, PWAVEFORMATEX pwfxSrc,
   PWAVEFORMATEX pwfxDst, PWAVEFILTER pwfltr, DWORD dwCallback,
   DWORD dwInstance, DWORD fdwOpen
 );
-MMRESULT32 WINAPI acmStreamPrepareHeader32(
-  HACMSTREAM32 has, PACMSTREAMHEADER32 pash, DWORD fdwPrepare
+MMRESULT WINAPI acmStreamPrepareHeader(
+  HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwPrepare
 );
-MMRESULT32 WINAPI acmStreamReset32(
-  HACMSTREAM32 has, DWORD fdwReset
+MMRESULT WINAPI acmStreamReset(
+  HACMSTREAM has, DWORD fdwReset
 );
-MMRESULT32 WINAPI acmStreamSize32(
-  HACMSTREAM32 has, DWORD cbInput, 
+MMRESULT WINAPI acmStreamSize(
+  HACMSTREAM has, DWORD cbInput, 
   LPDWORD pdwOutputBytes, DWORD fdwSize
 );
-MMRESULT32 WINAPI acmStreamUnprepareHeader32(
-  HACMSTREAM32 has, PACMSTREAMHEADER32 pash, DWORD fdwUnprepare
+MMRESULT WINAPI acmStreamUnprepareHeader(
+  HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwUnprepare
 );
 
 /***********************************************************************
  * Wine specific - Win32
  */
-typedef struct _WINE_ACMBUILTINDRIVER32
+typedef struct _WINE_ACMBUILTINDRIVER
 {
   LPSTR        pszDriverAlias;
-  DRIVERPROC32 pfnDriverProc;
-} WINE_ACMBUILTINDRIVER32, *PWINE_ACMBUILTINDRIVER32;
+  DRIVERPROC pfnDriverProc;
+} WINE_ACMBUILTINDRIVER, *PWINE_ACMBUILTINDRIVER;
 
-typedef struct _WINE_ACMLOCALDRIVER32
+typedef struct _WINE_ACMLOCALDRIVER
 {
-  DRIVERPROC32 pfnDriverProc;
-} WINE_ACMLOCALDRIVER32, *PWINE_ACMLOCALDRIVER32;
+  DRIVERPROC pfnDriverProc;
+} WINE_ACMLOCALDRIVER, *PWINE_ACMLOCALDRIVER;
 
-typedef struct _WINE_ACMDRIVERID32 *PWINE_ACMDRIVERID32;
+typedef struct _WINE_ACMDRIVERID *PWINE_ACMDRIVERID;
 
-typedef struct _WINE_ACMOBJ32
+typedef struct _WINE_ACMOBJ
 {
-  PWINE_ACMDRIVERID32 pACMDriverID;
-} WINE_ACMOBJ32, *PWINE_ACMOBJ32;
+  PWINE_ACMDRIVERID pACMDriverID;
+} WINE_ACMOBJ, *PWINE_ACMOBJ;
 
-typedef struct _WINE_ACMDRIVER32
+typedef struct _WINE_ACMDRIVER
 {
-  WINE_ACMOBJ32  obj;
-  HDRVR32        hDrvr;
-} WINE_ACMDRIVER32, *PWINE_ACMDRIVER32;
+  WINE_ACMOBJ  obj;
+  HDRVR        hDrvr;
+} WINE_ACMDRIVER, *PWINE_ACMDRIVER;
 
-typedef struct _WINE_ACMSTREAM32
+typedef struct _WINE_ACMSTREAM
 {
-  WINE_ACMOBJ32  obj;
+  WINE_ACMOBJ  obj;
   /* FIME: More fields needed */
-} WINE_ACMSTREAM32, *PWINE_ACMSTREAM32;
+} WINE_ACMSTREAM, *PWINE_ACMSTREAM;
 
-typedef struct _WINE_ACMDRIVERID32
+typedef struct _WINE_ACMDRIVERID
 {
   LPSTR                    pszDriverAlias;
   LPSTR                    pszFileName;
-  PWINE_ACMLOCALDRIVER32   pACMLocalDriver;
-  BOOL32                   bEnabled;
-  PWINE_ACMDRIVER32        pACMDriver;           /* NULL if not open */
-  PWINE_ACMDRIVERID32      pNextACMDriverID;
-  PWINE_ACMDRIVERID32      pPreviousACMDriverID;
-} WINE_ACMDRIVERID32;
+  PWINE_ACMLOCALDRIVER   pACMLocalDriver;
+  BOOL                   bEnabled;
+  PWINE_ACMDRIVER        pACMDriver;           /* NULL if not open */
+  PWINE_ACMDRIVERID      pNextACMDriverID;
+  PWINE_ACMDRIVERID      pPreviousACMDriverID;
+} WINE_ACMDRIVERID;
 
 /* From builtin.c */
-extern WINE_ACMBUILTINDRIVER32 MSACM_BuiltinDrivers32[];
+extern WINE_ACMBUILTINDRIVER MSACM_BuiltinDrivers[];
 
 /* From interal.c */
-extern HANDLE32 MSACM_hHeap32;
-extern PWINE_ACMDRIVERID32 MSACM_pFirstACMDriverID32;
-extern PWINE_ACMDRIVERID32 MSACM_pLastACMDriverID32;
-PWINE_ACMDRIVERID32 MSACM_RegisterDriver32(
+extern HANDLE MSACM_hHeap;
+extern PWINE_ACMDRIVERID MSACM_pFirstACMDriverID;
+extern PWINE_ACMDRIVERID MSACM_pLastACMDriverID;
+PWINE_ACMDRIVERID MSACM_RegisterDriver(
   LPSTR pszDriverAlias, LPSTR pszFileName,
-  PWINE_ACMLOCALDRIVER32 pLocalDriver);
-void MSACM_RegisterAllDrivers32();
-PWINE_ACMDRIVERID32 MSACM_UnregisterDriver32(PWINE_ACMDRIVERID32 p);
-void MSACM_UnregisterAllDrivers32();
-PWINE_ACMDRIVERID32 MSACM_GetDriverID32(HACMDRIVERID32 hDriverID);
-PWINE_ACMDRIVER32 MSACM_GetDriver32(HACMDRIVER32 hDriver);
-PWINE_ACMOBJ32 MSACM_GetObj32(HACMOBJ32 hObj);
-HDRVR32 MSACM_OpenDriverProc32(DRIVERPROC32 pfnDriverProc);
+  PWINE_ACMLOCALDRIVER pLocalDriver);
+void MSACM_RegisterAllDrivers();
+PWINE_ACMDRIVERID MSACM_UnregisterDriver(PWINE_ACMDRIVERID p);
+void MSACM_UnregisterAllDrivers();
+PWINE_ACMDRIVERID MSACM_GetDriverID(HACMDRIVERID hDriverID);
+PWINE_ACMDRIVER MSACM_GetDriver(HACMDRIVER hDriver);
+PWINE_ACMOBJ MSACM_GetObj(HACMOBJ hObj);
+HDRVR MSACM_OpenDriverProc(DRIVERPROC pfnDriverProc);
 
 #endif  /* __WINE_MSACM_H */
 
diff --git a/include/msacmdrv.h b/include/msacmdrv.h
index 86dc34a..a756717 100644
--- a/include/msacmdrv.h
+++ b/include/msacmdrv.h
@@ -47,7 +47,7 @@
  * Structures
  */
 
-typedef struct _ACMDRVOPENDESC32A
+typedef struct _ACMDRVOPENDESCA
 {
   DWORD  cbStruct;
   FOURCC fccType;
@@ -58,9 +58,9 @@
   LPCSTR pszSectionName;
   LPCSTR pszAliasName;
   DWORD  dnDevNode;
-} ACMDRVOPENDESC32A, *PACMDRVOPENDESC32A;
+} ACMDRVOPENDESCA, *PACMDRVOPENDESCA;
 
-typedef struct _ACMDRVOPENDESC32W
+typedef struct _ACMDRVOPENDESCW
 {
   DWORD   cbStruct;
   FOURCC  fccType;
@@ -71,7 +71,7 @@
   LPCWSTR pszSectionName;
   LPCWSTR pszAliasName;
   DWORD   dnDevNode;
-} ACMDRVOPENDESC32W, *PACMDRVOPENDESC32W;
+} ACMDRVOPENDESCW, *PACMDRVOPENDESCW;
 
 typedef struct _ACMDRVOPENDESC16
 {
@@ -100,7 +100,7 @@
   HACMSTREAM16     has;
 } ACMDRVSTREAMINSTANCE16, *NPACMDRVSTREAMINSTANCE16, *LPACMDRVSTREAMINSTANCE16;
 
-typedef struct _ACMDRVSTREAMINSTANCE32
+typedef struct _ACMDRVSTREAMINSTANCE
 {
   DWORD           cbStruct;
   PWAVEFORMATEX   pwfxSrc;
@@ -111,8 +111,8 @@
   DWORD           fdwOpen;
   DWORD           fdwDriver;
   DWORD           dwDriver;
-  HACMSTREAM32    has;
-} ACMDRVSTREAMINSTANCE32, *PACMDRVSTREAMINSTANCE32;
+  HACMSTREAM    has;
+} ACMDRVSTREAMINSTANCE, *PACMDRVSTREAMINSTANCE;
 
 
 typedef struct _ACMDRVSTREAMHEADER16 *LPACMDRVSTREAMHEADER16;
@@ -143,8 +143,8 @@
   DWORD  cbPreparedDstLength;
 } ACMDRVSTREAMHEADER16, *NPACMDRVSTREAMHEADER16;
 
-typedef struct _ACMDRVSTREAMHEADER32 *PACMDRVSTREAMHEADER32;
-typedef struct _ACMDRVSTREAMHEADER32 {
+typedef struct _ACMDRVSTREAMHEADER *PACMDRVSTREAMHEADER;
+typedef struct _ACMDRVSTREAMHEADER {
   DWORD  cbStruct;
   DWORD  fdwStatus;
   DWORD  dwUser;
@@ -158,7 +158,7 @@
   DWORD  dwDstUser;
 
   DWORD fdwConvert;
-  PACMDRVSTREAMHEADER32 *padshNext;
+  PACMDRVSTREAMHEADER *padshNext;
   DWORD fdwDriver;
   DWORD dwDriver;
 
@@ -169,7 +169,7 @@
   DWORD  cbPreparedSrcLength;
   LPBYTE pbPreparedDst;
   DWORD  cbPreparedDstLength;
-} ACMDRVSTREAMHEADER32;
+} ACMDRVSTREAMHEADER;
 
 typedef struct _ACMDRVSTREAMSIZE
 {
@@ -178,7 +178,7 @@
   DWORD cbSrcLength;
   DWORD cbDstLength;
 } ACMDRVSTREAMSIZE16, *NPACMDRVSTREAMSIZE16, *LPACMDRVSTREAMSIZE16,
-  ACMDRVSTREAMSIZE32, *PACMDRVSTREAMSIZE;
+  ACMDRVSTREAMSIZE, *PACMDRVSTREAMSIZE;
 
 typedef struct _ACMDRVFORMATSUGGEST16
 {
@@ -190,7 +190,7 @@
   DWORD            cbwfxDst;
 } ACMDRVFORMATSUGGEST16, *NPACMDRVFORMATSUGGEST, *LPACMDRVFORMATSUGGEST;
 
-typedef struct _ACMDRVFORMATSUGGEST32
+typedef struct _ACMDRVFORMATSUGGEST
 {
   DWORD           cbStruct;
   DWORD           fdwSuggest;
@@ -198,6 +198,6 @@
   DWORD           cbwfxSrc;
   PWAVEFORMATEX   pwfxDst;
   DWORD           cbwfxDst;
-} ACMDRVFORMATSUGGEST32, *PACMDRVFORMATSUGGEST32;
+} ACMDRVFORMATSUGGEST, *PACMDRVFORMATSUGGEST;
 
 #endif  /* __WINE_MSACMDRV_H */
diff --git a/include/multimedia.h b/include/multimedia.h
index feebfd7..b8245fd 100644
--- a/include/multimedia.h
+++ b/include/multimedia.h
@@ -50,35 +50,35 @@
 };
 
 /* function prototypes */
-extern BOOL32 MULTIMEDIA_Init(void);
+extern BOOL MULTIMEDIA_Init(void);
 
 extern int    		MCI_DevIDToIndex(UINT16 wDevID);
 extern UINT16 		MCI_FirstDevID(void);
 extern UINT16 		MCI_NextDevID(UINT16 wDevID);
-extern BOOL32 		MCI_DevIDValid(UINT16 wDevID);
+extern BOOL 		MCI_DevIDValid(UINT16 wDevID);
 
 extern int		MCI_MapMsg16To32A(WORD uDevType, WORD wMsg, DWORD* lParam);
 extern int		MCI_UnMapMsg16To32A(WORD uDevTyp, WORD wMsg, DWORD lParam);
 
 typedef LONG		(*MCIPROC16)(DWORD, HDRVR16,  WORD, DWORD, DWORD);
-typedef LONG		(*MCIPROC32)(DWORD, HDRVR16, DWORD, DWORD, DWORD);
+typedef LONG		(*MCIPROC)(DWORD, HDRVR16, DWORD, DWORD, DWORD);
 
-extern MCIPROC32	MCI_GetProc32(UINT16 uDevType);
+extern MCIPROC	MCI_GetProc(UINT16 uDevType);
 extern WORD		   MCI_GetDevType(LPCSTR str);
 extern DWORD		MCI_WriteString(LPSTR lpDstStr, DWORD dstSize, LPCSTR lpSrcStr);
 extern const char* MCI_CommandToString(UINT16 wMsg);
 
 
-extern DWORD MCI_SendCommand32(UINT32 wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwParam2);
-extern DWORD MCI_SendCommandAsync32(UINT32 wDevID, UINT32 wMsg, DWORD dwParam1, DWORD dwParam2, UINT32 size);
+extern DWORD MCI_SendCommand(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwParam2);
+extern DWORD MCI_SendCommandAsync(UINT wDevID, UINT wMsg, DWORD dwParam1, DWORD dwParam2, UINT size);
 
-LONG MCIWAVE_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
+LONG MCIWAVE_DriverProc(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
 			  DWORD dwParam1, DWORD dwParam2);
-LONG MCIMIDI_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
+LONG MCIMIDI_DriverProc(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
 			  DWORD dwParam1, DWORD dwParam2);
-LONG MCICDAUDIO_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
+LONG MCICDAUDIO_DriverProc(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
 			     DWORD dwParam1, DWORD dwParam2);
-LONG MCIANIM_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
+LONG MCIANIM_DriverProc(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
 			  DWORD dwParam1, DWORD dwParam2);
 LONG MCIAVI_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
 			  DWORD dwParam1, DWORD dwParam2);
diff --git a/include/nonclient.h b/include/nonclient.h
index 7a3b04d..8e82b53 100644
--- a/include/nonclient.h
+++ b/include/nonclient.h
@@ -9,16 +9,16 @@
 
 #include "win.h"
 
-extern LONG   NC_HandleNCPaint( HWND32 hwnd , HRGN32 clip);
+extern LONG   NC_HandleNCPaint( HWND hwnd , HRGN clip);
 extern LONG   NC_HandleNCActivate( WND *pwnd, WPARAM16 wParam );
-extern LONG   NC_HandleNCCalcSize( WND *pWnd, RECT32 *winRect );
-extern LONG   NC_HandleNCHitTest( HWND32 hwnd, POINT16 pt );
+extern LONG   NC_HandleNCCalcSize( WND *pWnd, RECT *winRect );
+extern LONG   NC_HandleNCHitTest( HWND hwnd, POINT16 pt );
 extern LONG   NC_HandleNCLButtonDown( WND* pWnd, WPARAM16 wParam, LPARAM lParam );
 extern LONG   NC_HandleNCLButtonDblClk( WND *pWnd, WPARAM16 wParam, LPARAM lParam);
-extern LONG   NC_HandleSysCommand( HWND32 hwnd, WPARAM16 wParam, POINT16 pt );
-extern LONG   NC_HandleSetCursor( HWND32 hwnd, WPARAM16 wParam, LPARAM lParam );
-extern void   NC_DrawSysButton( HWND32 hwnd, HDC32 hdc, BOOL32 down );
-extern BOOL32 NC_DrawSysButton95( HWND32 hwnd, HDC32 hdc, BOOL32 down );
-extern BOOL32 NC_GetSysPopupPos( WND* wndPtr, RECT32* rect );
+extern LONG   NC_HandleSysCommand( HWND hwnd, WPARAM16 wParam, POINT16 pt );
+extern LONG   NC_HandleSetCursor( HWND hwnd, WPARAM16 wParam, LPARAM lParam );
+extern void   NC_DrawSysButton( HWND hwnd, HDC hdc, BOOL down );
+extern BOOL NC_DrawSysButton95( HWND hwnd, HDC hdc, BOOL down );
+extern BOOL NC_GetSysPopupPos( WND* wndPtr, RECT* rect );
 
 #endif /* __WINE_NONCLIENT_H */
diff --git a/include/ntddk.h b/include/ntddk.h
index 02eae9b..186a5e1 100644
--- a/include/ntddk.h
+++ b/include/ntddk.h
@@ -317,8 +317,8 @@
 DWORD WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING oem,PUNICODE_STRING uni,BOOLEAN alloc);
 DWORD WINAPI RtlEqualUnicodeString(PUNICODE_STRING s1,PUNICODE_STRING s2,DWORD x);
 DWORD WINAPI RtlUpcaseUnicodeString(PUNICODE_STRING dest,PUNICODE_STRING src,BOOLEAN doalloc);
-UINT32 WINAPI RtlxOemStringToUnicodeSize(PSTRING str);
-UINT32 WINAPI RtlxAnsiStringToUnicodeSize(PANSI_STRING str);
+UINT WINAPI RtlxOemStringToUnicodeSize(PSTRING str);
+UINT WINAPI RtlxAnsiStringToUnicodeSize(PANSI_STRING str);
 DWORD WINAPI RtlIsTextUnicode(LPVOID buf, DWORD len, DWORD *pf);
 NTSTATUS WINAPI RtlCompareUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive);
 
@@ -351,8 +351,8 @@
 DWORD WINAPI RtlNtStatusToDosError(DWORD error);
 BOOLEAN WINAPI RtlGetNtProductType(LPDWORD type);
 DWORD WINAPI RtlTimeToElapsedTimeFields( DWORD x1, DWORD x2 );
-INT32 WINAPI RtlExtendedLargeIntegerDivide(LARGE_INTEGER dividend, DWORD divisor, LPDWORD rest);
-LARGE_INTEGER WINAPI RtlExtendedIntegerMultiply(LARGE_INTEGER factor1,INT32 factor2);
+INT WINAPI RtlExtendedLargeIntegerDivide(LARGE_INTEGER dividend, DWORD divisor, LPDWORD rest);
+LARGE_INTEGER WINAPI RtlExtendedIntegerMultiply(LARGE_INTEGER factor1,INT factor2);
 DWORD WINAPI RtlFormatCurrentUserKeyPath(DWORD x);
 DWORD WINAPI RtlOpenCurrentUser(DWORD x1, DWORD *x2);
 BOOLEAN WINAPI RtlDosPathNameToNtPathName_U( LPWSTR from,PUNICODE_STRING us,DWORD x2,DWORD x3);
diff --git a/include/ntdef.h b/include/ntdef.h
index 059267c..4de6fff 100644
--- a/include/ntdef.h
+++ b/include/ntdef.h
@@ -52,7 +52,7 @@
 
 typedef struct _OBJECT_ATTRIBUTES 
 {   ULONG Length;
-    HANDLE32 RootDirectory;
+    HANDLE RootDirectory;
     PUNICODE_STRING ObjectName;
     ULONG Attributes;
     PVOID SecurityDescriptor;        /* type SECURITY_DESCRIPTOR */
diff --git a/include/ntdll.h b/include/ntdll.h
index 6aff6d8..abebb82 100644
--- a/include/ntdll.h
+++ b/include/ntdll.h
@@ -94,12 +94,12 @@
 
 typedef struct _RTL_RWLOCK {
 	CRITICAL_SECTION	rtlCS;
-	HANDLE32		hSharedReleaseSemaphore;
-	UINT32			uSharedWaiters;
-	HANDLE32		hExclusiveReleaseSemaphore;
-	UINT32			uExclusiveWaiters;
-	INT32			iNumberActive;
-	HANDLE32		hOwningThreadId;
+	HANDLE		hSharedReleaseSemaphore;
+	UINT			uSharedWaiters;
+	HANDLE		hExclusiveReleaseSemaphore;
+	UINT			uExclusiveWaiters;
+	INT			iNumberActive;
+	HANDLE		hOwningThreadId;
 	DWORD			dwTimeoutBoost;
 	PVOID			pDebugInfo;
 } RTL_RWLOCK, *LPRTL_RWLOCK;
@@ -111,27 +111,26 @@
 VOID   WINAPI RtlReleaseResource(LPRTL_RWLOCK);
 VOID   WINAPI RtlDumpResource(LPRTL_RWLOCK);
 
-BOOL32 WINAPI IsValidSid(PSID);
-BOOL32 WINAPI EqualSid(PSID,PSID);
-BOOL32 WINAPI EqualPrefixSid(PSID,PSID);
+BOOL WINAPI IsValidSid(PSID);
+BOOL WINAPI EqualSid(PSID,PSID);
+BOOL WINAPI EqualPrefixSid(PSID,PSID);
 DWORD  WINAPI GetSidLengthRequired(BYTE);
-BOOL32 WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,
+BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,
                                        DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,
                                        DWORD,PSID*);
 VOID*  WINAPI FreeSid(PSID);
-BOOL32 WINAPI InitializeSecurityDescriptor(SECURITY_DESCRIPTOR*,DWORD);
-BOOL32 WINAPI InitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
+BOOL WINAPI InitializeSecurityDescriptor(SECURITY_DESCRIPTOR*,DWORD);
+BOOL WINAPI InitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
 DWORD* WINAPI GetSidSubAuthority(PSID,DWORD);
 BYTE * WINAPI GetSidSubAuthorityCount(PSID);
 DWORD  WINAPI GetLengthSid(PSID);
-BOOL32 WINAPI CopySid(DWORD,PSID,PSID);
-BOOL32 WINAPI LookupAccountSid32A(LPCSTR,PSID,LPCSTR,LPDWORD,LPCSTR,LPDWORD,
+BOOL WINAPI CopySid(DWORD,PSID,PSID);
+BOOL WINAPI LookupAccountSidA(LPCSTR,PSID,LPCSTR,LPDWORD,LPCSTR,LPDWORD,
                                   PSID_NAME_USE);
-BOOL32 WINAPI LookupAccountSid32W(LPCWSTR,PSID,LPCWSTR,LPDWORD,LPCWSTR,LPDWORD,
+BOOL WINAPI LookupAccountSidW(LPCWSTR,PSID,LPCWSTR,LPDWORD,LPCWSTR,LPDWORD,
                                   PSID_NAME_USE);
 PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority(PSID);
-INT32       WINAPI AccessResource32(HMODULE32,HRSRC32);
-#define     AccessResource WINELIB_NAME(AccessResource)
+INT       WINAPI AccessResource(HMODULE,HRSRC);
 
 #ifdef __cplusplus
 }
diff --git a/include/ole.h b/include/ole.h
index 06a2ce5..a007d89 100644
--- a/include/ole.h
+++ b/include/ole.h
@@ -16,8 +16,7 @@
 
 
 #define OLESTR16(x) x
-#define OLESTR32(x) L##x	/* probably wrong */
-#define OLESTR WINELIB_NAME(OLESTR)
+#define OLESTR(x) L##x	/* probably wrong */
 
 /* object types */
 #define OT_LINK		1
@@ -274,7 +273,7 @@
 
 /* com functions */
 void WINAPI CoFreeUnusedLibraries(void);
-HINSTANCE32 WINAPI CoLoadLibrary(LPSTR lpszLibName, BOOL32 bAutoFree);
+HINSTANCE WINAPI CoLoadLibrary(LPSTR lpszLibName, BOOL bAutoFree);
 void WINAPI CoFreeUnusedLibraries(void);
 void WINAPI CoFreeAllLibraries(void);
 
diff --git a/include/ole2.h b/include/ole2.h
index 1754130..c9ecc1d 100644
--- a/include/ole2.h
+++ b/include/ole2.h
@@ -17,21 +17,18 @@
  * API declarations
  */
 HRESULT     WINAPI RegisterDragDrop16(HWND16,LPDROPTARGET);
-HRESULT     WINAPI RegisterDragDrop32(HWND32,LPDROPTARGET);
-#define     RegisterDragDrop WINELIB_NAME(RegisterDragDrop)
+HRESULT     WINAPI RegisterDragDrop(HWND,LPDROPTARGET);
 HRESULT     WINAPI RevokeDragDrop16(HWND16);
-HRESULT     WINAPI RevokeDragDrop32(HWND32);
-#define     RevokeDragDrop WINELIB_NAME(RevokeDragDrop)
+HRESULT     WINAPI RevokeDragDrop(HWND);
 HRESULT     WINAPI DoDragDrop16(LPDATAOBJECT,LPDROPSOURCE,DWORD,DWORD*);
-HRESULT     WINAPI DoDragDrop32(LPDATAOBJECT,LPDROPSOURCE,DWORD,DWORD*);
-#define     DoDragDrop WINELIB_NAME(DoDragDrop)
+HRESULT     WINAPI DoDragDrop(LPDATAOBJECT,LPDROPSOURCE,DWORD,DWORD*);
 
-HOLEMENU32  WINAPI OleCreateMenuDescriptor(HMENU32              hmenuCombined,
-					   LPOLEMENUGROUPWIDTHS32 lpMenuWidths);
-void        WINAPI OleDestroyMenuDescriptor(HOLEMENU32 hmenuDescriptor);
-HRESULT     WINAPI OleSetMenuDescriptor(HOLEMENU32               hmenuDescriptor,
-					HWND32                   hwndFrame,
-					HWND32                   hwndActiveObject,
+HOLEMENU  WINAPI OleCreateMenuDescriptor(HMENU              hmenuCombined,
+					   LPOLEMENUGROUPWIDTHS lpMenuWidths);
+void        WINAPI OleDestroyMenuDescriptor(HOLEMENU hmenuDescriptor);
+HRESULT     WINAPI OleSetMenuDescriptor(HOLEMENU               hmenuDescriptor,
+					HWND                   hwndFrame,
+					HWND                   hwndActiveObject,
 					LPOLEINPLACEFRAME        lpFrame,
 					LPOLEINPLACEACTIVEOBJECT lpActiveObject);
 
diff --git a/include/oleauto.h b/include/oleauto.h
index 69d755b..440d139 100644
--- a/include/oleauto.h
+++ b/include/oleauto.h
@@ -10,111 +10,84 @@
 #include "oaidl.h"
 
 BSTR16 WINAPI SysAllocString16(LPOLESTR16);
-BSTR32 WINAPI SysAllocString32(LPOLESTR32);
-#define SysAllocString WINELIB_NAME(SysAllocString)
+BSTR WINAPI SysAllocString(LPOLESTR);
 INT16 WINAPI SysReAllocString16(LPBSTR16,LPOLESTR16);
-INT32 WINAPI SysReAllocString32(LPBSTR32,LPOLESTR32);
-#define SysReAllocString WINELIB_NAME(SysReAllocString)
+INT WINAPI SysReAllocString(LPBSTR,LPOLESTR);
 VOID WINAPI SysFreeString16(BSTR16);
-VOID WINAPI SysFreeString32(BSTR32);
-#define SysFreeString WINELIB_NAME(SysFreeString)
+VOID WINAPI SysFreeString(BSTR);
 BSTR16 WINAPI SysAllocStringLen16(char*, int);
-BSTR32 WINAPI SysAllocStringLen32(WCHAR*, int);
-#define SysAllocStringLen WINELIB_NAME(SysAllocStringLen)
+BSTR WINAPI SysAllocStringLen(WCHAR*, int);
 int WINAPI SysReAllocStringLen16(BSTR16*, char*,  int);
-int WINAPI SysReAllocStringLen32(BSTR32*, WCHAR*, int);
-#define SysReAllocStringLen WINELIB_NAME(SysReAllocStringLen)
+int WINAPI SysReAllocStringLen(BSTR*, WCHAR*, int);
 int WINAPI SysStringLen16(BSTR16);
-int WINAPI SysStringLen32(BSTR32);
-#define SysStringLen WINELIB_NAME(SysStringLen)
+int WINAPI SysStringLen(BSTR);
 
 /*****************************************************************
  *  SafeArray API
  */
 
 HRESULT WINAPI
-SafeArrayAllocDescriptor32(UINT32 cDims, SAFEARRAY **ppsaOut);
-#define SafeArrayAllocDescriptor WINELIB_NAME(SafeArrayAllocDescriptor)
+SafeArrayAllocDescriptor(UINT cDims, SAFEARRAY **ppsaOut);
 
 HRESULT WINAPI 
-SafeArrayAllocData32(SAFEARRAY *psa);
-#define SafeArrayAllocData WINELIB_NAME(SafeArrayAllocData)
+SafeArrayAllocData(SAFEARRAY *psa);
 
 SAFEARRAY* WINAPI 
-SafeArrayCreate32(VARTYPE vt, UINT32 cDims, SAFEARRAYBOUND *rgsabound);
-#define SafeArrayCreate WINELIB_NAME(SafeArrayCreate)
+SafeArrayCreate(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound);
 
 HRESULT WINAPI 
-SafeArrayDestroyDescriptor32(SAFEARRAY *psa);
-#define SafeArrayDestroyDescriptor WINELIB_NAME(SafeArrayDestroyDescriptor)
+SafeArrayDestroyDescriptor(SAFEARRAY *psa);
 
 HRESULT WINAPI 
-SafeArrayPutElement32(SAFEARRAY *psa, LONG *rgIndices, void *pv);
-#define SafeArrayPutElement WINELIB_NAME(SafeArrayPutElement)
+SafeArrayPutElement(SAFEARRAY *psa, LONG *rgIndices, void *pv);
 
 HRESULT WINAPI 
-SafeArrayGetElement32(SAFEARRAY *psa, LONG *rgIndices, void *pv);
-#define SafeArrayGetElement WINELIB_NAME(SafeArrayGetElement)
+SafeArrayGetElement(SAFEARRAY *psa, LONG *rgIndices, void *pv);
 
 HRESULT WINAPI 
-SafeArrayLock32(SAFEARRAY *psa);
-#define SafeArrayLock WINELIB_NAME(SafeArrayLock)
+SafeArrayLock(SAFEARRAY *psa);
 
 HRESULT WINAPI 
-SafeArrayUnlock32(SAFEARRAY *psa);
-#define SafeArrayUnlock WINELIB_NAME(SafeArrayUnlock)
+SafeArrayUnlock(SAFEARRAY *psa);
 
 HRESULT WINAPI 
-SafeArrayGetUBound32(SAFEARRAY *psa, UINT32 nDim, LONG *plUbound);
-#define SafeArrayGetUBound WINELIB_NAME(SafeArrayGetUBound)
+SafeArrayGetUBound(SAFEARRAY *psa, UINT nDim, LONG *plUbound);
 
 HRESULT WINAPI 
-SafeArrayGetLBound32(SAFEARRAY *psa, UINT32 nDim, LONG *plLbound);
-#define SafeArrayGetLBound WINELIB_NAME(SafeArrayGetLBound)
+SafeArrayGetLBound(SAFEARRAY *psa, UINT nDim, LONG *plLbound);
 
-UINT32  WINAPI 
-SafeArrayGetDim32(SAFEARRAY *psa);
-#define SafeArrayGetDim WINELIB_NAME(SafeArrayGetDim)
+UINT  WINAPI 
+SafeArrayGetDim(SAFEARRAY *psa);
 
-UINT32  WINAPI 
-SafeArrayGetElemsize32(SAFEARRAY *psa);
-#define SafeArrayGetElemsize WINELIB_NAME(SafeArrayGetElemsize)
+UINT  WINAPI 
+SafeArrayGetElemsize(SAFEARRAY *psa);
 
 HRESULT WINAPI 
-SafeArrayAccessData32(SAFEARRAY *psa, void **ppvData);
-#define SafeArrayAccessData WINELIB_NAME(SafeArrayAccessData)
+SafeArrayAccessData(SAFEARRAY *psa, void **ppvData);
 
 HRESULT WINAPI 
-SafeArrayUnaccessData32(SAFEARRAY *psa);
-#define SafeArrayUnaccessData WINELIB_NAME(SafeArrayUnaccessData)
+SafeArrayUnaccessData(SAFEARRAY *psa);
 
 HRESULT WINAPI 
-SafeArrayPtrOfIndex32(SAFEARRAY *psa, LONG *rgIndices, void **ppvData);
-#define SafeArrayPtrOfIndex WINELIB_NAME(SafeArrayPtrOfIndex)
+SafeArrayPtrOfIndex(SAFEARRAY *psa, LONG *rgIndices, void **ppvData);
 
 HRESULT WINAPI 
-SafeArrayCopyData32(SAFEARRAY *psaSource, SAFEARRAY **psaTarget);
-#define SafeArrayCopyData WINELIB_NAME(SafeArrayCopyData)
+SafeArrayCopyData(SAFEARRAY *psaSource, SAFEARRAY **psaTarget);
 
 HRESULT WINAPI 
-SafeArrayDestroyData32(SAFEARRAY *psa);
-#define SafeArrayDestroyData WINELIB_NAME(SafeArrayDestroyData)
+SafeArrayDestroyData(SAFEARRAY *psa);
 
 HRESULT WINAPI 
-SafeArrayDestroy32(SAFEARRAY *psa);
-#define SafeArrayDestroy WINELIB_NAME(SafeArrayDestroy)
+SafeArrayDestroy(SAFEARRAY *psa);
 
 HRESULT WINAPI 
-SafeArrayCopy32(SAFEARRAY *psa, SAFEARRAY **ppsaOut);
-#define SafeArrayCopy WINELIB_NAME(SafeArrayCopy)
+SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut);
 
 SAFEARRAY* WINAPI
-SafeArrayCreateVector32(VARTYPE vt, LONG lLbound, ULONG cElements);
-#define SafeArrayCreateVector WINELIB_NAME(SafeArrayCreateVector)
+SafeArrayCreateVector(VARTYPE vt, LONG lLbound, ULONG cElements);
 
 HRESULT WINAPI 
-SafeArrayRedim32(SAFEARRAY *psa, SAFEARRAYBOUND *psaboundNew);
-#define SafeArrayRedim WINELIB_NAME(SafeArrayRedim)
+SafeArrayRedim(SAFEARRAY *psa, SAFEARRAYBOUND *psaboundNew);
 
 
 /* These are macros that help accessing the VARIANT date type.
@@ -172,20 +145,14 @@
  * VARIANT API
  */
 
-void WINAPI VariantInit32(VARIANTARG* pvarg);
-#define VariantInit WINELIB_NAME(VariantInit)
-HRESULT WINAPI VariantClear32(VARIANTARG* pvarg);
-#define VariantClear WINELIB_NAME(VariantClear)
-HRESULT WINAPI VariantCopy32(VARIANTARG* pvargDest, VARIANTARG* pvargSrc);
-#define VariantCopy WINELIB_NAME(VariantCopy)
-HRESULT WINAPI VariantCopyInd32(VARIANT* pvargDest, VARIANTARG* pvargSrc);
-#define VariantCopyInd WINELIB_NAME(VariantCopyInd)
-HRESULT WINAPI VariantChangeType32(VARIANTARG* pvargDest, VARIANTARG* pvargSrc,
+void WINAPI VariantInit(VARIANTARG* pvarg);
+HRESULT WINAPI VariantClear(VARIANTARG* pvarg);
+HRESULT WINAPI VariantCopy(VARIANTARG* pvargDest, VARIANTARG* pvargSrc);
+HRESULT WINAPI VariantCopyInd(VARIANT* pvargDest, VARIANTARG* pvargSrc);
+HRESULT WINAPI VariantChangeType(VARIANTARG* pvargDest, VARIANTARG* pvargSrc,
 						  USHORT wFlags, VARTYPE vt);
-#define VariantChangeType WINELIB_NAME(VariantChangeType)
-HRESULT WINAPI VariantChangeTypeEx32(VARIANTARG* pvargDest, VARIANTARG* pvargSrc,
+HRESULT WINAPI VariantChangeTypeEx(VARIANTARG* pvargDest, VARIANTARG* pvargSrc,
 							LCID lcid, USHORT wFlags, VARTYPE vt);
-#define VariantChangeTypeEx WINELIB_NAME(VariantChangeTypeEx)
 
 /*
  * These flags are used for the VariantChangeType and VariantChangeTypeEx APIs.
@@ -221,379 +188,210 @@
 #define VAR_DATEVALUEONLY	((DWORD)0x00000002)
 
 
-HRESULT WINAPI VarUI1FromI232(short sIn, BYTE* pbOut);
-#define VarUI1FromI2 WINELIB_NAME(VarUI1FromI2)
-HRESULT WINAPI VarUI1FromI432(LONG lIn, BYTE* pbOut);
-#define VarUI1FromI4 WINELIB_NAME(VarUI1FromI4)
-HRESULT WINAPI VarUI1FromR432(FLOAT fltIn, BYTE* pbOut);
-#define VarUI1FromR4 WINELIB_NAME(VarUI1FromR4)
-HRESULT WINAPI VarUI1FromR832(double dblIn, BYTE* pbOut);
-#define VarUI1FromR8 WINELIB_NAME(VarUI1FromR8)
-HRESULT WINAPI VarUI1FromDate32(DATE dateIn, BYTE* pbOut);
-#define VarUI1FromDate WINELIB_NAME(VarUI1FromDate)
-HRESULT WINAPI VarUI1FromBool32(VARIANT_BOOL boolIn, BYTE* pbOut);
-#define VarUI1FromBool WINELIB_NAME(VarUI1FromBool)
-HRESULT WINAPI VarUI1FromI132(CHAR cIn, BYTE*pbOut);
-#define VarUI1FromI1 WINELIB_NAME(VarUI1FromI1)
-HRESULT WINAPI VarUI1FromUI232(USHORT uiIn, BYTE*pbOut);
-#define VarUI1FromUI2 WINELIB_NAME(VarUI1FromUI2)
-HRESULT WINAPI VarUI1FromUI432(ULONG ulIn, BYTE*pbOut);
-#define VarUI1FromUI4 WINELIB_NAME(VarUI1FromUI4)
-HRESULT WINAPI VarUI1FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, BYTE* pbOut);
-#define VarUI1FromStr WINELIB_NAME(VarUI1FromStr)
-HRESULT WINAPI VarUI1FromCy32(CY cyIn, BYTE* pbOut);
-#define VarUI1FromCy WINELIB_NAME(VarUI1FromCy)
+HRESULT WINAPI VarUI1FromI2(short sIn, BYTE* pbOut);
+HRESULT WINAPI VarUI1FromI4(LONG lIn, BYTE* pbOut);
+HRESULT WINAPI VarUI1FromR4(FLOAT fltIn, BYTE* pbOut);
+HRESULT WINAPI VarUI1FromR8(double dblIn, BYTE* pbOut);
+HRESULT WINAPI VarUI1FromDate(DATE dateIn, BYTE* pbOut);
+HRESULT WINAPI VarUI1FromBool(VARIANT_BOOL boolIn, BYTE* pbOut);
+HRESULT WINAPI VarUI1FromI1(CHAR cIn, BYTE*pbOut);
+HRESULT WINAPI VarUI1FromUI2(USHORT uiIn, BYTE*pbOut);
+HRESULT WINAPI VarUI1FromUI4(ULONG ulIn, BYTE*pbOut);
+HRESULT WINAPI VarUI1FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, BYTE* pbOut);
+HRESULT WINAPI VarUI1FromCy(CY cyIn, BYTE* pbOut);
 
 /*
 HRESULT WINAPI VarUI1FromDec32(DECIMAL*pdecIn, BYTE*pbOut);
-#define VarUI1FromDec WINELIB_NAME(VarUI1FromDec)
 HRESULT WINAPI VarUI1FromDisp32(IDispatch* pdispIn, LCID lcid, BYTE* pbOut);
-#define VarUI1FromDisp WINELIB_NAME(VarUI1FromDisp)
 */
 
-HRESULT WINAPI VarI2FromUI132(BYTE bIn, short* psOut);
-#define VarI2FromUI1 WINELIB_NAME(VarI2FromUI1)
-HRESULT WINAPI VarI2FromI432(LONG lIn, short* psOut);
-#define VarI2FromI4 WINELIB_NAME(VarI2FromI4)
-HRESULT WINAPI VarI2FromR432(FLOAT fltIn, short* psOut);
-#define VarI2FromR4 WINELIB_NAME(VarI2FromR4)
-HRESULT WINAPI VarI2FromR832(double dblIn, short* psOut);
-#define VarI2FromR8 WINELIB_NAME(VarI2FromR8)
-HRESULT WINAPI VarI2FromDate32(DATE dateIn, short* psOut);
-#define VarI2FromDate WINELIB_NAME(VarI2FromDate)
-HRESULT WINAPI VarI2FromBool32(VARIANT_BOOL boolIn, short* psOut);
-#define VarI2FromBool WINELIB_NAME(VarI2FromBool)
-HRESULT WINAPI VarI2FromI132(CHAR cIn, short*psOut);
-#define VarI2FromI1 WINELIB_NAME(VarI2FromI1)
-HRESULT WINAPI VarI2FromUI232(USHORT uiIn, short*psOut);
-#define VarI2FromUI2 WINELIB_NAME(VarI2FromUI2)
-HRESULT WINAPI VarI2FromUI432(ULONG ulIn, short*psOut);
-#define VarI2FromUI4 WINELIB_NAME(VarI2FromUI4)
-HRESULT WINAPI VarI2FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, short* psOut);
-#define VarI2FromStr WINELIB_NAME(VarI2FromStr)
-HRESULT WINAPI VarI2FromCy32(CY cyIn, short* psOut);
-#define VarI2FromCy WINELIB_NAME(VarI2FromCy)
+HRESULT WINAPI VarI2FromUI1(BYTE bIn, short* psOut);
+HRESULT WINAPI VarI2FromI4(LONG lIn, short* psOut);
+HRESULT WINAPI VarI2FromR4(FLOAT fltIn, short* psOut);
+HRESULT WINAPI VarI2FromR8(double dblIn, short* psOut);
+HRESULT WINAPI VarI2FromDate(DATE dateIn, short* psOut);
+HRESULT WINAPI VarI2FromBool(VARIANT_BOOL boolIn, short* psOut);
+HRESULT WINAPI VarI2FromI1(CHAR cIn, short*psOut);
+HRESULT WINAPI VarI2FromUI2(USHORT uiIn, short*psOut);
+HRESULT WINAPI VarI2FromUI4(ULONG ulIn, short*psOut);
+HRESULT WINAPI VarI2FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, short* psOut);
+HRESULT WINAPI VarI2FromCy(CY cyIn, short* psOut);
 /*
 HRESULT WINAPI VarI2FromDec32(DECIMAL*pdecIn, short*psOut);
-#define VarI2FromDec WINELIB_NAME(VarI2FromDec)
 HRESULT WINAPI VarI2FromDisp32(IDispatch* pdispIn, LCID lcid, short* psOut);
-#define VarI2FromDisp WINELIB_NAME(VarI2FromDisp)
 */
 
-HRESULT WINAPI VarI4FromUI132(BYTE bIn, LONG* plOut);
-#define VarI4FromUI1 WINELIB_NAME(VarI4FromUI1)
-HRESULT WINAPI VarI4FromI232(short sIn, LONG* plOut);
-#define VarI4FromI2 WINELIB_NAME(VarI4FromI2)
-HRESULT WINAPI VarI4FromR432(FLOAT fltIn, LONG* plOut);
-#define VarI4FromR4 WINELIB_NAME(VarI4FromR4)
-HRESULT WINAPI VarI4FromR832(double dblIn, LONG* plOut);
-#define VarI4FromR8 WINELIB_NAME(VarI4FromR8)
-HRESULT WINAPI VarI4FromDate32(DATE dateIn, LONG* plOut);
-#define VarI4FromDate WINELIB_NAME(VarI4FromDate)
-HRESULT WINAPI VarI4FromBool32(VARIANT_BOOL boolIn, LONG* plOut);
-#define VarI4FromBool WINELIB_NAME(VarI4FromBool)
-HRESULT WINAPI VarI4FromI132(CHAR cIn, LONG* plOut);
-#define VarI4FromI1 WINELIB_NAME(VarI4FromI1)
-HRESULT WINAPI VarI4FromUI232(USHORT uiIn, LONG*plOut);
-#define VarI4FromUI2 WINELIB_NAME(VarI4FromUI2)
-HRESULT WINAPI VarI4FromUI432(ULONG ulIn, LONG*plOut);
-#define VarI4FromUI4 WINELIB_NAME(VarI4FromUI4)
-HRESULT WINAPI VarI4FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, LONG* plOut);
-#define VarI4FromStr WINELIB_NAME(VarI4FromStr)
-HRESULT WINAPI VarI4FromCy32(CY cyIn, LONG* plOut);
-#define VarI4FromCy WINELIB_NAME(VarI4FromCy)
+HRESULT WINAPI VarI4FromUI1(BYTE bIn, LONG* plOut);
+HRESULT WINAPI VarI4FromI2(short sIn, LONG* plOut);
+HRESULT WINAPI VarI4FromR4(FLOAT fltIn, LONG* plOut);
+HRESULT WINAPI VarI4FromR8(double dblIn, LONG* plOut);
+HRESULT WINAPI VarI4FromDate(DATE dateIn, LONG* plOut);
+HRESULT WINAPI VarI4FromBool(VARIANT_BOOL boolIn, LONG* plOut);
+HRESULT WINAPI VarI4FromI1(CHAR cIn, LONG* plOut);
+HRESULT WINAPI VarI4FromUI2(USHORT uiIn, LONG*plOut);
+HRESULT WINAPI VarI4FromUI4(ULONG ulIn, LONG*plOut);
+HRESULT WINAPI VarI4FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, LONG* plOut);
+HRESULT WINAPI VarI4FromCy(CY cyIn, LONG* plOut);
 /*
 HRESULT WINAPI VarI4FromDec32(DECIMAL*pdecIn, LONG*plOut);
-#define VarI4FromDec WINELIB_NAME(VarI4FromDec)
 HRESULT WINAPI VarI4FromDisp32(IDispatch* pdispIn, LCID lcid, LONG* plOut);
-#define VarI4FromDisp WINELIB_NAME(VarI4FromDisp)
 */
 
-HRESULT WINAPI VarR4FromUI132(BYTE bIn, FLOAT* pfltOut);
-#define VarR4FromUI1 WINELIB_NAME(VarR4FromUI1)
-HRESULT WINAPI VarR4FromI232(short sIn, FLOAT* pfltOut);
-#define VarR4FromI2 WINELIB_NAME(VarR4FromI2)
-HRESULT WINAPI VarR4FromI432(LONG lIn, FLOAT* pfltOut);
-#define VarR4FromI4 WINELIB_NAME(VarR4FromI4)
-HRESULT WINAPI VarR4FromR832(double dblIn, FLOAT* pfltOut);
-#define VarR4FromR8 WINELIB_NAME(VarR4FromR8)
-HRESULT WINAPI VarR4FromDate32(DATE dateIn, FLOAT* pfltOut);
-#define VarR4FromDate WINELIB_NAME(VarR4FromDate)
-HRESULT WINAPI VarR4FromBool32(VARIANT_BOOL boolIn, FLOAT* pfltOut);
-#define VarR4FromBool WINELIB_NAME(VarR4FromBool)
-HRESULT WINAPI VarR4FromI132(CHAR cIn, FLOAT*pfltOut);
-#define VarR4FromI1 WINELIB_NAME(VarR4FromI1)
-HRESULT WINAPI VarR4FromUI232(USHORT uiIn, FLOAT*pfltOut);
-#define VarR4FromUI2 WINELIB_NAME(VarR4FromUI2)
-HRESULT WINAPI VarR4FromUI432(ULONG ulIn, FLOAT*pfltOut);
-#define VarR4FromUI4 WINELIB_NAME(VarR4FromUI4)
-HRESULT WINAPI VarR4FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, FLOAT*pfltOut);
-#define VarR4FromStr WINELIB_NAME(VarR4FromStr)
-HRESULT WINAPI VarR4FromCy32(CY cyIn, FLOAT* pfltOut);
-#define VarR4FromCy WINELIB_NAME(VarR4FromCy)
+HRESULT WINAPI VarR4FromUI1(BYTE bIn, FLOAT* pfltOut);
+HRESULT WINAPI VarR4FromI2(short sIn, FLOAT* pfltOut);
+HRESULT WINAPI VarR4FromI4(LONG lIn, FLOAT* pfltOut);
+HRESULT WINAPI VarR4FromR8(double dblIn, FLOAT* pfltOut);
+HRESULT WINAPI VarR4FromDate(DATE dateIn, FLOAT* pfltOut);
+HRESULT WINAPI VarR4FromBool(VARIANT_BOOL boolIn, FLOAT* pfltOut);
+HRESULT WINAPI VarR4FromI1(CHAR cIn, FLOAT*pfltOut);
+HRESULT WINAPI VarR4FromUI2(USHORT uiIn, FLOAT*pfltOut);
+HRESULT WINAPI VarR4FromUI4(ULONG ulIn, FLOAT*pfltOut);
+HRESULT WINAPI VarR4FromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, FLOAT*pfltOut);
+HRESULT WINAPI VarR4FromCy(CY cyIn, FLOAT* pfltOut);
 /*
 HRESULT WINAPI VarR4FromDec32(DECIMAL*pdecIn, FLOAT*pfltOut);
-#define VarR4FromDec WINELIB_NAME(VarR4FromDec)
 HRESULT WINAPI VarR4FromDisp32(IDispatch* pdispIn, LCID lcid, FLOAT* pfltOut);
-#define VarR4FromDisp WINELIB_NAME(VarR4FromDisp)
 */
 
-HRESULT WINAPI VarR8FromUI132(BYTE bIn, double* pdblOut);
-#define VarR8FromUI1 WINELIB_NAME(VarR8FromUI1)
-HRESULT WINAPI VarR8FromI232(short sIn, double* pdblOut);
-#define VarR8FromI2 WINELIB_NAME(VarR8FromI2)
-HRESULT WINAPI VarR8FromI432(LONG lIn, double* pdblOut);
-#define VarR8FromI4 WINELIB_NAME(VarR8FromI4)
-HRESULT WINAPI VarR8FromR432(FLOAT fltIn, double* pdblOut);
-#define VarR8FromR4 WINELIB_NAME(VarR8FromR4)
-HRESULT WINAPI VarR8FromDate32(DATE dateIn, double* pdblOut);
-#define VarR8FromDate WINELIB_NAME(VarR8FromDate)
-HRESULT WINAPI VarR8FromBool32(VARIANT_BOOL boolIn, double* pdblOut);
-#define VarR8FromBool WINELIB_NAME(VarR8FromBool)
-HRESULT WINAPI VarR8FromI132(CHAR cIn, double*pdblOut);
-#define VarR8FromI1 WINELIB_NAME(VarR8FromI1)
-HRESULT WINAPI VarR8FromUI232(USHORT uiIn, double*pdblOut);
-#define VarR8FromUI2 WINELIB_NAME(VarR8FromUI2)
-HRESULT WINAPI VarR8FromUI432(ULONG ulIn, double*pdblOut);
-#define VarR8FromUI4 WINELIB_NAME(VarR8FromUI4)
-HRESULT WINAPI VarR8FromStr32(OLECHAR32*strIn, LCID lcid, ULONG dwFlags, double*pdblOut);
-#define VarR8FromStr WINELIB_NAME(VarR8FromStr)
-HRESULT WINAPI VarR8FromCy32(CY cyIn, double* pdblOut);
-#define VarR8FromCy WINELIB_NAME(VarR8FromCy)
+HRESULT WINAPI VarR8FromUI1(BYTE bIn, double* pdblOut);
+HRESULT WINAPI VarR8FromI2(short sIn, double* pdblOut);
+HRESULT WINAPI VarR8FromI4(LONG lIn, double* pdblOut);
+HRESULT WINAPI VarR8FromR4(FLOAT fltIn, double* pdblOut);
+HRESULT WINAPI VarR8FromDate(DATE dateIn, double* pdblOut);
+HRESULT WINAPI VarR8FromBool(VARIANT_BOOL boolIn, double* pdblOut);
+HRESULT WINAPI VarR8FromI1(CHAR cIn, double*pdblOut);
+HRESULT WINAPI VarR8FromUI2(USHORT uiIn, double*pdblOut);
+HRESULT WINAPI VarR8FromUI4(ULONG ulIn, double*pdblOut);
+HRESULT WINAPI VarR8FromStr(OLECHAR*strIn, LCID lcid, ULONG dwFlags, double*pdblOut);
+HRESULT WINAPI VarR8FromCy(CY cyIn, double* pdblOut);
 /*
 HRESULT WINAPI VarR8FromDec32(DECIMAL*pdecIn, double*pdblOut);
-#define VarR8FromDec WINELIB_NAME(VarR8FromDec)
 HRESULT WINAPI VarR8FromDisp32(IDispatch* pdispIn, LCID lcid, double* pdblOut);
-#define VarR8FromDisp WINELIB_NAME(VarR8FromDisp)
 */
 
-HRESULT WINAPI VarDateFromUI132(BYTE bIn, DATE* pdateOut);
-#define VarDateFromUI1 WINELIB_NAME(VarDateFromUI1)
-HRESULT WINAPI VarDateFromI232(short sIn, DATE* pdateOut);
-#define VarDateFromI2 WINELIB_NAME(VarDateFromI2)
-HRESULT WINAPI VarDateFromI432(LONG lIn, DATE* pdateOut);
-#define VarDateFromI4 WINELIB_NAME(VarDateFromI4)
-HRESULT WINAPI VarDateFromR432(FLOAT fltIn, DATE* pdateOut);
-#define VarDateFromR4 WINELIB_NAME(VarDateFromR4)
-HRESULT WINAPI VarDateFromR832(double dblIn, DATE* pdateOut);
-#define VarDateFromR8 WINELIB_NAME(VarDateFromR8)
-HRESULT WINAPI VarDateFromStr32(OLECHAR32*strIn, LCID lcid, ULONG dwFlags, DATE*pdateOut);
-#define VarDateFromStr WINELIB_NAME(VarDateFromStr)
-HRESULT WINAPI VarDateFromI132(CHAR cIn, DATE*pdateOut);
-#define VarDateFromI1 WINELIB_NAME(VarDateFromI1)
-HRESULT WINAPI VarDateFromUI232(USHORT uiIn, DATE*pdateOut);
-#define VarDateFromUI2 WINELIB_NAME(VarDateFromUI2)
-HRESULT WINAPI VarDateFromUI432(ULONG ulIn, DATE*pdateOut);
-#define VarDateFromUI4 WINELIB_NAME(VarDateFromUI4)
-HRESULT WINAPI VarDateFromBool32(VARIANT_BOOL boolIn, DATE* pdateOut);
-#define VarDateFromBool WINELIB_NAME(VarDateFromBool)
-HRESULT WINAPI VarDateFromCy32(CY cyIn, DATE* pdateOut);
-#define VarDateFromCy WINELIB_NAME(VarDateFromCy)
+HRESULT WINAPI VarDateFromUI1(BYTE bIn, DATE* pdateOut);
+HRESULT WINAPI VarDateFromI2(short sIn, DATE* pdateOut);
+HRESULT WINAPI VarDateFromI4(LONG lIn, DATE* pdateOut);
+HRESULT WINAPI VarDateFromR4(FLOAT fltIn, DATE* pdateOut);
+HRESULT WINAPI VarDateFromR8(double dblIn, DATE* pdateOut);
+HRESULT WINAPI VarDateFromStr(OLECHAR*strIn, LCID lcid, ULONG dwFlags, DATE*pdateOut);
+HRESULT WINAPI VarDateFromI1(CHAR cIn, DATE*pdateOut);
+HRESULT WINAPI VarDateFromUI2(USHORT uiIn, DATE*pdateOut);
+HRESULT WINAPI VarDateFromUI4(ULONG ulIn, DATE*pdateOut);
+HRESULT WINAPI VarDateFromBool(VARIANT_BOOL boolIn, DATE* pdateOut);
+HRESULT WINAPI VarDateFromCy(CY cyIn, DATE* pdateOut);
 /*
 HRESULT WINAPI VarDateFromDec32(DECIMAL*pdecIn, DATE*pdateOut);
-#define VarDateFromDec WINELIB_NAME(VarDateFromDec)
 HRESULT WINAPI VarDateFromDisp32(IDispatch* pdispIn, LCID lcid, DATE* pdateOut);
-#define VarDateFromDisp WINELIB_NAME(VarDateFromDisp)
 */
-HRESULT WINAPI VarCyFromUI132(BYTE bIn, CY* pcyOut);
-#define VarCyFromUI1 WINELIB_NAME(VarCyFromUI1)
-HRESULT WINAPI VarCyFromI232(short sIn, CY* pcyOut);
-#define VarCyFromI2 WINELIB_NAME(VarCyFromI2)
-HRESULT WINAPI VarCyFromI432(LONG lIn, CY* pcyOut);
-#define VarCyFromI4 WINELIB_NAME(VarCyFromI4)
-HRESULT WINAPI VarCyFromR432(FLOAT fltIn, CY* pcyOut);
-#define VarCyFromR4 WINELIB_NAME(VarCyFromR4)
-HRESULT WINAPI VarCyFromR832(double dblIn, CY* pcyOut);
-#define VarCyFromR8 WINELIB_NAME(VarCyFromR8)
-HRESULT WINAPI VarCyFromDate32(DATE dateIn, CY* pcyOut);
-#define VarCyFromDate WINELIB_NAME(VarCyFromDate)
-HRESULT WINAPI VarCyFromBool32(VARIANT_BOOL boolIn, CY* pcyOut);
-#define VarCyFromBool WINELIB_NAME(VarCyFromBool)
-HRESULT WINAPI VarCyFromI132(CHAR cIn, CY*pcyOut);
-#define VarCyFromI1 WINELIB_NAME(VarCyFromI1)
-HRESULT WINAPI VarCyFromUI232(USHORT uiIn, CY*pcyOut);
-#define VarCyFromUI2 WINELIB_NAME(VarCyFromUI2)
-HRESULT WINAPI VarCyFromUI432(ULONG ulIn, CY*pcyOut);
-#define VarCyFromUI4 WINELIB_NAME(VarCyFromUI4)
+HRESULT WINAPI VarCyFromUI1(BYTE bIn, CY* pcyOut);
+HRESULT WINAPI VarCyFromI2(short sIn, CY* pcyOut);
+HRESULT WINAPI VarCyFromI4(LONG lIn, CY* pcyOut);
+HRESULT WINAPI VarCyFromR4(FLOAT fltIn, CY* pcyOut);
+HRESULT WINAPI VarCyFromR8(double dblIn, CY* pcyOut);
+HRESULT WINAPI VarCyFromDate(DATE dateIn, CY* pcyOut);
+HRESULT WINAPI VarCyFromBool(VARIANT_BOOL boolIn, CY* pcyOut);
+HRESULT WINAPI VarCyFromI1(CHAR cIn, CY*pcyOut);
+HRESULT WINAPI VarCyFromUI2(USHORT uiIn, CY*pcyOut);
+HRESULT WINAPI VarCyFromUI4(ULONG ulIn, CY*pcyOut);
 /*
 HRESULT WINAPI VarCyFromDec32(DECIMAL*pdecIn, CY*pcyOut);
-#define VarCyFromDec WINELIB_NAME(VarCyFromDec)
 HRESULT WINAPI VarCyFromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, CY* pcyOut);
-#define VarCyFromStr WINELIB_NAME(VarCyFromStr)
 HRESULT WINAPI VarCyFromDisp32(IDispatch* pdispIn, LCID lcid, CY* pcyOut);
-#define VarCyFromDisp WINELIB_NAME(VarCyFromDisp)
 */
 
-HRESULT WINAPI VarBstrFromUI132(BYTE bVal, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut);
-#define VarBstrFromUI1 WINELIB_NAME(VarBstrFromUI1)
-HRESULT WINAPI VarBstrFromI232(short iVal, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut);
-#define VarBstrFromI2 WINELIB_NAME(VarBstrFromI2)
-HRESULT WINAPI VarBstrFromI432(LONG lIn, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut);
-#define VarBstrFromI4 WINELIB_NAME(VarBstrFromI4)
-HRESULT WINAPI VarBstrFromR432(FLOAT fltIn, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut);
-#define VarBstrFromR4 WINELIB_NAME(VarBstrFromR4)
-HRESULT WINAPI VarBstrFromR832(double dblIn, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut);
-#define VarBstrFromR8 WINELIB_NAME(VarBstrFromR8)
-HRESULT WINAPI VarBstrFromDate32(DATE dateIn, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut);
-#define VarBstrFromDate WINELIB_NAME(VarBstrFromDate)
-HRESULT WINAPI VarBstrFromBool32(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut);
-#define VarBstrFromBool WINELIB_NAME(VarBstrFromBool)
-HRESULT WINAPI VarBstrFromI132(CHAR cIn, LCID lcid, ULONG dwFlags, BSTR32*pbstrOut);
-#define VarBstrFromI1 WINELIB_NAME(VarBstrFromI1)
-HRESULT WINAPI VarBstrFromUI232(USHORT uiIn, LCID lcid, ULONG dwFlags, BSTR32*pbstrOut);
-#define VarBstrFromUI2 WINELIB_NAME(VarBstrFromUI2)
-HRESULT WINAPI VarBstrFromUI432(ULONG ulIn, LCID lcid, ULONG dwFlags, BSTR32*pbstrOut);
-#define VarBstrFromUI4 WINELIB_NAME(VarBstrFromUI4)
-HRESULT WINAPI VarBstrFromCy32(CY cyIn, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut);
-#define VarBstrFromCy WINELIB_NAME(VarBstrFromCy)
+HRESULT WINAPI VarBstrFromUI1(BYTE bVal, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
+HRESULT WINAPI VarBstrFromI2(short iVal, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
+HRESULT WINAPI VarBstrFromI4(LONG lIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
+HRESULT WINAPI VarBstrFromR4(FLOAT fltIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
+HRESULT WINAPI VarBstrFromR8(double dblIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
+HRESULT WINAPI VarBstrFromDate(DATE dateIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
+HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
+HRESULT WINAPI VarBstrFromI1(CHAR cIn, LCID lcid, ULONG dwFlags, BSTR*pbstrOut);
+HRESULT WINAPI VarBstrFromUI2(USHORT uiIn, LCID lcid, ULONG dwFlags, BSTR*pbstrOut);
+HRESULT WINAPI VarBstrFromUI4(ULONG ulIn, LCID lcid, ULONG dwFlags, BSTR*pbstrOut);
+HRESULT WINAPI VarBstrFromCy(CY cyIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
 /*
 HRESULT WINAPI VarBstrFromDec32(DECIMAL*pdecIn, LCID lcid, ULONG dwFlags, BSTR32*pbstrOut);
-#define VarBstrFromDec WINELIB_NAME(VarBstrFromDec)
 HRESULT WINAPI VarBstrFromDisp32(IDispatch* pdispIn, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut);
-#define VarBstrFromDisp WINELIB_NAME(VarBstrFromDisp)
 */
 
-HRESULT WINAPI VarBoolFromUI132(BYTE bIn, VARIANT_BOOL* pboolOut);
-#define VarBoolFromUI1 WINELIB_NAME(VarBoolFromUI1)
-HRESULT WINAPI VarBoolFromI232(short sIn, VARIANT_BOOL* pboolOut);
-#define VarBoolFromI2 WINELIB_NAME(VarBoolFromI2)
-HRESULT WINAPI VarBoolFromI432(LONG lIn, VARIANT_BOOL* pboolOut);
-#define VarBoolFromI4 WINELIB_NAME(VarBoolFromI4)
-HRESULT WINAPI VarBoolFromR432(FLOAT fltIn, VARIANT_BOOL* pboolOut);
-#define VarBoolFromR4 WINELIB_NAME(VarBoolFromR4)
-HRESULT WINAPI VarBoolFromR832(double dblIn, VARIANT_BOOL* pboolOut);
-#define VarBoolFromR8 WINELIB_NAME(VarBoolFromR8)
-HRESULT WINAPI VarBoolFromDate32(DATE dateIn, VARIANT_BOOL* pboolOut);
-#define VarBoolFromDate WINELIB_NAME(VarBoolFromDate)
-HRESULT WINAPI VarBoolFromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, VARIANT_BOOL* pboolOut);
-#define VarBoolFromStr WINELIB_NAME(VarBoolFromStr)
-HRESULT WINAPI VarBoolFromI132(CHAR cIn, VARIANT_BOOL*pboolOut);
-#define VarBoolFromI1 WINELIB_NAME(VarBoolFromI1)
-HRESULT WINAPI VarBoolFromUI232(USHORT uiIn, VARIANT_BOOL*pboolOut);
-#define VarBoolFromUI2 WINELIB_NAME(VarBoolFromUI2)
-HRESULT WINAPI VarBoolFromUI432(ULONG ulIn, VARIANT_BOOL*pboolOut);
-#define VarBoolFromUI4 WINELIB_NAME(VarBoolFromUI4)
-HRESULT WINAPI VarBoolFromCy32(CY cyIn, VARIANT_BOOL* pboolOut);
-#define VarBoolFromCy WINELIB_NAME(VarBoolFromCy)
+HRESULT WINAPI VarBoolFromUI1(BYTE bIn, VARIANT_BOOL* pboolOut);
+HRESULT WINAPI VarBoolFromI2(short sIn, VARIANT_BOOL* pboolOut);
+HRESULT WINAPI VarBoolFromI4(LONG lIn, VARIANT_BOOL* pboolOut);
+HRESULT WINAPI VarBoolFromR4(FLOAT fltIn, VARIANT_BOOL* pboolOut);
+HRESULT WINAPI VarBoolFromR8(double dblIn, VARIANT_BOOL* pboolOut);
+HRESULT WINAPI VarBoolFromDate(DATE dateIn, VARIANT_BOOL* pboolOut);
+HRESULT WINAPI VarBoolFromStr(OLECHAR* strIn, LCID lcid, ULONG dwFlags, VARIANT_BOOL* pboolOut);
+HRESULT WINAPI VarBoolFromI1(CHAR cIn, VARIANT_BOOL*pboolOut);
+HRESULT WINAPI VarBoolFromUI2(USHORT uiIn, VARIANT_BOOL*pboolOut);
+HRESULT WINAPI VarBoolFromUI4(ULONG ulIn, VARIANT_BOOL*pboolOut);
+HRESULT WINAPI VarBoolFromCy(CY cyIn, VARIANT_BOOL* pboolOut);
 /*
 HRESULT WINAPI VarBoolFromDec32(DECIMAL*pdecIn, VARIANT_BOOL*pboolOut);
-#define VarBoolFromDec WINELIB_NAME(VarBoolFromDec)
 HRESULT WINAPI VarBoolFromDisp32(IDispatch* pdispIn, LCID lcid, VARIANT_BOOL* pboolOut);
-#define VarBoolFromDisp WINELIB_NAME(VarBoolFromDisp)
 */
 
-HRESULT WINAPI VarI1FromUI132(BYTE bIn, CHAR*pcOut);
-#define VarI1FromUI1 WINELIB_NAME(VarI1FromUI1)
-HRESULT WINAPI VarI1FromI232(short uiIn, CHAR*pcOut);
-#define VarI1FromI2 WINELIB_NAME(VarI1FromI2)
-HRESULT WINAPI VarI1FromI432(LONG lIn, CHAR*pcOut);
-#define VarI1FromI4 WINELIB_NAME(VarI1FromI4)
-HRESULT WINAPI VarI1FromR432(FLOAT fltIn, CHAR*pcOut);
-#define VarI1FromR4 WINELIB_NAME(VarI1FromR4)
-HRESULT WINAPI VarI1FromR832(double dblIn, CHAR*pcOut);
-#define VarI1FromR8 WINELIB_NAME(VarI1FromR8)
-HRESULT WINAPI VarI1FromDate32(DATE dateIn, CHAR*pcOut);
-#define VarI1FromDate WINELIB_NAME(VarI1FromDate)
-HRESULT WINAPI VarI1FromStr32(OLECHAR32*strIn, LCID lcid, ULONG dwFlags, CHAR*pcOut);
-#define VarI1FromStr WINELIB_NAME(VarI1FromStr)
-HRESULT WINAPI VarI1FromBool32(VARIANT_BOOL boolIn, CHAR*pcOut);
-#define VarI1FromBool WINELIB_NAME(VarI1FromBool)
-HRESULT WINAPI VarI1FromUI232(USHORT uiIn, CHAR*pcOut);
-#define VarI1FromUI2 WINELIB_NAME(VarI1FromUI2)
-HRESULT WINAPI VarI1FromUI432(ULONG ulIn, CHAR*pcOut);
-#define VarI1FromUI4 WINELIB_NAME(VarI1FromUI4)
-HRESULT WINAPI VarI1FromCy32(CY cyIn, CHAR*pcOut);
-#define VarI1FromCy WINELIB_NAME(VarI1FromCy)
+HRESULT WINAPI VarI1FromUI1(BYTE bIn, CHAR*pcOut);
+HRESULT WINAPI VarI1FromI2(short uiIn, CHAR*pcOut);
+HRESULT WINAPI VarI1FromI4(LONG lIn, CHAR*pcOut);
+HRESULT WINAPI VarI1FromR4(FLOAT fltIn, CHAR*pcOut);
+HRESULT WINAPI VarI1FromR8(double dblIn, CHAR*pcOut);
+HRESULT WINAPI VarI1FromDate(DATE dateIn, CHAR*pcOut);
+HRESULT WINAPI VarI1FromStr(OLECHAR*strIn, LCID lcid, ULONG dwFlags, CHAR*pcOut);
+HRESULT WINAPI VarI1FromBool(VARIANT_BOOL boolIn, CHAR*pcOut);
+HRESULT WINAPI VarI1FromUI2(USHORT uiIn, CHAR*pcOut);
+HRESULT WINAPI VarI1FromUI4(ULONG ulIn, CHAR*pcOut);
+HRESULT WINAPI VarI1FromCy(CY cyIn, CHAR*pcOut);
 /*
 HRESULT WINAPI VarI1FromDec32(DECIMAL*pdecIn, CHAR*pcOut);
-#define VarI1FromDec WINELIB_NAME(VarI1FromDec)
 HRESULT WINAPI VarI1FromDisp32(IDispatch*pdispIn, LCID lcid, CHAR*pcOut);
-#define VarI1FromDisp WINELIB_NAME(VarI1FromDisp)
 */
 
-HRESULT WINAPI VarUI2FromUI132(BYTE bIn, USHORT*puiOut);
-#define VarUI2FromUI1 WINELIB_NAME(VarUI2FromUI1)
-HRESULT WINAPI VarUI2FromI232(short uiIn, USHORT*puiOut);
-#define VarUI2FromI2 WINELIB_NAME(VarUI2FromI2)
-HRESULT WINAPI VarUI2FromI432(LONG lIn, USHORT*puiOut);
-#define VarUI2FromI4 WINELIB_NAME(VarUI2FromI4)
-HRESULT WINAPI VarUI2FromR432(FLOAT fltIn, USHORT*puiOut);
-#define VarUI2FromR4 WINELIB_NAME(VarUI2FromR4)
-HRESULT WINAPI VarUI2FromR832(double dblIn, USHORT*puiOut);
-#define VarUI2FromR8 WINELIB_NAME(VarUI2FromR8)
-HRESULT WINAPI VarUI2FromDate32(DATE dateIn, USHORT*puiOut);
-#define VarUI2FromDate WINELIB_NAME(VarUI2FromDate)
-HRESULT WINAPI VarUI2FromStr32(OLECHAR32*strIn, LCID lcid, ULONG dwFlags, USHORT*puiOut);
-#define VarUI2FromStr WINELIB_NAME(VarUI2FromStr)
-HRESULT WINAPI VarUI2FromBool32(VARIANT_BOOL boolIn, USHORT*puiOut);
-#define VarUI2FromBool WINELIB_NAME(VarUI2FromBool)
-HRESULT WINAPI VarUI2FromI132(CHAR cIn, USHORT*puiOut);
-#define VarUI2FromI1 WINELIB_NAME(VarUI2FromI1)
-HRESULT WINAPI VarUI2FromUI432(ULONG ulIn, USHORT*puiOut);
-#define VarUI2FromUI4 WINELIB_NAME(VarUI2FromUI4)
-HRESULT WINAPI VarUI2FromCy32(CY cyIn, USHORT*puiOut);
-#define VarUI2FromCy WINELIB_NAME(VarUI2FromCy)
+HRESULT WINAPI VarUI2FromUI1(BYTE bIn, USHORT*puiOut);
+HRESULT WINAPI VarUI2FromI2(short uiIn, USHORT*puiOut);
+HRESULT WINAPI VarUI2FromI4(LONG lIn, USHORT*puiOut);
+HRESULT WINAPI VarUI2FromR4(FLOAT fltIn, USHORT*puiOut);
+HRESULT WINAPI VarUI2FromR8(double dblIn, USHORT*puiOut);
+HRESULT WINAPI VarUI2FromDate(DATE dateIn, USHORT*puiOut);
+HRESULT WINAPI VarUI2FromStr(OLECHAR*strIn, LCID lcid, ULONG dwFlags, USHORT*puiOut);
+HRESULT WINAPI VarUI2FromBool(VARIANT_BOOL boolIn, USHORT*puiOut);
+HRESULT WINAPI VarUI2FromI1(CHAR cIn, USHORT*puiOut);
+HRESULT WINAPI VarUI2FromUI4(ULONG ulIn, USHORT*puiOut);
+HRESULT WINAPI VarUI2FromCy(CY cyIn, USHORT*puiOut);
 /*
 HRESULT WINAPI VarUI2FromDec32(DECIMAL*pdecIn, USHORT*puiOut);
-#define VarUI2FromDec WINELIB_NAME(VarUI2FromDec)
 HRESULT WINAPI VarUI2FromDisp32(IDispatch*pdispIn, LCID lcid, USHORT*puiOut);
-#define VarUI2FromDisp WINELIB_NAME(VarUI2FromDisp)
 */
 
-HRESULT WINAPI VarUI4FromStr32(OLECHAR32*strIn, LCID lcid, ULONG dwFlags, ULONG*pulOut);
-#define VarUI4FromStr WINELIB_NAME(VarUI4FromStr)
-HRESULT WINAPI VarUI4FromUI132(BYTE bIn, ULONG*pulOut);
-#define VarUI4FromUI1 WINELIB_NAME(VarUI4FromUI1)
-HRESULT WINAPI VarUI4FromI232(short uiIn, ULONG*pulOut);
-#define VarUI4FromI2 WINELIB_NAME(VarUI4FromI2)
-HRESULT WINAPI VarUI4FromI432(LONG lIn, ULONG*pulOut);
-#define VarUI4FromI4 WINELIB_NAME(VarUI4FromI4)
-HRESULT WINAPI VarUI4FromR432(FLOAT fltIn, ULONG*pulOut);
-#define VarUI4FromR4 WINELIB_NAME(VarUI4FromR4)
-HRESULT WINAPI VarUI4FromR832(double dblIn, ULONG*pulOut);
-#define VarUI4FromR8 WINELIB_NAME(VarUI4FromR8)
-HRESULT WINAPI VarUI4FromDate32(DATE dateIn, ULONG*pulOut);
-#define VarUI4FromDate WINELIB_NAME(VarUI4FromDate)
-HRESULT WINAPI VarUI4FromBool32(VARIANT_BOOL boolIn, ULONG*pulOut);
-#define VarUI4FromBool WINELIB_NAME(VarUI4FromBool)
-HRESULT WINAPI VarUI4FromI132(CHAR cIn, ULONG*pulOut);
-#define VarUI4FromI1 WINELIB_NAME(VarUI4FromI1)
-HRESULT WINAPI VarUI4FromUI232(USHORT uiIn, ULONG*pulOut);
-#define VarUI4FromUI2 WINELIB_NAME(VarUI4FromUI2)
-HRESULT WINAPI VarUI4FromCy32(CY cyIn, ULONG*pulOut);
-#define VarUI4FromCy WINELIB_NAME(VarUI4FromCy)
+HRESULT WINAPI VarUI4FromStr(OLECHAR*strIn, LCID lcid, ULONG dwFlags, ULONG*pulOut);
+HRESULT WINAPI VarUI4FromUI1(BYTE bIn, ULONG*pulOut);
+HRESULT WINAPI VarUI4FromI2(short uiIn, ULONG*pulOut);
+HRESULT WINAPI VarUI4FromI4(LONG lIn, ULONG*pulOut);
+HRESULT WINAPI VarUI4FromR4(FLOAT fltIn, ULONG*pulOut);
+HRESULT WINAPI VarUI4FromR8(double dblIn, ULONG*pulOut);
+HRESULT WINAPI VarUI4FromDate(DATE dateIn, ULONG*pulOut);
+HRESULT WINAPI VarUI4FromBool(VARIANT_BOOL boolIn, ULONG*pulOut);
+HRESULT WINAPI VarUI4FromI1(CHAR cIn, ULONG*pulOut);
+HRESULT WINAPI VarUI4FromUI2(USHORT uiIn, ULONG*pulOut);
+HRESULT WINAPI VarUI4FromCy(CY cyIn, ULONG*pulOut);
 /*
 HRESULT WINAPI VarUI4FromDec32(DECIMAL*pdecIn, ULONG*pulOut);
-#define VarUI4FromDec WINELIB_NAME(VarUI4FromDec)
 HRESULT WINAPI VarUI4FromDisp32(IDispatch*pdispIn, LCID lcid, ULONG*pulOut);
-#define VarUI4FromDisp WINELIB_NAME(VarUI4FromDisp)
 
 HRESULT WINAPI VarDecFromUI132(BYTE bIn, DECIMAL*pdecOut);
-#define VarDecFromUI1 WINELIB_NAME(VarDecFromUI1)
 HRESULT WINAPI VarDecFromI232(short uiIn, DECIMAL*pdecOut);
-#define VarDecFromI2 WINELIB_NAME(VarDecFromI2)
 HRESULT WINAPI VarDecFromI432(LONG lIn, DECIMAL*pdecOut);
-#define VarDecFromI4 WINELIB_NAME(VarDecFromI4)
 HRESULT WINAPI VarDecFromR432(FLOAT fltIn, DECIMAL*pdecOut);
-#define VarDecFromR4 WINELIB_NAME(VarDecFromR4)
 HRESULT WINAPI VarDecFromR832(double dblIn, DECIMAL*pdecOut);
-#define VarDecFromR8 WINELIB_NAME(VarDecFromR8)
 HRESULT WINAPI VarDecFromDate32(DATE dateIn, DECIMAL*pdecOut);
-#define VarDecFromDate WINELIB_NAME(VarDecFromDate)
 HRESULT WINAPI VarDecFromStr32(OLECHAR32*strIn, LCID lcid, ULONG dwFlags, DECIMAL*pdecOut);
-#define VarDecFromStr WINELIB_NAME(VarDecFromStr)
 HRESULT WINAPI VarDecFromBool32(VARIANT_BOOL boolIn, DECIMAL*pdecOut);
-#define VarDecFromBool WINELIB_NAME(VarDecFromBool)
 HRESULT WINAPI VarDecFromI132(CHAR cIn, DECIMAL*pdecOut);
-#define VarDecFromI1 WINELIB_NAME(VarDecFromI1)
 HRESULT WINAPI VarDecFromUI232(USHORT uiIn, DECIMAL*pdecOut);
-#define VarDecFromUI2 WINELIB_NAME(VarDecFromUI2)
 HRESULT WINAPI VarDecFromUI432(ULONG ulIn, DECIMAL*pdecOut);
-#define VarDecFromUI4 WINELIB_NAME(VarDecFromUI4)
 HRESULT WINAPI VarDecFromCy32(CY cyIn, DECIMAL*pdecOut);
-#define VarDecFromCy WINELIB_NAME(VarDecFromCy)
 HRESULT WINAPI VarDecFromDisp32(IDispatch*pdispIn, LCID lcid, DECIMAL*pdecOut);
-#define VarDecFromDisp WINELIB_NAME(VarDecFromDisp)
 */
 
 
@@ -601,62 +399,62 @@
 #define VarUI4FromUI4( in, pOut ) ( *(pOut) =  (in) )
 #define VarI4FromI4( in, pOut )   ( *(pOut) =  (in) )
 
-#define VarUI1FromInt32		VarUI1FromI432
-#define VarUI1FromUint32	VarUI1FromUI432
-#define VarI2FromInt32		VarI2FromI432
-#define VarI2FromUint32		VarI2FromUI432
-#define VarI4FromInt32		VarI4FromI432
-#define VarI4FromUint32		VarI4FromUI432
-#define VarR4FromInt32		VarR4FromI432
-#define VarR4FromUint32		VarR4FromUI432
-#define VarR8FromInt32		VarR8FromI432
-#define VarR8FromUint32		VarR8FromUI432
-#define VarDateFromInt32	VarDateFromI432
-#define VarDateFromUint32	VarDateFromUI432
-#define VarCyFromInt32		VarCyFromI432
-#define VarCyFromUint32		VarCyFromUI432
-#define VarBstrFromInt32	VarBstrFromI432
-#define VarBstrFromUint32	VarBstrFromUI432
-#define VarBoolFromInt32	VarBoolFromI432
-#define VarBoolFromUint32	VarBoolFromUI432
-#define VarI1FromInt32		VarI1FromI432
-#define VarI1FromUint32		VarI1FromUI432
-#define VarUI2FromInt32		VarUI2FromI432
-#define VarUI2FromUint32	VarUI2FromUI432
-#define VarUI4FromInt32		VarUI4FromI432
-#define VarUI4FromUint32	VarUI4FromUI432
-#define VarDecFromInt32		VarDecFromI432
-#define VarDecFromUint32	VarDecFromUI432
-#define VarIntFromUI132		VarI4FromUI132
-#define VarIntFromI232		VarI4FromI232
-#define VarIntFromI432		VarI4FromI432
-#define VarIntFromR432		VarI4FromR432
-#define VarIntFromR832		VarI4FromR832
-#define VarIntFromDate32	VarI4FromDate32
-#define VarIntFromCy32		VarI4FromCy32
-#define VarIntFromStr32		VarI4FromStr32
-#define VarIntFromDisp32	VarI4FromDisp32
-#define VarIntFromBool32	VarI4FromBool32
-#define VarIntFromI132		VarI4FromI132
-#define VarIntFromUI232		VarI4FromUI232
-#define VarIntFromUI432		VarI4FromUI432
-#define VarIntFromDec32		VarI4FromDec32
-#define VarIntFromUint32	VarI4FromUI432
-#define VarUintFromUI132	VarUI4FromUI132
-#define VarUintFromI232		VarUI4FromI232
-#define VarUintFromI432		VarUI4FromI432
-#define VarUintFromR432		VarUI4FromR432
-#define VarUintFromR832		VarUI4FromR832
-#define VarUintFromDate32	VarUI4FromDate32
-#define VarUintFromCy32		VarUI4FromCy32
-#define VarUintFromStr32	VarUI4FromStr32
-#define VarUintFromDisp32	VarUI4FromDisp32
-#define VarUintFromBool32	VarUI4FromBool32
-#define VarUintFromI132		VarUI4FromI132
-#define VarUintFromUI232	VarUI4FromUI232
-#define VarUintFromUI432	VarUI4FromUI432
-#define VarUintFromDec32	VarUI4FromDec32
-#define VarUintFromInt32	VarUI4FromI432
+#define VarUI1FromInt		VarUI1FromI4
+#define VarUI1FromUint	VarUI1FromUI4
+#define VarI2FromInt		VarI2FromI4
+#define VarI2FromUint		VarI2FromUI4
+#define VarI4FromInt		VarI4FromI432
+#define VarI4FromUint		VarI4FromUI4
+#define VarR4FromInt		VarR4FromI4
+#define VarR4FromUint		VarR4FromUI4
+#define VarR8FromInt		VarR8FromI4
+#define VarR8FromUint		VarR8FromUI4
+#define VarDateFromInt	VarDateFromI4
+#define VarDateFromUint	VarDateFromUI4
+#define VarCyFromInt		VarCyFromI4
+#define VarCyFromUint		VarCyFromUI4
+#define VarBstrFromInt	VarBstrFromI4
+#define VarBstrFromUint	VarBstrFromUI4
+#define VarBoolFromInt	VarBoolFromI4
+#define VarBoolFromUint	VarBoolFromUI4
+#define VarI1FromInt		VarI1FromI4
+#define VarI1FromUint		VarI1FromUI4
+#define VarUI2FromInt		VarUI2FromI4
+#define VarUI2FromUint	VarUI2FromUI4
+#define VarUI4FromInt		VarUI4FromI4
+#define VarUI4FromUint	VarUI4FromUI432
+#define VarDecFromInt		VarDecFromI432
+#define VarDecFromUint	VarDecFromUI432
+#define VarIntFromUI1		VarI4FromUI1
+#define VarIntFromI2		VarI4FromI2
+#define VarIntFromI4		VarI4FromI432
+#define VarIntFromR4		VarI4FromR4
+#define VarIntFromR8		VarI4FromR8
+#define VarIntFromDate	VarI4FromDate
+#define VarIntFromCy		VarI4FromCy
+#define VarIntFromStr		VarI4FromStr
+#define VarIntFromDisp	VarI4FromDisp32
+#define VarIntFromBool	VarI4FromBool
+#define VarIntFromI1		VarI4FromI1
+#define VarIntFromUI2		VarI4FromUI2
+#define VarIntFromUI4		VarI4FromUI4
+#define VarIntFromDec		VarI4FromDec32
+#define VarIntFromUint	VarI4FromUI4
+#define VarUintFromUI1	VarUI4FromUI1
+#define VarUintFromI2		VarUI4FromI2
+#define VarUintFromI4		VarUI4FromI4
+#define VarUintFromR4		VarUI4FromR4
+#define VarUintFromR8		VarUI4FromR8
+#define VarUintFromDate	VarUI4FromDate
+#define VarUintFromCy		VarUI4FromCy
+#define VarUintFromStr	VarUI4FromStr
+#define VarUintFromDisp	VarUI4FromDisp32
+#define VarUintFromBool	VarUI4FromBool
+#define VarUintFromI1		VarUI4FromI1
+#define VarUintFromUI2	VarUI4FromUI2
+#define VarUintFromUI4	VarUI4FromUI432
+#define VarUintFromDec	VarUI4FromDec32
+#define VarUintFromInt	VarUI4FromI4
 
 #ifdef __cplusplus
 } // extern "C"
diff --git a/include/olectl.h b/include/olectl.h
index 76c152a..abe7b75 100644
--- a/include/olectl.h
+++ b/include/olectl.h
@@ -4,20 +4,20 @@
 #include "wintypes.h"
 #include "ole.h"
 
-#define WINOLECTLAPI INT32 WINAPI
+#define WINOLECTLAPI INT WINAPI
 
 /*
  * FONTDESC is used as an OLE encapsulation of the GDI fonts
  */
 typedef struct tagFONTDESC {
-  UINT32     cbSizeofstruct;
-  LPOLESTR32 lpstrName;
+  UINT     cbSizeofstruct;
+  LPOLESTR lpstrName;
   CY         cySize;
   SHORT      sWeight;
   SHORT      sCharset;
-  BOOL32     fItalic;
-  BOOL32     fUnderline;
-  BOOL32     fStrikeThrough;
+  BOOL     fItalic;
+  BOOL     fUnderline;
+  BOOL     fStrikeThrough;
 } FONTDESC, *LPFONTDESC;
 
 WINOLECTLAPI OleCreateFontIndirect(LPFONTDESC lpFontDesc, REFIID riid, VOID** ppvObj);
diff --git a/include/oledlg.h b/include/oledlg.h
index 1b7ce5b..1b937fc 100644
--- a/include/oledlg.h
+++ b/include/oledlg.h
@@ -10,32 +10,32 @@
 #define OLEUI_OK      1 /* OK button pressed */ 
 #define OLEUI_CANCEL  2 /* Cancel button pressed */
 
-typedef void *LPOLEUIINSERTOBJECT32A; /* FIXME: stub */
-typedef void *LPOLEUIINSERTOBJECT32W; /* FIXME: stub */
+typedef void *LPOLEUIINSERTOBJECTA; /* FIXME: stub */
+typedef void *LPOLEUIINSERTOBJECTW; /* FIXME: stub */
 
-typedef void *LPOLEUIPASTESPECIAL32A;  /* FIXME: stub */
-typedef void *LPOLEUIPASTESPECIAL32W;  /* FIXME: stub */
+typedef void *LPOLEUIPASTESPECIALA;  /* FIXME: stub */
+typedef void *LPOLEUIPASTESPECIALW;  /* FIXME: stub */
 
-typedef void *LPOLEUIEDITLINKS32A;  /* FIXME: stub */
-typedef void *LPOLEUIEDITLINKS32W;  /* FIXME: stub */
+typedef void *LPOLEUIEDITLINKSA;  /* FIXME: stub */
+typedef void *LPOLEUIEDITLINKSW;  /* FIXME: stub */
 
-typedef void *LPOLEUICHANGEICON32A; /* FIXME: stub */
-typedef void *LPOLEUICHANGEICON32W; /* FIXME: stub */
+typedef void *LPOLEUICHANGEICONA; /* FIXME: stub */
+typedef void *LPOLEUICHANGEICONW; /* FIXME: stub */
 
-typedef void *LPOLEUICONVERT32A; /* FIXME: stub */
-typedef void *LPOLEUICONVERT32W; /* FIXME: stub */
+typedef void *LPOLEUICONVERTA; /* FIXME: stub */
+typedef void *LPOLEUICONVERTW; /* FIXME: stub */
 
-typedef void *LPOLEUIBUSY32A; /* FIXME: stub */
-typedef void *LPOLEUIBUSY32W; /* FIXME: stub */
+typedef void *LPOLEUIBUSYA; /* FIXME: stub */
+typedef void *LPOLEUIBUSYW; /* FIXME: stub */
 
-typedef void *LPOLEUILINKCONTAINER32A; /* FIXME: stub */
-typedef void *LPOLEUILINKCONTAINER32W; /* FIXME: stub */
+typedef void *LPOLEUILINKCONTAINERA; /* FIXME: stub */
+typedef void *LPOLEUILINKCONTAINERW; /* FIXME: stub */
 
-typedef void *LPOLEUIOBJECTPROPS32A; /* FIXME: stub */
-typedef void *LPOLEUIOBJECTPROPS32W; /* FIXME: stub */
+typedef void *LPOLEUIOBJECTPROPSA; /* FIXME: stub */
+typedef void *LPOLEUIOBJECTPROPSW; /* FIXME: stub */
 
-typedef void *LPOLEUICHANGESOURCE32A; /* FIXME: stub */
-typedef void *LPOLEUICHANGESOURCE32W; /* FIXME: stub */
+typedef void *LPOLEUICHANGESOURCEA; /* FIXME: stub */
+typedef void *LPOLEUICHANGESOURCEW; /* FIXME: stub */
 
 #endif  /* __WINE_OLEDLG_H */
 
diff --git a/include/pager.h b/include/pager.h
index c02538e..993695d 100644
--- a/include/pager.h
+++ b/include/pager.h
@@ -10,14 +10,14 @@
 
 typedef struct tagPAGER_INFO
 {
-    HWND32   hwndChild;
+    HWND   hwndChild;
     COLORREF clrBk;
-    INT32    nBorder;
-    INT32    nButtonSize;
-    INT32    nPos;
-    BOOL32   bForward;
+    INT    nBorder;
+    INT    nButtonSize;
+    INT    nPos;
+    BOOL   bForward;
 
-    INT32    nChildSize;
+    INT    nChildSize;
 
 } PAGER_INFO;
 
diff --git a/include/palette.h b/include/palette.h
index 3b53203..c6e4cfb 100644
--- a/include/palette.h
+++ b/include/palette.h
@@ -21,10 +21,10 @@
 
 extern HPALETTE16 PALETTE_Init(void);
 extern int PALETTE_GetObject( PALETTEOBJ * palette, int count, LPSTR buffer );
-extern BOOL32 PALETTE_DeleteObject( HPALETTE16 hpalette, PALETTEOBJ *palette );
-extern BOOL32 PALETTE_UnrealizeObject( HPALETTE16 hpalette, PALETTEOBJ *palette);
+extern BOOL PALETTE_DeleteObject( HPALETTE16 hpalette, PALETTEOBJ *palette );
+extern BOOL PALETTE_UnrealizeObject( HPALETTE16 hpalette, PALETTEOBJ *palette);
      
 extern HPALETTE16 WINAPI CreateHalftonePalette16(HDC16 hdc);
-extern HPALETTE32 WINAPI CreateHalftonePalette32(HDC32 hdc);
+extern HPALETTE WINAPI CreateHalftonePalette(HDC hdc);
 
 #endif /* __WINE_PALETTE_H */
diff --git a/include/path.h b/include/path.h
index 6bc39ca..3782f52 100644
--- a/include/path.h
+++ b/include/path.h
@@ -25,10 +25,10 @@
 typedef struct tagGdiPath
 {
    GdiPathState state;
-   POINT32      *pPoints;
+   POINT      *pPoints;
    BYTE         *pFlags;
    int          numEntriesUsed, numEntriesAllocated;
-   BOOL32       newStroke;
+   BOOL       newStroke;
 } GdiPath;
 
 #define PATH_IsPathOpen(path) ((path).state==PATH_Open)
@@ -39,16 +39,16 @@
 
 extern void   PATH_InitGdiPath(GdiPath *pPath);
 extern void   PATH_DestroyGdiPath(GdiPath *pPath);
-extern BOOL32 PATH_AssignGdiPath(GdiPath *pPathDest,
+extern BOOL PATH_AssignGdiPath(GdiPath *pPathDest,
    const GdiPath *pPathSrc);
 
-extern BOOL32 PATH_MoveTo(HDC32 hdc);
-extern BOOL32 PATH_LineTo(HDC32 hdc, INT32 x, INT32 y);
-extern BOOL32 PATH_Rectangle(HDC32 hdc, INT32 x1, INT32 y1,
-   INT32 x2, INT32 y2);
-extern BOOL32 PATH_Ellipse(HDC32 hdc, INT32 x1, INT32 y1,
-   INT32 x2, INT32 y2);
-extern BOOL32 PATH_Arc(HDC32 hdc, INT32 x1, INT32 y1, INT32 x2, INT32 y2,
-   INT32 xStart, INT32 yStart, INT32 xEnd, INT32 yEnd);
+extern BOOL PATH_MoveTo(HDC hdc);
+extern BOOL PATH_LineTo(HDC hdc, INT x, INT y);
+extern BOOL PATH_Rectangle(HDC hdc, INT x1, INT y1,
+   INT x2, INT y2);
+extern BOOL PATH_Ellipse(HDC hdc, INT x1, INT y1,
+   INT x2, INT y2);
+extern BOOL PATH_Arc(HDC hdc, INT x1, INT y1, INT x2, INT y2,
+   INT xStart, INT yStart, INT xEnd, INT yEnd);
 
 #endif /* __WINE_PATH_H */
diff --git a/include/pe_image.h b/include/pe_image.h
index 0b50343..20991a1 100644
--- a/include/pe_image.h
+++ b/include/pe_image.h
@@ -21,33 +21,33 @@
 } PE_MODREF;
 
 struct _wine_modref;
-extern int PE_unloadImage(HMODULE32 hModule);
-extern FARPROC32 PE_FindExportedFunction(struct _wine_modref *wm, LPCSTR funcName, BOOL32 snoop);
-extern BOOL32 PE_EnumResourceTypes32A(HMODULE32,ENUMRESTYPEPROC32A,LONG);
-extern BOOL32 PE_EnumResourceTypes32W(HMODULE32,ENUMRESTYPEPROC32W,LONG);
-extern BOOL32 PE_EnumResourceNames32A(HMODULE32,LPCSTR,ENUMRESNAMEPROC32A,LONG);
-extern BOOL32 PE_EnumResourceNames32W(HMODULE32,LPCWSTR,ENUMRESNAMEPROC32W,LONG);
-extern BOOL32 PE_EnumResourceLanguages32A(HMODULE32,LPCSTR,LPCSTR,ENUMRESLANGPROC32A,LONG);
-extern BOOL32 PE_EnumResourceLanguages32W(HMODULE32,LPCWSTR,LPCWSTR,ENUMRESLANGPROC32W,LONG);
-extern HRSRC32 PE_FindResourceEx32W(struct _wine_modref*,LPCWSTR,LPCWSTR,WORD);
-extern DWORD PE_SizeofResource32(HMODULE32,HRSRC32);
-extern HMODULE32 PE_LoadLibraryEx32A(LPCSTR,HFILE32,DWORD);
-extern HGLOBAL32 PE_LoadResource32(struct _wine_modref *wm,HRSRC32);
-extern HMODULE32 PE_LoadImage( LPCSTR name, OFSTRUCT *ofs, LPCSTR *modName );
-extern struct _wine_modref *PE_CreateModule( HMODULE32 hModule, OFSTRUCT *ofs, 
-                                             DWORD flags, BOOL32 builtin );
+extern int PE_unloadImage(HMODULE hModule);
+extern FARPROC PE_FindExportedFunction(struct _wine_modref *wm, LPCSTR funcName, BOOL snoop);
+extern BOOL PE_EnumResourceTypesA(HMODULE,ENUMRESTYPEPROCA,LONG);
+extern BOOL PE_EnumResourceTypesW(HMODULE,ENUMRESTYPEPROCW,LONG);
+extern BOOL PE_EnumResourceNamesA(HMODULE,LPCSTR,ENUMRESNAMEPROCA,LONG);
+extern BOOL PE_EnumResourceNamesW(HMODULE,LPCWSTR,ENUMRESNAMEPROCW,LONG);
+extern BOOL PE_EnumResourceLanguagesA(HMODULE,LPCSTR,LPCSTR,ENUMRESLANGPROCA,LONG);
+extern BOOL PE_EnumResourceLanguagesW(HMODULE,LPCWSTR,LPCWSTR,ENUMRESLANGPROCW,LONG);
+extern HRSRC PE_FindResourceExW(struct _wine_modref*,LPCWSTR,LPCWSTR,WORD);
+extern DWORD PE_SizeofResource(HMODULE,HRSRC);
+extern HMODULE PE_LoadLibraryExA(LPCSTR,HFILE,DWORD);
+extern HGLOBAL PE_LoadResource(struct _wine_modref *wm,HRSRC);
+extern HMODULE PE_LoadImage( LPCSTR name, OFSTRUCT *ofs, LPCSTR *modName );
+extern struct _wine_modref *PE_CreateModule( HMODULE hModule, OFSTRUCT *ofs, 
+                                             DWORD flags, BOOL builtin );
 extern HINSTANCE16 PE_CreateProcess( LPCSTR name, LPCSTR cmd_line,
-                                     LPCSTR env, BOOL32 inherit, LPSTARTUPINFO32A startup,
+                                     LPCSTR env, BOOL inherit, LPSTARTUPINFOA startup,
                                      LPPROCESS_INFORMATION info );
 
 struct _THDB; /* forward definition */
 extern void PE_InitTls(struct _THDB*);
 extern void PE_InitDLL(struct _wine_modref *wm, DWORD type, LPVOID lpReserved);
 
-extern PIMAGE_RESOURCE_DIRECTORY GetResDirEntryA(PIMAGE_RESOURCE_DIRECTORY,LPCSTR,DWORD,BOOL32);
-extern PIMAGE_RESOURCE_DIRECTORY GetResDirEntryW(PIMAGE_RESOURCE_DIRECTORY,LPCWSTR,DWORD,BOOL32);
+extern PIMAGE_RESOURCE_DIRECTORY GetResDirEntryA(PIMAGE_RESOURCE_DIRECTORY,LPCSTR,DWORD,BOOL);
+extern PIMAGE_RESOURCE_DIRECTORY GetResDirEntryW(PIMAGE_RESOURCE_DIRECTORY,LPCWSTR,DWORD,BOOL);
 
-typedef DWORD (CALLBACK*DLLENTRYPROC32)(HMODULE32,DWORD,LPVOID);
+typedef DWORD (CALLBACK*DLLENTRYPROC)(HMODULE,DWORD,LPVOID);
 
 typedef struct {
 	WORD	popl	WINE_PACKED;	/* 0x8f 0x05 */
@@ -70,7 +70,7 @@
 } ELF_MODREF;
 
 extern struct _wine_modref *ELF_CreateDummyModule(LPCSTR,LPCSTR);
-extern HMODULE32 ELF_LoadLibraryEx32A(LPCSTR,HFILE32,DWORD);
-extern FARPROC32 ELF_FindExportedFunction(struct _wine_modref *wm, LPCSTR funcName);
+extern HMODULE ELF_LoadLibraryExA(LPCSTR,HFILE,DWORD);
+extern FARPROC ELF_FindExportedFunction(struct _wine_modref *wm, LPCSTR funcName);
 
 #endif /* __WINE_PE_IMAGE_H */
diff --git a/include/peexe.h b/include/peexe.h
index fce3669..bc202df 100644
--- a/include/peexe.h
+++ b/include/peexe.h
@@ -239,7 +239,7 @@
 typedef struct _IMAGE_THUNK_DATA {
 	union {
 		LPBYTE    ForwarderString;
-		FARPROC32 Function;
+		FARPROC Function;
 		DWORD     Ordinal;
 		PIMAGE_IMPORT_BY_NAME	AddressOfData;
 	} u1;
@@ -413,7 +413,7 @@
 #define IMAGE_REL_BASED_HIGHADJ			4
 #define IMAGE_REL_BASED_MIPS_JMPADDR		5
 #define IMAGE_REL_BASED_SECTION			6
-#define	IMAGE_REL_BASED_REL32			7
+#define	IMAGE_REL_BASED_REL			7
 #define IMAGE_REL_BASED_MIPS_JMPADDR16		9
 #define IMAGE_REL_BASED_IA64_IMM64		9 /* yes, 9 too */
 #define IMAGE_REL_BASED_DIR64			10
@@ -423,12 +423,12 @@
 #define	IMAGE_REL_I386_ABSOLUTE			0
 #define	IMAGE_REL_I386_DIR16			1
 #define	IMAGE_REL_I386_REL16			2
-#define	IMAGE_REL_I386_DIR32			6
+#define	IMAGE_REL_I386_DIR			6
 #define	IMAGE_REL_I386_DIR32NB			7
 #define	IMAGE_REL_I386_SEG12			9
 #define	IMAGE_REL_I386_SECTION			10
 #define	IMAGE_REL_I386_SECREL			11
-#define	IMAGE_REL_I386_REL32			20
+#define	IMAGE_REL_I386_REL			20
 
 /* MIPS relocation types */
 #define IMAGE_REL_MIPS_ABSOLUTE		0x0000
@@ -451,7 +451,7 @@
 #define IMAGE_REL_ALPHA_ABSOLUTE	0x0000
 #define IMAGE_REL_ALPHA_REFLONG		0x0001
 #define IMAGE_REL_ALPHA_REFQUAD		0x0002
-#define IMAGE_REL_ALPHA_GPREL32		0x0003
+#define IMAGE_REL_ALPHA_GPREL		0x0003
 #define IMAGE_REL_ALPHA_LITERAL		0x0004
 #define IMAGE_REL_ALPHA_LITUSE		0x0005
 #define IMAGE_REL_ALPHA_GPDISP		0x0006
@@ -476,7 +476,7 @@
 /* PowerPC relocation types */
 #define IMAGE_REL_PPC_ABSOLUTE          0x0000
 #define IMAGE_REL_PPC_ADDR64            0x0001
-#define IMAGE_REL_PPC_ADDR32            0x0002
+#define IMAGE_REL_PPC_ADDR            0x0002
 #define IMAGE_REL_PPC_ADDR24            0x0003
 #define IMAGE_REL_PPC_ADDR16            0x0004
 #define IMAGE_REL_PPC_ADDR14            0x0005
@@ -506,7 +506,7 @@
 /* SH3 ? relocation type */
 #define IMAGE_REL_SH3_ABSOLUTE          0x0000
 #define IMAGE_REL_SH3_DIRECT16          0x0001
-#define IMAGE_REL_SH3_DIRECT32          0x0002
+#define IMAGE_REL_SH3_DIRECT          0x0002
 #define IMAGE_REL_SH3_DIRECT8           0x0003
 #define IMAGE_REL_SH3_DIRECT8_WORD      0x0004
 #define IMAGE_REL_SH3_DIRECT8_LONG      0x0005
@@ -524,7 +524,7 @@
 
 /* ARM (Archimedes?) relocation types */
 #define IMAGE_REL_ARM_ABSOLUTE		0x0000
-#define IMAGE_REL_ARM_ADDR32		0x0001
+#define IMAGE_REL_ARM_ADDR		0x0001
 #define IMAGE_REL_ARM_ADDR32NB		0x0002
 #define IMAGE_REL_ARM_BRANCH24		0x0003
 #define IMAGE_REL_ARM_BRANCH11		0x0004
@@ -536,7 +536,7 @@
 #define IMAGE_REL_IA64_IMM14		0x0001
 #define IMAGE_REL_IA64_IMM22		0x0002
 #define IMAGE_REL_IA64_IMM64		0x0003
-#define IMAGE_REL_IA64_DIR32		0x0004
+#define IMAGE_REL_IA64_DIR		0x0004
 #define IMAGE_REL_IA64_DIR64		0x0005
 #define IMAGE_REL_IA64_PCREL21B		0x0006
 #define IMAGE_REL_IA64_PCREL21M		0x0007
@@ -546,7 +546,7 @@
 #define IMAGE_REL_IA64_SECTION		0x000B
 #define IMAGE_REL_IA64_SECREL22		0x000C
 #define IMAGE_REL_IA64_SECREL64I	0x000D
-#define IMAGE_REL_IA64_SECREL32		0x000E
+#define IMAGE_REL_IA64_SECREL		0x000E
 #define IMAGE_REL_IA64_LTOFF64		0x000F
 #define IMAGE_REL_IA64_DIR32NB		0x0010
 #define IMAGE_REL_IA64_RESERVED_11	0x0011
diff --git a/include/pen.h b/include/pen.h
index effed43..7f89ec3 100644
--- a/include/pen.h
+++ b/include/pen.h
@@ -13,10 +13,10 @@
 typedef struct
 {
     GDIOBJHDR   header;
-    LOGPEN32    logpen;
+    LOGPEN    logpen;
 } PENOBJ;
 
 extern INT16 PEN_GetObject16( PENOBJ * pen, INT16 count, LPSTR buffer );
-extern INT32 PEN_GetObject32( PENOBJ * pen, INT32 count, LPSTR buffer );
+extern INT PEN_GetObject( PENOBJ * pen, INT count, LPSTR buffer );
 
 #endif  /* __WINE_PEN_H */
diff --git a/include/process.h b/include/process.h
index 764fd16..bf3def8 100644
--- a/include/process.h
+++ b/include/process.h
@@ -30,7 +30,7 @@
 } HANDLE_TABLE;
 
 /* Current Process pseudo-handle - Returned by GetCurrentProcess*/
-#define CURRENT_PROCESS_PSEUDOHANDLE ((HANDLE32)0x7fffffff)
+#define CURRENT_PROCESS_PSEUDOHANDLE ((HANDLE)0x7fffffff)
 
 /* Win32 process environment database */
 typedef struct
@@ -39,10 +39,10 @@
     DWORD            unknown1;         /* 04 Unknown */
     LPSTR            cmd_line;         /* 08 Command line */
     LPSTR            cur_dir;          /* 0c Current directory */
-    STARTUPINFO32A  *startup_info;     /* 10 Startup information */
-    HANDLE32         hStdin;           /* 14 Handle for standard input */
-    HANDLE32         hStdout;          /* 18 Handle for standard output */
-    HANDLE32         hStderr;          /* 1c Handle for standard error */
+    STARTUPINFOA  *startup_info;     /* 10 Startup information */
+    HANDLE         hStdin;           /* 14 Handle for standard input */
+    HANDLE         hStdout;          /* 18 Handle for standard output */
+    HANDLE         hStderr;          /* 1c Handle for standard error */
     DWORD            unknown2;         /* 20 Unknown */
     DWORD            inherit_console;  /* 24 Inherit console flag */
     DWORD            break_type;       /* 28 Console events flag */
@@ -57,15 +57,15 @@
 } ENVDB;
 
 /* Win32 process database */
-typedef struct _PDB32
+typedef struct _PDB
 {
     K32OBJ           header;           /* 00 Kernel object header */
     DWORD            unknown1;         /* 08 Unknown */
     K32OBJ          *event;            /* 0c Pointer to an event object (unused) */
     DWORD            exit_code;        /* 10 Process exit code */
     DWORD            unknown2;         /* 14 Unknown */
-    HANDLE32         heap;             /* 18 Default process heap */
-    HANDLE32         mem_context;      /* 1c Process memory context */
+    HANDLE         heap;             /* 18 Default process heap */
+    HANDLE         mem_context;      /* 1c Process memory context */
     DWORD            flags;            /* 20 Flags */
     void            *pdb16;            /* 24 DOS PSP */
     WORD             PSP_sel;          /* 28 Selector to DOS PSP */
@@ -74,12 +74,12 @@
     WORD             running_threads;  /* 2e Number of running threads */
     WORD             unknown3;         /* 30 Unknown */
     WORD             ring0_threads;    /* 32 Number of ring 0 threads */
-    HANDLE32         system_heap;      /* 34 System heap to allocate handles */
-    HTASK32          task;             /* 38 Win16 task */
+    HANDLE         system_heap;      /* 34 System heap to allocate handles */
+    HTASK          task;             /* 38 Win16 task */
     void            *mem_map_files;    /* 3c Pointer to mem-mapped files */
     ENVDB           *env_db;           /* 40 Environment database */
     HANDLE_TABLE    *handle_table;     /* 44 Handle table */
-    struct _PDB32   *parent;           /* 48 Parent process */
+    struct _PDB   *parent;           /* 48 Parent process */
     WINE_MODREF     *modref_list;      /* 4c MODREF list */
     void            *thread_list;      /* 50 List of threads */
     void            *debuggee_CB;      /* 54 Debuggee context block */
@@ -90,26 +90,26 @@
     K32OBJ          *console;          /* 84 Console */
     DWORD            tls_bits[2];      /* 88 TLS in-use bits */
     DWORD            process_dword;    /* 90 Unknown */
-    struct _PDB32   *group;            /* 94 Process group */
+    struct _PDB   *group;            /* 94 Process group */
     WINE_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 */
+    HANDLE         heap_list;        /* a4 Head of process heap list */
     void            *heap_handles;     /* a8 Head of heap handles list */
     DWORD            unknown6;         /* ac Unknown */
     K32OBJ          *console_provider; /* b0 Console provider (??) */
     WORD             env_selector;     /* b4 Selector to process environment */
     WORD             error_mode;       /* b6 Error mode */
-    HANDLE32         load_done_evt;    /* b8 Event for process loading done */
+    HANDLE         load_done_evt;    /* b8 Event for process loading done */
     DWORD            unknown7;         /* bc Unknown */
     DWORD            unknown8;         /* c0 Unknown (NT) */
     LCID             locale;           /* c4 Locale to be queried by GetThreadLocale (NT) */
     /* The following are Wine-specific fields */
     void            *server_pid;       /*    Server id for this process */
-    HANDLE32        *dos_handles;      /*    Handles mapping DOS -> Win32 */
-    struct _PDB32   *list_next;        /*    List reference - list of PDB's */
-    struct _PDB32   *list_prev;        /*    List reference - list of PDB's */
-} PDB32;
+    HANDLE        *dos_handles;      /*    Handles mapping DOS -> Win32 */
+    struct _PDB   *list_next;        /*    List reference - list of PDB's */
+    struct _PDB   *list_prev;        /*    List reference - list of PDB's */
+} PDB;
 
 /* Process flags */
 #define PDB32_WIN16_PROC    0x0008  /* Win16 process */
@@ -120,44 +120,44 @@
 
 /* PDB <-> Process id conversion macros */
 #define PROCESS_OBFUSCATOR     ((DWORD)0xdeadbeef)
-#define PROCESS_ID_TO_PDB(id)  ((PDB32 *)((id) ^ PROCESS_OBFUSCATOR))
+#define PROCESS_ID_TO_PDB(id)  ((PDB *)((id) ^ PROCESS_OBFUSCATOR))
 #define PDB_TO_PROCESS_ID(pdb) ((DWORD)(pdb) ^ PROCESS_OBFUSCATOR)
 
 /* scheduler/environ.c */
-extern BOOL32 ENV_BuildEnvironment( PDB32 *pdb );
-extern BOOL32 ENV_InheritEnvironment( PDB32 *pdb, LPCSTR env );
-extern void ENV_FreeEnvironment( PDB32 *pdb );
+extern BOOL ENV_BuildEnvironment( PDB *pdb );
+extern BOOL ENV_InheritEnvironment( PDB *pdb, LPCSTR env );
+extern void ENV_FreeEnvironment( PDB *pdb );
 
 /* scheduler/handle.c */
-extern BOOL32 HANDLE_CreateTable( PDB32 *pdb, BOOL32 inherit );
-extern HANDLE32 HANDLE_Alloc( PDB32 *pdb, K32OBJ *ptr, DWORD access,
-                              BOOL32 inherit, int server_handle );
-extern int HANDLE_GetServerHandle( PDB32 *pdb, HANDLE32 handle,
+extern BOOL HANDLE_CreateTable( PDB *pdb, BOOL inherit );
+extern HANDLE HANDLE_Alloc( PDB *pdb, K32OBJ *ptr, DWORD access,
+                              BOOL inherit, int server_handle );
+extern int HANDLE_GetServerHandle( PDB *pdb, HANDLE handle,
                                    K32OBJ_TYPE type, DWORD access );
-extern void HANDLE_CloseAll( PDB32 *pdb, K32OBJ *ptr );
+extern void HANDLE_CloseAll( PDB *pdb, K32OBJ *ptr );
 
 /* Global handle macros */
 #define HANDLE_OBFUSCATOR         ((DWORD)0x544a4def)
 #define HANDLE_IS_GLOBAL(h)       (((DWORD)(h) ^ HANDLE_OBFUSCATOR) < 0x10000)
-#define HANDLE_LOCAL_TO_GLOBAL(h) ((HANDLE32)((DWORD)(h) ^ HANDLE_OBFUSCATOR))
-#define HANDLE_GLOBAL_TO_LOCAL(h) ((HANDLE32)((DWORD)(h) ^ HANDLE_OBFUSCATOR))
+#define HANDLE_LOCAL_TO_GLOBAL(h) ((HANDLE)((DWORD)(h) ^ HANDLE_OBFUSCATOR))
+#define HANDLE_GLOBAL_TO_LOCAL(h) ((HANDLE)((DWORD)(h) ^ HANDLE_OBFUSCATOR))
 
 
 /* scheduler/process.c */
-extern BOOL32 PROCESS_Init( void );
-extern PDB32 *PROCESS_Current(void);
-extern BOOL32 PROCESS_IsCurrent( HANDLE32 handle );
-extern PDB32 *PROCESS_Initial(void);
-extern PDB32 *PROCESS_IdToPDB( DWORD id );
-extern PDB32 *PROCESS_Create( struct _NE_MODULE *pModule, LPCSTR cmd_line,
+extern BOOL PROCESS_Init( void );
+extern PDB *PROCESS_Current(void);
+extern BOOL PROCESS_IsCurrent( HANDLE handle );
+extern PDB *PROCESS_Initial(void);
+extern PDB *PROCESS_IdToPDB( DWORD id );
+extern PDB *PROCESS_Create( struct _NE_MODULE *pModule, LPCSTR cmd_line,
                               LPCSTR env, HINSTANCE16 hInstance,
-                              HINSTANCE16 hPrevInstance, BOOL32 inherit,
-                              STARTUPINFO32A *startup, PROCESS_INFORMATION *info );
+                              HINSTANCE16 hPrevInstance, BOOL inherit,
+                              STARTUPINFOA *startup, PROCESS_INFORMATION *info );
 extern void PROCESS_SuspendOtherThreads(void);
 extern void PROCESS_ResumeOtherThreads(void);
 extern int  	PROCESS_PDBList_Getsize (void);
-extern PDB32*  	PROCESS_PDBList_Getfirst (void);
-extern PDB32*  	PROCESS_PDBList_Getnext (PDB32*);
+extern PDB*  	PROCESS_PDBList_Getfirst (void);
+extern PDB*  	PROCESS_PDBList_Getnext (PDB*);
 
 #endif  /* __WINE_PROCESS_H */
 
diff --git a/include/progress.h b/include/progress.h
index fdd5415..7a1a721 100644
--- a/include/progress.h
+++ b/include/progress.h
@@ -11,13 +11,13 @@
 
 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 */
+  INT       CurVal;       /* Current progress value */
+  INT       MinVal;       /* Minimum progress value */
+  INT       MaxVal;       /* Maximum progress value */
+  INT       Step;         /* Step to use on PMB_STEPIT */
   COLORREF    ColorBar;     /* Bar color */
   COLORREF    ColorBk;      /* Background color */
-  HFONT32     hFont;        /* Handle to font (not unused) */
+  HFONT     hFont;        /* Handle to font (not unused) */
 } PROGRESS_INFO;
 
 
diff --git a/include/prsht.h b/include/prsht.h
index 6a8472f..26bbaa2 100644
--- a/include/prsht.h
+++ b/include/prsht.h
@@ -13,21 +13,21 @@
  */
 
 
-#define WC_PROPSHEET32A      "SysPropertySheet"
-#define WC_PROPSHEET32W      L"SysPropertySheet"
+#define WC_PROPSHEETA      "SysPropertySheet"
+#define WC_PROPSHEETW      L"SysPropertySheet"
 #define WC_PROPSHEET         WINELIB_NAME_AW(WC_PROPSHEET)
 
-struct _PROPSHEETPAGE32A;  /** need to forward declare those structs **/
-struct _PROPSHEETPAGE32W;
+struct _PROPSHEETPAGEA;  /** need to forward declare those structs **/
+struct _PROPSHEETPAGEW;
 struct _PSP;
 typedef struct _PSP *HPROPSHEETPAGE;
 
 
-typedef UINT32 (CALLBACK *LPFNPSPCALLBACK32A)(HWND32, UINT32, struct _PROPSHEETPAGE32A*);
-typedef UINT32 (CALLBACK *LPFNPSPCALLBACK32W)(HWND32, UINT32, struct _PROPSHEETPAGE32W*);
-typedef INT32  (CALLBACK *PFNPROPSHEETCALLBACK32)(HWND32, UINT32, LPARAM);
-typedef BOOL32 (CALLBACK *LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM);
-typedef BOOL32 (CALLBACK *LPFNADDPROPSHEETPAGES)(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM);
+typedef UINT (CALLBACK *LPFNPSPCALLBACKA)(HWND, UINT, struct _PROPSHEETPAGEA*);
+typedef UINT (CALLBACK *LPFNPSPCALLBACKW)(HWND, UINT, struct _PROPSHEETPAGEW*);
+typedef INT  (CALLBACK *PFNPROPSHEETCALLBACK)(HWND, UINT, LPARAM);
+typedef BOOL (CALLBACK *LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM);
+typedef BOOL (CALLBACK *LPFNADDPROPSHEETPAGES)(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM);
 
 /* c++ likes nameless unions whereas c doesnt */
 /* (used in property sheet structures)        */
@@ -50,11 +50,11 @@
 /*
  * Property sheet support (structures)
  */
-typedef struct _PROPSHEETPAGE32A
+typedef struct _PROPSHEETPAGEA
 {
     DWORD              dwSize;
     DWORD              dwFlags;
-    HINSTANCE32        hInstance;
+    HINSTANCE        hInstance;
     union 
     {
         LPCSTR           pszTemplate;
@@ -62,25 +62,25 @@
     }DUMMYUNIONNAME1;
     union
     {
-        HICON32          hIcon;
+        HICON          hIcon;
         LPCSTR           pszIcon;
     }DUMMYUNIONNAME2;
     LPCSTR             pszTitle;
-    DLGPROC32          pfnDlgProc;
+    DLGPROC          pfnDlgProc;
     LPARAM             lParam;
-    LPFNPSPCALLBACK32A pfnCallback;
-    UINT32*            pcRefParent;
+    LPFNPSPCALLBACKA pfnCallback;
+    UINT*            pcRefParent;
     LPCWSTR            pszHeaderTitle;
     LPCWSTR            pszHeaderSubTitle;
-} PROPSHEETPAGE32A, *LPPROPSHEETPAGE32A;
+} PROPSHEETPAGEA, *LPPROPSHEETPAGEA;
 
-typedef const PROPSHEETPAGE32A *LPCPROPSHEETPAGE32A;
+typedef const PROPSHEETPAGEA *LPCPROPSHEETPAGEA;
 
-typedef struct _PROPSHEETPAGE32W
+typedef struct _PROPSHEETPAGEW
 {
     DWORD               dwSize;
     DWORD               dwFlags;
-    HINSTANCE32         hInstance;
+    HINSTANCE         hInstance;
     union 
     {
         LPCWSTR          pszTemplate;
@@ -88,111 +88,110 @@
     }DUMMYUNIONNAME1;
     union
     {
-        HICON32          hIcon;
+        HICON          hIcon;
         LPCWSTR          pszIcon;
     }DUMMYUNIONNAME2;
     LPCWSTR            pszTitle;
-    DLGPROC32          pfnDlgProc;
+    DLGPROC          pfnDlgProc;
     LPARAM             lParam;
-    LPFNPSPCALLBACK32W pfnCallback;
-    UINT32*            pcRefParent;
+    LPFNPSPCALLBACKW pfnCallback;
+    UINT*            pcRefParent;
     LPCWSTR            pszHeaderTitle;
     LPCWSTR            pszHeaderSubTitle;
-} PROPSHEETPAGE32W, *LPPROPSHEETPAGE32W;
+} PROPSHEETPAGEW, *LPPROPSHEETPAGEW;
 
-typedef const PROPSHEETPAGE32W *LPCPROPSHEETPAGE32W;
+typedef const PROPSHEETPAGEW *LPCPROPSHEETPAGEW;
 
 
-typedef struct _PROPSHEETHEADER32A
+typedef struct _PROPSHEETHEADERA
 {
     DWORD                    dwSize;
     DWORD                    dwFlags;
-    HWND32                   hwndParent;
-    HINSTANCE32              hInstance;
+    HWND                   hwndParent;
+    HINSTANCE              hInstance;
     union
     {
-      HICON32                  hIcon;
+      HICON                  hIcon;
       LPCSTR                   pszIcon;
     }DUMMYUNIONNAME1;
     LPCSTR                   pszCaption;
-    UINT32                   nPages;
+    UINT                   nPages;
     union
     {
-        UINT32                 nStartPage;
+        UINT                 nStartPage;
         LPCSTR                 pStartPage;
     }DUMMYUNIONNAME2;
     union
     {
-        LPCPROPSHEETPAGE32A    ppsp;
+        LPCPROPSHEETPAGEA    ppsp;
         HPROPSHEETPAGE*        phpage;
     }DUMMYUNIONNAME3;
-    PFNPROPSHEETCALLBACK32   pfnCallback;
+    PFNPROPSHEETCALLBACK   pfnCallback;
     union
     {
-        HBITMAP32              hbmWatermark;
+        HBITMAP              hbmWatermark;
         LPCSTR                 pszbmWatermark;
     }DUMMYUNIONNAME4;
-    HPALETTE32               hplWatermark;
+    HPALETTE               hplWatermark;
     union
     {
-        HBITMAP32              hbmHeader;
+        HBITMAP              hbmHeader;
         LPCSTR                 pszbmHeader;
     }DUMMYUNIONNAME5;
-} PROPSHEETHEADER32A, *LPPROPSHEETHEADER32A;
+} PROPSHEETHEADERA, *LPPROPSHEETHEADERA;
 
-typedef const PROPSHEETHEADER32A *LPCPROPSHEETHEADER32A;
+typedef const PROPSHEETHEADERA *LPCPROPSHEETHEADERA;
 
-typedef struct _PROPSHEETHEADER32W
+typedef struct _PROPSHEETHEADERW
 {
     DWORD                    dwSize;
     DWORD                    dwFlags;
-    HWND32                   hwndParent;
-    HINSTANCE32              hInstance;
+    HWND                   hwndParent;
+    HINSTANCE              hInstance;
     union
     {
-      HICON32                  hIcon;
+      HICON                  hIcon;
       LPCSTR                   pszIcon;
     }DUMMYUNIONNAME1;
     LPCWSTR                  pszCaption;
-    UINT32                   nPages;
+    UINT                   nPages;
     union
     {
-        UINT32                 nStartPage;
+        UINT                 nStartPage;
         LPCWSTR                pStartPage;
     }DUMMYUNIONNAME2;
     union
     {
-        LPCPROPSHEETPAGE32W    ppsp;
+        LPCPROPSHEETPAGEW    ppsp;
         HPROPSHEETPAGE*        phpage;
     }DUMMYUNIONNAME3;
-    PFNPROPSHEETCALLBACK32   pfnCallback;
+    PFNPROPSHEETCALLBACK   pfnCallback;
     union
     {
-        HBITMAP32              hbmWatermark;
+        HBITMAP              hbmWatermark;
         LPCWSTR                pszbmWatermark;
     }DUMMYUNIONNAME4;
-    HPALETTE32               hplWatermark;
+    HPALETTE               hplWatermark;
     union
     {
-        HBITMAP32              hbmHeader;
+        HBITMAP              hbmHeader;
         LPCWSTR                pszbmHeader;
     }DUMMYUNIONNAME5;
-} PROPSHEETHEADER32W, *LPPROPSHEETHEADER32W;
+} PROPSHEETHEADERW, *LPPROPSHEETHEADERW;
 
-typedef const PROPSHEETHEADER32W *LPCPROPSHEETHEADER32W;
+typedef const PROPSHEETHEADERW *LPCPROPSHEETHEADERW;
 
 
 /*
  * Property sheet support (methods)
  */
-INT32 WINAPI PropertySheet32A(LPCPROPSHEETHEADER32A);
-INT32 WINAPI PropertySheet32W(LPCPROPSHEETHEADER32W);
+INT WINAPI PropertySheetA(LPCPROPSHEETHEADERA);
+INT WINAPI PropertySheetW(LPCPROPSHEETHEADERW);
 #define PropertySheet WINELIB_NAME_AW(PropertySheet)
-HPROPSHEETPAGE WINAPI CreatePropertySheetPage32A(LPCPROPSHEETPAGE32A);
-HPROPSHEETPAGE WINAPI CreatePropertySheetPage32W(LPCPROPSHEETPAGE32W);
+HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(LPCPROPSHEETPAGEA);
+HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW);
 #define CreatePropertySheetPage WINELIB_NAME_AW(CreatePropertySheetPage)
-BOOL32 WINAPI DestroyPropertySheetPage32(HPROPSHEETPAGE hPropPage);
-#define DestroyPropertySheetPage WINELIB_NAME(DestroyPropertySheetPage)
+BOOL WINAPI DestroyPropertySheetPage(HPROPSHEETPAGE hPropPage);
 
 /*
  * Property sheet support (UNICODE-WineLib)
@@ -205,7 +204,6 @@
 DECL_WINELIB_TYPE_AW(LPPROPSHEETHEADER) 
 DECL_WINELIB_TYPE_AW(LPCPROPSHEETHEADER) 
 DECL_WINELIB_TYPE_AW(LPFNPSPCALLBACK) 
-DECL_WINELIB_TYPE(PFNPROPSHEETCALLBACK) 
 
 
 /*
@@ -273,14 +271,14 @@
 #define PSM_QUERYSIBLINGS       (WM_USER + 108)
 #define PSM_UNCHANGED           (WM_USER + 109)
 #define PSM_APPLY               (WM_USER + 110)
-#define PSM_SETTITLE32A         (WM_USER + 111)
-#define PSM_SETTITLE32W         (WM_USER + 120)
+#define PSM_SETTITLEA         (WM_USER + 111)
+#define PSM_SETTITLEW         (WM_USER + 120)
 #define PSM_SETTITLE WINELIB_NAME_AW(PSM_SETTITLE)
 #define PSM_SETWIZBUTTONS       (WM_USER + 112)
 #define PSM_PRESSBUTTON         (WM_USER + 113)
 #define PSM_SETCURSELID         (WM_USER + 114)
-#define PSM_SETFINISHTEXT32A    (WM_USER + 115)
-#define PSM_SETFINISHTEXT32W    (WM_USER + 121)
+#define PSM_SETFINISHTEXTA    (WM_USER + 115)
+#define PSM_SETFINISHTEXTW    (WM_USER + 121)
 #define PSM_SETFINISHTEXT WINELIB_NAME_AW(PSM_SETFINISHTEXT)
 #define PSM_GETTABCONTROL       (WM_USER + 116)
 #define PSM_ISDIALOGMESSAGE     (WM_USER + 117)
@@ -326,7 +324,7 @@
  */
 
 #define PropSheet_SetCurSel(hDlg, hpage, index) \
-	SeandMessage32A(hDlg, PSM_SETCURSEL, (WPARAM32)index, (LPARAM)hpage)
+	SeandMessage32A(hDlg, PSM_SETCURSEL, (WPARAM)index, (LPARAM)hpage)
 	 
 #define PropSheet_RemovePage(hDlg, index, hpage) \
 	SNDMSG(hDlg, PSM_REMOVEPAGE, index, (LPARAM)hpage)
diff --git a/include/psapi.h b/include/psapi.h
index fd4ff94..389bad8 100644
--- a/include/psapi.h
+++ b/include/psapi.h
@@ -5,13 +5,13 @@
 #ifndef __WINE_PSAPI_H
 #define __WINE_PSAPI_H
 
-typedef struct _MODULEINFO32 {
+typedef struct _MODULEINFO {
   LPVOID lpBaseOfDll;
   DWORD SizeOfImage;
   LPVOID EntryPoint;
-} MODULEINFO32, *LPMODULEINFO32;
+} MODULEINFO, *LPMODULEINFO;
 
-typedef struct _PROCESS_MEMORY_COUNTERS32 {  
+typedef struct _PROCESS_MEMORY_COUNTERS {  
   DWORD cb;    
   DWORD PageFaultCount;
   DWORD PeakWorkingSetSize;
@@ -22,12 +22,12 @@
   DWORD QuotaNonPagedPoolUsage;
   DWORD PagefileUsage;    
   DWORD PeakPagefileUsage;
-} PROCESS_MEMORY_COUNTERS32;
-typedef PROCESS_MEMORY_COUNTERS32 *PPROCESS_MEMORY_COUNTERS32;
+} PROCESS_MEMORY_COUNTERS;
+typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;
 
-typedef struct _PSAPI_WS_WATCH_INFORMATION32 {
+typedef struct _PSAPI_WS_WATCH_INFORMATION {
   LPVOID FaultingPc;
   LPVOID FaultingVa;
-} PSAPI_WS_WATCH_INFORMATION32, *PPSAPI_WS_WATCH_INFORMATION32;
+} PSAPI_WS_WATCH_INFORMATION, *PPSAPI_WS_WATCH_INFORMATION;
 
 #endif  /* __WINE_PSAPI_H */
diff --git a/include/psdrv.h b/include/psdrv.h
index 110e1db..3aa5946 100644
--- a/include/psdrv.h
+++ b/include/psdrv.h
@@ -37,7 +37,7 @@
     char		*EncodingScheme;
     int			Weight;			/* FW_NORMAL etc. */
     float		ItalicAngle;
-    BOOL32		IsFixedPitch;
+    BOOL		IsFixedPitch;
     float		UnderlinePosition;
     float		UnderlineThickness;
     AFMBBOX		FontBBox;
@@ -127,7 +127,7 @@
 typedef struct {
     char		*NickName;
     int			LanguageLevel;
-    BOOL32		ColorDevice;
+    BOOL		ColorDevice;
     int			DefaultResolution;
     signed int		LandscapeOrientation;
     char		*JCLBegin;
@@ -147,7 +147,7 @@
     }				dmDocPrivate;
     struct _tagdrvprivate {
       char	ppdFileName[100]; /* Hack */
-      UINT32	numInstalledOptions; /* Options at end of struct */
+      UINT	numInstalledOptions; /* Options at end of struct */
     }				dmDrvPrivate;
 
 /* Now comes:
@@ -189,32 +189,32 @@
 
 typedef struct {
     AFM			*afm;
-    TEXTMETRIC32A	tm;
-    INT32		size;
+    TEXTMETRICA	tm;
+    INT		size;
     float		scale;
-    INT32		escapement;
+    INT		escapement;
     PSCOLOR		color;
-    BOOL32		set;		/* Have we done a setfont yet */
+    BOOL		set;		/* Have we done a setfont yet */
 } PSFONT;
 
 typedef struct {
     PSCOLOR		color;
-    BOOL32		set;
+    BOOL		set;
 } PSBRUSH;
 
 typedef struct {
-    INT32		width;
+    INT		width;
     char		*dash;
     PSCOLOR		color;
-    BOOL32		set;
+    BOOL		set;
 } PSPEN;
 
 typedef struct {
     HANDLE16		hJob;
     LPSTR		output;		/* Output file/port */
-    BOOL32              banding;        /* Have we received a NEXTBAND */
-    BOOL32		NeedPageHeader; /* Page header not sent yet */
-    INT32		PageNo;
+    BOOL              banding;        /* Have we received a NEXTBAND */
+    BOOL		NeedPageHeader; /* Page header not sent yet */
+    INT		PageNo;
 } JOB;
 
 typedef struct {
@@ -228,109 +228,109 @@
     PRINTERINFO		*pi;
 } PSDRV_PDEVICE;
 
-extern HANDLE32 PSDRV_Heap;
+extern HANDLE PSDRV_Heap;
 extern char *PSDRV_ANSIVector[256];
 
 extern void PSDRV_MergeDevmodes(PSDRV_DEVMODE16 *dm1, PSDRV_DEVMODE16 *dm2,
 			 PRINTERINFO *pi);
-extern BOOL32 PSDRV_GetFontMetrics(void);
+extern BOOL PSDRV_GetFontMetrics(void);
 extern PPD *PSDRV_ParsePPD(char *fname);
 extern PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name);
 extern AFM *PSDRV_FindAFMinList(FONTFAMILY *head, char *name);
 extern void PSDRV_AddAFMtoList(FONTFAMILY **head, AFM *afm);
 extern void PSDRV_FreeAFMList( FONTFAMILY *head );
 
-extern BOOL32 PSDRV_Init(void);
+extern BOOL PSDRV_Init(void);
 extern HFONT16 PSDRV_FONT_SelectObject( DC *dc, HFONT16 hfont, FONTOBJ *font);
-extern HPEN32 PSDRV_PEN_SelectObject( DC * dc, HPEN32 hpen, PENOBJ * pen );
-extern HBRUSH32 PSDRV_BRUSH_SelectObject( DC * dc, HBRUSH32 hbrush,
+extern HPEN PSDRV_PEN_SelectObject( DC * dc, HPEN hpen, PENOBJ * pen );
+extern HBRUSH PSDRV_BRUSH_SelectObject( DC * dc, HBRUSH hbrush,
 					  BRUSHOBJ * brush );
 
-extern BOOL32 PSDRV_Brush(DC *dc, BOOL32 EO);
-extern BOOL32 PSDRV_SetFont( DC *dc );
-extern BOOL32 PSDRV_SetPen( DC *dc );
+extern BOOL PSDRV_Brush(DC *dc, BOOL EO);
+extern BOOL PSDRV_SetFont( DC *dc );
+extern BOOL PSDRV_SetPen( DC *dc );
 
-extern BOOL32 PSDRV_CmpColor(PSCOLOR *col1, PSCOLOR *col2);
-extern BOOL32 PSDRV_CopyColor(PSCOLOR *col1, PSCOLOR *col2);
+extern BOOL PSDRV_CmpColor(PSCOLOR *col1, PSCOLOR *col2);
+extern BOOL PSDRV_CopyColor(PSCOLOR *col1, PSCOLOR *col2);
 extern void PSDRV_CreateColor( PSDRV_PDEVICE *physDev, PSCOLOR *pscolor,
 		     COLORREF wincolor );
 
 
-extern INT32 PSDRV_WriteHeader( DC *dc, char *title, int len );
-extern INT32 PSDRV_WriteFooter( DC *dc );
-extern INT32 PSDRV_WriteNewPage( DC *dc );
-extern INT32 PSDRV_WriteEndPage( DC *dc );
-extern BOOL32 PSDRV_WriteMoveTo(DC *dc, INT32 x, INT32 y);
-extern BOOL32 PSDRV_WriteLineTo(DC *dc, INT32 x, INT32 y);
-extern BOOL32 PSDRV_WriteStroke(DC *dc);
-extern BOOL32 PSDRV_WriteRectangle(DC *dc, INT32 x, INT32 y, INT32 width, 
-			INT32 height);
-extern BOOL32 PSDRV_WriteSetFont(DC *dc, BOOL32 UseANSI);
-extern BOOL32 PSDRV_WriteShow(DC *dc, char *str, INT32 count);
-extern BOOL32 PSDRV_WriteReencodeFont(DC *dc);
-extern BOOL32 PSDRV_WriteSetPen(DC *dc);
-extern BOOL32 PSDRV_WriteArc(DC *dc, INT32 x, INT32 y, INT32 w, INT32 h,
+extern INT PSDRV_WriteHeader( DC *dc, char *title, int len );
+extern INT PSDRV_WriteFooter( DC *dc );
+extern INT PSDRV_WriteNewPage( DC *dc );
+extern INT PSDRV_WriteEndPage( DC *dc );
+extern BOOL PSDRV_WriteMoveTo(DC *dc, INT x, INT y);
+extern BOOL PSDRV_WriteLineTo(DC *dc, INT x, INT y);
+extern BOOL PSDRV_WriteStroke(DC *dc);
+extern BOOL PSDRV_WriteRectangle(DC *dc, INT x, INT y, INT width, 
+			INT height);
+extern BOOL PSDRV_WriteSetFont(DC *dc, BOOL UseANSI);
+extern BOOL PSDRV_WriteShow(DC *dc, char *str, INT count);
+extern BOOL PSDRV_WriteReencodeFont(DC *dc);
+extern BOOL PSDRV_WriteSetPen(DC *dc);
+extern BOOL PSDRV_WriteArc(DC *dc, INT x, INT y, INT w, INT h,
 			     double ang1, double ang2);
-extern BOOL32 PSDRV_WriteSetColor(DC *dc, PSCOLOR *color);
-extern BOOL32 PSDRV_WriteSetBrush(DC *dc);
-extern BOOL32 PSDRV_WriteFill(DC *dc);
-extern BOOL32 PSDRV_WriteEOFill(DC *dc);
-extern BOOL32 PSDRV_WriteGSave(DC *dc);
-extern BOOL32 PSDRV_WriteGRestore(DC *dc);
-extern BOOL32 PSDRV_WriteClosePath(DC *dc);
-extern BOOL32 PSDRV_WriteClip(DC *dc);
-extern BOOL32 PSDRV_WriteEOClip(DC *dc);
-extern BOOL32 PSDRV_WriteHatch(DC *dc);
-extern BOOL32 PSDRV_WriteRotate(DC *dc, float ang);
+extern BOOL PSDRV_WriteSetColor(DC *dc, PSCOLOR *color);
+extern BOOL PSDRV_WriteSetBrush(DC *dc);
+extern BOOL PSDRV_WriteFill(DC *dc);
+extern BOOL PSDRV_WriteEOFill(DC *dc);
+extern BOOL PSDRV_WriteGSave(DC *dc);
+extern BOOL PSDRV_WriteGRestore(DC *dc);
+extern BOOL PSDRV_WriteClosePath(DC *dc);
+extern BOOL PSDRV_WriteClip(DC *dc);
+extern BOOL PSDRV_WriteEOClip(DC *dc);
+extern BOOL PSDRV_WriteHatch(DC *dc);
+extern BOOL PSDRV_WriteRotate(DC *dc, float ang);
 
 
 
 
 
-extern BOOL32 PSDRV_Arc( DC *dc, INT32 left, INT32 top, INT32 right,
-			 INT32 bottom, INT32 xstart, INT32 ystart,
-			 INT32 xend, INT32 yend );
-extern BOOL32 PSDRV_Chord( DC *dc, INT32 left, INT32 top, INT32 right,
-			   INT32 bottom, INT32 xstart, INT32 ystart,
-			   INT32 xend, INT32 yend );
-extern BOOL32 PSDRV_Ellipse( DC *dc, INT32 left, INT32 top, INT32 right,
-			     INT32 bottom );
-extern BOOL32 PSDRV_EnumDeviceFonts( DC* dc, LPLOGFONT16 plf, 
+extern BOOL PSDRV_Arc( DC *dc, INT left, INT top, INT right,
+			 INT bottom, INT xstart, INT ystart,
+			 INT xend, INT yend );
+extern BOOL PSDRV_Chord( DC *dc, INT left, INT top, INT right,
+			   INT bottom, INT xstart, INT ystart,
+			   INT xend, INT yend );
+extern BOOL PSDRV_Ellipse( DC *dc, INT left, INT top, INT right,
+			     INT bottom );
+extern BOOL PSDRV_EnumDeviceFonts( DC* dc, LPLOGFONT16 plf, 
 				     DEVICEFONTENUMPROC proc, LPARAM lp );
-extern INT32 PSDRV_Escape( DC *dc, INT32 nEscape, INT32 cbInput, 
+extern INT PSDRV_Escape( DC *dc, INT nEscape, INT cbInput, 
 			   SEGPTR lpInData, SEGPTR lpOutData );
-extern BOOL32 PSDRV_ExtTextOut( DC *dc, INT32 x, INT32 y, UINT32 flags,
-				const RECT32 *lprect, LPCSTR str, UINT32 count,
-				const INT32 *lpDx );
-extern BOOL32 PSDRV_GetCharWidth( DC *dc, UINT32 firstChar, UINT32 lastChar,
-				  LPINT32 buffer );
-extern BOOL32 PSDRV_GetTextExtentPoint( DC *dc, LPCSTR str, INT32 count,
-					LPSIZE32 size );
-extern BOOL32 PSDRV_GetTextMetrics( DC *dc, TEXTMETRIC32A *metrics );
-extern BOOL32 PSDRV_LineTo( DC *dc, INT32 x, INT32 y );
-extern BOOL32 PSDRV_MoveToEx( DC *dc, INT32 x, INT32 y, LPPOINT32 pt );
-extern BOOL32 PSDRV_Pie( DC *dc, INT32 left, INT32 top, INT32 right,
-			 INT32 bottom, INT32 xstart, INT32 ystart,
-			 INT32 xend, INT32 yend );
-extern BOOL32 PSDRV_Polygon( DC *dc, const POINT32* pt, INT32 count );
-extern BOOL32 PSDRV_Polyline( DC *dc, const POINT32* pt, INT32 count );
-extern BOOL32 PSDRV_PolyPolygon( DC *dc, const POINT32* pts, const INT32* counts,
-				 UINT32 polygons );
-extern BOOL32 PSDRV_PolyPolyline( DC *dc, const POINT32* pts, const DWORD* counts,
+extern BOOL PSDRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
+				const RECT *lprect, LPCSTR str, UINT count,
+				const INT *lpDx );
+extern BOOL PSDRV_GetCharWidth( DC *dc, UINT firstChar, UINT lastChar,
+				  LPINT buffer );
+extern BOOL PSDRV_GetTextExtentPoint( DC *dc, LPCSTR str, INT count,
+					LPSIZE size );
+extern BOOL PSDRV_GetTextMetrics( DC *dc, TEXTMETRICA *metrics );
+extern BOOL PSDRV_LineTo( DC *dc, INT x, INT y );
+extern BOOL PSDRV_MoveToEx( DC *dc, INT x, INT y, LPPOINT pt );
+extern BOOL PSDRV_Pie( DC *dc, INT left, INT top, INT right,
+			 INT bottom, INT xstart, INT ystart,
+			 INT xend, INT yend );
+extern BOOL PSDRV_Polygon( DC *dc, const POINT* pt, INT count );
+extern BOOL PSDRV_Polyline( DC *dc, const POINT* pt, INT count );
+extern BOOL PSDRV_PolyPolygon( DC *dc, const POINT* pts, const INT* counts,
+				 UINT polygons );
+extern BOOL PSDRV_PolyPolyline( DC *dc, const POINT* pts, const DWORD* counts,
 				  DWORD polylines );
-extern BOOL32 PSDRV_Rectangle( DC *dc, INT32 left, INT32 top, INT32 right,
-			      INT32 bottom );
-extern BOOL32 PSDRV_RoundRect(DC *dc, INT32 left, INT32 top, INT32 right,
-			      INT32 bottom, INT32 ell_width, INT32 ell_height);
-extern HGDIOBJ32 PSDRV_SelectObject( DC *dc, HGDIOBJ32 handle );
+extern BOOL PSDRV_Rectangle( DC *dc, INT left, INT top, INT right,
+			      INT bottom );
+extern BOOL PSDRV_RoundRect(DC *dc, INT left, INT top, INT right,
+			      INT bottom, INT ell_width, INT ell_height);
+extern HGDIOBJ PSDRV_SelectObject( DC *dc, HGDIOBJ handle );
 extern COLORREF PSDRV_SetBkColor( DC *dc, COLORREF color );
-extern COLORREF PSDRV_SetPixel( DC *dc, INT32 x, INT32 y, COLORREF color );
+extern COLORREF PSDRV_SetPixel( DC *dc, INT x, INT y, COLORREF color );
 extern COLORREF PSDRV_SetTextColor( DC *dc, COLORREF color );
-extern INT32 PSDRV_StretchDIBits( DC *dc, INT32 xDst, INT32 yDst,
-				  INT32 widthDst, INT32 heightDst, INT32 xSrc,
-				  INT32 ySrc, INT32 widthSrc, INT32 heightSrc,
+extern INT PSDRV_StretchDIBits( DC *dc, INT xDst, INT yDst,
+				  INT widthDst, INT heightDst, INT xSrc,
+				  INT ySrc, INT widthSrc, INT heightSrc,
 				  const void *bits, const BITMAPINFO *info,
-				  UINT32 wUsage, DWORD dwRop );
+				  UINT wUsage, DWORD dwRop );
 
 #endif
 
diff --git a/include/queue.h b/include/queue.h
index 13ebb49..f8f375e 100644
--- a/include/queue.h
+++ b/include/queue.h
@@ -15,7 +15,7 @@
   /* Message as stored in the queue (contains the extraInfo field) */
 typedef struct tagQMSG
 {
-    MSG32   msg;
+    MSG   msg;
     DWORD   extraInfo;  /* Only in 3.1 */
     
     struct tagQMSG *nextMsg;
@@ -32,9 +32,9 @@
     HQUEUE16       hSrcQueue;       /* sending Queue, (NULL if it didn't wait) */
     HQUEUE16       hDstQueue;       /* destination Queue */
 
-    HWND32         hWnd;            /* destinantion window */
-    UINT32         msg;             /* message sent */
-    WPARAM32       wParam;          /* wParam of the sent message */
+    HWND         hWnd;            /* destinantion window */
+    UINT         msg;             /* message sent */
+    WPARAM       wParam;          /* wParam of the sent message */
     LPARAM         lParam;          /* lParam of the sent message */
 
     LRESULT        lResult;         /* result of SendMessage */
@@ -68,9 +68,9 @@
  */
 typedef struct tagPERQUEUEDATA      
 {
-  HWND32    hWndFocus;              /* Focus window */
-  HWND32    hWndActive;             /* Active window */
-  HWND32    hWndCapture;            /* Capture window */
+  HWND    hWndFocus;              /* Focus window */
+  HWND    hWndActive;             /* Active window */
+  HWND    hWndCapture;            /* Capture window */
   INT16     nCaptureHT;             /* Capture info (hit-test) */
   ULONG     ulRefCount;             /* Reference count */
   CRITICAL_SECTION cSection;        /* Critical section for thread safe access */
@@ -82,7 +82,7 @@
   HQUEUE16  next;                   /* Next queue */
   HQUEUE16  self;                   /* Handle to self (was: reserved) */
   THDB*     thdb;                   /* Thread owning queue */
-  HANDLE32  hEvent;                 /* Event handle */
+  HANDLE  hEvent;                 /* Event handle */
   CRITICAL_SECTION cSection;        /* Queue access critical section */
 
   DWORD     magic;                  /* magic number should be QUEUE_MAGIC */
@@ -132,12 +132,12 @@
 PERQUEUEDATA* PERQDATA_CreateInstance( void );
 ULONG PERQDATA_Addref( PERQUEUEDATA* pQData );
 ULONG PERQDATA_Release( PERQUEUEDATA* pQData );
-HWND32 PERQDATA_GetFocusWnd( PERQUEUEDATA *pQData );
-HWND32 PERQDATA_SetFocusWnd( PERQUEUEDATA *pQData, HWND32 hWndFocus );
-HWND32 PERQDATA_GetActiveWnd( PERQUEUEDATA *pQData );
-HWND32 PERQDATA_SetActiveWnd( PERQUEUEDATA *pQData, HWND32 hWndActive );
-HWND32 PERQDATA_GetCaptureWnd( PERQUEUEDATA *pQData );
-HWND32 PERQDATA_SetCaptureWnd( PERQUEUEDATA *pQData, HWND32 hWndCapture );
+HWND PERQDATA_GetFocusWnd( PERQUEUEDATA *pQData );
+HWND PERQDATA_SetFocusWnd( PERQUEUEDATA *pQData, HWND hWndFocus );
+HWND PERQDATA_GetActiveWnd( PERQUEUEDATA *pQData );
+HWND PERQDATA_SetActiveWnd( PERQUEUEDATA *pQData, HWND hWndActive );
+HWND PERQDATA_GetCaptureWnd( PERQUEUEDATA *pQData );
+HWND PERQDATA_SetCaptureWnd( PERQUEUEDATA *pQData, HWND hWndCapture );
 INT16  PERQDATA_GetCaptureInfo( PERQUEUEDATA *pQData );
 INT16 PERQDATA_SetCaptureInfo( PERQUEUEDATA *pQData, INT16 nCaptureHT );
     
@@ -146,7 +146,7 @@
 extern void QUEUE_Unlock( MESSAGEQUEUE *queue );
 extern void QUEUE_DumpQueue( HQUEUE16 hQueue );
 extern void QUEUE_WalkQueues(void);
-extern BOOL32 QUEUE_IsExitingQueue( HQUEUE16 hQueue );
+extern BOOL QUEUE_IsExitingQueue( HQUEUE16 hQueue );
 extern void QUEUE_SetExitingQueue( HQUEUE16 hQueue );
 extern MESSAGEQUEUE *QUEUE_GetSysQueue(void);
 extern void QUEUE_SetWakeBit( MESSAGEQUEUE *queue, WORD bit );
@@ -157,18 +157,18 @@
 extern void QUEUE_DecPaintCount( HQUEUE16 hQueue );
 extern void QUEUE_IncTimerCount( HQUEUE16 hQueue );
 extern void QUEUE_DecTimerCount( HQUEUE16 hQueue );
-extern BOOL32 QUEUE_CreateSysMsgQueue( int size );
-extern BOOL32 QUEUE_DeleteMsgQueue( HQUEUE16 hQueue );
+extern BOOL QUEUE_CreateSysMsgQueue( int size );
+extern BOOL QUEUE_DeleteMsgQueue( HQUEUE16 hQueue );
 extern HTASK16 QUEUE_GetQueueTask( HQUEUE16 hQueue );
-extern BOOL32 QUEUE_AddMsg( HQUEUE16 hQueue, MSG32 * msg, DWORD extraInfo );
-extern QMSG* QUEUE_FindMsg( MESSAGEQUEUE * msgQueue, HWND32 hwnd,
+extern BOOL QUEUE_AddMsg( HQUEUE16 hQueue, MSG * msg, DWORD extraInfo );
+extern QMSG* QUEUE_FindMsg( MESSAGEQUEUE * msgQueue, HWND hwnd,
                           int first, int last );
 extern void QUEUE_RemoveMsg( MESSAGEQUEUE * msgQueue, QMSG *qmsg );
 extern SMSG *QUEUE_RemoveSMSG( MESSAGEQUEUE *queue, int list, SMSG *smsg );
-extern BOOL32 QUEUE_AddSMSG( MESSAGEQUEUE *queue, int list, SMSG *smsg );
+extern BOOL QUEUE_AddSMSG( MESSAGEQUEUE *queue, int list, SMSG *smsg );
 extern void hardware_event( WORD message, WORD wParam, LONG lParam,
 			    int xPos, int yPos, DWORD time, DWORD extraInfo );
 
-extern HQUEUE16 WINAPI InitThreadInput( WORD unknown, WORD flags );
+extern HQUEUE16 WINAPI InitThreadInput16( WORD unknown, WORD flags );
 
 #endif  /* __WINE_QUEUE_H */
diff --git a/include/ras.h b/include/ras.h
index 497ead6..c988984 100644
--- a/include/ras.h
+++ b/include/ras.h
@@ -5,11 +5,11 @@
 
 #define RAS_MaxEntryName	256
 
-typedef struct tagRASCONN32A {
+typedef struct tagRASCONNA {
 	DWORD		dwSize;
-	HRASCONN32	hRasConn;
+	HRASCONN	hRasConn;
 	CHAR		szEntryName[RAS_MaxEntryName+1];
-} RASCONN32A,*LPRASCONN32A;
+} RASCONNA,*LPRASCONNA;
 
-DWORD WINAPI RasEnumConnections32A( LPRASCONN32A rc, LPDWORD x, LPDWORD y);
+DWORD WINAPI RasEnumConnectionsA( LPRASCONNA rc, LPDWORD x, LPDWORD y);
 #endif
diff --git a/include/rebar.h b/include/rebar.h
index d5033be..f704f31 100644
--- a/include/rebar.h
+++ b/include/rebar.h
@@ -9,33 +9,33 @@
 
 typedef struct tagREBAR_BAND
 {
-    UINT32    fStyle;
+    UINT    fStyle;
     COLORREF  clrFore;
     COLORREF  clrBack;
-    INT32     iImage;
-    HWND32    hwndChild;
-    UINT32    cxMinChild;
-    UINT32    cyMinChild;
-    UINT32    cx;
-    HBITMAP32 hbmBack;
-    UINT32    wID;
-    UINT32    cyChild;
-    UINT32    cyMaxChild;
-    UINT32    cyIntegral;
-    UINT32    cxIdeal;
+    INT     iImage;
+    HWND    hwndChild;
+    UINT    cxMinChild;
+    UINT    cyMinChild;
+    UINT    cx;
+    HBITMAP hbmBack;
+    UINT    wID;
+    UINT    cyChild;
+    UINT    cyMaxChild;
+    UINT    cyIntegral;
+    UINT    cxIdeal;
     LPARAM    lParam;
-    UINT32    cxHeader;
+    UINT    cxHeader;
 
-    UINT32    uMinHeight;
-    UINT32    fDraw;          /* drawing flags */
-    RECT32    rcBand;         /* calculated band rectangle */
-    RECT32    rcGripper;      /* calculated gripper rectangle */
-    RECT32    rcCapImage;     /* calculated caption image rectangle */
-    RECT32    rcCapText;      /* calculated caption text rectangle */
-    RECT32    rcChild;        /* calculated child rectangle */
+    UINT    uMinHeight;
+    UINT    fDraw;          /* drawing flags */
+    RECT    rcBand;         /* calculated band rectangle */
+    RECT    rcGripper;      /* calculated gripper rectangle */
+    RECT    rcCapImage;     /* calculated caption image rectangle */
+    RECT    rcCapText;      /* calculated caption text rectangle */
+    RECT    rcChild;        /* calculated child rectangle */
 
     LPWSTR    lpText;
-    HWND32    hwndPrevParent;
+    HWND    hwndPrevParent;
 } REBAR_BAND;
 
 typedef struct tagREBAR_INFO
@@ -43,19 +43,19 @@
     COLORREF   clrBk;       /* background color */
     COLORREF   clrText;     /* text color */
     HIMAGELIST himl;        /* handle to imagelist */
-    UINT32     uNumBands;   /* number of bands in the rebar */
-    HWND32     hwndToolTip; /* handle to the tool tip control */
-    HWND32     hwndNotify;  /* notification window (parent) */
-    HFONT32    hFont;       /* handle to the rebar's font */
-    SIZE32     imageSize;   /* image size (image list) */
+    UINT     uNumBands;   /* number of bands in the rebar */
+    HWND     hwndToolTip; /* handle to the tool tip control */
+    HWND     hwndNotify;  /* notification window (parent) */
+    HFONT    hFont;       /* handle to the rebar's font */
+    SIZE     imageSize;   /* image size (image list) */
 
-    SIZE32     calcSize;    /* calculated rebar size */
-    BOOL32     bAutoResize; /* auto resize deadlock flag */
-    BOOL32     bUnicode;    /* Unicode flag */
-    HCURSOR32  hcurArrow;   /* handle to the arrow cursor */
-    HCURSOR32  hcurHorz;    /* handle to the EW cursor */
-    HCURSOR32  hcurVert;    /* handle to the NS cursor */
-    HCURSOR32  hcurDrag;    /* handle to the drag cursor */
+    SIZE     calcSize;    /* calculated rebar size */
+    BOOL     bAutoResize; /* auto resize deadlock flag */
+    BOOL     bUnicode;    /* Unicode flag */
+    HCURSOR  hcurArrow;   /* handle to the arrow cursor */
+    HCURSOR  hcurHorz;    /* handle to the EW cursor */
+    HCURSOR  hcurVert;    /* handle to the NS cursor */
+    HCURSOR  hcurDrag;    /* handle to the drag cursor */
 
     REBAR_BAND *bands;      /* pointer to the array of rebar bands */
 
diff --git a/include/region.h b/include/region.h
index d296f48..42ddff8 100644
--- a/include/region.h
+++ b/include/region.h
@@ -59,11 +59,11 @@
 
 
 typedef struct {
-    INT32 size;
-    INT32 numRects;
-    INT32 type; /* NULL, SIMPLE or COMPLEX */
-    RECT32 *rects;
-    RECT32 extents;
+    INT size;
+    INT numRects;
+    INT type; /* NULL, SIMPLE or COMPLEX */
+    RECT *rects;
+    RECT extents;
 } WINEREGION;
 
   /* GDI logical region object */
@@ -88,7 +88,7 @@
 #define MEMCHECK(reg, rect, firstrect){\
         if ((reg)->numRects >= ((reg)->size - 1)){\
           (firstrect) = HeapReAlloc( SystemHeap, 0, \
-           (firstrect), (2 * (sizeof(RECT32)) * ((reg)->size)));\
+           (firstrect), (2 * (sizeof(RECT)) * ((reg)->size)));\
           if ((firstrect) == 0)\
             return;\
           (reg)->size *= 2;\
@@ -124,7 +124,7 @@
  */
 
 typedef struct _POINTBLOCK {
-    POINT32 pts[NUMPTSTOBUFFER];
+    POINT pts[NUMPTSTOBUFFER];
     struct _POINTBLOCK *next;
 } POINTBLOCK;
 
@@ -221,10 +221,10 @@
  *     register declarations.
  */
 typedef struct {
-    INT32 minor_axis;	/* minor axis        */
-    INT32 d;		/* decision variable */
-    INT32 m, m1;       	/* slope and slope+1 */
-    INT32 incr1, incr2;	/* error increments */
+    INT minor_axis;	/* minor axis        */
+    INT d;		/* decision variable */
+    INT m, m1;       	/* slope and slope+1 */
+    INT incr1, incr2;	/* error increments */
 } BRESINFO;
 
 
@@ -290,7 +290,7 @@
 #define COUNTERCLOCKWISE  -1 
 
 typedef struct _EdgeTableEntry {
-     INT32 ymax;           /* ycoord at which we exit this edge. */
+     INT ymax;           /* ycoord at which we exit this edge. */
      BRESINFO bres;        /* Bresenham info to run the edge     */
      struct _EdgeTableEntry *next;       /* next in the list     */
      struct _EdgeTableEntry *back;       /* for insertion sort   */
@@ -300,15 +300,15 @@
 
 
 typedef struct _ScanLineList{
-     INT32 scanline;            /* the scanline represented */
+     INT scanline;            /* the scanline represented */
      EdgeTableEntry *edgelist;  /* header node              */
      struct _ScanLineList *next;  /* next in the list       */
 } ScanLineList;
 
 
 typedef struct {
-     INT32 ymax;               /* ymax for the polygon     */
-     INT32 ymin;               /* ymin for the polygon     */
+     INT ymax;               /* ymax for the polygon     */
+     INT ymin;               /* ymin for the polygon     */
      ScanLineList scanlines;   /* header node              */
 } EdgeTable;
 
@@ -376,10 +376,10 @@
    } \
 }
 
-extern BOOL32 REGION_DeleteObject( HRGN32 hrgn, RGNOBJ * obj );
-extern BOOL32 REGION_UnionRectWithRgn( HRGN32 hrgn, const RECT32 *lpRect );
-extern BOOL32 REGION_FrameRgn( HRGN32 dest, HRGN32 src, INT32 x, INT32 y );
-extern BOOL32 REGION_LPTODP( HDC32 hdc, HRGN32 hDest, HRGN32 hSrc );
+extern BOOL REGION_DeleteObject( HRGN hrgn, RGNOBJ * obj );
+extern BOOL REGION_UnionRectWithRgn( HRGN hrgn, const RECT *lpRect );
+extern BOOL REGION_FrameRgn( HRGN dest, HRGN src, INT x, INT y );
+extern BOOL REGION_LPTODP( HDC hdc, HRGN hDest, HRGN hSrc );
 
 #endif  /* __WINE_REGION_H */
 
diff --git a/include/scroll.h b/include/scroll.h
index eace4bb..0912ee8 100644
--- a/include/scroll.h
+++ b/include/scroll.h
@@ -12,18 +12,18 @@
 
 typedef struct
 {
-    INT32   CurVal;   /* Current scroll-bar value */
-    INT32   MinVal;   /* Minimum scroll-bar value */
-    INT32   MaxVal;   /* Maximum scroll-bar value */
-    INT32   Page;     /* Page size of scroll bar (Win32) */
-    UINT32  flags;    /* EnableScrollBar flags */
+    INT   CurVal;   /* Current scroll-bar value */
+    INT   MinVal;   /* Minimum scroll-bar value */
+    INT   MaxVal;   /* Maximum scroll-bar value */
+    INT   Page;     /* Page size of scroll bar (Win32) */
+    UINT  flags;    /* EnableScrollBar flags */
 } SCROLLBAR_INFO;
 
-extern LRESULT WINAPI ScrollBarWndProc( HWND32 hwnd, UINT32 uMsg,
-                                        WPARAM32 wParam, LPARAM lParam );
-extern void SCROLL_DrawScrollBar( HWND32 hwnd, HDC32 hdc, INT32 nBar,
-                                  BOOL32 arrows, BOOL32 interior );
-extern void SCROLL_HandleScrollEvent( HWND32 hwnd, INT32 nBar,
-                                      UINT32 msg, POINT32 pt );
+extern LRESULT WINAPI ScrollBarWndProc( HWND hwnd, UINT uMsg,
+                                        WPARAM wParam, LPARAM lParam );
+extern void SCROLL_DrawScrollBar( HWND hwnd, HDC hdc, INT nBar,
+                                  BOOL arrows, BOOL interior );
+extern void SCROLL_HandleScrollEvent( HWND hwnd, INT nBar,
+                                      UINT msg, POINT pt );
 
 #endif  /* __WINE_SCROLL_H */
diff --git a/include/selectors.h b/include/selectors.h
index a203354..deb72ee 100644
--- a/include/selectors.h
+++ b/include/selectors.h
@@ -11,11 +11,11 @@
 #include "ldt.h"
 
 extern WORD SELECTOR_AllocBlock( const void *base, DWORD size,
-				 enum seg_type type, BOOL32 is32bit,
-				 BOOL32 readonly );
+				 enum seg_type type, BOOL is32bit,
+				 BOOL readonly );
 extern WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size,
-                                   enum seg_type type, BOOL32 is32bit,
-                                   BOOL32 readonly );
+                                   enum seg_type type, BOOL is32bit,
+                                   BOOL readonly );
 extern void SELECTOR_MoveBlock( WORD sel, const void *new_base );
 extern void SELECTOR_FreeBlock( WORD sel, WORD count );
 
diff --git a/include/shell.h b/include/shell.h
index b6f488f..4d80bbc 100644
--- a/include/shell.h
+++ b/include/shell.h
@@ -16,8 +16,8 @@
 extern void SHELL_Init(void);
 
 /* global functions used from shell32 */
-extern HINSTANCE32 SHELL_FindExecutable(LPCSTR,LPCSTR ,LPSTR);
-extern HGLOBAL16 WINAPI InternalExtractIcon(HINSTANCE16,LPCSTR,UINT16,WORD);
+extern HINSTANCE SHELL_FindExecutable(LPCSTR,LPCSTR ,LPSTR);
+extern HGLOBAL16 WINAPI InternalExtractIcon16(HINSTANCE16,LPCSTR,UINT16,WORD);
 
 /****************************************************************************
 * shell 32
@@ -75,28 +75,23 @@
 
 typedef struct { 	   /* structure for dropped files */ 
 	DWORD		lSize;
-	POINT32		ptMousePos;   
-	BOOL32		fInNonClientArea;
-        BOOL32          fWideChar;
+	POINT		ptMousePos;   
+	BOOL		fInNonClientArea;
+        BOOL          fWideChar;
 	/* memory block with filenames follows */     
-} DROPFILESTRUCT32, *LPDROPFILESTRUCT32; 
+} DROPFILESTRUCT, *LPDROPFILESTRUCT; 
 
-DECL_WINELIB_TYPE(DROPFILESTRUCT)
-DECL_WINELIB_TYPE(LPDROPFILESTRUCT)
 
 void        WINAPI DragAcceptFiles16(HWND16 hWnd, BOOL16 b);
-void        WINAPI DragAcceptFiles32(HWND32 hWnd, BOOL32 b);
-#define     DragAcceptFiles WINELIB_NAME(DragAcceptFiles)
+void        WINAPI DragAcceptFiles(HWND hWnd, BOOL b);
 UINT16      WINAPI DragQueryFile16(HDROP16 hDrop, WORD wFile, LPSTR lpszFile, WORD wLength);
-UINT32      WINAPI DragQueryFile32A(HDROP32 hDrop, UINT32 lFile, LPSTR lpszFile, UINT32 lLength);
-UINT32      WINAPI DragQueryFile32W(HDROP32 hDrop, UINT32 lFile, LPWSTR lpszFile, UINT32 lLength);
+UINT      WINAPI DragQueryFileA(HDROP hDrop, UINT lFile, LPSTR lpszFile, UINT lLength);
+UINT      WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszFile, UINT lLength);
 #define     DragQueryFile WINELIB_NAME_AW(DragQueryFile)
-void        WINAPI DragFinish32(HDROP32 h);
+void        WINAPI DragFinish(HDROP h);
 void        WINAPI DragFinish16(HDROP16 h);
-#define     DragFinish WINELIB_NAME(DragFinish)
-BOOL32      WINAPI DragQueryPoint32(HDROP32 hDrop, POINT32 *p);
+BOOL      WINAPI DragQueryPoint(HDROP hDrop, POINT *p);
 BOOL16      WINAPI DragQueryPoint16(HDROP16 hDrop, POINT16 *p);
-#define     DragQueryPoint WINELIB_NAME(DragQueryPoint)
 
 
 /****************************************************************************
@@ -104,11 +99,11 @@
 */
 typedef struct _NOTIFYICONDATA {
 	DWORD cbSize;
-	HWND32 hWnd;
-	UINT32 uID;
-	UINT32 uFlags;
-	UINT32 uCallbackMessage;
-	HICON32 hIcon;
+	HWND hWnd;
+	UINT uID;
+	UINT uFlags;
+	UINT uCallbackMessage;
+	HICON hIcon;
 	CHAR szTip[64];
 } NOTIFYICONDATA, *PNOTIFYICONDATA;
 
@@ -126,78 +121,78 @@
 } ITEMIDLIST,*LPITEMIDLIST,*LPCITEMIDLIST;
 #pragma pack(4)
 
-DWORD WINAPI SHGetPathFromIDList32A (LPCITEMIDLIST pidl,LPSTR pszPath);
-DWORD WINAPI SHGetPathFromIDList32W (LPCITEMIDLIST pidl,LPWSTR pszPath);
+DWORD WINAPI SHGetPathFromIDListA (LPCITEMIDLIST pidl,LPSTR pszPath);
+DWORD WINAPI SHGetPathFromIDListW (LPCITEMIDLIST pidl,LPWSTR pszPath);
 #define  SHGetPathFromIDList WINELIB_NAME_AW(SHGetPathFromIDList)
 
 /****************************************************************************
 * SHFILEINFO API 
 */
-typedef struct tagSHFILEINFO32A {
-	HICON32	hIcon;			/* icon */
+typedef struct tagSHFILEINFOA {
+	HICON	hIcon;			/* icon */
 	int	iIcon;			/* icon index */
 	DWORD	dwAttributes;		/* SFGAO_ flags */
 	CHAR	szDisplayName[MAX_PATH];/* display name (or path) */
 	CHAR	szTypeName[80];		/* type name */
-} SHFILEINFO32A;
+} SHFILEINFOA;
 
-typedef struct tagSHFILEINFO32W {
-	HICON32	hIcon;			/* icon */
+typedef struct tagSHFILEINFOW {
+	HICON	hIcon;			/* icon */
 	int	iIcon;			/* icon index */
 	DWORD	dwAttributes;		/* SFGAO_ flags */
 	WCHAR	szDisplayName[MAX_PATH];/* display name (or path) */
 	WCHAR	szTypeName[80];		/* type name */
-} SHFILEINFO32W;
+} SHFILEINFOW;
 
 DECL_WINELIB_TYPE_AW(SHFILEINFO)
 
-DWORD    WINAPI SHGetFileInfo32A(LPCSTR,DWORD,SHFILEINFO32A*,UINT32,UINT32);
-DWORD    WINAPI SHGetFileInfo32W(LPCWSTR,DWORD,SHFILEINFO32W*,UINT32,UINT32);
+DWORD    WINAPI SHGetFileInfoA(LPCSTR,DWORD,SHFILEINFOA*,UINT,UINT);
+DWORD    WINAPI SHGetFileInfoW(LPCWSTR,DWORD,SHFILEINFOW*,UINT,UINT);
 #define  SHGetFileInfo WINELIB_NAME_AW(SHGetFileInfo)
 
 /****************************************************************************
 * SHFILEOPSTRUCT API 
 */
 typedef struct _SHFILEOPSTRUCTA
-{ HWND32          hwnd;
-  UINT32          wFunc;
+{ HWND          hwnd;
+  UINT          wFunc;
   LPCSTR          pFrom;
   LPCSTR          pTo;
   FILEOP_FLAGS    fFlags;
-  BOOL32          fAnyOperationsAborted;
+  BOOL          fAnyOperationsAborted;
   LPVOID          hNameMappings;
   LPCSTR          lpszProgressTitle;
-} SHFILEOPSTRUCT32A, *LPSHFILEOPSTRUCT32A;
+} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;
 
 typedef struct _SHFILEOPSTRUCTW
-{ HWND32          hwnd;
-  UINT32          wFunc;
+{ HWND          hwnd;
+  UINT          wFunc;
   LPCWSTR         pFrom;
   LPCWSTR         pTo;
   FILEOP_FLAGS    fFlags;
-  BOOL32          fAnyOperationsAborted;
+  BOOL          fAnyOperationsAborted;
   LPVOID          hNameMappings;
   LPCWSTR         lpszProgressTitle;
-} SHFILEOPSTRUCT32W, *LPSHFILEOPSTRUCT32W;
+} SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW;
 
 #define  SHFILEOPSTRUCT WINELIB_NAME_AW(SHFILEOPSTRUCT)
 #define  LPSHFILEOPSTRUCT WINELIB_NAME_AW(LPSHFILEOPSTRUCT)
 
-DWORD WINAPI SHFileOperation32A (LPSHFILEOPSTRUCT32A lpFileOp);  
-DWORD WINAPI SHFileOperation32W (LPSHFILEOPSTRUCT32W lpFileOp);
+DWORD WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp);  
+DWORD WINAPI SHFileOperationW (LPSHFILEOPSTRUCTW lpFileOp);
 #define  SHFileOperation WINELIB_NAME_AW(SHFileOperation)
 
-DWORD WINAPI SHFileOperation32(DWORD x);
+DWORD WINAPI SHFileOperationAW(DWORD x);
 
 /****************************************************************************
 * APPBARDATA 
 */
 typedef struct _AppBarData {
 	DWORD	cbSize;
-	HWND32	hWnd;
-	UINT32	uCallbackMessage;
-	UINT32	uEdge;
-	RECT32	rc;
+	HWND	hWnd;
+	UINT	uCallbackMessage;
+	UINT	uEdge;
+	RECT	rc;
 	LPARAM	lParam;
 } APPBARDATA, *PAPPBARDATA;
 
@@ -225,7 +220,7 @@
   DWORD unknown;
 } IDSTRUCT;
 
-DWORD WINAPI SHChangeNotifyRegister(HWND32 hwnd,LONG events1,LONG events2,DWORD msg,int count,IDSTRUCT *idlist);
+DWORD WINAPI SHChangeNotifyRegister(HWND hwnd,LONG events1,LONG events2,DWORD msg,int count,IDSTRUCT *idlist);
 DWORD WINAPI SHChangeNotifyDeregister(LONG x1);
 
 /****************************************************************************
@@ -234,92 +229,92 @@
 #define SHARD_PIDL      0x00000001L
 #define SHARD_PATH      0x00000002L
 
-DWORD WINAPI SHAddToRecentDocs(UINT32 uFlags, LPCVOID pv);
+DWORD WINAPI SHAddToRecentDocs(UINT uFlags, LPCVOID pv);
 
 /****************************************************************************
 * SHGetSpecialFolderLocation API
 */
-HRESULT WINAPI SHGetSpecialFolderLocation(HWND32, INT32, LPITEMIDLIST *);
+HRESULT WINAPI SHGetSpecialFolderLocation(HWND, INT, LPITEMIDLIST *);
 /****************************************************************************
 *  string and path functions
 */
-BOOL32 WINAPI PathIsRoot32A(LPCSTR x);
-BOOL32 WINAPI PathIsRoot32W(LPCWSTR x);
+BOOL WINAPI PathIsRootA(LPCSTR x);
+BOOL WINAPI PathIsRootW(LPCWSTR x);
 #define  PathIsRoot WINELIB_NAME_AW(PathIsRoot)
-BOOL32 WINAPI PathIsRoot32AW(LPCVOID x);
+BOOL WINAPI PathIsRootAW(LPCVOID x);
 
-LPSTR  WINAPI PathAddBackslash32A(LPSTR path);	
-LPWSTR WINAPI PathAddBackslash32W(LPWSTR path);	
+LPSTR  WINAPI PathAddBackslashA(LPSTR path);	
+LPWSTR WINAPI PathAddBackslashW(LPWSTR path);	
 #define  PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
-LPVOID  WINAPI PathAddBackslash32AW(LPVOID path);	
+LPVOID  WINAPI PathAddBackslashAW(LPVOID path);	
 
-BOOL32  WINAPI PathQualify32A(LPCSTR path);	
-BOOL32 WINAPI PathQualify32W(LPCWSTR path);	
+BOOL  WINAPI PathQualifyA(LPCSTR path);	
+BOOL WINAPI PathQualifyW(LPCWSTR path);	
 #define  PathQualify WINELIB_NAME_AW(PathQualify)
-BOOL32  WINAPI PathQualify32AW(LPCVOID path);	
+BOOL  WINAPI PathQualifyAW(LPCVOID path);	
 
-LPSTR  WINAPI PathQuoteSpaces32A(LPCSTR path);	
-LPWSTR WINAPI PathQuoteSpaces32W(LPCWSTR path);	
+LPSTR  WINAPI PathQuoteSpacesA(LPCSTR path);	
+LPWSTR WINAPI PathQuoteSpacesW(LPCWSTR path);	
 #define  PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
-LPVOID  WINAPI PathQuoteSpaces32AW(LPCVOID path);	
+LPVOID  WINAPI PathQuoteSpacesAW(LPCVOID path);	
 
-LPSTR  WINAPI PathCombine32A(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile);
-LPWSTR WINAPI PathCombine32W(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile);
+LPSTR  WINAPI PathCombineA(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile);
+LPWSTR WINAPI PathCombineW(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile);
 #define  PathCombine WINELIB_NAME_AW(PathCombine)
-LPVOID WINAPI PathCombine32AW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile);
+LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile);
 
-LPCSTR WINAPI PathFindExtension32A(LPCSTR path);
-LPCWSTR WINAPI PathFindExtension32W(LPCWSTR path);
+LPCSTR WINAPI PathFindExtensionA(LPCSTR path);
+LPCWSTR WINAPI PathFindExtensionW(LPCWSTR path);
 #define  PathFindExtension WINELIB_NAME_AW(PathFindExtension)
-LPCVOID WINAPI PathFindExtension32AW(LPCVOID path); 
+LPCVOID WINAPI PathFindExtensionAW(LPCVOID path); 
 
-LPCSTR WINAPI PathGetExtension32A(LPCSTR path, DWORD y, DWORD x);
-LPCWSTR WINAPI PathGetExtension32W(LPCWSTR path, DWORD y, DWORD x);
+LPCSTR WINAPI PathGetExtensionA(LPCSTR path, DWORD y, DWORD x);
+LPCWSTR WINAPI PathGetExtensionW(LPCWSTR path, DWORD y, DWORD x);
 #define  PathGetExtension WINELIB_NAME_AW(PathGetExtension)
-LPCVOID WINAPI PathGetExtension32AW(LPCVOID path, DWORD y, DWORD x); 
+LPCVOID WINAPI PathGetExtensionAW(LPCVOID path, DWORD y, DWORD x); 
 
-LPCSTR WINAPI PathFindFilename32A(LPCSTR path);
-LPCWSTR WINAPI PathFindFilename32W(LPCWSTR path);
+LPCSTR WINAPI PathFindFilenameA(LPCSTR path);
+LPCWSTR WINAPI PathFindFilenameW(LPCWSTR path);
 #define  PathFindFilename WINELIB_NAME_AW(PathFindFilename)
-LPCVOID WINAPI PathFindFilename32AW(LPCVOID path); 
+LPCVOID WINAPI PathFindFilenameAW(LPCVOID path); 
 
-BOOL32 WINAPI PathMatchSpec32A(LPCSTR x, LPCSTR y);
-BOOL32 WINAPI PathMatchSpec32W(LPCWSTR x, LPCWSTR y);
+BOOL WINAPI PathMatchSpecA(LPCSTR x, LPCSTR y);
+BOOL WINAPI PathMatchSpecW(LPCWSTR x, LPCWSTR y);
 #define  PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)
-BOOL32 WINAPI PathMatchSpec32AW(LPVOID x, LPVOID y);
+BOOL WINAPI PathMatchSpecAW(LPVOID x, LPVOID y);
 
-LPSTR WINAPI PathRemoveBlanks32A(LPSTR str);
-LPWSTR WINAPI PathRemoveBlanks32W(LPWSTR str);
+LPSTR WINAPI PathRemoveBlanksA(LPSTR str);
+LPWSTR WINAPI PathRemoveBlanksW(LPWSTR str);
 #define  PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
-LPVOID WINAPI PathRemoveBlanks32AW(LPVOID str);
+LPVOID WINAPI PathRemoveBlanksAW(LPVOID str);
 
-BOOL32 WINAPI PathIsRelative32A(LPCSTR str);
-BOOL32 WINAPI PathIsRelative32W(LPCWSTR str);
+BOOL WINAPI PathIsRelativeA(LPCSTR str);
+BOOL WINAPI PathIsRelativeW(LPCWSTR str);
 #define  PathIsRelative WINELIB_NAME_AW(PathIsRelative)
-BOOL32 WINAPI PathIsRelative32AW(LPCVOID str);
+BOOL WINAPI PathIsRelativeAW(LPCVOID str);
 
-BOOL32 WINAPI PathIsUNC32A(LPCSTR str);
-BOOL32 WINAPI PathIsUNC32W(LPCWSTR str);
+BOOL WINAPI PathIsUNCA(LPCSTR str);
+BOOL WINAPI PathIsUNCW(LPCWSTR str);
 #define  PathIsUNC WINELIB_NAME_AW(PathIsUNC)
-BOOL32 WINAPI PathIsUNC32AW(LPCVOID str);
+BOOL WINAPI PathIsUNCAW(LPCVOID str);
 
-BOOL32 WINAPI PathFindOnPath32A(LPSTR sFile, LPCSTR sOtherDirs);
-BOOL32 WINAPI PathFindOnPath32W(LPWSTR sFile, LPCWSTR sOtherDirs);
+BOOL WINAPI PathFindOnPathA(LPSTR sFile, LPCSTR sOtherDirs);
+BOOL WINAPI PathFindOnPathW(LPWSTR sFile, LPCWSTR sOtherDirs);
 #define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath)
-BOOL32 WINAPI PathFindOnPath32AW(LPVOID sFile, LPCVOID sOtherDirs);
+BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs);
 
-LPSTR WINAPI StrFormatByteSize32A ( DWORD dw, LPSTR pszBuf, UINT32 cchBuf );
-LPWSTR WINAPI StrFormatByteSize32W ( DWORD dw, LPWSTR pszBuf, UINT32 cchBuf );
+LPSTR WINAPI StrFormatByteSizeA ( DWORD dw, LPSTR pszBuf, UINT cchBuf );
+LPWSTR WINAPI StrFormatByteSizeW ( DWORD dw, LPWSTR pszBuf, UINT cchBuf );
 #define  StrFormatByteSize WINELIB_NAME_AW(StrFormatByteSize)
 
 /****************************************************************************
 *  other functions
 */
 HICON16 WINAPI ExtractIconEx16 ( LPCSTR, INT16, HICON16 *, HICON16 *, UINT16 );
-HICON32 WINAPI ExtractIconEx32A( LPCSTR, INT32, HICON32 *, HICON32 *, UINT32 );
-HICON32 WINAPI ExtractIconEx32W( LPCWSTR, INT32, HICON32 *, HICON32 *, UINT32 );
+HICON WINAPI ExtractIconExA( LPCSTR, INT, HICON *, HICON *, UINT );
+HICON WINAPI ExtractIconExW( LPCWSTR, INT, HICON *, HICON *, UINT );
 #define  ExtractIconEx WINELIB_NAME_AW(ExtractIconEx)
-HICON32 WINAPI ExtractIconEx32AW(LPCVOID, INT32, HICON32 *, HICON32 *, UINT32 );
+HICON WINAPI ExtractIconExAW(LPCVOID, INT, HICON *, HICON *, UINT );
 
 LPVOID WINAPI SHAlloc(DWORD len);
 DWORD WINAPI SHFree(LPVOID x);
diff --git a/include/shellapi.h b/include/shellapi.h
index c91554f..e4d3caf 100644
--- a/include/shellapi.h
+++ b/include/shellapi.h
@@ -4,24 +4,24 @@
 #include "wintypes.h"
 
 HICON16     WINAPI ExtractIcon16(HINSTANCE16,LPCSTR,UINT16);
-HICON32     WINAPI ExtractIcon32A(HINSTANCE32,LPCSTR,UINT32);
-HICON32     WINAPI ExtractIcon32W(HINSTANCE32,LPCWSTR,UINT32);
+HICON     WINAPI ExtractIconA(HINSTANCE,LPCSTR,UINT);
+HICON     WINAPI ExtractIconW(HINSTANCE,LPCWSTR,UINT);
 #define     ExtractIcon WINELIB_NAME_AW(ExtractIcon)
 HICON16     WINAPI ExtractAssociatedIcon16(HINSTANCE16,LPSTR,LPWORD);
-HICON32     WINAPI ExtractAssociatedIcon32A(HINSTANCE32,LPSTR,LPWORD);
-HICON32     WINAPI ExtractAssociatedIcon32W(HINSTANCE32,LPWSTR,LPWORD);
+HICON     WINAPI ExtractAssociatedIconA(HINSTANCE,LPSTR,LPWORD);
+HICON     WINAPI ExtractAssociatedIconW(HINSTANCE,LPWSTR,LPWORD);
 #define     ExtractAssociatedIcon WINELIB_NAME_AW(ExtractAssociatedIcon)
 HINSTANCE16 WINAPI FindExecutable16(LPCSTR,LPCSTR,LPSTR);
-HINSTANCE32 WINAPI FindExecutable32A(LPCSTR,LPCSTR,LPSTR);
-HINSTANCE32 WINAPI FindExecutable32W(LPCWSTR,LPCWSTR,LPWSTR);
+HINSTANCE WINAPI FindExecutableA(LPCSTR,LPCSTR,LPSTR);
+HINSTANCE WINAPI FindExecutableW(LPCWSTR,LPCWSTR,LPWSTR);
 #define     FindExecutable WINELIB_NAME_AW(FindExecutable)
 BOOL16      WINAPI ShellAbout16(HWND16,LPCSTR,LPCSTR,HICON16);
-BOOL32      WINAPI ShellAbout32A(HWND32,LPCSTR,LPCSTR,HICON32);
-BOOL32      WINAPI ShellAbout32W(HWND32,LPCWSTR,LPCWSTR,HICON32);
+BOOL      WINAPI ShellAboutA(HWND,LPCSTR,LPCSTR,HICON);
+BOOL      WINAPI ShellAboutW(HWND,LPCWSTR,LPCWSTR,HICON);
 #define     ShellAbout WINELIB_NAME_AW(ShellAbout)
 HINSTANCE16 WINAPI ShellExecute16(HWND16,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT16);
-HINSTANCE32 WINAPI ShellExecute32A(HWND32,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT32);
-HINSTANCE32 WINAPI ShellExecute32W(HWND32,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT32);
+HINSTANCE WINAPI ShellExecuteA(HWND,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT);
+HINSTANCE WINAPI ShellExecuteW(HWND,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT);
 #define     ShellExecute WINELIB_NAME_AW(ShellExecute)
 
 
diff --git a/include/shlobj.h b/include/shlobj.h
index 672b1f8..1b8262a 100644
--- a/include/shlobj.h
+++ b/include/shlobj.h
@@ -45,11 +45,11 @@
 
 
 typedef struct _STRRET
-{ UINT32 uType;		/* STRRET_xxx */
+{ UINT uType;		/* STRRET_xxx */
   union
   { LPWSTR	pOleStr;	/* OLESTR that will be freed */
     LPSTR	pStr;
-    UINT32	uOffset;	/* OffsetINT32o SHITEMID (ANSI) */
+    UINT	uOffset;	/* OffsetINT32o SHITEMID (ANSI) */
     char	cStr[MAX_PATH];	/* Buffer to fill in */
     WCHAR	cStrW[MAX_PATH];
   }u;
@@ -118,45 +118,45 @@
 typedef struct tagCMINVOKECOMMANDINFO 
 {   DWORD cbSize;        /* sizeof(CMINVOKECOMMANDINFO) */
     DWORD fMask;         /* any combination of CMIC_MASK_* */
-    HWND32 hwnd;         /* might be NULL (indicating no owner window) */
+    HWND hwnd;         /* might be NULL (indicating no owner window) */
     LPCSTR lpVerb;       /* either a string or MAKEINTRESOURCE(idOffset) */
     LPCSTR lpParameters; /* might be NULL (indicating no parameter) */
     LPCSTR lpDirectory;  /* might be NULL (indicating no specific directory) */
-   INT32 nShow;           /* one of SW_ values for ShowWindow() API */
+   INT nShow;           /* one of SW_ values for ShowWindow() API */
 
     DWORD dwHotKey;
-    HANDLE32 hIcon;
-} CMINVOKECOMMANDINFO32,  *LPCMINVOKECOMMANDINFO32;
+    HANDLE hIcon;
+} CMINVOKECOMMANDINFO,  *LPCMINVOKECOMMANDINFO;
 
 typedef struct tagCMInvokeCommandInfoEx 
 {   DWORD cbSize;        /* must be sizeof(CMINVOKECOMMANDINFOEX) */
     DWORD fMask;         /* any combination of CMIC_MASK_* */
-    HWND32 hwnd;         /* might be NULL (indicating no owner window) */
+    HWND hwnd;         /* might be NULL (indicating no owner window) */
     LPCSTR lpVerb;       /* either a string or MAKEINTRESOURCE(idOffset) */
     LPCSTR lpParameters; /* might be NULL (indicating no parameter) */
     LPCSTR lpDirectory;  /* might be NULL (indicating no specific directory) */
-	INT32 nShow;           /* one of SW_ values for ShowWindow() API */
+	INT nShow;           /* one of SW_ values for ShowWindow() API */
 
     DWORD dwHotKey;
     
-    HANDLE32 hIcon;
+    HANDLE hIcon;
     LPCSTR lpTitle;        /* For CreateProcess-StartupInfo.lpTitle */
     LPCWSTR lpVerbW;       /* Unicode verb (for those who can use it) */
     LPCWSTR lpParametersW; /* Unicode parameters (for those who can use it) */
     LPCWSTR lpDirectoryW;  /* Unicode directory (for those who can use it) */
     LPCWSTR lpTitleW;      /* Unicode title (for those who can use it) */
-    POINT32 ptInvoke;      /* Point where it's invoked */
+    POINT ptInvoke;      /* Point where it's invoked */
 
-} CMINVOKECOMMANDINFOEX32,  *LPCMINVOKECOMMANDINFOEX32;
+} CMINVOKECOMMANDINFOEX,  *LPCMINVOKECOMMANDINFOEX;
 #undef THIS
 
 
 #define ICOM_INTERFACE IContextMenu
 #define IContextMenu_METHODS \
-    ICOM_METHOD5(HRESULT,QueryContextMenu,       HMENU32,hmenu, UINT32,indexMenu, UINT32,idCmdFirst, UINT32,idCmdLast, UINT32,uFlags) \
-    ICOM_METHOD1(HRESULT,InvokeCommand,       LPCMINVOKECOMMANDINFO32,lpici) \
-    ICOM_METHOD5(HRESULT,GetCommandString,       UINT32,idCmd, UINT32,uType, UINT32*,pwReserved, LPSTR,pszName, UINT32,cchMax) \
-    ICOM_METHOD3(HRESULT,HandleMenuMsg,        UINT32,uMsg,WPARAM32,wParam,LPARAM,lParam) \
+    ICOM_METHOD5(HRESULT,QueryContextMenu,       HMENU,hmenu, UINT,indexMenu, UINT,idCmdFirst, UINT,idCmdLast, UINT,uFlags) \
+    ICOM_METHOD1(HRESULT,InvokeCommand,       LPCMINVOKECOMMANDINFO,lpici) \
+    ICOM_METHOD5(HRESULT,GetCommandString,       UINT,idCmd, UINT,uType, UINT*,pwReserved, LPSTR,pszName, UINT,cchMax) \
+    ICOM_METHOD3(HRESULT,HandleMenuMsg,        UINT,uMsg,WPARAM,wParam,LPARAM,lParam) \
     void * guard;   /*possibly another nasty entry from ContextMenu3 ?*/
 #define IContextMenu_IMETHODS \
 		IUnknown_IMETHODS \
@@ -191,11 +191,11 @@
 /* DATAOBJECT_InitShellIDList*/
 #define CFSTR_SHELLIDLIST       "Shell IDList Array"      /* CF_IDLIST */
 
-extern UINT32 cfShellIDList;
+extern UINT cfShellIDList;
 
 typedef struct
-{	UINT32 cidl;
-	UINT32 aoffset[1];
+{	UINT cidl;
+	UINT aoffset[1];
 } CIDA, *LPCIDA;
 
 #define CFSTR_SHELLIDLISTOFFSET "Shell Object Offsets"    /* CF_OBJECTPOSITIONS */
@@ -203,13 +203,13 @@
 
 /* DATAOBJECT_InitFileGroupDesc */
 #define CFSTR_FILEDESCRIPTORA   "FileGroupDescriptor"     /* CF_FILEGROUPDESCRIPTORA */
-extern UINT32 cfFileGroupDesc;
+extern UINT cfFileGroupDesc;
 
 #define CFSTR_FILEDESCRIPTORW   "FileGroupDescriptorW"    /* CF_FILEGROUPDESCRIPTORW */
 
 /* DATAOBJECT_InitFileContents*/
 #define CFSTR_FILECONTENTS      "FileContents"            /* CF_FILECONTENTS */
-extern UINT32 cfFileContents;
+extern UINT cfFileContents;
 
 #define CFSTR_FILENAMEA         "FileName"                /* CF_FILENAMEA */
 #define CFSTR_FILENAMEW         "FileNameW"               /* CF_FILENAMEW */
@@ -239,22 +239,22 @@
 } IDLListState;
  
 typedef struct IDLList_VTable
-{	STDMETHOD_(UINT32, GetState)(THIS);
-	STDMETHOD_(LPITEMIDLIST, GetElement)(THIS_ UINT32 nIndex);
-	STDMETHOD_(UINT32, GetCount)(THIS);
-	STDMETHOD_(BOOL32, StoreItem)(THIS_ LPITEMIDLIST pidl);
-	STDMETHOD_(BOOL32, AddItems)(THIS_ LPITEMIDLIST *apidl, UINT32 cidl);
-	STDMETHOD_(BOOL32, InitList)(THIS);
+{	STDMETHOD_(UINT, GetState)(THIS);
+	STDMETHOD_(LPITEMIDLIST, GetElement)(THIS_ UINT nIndex);
+	STDMETHOD_(UINT, GetCount)(THIS);
+	STDMETHOD_(BOOL, StoreItem)(THIS_ LPITEMIDLIST pidl);
+	STDMETHOD_(BOOL, AddItems)(THIS_ LPITEMIDLIST *apidl, UINT cidl);
+	STDMETHOD_(BOOL, InitList)(THIS);
 	STDMETHOD_(void, CleanList)(THIS);
 } IDLList_VTable,*LPIDLLIST_VTABLE;
 
 struct tagLPIDLLIST
 {	LPIDLLIST_VTABLE	lpvtbl;
 	HDPA	dpa;
-	UINT32	uStep;
+	UINT	uStep;
 };
 
-extern LPIDLLIST IDLList_Constructor (UINT32 uStep);
+extern LPIDLLIST IDLList_Constructor (UINT uStep);
 extern void IDLList_Destructor(LPIDLLIST this);
 #undef THIS
 
@@ -305,9 +305,9 @@
     STDMETHOD(Reset) (THIS) PURE;
     STDMETHOD(Clone) (THIS_ IEnumIDList **ppenum) PURE;
 		/* *** private methods *** */
-    STDMETHOD_(BOOL32,CreateEnumList)(THIS_ LPCSTR, DWORD) PURE;
-    STDMETHOD_(BOOL32,AddToEnumList)(THIS_ LPITEMIDLIST) PURE;
-    STDMETHOD_(BOOL32,DeleteList)(THIS) PURE;
+    STDMETHOD_(BOOL,CreateEnumList)(THIS_ LPCSTR, DWORD) PURE;
+    STDMETHOD_(BOOL,AddToEnumList)(THIS_ LPITEMIDLIST) PURE;
+    STDMETHOD_(BOOL,DeleteList)(THIS) PURE;
 
 		
 } IEnumIDList_VTable,*LPENUMIDLIST_VTABLE;
@@ -362,8 +362,8 @@
 } FOLDERVIEWMODE;
 
 typedef struct
-{ UINT32 ViewMode;       /* View mode (FOLDERVIEWMODE values) */
-  UINT32 fFlags;         /* View options (FOLDERFLAGS bits) */
+{ UINT ViewMode;       /* View mode (FOLDERVIEWMODE values) */
+  UINT fFlags;         /* View options (FOLDERFLAGS bits) */
 } FOLDERSETTINGS, *LPFOLDERSETTINGS;
 
 typedef const FOLDERSETTINGS * LPCFOLDERSETTINGS;
@@ -417,19 +417,19 @@
     STDMETHOD_(ULONG,Release) (THIS) PURE;
 
     /* *** IShellFolder methods *** */
-    STDMETHOD(ParseDisplayName) (THIS_ HWND32 hwndOwner,LPBC pbcReserved, LPOLESTR32 lpszDisplayName,ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes) PURE;
-    STDMETHOD(EnumObjects)( THIS_ HWND32 hwndOwner, DWORD grfFlags, LPENUMIDLIST * ppenumIDList) PURE;
+    STDMETHOD(ParseDisplayName) (THIS_ HWND hwndOwner,LPBC pbcReserved, LPOLESTR lpszDisplayName,ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes) PURE;
+    STDMETHOD(EnumObjects)( THIS_ HWND hwndOwner, DWORD grfFlags, LPENUMIDLIST * ppenumIDList) PURE;
     STDMETHOD(BindToObject)(THIS_ LPCITEMIDLIST pidl, LPBC pbcReserved,REFIID riid, LPVOID * ppvOut) PURE;
     STDMETHOD(BindToStorage)(THIS_ LPCITEMIDLIST pidl, LPBC pbcReserved,REFIID riid, LPVOID * ppvObj) PURE;
     STDMETHOD(CompareIDs)(THIS_ LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE;
-    STDMETHOD(CreateViewObject)(THIS_ HWND32 hwndOwner, REFIID riid, LPVOID * ppvOut) PURE;
-    STDMETHOD(GetAttributesOf)(THIS_ UINT32 cidl, LPCITEMIDLIST * apidl,ULONG * rgfInOut) PURE;
-    STDMETHOD(GetUIObjectOf)(THIS_ HWND32 hwndOwner, UINT32 cidl, LPCITEMIDLIST * apidl,REFIID riid, UINT32 * prgfInOut, LPVOID * ppvOut) PURE;
+    STDMETHOD(CreateViewObject)(THIS_ HWND hwndOwner, REFIID riid, LPVOID * ppvOut) PURE;
+    STDMETHOD(GetAttributesOf)(THIS_ UINT cidl, LPCITEMIDLIST * apidl,ULONG * rgfInOut) PURE;
+    STDMETHOD(GetUIObjectOf)(THIS_ HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl,REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) PURE;
     STDMETHOD(GetDisplayNameOf)(THIS_ LPCITEMIDLIST pidl, DWORD uFlags, LPSTRRET lpName) PURE;
-    STDMETHOD(SetNameOf)(THIS_ HWND32 hwndOwner, LPCITEMIDLIST pidl,LPCOLESTR32 lpszName, DWORD uFlags,LPITEMIDLIST * ppidlOut) PURE;
+    STDMETHOD(SetNameOf)(THIS_ HWND hwndOwner, LPCITEMIDLIST pidl,LPCOLESTR lpszName, DWORD uFlags,LPITEMIDLIST * ppidlOut) PURE;
 
 	/* utility functions */
-   STDMETHOD_(BOOL32,GetFolderPath)(THIS_ LPSTR, DWORD);
+   STDMETHOD_(BOOL,GetFolderPath)(THIS_ LPSTR, DWORD);
    
 } *LPSHELLFOLDER_VTABLE,IShellFolder_VTable;
 
@@ -501,25 +501,25 @@
     STDMETHOD_(ULONG,Release) (THIS) PURE;
 
     /* *** IOleWindow methods *** */
-    STDMETHOD(GetWindow) (THIS_ HWND32 * lphwnd) PURE;
-    STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL32 fEnterMode) PURE;
+    STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE;
+    STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
 
     /* *** IShellBrowser methods *** (same as IOleInPlaceFrame) */
-    STDMETHOD(InsertMenusSB) (THIS_ HMENU32 hmenuShared, LPOLEMENUGROUPWIDTHS32 lpMenuWidths) PURE;
-    STDMETHOD(SetMenuSB) (THIS_ HMENU32 hmenuShared, HOLEMENU32 holemenuReserved, HWND32 hwndActiveObject) PURE;
-    STDMETHOD(RemoveMenusSB) (THIS_ HMENU32 hmenuShared) PURE;
-    STDMETHOD(SetStatusTextSB) (THIS_ LPCOLESTR32 lpszStatusText) PURE;
-    STDMETHOD(EnableModelessSB) (THIS_ BOOL32 fEnable) PURE;
-    STDMETHOD(TranslateAcceleratorSB) (THIS_ LPMSG32 lpmsg, WORD wID) PURE;
+    STDMETHOD(InsertMenusSB) (THIS_ HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) PURE;
+    STDMETHOD(SetMenuSB) (THIS_ HMENU hmenuShared, HOLEMENU holemenuReserved, HWND hwndActiveObject) PURE;
+    STDMETHOD(RemoveMenusSB) (THIS_ HMENU hmenuShared) PURE;
+    STDMETHOD(SetStatusTextSB) (THIS_ LPCOLESTR lpszStatusText) PURE;
+    STDMETHOD(EnableModelessSB) (THIS_ BOOL fEnable) PURE;
+    STDMETHOD(TranslateAcceleratorSB) (THIS_ LPMSG lpmsg, WORD wID) PURE;
 
     /* *** IShellBrowser methods *** */
-    STDMETHOD(BrowseObject)(THIS_ LPCITEMIDLIST pidl, UINT32 wFlags) PURE;
-    STDMETHOD(GetViewStateStream)(THIS_ DWORD grfMode, LPSTREAM32  *ppStrm) PURE;
-    STDMETHOD(GetControlWindow)(THIS_ UINT32 id, HWND32 * lphwnd) PURE;
-    STDMETHOD(SendControlMsg)(THIS_ UINT32 id, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam, LRESULT * pret) PURE;
+    STDMETHOD(BrowseObject)(THIS_ LPCITEMIDLIST pidl, UINT wFlags) PURE;
+    STDMETHOD(GetViewStateStream)(THIS_ DWORD grfMode, LPSTREAM  *ppStrm) PURE;
+    STDMETHOD(GetControlWindow)(THIS_ UINT id, HWND * lphwnd) PURE;
+    STDMETHOD(SendControlMsg)(THIS_ UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT * pret) PURE;
     STDMETHOD(QueryActiveShellView)(THIS_ IShellView ** ppshv) PURE;
     STDMETHOD(OnViewWindowActive)(THIS_ IShellView * ppshv) PURE;
-    STDMETHOD(SetToolbarItems)(THIS_ LPTBBUTTON lpButtons, UINT32 nButtons, UINT32 uFlags) PURE;
+    STDMETHOD(SetToolbarItems)(THIS_ LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) PURE;
 } *LPSHELLBROWSER_VTABLE,IShellBrowser_VTable;
 
 struct tagSHELLBROWSER 
@@ -623,21 +623,21 @@
     STDMETHOD_(ULONG,Release) (THIS) PURE;
 
     /* *** IOleWindow methods *** */
-    STDMETHOD(GetWindow) (THIS_ HWND32 * lphwnd) PURE;
-    STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL32 fEnterMode) PURE;
+    STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE;
+    STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
 
     /* *** IShellView methods *** */
-    STDMETHOD(TranslateAccelerator) (THIS_ LPMSG32 lpmsg) PURE;
-    STDMETHOD(EnableModeless) (THIS_ BOOL32 fEnable) PURE;
-    STDMETHOD(UIActivate) (THIS_ UINT32 uState) PURE;
+    STDMETHOD(TranslateAccelerator) (THIS_ LPMSG lpmsg) PURE;
+    STDMETHOD(EnableModeless) (THIS_ BOOL fEnable) PURE;
+    STDMETHOD(UIActivate) (THIS_ UINT uState) PURE;
     STDMETHOD(Refresh) (THIS) PURE;
-    STDMETHOD(CreateViewWindow)(THIS_ IShellView *lpPrevView,LPCFOLDERSETTINGS lpfs, IShellBrowser * psb,RECT32 * prcView, HWND32  *phWnd) PURE;
+    STDMETHOD(CreateViewWindow)(THIS_ IShellView *lpPrevView,LPCFOLDERSETTINGS lpfs, IShellBrowser * psb,RECT * prcView, HWND  *phWnd) PURE;
     STDMETHOD(DestroyViewWindow)(THIS) PURE;
     STDMETHOD(GetCurrentInfo)(THIS_ LPFOLDERSETTINGS lpfs) PURE;
     STDMETHOD(AddPropertySheetPages)(THIS_ DWORD dwReserved,LPFNADDPROPSHEETPAGE lpfn, LPARAM lparam) PURE;
     STDMETHOD(SaveViewState)(THIS) PURE;
-    STDMETHOD(SelectItem)(THIS_ LPCITEMIDLIST pidlItem, UINT32 uFlags) PURE;
-    STDMETHOD(GetItemObject)(THIS_ UINT32 uItem, REFIID riid,LPVOID *ppv) PURE;
+    STDMETHOD(SelectItem)(THIS_ LPCITEMIDLIST pidlItem, UINT uFlags) PURE;
+    STDMETHOD(GetItemObject)(THIS_ UINT uItem, REFIID riid,LPVOID *ppv) PURE;
 } IShellView_VTable,*LPSHELLVIEW_VTABLE;
 
 struct tagSHELLVIEW 
@@ -647,13 +647,13 @@
   LPSHELLFOLDER	pSFParent;
   LPSHELLBROWSER	pShellBrowser;
   LPCOMMDLGBROWSER	pCommDlgBrowser;
-  HWND32	hWnd;
-  HWND32	hWndList;
-  HWND32	hWndParent;
+  HWND	hWnd;
+  HWND	hWndList;
+  HWND	hWndParent;
   FOLDERSETTINGS	FolderSettings;
-  HMENU32	hMenu;
-  UINT32	uState;
-  UINT32	uSelected;
+  HMENU	hMenu;
+  UINT	uState;
+  UINT	uSelected;
   LPITEMIDLIST	*aSelectedItems;
 };
 
@@ -718,8 +718,8 @@
   STDMETHOD_(ULONG,Release) (THIS) PURE;
 
   /*** IExtractIcon methods ***/
-  STDMETHOD(GetIconLocation)(THIS_ UINT32 uFlags, LPSTR szIconFile, UINT32 cchMax,INT32 * piIndex, UINT32 * pwFlags) PURE;
-  STDMETHOD(Extract)(THIS_ LPCSTR pszFile, UINT32 nIconIndex, HICON32 *phiconLarge, HICON32 *phiconSmall, UINT32 nIconSize) PURE;
+  STDMETHOD(GetIconLocation)(THIS_ UINT uFlags, LPSTR szIconFile, UINT cchMax,INT * piIndex, UINT * pwFlags) PURE;
+  STDMETHOD(Extract)(THIS_ LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize) PURE;
 }IExtractIcon_VTable,*LPEXTRACTICON_VTABLE;
 
 struct IExtractIcon 
@@ -745,7 +745,7 @@
   STDMETHOD_(ULONG,Release) (THIS) PURE;
 
   /*** IShellIcon methods ***/
-  STDMETHOD(GetIconOf)(THIS_ LPCITEMIDLIST pidl, UINT32 flags, LPINT32 lpIconIndex) PURE;
+  STDMETHOD(GetIconOf)(THIS_ LPCITEMIDLIST pidl, UINT flags, LPINT lpIconIndex) PURE;
 } IShellIcon_VTable,*LPSHELLICON_VTABLE;
 
 struct tagSHELLICON
@@ -768,8 +768,8 @@
     STDMETHOD_(ULONG,Release) (THIS) PURE;
 
     /*** IOleWindow methods ***/
-    STDMETHOD(GetWindow) (THIS_ HWND32 * lphwnd) PURE;
-    STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL32 fEnterMode) PURE;
+    STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE;
+    STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
 
     /*** IDockingWindowFrame methods ***/
     STDMETHOD(AddToolbar) (THIS_ IUnknown* punkSrc, LPCWSTR pwszItem, DWORD dwAddFlags) PURE;
@@ -817,56 +817,56 @@
 typedef struct _SHELLEXECUTEINFOA
 {       DWORD cbSize;
         ULONG fMask;
-        HWND32 hwnd;
+        HWND hwnd;
         LPCSTR   lpVerb;
         LPCSTR   lpFile;
         LPCSTR   lpParameters;
         LPCSTR   lpDirectory;
-       INT32 nShow;
-        HINSTANCE32 hInstApp;
+       INT nShow;
+        HINSTANCE hInstApp;
         /* Optional fields */
         LPVOID lpIDList;
         LPCSTR   lpClass;
         HKEY hkeyClass;
         DWORD dwHotKey;
         union 
-        { HANDLE32 hIcon;
-          HANDLE32 hMonitor;
+        { HANDLE hIcon;
+          HANDLE hMonitor;
         } u;
-        HANDLE32 hProcess;
-} SHELLEXECUTEINFO32A, *LPSHELLEXECUTEINFO32A;
+        HANDLE hProcess;
+} SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA;
 
 typedef struct _SHELLEXECUTEINFOW
 {       DWORD cbSize;
         ULONG fMask;
-        HWND32 hwnd;
+        HWND hwnd;
         LPCWSTR  lpVerb;
         LPCWSTR  lpFile;
         LPCWSTR  lpParameters;
         LPCWSTR  lpDirectory;
-       INT32 nShow;
-        HINSTANCE32 hInstApp;
+       INT nShow;
+        HINSTANCE hInstApp;
         /* Optional fields*/
         LPVOID lpIDList;
         LPCWSTR  lpClass;
         HKEY hkeyClass;
         DWORD dwHotKey;
         union
-        { HANDLE32 hIcon;
-          HANDLE32 hMonitor;
+        { HANDLE hIcon;
+          HANDLE hMonitor;
         } u;
-        HANDLE32 hProcess;
-} SHELLEXECUTEINFO32W, *LPSHELLEXECUTEINFO32W;
+        HANDLE hProcess;
+} SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW;
 
 #define SHELLEXECUTEINFO   WINELIB_NAME_AW(SHELLEXECUTEINFO)
 #define LPSHELLEXECUTEINFO WINELIB_NAME_AW(LPSHELLEXECUTEINFO)
 
-BOOL32 WINAPI ShellExecuteEx32A(LPSHELLEXECUTEINFO32A lpExecInfo);
-BOOL32 WINAPI ShellExecuteEx32W(LPSHELLEXECUTEINFO32W lpExecInfo);
+BOOL WINAPI ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo);
+BOOL WINAPI ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo);
 #define ShellExecuteEx  WINELIB_NAME_AW(ShellExecuteEx)
 
-void WINAPI WinExecError32A(HWND32 hwnd,INT32 error, LPCSTR lpstrFileName, LPCSTR lpstrTitle);
-void WINAPI WinExecError32W(HWND32 hwnd,INT32 error, LPCWSTR lpstrFileName, LPCWSTR lpstrTitle);
+void WINAPI WinExecErrorA(HWND hwnd,INT error, LPCSTR lpstrFileName, LPCSTR lpstrTitle);
+void WINAPI WinExecErrorW(HWND hwnd,INT error, LPCWSTR lpstrFileName, LPCWSTR lpstrTitle);
 #define WinExecError  WINELIB_NAME_AW(WinExecError)
 
 
@@ -874,29 +874,29 @@
 /****************************************************************************
  * SHBrowseForFolder API
  */
-typedef INT32 (CALLBACK* BFFCALLBACK)(HWND32 hwnd, UINT32 uMsg, LPARAM lParam, LPARAM lpData);
+typedef INT (CALLBACK* BFFCALLBACK)(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
 
-typedef struct tagBROWSEINFO32A {
-    HWND32        hwndOwner;
+typedef struct tagBROWSEINFOA {
+    HWND        hwndOwner;
     LPCITEMIDLIST pidlRoot;
     LPSTR         pszDisplayName;
     LPCSTR        lpszTitle;
-    UINT32        ulFlags;
+    UINT        ulFlags;
     BFFCALLBACK   lpfn;
     LPARAM        lParam;
-	INT32         iImage;
-} BROWSEINFO32A, *PBROWSEINFO32A, *LPBROWSEINFO32A;
+	INT         iImage;
+} BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA;
 
-typedef struct tagBROWSEINFO32W {
-    HWND32        hwndOwner;
+typedef struct tagBROWSEINFOW {
+    HWND        hwndOwner;
     LPCITEMIDLIST pidlRoot;
     LPWSTR        pszDisplayName;
     LPCWSTR       lpszTitle;
-    UINT32        ulFlags;
+    UINT        ulFlags;
     BFFCALLBACK   lpfn;
     LPARAM        lParam;
-	INT32         iImage;
-} BROWSEINFO32W, *PBROWSEINFO32W, *LPBROWSEINFO32W; 
+	INT         iImage;
+} BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW; 
 
 #define BROWSEINFO   WINELIB_NAME_AW(BROWSEINFO)
 #define PBROWSEINFO  WINELIB_NAME_AW(PBROWSEINFO)
@@ -943,7 +943,7 @@
 #endif 
 */
 
-LPITEMIDLIST WINAPI SHBrowseForFolder32A(LPBROWSEINFO32A lpbi);
+LPITEMIDLIST WINAPI SHBrowseForFolderA(LPBROWSEINFOA lpbi);
 /*LPITEMIDLIST WINAPI SHBrowseForFolder32W(LPBROWSEINFO32W lpbi);*/
 #define  SHBrowseForFolder WINELIB_NAME_AW(SHBrowseForFolder)
 
@@ -1002,7 +1002,7 @@
 */
 
 typedef HRESULT(CALLBACK *SHELLVIEWPROC)(DWORD dwUserParam,LPSHELLFOLDER psf,
-                         HWND32 hwnd,UINT32 uMsg,UINT32 wParam,LPARAM lParam);
+                         HWND hwnd,UINT uMsg,UINT wParam,LPARAM lParam);
 
 /* NF valid values for the "viewmode" item of the SHELLTEMPLATE*/
 #define NF_INHERITVIEW    0x0000
@@ -1024,24 +1024,24 @@
  The key one requested right now is "DoubleClickInWebView".
 */
 typedef struct 
-{   BOOL32 fShowAllObjects : 1;
-    BOOL32 fShowExtensions : 1;
-    BOOL32 fNoConfirmRecycle : 1;
-    BOOL32 fShowSysFiles : 1;
-    BOOL32 fShowCompColor : 1;
-    BOOL32 fDoubleClickInWebView : 1;
-    BOOL32 fDesktopHTML : 1;
-    BOOL32 fWin95Classic : 1;
-    BOOL32 fDontPrettyPath : 1;
-    BOOL32 fShowAttribCol : 1;
-    BOOL32 fMapNetDrvBtn : 1;
-    BOOL32 fShowInfoTip : 1;
-    BOOL32 fHideIcons : 1;
-    UINT32 fRestFlags : 3;
+{   BOOL fShowAllObjects : 1;
+    BOOL fShowExtensions : 1;
+    BOOL fNoConfirmRecycle : 1;
+    BOOL fShowSysFiles : 1;
+    BOOL fShowCompColor : 1;
+    BOOL fDoubleClickInWebView : 1;
+    BOOL fDesktopHTML : 1;
+    BOOL fWin95Classic : 1;
+    BOOL fDontPrettyPath : 1;
+    BOOL fShowAttribCol : 1;
+    BOOL fMapNetDrvBtn : 1;
+    BOOL fShowInfoTip : 1;
+    BOOL fHideIcons : 1;
+    UINT fRestFlags : 3;
 } SHELLFLAGSTATE, * LPSHELLFLAGSTATE;
 
 
-DWORD WINAPI SHGetMalloc(LPMALLOC32 *lpmal) ;
+DWORD WINAPI SHGetMalloc(LPMALLOC *lpmal) ;
 
 #undef PURE
 #undef FAR
diff --git a/include/snoop.h b/include/snoop.h
index e4714c4..09f4fc6 100644
--- a/include/snoop.h
+++ b/include/snoop.h
@@ -6,8 +6,8 @@
 
 #include "module.h"
 
-extern void SNOOP_RegisterDLL(HMODULE32,LPCSTR,DWORD);
-extern FARPROC32 SNOOP_GetProcAddress32(HMODULE32,LPCSTR,DWORD,FARPROC32);
+extern void SNOOP_RegisterDLL(HMODULE,LPCSTR,DWORD);
+extern FARPROC SNOOP_GetProcAddress(HMODULE,LPCSTR,DWORD,FARPROC);
 extern void (*fnSNOOP16_RegisterDLL)(NE_MODULE*,LPCSTR);
 extern FARPROC16 (*fnSNOOP16_GetProcAddress16)(HMODULE16,DWORD,FARPROC16);
 extern void SNOOP16_Init();
diff --git a/include/spy.h b/include/spy.h
index bb6f776..b0bb7ee 100644
--- a/include/spy.h
+++ b/include/spy.h
@@ -8,24 +8,24 @@
 #include "wintypes.h"
 
 #define SPY_DISPATCHMESSAGE16     0x0100
-#define SPY_DISPATCHMESSAGE32     0x0101
+#define SPY_DISPATCHMESSAGE     0x0101
 #define SPY_SENDMESSAGE16         0x0102
-#define SPY_SENDMESSAGE32         0x0103
+#define SPY_SENDMESSAGE         0x0103
 #define SPY_DEFWNDPROC16          0x0104
-#define SPY_DEFWNDPROC32          0x0105
+#define SPY_DEFWNDPROC          0x0105
 
 #define SPY_RESULT_OK16           0x0000
-#define SPY_RESULT_OK32           0x0001
+#define SPY_RESULT_OK           0x0001
 #define SPY_RESULT_INVALIDHWND16  0x0002
-#define SPY_RESULT_INVALIDHWND32  0x0003
+#define SPY_RESULT_INVALIDHWND  0x0003
 #define SPY_RESULT_DEFWND16       0x0004
-#define SPY_RESULT_DEFWND32       0x0005
+#define SPY_RESULT_DEFWND       0x0005
 
 
-extern const char *SPY_GetMsgName( UINT32 msg );
-extern void SPY_EnterMessage( INT32 iFlag, HWND32 hwnd, UINT32 msg,
-                              WPARAM32 wParam, LPARAM lParam );
-extern void SPY_ExitMessage( INT32 iFlag, HWND32 hwnd, UINT32 msg,
+extern const char *SPY_GetMsgName( UINT msg );
+extern void SPY_EnterMessage( INT iFlag, HWND hwnd, UINT msg,
+                              WPARAM wParam, LPARAM lParam );
+extern void SPY_ExitMessage( INT iFlag, HWND hwnd, UINT msg,
                              LRESULT lReturn );
 extern int SPY_Init(void);
 
diff --git a/include/static.h b/include/static.h
index 54484bf..817b5cb 100644
--- a/include/static.h
+++ b/include/static.h
@@ -17,7 +17,7 @@
     HICON16  hIcon;   /* Icon handle for SS_ICON controls */ 
 } STATICINFO;
 
-extern LRESULT WINAPI StaticWndProc( HWND32 hWnd, UINT32 uMsg, WPARAM32 wParam,
+extern LRESULT WINAPI StaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam,
                                      LPARAM lParam );
 
 #endif  /* __WINE_STATIC_H */
diff --git a/include/status.h b/include/status.h
index ec44579..6afeec1 100644
--- a/include/status.h
+++ b/include/status.h
@@ -9,24 +9,24 @@
 
 typedef struct
 {
-    INT32	x;
-    INT32	style;
-    RECT32	bound;
+    INT	x;
+    INT	style;
+    RECT	bound;
     LPWSTR	text;
-    HICON32     hIcon;
+    HICON     hIcon;
 } STATUSWINDOWPART;
 
 typedef struct
 {
     UINT16              numParts;
     UINT16              textHeight;
-    UINT32              height;
-    BOOL32              simple;
-    HWND32              hwndToolTip;
-    HFONT32             hFont;
-    HFONT32             hDefaultFont;
+    UINT              height;
+    BOOL              simple;
+    HWND              hwndToolTip;
+    HFONT             hFont;
+    HFONT             hDefaultFont;
     COLORREF            clrBk;     /* background color */
-    BOOL32              bUnicode;  /* unicode flag */
+    BOOL              bUnicode;  /* unicode flag */
     STATUSWINDOWPART	part0;	   /* simple window */
     STATUSWINDOWPART   *parts;
 } STATUSWINDOWINFO;
diff --git a/include/struct32.h b/include/struct32.h
index a239ece..3c1c818 100644
--- a/include/struct32.h
+++ b/include/struct32.h
@@ -6,24 +6,24 @@
 #include "wine/winuser16.h"
 #include "queue.h"
 
-extern void STRUCT32_MINMAXINFO32to16( const MINMAXINFO32*, MINMAXINFO16* );
-extern void STRUCT32_MINMAXINFO16to32( const MINMAXINFO16*, MINMAXINFO32* );
-extern void STRUCT32_WINDOWPOS32to16( const WINDOWPOS32*, WINDOWPOS16* );
-extern void STRUCT32_WINDOWPOS16to32( const WINDOWPOS16*, WINDOWPOS32* );
-extern void STRUCT32_NCCALCSIZE32to16Flat( const NCCALCSIZE_PARAMS32 *from,
+extern void STRUCT32_MINMAXINFO32to16( const MINMAXINFO*, MINMAXINFO16* );
+extern void STRUCT32_MINMAXINFO16to32( const MINMAXINFO16*, MINMAXINFO* );
+extern void STRUCT32_WINDOWPOS32to16( const WINDOWPOS*, WINDOWPOS16* );
+extern void STRUCT32_WINDOWPOS16to32( const WINDOWPOS16*, WINDOWPOS* );
+extern void STRUCT32_NCCALCSIZE32to16Flat( const NCCALCSIZE_PARAMS *from,
                                            NCCALCSIZE_PARAMS16 *to,
                                            int validRects );
 extern void STRUCT32_NCCALCSIZE16to32Flat( const NCCALCSIZE_PARAMS16* from,
-                                           NCCALCSIZE_PARAMS32* to,
+                                           NCCALCSIZE_PARAMS* to,
                                            int validRects );
 
-void STRUCT32_MSG16to32(const MSG16 *msg16,MSG32 *msg32);
-void STRUCT32_MSG32to16(const MSG32 *msg32,MSG16 *msg16);
+void STRUCT32_MSG16to32(const MSG16 *msg16,MSG *msg32);
+void STRUCT32_MSG32to16(const MSG *msg32,MSG16 *msg16);
 
-void STRUCT32_CREATESTRUCT32Ato16(const CREATESTRUCT32A*,CREATESTRUCT16*);
-void STRUCT32_CREATESTRUCT16to32A(const CREATESTRUCT16*,CREATESTRUCT32A*);
-void STRUCT32_MDICREATESTRUCT32Ato16( const MDICREATESTRUCT32A*,
+void STRUCT32_CREATESTRUCT32Ato16(const CREATESTRUCTA*,CREATESTRUCT16*);
+void STRUCT32_CREATESTRUCT16to32A(const CREATESTRUCT16*,CREATESTRUCTA*);
+void STRUCT32_MDICREATESTRUCT32Ato16( const MDICREATESTRUCTA*,
                                       MDICREATESTRUCT16*);
 void STRUCT32_MDICREATESTRUCT16to32A( const MDICREATESTRUCT16*,
-                                      MDICREATESTRUCT32A*);
+                                      MDICREATESTRUCTA*);
 #endif  /* __WINE_STRUCT32_H */
diff --git a/include/syslevel.h b/include/syslevel.h
index aad7a05..68039a0 100644
--- a/include/syslevel.h
+++ b/include/syslevel.h
@@ -19,7 +19,7 @@
 VOID SYSLEVEL_ReleaseWin16Lock(VOID);
 VOID SYSLEVEL_RestoreWin16Lock(VOID);
 
-VOID WINAPI GetpWin16Lock32(CRITICAL_SECTION **lock);
+VOID WINAPI GetpWin16Lock(CRITICAL_SECTION **lock);
 SEGPTR WINAPI GetpWin16Lock16(void);
 
 VOID WINAPI _EnterSysLevel(CRITICAL_SECTION *lock);
diff --git a/include/tab.h b/include/tab.h
index e3bfb45..b776ce6 100644
--- a/include/tab.h
+++ b/include/tab.h
@@ -9,29 +9,29 @@
 
 typedef struct tagTAB_ITEM
 {
-	UINT32  mask;
+	UINT  mask;
 	DWORD	dwState;
     LPSTR	pszText;
-	INT32   cchTextMax;
-    INT32	iImage;
+	INT   cchTextMax;
+    INT	iImage;
     LPARAM	lParam;
-    RECT32   	rect;		/* bounding rectangle of the item */
+    RECT   	rect;		/* bounding rectangle of the item */
 } TAB_ITEM;
 
 typedef struct tagTAB_INFO
 {
-    UINT32	    uNumItem;	/* number of tab items */
-    INT32	    nHeight;	/* height of the tab row */
-    HFONT32	    hFont;		/* handle to the current font */
-    HCURSOR32	hcurArrow;	/* handle to the current cursor */
+    UINT	    uNumItem;	/* number of tab items */
+    INT	    nHeight;	/* height of the tab row */
+    HFONT	    hFont;		/* handle to the current font */
+    HCURSOR	hcurArrow;	/* handle to the current cursor */
 	HIMAGELIST  himl;       /* handle to a image list (may be 0) */
-	HWND32		hwndToolTip; /* handle to tab's tooltip */
-	UINT32		cchTextMax;
-    INT32	    iSelected;	/* the currently selected item */
-    INT32	    uFocus;		/* item which has the focus */
+	HWND		hwndToolTip; /* handle to tab's tooltip */
+	UINT		cchTextMax;
+    INT	    iSelected;	/* the currently selected item */
+    INT	    uFocus;		/* item which has the focus */
     TAB_ITEM	*items;		/* pointer to an array of TAB_ITEM's */
-    RECT32	    rect;
-    BOOL32	    DoRedraw;	/* flag for redrawing when tab contents is changed*/
+    RECT	    rect;
+    BOOL	    DoRedraw;	/* flag for redrawing when tab contents is changed*/
 } TAB_INFO;
 
 
diff --git a/include/task.h b/include/task.h
index 0906200..af64809 100644
--- a/include/task.h
+++ b/include/task.h
@@ -34,7 +34,7 @@
     BYTE      fcb2[20];                /* 6c Second FCB */
     BYTE      cmdLine[128];            /* 80 Command-line (first byte is len)*/
     BYTE      padding[16];             /* Some apps access beyond the end of the cmd line */
-} PDB;
+} PDB16;
 
 
   /* Segment containing MakeProcInstance() thunks */
@@ -108,7 +108,7 @@
     BYTE      module_name[8];             /* f2 Module name for task */
     WORD      magic;                      /* fa TDB signature */
     DWORD     unused7;                    /* fc */
-    PDB       pdb;                        /* 100 PDB for this task */
+    PDB16       pdb;                        /* 100 PDB for this task */
 } TDB;
 
 #define TDB_MAGIC    ('T' | ('D' << 8))
@@ -152,13 +152,13 @@
 extern void TASK_StartTask( HTASK16 hTask );
 extern void TASK_KillCurrentTask( INT16 exitCode );
 extern HTASK16 TASK_GetNextTask( HTASK16 hTask );
-extern BOOL32 TASK_Reschedule(void);
+extern BOOL TASK_Reschedule(void);
 extern void TASK_InstallTHHook( THHOOK *pNewThook );
 
-extern HQUEUE16 WINAPI SetThreadQueue( DWORD thread, HQUEUE16 hQueue );
-extern HQUEUE16 WINAPI GetThreadQueue( DWORD thread );
-extern VOID WINAPI SetFastQueue( DWORD thread, HANDLE32 hQueue );
-extern HANDLE32 WINAPI GetFastQueue( void );
+extern HQUEUE16 WINAPI SetThreadQueue16( DWORD thread, HQUEUE16 hQueue );
+extern HQUEUE16 WINAPI GetThreadQueue16( DWORD thread );
+extern VOID WINAPI SetFastQueue16( DWORD thread, HANDLE hQueue );
+extern HANDLE WINAPI GetFastQueue16( void );
 
 
 #endif /* __WINE_TASK_H */
diff --git a/include/tchar.h b/include/tchar.h
index 0396997..d4472e1 100644
--- a/include/tchar.h
+++ b/include/tchar.h
@@ -250,18 +250,18 @@
 #define _TEXT(x) __T(x)
 #define __T(x) x
 
-typedef CHAR  _TCHAR32A;
-typedef WCHAR _TCHAR32W;
+typedef CHAR  _TCHARA;
+typedef WCHAR _TCHARW;
 DECL_WINELIB_TYPE_AW (_TCHAR)
-typedef UCHAR  _TUCHAR32A;
-typedef WCHAR _TUCHAR32W;
+typedef UCHAR  _TUCHARA;
+typedef WCHAR _TUCHARW;
 DECL_WINELIB_TYPE_AW (_TUCHAR)
-typedef CHAR TCHAR32A, *PTCHAR32A;
-typedef WCHAR TCHAR32W, *PTCHAR32W;
+typedef CHAR TCHARA, *PTCHARA;
+typedef WCHAR TCHARW, *PTCHARW;
 DECL_WINELIB_TYPE_AW (TCHAR)
 DECL_WINELIB_TYPE_AW (PTCHAR)
-typedef LPWSTR PTSTR32W, LPTSTR32W;
-typedef LPSTR PTSTR32A, LPTSTR32A;
+typedef LPWSTR PTSTRW, LPTSTRW;
+typedef LPSTR PTSTRA, LPTSTRA;
 DECL_WINELIB_TYPE_AW (PTSTR)
 DECL_WINELIB_TYPE_AW (LPTSTR)
 	 
diff --git a/include/thread.h b/include/thread.h
index fafa471..4eac025 100644
--- a/include/thread.h
+++ b/include/thread.h
@@ -28,7 +28,7 @@
 #define USE_THREADS
 #endif
 
-struct _PDB32;
+struct _PDB;
 
 /* Thread exception block */
 typedef struct _TEB
@@ -48,7 +48,7 @@
     HQUEUE16     queue;          /* 28 Message queue */
     WORD         pad1;           /* 2a */
     LPVOID      *tls_ptr;        /* 2c Pointer to TLS array */
-    struct _PDB32 *process;      /* 30 owning process (used by NT3.51 applets)*/
+    struct _PDB *process;      /* 30 owning process (used by NT3.51 applets)*/
 } TEB;
 
 /* Thread exception flags */
@@ -59,8 +59,8 @@
 typedef struct _THDB
 {
     K32OBJ         header;         /*  00 Kernel object header */
-    struct _PDB32 *process;        /*  08 Process owning this thread */
-    HANDLE32       event;          /*  0c Thread event */
+    struct _PDB *process;        /*  08 Process owning this thread */
+    HANDLE       event;          /*  0c Thread event */
     TEB            teb;            /*  10 Thread exception block */
     DWORD          flags;          /*  44 Flags */
     DWORD          exit_code;      /*  48 Termination status */
@@ -122,13 +122,13 @@
 
 
 /* scheduler/thread.c */
-extern THDB *THREAD_CreateInitialThread( struct _PDB32 *pdb );
-extern THDB *THREAD_Create( struct _PDB32 *pdb, DWORD stack_size,
-                            BOOL32 alloc_stack16,
+extern THDB *THREAD_CreateInitialThread( struct _PDB *pdb );
+extern THDB *THREAD_Create( struct _PDB *pdb, DWORD stack_size,
+                            BOOL alloc_stack16,
                             int *server_thandle, int *server_phandle,
                             LPTHREAD_START_ROUTINE start_addr, LPVOID param );
 extern THDB *THREAD_Current(void);
-extern BOOL32 THREAD_IsWin16( THDB *thdb );
+extern BOOL THREAD_IsWin16( THDB *thdb );
 extern THDB *THREAD_IdToTHDB( DWORD id );
 extern void THREAD_Start( THDB *thdb );
 extern DWORD THREAD_TlsAlloc( THDB *thread );
diff --git a/include/toolbar.h b/include/toolbar.h
index 55a4274..2c943c0 100644
--- a/include/toolbar.h
+++ b/include/toolbar.h
@@ -10,54 +10,54 @@
 
 typedef struct tagTBUTTON_INFO
 {
-    INT32 iBitmap;
-    INT32 idCommand;
+    INT iBitmap;
+    INT idCommand;
     BYTE  fsState;
     BYTE  fsStyle;
     DWORD dwData;
-    INT32 iString;
+    INT iString;
 
-    INT32 nRow;
-    RECT32 rect;
+    INT nRow;
+    RECT rect;
 } TBUTTON_INFO; 
 
 
 typedef struct tagTOOLBAR_INFO
 {
     DWORD      dwStructSize;   /* size of TBBUTTON struct */
-    INT32      nHeight;        /* height of the toolbar */
-    INT32      nWidth;         /* width of the toolbar */
-    INT32      nButtonHeight;
-    INT32      nButtonWidth;
-    INT32      nBitmapHeight;
-    INT32      nBitmapWidth;
-    INT32      nIndent;
-    INT32      nRows;           /* number of button rows */
-    INT32      nMaxTextRows;    /* maximum number of text rows */
-    INT32      cxMin;           /* minimum button width */
-    INT32      cxMax;           /* maximum button width */
-    INT32      nNumButtons;     /* number of buttons */
-    INT32      nNumBitmaps;     /* number of bitmaps */
-    INT32      nNumStrings;     /* number of strings */
-    BOOL32     bUnicode;        /* ASCII (FALSE) or Unicode (TRUE)? */
-    BOOL32     bCaptured;       /* mouse captured? */
-    INT32      nButtonDown;
-    INT32      nOldHit;
-    INT32      nHotItem;        /* index of the "hot" item */
-    HFONT32    hFont;           /* text font */
+    INT      nHeight;        /* height of the toolbar */
+    INT      nWidth;         /* width of the toolbar */
+    INT      nButtonHeight;
+    INT      nButtonWidth;
+    INT      nBitmapHeight;
+    INT      nBitmapWidth;
+    INT      nIndent;
+    INT      nRows;           /* number of button rows */
+    INT      nMaxTextRows;    /* maximum number of text rows */
+    INT      cxMin;           /* minimum button width */
+    INT      cxMax;           /* maximum button width */
+    INT      nNumButtons;     /* number of buttons */
+    INT      nNumBitmaps;     /* number of bitmaps */
+    INT      nNumStrings;     /* number of strings */
+    BOOL     bUnicode;        /* ASCII (FALSE) or Unicode (TRUE)? */
+    BOOL     bCaptured;       /* mouse captured? */
+    INT      nButtonDown;
+    INT      nOldHit;
+    INT      nHotItem;        /* index of the "hot" item */
+    HFONT    hFont;           /* text font */
     HIMAGELIST himlStd;         /* standard image list */
     HIMAGELIST himlDef;         /* default image list */
     HIMAGELIST himlHot;         /* hot image list */
     HIMAGELIST himlDis;         /* disabled image list */
-    HWND32     hwndToolTip;     /* handle to tool tip control */
-    HWND32     hwndNotify;      /* handle to the window that gets notifications */
-    BOOL32     bTransparent;    /* background transparency flag */
-    BOOL32     bAutoSize;       /* auto size deadlock indicator */
+    HWND     hwndToolTip;     /* handle to tool tip control */
+    HWND     hwndNotify;      /* handle to the window that gets notifications */
+    BOOL     bTransparent;    /* background transparency flag */
+    BOOL     bAutoSize;       /* auto size deadlock indicator */
     DWORD      dwExStyle;       /* extended toolbar style */
     DWORD      dwDTFlags;       /* DrawText flags */
 
     COLORREF   clrInsertMark;   /* insert mark color */
-    RECT32     rcBound;         /* bounding rectangle */
+    RECT     rcBound;         /* bounding rectangle */
 
     TBUTTON_INFO *buttons;      /* pointer to button array */
     LPWSTR       *strings;      /* pointer to string array */
diff --git a/include/toolhelp.h b/include/toolhelp.h
index 1286d3d..e416ed0 100644
--- a/include/toolhelp.h
+++ b/include/toolhelp.h
@@ -77,12 +77,12 @@
 /* wFlags values */
 #define GF_PDB_OWNER        0x0100      /* Low byte is KERNEL flags */
 
-WORD   WINAPI GlobalHandleToSel( HGLOBAL16 handle );
-BOOL16 WINAPI GlobalInfo( GLOBALINFO *pInfo );
-BOOL16 WINAPI GlobalFirst( GLOBALENTRY *pGlobal, WORD wFlags );
-BOOL16 WINAPI GlobalNext( GLOBALENTRY *pGlobal, WORD wFlags) ;
-BOOL16 WINAPI GlobalEntryHandle( GLOBALENTRY *pGlobal, HGLOBAL16 hItem );
-BOOL16 WINAPI GlobalEntryModule( GLOBALENTRY *pGlobal, HMODULE16 hModule,
+WORD   WINAPI GlobalHandleToSel16( HGLOBAL16 handle );
+BOOL16 WINAPI GlobalInfo16( GLOBALINFO *pInfo );
+BOOL16 WINAPI GlobalFirst16( GLOBALENTRY *pGlobal, WORD wFlags );
+BOOL16 WINAPI GlobalNext16( GLOBALENTRY *pGlobal, WORD wFlags) ;
+BOOL16 WINAPI GlobalEntryHandle16( GLOBALENTRY *pGlobal, HGLOBAL16 hItem );
+BOOL16 WINAPI GlobalEntryModule16( GLOBALENTRY *pGlobal, HMODULE16 hModule,
                                  WORD wSeg );
 
 /* Local heap */
@@ -157,9 +157,9 @@
 #define LT_USER_HANDLETABLE         32
 #define LT_USER_MAX                 LT_USER_HANDLETABLE
 
-BOOL16 WINAPI LocalInfo( LOCALINFO *pLocalInfo, HGLOBAL16 handle );
-BOOL16 WINAPI LocalFirst( LOCALENTRY *pLocalEntry, HGLOBAL16 handle );
-BOOL16 WINAPI LocalNext( LOCALENTRY *pLocalEntry );
+BOOL16 WINAPI LocalInfo16( LOCALINFO *pLocalInfo, HGLOBAL16 handle );
+BOOL16 WINAPI LocalFirst16( LOCALENTRY *pLocalEntry, HGLOBAL16 handle );
+BOOL16 WINAPI LocalNext16( LOCALENTRY *pLocalEntry );
 
 /* Local 32-bit heap */
 
@@ -191,9 +191,9 @@
 /* LOCAL32ENTRY.wFlags same as LOCALENTRY.wFlags */
 /* LOCAL32ENTRY.wType same as LOCALENTRY.wType */
 
-BOOL16 WINAPI Local32Info( LOCAL32INFO *pLocal32Info, HGLOBAL16 handle );
-BOOL16 WINAPI Local32First( LOCAL32ENTRY *pLocal32Entry, HGLOBAL16 handle );
-BOOL16 WINAPI Local32Next( LOCAL32ENTRY *pLocal32Entry );
+BOOL16 WINAPI Local32Info16( LOCAL32INFO *pLocal32Info, HGLOBAL16 handle );
+BOOL16 WINAPI Local32First16( LOCAL32ENTRY *pLocal32Entry, HGLOBAL16 handle );
+BOOL16 WINAPI Local32Next16( LOCAL32ENTRY *pLocal32Entry );
 
 
 /* modules */
@@ -208,10 +208,10 @@
     HANDLE16   wNext;
 } MODULEENTRY, *LPMODULEENTRY;
 
-BOOL16 WINAPI ModuleFirst(MODULEENTRY *lpModule);
-BOOL16 WINAPI ModuleNext(MODULEENTRY *lpModule);
-BOOL16 WINAPI ModuleFindName(MODULEENTRY *lpModule, LPCSTR lpstrName);
-BOOL16 WINAPI ModuleFindHandle(MODULEENTRY *lpModule, HMODULE16 hModule);
+BOOL16 WINAPI ModuleFirst16(MODULEENTRY *lpModule);
+BOOL16 WINAPI ModuleNext16(MODULEENTRY *lpModule);
+BOOL16 WINAPI ModuleFindName16(MODULEENTRY *lpModule, LPCSTR lpstrName);
+BOOL16 WINAPI ModuleFindHandle16(MODULEENTRY *lpModule, HMODULE16 hModule);
 
 /* tasks */
 
@@ -234,9 +234,9 @@
     HANDLE16     hNext;
 } TASKENTRY, *LPTASKENTRY;
 
-BOOL16 WINAPI TaskFirst(LPTASKENTRY lpTask);
-BOOL16 WINAPI TaskNext(LPTASKENTRY lpTask);
-BOOL16 WINAPI TaskFindHandle(LPTASKENTRY lpTask, HTASK16 hTask);
+BOOL16 WINAPI TaskFirst16(LPTASKENTRY lpTask);
+BOOL16 WINAPI TaskNext16(LPTASKENTRY lpTask);
+BOOL16 WINAPI TaskFindHandle16(LPTASKENTRY lpTask, HTASK16 hTask);
 DWORD  WINAPI TaskSetCSIP(HTASK16 hTask, WORD wCS, WORD wIP);
 DWORD  WINAPI TaskGetCSIP(HTASK16 hTask);
 BOOL16 WINAPI TaskSwitch(HTASK16 hTask, DWORD dwNewCSIP);
@@ -267,8 +267,8 @@
     HGLOBAL16 hGDISegment;
 } SYSHEAPINFO;
 
-BOOL16 WINAPI MemManInfo(LPMEMMANINFO lpEnhMode);
-BOOL16 WINAPI SystemHeapInfo( SYSHEAPINFO *pHeapInfo );
+BOOL16 WINAPI MemManInfo16(LPMEMMANINFO lpEnhMode);
+BOOL16 WINAPI SystemHeapInfo16( SYSHEAPINFO *pHeapInfo );
 
 /* timer info */
 
@@ -278,7 +278,7 @@
 	DWORD dwmsThisVM;
 } TIMERINFO;
 
-BOOL16 WINAPI TimerCount( TIMERINFO *pTimerInfo );
+BOOL16 WINAPI TimerCount16( TIMERINFO *pTimerInfo );
 
 /* Window classes */
 
@@ -290,14 +290,14 @@
     HANDLE16  wNext;
 } CLASSENTRY;
 
-BOOL16 WINAPI ClassFirst( CLASSENTRY *pClassEntry );
-BOOL16 WINAPI ClassNext( CLASSENTRY *pClassEntry );
+BOOL16 WINAPI ClassFirst16( CLASSENTRY *pClassEntry );
+BOOL16 WINAPI ClassNext16( CLASSENTRY *pClassEntry );
 
 
 /* Memory read/write */
 
-DWORD WINAPI MemoryRead( WORD sel, DWORD offset, void *buffer, DWORD count );
-DWORD WINAPI MemoryWrite( WORD sel, DWORD offset, void *buffer, DWORD count );
+DWORD WINAPI MemoryRead16( WORD sel, DWORD offset, void *buffer, DWORD count );
+DWORD WINAPI MemoryWrite16( WORD sel, DWORD offset, void *buffer, DWORD count );
 
 /* flags to NotifyRegister() */
 #define NF_NORMAL	0	/* everything except taskswitches, debugerrors,
@@ -306,7 +306,7 @@
 #define NF_TASKSWITCH	1	/* get taskswitch information */
 #define NF_RIP		2	/* get debugerrors of system */
 
-BOOL16 WINAPI NotifyRegister(HTASK16 htask,FARPROC16 lpfnCallback,WORD wFlags);
+BOOL16 WINAPI NotifyRegister16(HTASK16 htask,FARPROC16 lpfnCallback,WORD wFlags);
 
 #define NFY_UNKNOWN	0
 #define NFY_LOADSEG	1
@@ -401,7 +401,7 @@
  * Process Entry list as created by CreateToolHelp32Snapshot 
  */
 
-typedef struct tagPROCESSENTRY32 { 
+typedef struct tagPROCESSENTRY { 
     DWORD dwSize; 
     DWORD cntUsage; 
     DWORD th32ProcessID; 
@@ -412,12 +412,12 @@
     LONG  pcPriClassBase; 
     DWORD dwFlags; 
     char szExeFile[MAX_PATH]; 
-} PROCESSENTRY32; 
-typedef PROCESSENTRY32 *  PPROCESSENTRY32; 
-typedef PROCESSENTRY32 *  LPPROCESSENTRY32; 
+} PROCESSENTRY; 
+typedef PROCESSENTRY *  PPROCESSENTRY; 
+typedef PROCESSENTRY *  LPPROCESSENTRY; 
 
-BOOL32      WINAPI Process32First(HANDLE32,LPPROCESSENTRY32);
-BOOL32      WINAPI Process32Next(HANDLE32,LPPROCESSENTRY32);
+BOOL      WINAPI Process32First(HANDLE,LPPROCESSENTRY);
+BOOL      WINAPI Process32Next(HANDLE,LPPROCESSENTRY);
 
 
 #endif /* __WINE_TOOLHELP_H */
diff --git a/include/tooltips.h b/include/tooltips.h
index 22e7bb5..d932f7c 100644
--- a/include/tooltips.h
+++ b/include/tooltips.h
@@ -10,19 +10,19 @@
 
 typedef struct tagTT_SUBCLASS_INFO
 {
-    WNDPROC32 wpOrigProc;
-    HWND32    hwndToolTip;
-    UINT32    uRefCount;
+    WNDPROC wpOrigProc;
+    HWND    hwndToolTip;
+    UINT    uRefCount;
 } TT_SUBCLASS_INFO, *LPTT_SUBCLASS_INFO;
 
 
 typedef struct tagTTTOOL_INFO
 {
-    UINT32      uFlags;
-    HWND32      hwnd;
-    UINT32      uId;
-    RECT32      rect;
-    HINSTANCE32 hinst;
+    UINT      uFlags;
+    HWND      hwnd;
+    UINT      uId;
+    RECT      rect;
+    HINSTANCE hinst;
     LPWSTR      lpszText;
     LPARAM      lParam;
 } TTTOOL_INFO; 
@@ -31,24 +31,24 @@
 typedef struct tagTOOLTIPS_INFO
 {
     WCHAR      szTipText[INFOTIPSIZE];
-    BOOL32     bActive;
-    BOOL32     bTrackActive;
-    UINT32     uNumTools;
+    BOOL     bActive;
+    BOOL     bTrackActive;
+    UINT     uNumTools;
     COLORREF   clrBk;
     COLORREF   clrText;
-    HFONT32    hFont;
-    INT32      xTrackPos;
-    INT32      yTrackPos;
-    INT32      nMaxTipWidth;
-    INT32      nTool;
-    INT32      nOldTool;
-    INT32      nCurrentTool;
-    INT32      nTrackTool;
-    INT32      nAutomaticTime;
-    INT32      nReshowTime;
-    INT32      nAutoPopTime;
-    INT32      nInitialTime;
-    RECT32     rcMargin;
+    HFONT    hFont;
+    INT      xTrackPos;
+    INT      yTrackPos;
+    INT      nMaxTipWidth;
+    INT      nTool;
+    INT      nOldTool;
+    INT      nCurrentTool;
+    INT      nTrackTool;
+    INT      nAutomaticTime;
+    INT      nReshowTime;
+    INT      nAutoPopTime;
+    INT      nInitialTime;
+    RECT     rcMargin;
 
     TTTOOL_INFO *tools;
 } TOOLTIPS_INFO;
diff --git a/include/trackbar.h b/include/trackbar.h
index 468791e..39884b2 100644
--- a/include/trackbar.h
+++ b/include/trackbar.h
@@ -9,29 +9,29 @@
 
 typedef struct tagTRACKBAR_INFO
 {
-    INT32  nRangeMin;
-    INT32  nRangeMax;
-    INT32  nLineSize;
-    INT32  nPageSize;
-    INT32  nSelMin;
-    INT32  nSelMax;
-    INT32  nPos;
-    UINT32 uThumbLen;
-    UINT32 uNumTics;
-	UINT32  uTicFreq;
-	HWND32 hwndNotify;
-    HWND32 hwndToolTip;
-    HWND32 hwndBuddyLA;
-    HWND32 hwndBuddyRB;
-    INT32  fLocation;
+    INT  nRangeMin;
+    INT  nRangeMax;
+    INT  nLineSize;
+    INT  nPageSize;
+    INT  nSelMin;
+    INT  nSelMax;
+    INT  nPos;
+    UINT uThumbLen;
+    UINT uNumTics;
+	UINT  uTicFreq;
+	HWND hwndNotify;
+    HWND hwndToolTip;
+    HWND hwndBuddyLA;
+    HWND hwndBuddyRB;
+    INT  fLocation;
 	COLORREF clrBk;
 	
-	INT32  flags;
-    BOOL32 bFocus;
-    RECT32 rcChannel;
-    RECT32 rcSelection;
-    RECT32 rcThumb;
-	INT32  dragPos;
+	INT  flags;
+    BOOL bFocus;
+    RECT rcChannel;
+    RECT rcSelection;
+    RECT rcThumb;
+	INT  dragPos;
     LPLONG tics;
 } TRACKBAR_INFO;
 
diff --git a/include/treeview.h b/include/treeview.h
index a2d98f8..aab9775 100644
--- a/include/treeview.h
+++ b/include/treeview.h
@@ -17,10 +17,10 @@
 /* internal structures */
 
 typedef struct {
-    UINT32 mask;
+    UINT mask;
     HTREEITEM hItem;
-    UINT32 state;
-    UINT32 stateMask;
+    UINT state;
+    UINT stateMask;
     LPSTR pszText;
     int cchTextMax;
     int iImage;
@@ -36,30 +36,30 @@
 	HTREEITEM sibling;        /* handle to next item in list, 0 if last */
 	HTREEITEM upsibling;      /* handle to previous item in list, 0 if first */
 	int visible;
-    RECT32 rect;
-	RECT32 text;
+    RECT rect;
+	RECT text;
 } TREEVIEW_ITEM;
 
 
 
 typedef struct tagTREEVIEW_INFO
 {
-    UINT32	uInternalStatus;		
-	UINT32  bAutoSize;			/* merge with uInternalStatus */
-	INT32	Timer;
-    UINT32  uNumItems;	/* number of valid TREEVIEW_ITEMs */
-    UINT32	uNumPtrsAlloced; 
+    UINT	uInternalStatus;		
+	UINT  bAutoSize;			/* merge with uInternalStatus */
+	INT	Timer;
+    UINT  uNumItems;	/* number of valid TREEVIEW_ITEMs */
+    UINT	uNumPtrsAlloced; 
     HTREEITEM	uMaxHandle;	/* needed for delete_item */
     HTREEITEM 	TopRootItem;	/* handle to first item in treeview */
-	INT32	cdmode;		/* last custom draw setting */
+	INT	cdmode;		/* last custom draw setting */
 
-	UINT32	uItemHeight;		/* item height, -1 for default item height */
-	UINT32 	uRealItemHeight;	/* current item height in pixels */
-	UINT32	uVisibleHeight;	    /* visible height of treeview in pixels */
-    UINT32	uTotalHeight;		/* total height of treeview in pixels */
-	UINT32	uVisibleWidth;	    
-    UINT32	uTotalWidth;	
-    UINT32	uIndent;			/* indentation in pixels */
+	UINT	uItemHeight;		/* item height, -1 for default item height */
+	UINT 	uRealItemHeight;	/* current item height in pixels */
+	UINT	uVisibleHeight;	    /* visible height of treeview in pixels */
+    UINT	uTotalHeight;		/* total height of treeview in pixels */
+	UINT	uVisibleWidth;	    
+    UINT	uTotalWidth;	
+    UINT	uIndent;			/* indentation in pixels */
     HTREEITEM	selectedItem;   /* handle to selected item or 0 if none */
 	HTREEITEM	focusItem;		/* handle to item that has focus, 0 if none */
 	HTREEITEM	hotItem;		/* handle currently under cursor, 0 if none */
@@ -67,19 +67,19 @@
     HTREEITEM   firstVisible;	/* handle to first visible item */
     HTREEITEM   dropItem;	/* handle to item selected by drag cursor */
 	HIMAGELIST  dragList;	/* Bitmap of dragged item */
-    INT32		cx,cy;		/* current x/y place in list */
+    INT		cx,cy;		/* current x/y place in list */
     COLORREF	clrBk;		
     COLORREF	clrText;
-    HFONT32 	hFont;
-    HFONT32 	hBoldFont;
-	HWND32		hwndToolTip;
-	HWND32		hwndEdit;
-	WNDPROC32   wpEditOrig;     /* needed for subclassing edit control */
+    HFONT 	hFont;
+    HFONT 	hBoldFont;
+	HWND		hwndToolTip;
+	HWND		hwndEdit;
+	WNDPROC   wpEditOrig;     /* needed for subclassing edit control */
 
     HIMAGELIST	himlNormal;	
     HIMAGELIST	himlState;
     TREEVIEW_ITEM *items;	/* itemlist */
-    INT32		*freeList;	/* bitmap indicating which elements are valid */
+    INT		*freeList;	/* bitmap indicating which elements are valid */
 				/* 1=valid, 0=free; 	*/
 				/* size of list= uNumPtrsAlloced/32 */
 
diff --git a/include/ttydrv.h b/include/ttydrv.h
index 8600722..3a5e32b 100644
--- a/include/ttydrv.h
+++ b/include/ttydrv.h
@@ -18,20 +18,20 @@
 typedef struct {
 } TTYDRV_PDEVICE;
 
-extern BOOL32 TTYDRV_GDI_Initialize(void);
+extern BOOL TTYDRV_GDI_Initialize(void);
 extern void TTDRV_GDI_Finalize(void);
-extern BOOL32 TTYDRV_GDI_CreateDC(struct tagDC *dc, LPCSTR driver, LPCSTR device, LPCSTR output, const DEVMODE16 *initData);
-extern BOOL32 TTYDRV_GDI_DeleteDC(struct tagDC *dc);
-extern INT32 TTYDRV_GDI_Escape(struct tagDC *dc, INT32 nEscape, INT32 cbInput, SEGPTR lpInData, SEGPTR lpOutData);
+extern BOOL TTYDRV_GDI_CreateDC(struct tagDC *dc, LPCSTR driver, LPCSTR device, LPCSTR output, const DEVMODE16 *initData);
+extern BOOL TTYDRV_GDI_DeleteDC(struct tagDC *dc);
+extern INT TTYDRV_GDI_Escape(struct tagDC *dc, INT nEscape, INT cbInput, SEGPTR lpInData, SEGPTR lpOutData);
 
 /* TTY clipboard driver */
 
 extern struct _CLIPBOARD_DRIVER TTYDRV_CLIPBOARD_Driver;
 
 extern void TTYDRV_CLIPBOARD_EmptyClipboard(void);
-extern void TTYDRV_CLIPBOARD_SetClipboardData(UINT32 wFormat);
-extern BOOL32 TTYDRV_CLIPBOARD_RequestSelection(void);
-extern void TTYDRV_CLIPBOARD_ResetOwner(struct tagWND *pWnd, BOOL32 bFooBar);
+extern void TTYDRV_CLIPBOARD_SetClipboardData(UINT wFormat);
+extern BOOL TTYDRV_CLIPBOARD_RequestSelection(void);
+extern void TTYDRV_CLIPBOARD_ResetOwner(struct tagWND *pWnd, BOOL bFooBar);
 
 /* TTY desktop driver */
 
@@ -47,15 +47,15 @@
 
 extern struct _EVENT_DRIVER TTYDRV_EVENT_Driver;
 
-extern BOOL32 TTYDRV_EVENT_Init(void);
+extern BOOL TTYDRV_EVENT_Init(void);
 extern void TTYDRV_EVENT_AddIO(int fd, unsigned flag);
 extern void TTYDRV_EVENT_DeleteIO(int fd, unsigned flag);
-extern BOOL32 TTYDRV_EVENT_WaitNetEvent(BOOL32 sleep, BOOL32 peek);
+extern BOOL TTYDRV_EVENT_WaitNetEvent(BOOL sleep, BOOL peek);
 extern void TTYDRV_EVENT_Synchronize(void);
-extern BOOL32 TTYDRV_EVENT_CheckFocus(void);
-extern BOOL32 TTYDRV_EVENT_QueryPointer(DWORD *posX, DWORD *posY, DWORD *state);
+extern BOOL TTYDRV_EVENT_CheckFocus(void);
+extern BOOL TTYDRV_EVENT_QueryPointer(DWORD *posX, DWORD *posY, DWORD *state);
 extern void TTYDRV_EVENT_DummyMotionNotify(void);
-extern BOOL32 TTYDRV_EVENT_Pending(void);
+extern BOOL TTYDRV_EVENT_Pending(void);
 extern BOOL16 TTYDRV_EVENT_IsUserIdle(void);
 extern void TTYDRV_EVENT_WakeUp(void);
 
@@ -109,18 +109,18 @@
 
 extern void TTYDRV_WND_Initialize(struct tagWND *wndPtr);
 extern void TTYDRV_WND_Finalize(struct tagWND *wndPtr);
-extern BOOL32 TTYDRV_WND_CreateDesktopWindow(struct tagWND *wndPtr, struct tagCLASS *classPtr, BOOL32 bUnicode);
-extern BOOL32 TTYDRV_WND_CreateWindow(struct tagWND *wndPtr, struct tagCLASS *classPtr, CREATESTRUCT32A *cs, BOOL32 bUnicode);
-extern BOOL32 TTYDRV_WND_DestroyWindow(struct tagWND *pWnd);
+extern BOOL TTYDRV_WND_CreateDesktopWindow(struct tagWND *wndPtr, struct tagCLASS *classPtr, BOOL bUnicode);
+extern BOOL TTYDRV_WND_CreateWindow(struct tagWND *wndPtr, struct tagCLASS *classPtr, CREATESTRUCTA *cs, BOOL bUnicode);
+extern BOOL TTYDRV_WND_DestroyWindow(struct tagWND *pWnd);
 extern struct tagWND *TTYDRV_WND_SetParent(struct tagWND *wndPtr, struct tagWND *pWndParent);
 extern void TTYDRV_WND_ForceWindowRaise(struct tagWND *pWnd);
-extern void TTYDRV_WND_SetWindowPos(struct tagWND *wndPtr, const WINDOWPOS32 *winpos, BOOL32 bSMC_SETXPOS);
+extern void TTYDRV_WND_SetWindowPos(struct tagWND *wndPtr, const WINDOWPOS *winpos, BOOL bSMC_SETXPOS);
 extern void TTYDRV_WND_SetText(struct tagWND *wndPtr, LPCSTR text);
 extern void TTYDRV_WND_SetFocus(struct tagWND *wndPtr);
 extern void TTYDRV_WND_PreSizeMove(struct tagWND *wndPtr);
 extern void TTYDRV_WND_PostSizeMove(struct tagWND *wndPtr);
-extern void TTYDRV_WND_ScrollWindow(struct tagWND *wndPtr, struct tagDC *dcPtr, INT32 dx, INT32 dy, const RECT32 *clipRect, BOOL32 bUpdate);
-extern void TTYDRV_WND_SetDrawable(struct tagWND *wndPtr, struct tagDC *dc, WORD flags, BOOL32 bSetClipOrigin);
-extern BOOL32 TTYDRV_WND_IsSelfClipping(struct tagWND *wndPtr);
+extern void TTYDRV_WND_ScrollWindow(struct tagWND *wndPtr, struct tagDC *dcPtr, INT dx, INT dy, const RECT *clipRect, BOOL bUpdate);
+extern void TTYDRV_WND_SetDrawable(struct tagWND *wndPtr, struct tagDC *dc, WORD flags, BOOL bSetClipOrigin);
+extern BOOL TTYDRV_WND_IsSelfClipping(struct tagWND *wndPtr);
 
 #endif /* !defined(__WINE_TTYDRV_H) */
diff --git a/include/updown.h b/include/updown.h
index e33ab22..e7bfbd9 100644
--- a/include/updown.h
+++ b/include/updown.h
@@ -12,14 +12,14 @@
 
 typedef struct
 {
-  UINT32      AccelCount;   /* Number of elements in AccelVect */
+  UINT      AccelCount;   /* Number of elements in AccelVect */
   UDACCEL*    AccelVect;    /* Vector containing AccelCount elements */
-  INT32       Base;         /* Base to display nr in the buddy window */
-  INT32       CurVal;       /* Current up-down value */
-  INT32       MinVal;       /* Minimum up-down value */
-  INT32       MaxVal;       /* Maximum up-down value */
-  HWND32      Buddy;        /* Handle to the buddy window */
-  INT32       Flags;        /* Internal Flags FLAG_* */
+  INT       Base;         /* Base to display nr in the buddy window */
+  INT       CurVal;       /* Current up-down value */
+  INT       MinVal;       /* Minimum up-down value */
+  INT       MaxVal;       /* Maximum up-down value */
+  HWND      Buddy;        /* Handle to the buddy window */
+  INT       Flags;        /* Internal Flags FLAG_* */
 } UPDOWN_INFO;
 
 typedef struct tagNM_UPDOWN
diff --git a/include/ver.h b/include/ver.h
index 5ee3992..e09ec48 100644
--- a/include/ver.h
+++ b/include/ver.h
@@ -138,10 +138,10 @@
 
 #ifdef __WINE__
 
-DWORD WINAPI GetFileResourceSize32( LPCSTR lpszFileName,
+DWORD WINAPI GetFileResourceSize( LPCSTR lpszFileName,
                                     LPCSTR lpszResType, LPCSTR lpszResId,
                                     LPDWORD lpdwFileOffset );
-DWORD WINAPI GetFileResource32( LPCSTR lpszFileName,
+DWORD WINAPI GetFileResource( LPCSTR lpszFileName,
                                 LPCSTR lpszResType, LPCSTR lpszResId,
                                 DWORD dwFileOffset,
                                 DWORD dwResLen, LPVOID lpvData );
diff --git a/include/vfw.h b/include/vfw.h
index 2ceb2e3..ce4af50 100644
--- a/include/vfw.h
+++ b/include/vfw.h
@@ -29,12 +29,12 @@
 /* HIC32 struct (same layout as Win95 one) */
 typedef struct tagWINE_HIC {
 	DWORD		magic;		/* 00: 'Smag' */
-	HANDLE32	curthread;	/* 04: */
+	HANDLE	curthread;	/* 04: */
 	DWORD		type;		/* 08: */
 	DWORD		handler;	/* 0C: */
-	HDRVR32		hdrv;		/* 10: */
+	HDRVR		hdrv;		/* 10: */
 	DWORD		private;	/* 14:(handled by SendDriverMessage32)*/
-	FARPROC32	driverproc;	/* 18:(handled by SendDriverMessage32)*/
+	FARPROC	driverproc;	/* 18:(handled by SendDriverMessage32)*/
 	DWORD		x1;		/* 1c: name? */
 	WORD		x2;		/* 20: */
 	DWORD		x3;		/* 22: */
@@ -170,47 +170,41 @@
     LPVOID		lpPrev;
 } ICCOMPRESS;
 
-DWORD VFWAPIV ICCompress32(
-	HIC32 hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiOutput,LPVOID lpData,
+DWORD VFWAPIV ICCompress(
+	HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiOutput,LPVOID lpData,
 	LPBITMAPINFOHEADER lpbiInput,LPVOID lpBits,LPDWORD lpckid,
 	LPDWORD lpdwFlags,LONG lFrameNum,DWORD dwFrameSize,DWORD dwQuality,
 	LPBITMAPINFOHEADER lpbiPrev,LPVOID lpPrev
 );
 
-#define ICCompressGetFormat32(hic, lpbiInput, lpbiOutput) 		\
-	ICSendMessage32(						\
+#define ICCompressGetFormat(hic, lpbiInput, lpbiOutput) 		\
+	ICSendMessage(						\
 	    hic,ICM_COMPRESS_GET_FORMAT,(DWORD)(LPVOID)(lpbiInput),	\
 	    (DWORD)(LPVOID)(lpbiOutput)					\
 	)
-#define ICCompressGetFormat WINELIB_NAME(ICCompressGetFormat)
 
-#define ICCompressGetFormatSize32(hic,lpbi) ICCompressGetFormat32(hic,lpbi,NULL)
-#define ICCompressGetFormatSize WINELIB_NAME(ICCompressGetFormatSize)
+#define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL)
 
-#define ICCompressBegin32(hic, lpbiInput, lpbiOutput) 			\
-    ICSendMessage32(							\
+#define ICCompressBegin(hic, lpbiInput, lpbiOutput) 			\
+    ICSendMessage(							\
     	hic, ICM_COMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput),		\
 	(DWORD)(LPVOID)(lpbiOutput)					\
     )
-#define ICCompressBegin WINELIB_NAME(ICCompressBegin)
 
-#define ICCompressGetSize32(hic, lpbiInput, lpbiOutput) 		\
-    ICSendMessage32(							\
+#define ICCompressGetSize(hic, lpbiInput, lpbiOutput) 		\
+    ICSendMessage(							\
     	hic, ICM_COMPRESS_GET_SIZE, (DWORD)(LPVOID)(lpbiInput), 	\
 	(DWORD)(LPVOID)(lpbiOutput)					\
     )
-#define ICCompressGetSize WINELIB_NAME(ICCompressGetSize)
 
-#define ICCompressQuery32(hic, lpbiInput, lpbiOutput)		\
-    ICSendMessage32(						\
+#define ICCompressQuery(hic, lpbiInput, lpbiOutput)		\
+    ICSendMessage(						\
     	hic, ICM_COMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput),	\
 	(DWORD)(LPVOID)(lpbiOutput)				\
     )
-#define ICCompressQuery WINELIB_NAME(ICCompressQuery)
 
 
-#define ICCompressEnd32(hic) ICSendMessage32(hic, ICM_COMPRESS_END, 0, 0)
-#define ICCompressEnd WINELIB_NAME(ICCompressEnd)
+#define ICCompressEnd(hic) ICSendMessage(hic, ICM_COMPRESS_END, 0, 0)
 
 /* ICCOMPRESSFRAMES.dwFlags */
 #define ICCOMPRESSFRAMES_PADDING        0x00000001
@@ -260,8 +254,7 @@
 	WCHAR	szDescription[128];	/* 38:long name */
 	WCHAR	szDriver[128];		/* 138:driver that contains compressor*/
 					/* 238: */
-} ICINFO32;
-DECL_WINELIB_TYPE(ICINFO)
+} ICINFO;
 
 /* ICINFO.dwFlags */
 #define	VIDCF_QUALITY		0x0001  /* supports quality */
@@ -280,22 +273,18 @@
 /* ICM_ABOUT */
 #define ICMF_ABOUT_QUERY         0x00000001
 
-#define ICQueryAbout32(hic) \
-	(ICSendMessage32(hic,ICM_ABOUT,(DWORD)-1,ICMF_ABOUT_QUERY)==ICERR_OK)
-#define ICQueryAbout WINELIB_NAME(ICQueryAbout)
+#define ICQueryAbout(hic) \
+	(ICSendMessage(hic,ICM_ABOUT,(DWORD)-1,ICMF_ABOUT_QUERY)==ICERR_OK)
 
-#define ICAbout32(hic, hwnd) ICSendMessage32(hic,ICM_ABOUT,(DWORD)(UINT)(hwnd),0)
-#define ICAbout WINELIB_NAME(ICAbout)
+#define ICAbout(hic, hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD)(UINT)(hwnd),0)
 
 /* ICM_CONFIGURE */
 #define ICMF_CONFIGURE_QUERY	0x00000001
-#define ICQueryConfigure32(hic) \
-	(ICSendMessage32(hic,ICM_CONFIGURE,(DWORD)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK)
-#define ICQueryConfigure WINELIB_NAME(ICQueryConfigure)
+#define ICQueryConfigure(hic) \
+	(ICSendMessage(hic,ICM_CONFIGURE,(DWORD)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK)
 
-#define ICConfigure32(hic,hwnd) \
-	ICSendMessage32(hic,ICM_CONFIGURE,(DWORD)(UINT)(hwnd),0)
-#define ICConfigure WINELIB_NAME(ICConfigure)
+#define ICConfigure(hic,hwnd) \
+	ICSendMessage(hic,ICM_CONFIGURE,(DWORD)(UINT)(hwnd),0)
 
 /* Decompression stuff */
 #define ICDECOMPRESS_HURRYUP		0x80000000	/* don't draw just buffer (hurry up!) */
@@ -321,100 +310,85 @@
     LPVOID		lpDst;
 
     /* changed for ICM_DECOMPRESSEX */
-    INT32		xDst;       /* destination rectangle */
-    INT32		yDst;
-    INT32		dxDst;
-    INT32		dyDst;
+    INT		xDst;       /* destination rectangle */
+    INT		yDst;
+    INT		dxDst;
+    INT		dyDst;
 
-    INT32		xSrc;       /* source rectangle */
-    INT32		ySrc;
-    INT32		dxSrc;
-    INT32		dySrc;
+    INT		xSrc;       /* source rectangle */
+    INT		ySrc;
+    INT		dxSrc;
+    INT		dySrc;
 } ICDECOMPRESSEX;
 
-DWORD VFWAPIV ICDecompress32(HIC32 hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits);
-#define ICDecompress WINELIB_NAME(ICDecompress)
+DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits);
 
 
-#define ICDecompressBegin32(hic, lpbiInput, lpbiOutput) 	\
-    ICSendMessage32(						\
+#define ICDecompressBegin(hic, lpbiInput, lpbiOutput) 	\
+    ICSendMessage(						\
     	hic, ICM_DECOMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput),	\
 	(DWORD)(LPVOID)(lpbiOutput)				\
     )
-#define ICDecompressBegin WINELIB_NAME(ICDecompressBegin)
 
-#define ICDecompressQuery32(hic, lpbiInput, lpbiOutput) 	\
-    ICSendMessage32(						\
+#define ICDecompressQuery(hic, lpbiInput, lpbiOutput) 	\
+    ICSendMessage(						\
     	hic,ICM_DECOMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput),	\
 	(DWORD) (LPVOID)(lpbiOutput)				\
     )
-#define ICDecompressQuery WINELIB_NAME(ICDecompressQuery)
 
-#define ICDecompressGetFormat32(hic, lpbiInput, lpbiOutput)		\
-    ((LONG)ICSendMessage32(						\
+#define ICDecompressGetFormat(hic, lpbiInput, lpbiOutput)		\
+    ((LONG)ICSendMessage(						\
     	hic,ICM_DECOMPRESS_GET_FORMAT, (DWORD)(LPVOID)(lpbiInput),	\
 	(DWORD)(LPVOID)(lpbiOutput)					\
     ))
-#define ICDecompressGetFormat WINELIB_NAME(ICDecompressGetFormat)
 
-#define ICDecompressGetFormatSize32(hic, lpbi) 				\
-	ICDecompressGetFormat32(hic, lpbi, NULL)
-#define ICDecompressGetFormatSize WINELIB_NAME(ICDecompressGetFormatSize)
+#define ICDecompressGetFormatSize(hic, lpbi) 				\
+	ICDecompressGetFormat(hic, lpbi, NULL)
 
-#define ICDecompressGetPalette32(hic, lpbiInput, lpbiOutput)		\
-    ICSendMessage32(							\
+#define ICDecompressGetPalette(hic, lpbiInput, lpbiOutput)		\
+    ICSendMessage(							\
     	hic, ICM_DECOMPRESS_GET_PALETTE, (DWORD)(LPVOID)(lpbiInput), 	\
 	(DWORD)(LPVOID)(lpbiOutput)					\
     )
-#define ICDecompressGetPalette WINELIB_NAME(ICDecompressGetPalette)
 
-#define ICDecompressSetPalette32(hic,lpbiPalette)	\
-        ICSendMessage32(				\
+#define ICDecompressSetPalette(hic,lpbiPalette)	\
+        ICSendMessage(				\
 		hic,ICM_DECOMPRESS_SET_PALETTE,		\
 		(DWORD)(LPVOID)(lpbiPalette),0		\
 	)
-#define ICDecompressSetPalette WINELIB_NAME(ICDecompressSetPalette)
 
-#define ICDecompressEnd32(hic) ICSendMessage32(hic, ICM_DECOMPRESS_END, 0, 0)
-#define ICDecompressEnd WINELIB_NAME(ICDecompressEnd)
+#define ICDecompressEnd(hic) ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0)
 
 
 #define ICDRAW_QUERY        0x00000001L   /* test for support */
 #define ICDRAW_FULLSCREEN   0x00000002L   /* draw to full screen */
 #define ICDRAW_HDC          0x00000004L   /* draw to a HDC/HWND */
 
-BOOL32	VFWAPI	ICInfo32(DWORD fccType, DWORD fccHandler, ICINFO32 * lpicinfo);
-#define ICInfo WINELIB_NAME(ICInfo)
-LRESULT	VFWAPI	ICGetInfo32(HIC32 hic,ICINFO32 *picinfo, DWORD cb);
-#define ICGetInfo WINELIB_NAME(ICGetInfo)
-HIC32	VFWAPI	ICOpen32(DWORD fccType, DWORD fccHandler, UINT32 wMode);
-#define ICOpen WINELIB_NAME(ICOpen)
-LRESULT VFWAPI ICClose32(HIC32 hic);
-#define ICClose WINELIB_NAME(ICClose)
-LRESULT	VFWAPI	ICSendMessage32(HIC32 hic, UINT32 msg, DWORD dw1, DWORD dw2);
-#define ICSendMessage WINELIB_NAME(ICSendMessage)
-HIC32	VFWAPI ICLocate32(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
-#define ICLocate WINELIB_NAME(ICLocate)
+BOOL	VFWAPI	ICInfo(DWORD fccType, DWORD fccHandler, ICINFO * lpicinfo);
+LRESULT	VFWAPI	ICGetInfo(HIC hic,ICINFO *picinfo, DWORD cb);
+HIC	VFWAPI	ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode);
+LRESULT VFWAPI ICClose(HIC hic);
+LRESULT	VFWAPI	ICSendMessage(HIC hic, UINT msg, DWORD dw1, DWORD dw2);
+HIC	VFWAPI ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
 
-DWORD	VFWAPIV	ICDrawBegin32(
-        HIC32			hic,
+DWORD	VFWAPIV	ICDrawBegin(
+        HIC			hic,
         DWORD			dwFlags,/* flags */
-        HPALETTE32		hpal,	/* palette to draw with */
-        HWND32			hwnd,	/* window to draw to */
-        HDC32			hdc,	/* HDC to draw to */
-        INT32			xDst,	/* destination rectangle */
-        INT32			yDst,
-        INT32			dxDst,
-        INT32			dyDst,
+        HPALETTE		hpal,	/* palette to draw with */
+        HWND			hwnd,	/* window to draw to */
+        HDC			hdc,	/* HDC to draw to */
+        INT			xDst,	/* destination rectangle */
+        INT			yDst,
+        INT			dxDst,
+        INT			dyDst,
         LPBITMAPINFOHEADER	lpbi,	/* format of frame to draw */
-        INT32			xSrc,	/* source rectangle */
-        INT32			ySrc,
-        INT32			dxSrc,
-        INT32			dySrc,
+        INT			xSrc,	/* source rectangle */
+        INT			ySrc,
+        INT			dxSrc,
+        INT			dySrc,
         DWORD			dwRate,	/* frames/second = (dwRate/dwScale) */
         DWORD			dwScale
 );
-#define ICDrawBegin WINELIB_NAME(ICDrawBegin)
 
 /********************* AVIFILE function declarations *************************/
 
@@ -503,7 +477,7 @@
 
 #define	AVIGETFRAMEF_BESTDISPLAYFMT	1
 
-typedef struct _AVISTREAMINFO32A {
+typedef struct _AVISTREAMINFOA {
     DWORD	fccType;
     DWORD	fccHandler;
     DWORD	dwFlags;        /* AVIIF_* */
@@ -518,13 +492,13 @@
     DWORD	dwSuggestedBufferSize;
     DWORD	dwQuality;
     DWORD	dwSampleSize;
-    RECT32	rcFrame;
+    RECT	rcFrame;
     DWORD	dwEditCount;
     DWORD	dwFormatChangeCount;
     CHAR	szName[64];
-} AVISTREAMINFO32A, * LPAVISTREAMINFO32A, *PAVISTREAMINFO32A;
+} AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA;
 
-typedef struct _AVISTREAMINFO32W {
+typedef struct _AVISTREAMINFOW {
     DWORD	fccType;
     DWORD	fccHandler;
     DWORD	dwFlags;
@@ -539,11 +513,11 @@
     DWORD	dwSuggestedBufferSize;
     DWORD	dwQuality;
     DWORD	dwSampleSize;
-    RECT32	rcFrame;
+    RECT	rcFrame;
     DWORD	dwEditCount;
     DWORD	dwFormatChangeCount;
     WCHAR	szName[64];
-} AVISTREAMINFO32W, * LPAVISTREAMINFO32W, *PAVISTREAMINFO32W;
+} AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW;
 DECL_WINELIB_TYPE_AW(AVISTREAMINFO)
 DECL_WINELIB_TYPE_AW(LPAVISTREAMINFO)
 DECL_WINELIB_TYPE_AW(PAVISTREAMINFO)
@@ -564,7 +538,7 @@
 #define AVIFILECAPS_ALLKEYFRAMES	0x00000010
 #define AVIFILECAPS_NOCOMPRESSION	0x00000020
 
-typedef struct _AVIFILEINFO32W {
+typedef struct _AVIFILEINFOW {
     DWORD               dwMaxBytesPerSec;
     DWORD               dwFlags;
     DWORD               dwCaps;
@@ -577,8 +551,8 @@
     DWORD               dwLength;
     DWORD               dwEditCount;
     WCHAR               szFileType[64];
-} AVIFILEINFO32W, * LPAVIFILEINFO32W, *PAVIFILEINFO32W;
-typedef struct _AVIFILEINFO32A {
+} AVIFILEINFOW, * LPAVIFILEINFOW, *PAVIFILEINFOW;
+typedef struct _AVIFILEINFOA {
     DWORD               dwMaxBytesPerSec;
     DWORD               dwFlags;
     DWORD               dwCaps;
@@ -591,7 +565,7 @@
     DWORD               dwLength;
     DWORD               dwEditCount;
     CHAR		szFileType[64];
-} AVIFILEINFO32A, * LPAVIFILEINFO32A, *PAVIFILEINFO32A;
+} AVIFILEINFOA, * LPAVIFILEINFOA, *PAVIFILEINFOA;
 DECL_WINELIB_TYPE_AW(AVIFILEINFO)
 DECL_WINELIB_TYPE_AW(PAVIFILEINFO)
 DECL_WINELIB_TYPE_AW(LPAVIFILEINFO)
@@ -631,11 +605,11 @@
 
 
 /* IAVIStream32 interface. */
-#define ICOM_INTERFACE IAVIStream32
-typedef struct IAVIStream32 IAVIStream32,*PAVISTREAM32;
-ICOM_BEGIN(IAVIStream32, IUnknown)
+#define ICOM_INTERFACE IAVIStream
+typedef struct IAVIStream IAVIStream,*PAVISTREAM;
+ICOM_BEGIN(IAVIStream, IUnknown)
     ICOM_METHOD2(HRESULT,Create,LPARAM,,LPARAM,);
-    ICOM_METHOD2(HRESULT,Info,AVISTREAMINFO32W*,,LONG,);
+    ICOM_METHOD2(HRESULT,Info,AVISTREAMINFOW*,,LONG,);
     ICOM_METHOD2(LONG,FindSample,LONG,,LONG,);
     ICOM_METHOD3(HRESULT,ReadFormat,LONG,,LPVOID,,LONG*,);
     ICOM_METHOD3(HRESULT,SetFormat,LONG,,LPVOID,,LONG,);
@@ -644,43 +618,37 @@
     ICOM_METHOD2(HRESULT,Delete,LONG,,LONG,);
     ICOM_METHOD3(HRESULT,ReadData,DWORD,,LPVOID,,LONG*,);
     ICOM_METHOD3(HRESULT,WriteData,DWORD,,LPVOID,,LONG,);
-    ICOM_METHOD2(HRESULT,SetInfo,AVISTREAMINFO32W*,,LONG,);
-ICOM_END(IAVIStream32)
+    ICOM_METHOD2(HRESULT,SetInfo,AVISTREAMINFOW*,,LONG,);
+ICOM_END(IAVIStream)
 #undef ICOM_INTERFACE
 
-DECL_WINELIB_TYPE(IAVIStream)
-DECL_WINELIB_TYPE(PAVISTREAM)
 
 /* IAVIFile32 interface. In Win32 this interface uses UNICODE only */
-#define ICOM_INTERFACE IAVIFile32
-typedef struct IAVIFile32 IAVIFile32,*PAVIFILE32;
-ICOM_BEGIN(IAVIFile32,IUnknown)
-	ICOM_METHOD2(HRESULT,Info,AVIFILEINFO32W*,,LONG,);
-	ICOM_METHOD3(HRESULT,GetStream,PAVISTREAM32*,,DWORD,,LONG,);
-	ICOM_METHOD2(HRESULT,CreateStream,PAVISTREAM32*,,AVISTREAMINFO32W*,);
+#define ICOM_INTERFACE IAVIFile
+typedef struct IAVIFile IAVIFile,*PAVIFILE;
+ICOM_BEGIN(IAVIFile,IUnknown)
+	ICOM_METHOD2(HRESULT,Info,AVIFILEINFOW*,,LONG,);
+	ICOM_METHOD3(HRESULT,GetStream,PAVISTREAM*,,DWORD,,LONG,);
+	ICOM_METHOD2(HRESULT,CreateStream,PAVISTREAM*,,AVISTREAMINFOW*,);
 	ICOM_METHOD3(HRESULT,WriteData,DWORD,,LPVOID,,LONG,);
 	ICOM_METHOD3(HRESULT,ReadData,DWORD,,LPVOID,,LONG*,);
 	ICOM_METHOD (HRESULT,EndRecord);
 	ICOM_METHOD2(HRESULT,DeleteStream,DWORD,,LONG,);
-ICOM_END(IAVIFile32)
+ICOM_END(IAVIFile)
 #undef ICOM_INTERFACE
 
-DECL_WINELIB_TYPE(IAVIFile)
-DECL_WINELIB_TYPE(PAVIFILE)
 
 /* IGetFrame32 interface */
-#define ICOM_INTERFACE IGetFrame32
-typedef struct IGetFrame32 IGetFrame32,*PGETFRAME32;
-ICOM_BEGIN(IGetFrame32,IUnknown)
+#define ICOM_INTERFACE IGetFrame
+typedef struct IGetFrame IGetFrame,*PGETFRAME;
+ICOM_BEGIN(IGetFrame,IUnknown)
 	ICOM_METHOD1(LPVOID,GetFrame,LONG,);
 	ICOM_METHOD3(HRESULT,Begin,LONG,,LONG,,LONG,);
 	ICOM_METHOD (HRESULT,End);
-	ICOM_METHOD6(HRESULT,SetFormat,LPBITMAPINFOHEADER,,LPVOID,,INT32,,INT32,,INT32,,INT32,);
-ICOM_END(IGetFrame32)
+	ICOM_METHOD6(HRESULT,SetFormat,LPBITMAPINFOHEADER,,LPVOID,,INT,,INT,,INT,,INT,);
+ICOM_END(IGetFrame)
 #undef ICOM_INTERFACE
 
-DECL_WINELIB_TYPE(IGetFrame)
-DECL_WINELIB_TYPE(PGETFRAME)
 
 #define AVIERR_OK		0
 #define MAKE_AVIERR(error)	MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+error)
@@ -705,55 +673,37 @@
 #define AVIERR_USERABORT	MAKE_AVIERR(198)
 #define AVIERR_ERROR		MAKE_AVIERR(199)
 
-HRESULT WINAPI AVIMakeCompressedStream32(PAVISTREAM32*ppsCompressed,PAVISTREAM32 ppsSource,AVICOMPRESSOPTIONS *lpOptions,CLSID*pclsidHandler); 
+HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *lpOptions,CLSID*pclsidHandler); 
 #define AVIMakeCompressedStream WINELIB_NAME_AW(AVIMakeCompressedStream)
-HRESULT WINAPI AVIStreamSetFormat32(PAVISTREAM32 iface,LONG pos,LPVOID format,LONG formatsize);
-#define AVIStreamSetFormat WINELIB_NAME(AVIStreamSetFormat)
-HRESULT WINAPI AVIStreamWrite32(PAVISTREAM32 iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);
-#define AVIStreamWrite WINELIB_NAME(AVIStreamWrite)
-ULONG WINAPI AVIStreamRelease32(PAVISTREAM32 iface);
-#define AVIStreamRelease WINELIB_NAME(AVIStreamRelease)
-LONG WINAPI AVIStreamStart32(PAVISTREAM32 iface);
-#define AVIStreamStart WINELIB_NAME(AVIStreamStart)
-LONG WINAPI AVIStreamLength32(PAVISTREAM32 iface);
-#define AVIStreamLength WINELIB_NAME(AVIStreamLength)
-HRESULT WINAPI AVIStreamReadFormat32(PAVISTREAM32 iface,LONG pos,LPVOID format,LONG *formatsize);
-#define AVIStreamReadFormat WINELIB_NAME(AVIStreamReadFormat)
-HRESULT WINAPI AVIStreamWrite32(PAVISTREAM32 iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);
-#define AVIStreamWrite WINELIB_NAME(AVIStreamWrite)
-HRESULT WINAPI AVIStreamRead32(PAVISTREAM32 iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread);
-#define AVIStreamRead WINELIB_NAME(AVIStreamRead)
-HRESULT WINAPI AVIStreamWriteData32(PAVISTREAM32 iface,DWORD fcc,LPVOID lp,LONG size);
-#define AVIStreamWriteData WINELIB_NAME(AVIStreamWriteData)
-HRESULT WINAPI AVIStreamReadData32(PAVISTREAM32 iface,DWORD fcc,LPVOID lp,LONG *lpread);
-#define AVIStreamReadData WINELIB_NAME(AVIStreamReadData)
-HRESULT WINAPI AVIStreamInfo32A(PAVISTREAM32 iface,AVISTREAMINFO32A *asi,LONG size);
-HRESULT WINAPI AVIStreamInfo32W(PAVISTREAM32 iface,AVISTREAMINFO32W *asi,LONG size);
+HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG formatsize);
+HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);
+ULONG WINAPI AVIStreamRelease(PAVISTREAM iface);
+LONG WINAPI AVIStreamStart(PAVISTREAM iface);
+LONG WINAPI AVIStreamLength(PAVISTREAM iface);
+HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG *formatsize);
+HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);
+HRESULT WINAPI AVIStreamRead(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread);
+HRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size);
+HRESULT WINAPI AVIStreamReadData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG *lpread);
+HRESULT WINAPI AVIStreamInfoA(PAVISTREAM iface,AVISTREAMINFOA *asi,LONG size);
+HRESULT WINAPI AVIStreamInfoW(PAVISTREAM iface,AVISTREAMINFOW *asi,LONG size);
 #define AVIStreamInfo WINELIB_NAME_AW(AVIStreamInfo)
-PGETFRAME32 WINAPI AVIStreamGetFrameOpen32(PAVISTREAM32 pavi,LPBITMAPINFOHEADER lpbiWanted);
-#define AVIStreamGetFrameOpen WINELIB_NAME(AVIStreamGetFrameOpen)
-HRESULT WINAPI AVIStreamGetFrameClose32(PGETFRAME32 pg);
-#define AVIStreamGetFrameClose WINELIB_NAME(AVIStreamGetFrameClose)
-PGETFRAME32 WINAPI AVIStreamGetFrameOpen32(PAVISTREAM32 pavi,LPBITMAPINFOHEADER lpbiWanted);
-#define AVIStreamGetFrameOpen WINELIB_NAME(AVIStreamGetFrameOpen)
-LPVOID WINAPI AVIStreamGetFrame32(PGETFRAME32 pg,LONG pos);
-#define AVIStreamGetFrame WINELIB_NAME(AVIStreamGetFrame)
+PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pavi,LPBITMAPINFOHEADER lpbiWanted);
+HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg);
+PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pavi,LPBITMAPINFOHEADER lpbiWanted);
+LPVOID WINAPI AVIStreamGetFrame(PGETFRAME pg,LONG pos);
 
-void WINAPI AVIFileInit32(void);
-#define AVIFileInit WINELIB_NAME(AVIFileInit)
-HRESULT WINAPI AVIFileOpen32A(PAVIFILE32 * ppfile,LPCSTR szFile,UINT32 uMode,LPCLSID lpHandler);
+void WINAPI AVIFileInit(void);
+HRESULT WINAPI AVIFileOpenA(PAVIFILE * ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler);
 #define AVIFileOpen WINELIB_NAME_AW(AVIFileOpen)
-HRESULT WINAPI AVIFileCreateStream32A(PAVIFILE32 pfile,PAVISTREAM32 *ppavi,AVISTREAMINFO32A * psi);
-HRESULT WINAPI AVIFileCreateStream32W(PAVIFILE32 pfile,PAVISTREAM32 *ppavi,AVISTREAMINFO32W * psi);
+HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE pfile,PAVISTREAM *ppavi,AVISTREAMINFOA * psi);
+HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE pfile,PAVISTREAM *ppavi,AVISTREAMINFOW * psi);
 #define AVIFileCreateStream WINELIB_NAME_AW(AVIFileCreateStream)
-ULONG WINAPI AVIFileRelease32(PAVIFILE32 iface);
-#define AVIFileRelease WINELIB_NAME(AVIFileRelease)
-HRESULT WINAPI AVIFileInfo32A(PAVIFILE32 pfile,PAVIFILEINFO32A,LONG);
-HRESULT WINAPI AVIFileInfo32W(PAVIFILE32 pfile,PAVIFILEINFO32W,LONG);
+ULONG WINAPI AVIFileRelease(PAVIFILE iface);
+HRESULT WINAPI AVIFileInfoA(PAVIFILE pfile,PAVIFILEINFOA,LONG);
+HRESULT WINAPI AVIFileInfoW(PAVIFILE pfile,PAVIFILEINFOW,LONG);
 #define AVIFileInfo WINELIB_NAME_AW(AVIFileInfo)
-HRESULT WINAPI AVIFileGetStream32(PAVIFILE32 pfile,PAVISTREAM32*avis,DWORD fccType,LONG lParam);
-#define AVIFileGetStream WINELIB_NAME(AVIFileGetStream)
-void WINAPI AVIFileExit32(void);
-#define AVIFileExit WINELIB_NAME(AVIFileExit)
+HRESULT WINAPI AVIFileGetStream(PAVIFILE pfile,PAVISTREAM*avis,DWORD fccType,LONG lParam);
+void WINAPI AVIFileExit(void);
 
 #endif
diff --git a/include/win.h b/include/win.h
index 64763f6..f81eeed 100644
--- a/include/win.h
+++ b/include/win.h
@@ -61,10 +61,10 @@
     struct tagCLASS *class;       /* Window class */
     HWINDOWPROC    winproc;       /* Window procedure */
     DWORD          dwMagic;       /* Magic number (must be WND_MAGIC) */
-    HWND32         hwndSelf;      /* Handle of this window */
-    HINSTANCE32    hInstance;     /* Window hInstance (from CreateWindow) */
-    RECT32         rectClient;    /* Client area rel. to parent client area */
-    RECT32         rectWindow;    /* Whole window rel. to parent client area */
+    HWND         hwndSelf;      /* Handle of this window */
+    HINSTANCE    hInstance;     /* Window hInstance (from CreateWindow) */
+    RECT         rectClient;    /* Client area rel. to parent client area */
+    RECT         rectWindow;    /* Whole window rel. to parent client area */
     LPSTR          text;          /* Window text */
     void          *pVScroll;      /* Vertical scroll-bar info */
     void          *pHScroll;      /* Horizontal scroll-bar info */
@@ -72,10 +72,10 @@
     struct tagDCE *dce;           /* Window DCE (if CS_OWNDC or CS_CLASSDC) */
     HGLOBAL16      hmemTaskQ;     /* Task queue global memory handle */
     HRGN16         hrgnUpdate;    /* Update region */
-    HWND32         hwndLastActive;/* Last active popup hwnd */
+    HWND         hwndLastActive;/* Last active popup hwnd */
     DWORD          dwStyle;       /* Window style (from CreateWindow) */
     DWORD          dwExStyle;     /* Extended style (from CreateWindowEx) */
-    UINT32         wIDmenu;       /* ID or hmenu (from CreateWindow) */
+    UINT         wIDmenu;       /* ID or hmenu (from CreateWindow) */
     DWORD          helpContext;   /* Help context ID */
     WORD           flags;         /* Misc. flags (see below) */
     HMENU16        hSysMenu;      /* window's copy of System Menu */
@@ -90,19 +90,19 @@
 {
     void   (*pInitialize)(WND *);
     void   (*pFinalize)(WND *);
-    BOOL32 (*pCreateDesktopWindow)(WND *, struct tagCLASS *, BOOL32);
-    BOOL32 (*pCreateWindow)(WND *, struct tagCLASS *, CREATESTRUCT32A *, BOOL32);
-    BOOL32 (*pDestroyWindow)(WND *);
+    BOOL (*pCreateDesktopWindow)(WND *, struct tagCLASS *, BOOL);
+    BOOL (*pCreateWindow)(WND *, struct tagCLASS *, CREATESTRUCTA *, BOOL);
+    BOOL (*pDestroyWindow)(WND *);
     WND*   (*pSetParent)(WND *, WND *);
     void   (*pForceWindowRaise)(WND *);
-    void   (*pSetWindowPos)(WND *, const WINDOWPOS32 *, BOOL32);
+    void   (*pSetWindowPos)(WND *, const WINDOWPOS *, BOOL);
     void   (*pSetText)(WND *, LPCSTR);
     void   (*pSetFocus)(WND *);
     void   (*pPreSizeMove)(WND *);
     void   (*pPostSizeMove)(WND *);
-    void   (*pScrollWindow)(WND *, struct tagDC *, INT32, INT32, const RECT32 *, BOOL32);
-    void   (*pSetDrawable)(WND *, struct tagDC *, WORD, BOOL32);
-    BOOL32 (*pIsSelfClipping)(WND *);
+    void   (*pScrollWindow)(WND *, struct tagDC *, INT, INT, const RECT *, BOOL);
+    void   (*pSetDrawable)(WND *, struct tagDC *, WORD, BOOL);
+    BOOL (*pIsSelfClipping)(WND *);
 } WND_DRIVER;
 
 typedef struct
@@ -138,44 +138,44 @@
 extern void   WIN_UnlockWnds();
 extern int    WIN_SuspendWndsLock();
 extern void   WIN_RestoreWndsLock(int ipreviousLock);
-extern WND*   WIN_FindWndPtr( HWND32 hwnd );
+extern WND*   WIN_FindWndPtr( HWND hwnd );
 extern void   WIN_ReleaseWndPtr(WND *wndPtr);
 extern WND*   WIN_GetDesktop(void);
-extern void   WIN_DumpWindow( HWND32 hwnd );
-extern void   WIN_WalkWindows( HWND32 hwnd, int indent );
-extern BOOL32 WIN_UnlinkWindow( HWND32 hwnd );
-extern BOOL32 WIN_LinkWindow( HWND32 hwnd, HWND32 hwndInsertAfter );
-extern HWND32 WIN_FindWinToRepaint( HWND32 hwnd, HQUEUE16 hQueue );
-extern BOOL32 WIN_ResetQueueWindows( WND* wnd, HQUEUE16 hQueue, HQUEUE16 hNew);
-extern BOOL32 WIN_CreateDesktopWindow(void);
-extern HWND32 WIN_GetTopParent( HWND32 hwnd );
+extern void   WIN_DumpWindow( HWND hwnd );
+extern void   WIN_WalkWindows( HWND hwnd, int indent );
+extern BOOL WIN_UnlinkWindow( HWND hwnd );
+extern BOOL WIN_LinkWindow( HWND hwnd, HWND hwndInsertAfter );
+extern HWND WIN_FindWinToRepaint( HWND hwnd, HQUEUE16 hQueue );
+extern BOOL WIN_ResetQueueWindows( WND* wnd, HQUEUE16 hQueue, HQUEUE16 hNew);
+extern BOOL WIN_CreateDesktopWindow(void);
+extern HWND WIN_GetTopParent( HWND hwnd );
 extern WND*   WIN_GetTopParentPtr( WND* pWnd );
-extern BOOL32 WIN_IsWindowDrawable(WND*, BOOL32 );
-extern HINSTANCE32 WIN_GetWindowInstance( HWND32 hwnd );
-extern WND**  WIN_BuildWinArray( WND *wndPtr, UINT32 bwa, UINT32* pnum );
+extern BOOL WIN_IsWindowDrawable(WND*, BOOL );
+extern HINSTANCE WIN_GetWindowInstance( HWND hwnd );
+extern WND**  WIN_BuildWinArray( WND *wndPtr, UINT bwa, UINT* pnum );
 
-extern HWND32 CARET_GetHwnd(void);
-extern void CARET_GetRect(LPRECT32 lprc);  /* windows/caret.c */
+extern HWND CARET_GetHwnd(void);
+extern void CARET_GetRect(LPRECT lprc);  /* windows/caret.c */
 
-extern BOOL16 DRAG_QueryUpdate( HWND32, SEGPTR, BOOL32 );
+extern BOOL16 DRAG_QueryUpdate( HWND, SEGPTR, BOOL );
 extern void DEFWND_SetText( WND *wndPtr, LPCSTR text );
-extern HBRUSH32 DEFWND_ControlColor( HDC32 hDC, UINT16 ctlType );     /* windows/defwnd.c */
+extern HBRUSH DEFWND_ControlColor( HDC hDC, UINT16 ctlType );     /* windows/defwnd.c */
 
 extern void PROPERTY_RemoveWindowProps( WND *pWnd );  		      /* windows/property.c */
 
-extern BOOL32 PAINT_RedrawWindow( HWND32 hwnd, const RECT32 *rectUpdate,
-                                  HRGN32 hrgnUpdate, UINT32 flags,
-                                  UINT32 control );		      /* windows/painting.c */
+extern BOOL PAINT_RedrawWindow( HWND hwnd, const RECT *rectUpdate,
+                                  HRGN hrgnUpdate, UINT flags,
+                                  UINT control );		      /* windows/painting.c */
 
 /* controls/widgets.c */
-extern BOOL32 WIDGETS_Init( void );
-extern BOOL32 WIDGETS_IsControl32( WND* pWnd, BUILTIN_CLASS32 cls );  
+extern BOOL WIDGETS_Init( void );
+extern BOOL WIDGETS_IsControl( WND* pWnd, BUILTIN_CLASS32 cls );  
 
 /* controls/icontitle.c */
-extern HWND32 ICONTITLE_Create( WND* );
-extern BOOL32 ICONTITLE_Init( void );
+extern HWND ICONTITLE_Create( WND* );
+extern BOOL ICONTITLE_Init( void );
 
 /* windows/focus.c */
-extern void FOCUS_SwitchFocus( MESSAGEQUEUE *pMsgQ, HWND32 , HWND32 );
+extern void FOCUS_SwitchFocus( MESSAGEQUEUE *pMsgQ, HWND , HWND );
 
 #endif  /* __WINE_WIN_H */
diff --git a/include/win16drv.h b/include/win16drv.h
index 8f943e8..04fbe46 100644
--- a/include/win16drv.h
+++ b/include/win16drv.h
@@ -182,7 +182,7 @@
 			  LPLOGPEN16 	 lpPen,
 			  LPLOGBRUSH16	 lpBrush,
 			  SEGPTR	 lpDrawMode,
-			  HRGN32 	 hClipRgn);
+			  HRGN 	 hClipRgn);
 
 DWORD PRTDRV_StretchBlt(LPPDEVICE lpDestDev,
                         WORD wDestX, WORD wDestY,
@@ -195,33 +195,33 @@
                         SEGPTR lpDrawMode,
                         RECT16 *lpClipRect);
 
-extern WORD PRTDRV_GetCharWidth(LPPDEVICE lpDestDev, LPINT32 lpBuffer, 
+extern WORD PRTDRV_GetCharWidth(LPPDEVICE lpDestDev, LPINT lpBuffer, 
 		      WORD wFirstChar, WORD wLastChar, LPFONTINFO16 lpFontInfo,
 		      SEGPTR lpDrawMode, SEGPTR lpTextXForm );
 
 /* Wine driver functions */
 
-extern BOOL32 WIN16DRV_Init(void);
-extern BOOL32 WIN16DRV_GetCharWidth( struct tagDC *dc, UINT32 firstChar, UINT32 lastChar,
-				   LPINT32 buffer );
+extern BOOL WIN16DRV_Init(void);
+extern BOOL WIN16DRV_GetCharWidth( struct tagDC *dc, UINT firstChar, UINT lastChar,
+				   LPINT buffer );
 
-extern BOOL32 WIN16DRV_GetTextExtentPoint( DC *dc, LPCSTR str, INT32 count,
-                                           LPSIZE32 size );
-extern BOOL32 WIN16DRV_GetTextMetrics( DC *dc, TEXTMETRIC32A *metrics );
+extern BOOL WIN16DRV_GetTextExtentPoint( DC *dc, LPCSTR str, INT count,
+                                           LPSIZE size );
+extern BOOL WIN16DRV_GetTextMetrics( DC *dc, TEXTMETRICA *metrics );
 
-extern BOOL32 WIN16DRV_ExtTextOut( DC *dc, INT32 x, INT32 y, UINT32 flags,
-                                  const RECT32 *lprect, LPCSTR str, UINT32 count,
-                                  const INT32 *lpDx );
-extern BOOL32 WIN16DRV_LineTo( DC *dc, INT32 x, INT32 y );
-extern BOOL32 WIN16DRV_MoveToEx(DC *dc,INT32 x,INT32 y,LPPOINT32 pt);
-extern BOOL32 WIN16DRV_Polygon(DC *dc, const POINT32* pt, INT32 count );
-extern BOOL32 WIN16DRV_Polyline(DC *dc, const POINT32* pt, INT32 count );
-extern BOOL32 WIN16DRV_Rectangle(DC *dc, INT32 left, INT32 top, INT32 right, INT32 bottom);
-extern HGDIOBJ32 WIN16DRV_SelectObject( DC *dc, HGDIOBJ32 handle );
-extern BOOL32 WIN16DRV_PatBlt( struct tagDC *dc, INT32 left, INT32 top,
-                               INT32 width, INT32 height, DWORD rop );
-extern BOOL32 WIN16DRV_Ellipse(DC *dc, INT32 left, INT32 top, INT32 right, INT32 bottom);
-extern BOOL32 WIN16DRV_EnumDeviceFonts( DC* dc, LPLOGFONT16 plf, 
+extern BOOL WIN16DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
+                                  const RECT *lprect, LPCSTR str, UINT count,
+                                  const INT *lpDx );
+extern BOOL WIN16DRV_LineTo( DC *dc, INT x, INT y );
+extern BOOL WIN16DRV_MoveToEx(DC *dc,INT x,INT y,LPPOINT pt);
+extern BOOL WIN16DRV_Polygon(DC *dc, const POINT* pt, INT count );
+extern BOOL WIN16DRV_Polyline(DC *dc, const POINT* pt, INT count );
+extern BOOL WIN16DRV_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom);
+extern HGDIOBJ WIN16DRV_SelectObject( DC *dc, HGDIOBJ handle );
+extern BOOL WIN16DRV_PatBlt( struct tagDC *dc, INT left, INT top,
+                               INT width, INT height, DWORD rop );
+extern BOOL WIN16DRV_Ellipse(DC *dc, INT left, INT top, INT right, INT bottom);
+extern BOOL WIN16DRV_EnumDeviceFonts( DC* dc, LPLOGFONT16 plf, 
 				        DEVICEFONTENUMPROC proc, LPARAM lp );
 
 
diff --git a/include/winbase.h b/include/winbase.h
index 73abf0c..91f987e 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -38,15 +38,15 @@
 } EXCEPTION_DEBUG_INFO;
 
 typedef struct _CREATE_THREAD_DEBUG_INFO {
-    HANDLE32 hThread;
+    HANDLE hThread;
     LPVOID lpThreadLocalBase;
     LPTHREAD_START_ROUTINE lpStartAddress;
 } CREATE_THREAD_DEBUG_INFO;
 
 typedef struct _CREATE_PROCESS_DEBUG_INFO {
-    HANDLE32 hFile;
-    HANDLE32 hProcess;
-    HANDLE32 hThread;
+    HANDLE hFile;
+    HANDLE hProcess;
+    HANDLE hThread;
     LPVOID lpBaseOfImage;
     DWORD dwDebugInfoFileOffset;
     DWORD nDebugInfoSize;
@@ -65,7 +65,7 @@
 } EXIT_PROCESS_DEBUG_INFO;
 
 typedef struct _LOAD_DLL_DEBUG_INFO {
-    HANDLE32 hFile;
+    HANDLE hFile;
     LPVOID   lpBaseOfDll;
     DWORD    dwDebugInfoFileOffset;
     DWORD    nDebugInfoSize;
@@ -161,7 +161,7 @@
 {
     DWORD   nLength;
     LPVOID  lpSecurityDescriptor;
-    BOOL32  bInheritHandle;
+    BOOL  bInheritHandle;
 } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
 
 #ifndef _FILETIME_
@@ -187,7 +187,7 @@
     DWORD     dwReserved1;
     CHAR      cFileName[260];
     CHAR      cAlternateFileName[14];
-} WIN32_FIND_DATA32A, *LPWIN32_FIND_DATA32A;
+} WIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
 
 typedef struct
 {
@@ -201,14 +201,13 @@
     DWORD     dwReserved1;
     WCHAR     cFileName[260];
     WCHAR     cAlternateFileName[14];
-} WIN32_FIND_DATA32W, *LPWIN32_FIND_DATA32W;
+} WIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;
 
 DECL_WINELIB_TYPE_AW(WIN32_FIND_DATA)
 DECL_WINELIB_TYPE_AW(LPWIN32_FIND_DATA)
 
 #define INVALID_HANDLE_VALUE16  ((HANDLE16) -1)
-#define INVALID_HANDLE_VALUE32  ((HANDLE32) -1)
-#define INVALID_HANDLE_VALUE WINELIB_NAME(INVALID_HANDLE_VALUE)
+#define INVALID_HANDLE_VALUE  ((HANDLE) -1)
 
 /* comm */
 
@@ -237,8 +236,7 @@
 
 #define IGNORE		0
 #define INFINITE16      0xFFFF
-#define INFINITE32      0xFFFFFFFF
-#define INFINITE WINELIB_NAME(INFINITE)
+#define INFINITE      0xFFFFFFFF
 
 #define CE_RXOVER	0x0001
 #define CE_OVERRUN	0x0002
@@ -324,49 +322,49 @@
 #define CSTF_EOF	0x20
 #define CSTF_TXIM	0x40
 
-#define MAKEINTRESOURCE32A(i) (LPSTR)((DWORD)((WORD)(i)))
-#define MAKEINTRESOURCE32W(i) (LPWSTR)((DWORD)((WORD)(i)))
+#define MAKEINTRESOURCEA(i) (LPSTR)((DWORD)((WORD)(i)))
+#define MAKEINTRESOURCEW(i) (LPWSTR)((DWORD)((WORD)(i)))
 #define MAKEINTRESOURCE WINELIB_NAME_AW(MAKEINTRESOURCE)
 
 /* Predefined resource types */
-#define RT_CURSOR32A         MAKEINTRESOURCE32A(1)
-#define RT_CURSOR32W         MAKEINTRESOURCE32W(1)
+#define RT_CURSORA         MAKEINTRESOURCEA(1)
+#define RT_CURSORW         MAKEINTRESOURCEW(1)
 #define RT_CURSOR            WINELIB_NAME_AW(RT_CURSOR)
-#define RT_BITMAP32A         MAKEINTRESOURCE32A(2)
-#define RT_BITMAP32W         MAKEINTRESOURCE32W(2)
+#define RT_BITMAPA         MAKEINTRESOURCEA(2)
+#define RT_BITMAPW         MAKEINTRESOURCEW(2)
 #define RT_BITMAP            WINELIB_NAME_AW(RT_BITMAP)
-#define RT_ICON32A           MAKEINTRESOURCE32A(3)
-#define RT_ICON32W           MAKEINTRESOURCE32W(3)
+#define RT_ICONA           MAKEINTRESOURCEA(3)
+#define RT_ICONW           MAKEINTRESOURCEW(3)
 #define RT_ICON              WINELIB_NAME_AW(RT_ICON)
-#define RT_MENU32A           MAKEINTRESOURCE32A(4)
-#define RT_MENU32W           MAKEINTRESOURCE32W(4)
+#define RT_MENUA           MAKEINTRESOURCEA(4)
+#define RT_MENUW           MAKEINTRESOURCEW(4)
 #define RT_MENU              WINELIB_NAME_AW(RT_MENU)
-#define RT_DIALOG32A         MAKEINTRESOURCE32A(5)
-#define RT_DIALOG32W         MAKEINTRESOURCE32W(5)
+#define RT_DIALOGA         MAKEINTRESOURCEA(5)
+#define RT_DIALOGW         MAKEINTRESOURCEW(5)
 #define RT_DIALOG            WINELIB_NAME_AW(RT_DIALOG)
-#define RT_STRING32A         MAKEINTRESOURCE32A(6)
-#define RT_STRING32W         MAKEINTRESOURCE32W(6)
+#define RT_STRINGA         MAKEINTRESOURCEA(6)
+#define RT_STRINGW         MAKEINTRESOURCEW(6)
 #define RT_STRING            WINELIB_NAME_AW(RT_STRING)
-#define RT_FONTDIR32A        MAKEINTRESOURCE32A(7)
-#define RT_FONTDIR32W        MAKEINTRESOURCE32W(7)
+#define RT_FONTDIRA        MAKEINTRESOURCEA(7)
+#define RT_FONTDIRW        MAKEINTRESOURCEW(7)
 #define RT_FONTDIR           WINELIB_NAME_AW(RT_FONTDIR)
-#define RT_FONT32A           MAKEINTRESOURCE32A(8)
-#define RT_FONT32W           MAKEINTRESOURCE32W(8)
+#define RT_FONTA           MAKEINTRESOURCEA(8)
+#define RT_FONTW           MAKEINTRESOURCEW(8)
 #define RT_FONT              WINELIB_NAME_AW(RT_FONT)
-#define RT_ACCELERATOR32A    MAKEINTRESOURCE32A(9)
-#define RT_ACCELERATOR32W    MAKEINTRESOURCE32W(9)
+#define RT_ACCELERATORA    MAKEINTRESOURCEA(9)
+#define RT_ACCELERATORW    MAKEINTRESOURCEW(9)
 #define RT_ACCELERATOR       WINELIB_NAME_AW(RT_ACCELERATOR)
-#define RT_RCDATA32A         MAKEINTRESOURCE32A(10)
-#define RT_RCDATA32W         MAKEINTRESOURCE32W(10)
+#define RT_RCDATAA         MAKEINTRESOURCEA(10)
+#define RT_RCDATAW         MAKEINTRESOURCEW(10)
 #define RT_RCDATA            WINELIB_NAME_AW(RT_RCDATA)
-#define RT_MESSAGELIST32A    MAKEINTRESOURCE32A(11)
-#define RT_MESSAGELIST32W    MAKEINTRESOURCE32W(11)
+#define RT_MESSAGELISTA    MAKEINTRESOURCEA(11)
+#define RT_MESSAGELISTW    MAKEINTRESOURCEW(11)
 #define RT_MESSAGELIST       WINELIB_NAME_AW(RT_MESSAGELIST)
-#define RT_GROUP_CURSOR32A   MAKEINTRESOURCE32A(12)
-#define RT_GROUP_CURSOR32W   MAKEINTRESOURCE32W(12)
+#define RT_GROUP_CURSORA   MAKEINTRESOURCEA(12)
+#define RT_GROUP_CURSORW   MAKEINTRESOURCEW(12)
 #define RT_GROUP_CURSOR      WINELIB_NAME_AW(RT_GROUP_CURSOR)
-#define RT_GROUP_ICON32A     MAKEINTRESOURCE32A(14)
-#define RT_GROUP_ICON32W     MAKEINTRESOURCE32W(14)
+#define RT_GROUP_ICONA     MAKEINTRESOURCEA(14)
+#define RT_GROUP_ICONW     MAKEINTRESOURCEW(14)
 #define RT_GROUP_ICON        WINELIB_NAME_AW(RT_GROUP_ICON)
 
 
@@ -576,7 +574,7 @@
 
 typedef struct
 {
-    UINT32 MaxCharSize;
+    UINT MaxCharSize;
     BYTE   DefaultChar[MAX_DEFAULTCHAR];
     BYTE   LeadByte[MAX_LEADBYTES];
 } CPINFO, *LPCPINFO;
@@ -588,7 +586,7 @@
         DWORD InternalHigh;
         DWORD Offset;
         DWORD OffsetHigh;
-        HANDLE32 hEvent;
+        HANDLE hEvent;
 } OVERLAPPED, *LPOVERLAPPED;
 
 /* Process startup information.
@@ -622,10 +620,10 @@
         WORD wShowWindow;	/* 30: */
         WORD cbReserved2;	/* 32: */
         BYTE *lpReserved2;	/* 34: */
-        HANDLE32 hStdInput;	/* 38: */
-        HANDLE32 hStdOutput;	/* 3c: */
-        HANDLE32 hStdError;	/* 40: */
-} STARTUPINFO32A, *LPSTARTUPINFO32A;
+        HANDLE hStdInput;	/* 38: */
+        HANDLE hStdOutput;	/* 3c: */
+        HANDLE hStdError;	/* 40: */
+} STARTUPINFOA, *LPSTARTUPINFOA;
 
 typedef struct {
         DWORD cb;
@@ -643,17 +641,17 @@
         WORD wShowWindow;
         WORD cbReserved2;
         BYTE *lpReserved2;
-        HANDLE32 hStdInput;
-        HANDLE32 hStdOutput;
-        HANDLE32 hStdError;
-} STARTUPINFO32W, *LPSTARTUPINFO32W;
+        HANDLE hStdInput;
+        HANDLE hStdOutput;
+        HANDLE hStdError;
+} STARTUPINFOW, *LPSTARTUPINFOW;
 
 DECL_WINELIB_TYPE_AW(STARTUPINFO)
 DECL_WINELIB_TYPE_AW(LPSTARTUPINFO)
 
 typedef struct {
-	HANDLE32	hProcess;
-	HANDLE32	hThread;
+	HANDLE	hProcess;
+	HANDLE	hThread;
 	DWORD		dwProcessId;
 	DWORD		dwThreadId;
 } PROCESS_INFORMATION,*LPPROCESS_INFORMATION;
@@ -761,11 +759,11 @@
 } MEMORY_BASIC_INFORMATION,*LPMEMORY_BASIC_INFORMATION;
 
 
-typedef BOOL32 (CALLBACK *CODEPAGE_ENUMPROC32A)(LPSTR);
-typedef BOOL32 (CALLBACK *CODEPAGE_ENUMPROC32W)(LPWSTR);
+typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCW)(LPWSTR);
 DECL_WINELIB_TYPE_AW(CODEPAGE_ENUMPROC)
-typedef BOOL32 (CALLBACK *LOCALE_ENUMPROC32A)(LPSTR);
-typedef BOOL32 (CALLBACK *LOCALE_ENUMPROC32W)(LPWSTR);
+typedef BOOL (CALLBACK *LOCALE_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *LOCALE_ENUMPROCW)(LPWSTR);
 DECL_WINELIB_TYPE_AW(LOCALE_ENUMPROC)
 
 typedef struct tagSYSTEM_INFO
@@ -789,22 +787,22 @@
 } SYSTEM_INFO, *LPSYSTEM_INFO;
 
 /* service main function prototype */
-typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTION32A)(DWORD,LPSTR);
-typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTION32W)(DWORD,LPWSTR);
+typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONA)(DWORD,LPSTR);
+typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONW)(DWORD,LPWSTR);
 DECL_WINELIB_TYPE_AW(LPSERVICE_MAIN_FUNCTION)
 
 /* service start table */
 typedef struct
 {
     LPSTR			lpServiceName;
-    LPSERVICE_MAIN_FUNCTION32A	lpServiceProc;
-} *LPSERVICE_TABLE_ENTRY32A, SERVICE_TABLE_ENTRY32A;
+    LPSERVICE_MAIN_FUNCTIONA	lpServiceProc;
+} *LPSERVICE_TABLE_ENTRYA, SERVICE_TABLE_ENTRYA;
 
 typedef struct
 {
     LPWSTR			lpServiceName;
-    LPSERVICE_MAIN_FUNCTION32W	lpServiceProc;
-} *LPSERVICE_TABLE_ENTRY32W, SERVICE_TABLE_ENTRY32W;
+    LPSERVICE_MAIN_FUNCTIONW	lpServiceProc;
+} *LPSERVICE_TABLE_ENTRYW, SERVICE_TABLE_ENTRYW;
 
 DECL_WINELIB_TYPE_AW(SERVICE_TABLE_ENTRY)
 DECL_WINELIB_TYPE_AW(LPSERVICE_TABLE_ENTRY)
@@ -815,12 +813,12 @@
 #define	HIGH_PRIORITY_CLASS	0x00000080
 #define	REALTIME_PRIORITY_CLASS	0x00000100
 
-typedef BOOL32 (CALLBACK *ENUMRESTYPEPROC32A)(HMODULE32,LPSTR,LONG);
-typedef BOOL32 (CALLBACK *ENUMRESTYPEPROC32W)(HMODULE32,LPWSTR,LONG);
-typedef BOOL32 (CALLBACK *ENUMRESNAMEPROC32A)(HMODULE32,LPCSTR,LPSTR,LONG);
-typedef BOOL32 (CALLBACK *ENUMRESNAMEPROC32W)(HMODULE32,LPCWSTR,LPWSTR,LONG);
-typedef BOOL32 (CALLBACK *ENUMRESLANGPROC32A)(HMODULE32,LPCSTR,LPCSTR,WORD,LONG);
-typedef BOOL32 (CALLBACK *ENUMRESLANGPROC32W)(HMODULE32,LPCWSTR,LPCWSTR,WORD,LONG);
+typedef BOOL (CALLBACK *ENUMRESTYPEPROCA)(HMODULE,LPSTR,LONG);
+typedef BOOL (CALLBACK *ENUMRESTYPEPROCW)(HMODULE,LPWSTR,LONG);
+typedef BOOL (CALLBACK *ENUMRESNAMEPROCA)(HMODULE,LPCSTR,LPSTR,LONG);
+typedef BOOL (CALLBACK *ENUMRESNAMEPROCW)(HMODULE,LPCWSTR,LPWSTR,LONG);
+typedef BOOL (CALLBACK *ENUMRESLANGPROCA)(HMODULE,LPCSTR,LPCSTR,WORD,LONG);
+typedef BOOL (CALLBACK *ENUMRESLANGPROCW)(HMODULE,LPCWSTR,LPCWSTR,WORD,LONG);
 
 DECL_WINELIB_TYPE_AW(ENUMRESTYPEPROC)
 DECL_WINELIB_TYPE_AW(ENUMRESNAMEPROC)
@@ -908,8 +906,8 @@
  * 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);
+                                           LARGE_INTEGER, DWORD, DWORD, HANDLE,
+                                           HANDLE, LPVOID);
 
 #define DM_UPDATE	1
 #define DM_COPY		2
@@ -1109,8 +1107,8 @@
 	LPVOID	DebugInfo;
 	LONG LockCount;
 	LONG RecursionCount;
-	HANDLE32 OwningThread;
-	HANDLE32 LockSemaphore;
+	HANDLE OwningThread;
+	HANDLE LockSemaphore;
 	DWORD Reserved;
 }CRITICAL_SECTION;
 
@@ -1130,7 +1128,7 @@
 	DWORD dwBuildNumber;
 	DWORD dwPlatformId;
 	CHAR szCSDVersion[128];
-} OSVERSIONINFO32A;
+} OSVERSIONINFOA;
 
 typedef struct {
 	DWORD dwOSVersionInfoSize;
@@ -1139,7 +1137,7 @@
 	DWORD dwBuildNumber;
 	DWORD dwPlatformId;
 	WCHAR szCSDVersion[128];
-} OSVERSIONINFO32W;
+} OSVERSIONINFOW;
 
 DECL_WINELIB_TYPE_AW(OSVERSIONINFO)
 
@@ -1192,7 +1190,7 @@
     UINT16 TxDelay WINE_PACKED;
 } DCB16, *LPDCB16;
 
-typedef struct tagDCB32
+typedef struct tagDCB
 {
     DWORD DCBlength;
     DWORD BaudRate;
@@ -1221,10 +1219,8 @@
     char ErrorChar;
     char EofChar;
     char EvtChar;
-} DCB32, *LPDCB32;
+} DCB, *LPDCB;
 
-DECL_WINELIB_TYPE(DCB)
-DECL_WINELIB_TYPE(LPDCB)
 
 
 typedef struct tagCOMMTIMEOUTS {
@@ -1239,27 +1235,24 @@
 
 typedef VOID (CALLBACK *PAPCFUNC)(ULONG_PTR);
 
-BOOL32      WINAPI ClearCommError(INT32,LPDWORD,LPCOMSTAT);
-BOOL32      WINAPI BuildCommDCB32A(LPCSTR,LPDCB32);
-BOOL32      WINAPI BuildCommDCB32W(LPCWSTR,LPDCB32);
+BOOL      WINAPI ClearCommError(INT,LPDWORD,LPCOMSTAT);
+BOOL      WINAPI BuildCommDCBA(LPCSTR,LPDCB);
+BOOL      WINAPI BuildCommDCBW(LPCWSTR,LPDCB);
 #define     BuildCommDCB WINELIB_NAME_AW(BuildCommDCB)
-BOOL32      WINAPI BuildCommDCBAndTimeouts32A(LPCSTR,LPDCB32,LPCOMMTIMEOUTS);
-BOOL32      WINAPI BuildCommDCBAndTimeouts32W(LPCWSTR,LPDCB32,LPCOMMTIMEOUTS);
+BOOL      WINAPI BuildCommDCBAndTimeoutsA(LPCSTR,LPDCB,LPCOMMTIMEOUTS);
+BOOL      WINAPI BuildCommDCBAndTimeoutsW(LPCWSTR,LPDCB,LPCOMMTIMEOUTS);
 #define     BuildCommDCBAndTimeouts WINELIB_NAME_AW(BuildCommDCBAndTimeouts)
-BOOL32      WINAPI GetCommTimeouts(INT32,LPCOMMTIMEOUTS);
-BOOL32      WINAPI SetCommTimeouts(INT32,LPCOMMTIMEOUTS);
-BOOL32      WINAPI GetCommState32(INT32,LPDCB32);
-#define     GetCommState WINELIB_NAME(GetCommState)
-BOOL32      WINAPI SetCommState32(INT32,LPDCB32);
-#define     SetCommState WINELIB_NAME(SetCommState)
-BOOL32      WINAPI TransmitCommChar32(INT32,CHAR);
-#define     TransmitCommChar WINELIB_NAME(TransmitCommChar)
+BOOL      WINAPI GetCommTimeouts(INT,LPCOMMTIMEOUTS);
+BOOL      WINAPI SetCommTimeouts(INT,LPCOMMTIMEOUTS);
+BOOL      WINAPI GetCommState(INT,LPDCB);
+BOOL      WINAPI SetCommState(INT,LPDCB);
+BOOL      WINAPI TransmitCommChar(INT,CHAR);
 
   
 /*DWORD WINAPI GetVersion( void );*/
 BOOL16 WINAPI GetVersionEx16(OSVERSIONINFO16*);
-BOOL32 WINAPI GetVersionEx32A(OSVERSIONINFO32A*);
-BOOL32 WINAPI GetVersionEx32W(OSVERSIONINFO32W*);
+BOOL WINAPI GetVersionExA(OSVERSIONINFOA*);
+BOOL WINAPI GetVersionExW(OSVERSIONINFOW*);
 #define GetVersionEx WINELIB_NAME_AW(GetVersionEx)
 
 /*int WinMain(HINSTANCE, HINSTANCE prev, char *cmd, int show);*/
@@ -1269,13 +1262,13 @@
 void      WINAPI InitializeCriticalSection(CRITICAL_SECTION *lpCrit);
 void      WINAPI LeaveCriticalSection(CRITICAL_SECTION *lpCrit);
 void      WINAPI MakeCriticalSectionGlobal(CRITICAL_SECTION *lpCrit);
-HANDLE32  WINAPI OpenProcess(DWORD access, BOOL32 inherit, DWORD id);
-BOOL32    WINAPI GetProcessWorkingSetSize(HANDLE32,LPDWORD,LPDWORD);
-DWORD     WINAPI QueueUserAPC(PAPCFUNC,HANDLE32,ULONG_PTR);
+HANDLE  WINAPI OpenProcess(DWORD access, BOOL inherit, DWORD id);
+BOOL    WINAPI GetProcessWorkingSetSize(HANDLE,LPDWORD,LPDWORD);
+DWORD     WINAPI QueueUserAPC(PAPCFUNC,HANDLE,ULONG_PTR);
 void      WINAPI RaiseException(DWORD,DWORD,DWORD,const LPDWORD);
-BOOL32    WINAPI SetProcessWorkingSetSize(HANDLE32,DWORD,DWORD);
-BOOL32    WINAPI TerminateProcess(HANDLE32,DWORD);
-BOOL32    WINAPI TerminateThread(HANDLE32,DWORD);
+BOOL    WINAPI SetProcessWorkingSetSize(HANDLE,DWORD,DWORD);
+BOOL    WINAPI TerminateProcess(HANDLE,DWORD);
+BOOL    WINAPI TerminateThread(HANDLE,DWORD);
 
 
 /* GetBinaryType return values.
@@ -1288,308 +1281,307 @@
 #define SCS_POSIX_BINARY    4
 #define SCS_OS216_BINARY    5
 
-BOOL32 WINAPI GetBinaryType32A( LPCSTR lpApplicationName, LPDWORD lpBinaryType );
-BOOL32 WINAPI GetBinaryType32W( LPCWSTR lpApplicationName, LPDWORD lpBinaryType );
+BOOL WINAPI GetBinaryTypeA( LPCSTR lpApplicationName, LPDWORD lpBinaryType );
+BOOL WINAPI GetBinaryTypeW( LPCWSTR lpApplicationName, LPDWORD lpBinaryType );
 #define GetBinaryType WINELIB_NAME_AW(GetBinaryType)
 
-BOOL16      WINAPI GetWinDebugInfo(LPWINDEBUGINFO,UINT16);
-BOOL16      WINAPI SetWinDebugInfo(LPWINDEBUGINFO);
+BOOL16      WINAPI GetWinDebugInfo16(LPWINDEBUGINFO,UINT16);
+BOOL16      WINAPI SetWinDebugInfo16(LPWINDEBUGINFO);
 /* Declarations for functions that exist only in Win32 */
 
-BOOL32      WINAPI AllocConsole(void);
-BOOL32      WINAPI AreFileApisANSI(void);
-BOOL32      WINAPI Beep(DWORD,DWORD);
-BOOL32      WINAPI CloseHandle(HANDLE32);
-HANDLE32    WINAPI ConvertToGlobalHandle(HANDLE32 hSrc);
-BOOL32      WINAPI CopyFile32A(LPCSTR,LPCSTR,BOOL32);
-BOOL32      WINAPI CopyFile32W(LPCWSTR,LPCWSTR,BOOL32);
+BOOL      WINAPI AllocConsole(void);
+BOOL      WINAPI AreFileApisANSI(void);
+BOOL      WINAPI Beep(DWORD,DWORD);
+BOOL      WINAPI CloseHandle(HANDLE);
+HANDLE    WINAPI ConvertToGlobalHandle(HANDLE hSrc);
+BOOL      WINAPI CopyFileA(LPCSTR,LPCSTR,BOOL);
+BOOL      WINAPI CopyFileW(LPCWSTR,LPCWSTR,BOOL);
 #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);
+BOOL      WINAPI CopyFileExA(LPCSTR, LPCSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD);
+BOOL      WINAPI CopyFileExW(LPCWSTR, LPCWSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD);
 #define     CopyFileEx WINELIB_NAME_AW(CopyFileEx)
-INT32       WINAPI CompareFileTime(LPFILETIME,LPFILETIME);
-HANDLE32    WINAPI CreateEvent32A(LPSECURITY_ATTRIBUTES,BOOL32,BOOL32,LPCSTR);
-HANDLE32    WINAPI CreateEvent32W(LPSECURITY_ATTRIBUTES,BOOL32,BOOL32,LPCWSTR);
+INT       WINAPI CompareFileTime(LPFILETIME,LPFILETIME);
+HANDLE    WINAPI CreateEventA(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCSTR);
+HANDLE    WINAPI CreateEventW(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCWSTR);
 #define     CreateEvent WINELIB_NAME_AW(CreateEvent)
-HFILE32     WINAPI CreateFile32A(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,
-                                 DWORD,DWORD,HANDLE32);
-HFILE32     WINAPI CreateFile32W(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,
-                                 DWORD,DWORD,HANDLE32);
+HFILE     WINAPI CreateFileA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,
+                                 DWORD,DWORD,HANDLE);
+HFILE     WINAPI CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,
+                                 DWORD,DWORD,HANDLE);
 #define     CreateFile WINELIB_NAME_AW(CreateFile)
-HANDLE32    WINAPI CreateFileMapping32A(HANDLE32,LPSECURITY_ATTRIBUTES,DWORD,
+HANDLE    WINAPI CreateFileMappingA(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,
                                         DWORD,DWORD,LPCSTR);
-HANDLE32    WINAPI CreateFileMapping32W(HANDLE32,LPSECURITY_ATTRIBUTES,DWORD,
+HANDLE    WINAPI CreateFileMappingW(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,
                                         DWORD,DWORD,LPCWSTR);
 #define     CreateFileMapping WINELIB_NAME_AW(CreateFileMapping)
-HANDLE32    WINAPI CreateMutex32A(LPSECURITY_ATTRIBUTES,BOOL32,LPCSTR);
-HANDLE32    WINAPI CreateMutex32W(LPSECURITY_ATTRIBUTES,BOOL32,LPCWSTR);
+HANDLE    WINAPI CreateMutexA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
+HANDLE    WINAPI CreateMutexW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);
 #define     CreateMutex WINELIB_NAME_AW(CreateMutex)
-BOOL32      WINAPI CreateProcess32A(LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,
-                                    LPSECURITY_ATTRIBUTES,BOOL32,DWORD,LPVOID,LPCSTR,
-                                    LPSTARTUPINFO32A,LPPROCESS_INFORMATION);
-BOOL32      WINAPI CreateProcess32W(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,
-                                    LPSECURITY_ATTRIBUTES,BOOL32,DWORD,LPVOID,LPCWSTR,
-                                    LPSTARTUPINFO32W,LPPROCESS_INFORMATION);
+BOOL      WINAPI CreateProcessA(LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,
+                                    LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,
+                                    LPSTARTUPINFOA,LPPROCESS_INFORMATION);
+BOOL      WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,
+                                    LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,
+                                    LPSTARTUPINFOW,LPPROCESS_INFORMATION);
 #define     CreateProcess WINELIB_NAME_AW(CreateProcess)
-HANDLE32    WINAPI CreateSemaphore32A(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR);
-HANDLE32    WINAPI CreateSemaphore32W(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR);
+HANDLE    WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR);
+HANDLE    WINAPI CreateSemaphoreW(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR);
 #define     CreateSemaphore WINELIB_NAME_AW(CreateSemaphore)
-HANDLE32    WINAPI CreateThread(LPSECURITY_ATTRIBUTES,DWORD,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
-BOOL32      WINAPI DisableThreadLibraryCalls(HMODULE32);
-BOOL32      WINAPI DosDateTimeToFileTime(WORD,WORD,LPFILETIME);
-BOOL32      WINAPI DuplicateHandle(HANDLE32,HANDLE32,HANDLE32,HANDLE32*,DWORD,BOOL32,DWORD);
-BOOL32      WINAPI EnumDateFormats32A(DATEFMT_ENUMPROC32A lpDateFmtEnumProc, LCID Locale, DWORD dwFlags);
-BOOL32      WINAPI EnumDateFormats32W(DATEFMT_ENUMPROC32W lpDateFmtEnumProc, LCID Locale, DWORD dwFlags);
+HANDLE    WINAPI CreateThread(LPSECURITY_ATTRIBUTES,DWORD,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
+BOOL      WINAPI DisableThreadLibraryCalls(HMODULE);
+BOOL      WINAPI DosDateTimeToFileTime(WORD,WORD,LPFILETIME);
+BOOL      WINAPI DuplicateHandle(HANDLE,HANDLE,HANDLE,HANDLE*,DWORD,BOOL,DWORD);
+BOOL      WINAPI EnumDateFormatsA(DATEFMT_ENUMPROCA lpDateFmtEnumProc, LCID Locale, DWORD dwFlags);
+BOOL      WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW lpDateFmtEnumProc, LCID Locale, DWORD dwFlags);
 #define     EnumDateFormats WINELIB_NAME_AW(EnumDateFormats)
-BOOL32      WINAPI EnumResourceLanguages32A(HMODULE32,LPCSTR,LPCSTR,
-                                            ENUMRESLANGPROC32A,LONG);
-BOOL32      WINAPI EnumResourceLanguages32W(HMODULE32,LPCWSTR,LPCWSTR,
-                                            ENUMRESLANGPROC32W,LONG);
+BOOL      WINAPI EnumResourceLanguagesA(HMODULE,LPCSTR,LPCSTR,
+                                            ENUMRESLANGPROCA,LONG);
+BOOL      WINAPI EnumResourceLanguagesW(HMODULE,LPCWSTR,LPCWSTR,
+                                            ENUMRESLANGPROCW,LONG);
 #define     EnumResourceLanguages WINELIB_NAME_AW(EnumResourceLanguages)
-BOOL32      WINAPI EnumResourceNames32A(HMODULE32,LPCSTR,ENUMRESNAMEPROC32A,
+BOOL      WINAPI EnumResourceNamesA(HMODULE,LPCSTR,ENUMRESNAMEPROCA,
                                         LONG);
-BOOL32      WINAPI EnumResourceNames32W(HMODULE32,LPCWSTR,ENUMRESNAMEPROC32W,
+BOOL      WINAPI EnumResourceNamesW(HMODULE,LPCWSTR,ENUMRESNAMEPROCW,
                                         LONG);
 #define     EnumResourceNames WINELIB_NAME_AW(EnumResourceNames)
-BOOL32      WINAPI EnumResourceTypes32A(HMODULE32,ENUMRESTYPEPROC32A,LONG);
-BOOL32      WINAPI EnumResourceTypes32W(HMODULE32,ENUMRESTYPEPROC32W,LONG);
+BOOL      WINAPI EnumResourceTypesA(HMODULE,ENUMRESTYPEPROCA,LONG);
+BOOL      WINAPI EnumResourceTypesW(HMODULE,ENUMRESTYPEPROCW,LONG);
 #define     EnumResourceTypes WINELIB_NAME_AW(EnumResourceTypes)
-BOOL32      WINAPI EnumSystemCodePages32A(CODEPAGE_ENUMPROC32A,DWORD);
-BOOL32      WINAPI EnumSystemCodePages32W(CODEPAGE_ENUMPROC32W,DWORD);
+BOOL      WINAPI EnumSystemCodePagesA(CODEPAGE_ENUMPROCA,DWORD);
+BOOL      WINAPI EnumSystemCodePagesW(CODEPAGE_ENUMPROCW,DWORD);
 #define     EnumSystemCodePages WINELIB_NAME_AW(EnumSystemCodePages)
-BOOL32      WINAPI EnumSystemLocales32A(LOCALE_ENUMPROC32A,DWORD);
-BOOL32      WINAPI EnumSystemLocales32W(LOCALE_ENUMPROC32W,DWORD);
+BOOL      WINAPI EnumSystemLocalesA(LOCALE_ENUMPROCA,DWORD);
+BOOL      WINAPI EnumSystemLocalesW(LOCALE_ENUMPROCW,DWORD);
 #define     EnumSystemLocales WINELIB_NAME_AW(EnumSystemLocales)
-BOOL32      WINAPI EnumTimeFormats32A(TIMEFMT_ENUMPROC32A lpTimeFmtEnumProc, LCID Locale, DWORD dwFlags);
-BOOL32      WINAPI EnumTimeFormats32W(TIMEFMT_ENUMPROC32W lpTimeFmtEnumProc, LCID Locale, DWORD dwFlags);
+BOOL      WINAPI EnumTimeFormatsA(TIMEFMT_ENUMPROCA lpTimeFmtEnumProc, LCID Locale, DWORD dwFlags);
+BOOL      WINAPI EnumTimeFormatsW(TIMEFMT_ENUMPROCW lpTimeFmtEnumProc, LCID Locale, DWORD dwFlags);
 #define     EnumTimeFormats WINELIB_NAME_AW(EnumTimeFormats)
 VOID        WINAPI ExitProcess(DWORD);
 VOID        WINAPI ExitThread(DWORD);
-DWORD       WINAPI ExpandEnvironmentStrings32A(LPCSTR,LPSTR,DWORD);
-DWORD       WINAPI ExpandEnvironmentStrings32W(LPCWSTR,LPWSTR,DWORD);
+DWORD       WINAPI ExpandEnvironmentStringsA(LPCSTR,LPSTR,DWORD);
+DWORD       WINAPI ExpandEnvironmentStringsW(LPCWSTR,LPWSTR,DWORD);
 #define     ExpandEnvironmentStrings WINELIB_NAME_AW(ExpandEnvironmentStrings)
-BOOL32      WINAPI FileTimeToDosDateTime(const FILETIME*,LPWORD,LPWORD);
-BOOL32      WINAPI FileTimeToLocalFileTime(const FILETIME*,LPFILETIME);
-BOOL32      WINAPI FileTimeToSystemTime(const FILETIME*,LPSYSTEMTIME);
-HANDLE32    WINAPI FindFirstChangeNotification32A(LPCSTR,BOOL32,DWORD);
-HANDLE32    WINAPI FindFirstChangeNotification32W(LPCWSTR,BOOL32,DWORD);
+BOOL      WINAPI FileTimeToDosDateTime(const FILETIME*,LPWORD,LPWORD);
+BOOL      WINAPI FileTimeToLocalFileTime(const FILETIME*,LPFILETIME);
+BOOL      WINAPI FileTimeToSystemTime(const FILETIME*,LPSYSTEMTIME);
+HANDLE    WINAPI FindFirstChangeNotificationA(LPCSTR,BOOL,DWORD);
+HANDLE    WINAPI FindFirstChangeNotificationW(LPCWSTR,BOOL,DWORD);
 #define     FindFirstChangeNotification WINELIB_NAME_AW(FindFirstChangeNotification)
-BOOL32      WINAPI FindNextChangeNotification(HANDLE32);
-BOOL32      WINAPI FindCloseChangeNotification(HANDLE32);
-HRSRC32     WINAPI FindResourceEx32A(HMODULE32,LPCSTR,LPCSTR,WORD);
-HRSRC32     WINAPI FindResourceEx32W(HMODULE32,LPCWSTR,LPCWSTR,WORD);
+BOOL      WINAPI FindNextChangeNotification(HANDLE);
+BOOL      WINAPI FindCloseChangeNotification(HANDLE);
+HRSRC     WINAPI FindResourceExA(HMODULE,LPCSTR,LPCSTR,WORD);
+HRSRC     WINAPI FindResourceExW(HMODULE,LPCWSTR,LPCWSTR,WORD);
 #define     FindResourceEx WINELIB_NAME_AW(FindResourceEx)
-BOOL32      WINAPI FlushConsoleInputBuffer(HANDLE32);
-BOOL32      WINAPI FlushFileBuffers(HFILE32);
-BOOL32      WINAPI FlushViewOfFile(LPCVOID, DWORD);
-DWORD       WINAPI FormatMessage32A(DWORD,LPCVOID,DWORD,DWORD,LPSTR,
+BOOL      WINAPI FlushConsoleInputBuffer(HANDLE);
+BOOL      WINAPI FlushFileBuffers(HFILE);
+BOOL      WINAPI FlushViewOfFile(LPCVOID, DWORD);
+DWORD       WINAPI FormatMessageA(DWORD,LPCVOID,DWORD,DWORD,LPSTR,
 				    DWORD,LPDWORD);
-DWORD       WINAPI FormatMessage32W(DWORD,LPCVOID,DWORD,DWORD,LPWSTR,
+DWORD       WINAPI FormatMessageW(DWORD,LPCVOID,DWORD,DWORD,LPWSTR,
 				    DWORD,LPDWORD);
 #define     FormatMessage WINELIB_NAME_AW(FormatMessage)
-BOOL32      WINAPI FreeConsole(void);
-BOOL32      WINAPI FreeEnvironmentStrings32A(LPSTR);
-BOOL32      WINAPI FreeEnvironmentStrings32W(LPWSTR);
+BOOL      WINAPI FreeConsole(void);
+BOOL      WINAPI FreeEnvironmentStringsA(LPSTR);
+BOOL      WINAPI FreeEnvironmentStringsW(LPWSTR);
 #define     FreeEnvironmentStrings WINELIB_NAME_AW(FreeEnvironmentStrings)
-UINT32      WINAPI GetACP(void);
-LPCSTR      WINAPI GetCommandLine32A(void);
-LPCWSTR     WINAPI GetCommandLine32W(void);
+UINT      WINAPI GetACP(void);
+LPCSTR      WINAPI GetCommandLineA(void);
+LPCWSTR     WINAPI GetCommandLineW(void);
 #define     GetCommandLine WINELIB_NAME_AW(GetCommandLine)
-BOOL32      WINAPI GetComputerName32A(LPSTR,LPDWORD);
-BOOL32      WINAPI GetComputerName32W(LPWSTR,LPDWORD);
+BOOL      WINAPI GetComputerNameA(LPSTR,LPDWORD);
+BOOL      WINAPI GetComputerNameW(LPWSTR,LPDWORD);
 #define     GetComputerName WINELIB_NAME_AW(GetComputerName)
-UINT32      WINAPI GetConsoleCP(void);
-BOOL32      WINAPI GetConsoleMode(HANDLE32,LPDWORD);
-UINT32      WINAPI GetConsoleOutputCP(void);
-DWORD       WINAPI GetConsoleTitle32A(LPSTR,DWORD);
-DWORD       WINAPI GetConsoleTitle32W(LPWSTR,DWORD);
+UINT      WINAPI GetConsoleCP(void);
+BOOL      WINAPI GetConsoleMode(HANDLE,LPDWORD);
+UINT      WINAPI GetConsoleOutputCP(void);
+DWORD       WINAPI GetConsoleTitleA(LPSTR,DWORD);
+DWORD       WINAPI GetConsoleTitleW(LPWSTR,DWORD);
 #define     GetConsoleTitle WINELIB_NAME_AW(GetConsoleTitle)
-BOOL32      WINAPI GetCPInfo(UINT32,LPCPINFO);
-BOOL32      WINAPI GetCommMask(HANDLE32, LPDWORD);
-BOOL32      WINAPI GetCommModemStatus(HANDLE32, LPDWORD);
-HANDLE32    WINAPI GetCurrentProcess(void);
+BOOL      WINAPI GetCPInfo(UINT,LPCPINFO);
+BOOL      WINAPI GetCommMask(HANDLE, LPDWORD);
+BOOL      WINAPI GetCommModemStatus(HANDLE, LPDWORD);
+HANDLE    WINAPI GetCurrentProcess(void);
 DWORD       WINAPI GetCurrentProcessId(void);
-HANDLE32    WINAPI GetCurrentThread(void);
+HANDLE    WINAPI GetCurrentThread(void);
 DWORD       WINAPI GetCurrentThreadId(void);
-INT32       WINAPI GetDateFormat32A(LCID,DWORD,LPSYSTEMTIME,LPCSTR,LPSTR,INT32);
-INT32       WINAPI GetDateFormat32W(LCID,DWORD,LPSYSTEMTIME,LPCWSTR,LPWSTR,INT32);
+INT       WINAPI GetDateFormatA(LCID,DWORD,LPSYSTEMTIME,LPCSTR,LPSTR,INT);
+INT       WINAPI GetDateFormatW(LCID,DWORD,LPSYSTEMTIME,LPCWSTR,LPWSTR,INT);
 #define     GetDateFormat WINELIB_NAME_AW(GetDateFormat)
-LPSTR       WINAPI GetEnvironmentStrings32A(void);
-LPWSTR      WINAPI GetEnvironmentStrings32W(void);
+LPSTR       WINAPI GetEnvironmentStringsA(void);
+LPWSTR      WINAPI GetEnvironmentStringsW(void);
 #define     GetEnvironmentStrings WINELIB_NAME_AW(GetEnvironmentStrings)
-DWORD       WINAPI GetEnvironmentVariable32A(LPCSTR,LPSTR,DWORD);
-DWORD       WINAPI GetEnvironmentVariable32W(LPCWSTR,LPWSTR,DWORD);
+DWORD       WINAPI GetEnvironmentVariableA(LPCSTR,LPSTR,DWORD);
+DWORD       WINAPI GetEnvironmentVariableW(LPCWSTR,LPWSTR,DWORD);
 #define     GetEnvironmentVariable WINELIB_NAME_AW(GetEnvironmentVariable)
-BOOL32      WINAPI GetFileAttributesEx32A(LPCSTR,GET_FILEEX_INFO_LEVELS,LPVOID);
-BOOL32      WINAPI GetFileAttributesEx32W(LPCWSTR,GET_FILEEX_INFO_LEVELS,LPVOID);
+BOOL      WINAPI GetFileAttributesExA(LPCSTR,GET_FILEEX_INFO_LEVELS,LPVOID);
+BOOL      WINAPI GetFileAttributesExW(LPCWSTR,GET_FILEEX_INFO_LEVELS,LPVOID);
 #define     GetFileattributesEx WINELIB_NAME_AW(GetFileAttributesEx)
-DWORD       WINAPI GetFileInformationByHandle(HFILE32,BY_HANDLE_FILE_INFORMATION*);
-DWORD       WINAPI GetFileSize(HFILE32,LPDWORD);
-BOOL32      WINAPI GetFileTime(HFILE32,LPFILETIME,LPFILETIME,LPFILETIME);
-DWORD       WINAPI GetFileType(HFILE32);
-DWORD       WINAPI GetFullPathName32A(LPCSTR,DWORD,LPSTR,LPSTR*);
-DWORD       WINAPI GetFullPathName32W(LPCWSTR,DWORD,LPWSTR,LPWSTR*);
+DWORD       WINAPI GetFileInformationByHandle(HFILE,BY_HANDLE_FILE_INFORMATION*);
+DWORD       WINAPI GetFileSize(HFILE,LPDWORD);
+BOOL      WINAPI GetFileTime(HFILE,LPFILETIME,LPFILETIME,LPFILETIME);
+DWORD       WINAPI GetFileType(HFILE);
+DWORD       WINAPI GetFullPathNameA(LPCSTR,DWORD,LPSTR,LPSTR*);
+DWORD       WINAPI GetFullPathNameW(LPCWSTR,DWORD,LPWSTR,LPWSTR*);
 #define     GetFullPathName WINELIB_NAME_AW(GetFullPathName)
-BOOL32      WINAPI GetHandleInformation(HANDLE32,LPDWORD);
-DWORD       WINAPI GetLargestConsoleWindowSize(HANDLE32);
+BOOL      WINAPI GetHandleInformation(HANDLE,LPDWORD);
+DWORD       WINAPI GetLargestConsoleWindowSize(HANDLE);
 VOID        WINAPI GetLocalTime(LPSYSTEMTIME);
 DWORD       WINAPI GetLogicalDrives(void);
-DWORD       WINAPI GetLongPathName32A(LPCSTR,LPSTR,DWORD);
-DWORD       WINAPI GetLongPathName32W(LPCWSTR,LPWSTR,DWORD);
+DWORD       WINAPI GetLongPathNameA(LPCSTR,LPSTR,DWORD);
+DWORD       WINAPI GetLongPathNameW(LPCWSTR,LPWSTR,DWORD);
 #define     GetLongPathName WINELIB_NAME_AW(GetLongPathName)
-BOOL32      WINAPI GetNumberOfConsoleInputEvents(HANDLE32,LPDWORD);
-BOOL32      WINAPI GetNumberOfConsoleMouseButtons(LPDWORD);
-UINT32      WINAPI GetOEMCP(void);
-DWORD       WINAPI GetPriorityClass(HANDLE32);
-HANDLE32    WINAPI GetProcessHeap(void);
+BOOL      WINAPI GetNumberOfConsoleInputEvents(HANDLE,LPDWORD);
+BOOL      WINAPI GetNumberOfConsoleMouseButtons(LPDWORD);
+UINT      WINAPI GetOEMCP(void);
+DWORD       WINAPI GetPriorityClass(HANDLE);
+HANDLE    WINAPI GetProcessHeap(void);
 DWORD       WINAPI GetProcessVersion(DWORD);
-DWORD       WINAPI GetShortPathName32A(LPCSTR,LPSTR,DWORD);
-DWORD       WINAPI GetShortPathName32W(LPCWSTR,LPWSTR,DWORD);
+DWORD       WINAPI GetShortPathNameA(LPCSTR,LPSTR,DWORD);
+DWORD       WINAPI GetShortPathNameW(LPCWSTR,LPWSTR,DWORD);
 #define     GetShortPathName WINELIB_NAME_AW(GetShortPathName)
-HFILE32     WINAPI GetStdHandle(DWORD);
-BOOL32      WINAPI GetStringTypeEx32A(LCID,DWORD,LPCSTR,INT32,LPWORD);
-BOOL32      WINAPI GetStringTypeEx32W(LCID,DWORD,LPCWSTR,INT32,LPWORD);
+HFILE     WINAPI GetStdHandle(DWORD);
+BOOL      WINAPI GetStringTypeExA(LCID,DWORD,LPCSTR,INT,LPWORD);
+BOOL      WINAPI GetStringTypeExW(LCID,DWORD,LPCWSTR,INT,LPWORD);
 #define     GetStringTypeEx WINELIB_NAME_AW(GetStringTypeEx)
 VOID        WINAPI GetSystemInfo(LPSYSTEM_INFO);
-BOOL32      WINAPI GetSystemPowerStatus(LPSYSTEM_POWER_STATUS);
+BOOL      WINAPI GetSystemPowerStatus(LPSYSTEM_POWER_STATUS);
 VOID        WINAPI GetSystemTime(LPSYSTEMTIME);
-INT32       WINAPI GetTimeFormat32A(LCID,DWORD,LPSYSTEMTIME,LPCSTR,LPSTR,INT32);
-INT32       WINAPI GetTimeFormat32W(LCID,DWORD,LPSYSTEMTIME,LPCWSTR,LPWSTR,INT32);
+INT       WINAPI GetTimeFormatA(LCID,DWORD,LPSYSTEMTIME,LPCSTR,LPSTR,INT);
+INT       WINAPI GetTimeFormatW(LCID,DWORD,LPSYSTEMTIME,LPCWSTR,LPWSTR,INT);
 #define     GetTimeFormat WINELIB_NAME_AW(GetTimeFormat)
 LCID        WINAPI GetThreadLocale(void);
-INT32       WINAPI GetThreadPriority(HANDLE32);
-BOOL32      WINAPI GetThreadSelectorEntry(HANDLE32,DWORD,LPLDT_ENTRY);
+INT       WINAPI GetThreadPriority(HANDLE);
+BOOL      WINAPI GetThreadSelectorEntry(HANDLE,DWORD,LPLDT_ENTRY);
 VOID        WINAPI GlobalMemoryStatus(LPMEMORYSTATUS);
-LPVOID      WINAPI HeapAlloc(HANDLE32,DWORD,DWORD);
-DWORD       WINAPI HeapCompact(HANDLE32,DWORD);
-HANDLE32    WINAPI HeapCreate(DWORD,DWORD,DWORD);
-BOOL32      WINAPI HeapDestroy(HANDLE32);
-BOOL32      WINAPI HeapFree(HANDLE32,DWORD,LPVOID);
-BOOL32      WINAPI HeapLock(HANDLE32);
-LPVOID      WINAPI HeapReAlloc(HANDLE32,DWORD,LPVOID,DWORD);
-DWORD       WINAPI HeapSize(HANDLE32,DWORD,LPVOID);
-BOOL32      WINAPI HeapUnlock(HANDLE32);
-BOOL32      WINAPI HeapValidate(HANDLE32,DWORD,LPCVOID);
+LPVOID      WINAPI HeapAlloc(HANDLE,DWORD,DWORD);
+DWORD       WINAPI HeapCompact(HANDLE,DWORD);
+HANDLE    WINAPI HeapCreate(DWORD,DWORD,DWORD);
+BOOL      WINAPI HeapDestroy(HANDLE);
+BOOL      WINAPI HeapFree(HANDLE,DWORD,LPVOID);
+BOOL      WINAPI HeapLock(HANDLE);
+LPVOID      WINAPI HeapReAlloc(HANDLE,DWORD,LPVOID,DWORD);
+DWORD       WINAPI HeapSize(HANDLE,DWORD,LPVOID);
+BOOL      WINAPI HeapUnlock(HANDLE);
+BOOL      WINAPI HeapValidate(HANDLE,DWORD,LPCVOID);
 LONG        WINAPI InterlockedDecrement(LPLONG);
 LONG        WINAPI InterlockedExchange(LPLONG,LONG);
 LONG        WINAPI InterlockedIncrement(LPLONG);
-BOOL32      WINAPI IsDBCSLeadByteEx(UINT32,BYTE);
-BOOL32      WINAPI IsProcessorFeaturePresent(DWORD);
-BOOL32      WINAPI IsValidLocale(DWORD,DWORD);
-BOOL32      WINAPI LocalFileTimeToFileTime(const FILETIME*,LPFILETIME);
-BOOL32      WINAPI LockFile(HFILE32,DWORD,DWORD,DWORD,DWORD);
-HMODULE32   WINAPI MapHModuleSL(HMODULE16);
-HMODULE16   WINAPI MapHModuleLS(HMODULE32);
+BOOL      WINAPI IsDBCSLeadByteEx(UINT,BYTE);
+BOOL      WINAPI IsProcessorFeaturePresent(DWORD);
+BOOL      WINAPI IsValidLocale(DWORD,DWORD);
+BOOL      WINAPI LocalFileTimeToFileTime(const FILETIME*,LPFILETIME);
+BOOL      WINAPI LockFile(HFILE,DWORD,DWORD,DWORD,DWORD);
+HMODULE   WINAPI MapHModuleSL(HMODULE16);
+HMODULE16   WINAPI MapHModuleLS(HMODULE);
 SEGPTR      WINAPI MapLS(LPVOID);
 LPVOID      WINAPI MapSL(SEGPTR);
-LPVOID      WINAPI MapViewOfFile(HANDLE32,DWORD,DWORD,DWORD,DWORD);
-LPVOID      WINAPI MapViewOfFileEx(HANDLE32,DWORD,DWORD,DWORD,DWORD,LPVOID);
-BOOL32      WINAPI MoveFile32A(LPCSTR,LPCSTR);
-BOOL32      WINAPI MoveFile32W(LPCWSTR,LPCWSTR);
+LPVOID      WINAPI MapViewOfFile(HANDLE,DWORD,DWORD,DWORD,DWORD);
+LPVOID      WINAPI MapViewOfFileEx(HANDLE,DWORD,DWORD,DWORD,DWORD,LPVOID);
+BOOL      WINAPI MoveFileA(LPCSTR,LPCSTR);
+BOOL      WINAPI MoveFileW(LPCWSTR,LPCWSTR);
 #define     MoveFile WINELIB_NAME_AW(MoveFile)
-BOOL32      WINAPI MoveFileEx32A(LPCSTR,LPCSTR,DWORD);
-BOOL32      WINAPI MoveFileEx32W(LPCWSTR,LPCWSTR,DWORD);
+BOOL      WINAPI MoveFileExA(LPCSTR,LPCSTR,DWORD);
+BOOL      WINAPI MoveFileExW(LPCWSTR,LPCWSTR,DWORD);
 #define     MoveFileEx WINELIB_NAME_AW(MoveFileEx)
-INT32       WINAPI MultiByteToWideChar(UINT32,DWORD,LPCSTR,INT32,LPWSTR,INT32);
-INT32       WINAPI WideCharToMultiByte(UINT32,DWORD,LPCWSTR,INT32,LPSTR,INT32,LPCSTR,BOOL32*);
-HANDLE32    WINAPI OpenEvent32A(DWORD,BOOL32,LPCSTR);
-HANDLE32    WINAPI OpenEvent32W(DWORD,BOOL32,LPCWSTR);
+INT       WINAPI MultiByteToWideChar(UINT,DWORD,LPCSTR,INT,LPWSTR,INT);
+INT       WINAPI WideCharToMultiByte(UINT,DWORD,LPCWSTR,INT,LPSTR,INT,LPCSTR,BOOL*);
+HANDLE    WINAPI OpenEventA(DWORD,BOOL,LPCSTR);
+HANDLE    WINAPI OpenEventW(DWORD,BOOL,LPCWSTR);
 #define     OpenEvent WINELIB_NAME_AW(OpenEvent)
-HANDLE32    WINAPI OpenFileMapping32A(DWORD,BOOL32,LPCSTR);
-HANDLE32    WINAPI OpenFileMapping32W(DWORD,BOOL32,LPCWSTR);
+HANDLE    WINAPI OpenFileMappingA(DWORD,BOOL,LPCSTR);
+HANDLE    WINAPI OpenFileMappingW(DWORD,BOOL,LPCWSTR);
 #define     OpenFileMapping WINELIB_NAME_AW(OpenFileMapping)
-HANDLE32    WINAPI OpenMutex32A(DWORD,BOOL32,LPCSTR);
-HANDLE32    WINAPI OpenMutex32W(DWORD,BOOL32,LPCWSTR);
+HANDLE    WINAPI OpenMutexA(DWORD,BOOL,LPCSTR);
+HANDLE    WINAPI OpenMutexW(DWORD,BOOL,LPCWSTR);
 #define     OpenMutex WINELIB_NAME_AW(OpenMutex)
-HANDLE32    WINAPI OpenProcess(DWORD,BOOL32,DWORD);
-HANDLE32    WINAPI OpenSemaphore32A(DWORD,BOOL32,LPCSTR);
-HANDLE32    WINAPI OpenSemaphore32W(DWORD,BOOL32,LPCWSTR);
+HANDLE    WINAPI OpenProcess(DWORD,BOOL,DWORD);
+HANDLE    WINAPI OpenSemaphoreA(DWORD,BOOL,LPCSTR);
+HANDLE    WINAPI OpenSemaphoreW(DWORD,BOOL,LPCWSTR);
 #define     OpenSemaphore WINELIB_NAME_AW(OpenSemaphore)
-BOOL32      WINAPI PulseEvent(HANDLE32);
-BOOL32      WINAPI PurgeComm(HANDLE32,DWORD);
-DWORD       WINAPI QueryDosDevice32A(LPCSTR,LPSTR,DWORD);
-DWORD       WINAPI QueryDosDevice32W(LPCWSTR,LPWSTR,DWORD);
+BOOL      WINAPI PulseEvent(HANDLE);
+BOOL      WINAPI PurgeComm(HANDLE,DWORD);
+DWORD       WINAPI QueryDosDeviceA(LPCSTR,LPSTR,DWORD);
+DWORD       WINAPI QueryDosDeviceW(LPCWSTR,LPWSTR,DWORD);
 #define     QueryDosDevice WINELIB_NAME_AW(QueryDosDevice)
-BOOL32      WINAPI QueryPerformanceCounter(PLARGE_INTEGER);
-BOOL32      WINAPI ReadConsole32A(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
-BOOL32      WINAPI ReadConsole32W(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
+BOOL      WINAPI QueryPerformanceCounter(PLARGE_INTEGER);
+BOOL      WINAPI ReadConsoleA(HANDLE,LPVOID,DWORD,LPDWORD,LPVOID);
+BOOL      WINAPI ReadConsoleW(HANDLE,LPVOID,DWORD,LPDWORD,LPVOID);
 #define     ReadConsole WINELIB_NAME_AW(ReadConsole)
-BOOL32      WINAPI ReadConsoleOutputCharacter32A(HANDLE32,LPSTR,DWORD,
+BOOL      WINAPI ReadConsoleOutputCharacterA(HANDLE,LPSTR,DWORD,
 						 COORD,LPDWORD);
 #define     ReadConsoleOutputCharacter WINELIB_NAME_AW(ReadConsoleOutputCharacter)
-BOOL32      WINAPI ReadFile(HANDLE32,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
-BOOL32      WINAPI ReleaseMutex(HANDLE32);
-BOOL32      WINAPI ReleaseSemaphore(HANDLE32,LONG,LPLONG);
-BOOL32      WINAPI ResetEvent(HANDLE32);
-DWORD       WINAPI ResumeThread(HANDLE32);
-VOID        WINAPI RtlFillMemory(LPVOID,UINT32,UINT32);
-VOID        WINAPI RtlMoveMemory(LPVOID,LPCVOID,UINT32);
-VOID        WINAPI RtlZeroMemory(LPVOID,UINT32);
-DWORD       WINAPI SearchPath32A(LPCSTR,LPCSTR,LPCSTR,DWORD,LPSTR,LPSTR*);
-DWORD       WINAPI SearchPath32W(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPWSTR*);
-#define     SearchPath WINELIB_NAME(SearchPath)
-BOOL32      WINAPI SetCommMask(INT32,DWORD);
-BOOL32      WINAPI SetComputerName32A(LPCSTR);
-BOOL32      WINAPI SetComputerName32W(LPCWSTR);
+BOOL      WINAPI ReadFile(HANDLE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
+BOOL      WINAPI ReleaseMutex(HANDLE);
+BOOL      WINAPI ReleaseSemaphore(HANDLE,LONG,LPLONG);
+BOOL      WINAPI ResetEvent(HANDLE);
+DWORD       WINAPI ResumeThread(HANDLE);
+VOID        WINAPI RtlFillMemory(LPVOID,UINT,UINT);
+VOID        WINAPI RtlMoveMemory(LPVOID,LPCVOID,UINT);
+VOID        WINAPI RtlZeroMemory(LPVOID,UINT);
+DWORD       WINAPI SearchPathA(LPCSTR,LPCSTR,LPCSTR,DWORD,LPSTR,LPSTR*);
+DWORD       WINAPI SearchPathW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPWSTR*);
+BOOL      WINAPI SetCommMask(INT,DWORD);
+BOOL      WINAPI SetComputerNameA(LPCSTR);
+BOOL      WINAPI SetComputerNameW(LPCWSTR);
 #define     SetComputerName WINELIB_NAME_AW(SetComputerName)
-BOOL32      WINAPI SetConsoleCursorPosition(HANDLE32,COORD);
-BOOL32      WINAPI SetConsoleMode(HANDLE32,DWORD);
-BOOL32      WINAPI SetConsoleTitle32A(LPCSTR);
-BOOL32      WINAPI SetConsoleTitle32W(LPCWSTR);
+BOOL      WINAPI SetConsoleCursorPosition(HANDLE,COORD);
+BOOL      WINAPI SetConsoleMode(HANDLE,DWORD);
+BOOL      WINAPI SetConsoleTitleA(LPCSTR);
+BOOL      WINAPI SetConsoleTitleW(LPCWSTR);
 #define     SetConsoleTitle WINELIB_NAME_AW(SetConsoleTitle)
-BOOL32      WINAPI SetEndOfFile(HFILE32);
-BOOL32      WINAPI SetEnvironmentVariable32A(LPCSTR,LPCSTR);
-BOOL32      WINAPI SetEnvironmentVariable32W(LPCWSTR,LPCWSTR);
+BOOL      WINAPI SetEndOfFile(HFILE);
+BOOL      WINAPI SetEnvironmentVariableA(LPCSTR,LPCSTR);
+BOOL      WINAPI SetEnvironmentVariableW(LPCWSTR,LPCWSTR);
 #define     SetEnvironmentVariable WINELIB_NAME_AW(SetEnvironmentVariable)
-BOOL32      WINAPI SetEvent(HANDLE32);
+BOOL      WINAPI SetEvent(HANDLE);
 VOID        WINAPI SetFileApisToANSI(void);
 VOID        WINAPI SetFileApisToOEM(void);
-DWORD       WINAPI SetFilePointer(HFILE32,LONG,LPLONG,DWORD);
-BOOL32      WINAPI SetFileTime(HFILE32,const FILETIME*,const FILETIME*,
+DWORD       WINAPI SetFilePointer(HFILE,LONG,LPLONG,DWORD);
+BOOL      WINAPI SetFileTime(HFILE,const FILETIME*,const FILETIME*,
                                const FILETIME*);
-BOOL32      WINAPI SetHandleInformation(HANDLE32,DWORD,DWORD);
-BOOL32      WINAPI SetPriorityClass(HANDLE32,DWORD);
-BOOL32      WINAPI SetStdHandle(DWORD,HANDLE32);
-BOOL32      WINAPI SetSystemPowerState(BOOL32,BOOL32);
-BOOL32      WINAPI SetSystemTime(const SYSTEMTIME*);
-DWORD       WINAPI SetThreadAffinityMask(HANDLE32,DWORD);
-BOOL32      WINAPI SetThreadLocale(LCID);
-BOOL32      WINAPI SetThreadPriority(HANDLE32,INT32);
-BOOL32      WINAPI SetTimeZoneInformation(const LPTIME_ZONE_INFORMATION);
+BOOL      WINAPI SetHandleInformation(HANDLE,DWORD,DWORD);
+BOOL      WINAPI SetPriorityClass(HANDLE,DWORD);
+BOOL      WINAPI SetStdHandle(DWORD,HANDLE);
+BOOL      WINAPI SetSystemPowerState(BOOL,BOOL);
+BOOL      WINAPI SetSystemTime(const SYSTEMTIME*);
+DWORD       WINAPI SetThreadAffinityMask(HANDLE,DWORD);
+BOOL      WINAPI SetThreadLocale(LCID);
+BOOL      WINAPI SetThreadPriority(HANDLE,INT);
+BOOL      WINAPI SetTimeZoneInformation(const LPTIME_ZONE_INFORMATION);
 VOID        WINAPI Sleep(DWORD);
-DWORD       WINAPI SleepEx(DWORD,BOOL32);
-DWORD       WINAPI SuspendThread(HANDLE32);
-BOOL32      WINAPI SystemTimeToFileTime(const SYSTEMTIME*,LPFILETIME);
+DWORD       WINAPI SleepEx(DWORD,BOOL);
+DWORD       WINAPI SuspendThread(HANDLE);
+BOOL      WINAPI SystemTimeToFileTime(const SYSTEMTIME*,LPFILETIME);
 DWORD       WINAPI TlsAlloc(void);
-BOOL32      WINAPI TlsFree(DWORD);
+BOOL      WINAPI TlsFree(DWORD);
 LPVOID      WINAPI TlsGetValue(DWORD);
-BOOL32      WINAPI TlsSetValue(DWORD,LPVOID);
+BOOL      WINAPI TlsSetValue(DWORD,LPVOID);
 VOID        WINAPI UnMapLS(SEGPTR);
-BOOL32      WINAPI UnlockFile(HFILE32,DWORD,DWORD,DWORD,DWORD);
-BOOL32      WINAPI UnmapViewOfFile(LPVOID);
+BOOL      WINAPI UnlockFile(HFILE,DWORD,DWORD,DWORD,DWORD);
+BOOL      WINAPI UnmapViewOfFile(LPVOID);
 LPVOID      WINAPI VirtualAlloc(LPVOID,DWORD,DWORD,DWORD);
-BOOL32      WINAPI VirtualFree(LPVOID,DWORD,DWORD);
-BOOL32      WINAPI VirtualLock(LPVOID,DWORD);
-BOOL32      WINAPI VirtualProtect(LPVOID,DWORD,DWORD,LPDWORD);
-BOOL32      WINAPI VirtualProtectEx(HANDLE32,LPVOID,DWORD,DWORD,LPDWORD);
+BOOL      WINAPI VirtualFree(LPVOID,DWORD,DWORD);
+BOOL      WINAPI VirtualLock(LPVOID,DWORD);
+BOOL      WINAPI VirtualProtect(LPVOID,DWORD,DWORD,LPDWORD);
+BOOL      WINAPI VirtualProtectEx(HANDLE,LPVOID,DWORD,DWORD,LPDWORD);
 DWORD       WINAPI VirtualQuery(LPCVOID,LPMEMORY_BASIC_INFORMATION,DWORD);
-DWORD       WINAPI VirtualQueryEx(HANDLE32,LPCVOID,LPMEMORY_BASIC_INFORMATION,DWORD);
-BOOL32      WINAPI VirtualUnlock(LPVOID,DWORD);
-BOOL32      WINAPI WaitCommEvent(HANDLE32,LPDWORD,LPOVERLAPPED);
-BOOL32      WINAPI WaitForDebugEvent(LPDEBUG_EVENT,DWORD);
-DWORD       WINAPI WaitForMultipleObjects(DWORD,const HANDLE32*,BOOL32,DWORD);
-DWORD       WINAPI WaitForMultipleObjectsEx(DWORD,const HANDLE32*,BOOL32,DWORD,BOOL32);
-DWORD       WINAPI WaitForSingleObject(HANDLE32,DWORD);
-DWORD       WINAPI WaitForSingleObjectEx(HANDLE32,DWORD,BOOL32);
+DWORD       WINAPI VirtualQueryEx(HANDLE,LPCVOID,LPMEMORY_BASIC_INFORMATION,DWORD);
+BOOL      WINAPI VirtualUnlock(LPVOID,DWORD);
+BOOL      WINAPI WaitCommEvent(HANDLE,LPDWORD,LPOVERLAPPED);
+BOOL      WINAPI WaitForDebugEvent(LPDEBUG_EVENT,DWORD);
+DWORD       WINAPI WaitForMultipleObjects(DWORD,const HANDLE*,BOOL,DWORD);
+DWORD       WINAPI WaitForMultipleObjectsEx(DWORD,const HANDLE*,BOOL,DWORD,BOOL);
+DWORD       WINAPI WaitForSingleObject(HANDLE,DWORD);
+DWORD       WINAPI WaitForSingleObjectEx(HANDLE,DWORD,BOOL);
 SEGPTR      WINAPI WOWGlobalAllocLock16(DWORD,DWORD,HGLOBAL16*);
 DWORD       WINAPI WOWCallback16(FARPROC16,DWORD);
-BOOL32      WINAPI WOWCallback16Ex(FARPROC16,DWORD,DWORD,LPVOID,LPDWORD);
-HANDLE32    WINAPI WOWHandle32(WORD,WOW_HANDLE_TYPE);
-BOOL32      WINAPI WriteConsole32A(HANDLE32,LPCVOID,DWORD,LPDWORD,LPVOID);
-BOOL32      WINAPI WriteConsole32W(HANDLE32,LPCVOID,DWORD,LPDWORD,LPVOID);
+BOOL      WINAPI WOWCallback16Ex(FARPROC16,DWORD,DWORD,LPVOID,LPDWORD);
+HANDLE    WINAPI WOWHandle32(WORD,WOW_HANDLE_TYPE);
+BOOL      WINAPI WriteConsoleA(HANDLE,LPCVOID,DWORD,LPDWORD,LPVOID);
+BOOL      WINAPI WriteConsoleW(HANDLE,LPCVOID,DWORD,LPDWORD,LPVOID);
 #define     WriteConsole WINELIB_NAME_AW(WriteConsole)
-BOOL32      WINAPI WriteFile(HANDLE32,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
-VOID        WINAPI ZeroMemory(LPVOID,UINT32);
+BOOL      WINAPI WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
+VOID        WINAPI ZeroMemory(LPVOID,UINT);
 #define     ZeroMemory RtlZeroMemory
 DWORD       WINAPI GetLastError(void);
 LANGID      WINAPI GetSystemDefaultLangID(void);
@@ -1597,304 +1589,244 @@
 LANGID      WINAPI GetUserDefaultLangID(void);
 LCID        WINAPI GetUserDefaultLCID(void);
 VOID        WINAPI SetLastError(DWORD);
-ATOM        WINAPI AddAtom32A(LPCSTR);
-ATOM        WINAPI AddAtom32W(LPCWSTR);
+ATOM        WINAPI AddAtomA(LPCSTR);
+ATOM        WINAPI AddAtomW(LPCWSTR);
 #define     AddAtom WINELIB_NAME_AW(AddAtom)
-UINT32      WINAPI CompareString32A(DWORD,DWORD,LPCSTR,DWORD,LPCSTR,DWORD);
-UINT32      WINAPI CompareString32W(DWORD,DWORD,LPCWSTR,DWORD,LPCWSTR,DWORD);
+UINT      WINAPI CompareStringA(DWORD,DWORD,LPCSTR,DWORD,LPCSTR,DWORD);
+UINT      WINAPI CompareStringW(DWORD,DWORD,LPCWSTR,DWORD,LPCWSTR,DWORD);
 #define     CompareString WINELIB_NAME_AW(CompareString)
-BOOL32      WINAPI CreateDirectory32A(LPCSTR,LPSECURITY_ATTRIBUTES);
-BOOL32      WINAPI CreateDirectory32W(LPCWSTR,LPSECURITY_ATTRIBUTES);
+BOOL      WINAPI CreateDirectoryA(LPCSTR,LPSECURITY_ATTRIBUTES);
+BOOL      WINAPI CreateDirectoryW(LPCWSTR,LPSECURITY_ATTRIBUTES);
 #define     CreateDirectory WINELIB_NAME_AW(CreateDirectory)
-BOOL32      WINAPI CreateDirectoryEx32A(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES);
-BOOL32      WINAPI CreateDirectoryEx32W(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES);
+BOOL      WINAPI CreateDirectoryExA(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES);
+BOOL      WINAPI CreateDirectoryExW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES);
 #define     CreateDirectoryEx WINELIB_NAME_AW(CreateDirectoryEx)
-#define     DefineHandleTable32(w) ((w),TRUE)
-#define     DefineHandleTable WINELIB_NAME(DefineHandleTable)
-ATOM        WINAPI DeleteAtom32(ATOM);
-#define     DeleteAtom WINELIB_NAME(DeleteAtom)
-BOOL32      WINAPI DeleteFile32A(LPCSTR);
-BOOL32      WINAPI DeleteFile32W(LPCWSTR);
+#define     DefineHandleTable(w) ((w),TRUE)
+ATOM        WINAPI DeleteAtom(ATOM);
+BOOL      WINAPI DeleteFileA(LPCSTR);
+BOOL      WINAPI DeleteFileW(LPCWSTR);
 #define     DeleteFile WINELIB_NAME_AW(DeleteFile)
-void        WINAPI FatalAppExit32A(UINT32,LPCSTR);
-void        WINAPI FatalAppExit32W(UINT32,LPCWSTR);
+void        WINAPI FatalAppExitA(UINT,LPCSTR);
+void        WINAPI FatalAppExitW(UINT,LPCWSTR);
 #define     FatalAppExit WINELIB_NAME_AW(FatalAppExit)
-ATOM        WINAPI FindAtom32A(LPCSTR);
-ATOM        WINAPI FindAtom32W(LPCWSTR);
+ATOM        WINAPI FindAtomA(LPCSTR);
+ATOM        WINAPI FindAtomW(LPCWSTR);
 #define     FindAtom WINELIB_NAME_AW(FindAtom)
-BOOL32      WINAPI FindClose32(HANDLE32);
-#define     FindClose WINELIB_NAME(FindClose)
-HANDLE16    WINAPI FindFirstFile16(LPCSTR,LPWIN32_FIND_DATA32A);
-HANDLE32    WINAPI FindFirstFile32A(LPCSTR,LPWIN32_FIND_DATA32A);
-HANDLE32    WINAPI FindFirstFile32W(LPCWSTR,LPWIN32_FIND_DATA32W);
+BOOL      WINAPI FindClose(HANDLE);
+HANDLE16    WINAPI FindFirstFile16(LPCSTR,LPWIN32_FIND_DATAA);
+HANDLE    WINAPI FindFirstFileA(LPCSTR,LPWIN32_FIND_DATAA);
+HANDLE    WINAPI FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW);
 #define     FindFirstFile WINELIB_NAME_AW(FindFirstFile)
-BOOL16      WINAPI FindNextFile16(HANDLE16,LPWIN32_FIND_DATA32A);
-BOOL32      WINAPI FindNextFile32A(HANDLE32,LPWIN32_FIND_DATA32A);
-BOOL32      WINAPI FindNextFile32W(HANDLE32,LPWIN32_FIND_DATA32W);
+BOOL16      WINAPI FindNextFile16(HANDLE16,LPWIN32_FIND_DATAA);
+BOOL      WINAPI FindNextFileA(HANDLE,LPWIN32_FIND_DATAA);
+BOOL      WINAPI FindNextFileW(HANDLE,LPWIN32_FIND_DATAW);
 #define     FindNextFile WINELIB_NAME_AW(FindNextFile)
-HRSRC32     WINAPI FindResource32A(HMODULE32,LPCSTR,LPCSTR);
-HRSRC32     WINAPI FindResource32W(HMODULE32,LPCWSTR,LPCWSTR);
+HRSRC     WINAPI FindResourceA(HMODULE,LPCSTR,LPCSTR);
+HRSRC     WINAPI FindResourceW(HMODULE,LPCWSTR,LPCWSTR);
 #define     FindResource WINELIB_NAME_AW(FindResource)
 VOID        WINAPI FreeLibrary16(HINSTANCE16);
-BOOL32      WINAPI FreeLibrary32(HMODULE32);
-#define     FreeLibrary WINELIB_NAME(FreeLibrary)
-#define     FreeModule32(handle) FreeLibrary32(handle)
-#define     FreeProcInstance32(proc) /*nothing*/
-#define     FreeProcInstance WINELIB_NAME(FreeProcInstance)
-BOOL32      WINAPI FreeResource32(HGLOBAL32);
-#define     FreeResource WINELIB_NAME(FreeResource)
-UINT32      WINAPI GetAtomName32A(ATOM,LPSTR,INT32);
-UINT32      WINAPI GetAtomName32W(ATOM,LPWSTR,INT32);
+BOOL      WINAPI FreeLibrary(HMODULE);
+#define     FreeModule(handle) FreeLibrary(handle)
+#define     FreeProcInstance(proc) /*nothing*/
+BOOL      WINAPI FreeResource(HGLOBAL);
+UINT      WINAPI GetAtomNameA(ATOM,LPSTR,INT);
+UINT      WINAPI GetAtomNameW(ATOM,LPWSTR,INT);
 #define     GetAtomName WINELIB_NAME_AW(GetAtomName)
-UINT32      WINAPI GetCurrentDirectory32A(UINT32,LPSTR);
-UINT32      WINAPI GetCurrentDirectory32W(UINT32,LPWSTR);
+UINT      WINAPI GetCurrentDirectoryA(UINT,LPSTR);
+UINT      WINAPI GetCurrentDirectoryW(UINT,LPWSTR);
 #define     GetCurrentDirectory WINELIB_NAME_AW(GetCurrentDirectory)
-BOOL32      WINAPI GetDiskFreeSpace32A(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
-BOOL32      WINAPI GetDiskFreeSpace32W(LPCWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+BOOL      WINAPI GetDiskFreeSpaceA(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+BOOL      WINAPI GetDiskFreeSpaceW(LPCWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
 #define     GetDiskFreeSpace WINELIB_NAME_AW(GetDiskFreeSpace)
-BOOL32      WINAPI GetDiskFreeSpaceEx32A(LPCSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
-BOOL32      WINAPI GetDiskFreeSpaceEx32W(LPCWSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
+BOOL      WINAPI GetDiskFreeSpaceExA(LPCSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
+BOOL      WINAPI GetDiskFreeSpaceExW(LPCWSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
 #define     GetDiskFreeSpaceEx WINELIB_NAME_AW(GetDiskFreeSpaceEx)
-UINT32      WINAPI GetDriveType32A(LPCSTR);
-UINT32      WINAPI GetDriveType32W(LPCWSTR);
+UINT      WINAPI GetDriveTypeA(LPCSTR);
+UINT      WINAPI GetDriveTypeW(LPCWSTR);
 #define     GetDriveType WINELIB_NAME_AW(GetDriveType)
-DWORD       WINAPI GetFileAttributes32A(LPCSTR);
-DWORD       WINAPI GetFileAttributes32W(LPCWSTR);
+DWORD       WINAPI GetFileAttributesA(LPCSTR);
+DWORD       WINAPI GetFileAttributesW(LPCWSTR);
 #define     GetFileAttributes WINELIB_NAME_AW(GetFileAttributes)
-#define     GetFreeSpace32(w) (0x100000L)
-#define     GetFreeSpace WINELIB_NAME(GetFreeSpace)
-UINT32      WINAPI GetLogicalDriveStrings32A(UINT32,LPSTR);
-UINT32      WINAPI GetLogicalDriveStrings32W(UINT32,LPWSTR);
+#define     GetFreeSpace(w) (0x100000L)
+UINT      WINAPI GetLogicalDriveStringsA(UINT,LPSTR);
+UINT      WINAPI GetLogicalDriveStringsW(UINT,LPWSTR);
 #define     GetLogicalDriveStrings WINELIB_NAME_AW(GetLogicalDriveStrings)
-INT32       WINAPI GetLocaleInfo32A(LCID,LCTYPE,LPSTR,INT32);
-INT32       WINAPI GetLocaleInfo32W(LCID,LCTYPE,LPWSTR,INT32);
+INT       WINAPI GetLocaleInfoA(LCID,LCTYPE,LPSTR,INT);
+INT       WINAPI GetLocaleInfoW(LCID,LCTYPE,LPWSTR,INT);
 #define     GetLocaleInfo WINELIB_NAME_AW(GetLocaleInfo)
-DWORD       WINAPI GetModuleFileName32A(HMODULE32,LPSTR,DWORD);
-DWORD       WINAPI GetModuleFileName32W(HMODULE32,LPWSTR,DWORD);
+DWORD       WINAPI GetModuleFileNameA(HMODULE,LPSTR,DWORD);
+DWORD       WINAPI GetModuleFileNameW(HMODULE,LPWSTR,DWORD);
 #define     GetModuleFileName WINELIB_NAME_AW(GetModuleFileName)
-HMODULE32   WINAPI GetModuleHandle32A(LPCSTR);
-HMODULE32   WINAPI GetModuleHandle32W(LPCWSTR);
+HMODULE   WINAPI GetModuleHandleA(LPCSTR);
+HMODULE   WINAPI GetModuleHandleW(LPCWSTR);
 #define     GetModuleHandle WINELIB_NAME_AW(GetModuleHandle)
-UINT32      WINAPI GetPrivateProfileInt32A(LPCSTR,LPCSTR,INT32,LPCSTR);
-UINT32      WINAPI GetPrivateProfileInt32W(LPCWSTR,LPCWSTR,INT32,LPCWSTR);
+UINT      WINAPI GetPrivateProfileIntA(LPCSTR,LPCSTR,INT,LPCSTR);
+UINT      WINAPI GetPrivateProfileIntW(LPCWSTR,LPCWSTR,INT,LPCWSTR);
 #define     GetPrivateProfileInt WINELIB_NAME_AW(GetPrivateProfileInt)
-INT32       WINAPI GetPrivateProfileSection32A(LPCSTR,LPSTR,DWORD,LPCSTR);
-INT32       WINAPI GetPrivateProfileSection32W(LPCWSTR,LPWSTR,DWORD,LPCWSTR);
+INT       WINAPI GetPrivateProfileSectionA(LPCSTR,LPSTR,DWORD,LPCSTR);
+INT       WINAPI GetPrivateProfileSectionW(LPCWSTR,LPWSTR,DWORD,LPCWSTR);
 #define     GetPrivateProfileSection WINELIB_NAME_AW(GetPrivateProfileSection)
-DWORD       WINAPI GetPrivateProfileSectionNames32A(LPSTR,DWORD,LPCSTR);
-DWORD       WINAPI GetPrivateProfileSectionNames32W(LPWSTR,DWORD,LPCWSTR);
+DWORD       WINAPI GetPrivateProfileSectionNamesA(LPSTR,DWORD,LPCSTR);
+DWORD       WINAPI GetPrivateProfileSectionNamesW(LPWSTR,DWORD,LPCWSTR);
 #define     GetPrivateProfileSectionNames WINELIB_NAME_AW(GetPrivateProfileSectionNames)
-INT32       WINAPI GetPrivateProfileString32A(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT32,LPCSTR);
-INT32       WINAPI GetPrivateProfileString32W(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT32,LPCWSTR);
+INT       WINAPI GetPrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT,LPCSTR);
+INT       WINAPI GetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT,LPCWSTR);
 #define     GetPrivateProfileString WINELIB_NAME_AW(GetPrivateProfileString)
-BOOL32      WINAPI GetPrivateProfileStruct32A(LPCSTR,LPCSTR,LPVOID,UINT32,LPCSTR);
-BOOL32      WINAPI GetPrivateProfileStruct32W(LPCWSTR,LPCWSTR,LPVOID,UINT32,LPCWSTR);
+BOOL      WINAPI GetPrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR);
+BOOL      WINAPI GetPrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR);
 #define     GetPrivateProfileStruct WINELIB_NAME_AW(GetPrivateProfileStruct)
-FARPROC32   WINAPI GetProcAddress32(HMODULE32,LPCSTR);
-#define     GetProcAddress WINELIB_NAME(GetProcAddress)
-UINT32      WINAPI GetProfileInt32A(LPCSTR,LPCSTR,INT32);
-UINT32      WINAPI GetProfileInt32W(LPCWSTR,LPCWSTR,INT32);
+FARPROC   WINAPI GetProcAddress(HMODULE,LPCSTR);
+UINT      WINAPI GetProfileIntA(LPCSTR,LPCSTR,INT);
+UINT      WINAPI GetProfileIntW(LPCWSTR,LPCWSTR,INT);
 #define     GetProfileInt WINELIB_NAME_AW(GetProfileInt)
-INT32       WINAPI GetProfileSection32A(LPCSTR,LPSTR,DWORD);
-INT32       WINAPI GetProfileSection32W(LPCWSTR,LPWSTR,DWORD);
+INT       WINAPI GetProfileSectionA(LPCSTR,LPSTR,DWORD);
+INT       WINAPI GetProfileSectionW(LPCWSTR,LPWSTR,DWORD);
 #define     GetProfileSection WINELIB_NAME_AW(GetProfileSection)
-INT32       WINAPI GetProfileString32A(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT32);
-INT32       WINAPI GetProfileString32W(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT32);
+INT       WINAPI GetProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT);
+INT       WINAPI GetProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT);
 #define     GetProfileString WINELIB_NAME_AW(GetProfileString)
-BOOL32      WINAPI GetStringType32A(LCID,DWORD,LPCSTR,INT32,LPWORD);
-BOOL32      WINAPI GetStringType32W(DWORD,LPCWSTR,INT32,LPWORD);
+BOOL      WINAPI GetStringTypeA(LCID,DWORD,LPCSTR,INT,LPWORD);
+BOOL      WINAPI GetStringTypeW(DWORD,LPCWSTR,INT,LPWORD);
 #define     GetStringType WINELIB_NAME_AW(GetStringType)
-UINT32      WINAPI GetSystemDirectory32A(LPSTR,UINT32);
-UINT32      WINAPI GetSystemDirectory32W(LPWSTR,UINT32);
+UINT      WINAPI GetSystemDirectoryA(LPSTR,UINT);
+UINT      WINAPI GetSystemDirectoryW(LPWSTR,UINT);
 #define     GetSystemDirectory WINELIB_NAME_AW(GetSystemDirectory)
-UINT32      WINAPI GetTempFileName32A(LPCSTR,LPCSTR,UINT32,LPSTR);
-UINT32      WINAPI GetTempFileName32W(LPCWSTR,LPCWSTR,UINT32,LPWSTR);
+UINT      WINAPI GetTempFileNameA(LPCSTR,LPCSTR,UINT,LPSTR);
+UINT      WINAPI GetTempFileNameW(LPCWSTR,LPCWSTR,UINT,LPWSTR);
 #define     GetTempFileName WINELIB_NAME_AW(GetTempFileName)
-UINT32      WINAPI GetTempPath32A(UINT32,LPSTR);
-UINT32      WINAPI GetTempPath32W(UINT32,LPWSTR);
+UINT      WINAPI GetTempPathA(UINT,LPSTR);
+UINT      WINAPI GetTempPathW(UINT,LPWSTR);
 #define     GetTempPath WINELIB_NAME_AW(GetTempPath)
-LONG        WINAPI GetVersion32(void);
-#define     GetVersion WINELIB_NAME(GetVersion)
-BOOL32      WINAPI GetExitCodeProcess(HANDLE32,LPDWORD);
-BOOL32      WINAPI GetVolumeInformation32A(LPCSTR,LPSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD);
-BOOL32      WINAPI GetVolumeInformation32W(LPCWSTR,LPWSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD);
+LONG        WINAPI GetVersion(void);
+BOOL      WINAPI GetExitCodeProcess(HANDLE,LPDWORD);
+BOOL      WINAPI GetVolumeInformationA(LPCSTR,LPSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD);
+BOOL      WINAPI GetVolumeInformationW(LPCWSTR,LPWSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD);
 #define     GetVolumeInformation WINELIB_NAME_AW(GetVolumeInformation)
-UINT32      WINAPI GetWindowsDirectory32A(LPSTR,UINT32);
-UINT32      WINAPI GetWindowsDirectory32W(LPWSTR,UINT32);
+UINT      WINAPI GetWindowsDirectoryA(LPSTR,UINT);
+UINT      WINAPI GetWindowsDirectoryW(LPWSTR,UINT);
 #define     GetWindowsDirectory WINELIB_NAME_AW(GetWindowsDirectory)
 HGLOBAL16   WINAPI GlobalAlloc16(UINT16,DWORD);
-HGLOBAL32   WINAPI GlobalAlloc32(UINT32,DWORD);
-#define     GlobalAlloc WINELIB_NAME(GlobalAlloc)
-DWORD       WINAPI GlobalCompact32(DWORD);
-#define     GlobalCompact WINELIB_NAME(GlobalCompact)
-UINT32      WINAPI GlobalFlags32(HGLOBAL32);
-#define     GlobalFlags WINELIB_NAME(GlobalFlags)
+HGLOBAL   WINAPI GlobalAlloc(UINT,DWORD);
+DWORD       WINAPI GlobalCompact(DWORD);
+UINT      WINAPI GlobalFlags(HGLOBAL);
 HGLOBAL16   WINAPI GlobalFree16(HGLOBAL16);
-HGLOBAL32   WINAPI GlobalFree32(HGLOBAL32);
-#define     GlobalFree WINELIB_NAME(GlobalFree)
-HGLOBAL32   WINAPI GlobalHandle32(LPCVOID);
-#define     GlobalHandle WINELIB_NAME(GlobalHandle)
+HGLOBAL   WINAPI GlobalFree(HGLOBAL);
+HGLOBAL   WINAPI GlobalHandle(LPCVOID);
 WORD        WINAPI GlobalFix16(HGLOBAL16);
-VOID        WINAPI GlobalFix32(HGLOBAL32);
-#define     GlobalFix WINELIB_NAME(GlobalFix)
+VOID        WINAPI GlobalFix(HGLOBAL);
 LPVOID      WINAPI GlobalLock16(HGLOBAL16);
-LPVOID      WINAPI GlobalLock32(HGLOBAL32);
-#define     GlobalLock WINELIB_NAME(GlobalLock)
-HGLOBAL32   WINAPI GlobalReAlloc32(HGLOBAL32,DWORD,UINT32);
-#define     GlobalReAlloc WINELIB_NAME(GlobalReAlloc)
+LPVOID      WINAPI GlobalLock(HGLOBAL);
+HGLOBAL   WINAPI GlobalReAlloc(HGLOBAL,DWORD,UINT);
 DWORD       WINAPI GlobalSize16(HGLOBAL16);
-DWORD       WINAPI GlobalSize32(HGLOBAL32);
-#define     GlobalSize WINELIB_NAME(GlobalSize)
+DWORD       WINAPI GlobalSize(HGLOBAL);
 VOID        WINAPI GlobalUnfix16(HGLOBAL16);
-VOID        WINAPI GlobalUnfix32(HGLOBAL32);
-#define     GlobalUnfix WINELIB_NAME(GlobalUnfix)
+VOID        WINAPI GlobalUnfix(HGLOBAL);
 BOOL16      WINAPI GlobalUnlock16(HGLOBAL16);
-BOOL32      WINAPI GlobalUnlock32(HGLOBAL32);
-#define     GlobalUnlock WINELIB_NAME(GlobalUnlock)
+BOOL      WINAPI GlobalUnlock(HGLOBAL);
 BOOL16      WINAPI GlobalUnWire16(HGLOBAL16);
-BOOL32      WINAPI GlobalUnWire32(HGLOBAL32);
-#define     GlobalUnWire WINELIB_NAME(GlobalUnWire)
+BOOL      WINAPI GlobalUnWire(HGLOBAL);
 SEGPTR      WINAPI GlobalWire16(HGLOBAL16);
-LPVOID      WINAPI GlobalWire32(HGLOBAL32);
-#define     GlobalWire WINELIB_NAME(GlobalWire)
-BOOL32      WINAPI InitAtomTable32(DWORD);
-#define     InitAtomTable WINELIB_NAME(InitAtomTable)
-BOOL32      WINAPI IsBadCodePtr32(FARPROC32);
-#define     IsBadCodePtr WINELIB_NAME(IsBadCodePtr)
-BOOL32      WINAPI IsBadHugeReadPtr32(LPCVOID,UINT32);
-#define     IsBadHugeReadPtr WINELIB_NAME(IsBadHugeReadPtr)
-BOOL32      WINAPI IsBadHugeWritePtr32(LPVOID,UINT32);
-#define     IsBadHugeWritePtr WINELIB_NAME(IsBadHugeWritePtr)
-BOOL32      WINAPI IsBadReadPtr32(LPCVOID,UINT32);
-#define     IsBadReadPtr WINELIB_NAME(IsBadReadPtr)
-BOOL32      WINAPI IsBadStringPtr32A(LPCSTR,UINT32);
-BOOL32      WINAPI IsBadStringPtr32W(LPCWSTR,UINT32);
+LPVOID      WINAPI GlobalWire(HGLOBAL);
+BOOL      WINAPI InitAtomTable(DWORD);
+BOOL      WINAPI IsBadCodePtr(FARPROC);
+BOOL      WINAPI IsBadHugeReadPtr(LPCVOID,UINT);
+BOOL      WINAPI IsBadHugeWritePtr(LPVOID,UINT);
+BOOL      WINAPI IsBadReadPtr(LPCVOID,UINT);
+BOOL      WINAPI IsBadStringPtrA(LPCSTR,UINT);
+BOOL      WINAPI IsBadStringPtrW(LPCWSTR,UINT);
 #define     IsBadStringPtr WINELIB_NAME_AW(IsBadStringPtr)
-BOOL32      WINAPI IsBadWritePtr32(LPVOID,UINT32);
-#define     IsBadWritePtr WINELIB_NAME(IsBadWritePtr)
-BOOL32      WINAPI IsDBCSLeadByte32(BYTE);
-#define     IsDBCSLeadByte WINELIB_NAME(IsDBCSLeadByte)
+BOOL      WINAPI IsBadWritePtr(LPVOID,UINT);
+BOOL      WINAPI IsDBCSLeadByte(BYTE);
 HINSTANCE16 WINAPI LoadLibrary16(LPCSTR);
-HMODULE32   WINAPI LoadLibrary32A(LPCSTR);
-HMODULE32   WINAPI LoadLibrary32W(LPCWSTR);
+HMODULE   WINAPI LoadLibraryA(LPCSTR);
+HMODULE   WINAPI LoadLibraryW(LPCWSTR);
 #define     LoadLibrary WINELIB_NAME_AW(LoadLibrary)
-HMODULE32   WINAPI LoadLibraryEx32A(LPCSTR,HFILE32,DWORD);
-HMODULE32   WINAPI LoadLibraryEx32W(LPCWSTR,HFILE32,DWORD);
+HMODULE   WINAPI LoadLibraryExA(LPCSTR,HFILE,DWORD);
+HMODULE   WINAPI LoadLibraryExW(LPCWSTR,HFILE,DWORD);
 #define     LoadLibraryEx WINELIB_NAME_AW(LoadLibraryEx)
 HINSTANCE16 WINAPI LoadModule16(LPCSTR,LPVOID);
-HINSTANCE32 WINAPI LoadModule32(LPCSTR,LPVOID);
-#define     LoadModule WINELIB_NAME(LoadModule)
-HGLOBAL32   WINAPI LoadResource32(HMODULE32,HRSRC32);
-#define     LoadResource WINELIB_NAME(LoadResource)
-HLOCAL32    WINAPI LocalAlloc32(UINT32,DWORD);
-#define     LocalAlloc WINELIB_NAME(LocalAlloc)
-UINT32      WINAPI LocalCompact32(UINT32);
-#define     LocalCompact WINELIB_NAME(LocalCompact)
-UINT32      WINAPI LocalFlags32(HLOCAL32);
-#define     LocalFlags WINELIB_NAME(LocalFlags)
-HLOCAL32    WINAPI LocalFree32(HLOCAL32);
-#define     LocalFree WINELIB_NAME(LocalFree)
-HLOCAL32    WINAPI LocalHandle32(LPCVOID);
-#define     LocalHandle WINELIB_NAME(LocalHandle)
-LPVOID      WINAPI LocalLock32(HLOCAL32);
-#define     LocalLock WINELIB_NAME(LocalLock)
-HLOCAL32    WINAPI LocalReAlloc32(HLOCAL32,DWORD,UINT32);
-#define     LocalReAlloc WINELIB_NAME(LocalReAlloc)
-UINT32      WINAPI LocalShrink32(HGLOBAL32,UINT32);
-#define     LocalShrink WINELIB_NAME(LocalShrink)
-UINT32      WINAPI LocalSize32(HLOCAL32);
-#define     LocalSize WINELIB_NAME(LocalSize)
-BOOL32      WINAPI LocalUnlock32(HLOCAL32);
-#define     LocalUnlock WINELIB_NAME(LocalUnlock)
-LPVOID      WINAPI LockResource32(HGLOBAL32);
-#define     LockResource WINELIB_NAME(LockResource)
-#define     LockSegment32(handle) GlobalFix32((HANDLE32)(handle))
-#define     LockSegment WINELIB_NAME(LockSegment)
-#define     MakeProcInstance32(proc,inst) (proc)
-#define     MakeProcInstance WINELIB_NAME(MakeProcInstance)
+HINSTANCE WINAPI LoadModule(LPCSTR,LPVOID);
+HGLOBAL   WINAPI LoadResource(HMODULE,HRSRC);
+HLOCAL    WINAPI LocalAlloc(UINT,DWORD);
+UINT      WINAPI LocalCompact(UINT);
+UINT      WINAPI LocalFlags(HLOCAL);
+HLOCAL    WINAPI LocalFree(HLOCAL);
+HLOCAL    WINAPI LocalHandle(LPCVOID);
+LPVOID      WINAPI LocalLock(HLOCAL);
+HLOCAL    WINAPI LocalReAlloc(HLOCAL,DWORD,UINT);
+UINT      WINAPI LocalShrink(HGLOBAL,UINT);
+UINT      WINAPI LocalSize(HLOCAL);
+BOOL      WINAPI LocalUnlock(HLOCAL);
+LPVOID      WINAPI LockResource(HGLOBAL);
+#define     LockSegment(handle) GlobalFix((HANDLE)(handle))
+#define     MakeProcInstance(proc,inst) (proc)
 HFILE16     WINAPI OpenFile16(LPCSTR,OFSTRUCT*,UINT16);
-HFILE32     WINAPI OpenFile32(LPCSTR,OFSTRUCT*,UINT32);
-#define     OpenFile WINELIB_NAME(OpenFile)
-VOID        WINAPI OutputDebugString32A(LPCSTR);
-VOID        WINAPI OutputDebugString32W(LPCWSTR);
+HFILE     WINAPI OpenFile(LPCSTR,OFSTRUCT*,UINT);
+VOID        WINAPI OutputDebugStringA(LPCSTR);
+VOID        WINAPI OutputDebugStringW(LPCWSTR);
 #define     OutputDebugString WINELIB_NAME_AW(OutputDebugString)
-BOOL32      WINAPI RemoveDirectory32A(LPCSTR);
-BOOL32      WINAPI RemoveDirectory32W(LPCWSTR);
+BOOL      WINAPI RemoveDirectoryA(LPCSTR);
+BOOL      WINAPI RemoveDirectoryW(LPCWSTR);
 #define     RemoveDirectory WINELIB_NAME_AW(RemoveDirectory)
-BOOL32      WINAPI SetCurrentDirectory32A(LPCSTR);
-BOOL32      WINAPI SetCurrentDirectory32W(LPCWSTR);
+BOOL      WINAPI SetCurrentDirectoryA(LPCSTR);
+BOOL      WINAPI SetCurrentDirectoryW(LPCWSTR);
 #define     SetCurrentDirectory WINELIB_NAME_AW(SetCurrentDirectory)
-UINT32      WINAPI SetErrorMode32(UINT32);
-#define     SetErrorMode WINELIB_NAME(SetErrorMode)
-BOOL32      WINAPI SetFileAttributes32A(LPCSTR,DWORD);
-BOOL32      WINAPI SetFileAttributes32W(LPCWSTR,DWORD);
+UINT      WINAPI SetErrorMode(UINT);
+BOOL      WINAPI SetFileAttributesA(LPCSTR,DWORD);
+BOOL      WINAPI SetFileAttributesW(LPCWSTR,DWORD);
 #define     SetFileAttributes WINELIB_NAME_AW(SetFileAttributes)
-UINT32      WINAPI SetHandleCount32(UINT32);
-#define     SetHandleCount WINELIB_NAME(SetHandleCount)
-#define     SetSwapAreaSize32(w) (w)
-#define     SetSwapAreaSize WINELIB_NAME(SetSwapAreaSize)
-DWORD       WINAPI SizeofResource32(HMODULE32,HRSRC32);
-#define     SizeofResource WINELIB_NAME(SizeofResource)
-#define     UnlockSegment32(handle) GlobalUnfix((HANDLE32)(handle))
-#define     UnlockSegment WINELIB_NAME(UnlockSegment)
-DWORD       WINAPI VerLanguageName32A(UINT32,LPSTR,UINT32);
-DWORD       WINAPI VerLanguageName32W(UINT32,LPWSTR,UINT32);
+UINT      WINAPI SetHandleCount(UINT);
+#define     SetSwapAreaSize(w) (w)
+DWORD       WINAPI SizeofResource(HMODULE,HRSRC);
+#define     UnlockSegment(handle) GlobalUnfix((HANDLE)(handle))
+DWORD       WINAPI VerLanguageNameA(UINT,LPSTR,UINT);
+DWORD       WINAPI VerLanguageNameW(UINT,LPWSTR,UINT);
 #define     VerLanguageName WINELIB_NAME_AW(VerLanguageName)
-BOOL32      WINAPI WritePrivateProfileSection32A(LPCSTR,LPCSTR,LPCSTR);
-BOOL32      WINAPI WritePrivateProfileSection32W(LPCWSTR,LPCWSTR,LPCWSTR);
+BOOL      WINAPI WritePrivateProfileSectionA(LPCSTR,LPCSTR,LPCSTR);
+BOOL      WINAPI WritePrivateProfileSectionW(LPCWSTR,LPCWSTR,LPCWSTR);
 #define     WritePrivateProfileSection WINELIB_NAME_AW(WritePrivateProfileSection)
-BOOL32      WINAPI WritePrivateProfileString32A(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
-BOOL32      WINAPI WritePrivateProfileString32W(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
-BOOL32	     WINAPI WriteProfileSection32A(LPCSTR,LPCSTR);
-BOOL32	     WINAPI WriteProfileSection32W(LPCWSTR,LPCWSTR);
+BOOL      WINAPI WritePrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+BOOL      WINAPI WritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+BOOL	     WINAPI WriteProfileSectionA(LPCSTR,LPCSTR);
+BOOL	     WINAPI WriteProfileSectionW(LPCWSTR,LPCWSTR);
 #define     WritePrivateProfileString WINELIB_NAME_AW(WritePrivateProfileString)
-BOOL32      WINAPI WritePrivateProfileStruct32A(LPCSTR,LPCSTR,LPVOID,UINT32,LPCSTR);
-BOOL32      WINAPI WritePrivateProfileStruct32W(LPCWSTR,LPCWSTR,LPVOID,UINT32,LPCWSTR);
+BOOL      WINAPI WritePrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR);
+BOOL      WINAPI WritePrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR);
 #define     WritePrivateProfileStruct WINELIB_NAME_AW(WritePrivateProfileStruct)
-BOOL32      WINAPI WriteProfileString32A(LPCSTR,LPCSTR,LPCSTR);
-BOOL32      WINAPI WriteProfileString32W(LPCWSTR,LPCWSTR,LPCWSTR);
+BOOL      WINAPI WriteProfileStringA(LPCSTR,LPCSTR,LPCSTR);
+BOOL      WINAPI WriteProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR);
 #define     WriteProfileString WINELIB_NAME_AW(WriteProfileString)
 #define     Yield32()
-#define     Yield WINELIB_NAME(Yield)
-LPSTR       WINAPI lstrcat32A(LPSTR,LPCSTR);
-LPWSTR      WINAPI lstrcat32W(LPWSTR,LPCWSTR);
+LPSTR       WINAPI lstrcatA(LPSTR,LPCSTR);
+LPWSTR      WINAPI lstrcatW(LPWSTR,LPCWSTR);
 #define     lstrcat WINELIB_NAME_AW(lstrcat)
-LPSTR       WINAPI lstrcatn32A(LPSTR,LPCSTR,INT32);
-LPWSTR      WINAPI lstrcatn32W(LPWSTR,LPCWSTR,INT32);
+LPSTR       WINAPI lstrcatnA(LPSTR,LPCSTR,INT);
+LPWSTR      WINAPI lstrcatnW(LPWSTR,LPCWSTR,INT);
 #define     lstrcatn WINELIB_NAME_AW(lstrcatn)
-LPSTR       WINAPI lstrcpy32A(LPSTR,LPCSTR);
-LPWSTR      WINAPI lstrcpy32W(LPWSTR,LPCWSTR);
+LPSTR       WINAPI lstrcpyA(LPSTR,LPCSTR);
+LPWSTR      WINAPI lstrcpyW(LPWSTR,LPCWSTR);
 #define     lstrcpy WINELIB_NAME_AW(lstrcpy)
-LPSTR       WINAPI lstrcpyn32A(LPSTR,LPCSTR,INT32);
-LPWSTR      WINAPI lstrcpyn32W(LPWSTR,LPCWSTR,INT32);
+LPSTR       WINAPI lstrcpynA(LPSTR,LPCSTR,INT);
+LPWSTR      WINAPI lstrcpynW(LPWSTR,LPCWSTR,INT);
 #define     lstrcpyn WINELIB_NAME_AW(lstrcpyn)
-INT32       WINAPI lstrlen32A(LPCSTR);
-INT32       WINAPI lstrlen32W(LPCWSTR);
+INT       WINAPI lstrlenA(LPCSTR);
+INT       WINAPI lstrlenW(LPCWSTR);
 #define     lstrlen WINELIB_NAME_AW(lstrlen)
-HINSTANCE32 WINAPI WinExec32(LPCSTR,UINT32);
-#define     WinExec WINELIB_NAME(WinExec)
-LONG        WINAPI _hread32(HFILE32,LPVOID,LONG);
-#define     _hread WINELIB_NAME(_hread)
-LONG        WINAPI _hwrite32(HFILE32,LPCSTR,LONG);
-#define     _hwrite WINELIB_NAME(_hwrite)
-HFILE32     WINAPI _lcreat32(LPCSTR,INT32);
-#define     _lcreat WINELIB_NAME(_lcreat)
-HFILE32     WINAPI _lclose32(HFILE32);
-#define     _lclose WINELIB_NAME(_lclose)
-LONG        WINAPI _llseek32(HFILE32,LONG,INT32);
-#define     _llseek WINELIB_NAME(_llseek)
-HFILE32     WINAPI _lopen32(LPCSTR,INT32);
-#define     _lopen WINELIB_NAME(_lopen)
-UINT32      WINAPI _lread32(HFILE32,LPVOID,UINT32);
-#define     _lread WINELIB_NAME(_lread)
-UINT32      WINAPI _lwrite32(HFILE32,LPCSTR,UINT32);
-#define     _lwrite WINELIB_NAME(_lwrite)
+HINSTANCE WINAPI WinExec(LPCSTR,UINT);
+LONG        WINAPI _hread(HFILE,LPVOID,LONG);
+LONG        WINAPI _hwrite(HFILE,LPCSTR,LONG);
+HFILE     WINAPI _lcreat(LPCSTR,INT);
+HFILE     WINAPI _lclose(HFILE);
+LONG        WINAPI _llseek(HFILE,LONG,INT);
+HFILE     WINAPI _lopen(LPCSTR,INT);
+UINT      WINAPI _lread(HFILE,LPVOID,UINT);
+UINT      WINAPI _lwrite(HFILE,LPCSTR,UINT);
 SEGPTR      WINAPI WIN16_GlobalLock16(HGLOBAL16);
-INT32       WINAPI lstrcmp32A(LPCSTR,LPCSTR);
-INT32       WINAPI lstrcmp32W(LPCWSTR,LPCWSTR);
+INT       WINAPI lstrcmpA(LPCSTR,LPCSTR);
+INT       WINAPI lstrcmpW(LPCWSTR,LPCWSTR);
 #define     lstrcmp WINELIB_NAME_AW(lstrcmp)
-INT32       WINAPI lstrcmpi32A(LPCSTR,LPCSTR);
-INT32       WINAPI lstrcmpi32W(LPCWSTR,LPCWSTR);
+INT       WINAPI lstrcmpiA(LPCSTR,LPCSTR);
+INT       WINAPI lstrcmpiW(LPCWSTR,LPCWSTR);
 #define     lstrcmpi WINELIB_NAME_AW(lstrcmpi)
 
 
diff --git a/include/wincon.h b/include/wincon.h
index a32a71a..fd73cda 100644
--- a/include/wincon.h
+++ b/include/wincon.h
@@ -20,7 +20,7 @@
 #define ENABLE_WRAP_AT_EOL_OUTPUT 0x02
 
 
-typedef BOOL32 HANDLER_ROUTINE(WORD);
+typedef BOOL HANDLER_ROUTINE(WORD);
 
 /* Attributes flags: */
 
@@ -35,7 +35,7 @@
 
 typedef struct _CONSOLE_CURSOR_INFO {
     DWORD	dwSize;   /* Between 1 & 100 for percentage of cell filled */
-    BOOL32	bVisible; /* Visibility of cursor */
+    BOOL	bVisible; /* Visibility of cursor */
 } CONSOLE_CURSOR_INFO, *LPCONSOLE_CURSOR_INFO;
 
 /*
@@ -75,7 +75,7 @@
 
 typedef struct tagKEY_EVENT_RECORD
 {
-    BOOL32	bKeyDown;		/* 04 */
+    BOOL	bKeyDown;		/* 04 */
     WORD	wRepeatCount;		/* 08 */
     WORD	wVirtualKeyCode;	/* 0A */
     WORD	wVirtualScanCode;	/* 0C */
@@ -113,12 +113,12 @@
 
 typedef struct tagMENU_EVENT_RECORD
 {
-    UINT32	dwCommandId; /* perhaps UINT16 ??? */
+    UINT	dwCommandId; /* perhaps UINT16 ??? */
 } MENU_EVENT_RECORD,*LPMENU_EVENT_RECORD;
 
 typedef struct tagFOCUS_EVENT_RECORD
 {
-    BOOL32      bSetFocus; /* perhaps BOOL16 ??? */
+    BOOL      bSetFocus; /* perhaps BOOL16 ??? */
 } FOCUS_EVENT_RECORD,*LPFOCUS_EVENT_RECORD;
 
 typedef struct tagINPUT_RECORD
@@ -141,36 +141,36 @@
 #define MENU_EVENT			0x08
 #define FOCUS_EVENT 			0x10
 
-BOOL32 WINAPI WriteConsoleOutput32A( HANDLE32 hConsoleOutput, LPCHAR_INFO lpBuffer, COORD dwBufferSize, COORD dwBufferCoord, LPSMALL_RECT lpWriteRegion);
-BOOL32 WINAPI WriteConsoleOutput32W( HANDLE32 hConsoleOutput, LPCHAR_INFO lpBuffer, COORD dwBufferSize, COORD dwBufferCoord, LPSMALL_RECT lpWriteRegion);
+BOOL WINAPI WriteConsoleOutputA( HANDLE hConsoleOutput, LPCHAR_INFO lpBuffer, COORD dwBufferSize, COORD dwBufferCoord, LPSMALL_RECT lpWriteRegion);
+BOOL WINAPI WriteConsoleOutputW( HANDLE hConsoleOutput, LPCHAR_INFO lpBuffer, COORD dwBufferSize, COORD dwBufferCoord, LPSMALL_RECT lpWriteRegion);
 #define WriteConsoleOutput WINELIB_NAME_AW(WriteConsoleOutput)
-BOOL32 WINAPI WriteConsoleInput32A( HANDLE32 handle, INPUT_RECORD *buffer,
+BOOL WINAPI WriteConsoleInputA( HANDLE handle, INPUT_RECORD *buffer,
                                     DWORD count, LPDWORD written );
-BOOL32 WINAPI WriteConsoleInput32W( HANDLE32 handle, INPUT_RECORD *buffer,
+BOOL WINAPI WriteConsoleInputW( HANDLE handle, INPUT_RECORD *buffer,
                                     DWORD count, LPDWORD written );
 #define WriteConsoleInput WINELIB_NAME_AW(WriteConsoleInput)
-BOOL32 WINAPI PeekConsoleInput32A( HANDLE32 handle, LPINPUT_RECORD buffer,
+BOOL WINAPI PeekConsoleInputA( HANDLE handle, LPINPUT_RECORD buffer,
                                    DWORD count, LPDWORD read );
-BOOL32 WINAPI PeekConsoleInput32W( HANDLE32 handle, LPINPUT_RECORD buffer,
+BOOL WINAPI PeekConsoleInputW( HANDLE handle, LPINPUT_RECORD buffer,
                                    DWORD count, LPDWORD read );
 #define PeekConsoleInput WINELIB_NAME_AW(PeekConsoleInput)
-BOOL32 WINAPI ReadConsole32A(	HANDLE32 hConsoleInput, LPVOID lpBuffer,
+BOOL WINAPI ReadConsoleA(	HANDLE hConsoleInput, LPVOID lpBuffer,
 				DWORD nNumberOfCharsToRead,
 	  			LPDWORD lpNumberOfCharsRead, LPVOID lpReserved);
-BOOL32 WINAPI ReadConsole32W(	HANDLE32 hConsoleInput, LPVOID lpBuffer,
+BOOL WINAPI ReadConsoleW(	HANDLE hConsoleInput, LPVOID lpBuffer,
 				DWORD nNumberOfCharsToRead,
 	  			LPDWORD lpNumberOfCharsRead, LPVOID lpReserved);
 #define ReadConsole WINELIB_NAME_AW(ReadConsole)
-BOOL32 WINAPI ReadConsoleInput32A(HANDLE32 hConsoleInput,
+BOOL WINAPI ReadConsoleInputA(HANDLE hConsoleInput,
 				  LPINPUT_RECORD lpBuffer, DWORD nLength,
 				  LPDWORD lpNumberOfEventsRead);
-BOOL32 WINAPI ReadConsoleInput32W(HANDLE32 hConsoleInput,
+BOOL WINAPI ReadConsoleInputW(HANDLE hConsoleInput,
 				  LPINPUT_RECORD lpBuffer, DWORD nLength,
 				  LPDWORD lpNumberOfEventsRead);
 #define ReadConsoleInput WINELIB_NAME_AW(ReadConsoleInput)
 
 #ifdef __WINE__
-extern HANDLE32 CONSOLE_OpenHandle( BOOL32 output, DWORD access, LPSECURITY_ATTRIBUTES sa );
+extern HANDLE CONSOLE_OpenHandle( BOOL output, DWORD access, LPSECURITY_ATTRIBUTES sa );
 #endif
 
 #endif  /* __WINE_WINCON_H */
diff --git a/include/wincrypt.h b/include/wincrypt.h
index c1e5f75..16b47c6 100644
--- a/include/wincrypt.h
+++ b/include/wincrypt.h
@@ -11,7 +11,7 @@
 
 /* function declarations */
 
-BOOL32 WINAPI CryptAcquireContextA(HCRYPTPROV *phProv, LPCSTR pszContainer,
+BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *phProv, LPCSTR pszContainer,
 				   LPCSTR pszProvider, DWORD dwProvType, 
 				   DWORD dwFlags);
 #endif
diff --git a/include/windef.h b/include/windef.h
index a1bbf3b..b9372ea 100644
--- a/include/windef.h
+++ b/include/windef.h
@@ -23,8 +23,7 @@
 #define MAX_PATH 260
 
 #define HFILE_ERROR16   ((HFILE16)-1)
-#define HFILE_ERROR32   ((HFILE32)-1)
-#define HFILE_ERROR     WINELIB_NAME(HFILE_ERROR)
+#define HFILE_ERROR   ((HFILE)-1)
 
 #pragma pack(4)
 
diff --git a/include/windows.h b/include/windows.h
index 813e6bb..97e3dc0 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -29,9 +29,8 @@
 typedef KANJISTRUCT *PKANJISTRUCT;
 
 BOOL16      WINAPI CheckMenuRadioButton16(HMENU16,UINT16,UINT16,UINT16,BOOL16);
-BOOL32      WINAPI CheckMenuRadioButton32(HMENU32,UINT32,UINT32,UINT32,BOOL32);
-#define     CheckMenuRadioButton WINELIB_NAME(CheckMenuRadioButton)
-WORD        WINAPI WOWHandle16(HANDLE32,WOW_HANDLE_TYPE);
+BOOL      WINAPI CheckMenuRadioButton(HMENU,UINT,UINT,UINT,BOOL);
+WORD        WINAPI WOWHandle16(HANDLE,WOW_HANDLE_TYPE);
 BOOL16      WINAPI GetPrivateProfileStruct16(LPCSTR,LPCSTR,LPVOID,UINT16,LPCSTR);
 INT16       WINAPI GetPrivateProfileSection16(LPCSTR,LPSTR,UINT16,LPCSTR);
 
diff --git a/include/windowsx.h b/include/windowsx.h
index cde7c6b..7e28af6 100644
--- a/include/windowsx.h
+++ b/include/windowsx.h
@@ -268,7 +268,7 @@
 #define _nmsize     _msize
 #define _nrealloc   realloc
 #define _nstrdup    _strdup
-#define hmemcpy     MoveMemory
+#define hmemcpy16     MoveMemory
 
 #ifdef __cplusplus
 }
diff --git a/include/wine/obj_base.h b/include/wine/obj_base.h
index d43d861..e75a370 100644
--- a/include/wine/obj_base.h
+++ b/include/wine/obj_base.h
@@ -35,21 +35,18 @@
  * GUID API
  */
 HRESULT WINAPI StringFromCLSID16(REFCLSID id, LPOLESTR16*);
-HRESULT WINAPI StringFromCLSID32(REFCLSID id, LPOLESTR32*);
-#define StringFromCLSID WINELIB_NAME(StringFromCLSID)
+HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR*);
 
 HRESULT WINAPI CLSIDFromString16(LPCOLESTR16, CLSID *);
-HRESULT WINAPI CLSIDFromString32(LPCOLESTR32, CLSID *);
-#define CLSIDFromString WINELIB_NAME(CLSIDFromString)
+HRESULT WINAPI CLSIDFromString(LPCOLESTR, CLSID *);
 
 HRESULT WINAPI CLSIDFromProgID16(LPCOLESTR16 progid, LPCLSID riid);
-HRESULT WINAPI CLSIDFromProgID32(LPCOLESTR32 progid, LPCLSID riid);
-#define CLSIDFromProgID WINELIB_NAME(CLSIDFromProgID)
+HRESULT WINAPI CLSIDFromProgID(LPCOLESTR progid, LPCLSID riid);
 
-INT32 WINAPI StringFromGUID2(REFGUID id, LPOLESTR32 str, INT32 cmax);
+INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax);
 
 BOOL16 WINAPI IsEqualGUID16(GUID* g1,GUID* g2);
-BOOL32 WINAPI IsEqualGUID32(REFGUID rguid1,REFGUID rguid2);
+BOOL WINAPI IsEqualGUID32(REFGUID rguid1,REFGUID rguid2);
 /*#define IsEqualGUID WINELIB_NAME(IsEqualGUID)*/
 #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
 #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
@@ -668,9 +665,7 @@
 
 DEFINE_OLEGUID(IID_IMalloc,		0x00000002L, 0, 0);
 typedef struct IMalloc16 IMalloc16,*LPMALLOC16;
-typedef struct IMalloc32 IMalloc32,*LPMALLOC32;
-DECL_WINELIB_TYPE(IMalloc)
-DECL_WINELIB_TYPE(LPMALLOC)
+typedef struct IMalloc IMalloc,*LPMALLOC;
 
 DEFINE_OLEGUID(IID_IUnknown,		0x00000000L, 0, 0);
 typedef struct IUnknown IUnknown, *LPUNKNOWN;
@@ -719,7 +714,7 @@
 #define ICOM_INTERFACE IClassFactory
 #define IClassFactory_METHODS \
     ICOM_METHOD3(HRESULT,CreateInstance, LPUNKNOWN,pUnkOuter, REFIID,riid, LPVOID*,ppvObject) \
-    ICOM_METHOD1(HRESULT,LockServer,     BOOL32,fLock)
+    ICOM_METHOD1(HRESULT,LockServer,     BOOL,fLock)
 #define IClassFactory_IMETHODS \
     IUnknown_IMETHODS \
     IClassFactory_METHODS
@@ -769,32 +764,32 @@
 #endif
 
 
-#define ICOM_INTERFACE IMalloc32
-#define IMalloc32_METHODS \
+#define ICOM_INTERFACE IMalloc
+#define IMalloc_METHODS \
     ICOM_METHOD1 (LPVOID,Alloc,       DWORD,cb) \
     ICOM_METHOD2 (LPVOID,Realloc,     LPVOID,pv, DWORD,cb) \
     ICOM_VMETHOD1(       Free,        LPVOID,pv) \
     ICOM_CMETHOD1(DWORD, GetSize,     LPVOID,pv) \
-    ICOM_CMETHOD1(INT32, DidAlloc,    LPVOID,pv) \
+    ICOM_CMETHOD1(INT, DidAlloc,    LPVOID,pv) \
     ICOM_METHOD  (LPVOID,HeapMinimize)
-#define IMalloc32_IMETHODS \
+#define IMalloc_IMETHODS \
     IUnknown_IMETHODS \
-    IMalloc32_METHODS
-ICOM_DEFINE(IMalloc32,IUnknown)
+    IMalloc_METHODS
+ICOM_DEFINE(IMalloc,IUnknown)
 #undef ICOM_INTERFACE
 
 #ifdef ICOM_CINTERFACE
 /*** IUnknown methods ***/
-#define IMalloc32_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
-#define IMalloc32_AddRef(p)             ICOM_CALL (AddRef,p)
-#define IMalloc32_Release(p)            ICOM_CALL (Release,p)
+#define IMalloc_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IMalloc_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IMalloc_Release(p)            ICOM_CALL (Release,p)
 /*** IMalloc32 methods ***/
-#define IMalloc32_Alloc(p,a)      ICOM_CALL1(Alloc,p,a)
-#define IMalloc32_Realloc(p,a,b)  ICOM_CALL2(Realloc,p,a,b)
-#define IMalloc32_Free(p,a)       ICOM_CALL1(Free,p,a)
-#define IMalloc32_GetSize(p,a)    ICOM_CALL1(GetSize,p,a)
-#define IMalloc32_DidAlloc(p,a)   ICOM_CALL1(DidAlloc,p,a)
-#define IMalloc32_HeapMinimize(p) ICOM_CALL (HeapMinimize,p)
+#define IMalloc_Alloc(p,a)      ICOM_CALL1(Alloc,p,a)
+#define IMalloc_Realloc(p,a,b)  ICOM_CALL2(Realloc,p,a,b)
+#define IMalloc_Free(p,a)       ICOM_CALL1(Free,p,a)
+#define IMalloc_GetSize(p,a)    ICOM_CALL1(GetSize,p,a)
+#define IMalloc_DidAlloc(p,a)   ICOM_CALL1(DidAlloc,p,a)
+#define IMalloc_HeapMinimize(p) ICOM_CALL (HeapMinimize,p)
 
 #ifndef __WINE__
 /* Duplicated for WINELIB */
@@ -814,11 +809,9 @@
 
 
 HRESULT WINAPI CoCreateStandardMalloc16(DWORD dwMemContext, LPMALLOC16* lpMalloc);
-#define CoCreateStandardMalloc WINELIB_NAME(CoCreateStandardMalloc)
 
 HRESULT WINAPI CoGetMalloc16(DWORD dwMemContext,LPMALLOC16* lpMalloc);
-HRESULT WINAPI CoGetMalloc32(DWORD dwMemContext,LPMALLOC32* lpMalloc);
-#define CoGetMalloc WINELIB_NAME(CoGetMalloc)
+HRESULT WINAPI CoGetMalloc(DWORD dwMemContext,LPMALLOC* lpMalloc);
 
 LPVOID WINAPI CoTaskMemAlloc(ULONG size);
 
@@ -836,7 +829,7 @@
 
 void WINAPI CoFreeAllLibraries(void);
 
-void WINAPI CoFreeLibrary(HINSTANCE32 hLibrary);
+void WINAPI CoFreeLibrary(HINSTANCE hLibrary);
 
 void WINAPI CoFreeUnusedLibraries(void);
 
@@ -845,8 +838,7 @@
 HRESULT WINAPI CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, LPVOID pvReserved, REFIID iid, LPVOID *ppv);
 
 HRESULT WINAPI CoInitialize16(LPVOID lpReserved);
-HRESULT WINAPI CoInitialize32(LPVOID lpReserved);
-#define CoInitialize WINELIB_NAME(CoInitialize)
+HRESULT WINAPI CoInitialize(LPVOID lpReserved);
 
 typedef enum tagCOINIT
 {
@@ -856,17 +848,15 @@
     COINIT_SPEED_OVER_MEMORY  = 0x8  /* Trade memory for speed */
 } COINIT;
 
-HRESULT WINAPI CoInitializeEx32(LPVOID lpReserved, DWORD dwCoInit);
-#define CoInitializeEx WINELIB_NAME(CoInitializeEx)
+HRESULT WINAPI CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit);
 
 /* FIXME: not implemented */
-BOOL32 WINAPI CoIsOle1Class(REFCLSID rclsid);
+BOOL WINAPI CoIsOle1Class(REFCLSID rclsid);
 
-HINSTANCE32 WINAPI CoLoadLibrary(LPOLESTR16 lpszLibName, BOOL32 bAutoFree);
+HINSTANCE WINAPI CoLoadLibrary(LPOLESTR16 lpszLibName, BOOL bAutoFree);
 
 HRESULT WINAPI CoLockObjectExternal16(LPUNKNOWN pUnk, BOOL16 fLock, BOOL16 fLastUnlockReleases);
-HRESULT WINAPI CoLockObjectExternal32(LPUNKNOWN pUnk, BOOL32 fLock, BOOL32 fLastUnlockReleases);
-#define CoLockObjectExternal WINELIB_NAME(CoLockObjectExternal)
+HRESULT WINAPI CoLockObjectExternal(LPUNKNOWN pUnk, BOOL fLock, BOOL fLastUnlockReleases);
 
 /* class registration flags; passed to CoRegisterClassObject */
 typedef enum tagREGCLS
@@ -878,15 +868,12 @@
 } REGCLS;
 
 HRESULT WINAPI CoRegisterClassObject16(REFCLSID rclsid, LPUNKNOWN pUnk, DWORD dwClsContext, DWORD flags, LPDWORD lpdwRegister);
-HRESULT WINAPI CoRegisterClassObject32(REFCLSID rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister);
-#define CoRegisterClassObject WINELIB_NAME(CoRegisterClassObject)
+HRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister);
 
-HRESULT WINAPI CoRevokeClassObject32(DWORD dwRegister);
-#define CoRevokeClassObject WINELIB_NAME(CoRevokeClassObject)
+HRESULT WINAPI CoRevokeClassObject(DWORD dwRegister);
 
 void WINAPI CoUninitialize16(void);
-void WINAPI CoUninitialize32(void);
-#define CoUninitialize WINELIB_NAME(CoUninitialize)
+void WINAPI CoUninitialize(void);
 
 
 /*****************************************************************************
diff --git a/include/wine/obj_cache.h b/include/wine/obj_cache.h
index 63e46f3..390165b 100644
--- a/include/wine/obj_cache.h
+++ b/include/wine/obj_cache.h
@@ -34,11 +34,11 @@
  */
 #define ICOM_INTERFACE IOleCache
 #define IOleCache_METHODS \
-	ICOM_METHOD3(HRESULT,Cache, FORMATETC32*,pformatetc, DWORD,advf, DWORD*, pdwConnection); \
+	ICOM_METHOD3(HRESULT,Cache, FORMATETC*,pformatetc, DWORD,advf, DWORD*, pdwConnection); \
 	ICOM_METHOD1(HRESULT,Uncache, DWORD,dwConnection); \
 	ICOM_METHOD1(HRESULT,EnumCache, IEnumSTATDATA**,ppenumSTATDATA); \
 	ICOM_METHOD1(HRESULT,InitCache, IDataObject*,pDataObject); \
-	ICOM_METHOD3(HRESULT,SetData, FORMATETC32*,pformatetc, STGMEDIUM32*,pmedium, BOOL32,fRelease);
+	ICOM_METHOD3(HRESULT,SetData, FORMATETC*,pformatetc, STGMEDIUM*,pmedium, BOOL,fRelease);
 #define IOleCache_IMETHODS \
 	IUnknown_IMETHODS \
 	IOleCache_METHODS
diff --git a/include/wine/obj_clientserver.h b/include/wine/obj_clientserver.h
index 01b79c2..bafa865 100644
--- a/include/wine/obj_clientserver.h
+++ b/include/wine/obj_clientserver.h
@@ -31,7 +31,7 @@
 {
     DWORD dwAuthnSvc;
     DWORD dwAuthzSvc;
-    OLECHAR32* pPrincipalName;
+    OLECHAR* pPrincipalName;
     HRESULT hr;
 } SOLE_AUTHENTICATION_SERVICE, *PSOLE_AUTHENTICATION_SERVICE;
 
@@ -45,8 +45,8 @@
 
 #define ICOM_INTERFACE IClientSecurity
 #define IClientSecurity_METHODS \
-     ICOM_METHOD8(HRESULT,QueryBlanket, IUnknown*,pProxy, DWORD*,pAuthnSvc, DWORD*,pAuthzSvc, OLECHAR32**,pServerPrincName, DWORD*,pAuthnLevel, DWORD*,pImpLevel, void**,pAuthInfo, DWORD*,pCapabilites); \
-    ICOM_METHOD8(HRESULT,SetBlanket,   IUnknown*,pProxy, DWORD,pAuthnSvc, DWORD,pAuthzSvc, OLECHAR32*,pServerPrincName, DWORD,pAuthnLevel, DWORD,pImpLevel, void*,pAuthInfo, DWORD,pCapabilites); \
+     ICOM_METHOD8(HRESULT,QueryBlanket, IUnknown*,pProxy, DWORD*,pAuthnSvc, DWORD*,pAuthzSvc, OLECHAR**,pServerPrincName, DWORD*,pAuthnLevel, DWORD*,pImpLevel, void**,pAuthInfo, DWORD*,pCapabilites); \
+    ICOM_METHOD8(HRESULT,SetBlanket,   IUnknown*,pProxy, DWORD,pAuthnSvc, DWORD,pAuthzSvc, OLECHAR*,pServerPrincName, DWORD,pAuthnLevel, DWORD,pImpLevel, void*,pAuthInfo, DWORD,pCapabilites); \
     ICOM_METHOD2(HRESULT,CopyProxy,    IUnknown*,pProxy, IUnknown**,ppCopy);
 #define IClientSecurity_IMETHODS \
     IUnknown_IMETHODS \
@@ -79,7 +79,7 @@
 #define ICOM_INTERFACE IExternalConnection
 #define IExternalConnection_METHODS \
     ICOM_METHOD2(DWORD,AddConnection,     DWORD,extconn, DWORD,reserved); \
-    ICOM_METHOD3(DWORD,ReleaseConnection, DWORD,extconn, DWORD,reserved, BOOL32,fLastReleaseCloses);
+    ICOM_METHOD3(DWORD,ReleaseConnection, DWORD,extconn, DWORD,reserved, BOOL,fLastReleaseCloses);
 #define IExternalConnection_IMETHODS \
     IUnknown_IMETHODS \
     IExternalConnection_METHODS
@@ -141,9 +141,9 @@
 
 #define ICOM_INTERFACE IMessageFilter
 #define IMessageFilter_METHODS \
-    ICOM_METHOD4(DWORD,HandleInComingCall, DWORD,dwCallType, HTASK32,htaskCaller, DWORD,dwTickCount, LPINTERFACEINFO,lpInterfaceInfo); \
-    ICOM_METHOD3(DWORD,RetryRejectedCall,  HTASK32,htaskCallee, DWORD,dwTickCount, DWORD,dwRejectType); \
-    ICOM_METHOD3(DWORD,MessagePending,     HTASK32,htaskCallee, DWORD,dwTickCount, DWORD,dwRejectType);
+    ICOM_METHOD4(DWORD,HandleInComingCall, DWORD,dwCallType, HTASK,htaskCaller, DWORD,dwTickCount, LPINTERFACEINFO,lpInterfaceInfo); \
+    ICOM_METHOD3(DWORD,RetryRejectedCall,  HTASK,htaskCallee, DWORD,dwTickCount, DWORD,dwRejectType); \
+    ICOM_METHOD3(DWORD,MessagePending,     HTASK,htaskCallee, DWORD,dwTickCount, DWORD,dwRejectType);
 #define IMessageFilter_IMETHODS \
     IUnknown_IMETHODS \
     IMessageFilter_METHODS
@@ -163,8 +163,7 @@
 
 
 HRESULT WINAPI CoRegisterMessageFilter16(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter);
-HRESULT WINAPI CoRegisterMessageFilter32(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter);
-#define CoRegisterMessageFilter WINELIB_NAME(CoRegisterMessageFilter)
+HRESULT WINAPI CoRegisterMessageFilter(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter);
 
 
 /*****************************************************************************
@@ -172,10 +171,10 @@
  */
 #define ICOM_INTERFACE IServerSecurity
 #define IServerSecurity_METHODS \
-    ICOM_METHOD7(HRESULT,QueryBlanket,     DWORD*,pAuthnSvc, DWORD*,pAuthzSvc, OLECHAR32**,pServerPrincName, DWORD*,pAuthnLevel, DWORD*,pImpLevel, void**,pPrivs, DWORD*,pCapabilities); \
+    ICOM_METHOD7(HRESULT,QueryBlanket,     DWORD*,pAuthnSvc, DWORD*,pAuthzSvc, OLECHAR**,pServerPrincName, DWORD*,pAuthnLevel, DWORD*,pImpLevel, void**,pPrivs, DWORD*,pCapabilities); \
     ICOM_METHOD (HRESULT,ImpersonateClient); \
     ICOM_METHOD (HRESULT,RevertToSelf); \
-    ICOM_METHOD (BOOL32,   IsImpersonating);
+    ICOM_METHOD (BOOL,   IsImpersonating);
 #define IServerSecurity_IMETHODS \
     IUnknown_IMETHODS \
     IServerSecurity_METHODS
@@ -203,10 +202,10 @@
 HRESULT WINAPI CoCopyProxy(IUnknown* pProxy, IUnknown** ppCopy);
 
 /* FIXME: not implemented */
-HRESULT WINAPI CoQueryProxyBlanket(IUnknown* pProxy, DWORD* pwAuthnSvc, DWORD* pAuthzSvc, OLECHAR32** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTH_IDENTITY_HANDLE* pAuthInfo, DWORD* pCapabilites);
+HRESULT WINAPI CoQueryProxyBlanket(IUnknown* pProxy, DWORD* pwAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTH_IDENTITY_HANDLE* pAuthInfo, DWORD* pCapabilites);
 
 /* FIXME: not implemented */
-HRESULT WINAPI CoSetProxyBlanket(IUnknown* pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, OLECHAR32* pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities);
+HRESULT WINAPI CoSetProxyBlanket(IUnknown* pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, OLECHAR* pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities);
 
 
 /*****************************************************************************
@@ -246,7 +245,7 @@
 HRESULT WINAPI CoInitializeSecurity(PSECURITY_DESCRIPTOR pSecDesc, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE* asAuthSvc, void* pReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void* pReserved2, DWORD dwCapabilities, void* pReserved3);
 
 /* FIXME: not implemented */
-BOOL32 WINAPI CoIsHandlerConnected(LPUNKNOWN pUnk);
+BOOL WINAPI CoIsHandlerConnected(LPUNKNOWN pUnk);
 
 /* FIXME: not implemented */
 HRESULT WINAPI CoQueryAuthenticationServices(DWORD* pcAuthSvc, SOLE_AUTHENTICATION_SERVICE** asAuthSvc);
diff --git a/include/wine/obj_control.h b/include/wine/obj_control.h
index 9ed7435..a1c4864 100644
--- a/include/wine/obj_control.h
+++ b/include/wine/obj_control.h
@@ -30,14 +30,14 @@
 typedef struct tagLICINFO
 {
 	LONG cbLicInfo;
-	BOOL32 fRuntimeKeyAvail;
-	BOOL32 fLicVerified;
+	BOOL fRuntimeKeyAvail;
+	BOOL fLicVerified;
 } LICINFO, *LPLICINFO;
 
 typedef struct tagCONTROLINFO
 {
 	ULONG cb;
-	HACCEL32 hAccel;
+	HACCEL hAccel;
 	USHORT cAccel;
 	DWORD dwFlags;
 } CONTROLINFO, *LPCONTROLINFO;
@@ -101,9 +101,9 @@
 #define ICOM_INTERFACE IOleControl
 #define IOleControl_METHODS \
 	ICOM_METHOD1(HRESULT,GetControlInfo, CONTROLINFO*,pCI); \
-	ICOM_METHOD1(HRESULT,OnMnemonic, MSG32*,pMsg); \
+	ICOM_METHOD1(HRESULT,OnMnemonic, MSG*,pMsg); \
 	ICOM_METHOD1(HRESULT,OnAmbientPropertyChange, DISPID,dispID); \
-	ICOM_METHOD1(HRESULT,FreezeEvents, BOOL32,bFreeze);
+	ICOM_METHOD1(HRESULT,FreezeEvents, BOOL,bFreeze);
 #define IOleControl_IMETHODS \
 	IUnknown_IMETHODS \
 	IOleControl_METHODS
@@ -129,10 +129,10 @@
 #define ICOM_INTERFACE IOleControlSite 
 #define IOleControlSite_METHODS \
 	ICOM_METHOD (HRESULT,OnControlInfoChanged); \
-	ICOM_METHOD1(HRESULT,LockInPlaceActive, BOOL32,fLock); \
+	ICOM_METHOD1(HRESULT,LockInPlaceActive, BOOL,fLock); \
 	ICOM_METHOD3(HRESULT,TransformCoords, POINTL*,pPtlHimetric, POINTF*,pPtfContainer, DWORD,dwFlags); \
-	ICOM_METHOD2(HRESULT,TranslateAccelerator, MSG32*,pMsg, DWORD,grfModifiers) ;\
-	ICOM_METHOD1(HRESULT,OnFocus, BOOL32,fGotFocus); \
+	ICOM_METHOD2(HRESULT,TranslateAccelerator, MSG*,pMsg, DWORD,grfModifiers) ;\
+	ICOM_METHOD1(HRESULT,OnFocus, BOOL,fGotFocus); \
 	ICOM_METHOD (HRESULT,ShowPropertyFrame);
 #define IOleControlSite_IMETHODS \
 	IUnknown_IMETHODS \
@@ -160,8 +160,8 @@
  */
 #define ICOM_INTERFACE IOleInPlaceSiteEx
 #define IOleInPlaceSiteEx_METHODS \
-	ICOM_METHOD2(HRESULT,OnInPlaceActivateEx, BOOL32*,pfNoRedraw, DWORD,dwFlags); \
-	ICOM_METHOD1(HRESULT,OnInPlaceDeactivateEx, BOOL32,fNoRedraw); \
+	ICOM_METHOD2(HRESULT,OnInPlaceActivateEx, BOOL*,pfNoRedraw, DWORD,dwFlags); \
+	ICOM_METHOD1(HRESULT,OnInPlaceDeactivateEx, BOOL,fNoRedraw); \
 	ICOM_METHOD (HRESULT,RequestUIActivate);
 #define IOleInPlaceSiteEx_IMETHODS \
 	IOleInPlaceSite_IMETHODS \
@@ -202,16 +202,16 @@
 #define IOleInPlaceSiteWindowless_METHODS \
 	ICOM_METHOD (HRESULT,CanWindowlessActivate); \
 	ICOM_METHOD (HRESULT,GetCapture); \
-	ICOM_METHOD1(HRESULT,SetCapture, BOOL32,fCapture); \
+	ICOM_METHOD1(HRESULT,SetCapture, BOOL,fCapture); \
 	ICOM_METHOD (HRESULT,GetFocus); \
-	ICOM_METHOD1(HRESULT,SetFocus, BOOL32,fFocus); \
-	ICOM_METHOD3(HRESULT,GetDC, LPCRECT32,pRect, DWORD,grfFlags, HDC32*,phDC); \
-	ICOM_METHOD1(HRESULT,ReleaseDC, HDC32,hDC); \
-	ICOM_METHOD2(HRESULT,InvalidateRect, LPCRECT32,pRect, BOOL32,fErase); \
-	ICOM_METHOD2(HRESULT,InvalidateRgn, HRGN32,hRgn, BOOL32,fErase); \
-	ICOM_METHOD4(HRESULT,ScrollRect, INT32,dx, INT32,dy, LPCRECT32,pRectScroll, LPCRECT32,pRectClip); \
-	ICOM_METHOD1(HRESULT,AdjustRect, LPRECT32,prc); \
-	ICOM_METHOD4(HRESULT,OnDefWindowMessage, UINT32,msg, WPARAM32,wParam, LPARAM,lParam, LRESULT*,plResult);
+	ICOM_METHOD1(HRESULT,SetFocus, BOOL,fFocus); \
+	ICOM_METHOD3(HRESULT,GetDC, LPCRECT32,pRect, DWORD,grfFlags, HDC*,phDC); \
+	ICOM_METHOD1(HRESULT,ReleaseDC, HDC,hDC); \
+	ICOM_METHOD2(HRESULT,InvalidateRect, LPCRECT32,pRect, BOOL,fErase); \
+	ICOM_METHOD2(HRESULT,InvalidateRgn, HRGN,hRgn, BOOL,fErase); \
+	ICOM_METHOD4(HRESULT,ScrollRect, INT,dx, INT,dy, LPCRECT32,pRectScroll, LPCRECT32,pRectClip); \
+	ICOM_METHOD1(HRESULT,AdjustRect, LPRECT,prc); \
+	ICOM_METHOD4(HRESULT,OnDefWindowMessage, UINT,msg, WPARAM,wParam, LPARAM,lParam, LRESULT*,plResult);
 #define IOleInPlaceSiteWindowless_IMETHODS \
 	IOleInPlaceSite_IMETHODS \
 	IOleInPlaceSiteWindowless_METHODS
@@ -258,7 +258,7 @@
  */
 #define ICOM_INTERFACE IOleInPlaceObjectWindowless
 #define IOleInPlaceObjectWindowless_METHODS \
-	ICOM_METHOD4(HRESULT,OnWindowMessage, UINT32,msg, WPARAM32,wParam, LPARAM,lParam, LRESULT*,plResult); \
+	ICOM_METHOD4(HRESULT,OnWindowMessage, UINT,msg, WPARAM,wParam, LPARAM,lParam, LRESULT*,plResult); \
 	ICOM_METHOD1(HRESULT,GetDropTarget, IDropTarget**,ppDropTarget);
 #define IOleInPlaceObjectWindowless_IMETHODS \
 	IOleInPlaceObject_IMETHODS \
@@ -291,8 +291,8 @@
 #define ICOM_INTERFACE IClassFactory2
 #define IClassFactory2_METHODS \
 	ICOM_METHOD1(HRESULT,GetLicInfo, LICINFO*,pLicInfo); \
-	ICOM_METHOD2(HRESULT,RequestLicKey, DWORD,dwReserved, BSTR32*,pBstrKey); \
-	ICOM_METHOD5(HRESULT,CreateInstanceLic, IUnknown*,pUnkOuter, IUnknown*,pUnkReserved, REFIID,riid, BSTR32,bstrKey, PVOID*,ppvObj);
+	ICOM_METHOD2(HRESULT,RequestLicKey, DWORD,dwReserved, BSTR*,pBstrKey); \
+	ICOM_METHOD5(HRESULT,CreateInstanceLic, IUnknown*,pUnkOuter, IUnknown*,pUnkReserved, REFIID,riid, BSTR,bstrKey, PVOID*,ppvObj);
 #define IClassFactory2_IMETHODS \
 	IClassFactory_IMETHODS \
 	IClassFactory2_METHODS
diff --git a/include/wine/obj_dataobject.h b/include/wine/obj_dataobject.h
index 1c0ab52..78f4823 100644
--- a/include/wine/obj_dataobject.h
+++ b/include/wine/obj_dataobject.h
@@ -12,18 +12,12 @@
  * Predeclare the structures
  */
 typedef struct DVTARGETDEVICE16 DVTARGETDEVICE16, *LPDVTARGETDEVICE16;
-typedef struct DVTARGETDEVICE32 DVTARGETDEVICE32, *LPDVTARGETDEVICE32;
-DECL_WINELIB_TYPE(DVTARGETDEVICE)
-DECL_WINELIB_TYPE(LPDVTARGETDEVICE)
+typedef struct DVTARGETDEVICE DVTARGETDEVICE, *LPDVTARGETDEVICE;
 
 typedef struct FORMATETC16 FORMATETC16, *LPFORMATETC16;
-typedef struct FORMATETC32 FORMATETC32, *LPFORMATETC32;
-DECL_WINELIB_TYPE(FORMATETC)
-DECL_WINELIB_TYPE(LPFORMATETC)
+typedef struct FORMATETC FORMATETC, *LPFORMATETC;
 
-typedef struct STGMEDIUM32 STGMEDIUM32, *LPSTGMEDIUM32;
-DECL_WINELIB_TYPE(STGMEDIUM)
-DECL_WINELIB_TYPE(LPSTGMEDIUM)
+typedef struct STGMEDIUM STGMEDIUM, *LPSTGMEDIUM;
 
 
 /*****************************************************************************
@@ -51,7 +45,7 @@
 /*****************************************************************************
  * DVTARGETDEVICE structure
  */
-struct DVTARGETDEVICE32
+struct DVTARGETDEVICE
 {
     DWORD tdSize;
     WORD tdDriverNameOffset;
@@ -66,10 +60,10 @@
  * FORMATETC structure
  */
 /* wished data format */
-struct FORMATETC32
+struct FORMATETC
 {
-    CLIPFORMAT32 cfFormat;
-    DVTARGETDEVICE32* ptd;
+    CLIPFORMAT cfFormat;
+    DVTARGETDEVICE* ptd;
     DWORD dwAspect;
     LONG lindex;
     DWORD tymed;
@@ -92,17 +86,17 @@
 } TYMED;
   
 /* dataobject as answer to a request */
-struct STGMEDIUM32
+struct STGMEDIUM
 {
     DWORD tymed;
     union {
-        HBITMAP32 hBitmap;
-        HMETAFILEPICT32 hMetaFilePict;
-        HENHMETAFILE32 hEnhMetaFile;
-        HGLOBAL32 hGlobal;
-        LPOLESTR32 lpszFileName;
-        IStream32 *pstm;
-        IStorage32 *pstg;
+        HBITMAP hBitmap;
+        HMETAFILEPICT hMetaFilePict;
+        HENHMETAFILE hEnhMetaFile;
+        HGLOBAL hGlobal;
+        LPOLESTR lpszFileName;
+        IStream *pstm;
+        IStorage *pstg;
     } u;
     IUnknown *pUnkForRelease;
 };   
@@ -113,7 +107,7 @@
  */
 #define ICOM_INTERFACE IAdviseSink
 #define IAdviseSink_METHODS \
-    ICOM_VMETHOD2(OnDataChange, FORMATETC32*,pFormatetc, STGMEDIUM32*,pStgmed) \
+    ICOM_VMETHOD2(OnDataChange, FORMATETC*,pFormatetc, STGMEDIUM*,pStgmed) \
     ICOM_VMETHOD2(OnViewChange, DWORD,dwAspect, LONG,lindex) \
     ICOM_VMETHOD1(OnRename,     IMoniker*,pmk) \
     ICOM_VMETHOD (OnSave) \
@@ -171,7 +165,7 @@
  */
 #define ICOM_INTERFACE IDataAdviseHolder
 #define IDataAdviseHolder_METHODS \
-    ICOM_METHOD5(HRESULT,Advise,           IDataObject*,pDataObject, FORMATETC32*,pFetc, DWORD,advf, IAdviseSink*,pAdvise, DWORD*,pdwConnection) \
+    ICOM_METHOD5(HRESULT,Advise,           IDataObject*,pDataObject, FORMATETC*,pFetc, DWORD,advf, IAdviseSink*,pAdvise, DWORD*,pdwConnection) \
     ICOM_METHOD1(HRESULT,Unadvise,         DWORD,dwConnection) \
     ICOM_METHOD1(HRESULT,EnumAdvise,       IEnumSTATDATA**,ppenumAdvise) \
     ICOM_METHOD3(HRESULT,SendOnDataChange, IDataObject*,pDataObject, DWORD,dwReserved, DWORD,advf)
@@ -202,13 +196,13 @@
  */
 #define ICOM_INTERFACE IDataObject
 #define IDataObject_METHODS \
-    ICOM_METHOD2(HRESULT,GetData,               LPFORMATETC32,pformatetcIn, STGMEDIUM32*,pmedium) \
-    ICOM_METHOD2(HRESULT,GetDataHere,           LPFORMATETC32,pformatetc, STGMEDIUM32*,pmedium) \
-    ICOM_METHOD1(HRESULT,QueryGetData,          LPFORMATETC32,pformatetc) \
-    ICOM_METHOD2(HRESULT,GetCanonicalFormatEtc, LPFORMATETC32,pformatectIn, LPFORMATETC32,pformatetcOut) \
-    ICOM_METHOD3(HRESULT,SetData,               LPFORMATETC32,pformatetc, STGMEDIUM32*,pmedium, BOOL32,fRelease) \
+    ICOM_METHOD2(HRESULT,GetData,               LPFORMATETC,pformatetcIn, STGMEDIUM*,pmedium) \
+    ICOM_METHOD2(HRESULT,GetDataHere,           LPFORMATETC,pformatetc, STGMEDIUM*,pmedium) \
+    ICOM_METHOD1(HRESULT,QueryGetData,          LPFORMATETC,pformatetc) \
+    ICOM_METHOD2(HRESULT,GetCanonicalFormatEtc, LPFORMATETC,pformatectIn, LPFORMATETC,pformatetcOut) \
+    ICOM_METHOD3(HRESULT,SetData,               LPFORMATETC,pformatetc, STGMEDIUM*,pmedium, BOOL,fRelease) \
     ICOM_METHOD2(HRESULT,EnumFormatEtc,         DWORD,dwDirection, IEnumFORMATETC**,ppenumFormatEtc) \
-    ICOM_METHOD4(HRESULT,DAdvise,               LPFORMATETC32*,pformatetc, DWORD,advf, IAdviseSink*,pAdvSink, DWORD*,pdwConnection) \
+    ICOM_METHOD4(HRESULT,DAdvise,               LPFORMATETC*,pformatetc, DWORD,advf, IAdviseSink*,pAdvSink, DWORD*,pdwConnection) \
     ICOM_METHOD1(HRESULT,DUnadvise,             DWORD,dwConnection) \
     ICOM_METHOD1(HRESULT,EnumDAdvise,           IEnumSTATDATA**,ppenumAdvise)
 #define IDataObject_IMETHODS \
@@ -240,7 +234,7 @@
  */
 #define ICOM_INTERFACE IEnumFORMATETC
 #define IEnumFORMATETC_METHODS \
-    ICOM_METHOD3(HRESULT,Next,  ULONG,celt, FORMATETC32*,rgelt, ULONG*,pceltFethed) \
+    ICOM_METHOD3(HRESULT,Next,  ULONG,celt, FORMATETC*,rgelt, ULONG*,pceltFethed) \
     ICOM_METHOD1(HRESULT,Skip,  ULONG,celt) \
     ICOM_METHOD (HRESULT,Reset) \
     ICOM_METHOD1(HRESULT,Clone, IEnumFORMATETC**,ppenum)
@@ -268,7 +262,7 @@
  */
 typedef struct tagSTATDATA
 {
-    FORMATETC32 formatetc;
+    FORMATETC formatetc;
     DWORD advf;
     IAdviseSink* pAdvSink;
     DWORD dwConnection;
diff --git a/include/wine/obj_dragdrop.h b/include/wine/obj_dragdrop.h
index c798094..b5736fa 100644
--- a/include/wine/obj_dragdrop.h
+++ b/include/wine/obj_dragdrop.h
@@ -33,7 +33,7 @@
  */
 #define ICOM_INTERFACE IDropSource
 #define IDropSource_METHODS \
-    ICOM_METHOD2(HRESULT, QueryContinueDrag, BOOL32, fEscapePressed, DWORD, grfKeyState); \
+    ICOM_METHOD2(HRESULT, QueryContinueDrag, BOOL, fEscapePressed, DWORD, grfKeyState); \
     ICOM_METHOD1(HRESULT, GiveFeedback, DWORD, dwEffect);
 #define IDropSource_IMETHODS \
   ICOM_INHERITS(IDropSource,IUnknown)
diff --git a/include/wine/obj_inplace.h b/include/wine/obj_inplace.h
index 4e5e657..8e29c91 100644
--- a/include/wine/obj_inplace.h
+++ b/include/wine/obj_inplace.h
@@ -17,18 +17,16 @@
 typedef struct  tagOleMenuGroupWidths
 {
 	LONG width[ 6 ];
-} OLEMENUGROUPWIDTHS32, *LPOLEMENUGROUPWIDTHS32;
+} OLEMENUGROUPWIDTHS, *LPOLEMENUGROUPWIDTHS;
 
-DECL_WINELIB_TYPE(OLEMENUGROUPWIDTHS)
-DECL_WINELIB_TYPE(LPOLEMENUGROUPWIDTHS)
 
 typedef struct tagOleInPlaceFrameInfo
 {
-	UINT32 cb;
-	BOOL32 fMDIApp;
-	HWND32 hwndFrame;
-	HACCEL32 haccel;
-	UINT32 cAccelEntries;
+	UINT cb;
+	BOOL fMDIApp;
+	HWND hwndFrame;
+	HACCEL haccel;
+	UINT cAccelEntries;
 } OLEINPLACEFRAMEINFO, *LPOLEINPLACEFRAMEINFO;
 
 typedef enum tagOLEGETMONIKER
@@ -70,14 +68,13 @@
 typedef struct tagOLEVERB
 {
 	LONG lVerb;
-	LPOLESTR32 lpszVerbName;
+	LPOLESTR lpszVerbName;
 	DWORD fuFlags;
 	DWORD grfAttribs;
 } OLEVERB, *LPOLEVERB;
 	
-typedef HGLOBAL32 HOLEMENU32;
-DECL_WINELIB_TYPE(HOLEMENU)
-typedef LPRECT32 LPBORDERWIDTHS;
+typedef HGLOBAL HOLEMENU;
+typedef LPRECT LPBORDERWIDTHS;
 typedef LPCRECT32 LPCBORDERWIDTHS;
 	
 	
@@ -119,8 +116,8 @@
  */
 #define ICOM_INTERFACE IOleWindow
 #define IOleWindow_METHODS \
-	ICOM_METHOD1(HRESULT,GetWindow, HWND32*,phwnd); \
-	ICOM_METHOD1(HRESULT,ContextSensitiveHelp, BOOL32,fEnterMode);
+	ICOM_METHOD1(HRESULT,GetWindow, HWND*,phwnd); \
+	ICOM_METHOD1(HRESULT,ContextSensitiveHelp, BOOL,fEnterMode);
 #define IOleWindow_IMETHODS \
 	IUnknown_IMETHODS \
 	IOleWindow_METHODS
@@ -173,11 +170,11 @@
  */
 #define ICOM_INTERFACE IOleInPlaceActiveObject
 #define IOleInPlaceActiveObject_METHODS \
-	ICOM_METHOD1(HRESULT,TranslateAccelerator, LPMSG32,lpmsg); \
-	ICOM_METHOD1(HRESULT,OnFrameWindowActivate, BOOL32,fActivate); \
-	ICOM_METHOD1(HRESULT,OnDocWindowActivate, BOOL32,fActivate); \
-	ICOM_METHOD3(HRESULT,ResizeBorder, LPCRECT32,prcBorder, IOleInPlaceUIWindow*,pUIWindow, BOOL32,fWindowFrame); \
-	ICOM_METHOD1(HRESULT,EnableModeless, BOOL32,fEnable);
+	ICOM_METHOD1(HRESULT,TranslateAccelerator, LPMSG,lpmsg); \
+	ICOM_METHOD1(HRESULT,OnFrameWindowActivate, BOOL,fActivate); \
+	ICOM_METHOD1(HRESULT,OnDocWindowActivate, BOOL,fActivate); \
+	ICOM_METHOD3(HRESULT,ResizeBorder, LPCRECT32,prcBorder, IOleInPlaceUIWindow*,pUIWindow, BOOL,fWindowFrame); \
+	ICOM_METHOD1(HRESULT,EnableModeless, BOOL,fEnable);
 #define IOleInPlaceActiveObject_IMETHODS \
 	IOleWindow_IMETHODS \
 	IOleInPlaceActiveObject_METHODS
@@ -205,10 +202,10 @@
  */
 #define ICOM_INTERFACE IOleInPlaceUIWindow
 #define IOleInPlaceUIWindow_METHODS \
-	ICOM_METHOD1(HRESULT,GetBorder, LPRECT32,lprectBorder); \
+	ICOM_METHOD1(HRESULT,GetBorder, LPRECT,lprectBorder); \
 	ICOM_METHOD1(HRESULT,RequestBorderSpace, LPCBORDERWIDTHS,pborderwidths); \
 	ICOM_METHOD1(HRESULT,SetBorderSpace, LPCBORDERWIDTHS,pborderwidths); \
-	ICOM_METHOD2(HRESULT,SetActiveObject, IOleInPlaceActiveObject*,pActiveObject, LPCOLESTR32,pszObjName);
+	ICOM_METHOD2(HRESULT,SetActiveObject, IOleInPlaceActiveObject*,pActiveObject, LPCOLESTR,pszObjName);
 #define IOleInPlaceUIWindow_IMETHODS \
 	IOleWindow_IMETHODS \
 	IOleInPlaceUIWindow_METHODS
@@ -236,12 +233,12 @@
  */
 #define ICOM_INTERFACE IOleInPlaceFrame
 #define IOleInPlaceFrame_METHODS \
-	ICOM_METHOD2 (HRESULT,InsertMenus, HMENU,hemnuShared, LPOLEMENUGROUPWIDTHS32,lpMenuWidths); \
-	ICOM_METHOD3 (HRESULT,SetMenu, HMENU,hemnuShared, HOLEMENU,holemenu, HWND32,hwndActiveObject); \
+	ICOM_METHOD2 (HRESULT,InsertMenus, HMENU,hemnuShared, LPOLEMENUGROUPWIDTHS,lpMenuWidths); \
+	ICOM_METHOD3 (HRESULT,SetMenu, HMENU,hemnuShared, HOLEMENU,holemenu, HWND,hwndActiveObject); \
 	ICOM_METHOD1 (HRESULT,RemoveMenus, HMENU,hemnuShared); \
-	ICOM_METHOD1 (HRESULT,SetStatusText, LPCOLESTR32,pszStatusText); \
-	ICOM_METHOD1 (HRESULT,EnableModeless, BOOL32,fEnable); \
-	ICOM_METHOD2 (HRESULT,TranslateAccelerator, LPMSG32,lpmsg, WORD,wID);
+	ICOM_METHOD1 (HRESULT,SetStatusText, LPCOLESTR,pszStatusText); \
+	ICOM_METHOD1 (HRESULT,EnableModeless, BOOL,fEnable); \
+	ICOM_METHOD2 (HRESULT,TranslateAccelerator, LPMSG,lpmsg, WORD,wID);
 #define IOleInPlaceFrame_IMETHODS \
 	IOleInPlaceUIWindow_IMETHODS \
 	IOleInPlaceFrame_METHODS
@@ -278,9 +275,9 @@
 	ICOM_METHOD (HRESULT,CanInPlaceActivate); \
 	ICOM_METHOD (HRESULT,OnInPlaceActivate); \
 	ICOM_METHOD (HRESULT,OnUIActivate); \
-	ICOM_METHOD5(HRESULT,GetWindowContext, IOleInPlaceFrame**,ppFrame, IOleInPlaceUIWindow**,ppDoc, LPRECT32,lprcPosRect, LPRECT32,lprcClipRect, LPOLEINPLACEFRAMEINFO,lpFrameInfo); \
-	ICOM_METHOD1(HRESULT,Scroll, SIZE32,scrollExtant); \
-	ICOM_METHOD1(HRESULT,OnUIDeactivate, BOOL32,fUndoable); \
+	ICOM_METHOD5(HRESULT,GetWindowContext, IOleInPlaceFrame**,ppFrame, IOleInPlaceUIWindow**,ppDoc, LPRECT,lprcPosRect, LPRECT,lprcClipRect, LPOLEINPLACEFRAMEINFO,lpFrameInfo); \
+	ICOM_METHOD1(HRESULT,Scroll, SIZE,scrollExtant); \
+	ICOM_METHOD1(HRESULT,OnUIDeactivate, BOOL,fUndoable); \
 	ICOM_METHOD (HRESULT,OnInPlaceDeactivate); \
 	ICOM_METHOD (HRESULT,DiscardUndoState); \
 	ICOM_METHOD (HRESULT,DeactivateAndUndo); \
@@ -322,7 +319,7 @@
 	ICOM_METHOD3(HRESULT,GetMoniker, DWORD,dwAssign, DWORD,dwWhichMoniker, IMoniker**,ppmk); \
 	ICOM_METHOD1(HRESULT,GetContainer, IOleContainer**,ppContainer); \
 	ICOM_METHOD (HRESULT,ShowObject); \
-	ICOM_METHOD1(HRESULT,OnShowWindow, BOOL32,fShow); \
+	ICOM_METHOD1(HRESULT,OnShowWindow, BOOL,fShow); \
 	ICOM_METHOD (HRESULT,RequestNewObjectLayout);
 #define IOleClientSite_IMETHODS \
 	IUnknown_IMETHODS \
@@ -350,7 +347,7 @@
  */
 #define ICOM_INTERFACE IParseDisplayName
 #define IParseDisplayName_METHODS \
-	ICOM_METHOD4(HRESULT,ParseDisplayName, IBindCtx*,pbc, LPOLESTR32,pszDisplayName, ULONG*,pchEaten, IMoniker**,ppmkOut);
+	ICOM_METHOD4(HRESULT,ParseDisplayName, IBindCtx*,pbc, LPOLESTR,pszDisplayName, ULONG*,pchEaten, IMoniker**,ppmkOut);
 #define IParseDisplayName_IMETHODS \
 	IUnknown_IMETHODS \
 	IParseDisplayName_METHODS
@@ -373,7 +370,7 @@
 #define ICOM_INTERFACE IOleContainer
 #define IOleContainer_METHODS \
 	ICOM_METHOD2(HRESULT,EnumObjects, DWORD,grfFlags, IEnumUnknown**,ppenum); \
-	ICOM_METHOD1(HRESULT,LockContainer, BOOL32,fLock);
+	ICOM_METHOD1(HRESULT,LockContainer, BOOL,fLock);
 #define IOleContainer_IMETHODS \
 	IParseDisplayName_IMETHODS \
 	IOleContainer_METHODS
@@ -398,9 +395,9 @@
  */
 #define ICOM_INTERFACE IOleItemContainer
 #define IOleItemContainer_METHODS \
-	ICOM_METHOD5(HRESULT,GetObject, LPOLESTR32,pszItem, DWORD,dwSpeedNeeded, IBindCtx*,pbc, REFIID,riid, void*,ppvObject); \
-	ICOM_METHOD4(HRESULT,GetObjectStorage, LPOLESTR32,pszItem, IBindCtx*,pbc, REFIID,riid, void*,ppvStorage); \
-	ICOM_METHOD1(HRESULT,IsRunning, LPOLESTR32,pszItem);
+	ICOM_METHOD5(HRESULT,GetObject, LPOLESTR,pszItem, DWORD,dwSpeedNeeded, IBindCtx*,pbc, REFIID,riid, void*,ppvObject); \
+	ICOM_METHOD4(HRESULT,GetObjectStorage, LPOLESTR,pszItem, IBindCtx*,pbc, REFIID,riid, void*,ppvStorage); \
+	ICOM_METHOD1(HRESULT,IsRunning, LPOLESTR,pszItem);
 #define IOleItemContainer_IMETHODS \
 	IOleContainer_IMETHODS \
 	IOleItemContainer_METHODS
diff --git a/include/wine/obj_marshal.h b/include/wine/obj_marshal.h
index 1e8d3aa..5054cb6 100644
--- a/include/wine/obj_marshal.h
+++ b/include/wine/obj_marshal.h
@@ -26,9 +26,9 @@
 #define IMarshal_METHODS \
     ICOM_METHOD6(HRESULT,GetUnmarshalClass,  REFIID,riid, void*,pv, DWORD,dwDestContext, void*,pvDestContext, DWORD,mshlflags, CLSID*,pCid); \
     ICOM_METHOD6(HRESULT,GetMarshalSizeMax,  REFIID,riid, void*,pv, DWORD,dwDestContext, void*,pvDestContext, DWORD,mshlflags, DWORD*,pSize); \
-    ICOM_METHOD6(HRESULT,MarshalInterface,   IStream32*,pStm, REFIID,riid, void*,pv, DWORD,dwDestContext, void*,pvDestContext, DWORD,mshlflags); \
-    ICOM_METHOD3(HRESULT,UnmarshalInterface, IStream32*,pStm, REFIID,riid, void**,ppv); \
-    ICOM_METHOD1(HRESULT,ReleaseMarshalData, IStream32*,pStm); \
+    ICOM_METHOD6(HRESULT,MarshalInterface,   IStream*,pStm, REFIID,riid, void*,pv, DWORD,dwDestContext, void*,pvDestContext, DWORD,mshlflags); \
+    ICOM_METHOD3(HRESULT,UnmarshalInterface, IStream*,pStm, REFIID,riid, void**,ppv); \
+    ICOM_METHOD1(HRESULT,ReleaseMarshalData, IStream*,pStm); \
     ICOM_METHOD1(HRESULT,DisconnectObject,   DWORD,dwReserved);
 #define IMarshal_IMETHODS \
     IUnknown_IMETHODS \
@@ -81,7 +81,7 @@
 HRESULT WINAPI CoCreateFreeThreadedMarshaler(LPUNKNOWN punkOuter, LPUNKNOWN* ppunkMarshal);
 
 /* FIXME: not implemented */
-HRESULT WINAPI CoGetInterfaceAndReleaseStream(LPSTREAM32 pStm, REFIID iid, LPVOID* ppv);
+HRESULT WINAPI CoGetInterfaceAndReleaseStream(LPSTREAM pStm, REFIID iid, LPVOID* ppv);
 
 /* FIXME: not implemented */
 HRESULT WINAPI CoGetMarshalSizeMax(ULONG* pulSize, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
@@ -90,22 +90,22 @@
 HRESULT WINAPI CoGetStandardMarshal(REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPMARSHAL* ppMarshal);
 
 /* FIXME: not implemented */
-HRESULT WINAPI CoMarshalHresult(LPSTREAM32 pstm, HRESULT hresult);
+HRESULT WINAPI CoMarshalHresult(LPSTREAM pstm, HRESULT hresult);
 
 /* FIXME: not implemented */
-HRESULT WINAPI CoMarshalInterface(LPSTREAM32 pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
+HRESULT WINAPI CoMarshalInterface(LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
 
 /* FIXME: not implemented */
-HRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM32* ppStm);
+HRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM* ppStm);
 
 /* FIXME: not implemented */
-HRESULT WINAPI CoReleaseMarshalData(LPSTREAM32 pStm);
+HRESULT WINAPI CoReleaseMarshalData(LPSTREAM pStm);
 
 /* FIXME: not implemented */
-HRESULT WINAPI CoUnmarshalHresult(LPSTREAM32 pstm, HRESULT* phresult);
+HRESULT WINAPI CoUnmarshalHresult(LPSTREAM pstm, HRESULT* phresult);
 
 /* FIXME: not implemented */
-HRESULT WINAPI CoUnmarshalInterface(LPSTREAM32 pStm, REFIID riid, LPVOID* ppv);
+HRESULT WINAPI CoUnmarshalInterface(LPSTREAM pStm, REFIID riid, LPVOID* ppv);
 
 
 #endif /* __WINE_WINE_OBJ_MARSHAL_H */
diff --git a/include/wine/obj_misc.h b/include/wine/obj_misc.h
index b493df5..8472c84 100644
--- a/include/wine/obj_misc.h
+++ b/include/wine/obj_misc.h
@@ -32,7 +32,7 @@
  */
 #define ICOM_INTERFACE IEnumString
 #define IEnumString_METHODS \
-    ICOM_METHOD3(HRESULT,Next,  ULONG,celt, LPOLESTR32*,rgelt, ULONG*,pceltFethed); \
+    ICOM_METHOD3(HRESULT,Next,  ULONG,celt, LPOLESTR*,rgelt, ULONG*,pceltFethed); \
     ICOM_METHOD1(HRESULT,Skip,  ULONG,celt); \
     ICOM_METHOD (HRESULT,Reset); \
     ICOM_METHOD1 (HRESULT, Clone, IEnumString**, ppenum);
@@ -54,7 +54,6 @@
 #define IEnumString_Clone(p,a)    ICOM_CALL1(Clone,p,a)
 #endif
 
-#define CreateEnumString WINELIB_NAME(CreateEnumString)
 
 
 /*****************************************************************************
@@ -92,14 +91,14 @@
 #define IMallocSpy_METHODS \
     ICOM_METHOD1 (ULONG,PreAlloc,        ULONG,cbRequest); \
     ICOM_VMETHOD1(      PostAlloc,       void*,pActual); \
-    ICOM_METHOD2 (void*,PreFree,         void*,pRequest, BOOL32,fSpyed); \
-    ICOM_VMETHOD1(      PostFree,        BOOL32,fSpyed); \
-    ICOM_METHOD4 (ULONG,PreRealloc,      void*,pRequest, ULONG,cbRequest, void**,ppNewRequest, BOOL32,fSpyed); \
-    ICOM_METHOD2 (void*,PostRealloc,     void*,pActual, BOOL32,fSpyed); \
-    ICOM_METHOD2 (void*,PreGetSize,      void*,pRequest, BOOL32,fSpyed); \
-    ICOM_METHOD2 (ULONG,PostGetSize,     ULONG,cbActual, BOOL32,fSpyed); \
-    ICOM_METHOD2 (void*,PreDidAlloc,     void*,pRequest, BOOL32,fSpyed); \
-    ICOM_METHOD3 (int,  PostDidAlloc,    void*,pRequest, BOOL32,fSpyed, int,fActual); \
+    ICOM_METHOD2 (void*,PreFree,         void*,pRequest, BOOL,fSpyed); \
+    ICOM_VMETHOD1(      PostFree,        BOOL,fSpyed); \
+    ICOM_METHOD4 (ULONG,PreRealloc,      void*,pRequest, ULONG,cbRequest, void**,ppNewRequest, BOOL,fSpyed); \
+    ICOM_METHOD2 (void*,PostRealloc,     void*,pActual, BOOL,fSpyed); \
+    ICOM_METHOD2 (void*,PreGetSize,      void*,pRequest, BOOL,fSpyed); \
+    ICOM_METHOD2 (ULONG,PostGetSize,     ULONG,cbActual, BOOL,fSpyed); \
+    ICOM_METHOD2 (void*,PreDidAlloc,     void*,pRequest, BOOL,fSpyed); \
+    ICOM_METHOD3 (int,  PostDidAlloc,    void*,pRequest, BOOL,fSpyed, int,fActual); \
     ICOM_METHOD  (int,  PreHeapMinimize); \
     ICOM_METHOD  (int,  PostHeapMinimize);
 #define IMallocSpy_IMETHODS \
diff --git a/include/wine/obj_moniker.h b/include/wine/obj_moniker.h
index b0f4504..58c3f13 100644
--- a/include/wine/obj_moniker.h
+++ b/include/wine/obj_moniker.h
@@ -72,10 +72,10 @@
     ICOM_METHOD1 (HRESULT, SetBindOptions,       LPBIND_OPTS2,pbindopts) \
     ICOM_METHOD1 (HRESULT, GetBindOptions,       LPBIND_OPTS2,pbindopts) \
     ICOM_METHOD1 (HRESULT, GetRunningObjectTable,IRunningObjectTable**,pprot) \
-    ICOM_METHOD2 (HRESULT, RegisterObjectParam,  LPOLESTR32,pszkey, IUnknown*,punk) \
-    ICOM_METHOD2 (HRESULT, GetObjectParam,       LPOLESTR32,pszkey, IUnknown*,punk) \
+    ICOM_METHOD2 (HRESULT, RegisterObjectParam,  LPOLESTR,pszkey, IUnknown*,punk) \
+    ICOM_METHOD2 (HRESULT, GetObjectParam,       LPOLESTR,pszkey, IUnknown*,punk) \
     ICOM_METHOD1 (HRESULT, EnumObjectParam,      IEnumString**,ppenum) \
-    ICOM_METHOD1 (HRESULT, RevokeObjectParam,    LPOLESTR32,pszkey)
+    ICOM_METHOD1 (HRESULT, RevokeObjectParam,    LPOLESTR,pszkey)
 #define IBindCtx_IMETHODS \
     IUnknown_IMETHODS \
     IBindCtx_METHODS
@@ -101,8 +101,7 @@
 #endif
 
 HRESULT WINAPI CreateBindCtx16(DWORD reserved, LPBC* ppbc);
-HRESULT WINAPI CreateBindCtx32(DWORD reserved, LPBC* ppbc);
-#define CreateBindCtx WINELIB_NAME(CreateBindCtx)
+HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC* ppbc);
 
 
 /*****************************************************************************
@@ -183,8 +182,8 @@
     ICOM_METHOD4(HRESULT,BindToObject,        IBindCtx*,pbc, IMoniker*,pmkToLeft, REFIID,riidResult, void**,ppvResult) \
     ICOM_METHOD4(HRESULT,BindToStorage,       IBindCtx*,pbc, IMoniker*,pmkToLeft, REFIID,riid, void**,ppvObj) \
     ICOM_METHOD4(HRESULT,Reduce,              IBindCtx*,pbc, DWORD,dwReduceHowFar, IMoniker**,ppmkToLeft, IMoniker**,ppmkReduced) \
-    ICOM_METHOD3(HRESULT,ComposeWith,         IMoniker*,pmkRight, BOOL32,fOnlyIfNotGeneric, IMoniker**,ppmkComposite) \
-    ICOM_METHOD2(HRESULT,Enum,                BOOL32,fForward, IEnumMoniker**,ppenumMoniker) \
+    ICOM_METHOD3(HRESULT,ComposeWith,         IMoniker*,pmkRight, BOOL,fOnlyIfNotGeneric, IMoniker**,ppmkComposite) \
+    ICOM_METHOD2(HRESULT,Enum,                BOOL,fForward, IEnumMoniker**,ppenumMoniker) \
     ICOM_METHOD1(HRESULT,IsEqual,             IMoniker*,pmkOtherMoniker) \
     ICOM_METHOD1(HRESULT,Hash,                DWORD*,pdwHash) \
     ICOM_METHOD3(HRESULT,IsRunning,           IBindCtx*,pbc, IMoniker*,pmkToLeft, IMoniker*,pmkNewlyRunning) \
@@ -192,8 +191,8 @@
     ICOM_METHOD1(HRESULT,Inverse,             IMoniker**,ppmk) \
     ICOM_METHOD2(HRESULT,CommonPrefixWith,    IMoniker*,pmkOtherMoniker, IMoniker**,ppmkPrefix) \
     ICOM_METHOD2(HRESULT,RelativePathTo,      IMoniker*,pmkOther, IMoniker**,ppmkRelPath) \
-    ICOM_METHOD3(HRESULT,GetDisplayName,      IBindCtx*,pbc, IMoniker*,pmkToLeft, LPOLESTR32*,ppszDisplayName) \
-    ICOM_METHOD5(HRESULT,ParseDisplayName,    IBindCtx*,pbc, IMoniker*,pmkToLeft, LPOLESTR32,pszDisplayName, ULONG*,pchEaten, IMoniker**,ppmkOut) \
+    ICOM_METHOD3(HRESULT,GetDisplayName,      IBindCtx*,pbc, IMoniker*,pmkToLeft, LPOLESTR*,ppszDisplayName) \
+    ICOM_METHOD5(HRESULT,ParseDisplayName,    IBindCtx*,pbc, IMoniker*,pmkToLeft, LPOLESTR,pszDisplayName, ULONG*,pchEaten, IMoniker**,ppmkOut) \
     ICOM_METHOD1(HRESULT,IsSystemMoniker,     DWORD*,pdwMksys)
 #define IMoniker_IMETHODS \
     IPersistStream_IMETHODS \
@@ -241,12 +240,10 @@
 HRESULT WINAPI CreateClassMoniker(REFCLSID rclsid, LPMONIKER* ppmk);
 
 HRESULT WINAPI CreateFileMoniker16(LPCOLESTR16 lpszPathName, LPMONIKER* ppmk);
-HRESULT WINAPI CreateFileMoniker32(LPCOLESTR32 lpszPathName, LPMONIKER* ppmk);
-#define CreateFileMoniker WINELIB_NAME(CreateFileMoniker)
+HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, LPMONIKER* ppmk);
 
-HRESULT WINAPI CreateItemMoniker16(LPCOLESTR16 lpszDelim, LPCOLESTR32  lpszItem, LPMONIKER* ppmk);
-HRESULT WINAPI CreateItemMoniker32(LPCOLESTR32 lpszDelim, LPCOLESTR32  lpszItem, LPMONIKER* ppmk);
-#define CreateItemMoniker WINELIB_NAME(CreateItemMoniker)
+HRESULT WINAPI CreateItemMoniker16(LPCOLESTR16 lpszDelim, LPCOLESTR  lpszItem, LPMONIKER* ppmk);
+HRESULT WINAPI CreateItemMoniker(LPCOLESTR lpszDelim, LPCOLESTR  lpszItem, LPMONIKER* ppmk);
 
 /* FIXME: not implemented */
 HRESULT WINAPI CreateGenericComposite(LPMONIKER pmkFirst, LPMONIKER pmkRest, LPMONIKER* ppmkComposite);
@@ -284,9 +281,9 @@
 #define IRunnableObject_METHODS \
     ICOM_METHOD1(HRESULT,GetRunningClass,    LPCLSID,lpClsid) \
     ICOM_METHOD1(HRESULT,Run,                IBindCtx*,pbc) \
-    ICOM_METHOD (BOOL32,IsRunning) \
-    ICOM_METHOD2(HRESULT,LockRunning,        BOOL32,fLock, BOOL32,fLastUnlockCloses) \
-    ICOM_METHOD1(HRESULT,SetContainedObject, BOOL32,fContained)
+    ICOM_METHOD (BOOL,IsRunning) \
+    ICOM_METHOD2(HRESULT,LockRunning,        BOOL,fLock, BOOL,fLastUnlockCloses) \
+    ICOM_METHOD1(HRESULT,SetContainedObject, BOOL,fContained)
 #define IRunnableObject_IMETHODS \
     IUnknown_IMETHODS \
     IRunnableObject_METHODS
@@ -346,10 +343,10 @@
  */
 
 /* FIXME: not implemented */
-HRESULT WINAPI CoGetInstanceFromFile(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, DWORD grfMode, OLECHAR32* pwszName, DWORD dwCount, MULTI_QI* pResults);
+HRESULT WINAPI CoGetInstanceFromFile(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, DWORD grfMode, OLECHAR* pwszName, DWORD dwCount, MULTI_QI* pResults);
 
 /* FIXME: not implemented */
-HRESULT WINAPI CoGetInstanceFromIStorage(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, IStorage32* pstg, DWORD dwCount, MULTI_QI* pResults);
+HRESULT WINAPI CoGetInstanceFromIStorage(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, IStorage* pstg, DWORD dwCount, MULTI_QI* pResults);
 
 
 #endif /* __WINE_WINE_OBJ_MONIKER_H */
diff --git a/include/wine/obj_oleaut.h b/include/wine/obj_oleaut.h
index d753ed9..2e67c2f 100644
--- a/include/wine/obj_oleaut.h
+++ b/include/wine/obj_oleaut.h
@@ -159,8 +159,8 @@
 		CHAR cVal;
 		USHORT uiVal;
 		ULONG ulVal;
-		INT32 intVal;
-		UINT32 uintVal;
+		INT intVal;
+		UINT uintVal;
 		BYTE bVal;
 		short iVal;
 		long lVal;
@@ -169,7 +169,7 @@
 		VARIANT_BOOL boolVal;
 		SCODE scode;
 		DATE date;
-		BSTR32 bstrVal;
+		BSTR bstrVal;
 		CY cyVal;
         /*
         DECIMAL decVal;
@@ -183,8 +183,8 @@
 		CHAR* pcVal;
 		USHORT* puiVal;
 		ULONG* pulVal;
-		INT32* pintVal;
-		UINT32* puintVal;
+		INT* pintVal;
+		UINT* puintVal;
 		BYTE* pbVal;
 		short* piVal;
 		long* plVal;
@@ -193,7 +193,7 @@
 		VARIANT_BOOL* pboolVal;
 		SCODE* pscode;
 		DATE* pdate;
-		BSTR32* pbstrVal;
+		BSTR* pbstrVal;
 		VARIANT* pvarVal;
 		PVOID byref;
 		CY* pcyVal;
@@ -212,16 +212,16 @@
 {
   VARIANTARG* rgvarg;
   DISPID*     rgdispidNamedArgs;
-  UINT32      cArgs;
-  UINT32      cNamedArgs;
+  UINT      cArgs;
+  UINT      cNamedArgs;
 } DISPPARAMS;
 
 typedef struct tagEXCEPINFO {
     WORD  wCode;
     WORD  wReserved;
-    BSTR32  bstrSource;
-    BSTR32  bstrDescription;
-    BSTR32  bstrHelpFile;
+    BSTR  bstrSource;
+    BSTR  bstrDescription;
+    BSTR  bstrHelpFile;
     DWORD dwHelpContext;
     PVOID pvReserved;
     HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);
@@ -233,10 +233,10 @@
  */
 #define ICOM_INTERFACE IDispatch
 #define IDispatch_METHODS \
-  ICOM_METHOD1(HRESULT, GetTypeInfoCount, UINT32*, pctinfo); \
-  ICOM_METHOD3(HRESULT, GetTypeInfo, UINT32, iTInfo, LCID, lcid, ITypeInfo**, ppTInfo); \
-  ICOM_METHOD5(HRESULT, GetIDsOfNames, REFIID, riid, LPOLESTR32*, rgszNames, UINT32, cNames, LCID, lcid, DISPID*, rgDispId); \
-  ICOM_METHOD8(HRESULT, Invoke, DISPID, dispIdMember, REFIID, riid, LCID, lcid, WORD, wFlags, DISPPARAMS*, pDispParams, VARIANT*, pVarResult, EXCEPINFO*, pExepInfo, UINT32*, puArgErr); 
+  ICOM_METHOD1(HRESULT, GetTypeInfoCount, UINT*, pctinfo); \
+  ICOM_METHOD3(HRESULT, GetTypeInfo, UINT, iTInfo, LCID, lcid, ITypeInfo**, ppTInfo); \
+  ICOM_METHOD5(HRESULT, GetIDsOfNames, REFIID, riid, LPOLESTR*, rgszNames, UINT, cNames, LCID, lcid, DISPID*, rgDispId); \
+  ICOM_METHOD8(HRESULT, Invoke, DISPID, dispIdMember, REFIID, riid, LCID, lcid, WORD, wFlags, DISPPARAMS*, pDispParams, VARIANT*, pVarResult, EXCEPINFO*, pExepInfo, UINT*, puArgErr); 
 #define IDispatch_IMETHODS \
   ICOM_INHERITS(IDispatch,IUnknown)
 ICOM_DEFINE(IDispatch,IUnknown)
diff --git a/include/wine/obj_olefont.h b/include/wine/obj_olefont.h
index 3ffae6e..8293f2a 100644
--- a/include/wine/obj_olefont.h
+++ b/include/wine/obj_olefont.h
@@ -19,38 +19,38 @@
 DEFINE_GUID(IID_IFontDisp, 0xBEF6E003, 0xA874, 0x101A, 0x8B, 0xBA, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB);
 typedef struct IFontDisp IFontDisp,*LPFONTDISP;
 
-typedef TEXTMETRIC32W TEXTMETRICOLE;
+typedef TEXTMETRICW TEXTMETRICOLE;
 
 /*****************************************************************************
  * IFont interface
  */
 #define ICOM_INTERFACE IFont
 #define IFont_METHODS \
-  ICOM_METHOD1(HRESULT, get_Name, BSTR32*, pname); \
-  ICOM_METHOD1(HRESULT, put_Name, BSTR32, name); \
+  ICOM_METHOD1(HRESULT, get_Name, BSTR*, pname); \
+  ICOM_METHOD1(HRESULT, put_Name, BSTR, name); \
   ICOM_METHOD1(HRESULT, get_Size, CY*, psize); \
   ICOM_METHOD1(HRESULT, put_Size, CY, size); \
-  ICOM_METHOD1(HRESULT, get_Bold, BOOL32*, pbold); \
-  ICOM_METHOD1(HRESULT, put_Bold, BOOL32, bold); \
-  ICOM_METHOD1(HRESULT, get_Italic, BOOL32*, pitalic); \
-  ICOM_METHOD1(HRESULT, put_Italic, BOOL32, italic); \
-  ICOM_METHOD1(HRESULT, get_Underline, BOOL32*, punderline); \
-  ICOM_METHOD1(HRESULT, put_Underline, BOOL32, underline); \
-  ICOM_METHOD1(HRESULT, get_Strikethrough, BOOL32*, pstrikethrough); \
-  ICOM_METHOD1(HRESULT, put_Strikethrough, BOOL32, strikethrough); \
+  ICOM_METHOD1(HRESULT, get_Bold, BOOL*, pbold); \
+  ICOM_METHOD1(HRESULT, put_Bold, BOOL, bold); \
+  ICOM_METHOD1(HRESULT, get_Italic, BOOL*, pitalic); \
+  ICOM_METHOD1(HRESULT, put_Italic, BOOL, italic); \
+  ICOM_METHOD1(HRESULT, get_Underline, BOOL*, punderline); \
+  ICOM_METHOD1(HRESULT, put_Underline, BOOL, underline); \
+  ICOM_METHOD1(HRESULT, get_Strikethrough, BOOL*, pstrikethrough); \
+  ICOM_METHOD1(HRESULT, put_Strikethrough, BOOL, strikethrough); \
   ICOM_METHOD1(HRESULT, get_Weight, short*, pweight); \
   ICOM_METHOD1(HRESULT, put_Weight, short, weight); \
   ICOM_METHOD1(HRESULT, get_Charset, short*, pcharset); \
   ICOM_METHOD1(HRESULT, put_Charset, short, charset); \
-  ICOM_METHOD1(HRESULT, get_hFont, HFONT32*, phfont); \
-  ICOM_METHOD1(HRESULT, put_hFont, HFONT32, hfont); \
+  ICOM_METHOD1(HRESULT, get_hFont, HFONT*, phfont); \
+  ICOM_METHOD1(HRESULT, put_hFont, HFONT, hfont); \
   ICOM_METHOD1(HRESULT, Clone, IFont**, ppfont); \
   ICOM_METHOD1(HRESULT, IsEqual, IFont*, pFontOther); \
   ICOM_METHOD2(HRESULT, SetRatio, long, cyLogical, long, cyHimetric); \
   ICOM_METHOD1(HRESULT, QueryTextMetrics, TEXTMETRICOLE*, ptm); \
-  ICOM_METHOD1(HRESULT, AddRefHfont, HFONT32, hfont); \
-  ICOM_METHOD1(HRESULT, ReleaseHfont, HFONT32, hfont); \
-  ICOM_METHOD1(HRESULT, SetHdc, HDC32, hdc);     
+  ICOM_METHOD1(HRESULT, AddRefHfont, HFONT, hfont); \
+  ICOM_METHOD1(HRESULT, ReleaseHfont, HFONT, hfont); \
+  ICOM_METHOD1(HRESULT, SetHdc, HDC, hdc);     
 #define IFont_IMETHODS \
   ICOM_INHERITS(IFont,IUnknown)
 ICOM_DEFINE(IFont,IUnknown)
diff --git a/include/wine/obj_propertystorage.h b/include/wine/obj_propertystorage.h
index cec645c..1e7de55 100644
--- a/include/wine/obj_propertystorage.h
+++ b/include/wine/obj_propertystorage.h
@@ -85,7 +85,7 @@
     union 
     {
         PROPID propid;
-        LPOLESTR32 lpwstr;
+        LPOLESTR lpwstr;
     } u;
 } PROPSPEC;
 
@@ -116,7 +116,7 @@
  */
 struct tagSTATPROPSTG
 {
-    LPOLESTR32 lpwstrName;
+    LPOLESTR lpwstrName;
     PROPID propid;
     VARTYPE vt;
 };
@@ -270,7 +270,7 @@
 typedef struct tagCABSTR
 {
     ULONG cElems;
-    BSTR32 *pElems;
+    BSTR *pElems;
 } CABSTR;
 
 typedef struct tagCABOOL
@@ -363,9 +363,9 @@
         CLSID *puuid;
         BLOB blob;
         CLIPDATA *pclipdata;
-        IStream32 *pStream;
-        IStorage32 *pStorage;
-        BSTR32 bstrVal;
+        IStream *pStream;
+        IStorage *pStorage;
+        BSTR bstrVal;
         LPSTR pszVal;
         LPWSTR pwszVal;
         CAUB caub;
@@ -397,8 +397,8 @@
     ICOM_METHOD3(HRESULT,ReadMultiple,        ULONG,cpspec, const PROPSPEC*,rgpspec, PROPVARIANT*,rgpropvar); \
     ICOM_METHOD4(HRESULT,WriteMultiple,       ULONG,cpspec, const PROPSPEC*,rgpspec, const PROPVARIANT*,rgpropvar, PROPID,propidNameFirst); \
     ICOM_METHOD2(HRESULT,DeleteMultiple,      ULONG,cpspec, const PROPSPEC*,rgpspec); \
-    ICOM_METHOD2(HRESULT,ReadPropertyNames,   const PROPID*,rgpropid, LPOLESTR32*,rglpwstrName); \
-    ICOM_METHOD3(HRESULT,WritePropertyNames,  ULONG,cpropid, const PROPID*,rgpropid, LPOLESTR32*,rglpwstrName); \
+    ICOM_METHOD2(HRESULT,ReadPropertyNames,   const PROPID*,rgpropid, LPOLESTR*,rglpwstrName); \
+    ICOM_METHOD3(HRESULT,WritePropertyNames,  ULONG,cpropid, const PROPID*,rgpropid, LPOLESTR*,rglpwstrName); \
     ICOM_METHOD2(HRESULT,DeletePropertyNames, ULONG,cpropid, const PROPID*,rgpropid); \
     ICOM_METHOD1(HRESULT,Commit,              DWORD,grfCommitFlags); \
     ICOM_METHOD (HRESULT,Revert); \
diff --git a/include/wine/obj_shelllink.h b/include/wine/obj_shelllink.h
index b2ee72e..d31f268 100644
--- a/include/wine/obj_shelllink.h
+++ b/include/wine/obj_shelllink.h
@@ -41,23 +41,23 @@
  */
 #define ICOM_INTERFACE IShellLink
 #define IShellLink_METHODS \
-    ICOM_METHOD4( HRESULT, GetPath, LPSTR, pszFile, INT32, cchMaxPath, WIN32_FIND_DATA32A *, pfd, DWORD, fFlags) \
+    ICOM_METHOD4( HRESULT, GetPath, LPSTR, pszFile, INT, cchMaxPath, WIN32_FIND_DATAA *, pfd, DWORD, fFlags) \
     ICOM_METHOD1( HRESULT, GetIDList, LPITEMIDLIST *, ppidl) \
     ICOM_METHOD1( HRESULT, SetIDList, LPCITEMIDLIST, pidl) \
-    ICOM_METHOD2( HRESULT, GetDescription, LPSTR, pszName, INT32, cchMaxName) \
+    ICOM_METHOD2( HRESULT, GetDescription, LPSTR, pszName, INT, cchMaxName) \
     ICOM_METHOD1( HRESULT, SetDescription, LPCSTR, pszName) \
-    ICOM_METHOD2( HRESULT, GetWorkingDirectory, LPSTR, pszDir,INT32, cchMaxPath) \
+    ICOM_METHOD2( HRESULT, GetWorkingDirectory, LPSTR, pszDir,INT, cchMaxPath) \
     ICOM_METHOD1( HRESULT, SetWorkingDirectory, LPCSTR, pszDir) \
-    ICOM_METHOD2( HRESULT, GetArguments, LPSTR, pszArgs, INT32, cchMaxPath) \
+    ICOM_METHOD2( HRESULT, GetArguments, LPSTR, pszArgs, INT, cchMaxPath) \
     ICOM_METHOD1( HRESULT, SetArguments, LPCSTR, pszArgs) \
     ICOM_METHOD1( HRESULT, GetHotkey, WORD*, pwHotkey) \
     ICOM_METHOD1( HRESULT, SetHotkey, WORD, wHotkey) \
-    ICOM_METHOD1( HRESULT, GetShowCmd, INT32*, piShowCmd) \
-    ICOM_METHOD1( HRESULT, SetShowCmd, INT32, iShowCmd) \
-    ICOM_METHOD3( HRESULT, GetIconLocation, LPSTR, pszIconPath, INT32, cchIconPath,INT32 *, piIcon) \
-    ICOM_METHOD2( HRESULT, SetIconLocation, LPCSTR, pszIconPath,INT32, iIcon) \
+    ICOM_METHOD1( HRESULT, GetShowCmd, INT*, piShowCmd) \
+    ICOM_METHOD1( HRESULT, SetShowCmd, INT, iShowCmd) \
+    ICOM_METHOD3( HRESULT, GetIconLocation, LPSTR, pszIconPath, INT, cchIconPath,INT *, piIcon) \
+    ICOM_METHOD2( HRESULT, SetIconLocation, LPCSTR, pszIconPath,INT, iIcon) \
     ICOM_METHOD2( HRESULT, SetRelativePath, LPCSTR, pszPathRel, DWORD, dwReserved) \
-    ICOM_METHOD2( HRESULT, Resolve, HWND32, hwnd, DWORD, fFlags) \
+    ICOM_METHOD2( HRESULT, Resolve, HWND, hwnd, DWORD, fFlags) \
     ICOM_METHOD1( HRESULT, SetPath, LPCSTR, pszFile)
 #define IShellLink_IMETHODS \
     IUnknown_IMETHODS \
@@ -96,23 +96,23 @@
  */
 #define ICOM_INTERFACE IShellLinkW
 #define IShellLinkW_METHODS \
-    ICOM_METHOD4( HRESULT, GetPath, LPWSTR, pszFile, INT32, cchMaxPath, WIN32_FIND_DATA32A *, pfd, DWORD, fFlags) \
+    ICOM_METHOD4( HRESULT, GetPath, LPWSTR, pszFile, INT, cchMaxPath, WIN32_FIND_DATAA *, pfd, DWORD, fFlags) \
     ICOM_METHOD1( HRESULT, GetIDList, LPITEMIDLIST *, ppidl) \
     ICOM_METHOD1( HRESULT, SetIDList, LPCITEMIDLIST, pidl) \
-    ICOM_METHOD2( HRESULT, GetDescription, LPWSTR, pszName, INT32, cchMaxName) \
+    ICOM_METHOD2( HRESULT, GetDescription, LPWSTR, pszName, INT, cchMaxName) \
     ICOM_METHOD1( HRESULT, SetDescription, LPCWSTR, pszName) \
-    ICOM_METHOD2( HRESULT, GetWorkingDirectory, LPWSTR, pszDir,INT32, cchMaxPath) \
+    ICOM_METHOD2( HRESULT, GetWorkingDirectory, LPWSTR, pszDir,INT, cchMaxPath) \
     ICOM_METHOD1( HRESULT, SetWorkingDirectory, LPCWSTR, pszDir) \
-    ICOM_METHOD2( HRESULT, GetArguments, LPWSTR, pszArgs, INT32, cchMaxPath) \
+    ICOM_METHOD2( HRESULT, GetArguments, LPWSTR, pszArgs, INT, cchMaxPath) \
     ICOM_METHOD1( HRESULT, SetArguments, LPCWSTR, pszArgs) \
     ICOM_METHOD1( HRESULT, GetHotkey, WORD*, pwHotkey) \
     ICOM_METHOD1( HRESULT, SetHotkey, WORD, wHotkey) \
-    ICOM_METHOD1( HRESULT, GetShowCmd, INT32*, piShowCmd) \
-    ICOM_METHOD1( HRESULT, SetShowCmd, INT32, iShowCmd) \
-    ICOM_METHOD3( HRESULT, GetIconLocation, LPWSTR, pszIconPath, INT32, cchIconPath,INT32 *, piIcon) \
-    ICOM_METHOD2( HRESULT, SetIconLocation, LPCWSTR, pszIconPath,INT32, iIcon) \
+    ICOM_METHOD1( HRESULT, GetShowCmd, INT*, piShowCmd) \
+    ICOM_METHOD1( HRESULT, SetShowCmd, INT, iShowCmd) \
+    ICOM_METHOD3( HRESULT, GetIconLocation, LPWSTR, pszIconPath, INT, cchIconPath,INT *, piIcon) \
+    ICOM_METHOD2( HRESULT, SetIconLocation, LPCWSTR, pszIconPath,INT, iIcon) \
     ICOM_METHOD2( HRESULT, SetRelativePath, LPCWSTR, pszPathRel, DWORD, dwReserved) \
-    ICOM_METHOD2( HRESULT, Resolve, HWND32, hwnd, DWORD, fFlags) \
+    ICOM_METHOD2( HRESULT, Resolve, HWND, hwnd, DWORD, fFlags) \
     ICOM_METHOD1( HRESULT, SetPath, LPCWSTR, pszFile)
 #define IShellLinkW_IMETHODS \
     IUnknown_IMETHODS \
diff --git a/include/wine/obj_storage.h b/include/wine/obj_storage.h
index a698e7e..63f2302 100644
--- a/include/wine/obj_storage.h
+++ b/include/wine/obj_storage.h
@@ -15,8 +15,7 @@
  * Predeclare the structures
  */
 typedef LPOLESTR16 *SNB16;
-typedef LPOLESTR32 *SNB32;
-DECL_WINELIB_TYPE(SNB)
+typedef LPOLESTR *SNB;
 
 typedef struct STATSTG STATSTG;
 
@@ -59,15 +58,11 @@
 
 DEFINE_OLEGUID(IID_IStorage,		0x0000000bL, 0, 0);
 typedef struct IStorage16 IStorage16,*LPSTORAGE16;
-typedef struct IStorage32 IStorage32,*LPSTORAGE32;
-DECL_WINELIB_TYPE(IStorage)
-DECL_WINELIB_TYPE(LPSTORAGE)
+typedef struct IStorage IStorage,*LPSTORAGE;
 
 DEFINE_OLEGUID(IID_IStream,		0x0000000cL, 0, 0);
 typedef struct IStream16 IStream16,*LPSTREAM16;
-typedef struct IStream32 IStream32,*LPSTREAM32;
-DECL_WINELIB_TYPE(IStream)
-DECL_WINELIB_TYPE(LPSTREAM)
+typedef struct IStream IStream,*LPSTREAM;
 
 
 /*****************************************************************************
@@ -172,7 +167,7 @@
     ICOM_METHOD3(HRESULT,FillAppend,  const void*,pv, ULONG,cb, ULONG*,pcbWritten) \
     ICOM_METHOD4(HRESULT,FillAt,      ULARGE_INTEGER,ulOffset, const void*,pv, ULONG,cb, ULONG*,pcbWritten) \
     ICOM_METHOD1(HRESULT,SetFillSize, ULARGE_INTEGER,ulSize) \
-    ICOM_METHOD1(HRESULT,Terminate,   BOOL32,bCanceled)
+    ICOM_METHOD1(HRESULT,Terminate,   BOOL,bCanceled)
 #define IFillLockBytes_IMETHODS \
     IUnknown_IMETHODS \
     IFillLockBytes_METHODS
@@ -292,10 +287,10 @@
 #define ICOM_INTERFACE IPersistFile
 #define IPersistFile_METHODS \
     ICOM_CMETHOD (HRESULT,IsDirty) \
-    ICOM_METHOD2 (HRESULT,Load,          LPCOLESTR32,pszFileName, DWORD,dwMode) \
-    ICOM_METHOD2 (HRESULT,Save,          LPCOLESTR32,pszFileName, BOOL32,fRemember) \
-    ICOM_METHOD1 (HRESULT,SaveCompleted, LPCOLESTR32,pszFileName) \
-    ICOM_CMETHOD1(HRESULT,GetCurFile,    LPOLESTR32*,ppszFileName)
+    ICOM_METHOD2 (HRESULT,Load,          LPCOLESTR,pszFileName, DWORD,dwMode) \
+    ICOM_METHOD2 (HRESULT,Save,          LPCOLESTR,pszFileName, BOOL,fRemember) \
+    ICOM_METHOD1 (HRESULT,SaveCompleted, LPCOLESTR,pszFileName) \
+    ICOM_CMETHOD1(HRESULT,GetCurFile,    LPOLESTR*,ppszFileName)
 #define IPersistFile_IMETHODS \
     IPersist_IMETHODS \
     IPersistFile_METHODS
@@ -324,10 +319,10 @@
 #define ICOM_INTERFACE IPersistStorage
 #define IPersistStorage_METHODS \
     ICOM_METHOD (HRESULT,IsDirty) \
-    ICOM_METHOD1(HRESULT,InitNew,        IStorage32*,pStg) \
-    ICOM_METHOD1(HRESULT,Load,           IStorage32*,pStg) \
-    ICOM_METHOD2(HRESULT,Save,           IStorage32*,pStg, BOOL32,fSameAsLoad) \
-    ICOM_METHOD1(HRESULT,SaveCompleted,  IStorage32*,pStgNew) \
+    ICOM_METHOD1(HRESULT,InitNew,        IStorage*,pStg) \
+    ICOM_METHOD1(HRESULT,Load,           IStorage*,pStg) \
+    ICOM_METHOD2(HRESULT,Save,           IStorage*,pStg, BOOL,fSameAsLoad) \
+    ICOM_METHOD1(HRESULT,SaveCompleted,  IStorage*,pStgNew) \
 		ICOM_METHOD (HRESULT,HandsOffStorage)
 #define IPersistStorage_IMETHODS \
     IPersist_IMETHODS \
@@ -358,8 +353,8 @@
 #define ICOM_INTERFACE IPersistStream
 #define IPersistStream_METHODS \
     ICOM_METHOD (HRESULT,IsDirty) \
-    ICOM_METHOD1(HRESULT,Load,       IStream32*,pStm) \
-    ICOM_METHOD2(HRESULT,Save,       IStream32*,pStm, BOOL32,fClearDirty) \
+    ICOM_METHOD1(HRESULT,Load,       IStream*,pStm) \
+    ICOM_METHOD2(HRESULT,Save,       IStream*,pStm, BOOL,fClearDirty) \
     ICOM_METHOD1(HRESULT,GetSizeMax, ULARGE_INTEGER*,pcbSize)
 #define IPersistStream_IMETHODS \
     IPersist_IMETHODS \
@@ -387,7 +382,7 @@
  */
 #define ICOM_INTERFACE IProgressNotify
 #define IProgressNotify_METHODS \
-    ICOM_METHOD4(HRESULT,OnProgress, DWORD,dwProgressCurrent, DWORD,dwProgressMaximum, BOOL32,fAccurate, BOOL32,fOwner)
+    ICOM_METHOD4(HRESULT,OnProgress, DWORD,dwProgressCurrent, DWORD,dwProgressMaximum, BOOL,fAccurate, BOOL,fOwner)
 #define IProgressNotify_IMETHODS \
     IUnknown_IMETHODS \
     IProgressNotify_METHODS
@@ -409,7 +404,7 @@
  */
 #define ICOM_INTERFACE IRootStorage
 #define IRootStorage_METHODS \
-    ICOM_METHOD1(HRESULT,SwitchToFile, LPOLESTR32,pszFile)
+    ICOM_METHOD1(HRESULT,SwitchToFile, LPOLESTR,pszFile)
 #define IRootStorage_IMETHODS \
     IUnknown_IMETHODS \
     IRootStorage_METHODS
@@ -500,50 +495,50 @@
 #endif
 
 
-#define ICOM_INTERFACE IStorage32
-#define IStorage32_METHODS \
-    ICOM_METHOD5(HRESULT,CreateStream,   LPCOLESTR32,pwcsName, DWORD,grfMode, DWORD,reserved1, DWORD,reserved2, IStream32**,ppstm) \
-    ICOM_METHOD5(HRESULT,OpenStream,     LPCOLESTR32,pwcsName, void*,reserved1, DWORD,grfMode, DWORD,reserved2, IStream32**,ppstm) \
-    ICOM_METHOD5(HRESULT,CreateStorage,  LPCOLESTR32,pwcsName, DWORD,grfMode, DWORD,dwStgFmt, DWORD,reserved2, IStorage32**,ppstg) \
-    ICOM_METHOD6(HRESULT,OpenStorage,    LPCOLESTR32,pwcsName, IStorage32*,pstgPriority, DWORD,grfMode, SNB32,snb16Exclude, DWORD,reserved, IStorage32**,ppstg) \
-    ICOM_METHOD4(HRESULT,CopyTo,         DWORD,ciidExclude, const IID*,rgiidExclude, SNB32,snb16Exclude, IStorage32*,pstgDest) \
-    ICOM_METHOD4(HRESULT,MoveElementTo,  LPCOLESTR32,pwcsName, IStorage32*,pstgDest, LPCOLESTR32,pwcsNewName, DWORD,grfFlags) \
+#define ICOM_INTERFACE IStorage
+#define IStorage_METHODS \
+    ICOM_METHOD5(HRESULT,CreateStream,   LPCOLESTR,pwcsName, DWORD,grfMode, DWORD,reserved1, DWORD,reserved2, IStream**,ppstm) \
+    ICOM_METHOD5(HRESULT,OpenStream,     LPCOLESTR,pwcsName, void*,reserved1, DWORD,grfMode, DWORD,reserved2, IStream**,ppstm) \
+    ICOM_METHOD5(HRESULT,CreateStorage,  LPCOLESTR,pwcsName, DWORD,grfMode, DWORD,dwStgFmt, DWORD,reserved2, IStorage**,ppstg) \
+    ICOM_METHOD6(HRESULT,OpenStorage,    LPCOLESTR,pwcsName, IStorage*,pstgPriority, DWORD,grfMode, SNB,snb16Exclude, DWORD,reserved, IStorage**,ppstg) \
+    ICOM_METHOD4(HRESULT,CopyTo,         DWORD,ciidExclude, const IID*,rgiidExclude, SNB,snb16Exclude, IStorage*,pstgDest) \
+    ICOM_METHOD4(HRESULT,MoveElementTo,  LPCOLESTR,pwcsName, IStorage*,pstgDest, LPCOLESTR,pwcsNewName, DWORD,grfFlags) \
     ICOM_METHOD1(HRESULT,Commit,         DWORD,grfCommitFlags) \
     ICOM_METHOD (HRESULT,Revert) \
     ICOM_METHOD4(HRESULT,EnumElements,   DWORD,reserved1, void*,reserved2, DWORD,reserved3, IEnumSTATSTG**,ppenum) \
-    ICOM_METHOD1(HRESULT,DestroyElement, LPCOLESTR32,pwcsName) \
-    ICOM_METHOD2(HRESULT,RenameElement,  LPCOLESTR32,pwcsOldName, LPCOLESTR32,pwcsNewName) \
-    ICOM_METHOD4(HRESULT,SetElementTimes,LPCOLESTR32,pwcsName, const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime) \
+    ICOM_METHOD1(HRESULT,DestroyElement, LPCOLESTR,pwcsName) \
+    ICOM_METHOD2(HRESULT,RenameElement,  LPCOLESTR,pwcsOldName, LPCOLESTR,pwcsNewName) \
+    ICOM_METHOD4(HRESULT,SetElementTimes,LPCOLESTR,pwcsName, const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime) \
     ICOM_METHOD1(HRESULT,SetClass,       REFCLSID,clsid) \
     ICOM_METHOD2(HRESULT,SetStateBits,   DWORD,grfStateBits, DWORD,grfMask) \
     ICOM_METHOD2(HRESULT,Stat,           STATSTG*,pstatstg, DWORD,grfStatFlag)
-#define IStorage32_IMETHODS \
+#define IStorage_IMETHODS \
     IUnknown_IMETHODS \
-    IStorage32_METHODS
-ICOM_DEFINE(IStorage32,IUnknown)
+    IStorage_METHODS
+ICOM_DEFINE(IStorage,IUnknown)
 #undef ICOM_INTERFACE
 
 #ifdef ICOM_CINTERFACE
 /*** IUnknown methods ***/
-#define IStorage32_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
-#define IStorage32_AddRef(p)             ICOM_CALL (AddRef,p)
-#define IStorage32_Release(p)            ICOM_CALL (Release,p)
+#define IStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IStorage_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IStorage_Release(p)            ICOM_CALL (Release,p)
 /*** IStorage32 methods ***/
-#define IStorage32_CreateStream(p,a,b,c,d,e)  ICOM_CALL5(CreateStream,p,a,b,c,d,e)
-#define IStorage32_OpenStream(p,a,b,c,d,e)    ICOM_CALL5(OpenStream,p,a,b,c,d,e)
-#define IStorage32_CreateStorage(p,a,b,c,d,e) ICOM_CALL5(CreateStorage,p,a,b,c,d,e)
-#define IStorage32_OpenStorage(p,a,b,c,d,e,f) ICOM_CALL6(OpenStorage,p,a,b,c,d,e,f)
-#define IStorage32_CopyTo(p,a,b,c,d)          ICOM_CALL4(CopyTo,p,a,b,c,d)
-#define IStorage32_MoveElementTo(p,a,b,c,d)   ICOM_CALL4(MoveElementTo,p,a,b,c,d)
-#define IStorage32_Commit(p,a)                ICOM_CALL1(Commit,p,a)
-#define IStorage32_Revert(p)                  ICOM_CALL (Revert,p)
-#define IStorage32_EnumElements(p,a,b,c,d)    ICOM_CALL4(EnumElements,p,a,b,c,d)
-#define IStorage32_DestroyElement(p,a)        ICOM_CALL1(DestroyElement,p,a)
-#define IStorage32_RenameElement(p,a,b)       ICOM_CALL2(RenameElement,p,a,b)
-#define IStorage32_SetElementTimes(p,a,b,c,d) ICOM_CALL4(SetElementTimes,p,a,b,c,d)
-#define IStorage32_SetClass(p,a)              ICOM_CALL1(SetClass,p,a)
-#define IStorage32_SetStateBits(p,a,b)        ICOM_CALL2(SetStateBits,p,a,b)
-#define IStorage32_Stat(p,a,b)                ICOM_CALL2(Stat,p,a,b)
+#define IStorage_CreateStream(p,a,b,c,d,e)  ICOM_CALL5(CreateStream,p,a,b,c,d,e)
+#define IStorage_OpenStream(p,a,b,c,d,e)    ICOM_CALL5(OpenStream,p,a,b,c,d,e)
+#define IStorage_CreateStorage(p,a,b,c,d,e) ICOM_CALL5(CreateStorage,p,a,b,c,d,e)
+#define IStorage_OpenStorage(p,a,b,c,d,e,f) ICOM_CALL6(OpenStorage,p,a,b,c,d,e,f)
+#define IStorage_CopyTo(p,a,b,c,d)          ICOM_CALL4(CopyTo,p,a,b,c,d)
+#define IStorage_MoveElementTo(p,a,b,c,d)   ICOM_CALL4(MoveElementTo,p,a,b,c,d)
+#define IStorage_Commit(p,a)                ICOM_CALL1(Commit,p,a)
+#define IStorage_Revert(p)                  ICOM_CALL (Revert,p)
+#define IStorage_EnumElements(p,a,b,c,d)    ICOM_CALL4(EnumElements,p,a,b,c,d)
+#define IStorage_DestroyElement(p,a)        ICOM_CALL1(DestroyElement,p,a)
+#define IStorage_RenameElement(p,a,b)       ICOM_CALL2(RenameElement,p,a,b)
+#define IStorage_SetElementTimes(p,a,b,c,d) ICOM_CALL4(SetElementTimes,p,a,b,c,d)
+#define IStorage_SetClass(p,a)              ICOM_CALL1(SetClass,p,a)
+#define IStorage_SetStateBits(p,a,b)        ICOM_CALL2(SetStateBits,p,a,b)
+#define IStorage_Stat(p,a,b)                ICOM_CALL2(Stat,p,a,b)
 
 #ifndef __WINE__
 /* Duplicated for WINELIB */
@@ -612,41 +607,41 @@
 #endif
 
 
-#define ICOM_INTERFACE IStream32
-#define IStream32_METHODS \
+#define ICOM_INTERFACE IStream
+#define IStream_METHODS \
     ICOM_METHOD3(HRESULT,Seek,        LARGE_INTEGER,dlibMove, DWORD,dwOrigin, ULARGE_INTEGER*,plibNewPosition) \
     ICOM_METHOD1(HRESULT,SetSize,     ULARGE_INTEGER,libNewSize) \
-    ICOM_METHOD4(HRESULT,CopyTo,      IStream32*,pstm, ULARGE_INTEGER,cb, ULARGE_INTEGER*,pcbRead, ULARGE_INTEGER*,pcbWritten) \
+    ICOM_METHOD4(HRESULT,CopyTo,      IStream*,pstm, ULARGE_INTEGER,cb, ULARGE_INTEGER*,pcbRead, ULARGE_INTEGER*,pcbWritten) \
     ICOM_METHOD1(HRESULT,Commit,      DWORD,grfCommitFlags) \
     ICOM_METHOD (HRESULT,Revert) \
     ICOM_METHOD3(HRESULT,LockRegion,  ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType) \
     ICOM_METHOD3(HRESULT,UnlockRegion,ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType) \
     ICOM_METHOD2(HRESULT,Stat,        STATSTG*,pstatstg, DWORD,grfStatFlag) \
-    ICOM_METHOD1(HRESULT,Clone,       IStream32**,ppstm)
-#define IStream32_IMETHODS \
+    ICOM_METHOD1(HRESULT,Clone,       IStream**,ppstm)
+#define IStream_IMETHODS \
     ISequentialStream_IMETHODS \
-    IStream32_METHODS
-ICOM_DEFINE(IStream32,ISequentialStream)
+    IStream_METHODS
+ICOM_DEFINE(IStream,ISequentialStream)
 #undef ICOM_INTERFACE
 
 #ifdef ICOM_CINTERFACE
 /*** IUnknown methods ***/
-#define IStream32_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
-#define IStream32_AddRef(p)             ICOM_CALL (AddRef,p)
-#define IStream32_Release(p)            ICOM_CALL (Release,p)
+#define IStream_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
+#define IStream_AddRef(p)             ICOM_CALL (AddRef,p)
+#define IStream_Release(p)            ICOM_CALL (Release,p)
 /*** ISequentialStream methods ***/
-#define IStream32_Read(p,a,b,c)  ICOM_CALL3(Read,p,a,b,c)
-#define IStream32_Write(p,a,b,c) ICOM_CALL3(Write,p,a,b,c)
+#define IStream_Read(p,a,b,c)  ICOM_CALL3(Read,p,a,b,c)
+#define IStream_Write(p,a,b,c) ICOM_CALL3(Write,p,a,b,c)
 /*** IStream32 methods ***/
-#define IStream32_Seek(p,a,b,c)         ICOM_CALL3(Seek,p,a,b,c)
-#define IStream32_SetSize(p,a)          ICOM_CALL1(SetSize,p,a)
-#define IStream32_CopyTo(pa,b,c,d)      ICOM_CALL4(CopyTo,pa,b,c,d)
-#define IStream32_Commit(p,a)           ICOM_CALL1(Commit,p,a)
-#define IStream32_Revert(p)             ICOM_CALL (Revert,p)
-#define IStream32_LockRegion(pa,b,c)    ICOM_CALL3(LockRegion,pa,b,c)
-#define IStream32_UnlockRegion(p,a,b,c) ICOM_CALL3(UnlockRegion,p,a,b,c)
-#define IStream32_Stat(p,a,b)           ICOM_CALL2(Stat,p,a,b)
-#define IStream32_Clone(p,a)            ICOM_CALL1(Clone,p,a)
+#define IStream_Seek(p,a,b,c)         ICOM_CALL3(Seek,p,a,b,c)
+#define IStream_SetSize(p,a)          ICOM_CALL1(SetSize,p,a)
+#define IStream_CopyTo(pa,b,c,d)      ICOM_CALL4(CopyTo,pa,b,c,d)
+#define IStream_Commit(p,a)           ICOM_CALL1(Commit,p,a)
+#define IStream_Revert(p)             ICOM_CALL (Revert,p)
+#define IStream_LockRegion(pa,b,c)    ICOM_CALL3(LockRegion,pa,b,c)
+#define IStream_UnlockRegion(p,a,b,c) ICOM_CALL3(UnlockRegion,p,a,b,c)
+#define IStream_Stat(p,a,b)           ICOM_CALL2(Stat,p,a,b)
+#define IStream_Clone(p,a)            ICOM_CALL1(Clone,p,a)
 
 #ifndef __WINE__
 /* Duplicated for WINELIB */
@@ -676,19 +671,15 @@
  */
 /* FIXME: many functions are missing */
 HRESULT WINAPI StgCreateDocFile16(LPCOLESTR16 pwcsName,DWORD grfMode,DWORD reserved,IStorage16 **ppstgOpen);
-HRESULT WINAPI StgCreateDocfile32(LPCOLESTR32 pwcsName,DWORD grfMode,DWORD reserved,IStorage32 **ppstgOpen);
-#define StgCreateDocfile WINELIB_NAME(StgCreateDocfile)
+HRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName,DWORD grfMode,DWORD reserved,IStorage **ppstgOpen);
 
 HRESULT WINAPI StgIsStorageFile16(LPCOLESTR16 fn);
-HRESULT WINAPI StgIsStorageFile32(LPCOLESTR32 fn);
-#define StgIsStorageFile WINELIB_NAME(StgIsStorageFile)
+HRESULT WINAPI StgIsStorageFile(LPCOLESTR fn);
 
 HRESULT WINAPI StgOpenStorage16(const OLECHAR16* pwcsName,IStorage16* pstgPriority,DWORD grfMode,SNB16 snbExclude,DWORD reserved,IStorage16**ppstgOpen);
-HRESULT WINAPI StgOpenStorage32(const OLECHAR32* pwcsName,IStorage32* pstgPriority,DWORD grfMode,SNB32 snbExclude,DWORD reserved,IStorage32**ppstgOpen);
-#define StgOpenStorage WINELIB_NAME(StgOpenStorage)
+HRESULT WINAPI StgOpenStorage(const OLECHAR* pwcsName,IStorage* pstgPriority,DWORD grfMode,SNB snbExclude,DWORD reserved,IStorage**ppstgOpen);
 
-HRESULT WINAPI WriteClassStg32(IStorage32* pStg, REFCLSID rclsid);
-#define WriteClassStg WINELIB_NAME(WriteClassStg)
+HRESULT WINAPI WriteClassStg(IStorage* pStg, REFCLSID rclsid);
 
 
 /*****************************************************************************
@@ -696,10 +687,10 @@
  */
 
 /* FIXME: not implemented */
-BOOL32 WINAPI CoDosDateTimeToFileTime(WORD nDosDate, WORD nDosTime, FILETIME* lpFileTime);
+BOOL WINAPI CoDosDateTimeToFileTime(WORD nDosDate, WORD nDosTime, FILETIME* lpFileTime);
 
 /* FIXME: not implemented */
-BOOL32 WINAPI CoFileTimeToDosDateTime(FILETIME* lpFileTime, WORD* lpDosDate, WORD* lpDosTime);
+BOOL WINAPI CoFileTimeToDosDateTime(FILETIME* lpFileTime, WORD* lpDosDate, WORD* lpDosTime);
 
 
 #endif /* __WINE_WINE_OBJ_STORAGE_H */
diff --git a/include/wine/shell16.h b/include/wine/shell16.h
index be924b5..629d016 100644
--- a/include/wine/shell16.h
+++ b/include/wine/shell16.h
@@ -2,8 +2,7 @@
 #define _SHELL16_H
 
 BOOL16      WINAPI AboutDlgProc16(HWND16,UINT16,WPARAM16,LPARAM);
-BOOL32      WINAPI AboutDlgProc32(HWND32,UINT32,WPARAM32,LPARAM);
-#define     AboutDlgProc WINELIB_NAME(AboutDlgProc)
+BOOL      WINAPI AboutDlgProc(HWND,UINT,WPARAM,LPARAM);
 
 
 #endif /* _SHELL16_H */
diff --git a/include/wine/winbase16.h b/include/wine/winbase16.h
index 00c28db..3d44d1f 100644
--- a/include/wine/winbase16.h
+++ b/include/wine/winbase16.h
@@ -41,69 +41,69 @@
 LPVOID      WINAPI LockResource16(HGLOBAL16);
 
 #ifdef __WINE__
-WORD        WINAPI AllocCStoDSAlias(WORD);
-WORD        WINAPI AllocDStoCSAlias(WORD);
-HGLOBAL16   WINAPI AllocResource(HINSTANCE16,HRSRC16,DWORD);
-WORD        WINAPI AllocSelector(WORD);
-WORD        WINAPI AllocSelectorArray(WORD);
-VOID        WINAPI DirectedYield(HTASK16);
-HGLOBAL16   WINAPI DirectResAlloc(HINSTANCE16,WORD,UINT16);
-HANDLE16    WINAPI FarGetOwner(HGLOBAL16);
-VOID        WINAPI FarSetOwner(HGLOBAL16,HANDLE16);
-FARPROC16   WINAPI FileCDR(FARPROC16);
-WORD        WINAPI FreeSelector(WORD);
-HANDLE16    WINAPI GetAtomHandle(ATOM);
-HANDLE16    WINAPI GetCodeHandle(FARPROC16);
-VOID        WINAPI GetCodeInfo(FARPROC16,SEGINFO*);
-DWORD       WINAPI GetCurrentPDB(void);
+WORD        WINAPI AllocCStoDSAlias16(WORD);
+WORD        WINAPI AllocDStoCSAlias16(WORD);
+HGLOBAL16   WINAPI AllocResource16(HINSTANCE16,HRSRC16,DWORD);
+WORD        WINAPI AllocSelector16(WORD);
+WORD        WINAPI AllocSelectorArray16(WORD);
+VOID        WINAPI DirectedYield16(HTASK16);
+HGLOBAL16   WINAPI DirectResAlloc16(HINSTANCE16,WORD,UINT16);
+HANDLE16    WINAPI FarGetOwner16(HGLOBAL16);
+VOID        WINAPI FarSetOwner16(HGLOBAL16,HANDLE16);
+FARPROC16   WINAPI FileCDR16(FARPROC16);
+WORD        WINAPI FreeSelector16(WORD);
+HANDLE16    WINAPI GetAtomHandle16(ATOM);
+HANDLE16    WINAPI GetCodeHandle16(FARPROC16);
+VOID        WINAPI GetCodeInfo16(FARPROC16,SEGINFO*);
+DWORD       WINAPI GetCurrentPDB16(void);
 HTASK16     WINAPI GetCurrentTask(void);
-SEGPTR      WINAPI GetDOSEnvironment(void);
+SEGPTR      WINAPI GetDOSEnvironment16(void);
 HMODULE16   WINAPI GetExePtr(HANDLE16);
-WORD        WINAPI GetExeVersion(void);
-WORD        WINAPI GetExpWinVer(HMODULE16);
-DWORD       WINAPI GetHeapSpaces(HMODULE16);
-INT16       WINAPI GetInstanceData(HINSTANCE16,WORD,INT16);
-BOOL16      WINAPI GetModuleName(HINSTANCE16,LPSTR,INT16);
-INT16       WINAPI GetModuleUsage(HINSTANCE16);
-UINT16      WINAPI GetNumTasks(void);
-DWORD       WINAPI GetSelectorLimit(WORD);
-FARPROC16   WINAPI GetSetKernelDOSProc(FARPROC16 DosProc);
-HINSTANCE16 WINAPI GetTaskDS(void);
-HQUEUE16    WINAPI GetTaskQueue(HTASK16);
-DWORD       WINAPI GetWinFlags(void);
-DWORD       WINAPI GlobalDOSAlloc(DWORD);
-WORD        WINAPI GlobalDOSFree(WORD);
-void        WINAPI GlobalFreeAll(HGLOBAL16);
-DWORD       WINAPI GlobalHandleNoRIP(WORD);
-HGLOBAL16   WINAPI GlobalLRUNewest(HGLOBAL16);
-HGLOBAL16   WINAPI GlobalLRUOldest(HGLOBAL16);
-VOID        WINAPI GlobalNotify(FARPROC16);
-WORD        WINAPI GlobalPageLock(HGLOBAL16);
-WORD        WINAPI GlobalPageUnlock(HGLOBAL16);
-BOOL16      WINAPI IsSharedSelector(HANDLE16);
-BOOL16      WINAPI IsTask(HTASK16);
-HTASK16     WINAPI IsTaskLocked(void);
-VOID        WINAPI LogError(UINT16, LPVOID);
-VOID        WINAPI LogParamError(UINT16,FARPROC16,LPVOID);
-WORD        WINAPI LocalCountFree(void);
-WORD        WINAPI LocalHandleDelta(WORD);
-WORD        WINAPI LocalHeapSize(void);
-BOOL16      WINAPI LocalInit(HANDLE16,WORD,WORD);
-HMODULE32   WINAPI LoadLibraryEx32W16(LPCSTR,HANDLE16,DWORD);
-FARPROC16   WINAPI LocalNotify(FARPROC16);
-HTASK16     WINAPI LockCurrentTask(BOOL16);
-VOID        WINAPI OldYield(void);
-VOID        WINAPI PostEvent(HTASK16);
-WORD        WINAPI PrestoChangoSelector(WORD,WORD);
-WORD        WINAPI SelectorAccessRights(WORD,WORD,WORD);
-VOID        WINAPI SetPriority(HTASK16,INT16);
-FARPROC16   WINAPI SetResourceHandler(HINSTANCE16,SEGPTR,FARPROC16);
-WORD        WINAPI SetSelectorLimit(WORD,DWORD);
-HQUEUE16    WINAPI SetTaskQueue(HTASK16,HQUEUE16);
-VOID        WINAPI SwitchStackTo(WORD,WORD,WORD);
-BOOL16      WINAPI WaitEvent(HTASK16);
-VOID        WINAPI WriteOutProfiles(VOID);
-VOID        WINAPI hmemcpy(LPVOID,LPCVOID,LONG);
+WORD        WINAPI GetExeVersion16(void);
+WORD        WINAPI GetExpWinVer16(HMODULE16);
+DWORD       WINAPI GetHeapSpaces16(HMODULE16);
+INT16       WINAPI GetInstanceData16(HINSTANCE16,WORD,INT16);
+BOOL16      WINAPI GetModuleName16(HINSTANCE16,LPSTR,INT16);
+INT16       WINAPI GetModuleUsage16(HINSTANCE16);
+UINT16      WINAPI GetNumTasks16(void);
+DWORD       WINAPI GetSelectorLimit16(WORD);
+FARPROC16   WINAPI GetSetKernelDOSProc16(FARPROC16 DosProc);
+HINSTANCE16 WINAPI GetTaskDS16(void);
+HQUEUE16    WINAPI GetTaskQueue16(HTASK16);
+DWORD       WINAPI GetWinFlags16(void);
+DWORD       WINAPI GlobalDOSAlloc16(DWORD);
+WORD        WINAPI GlobalDOSFree16(WORD);
+void        WINAPI GlobalFreeAll16(HGLOBAL16);
+DWORD       WINAPI GlobalHandleNoRIP16(WORD);
+HGLOBAL16   WINAPI GlobalLRUNewest16(HGLOBAL16);
+HGLOBAL16   WINAPI GlobalLRUOldest16(HGLOBAL16);
+VOID        WINAPI GlobalNotify16(FARPROC16);
+WORD        WINAPI GlobalPageLock16(HGLOBAL16);
+WORD        WINAPI GlobalPageUnlock16(HGLOBAL16);
+BOOL16      WINAPI IsSharedSelector16(HANDLE16);
+BOOL16      WINAPI IsTask16(HTASK16);
+HTASK16     WINAPI IsTaskLocked16(void);
+VOID        WINAPI LogError16(UINT16, LPVOID);
+VOID        WINAPI LogParamError16(UINT16,FARPROC16,LPVOID);
+WORD        WINAPI LocalCountFree16(void);
+WORD        WINAPI LocalHandleDelta16(WORD);
+WORD        WINAPI LocalHeapSize16(void);
+BOOL16      WINAPI LocalInit16(HANDLE16,WORD,WORD);
+HMODULE   WINAPI LoadLibraryEx32W16(LPCSTR,HANDLE16,DWORD);
+FARPROC16   WINAPI LocalNotify16(FARPROC16);
+HTASK16     WINAPI LockCurrentTask16(BOOL16);
+VOID        WINAPI OldYield16(void);
+VOID        WINAPI PostEvent16(HTASK16);
+WORD        WINAPI PrestoChangoSelector16(WORD,WORD);
+WORD        WINAPI SelectorAccessRights16(WORD,WORD,WORD);
+VOID        WINAPI SetPriority16(HTASK16,INT16);
+FARPROC16   WINAPI SetResourceHandler16(HINSTANCE16,SEGPTR,FARPROC16);
+WORD        WINAPI SetSelectorLimit16(WORD,DWORD);
+HQUEUE16    WINAPI SetTaskQueue16(HTASK16,HQUEUE16);
+VOID        WINAPI SwitchStackTo16(WORD,WORD,WORD);
+BOOL16      WINAPI WaitEvent16(HTASK16);
+VOID        WINAPI WriteOutProfiles16(VOID);
+VOID        WINAPI hmemcpy16(LPVOID,LPCVOID,LONG);
 #endif  /* __WINE__ */
 
 INT16       WINAPI AccessResource16(HINSTANCE16,HRSRC16);
@@ -117,7 +117,6 @@
 BOOL16      WINAPI FindClose16(HANDLE16);
 HRSRC16     WINAPI FindResource16(HINSTANCE16,SEGPTR,SEGPTR);
 BOOL16      WINAPI FreeModule16(HMODULE16);
-#define     FreeModule WINELIB_NAME(FreeModule)
 void        WINAPI FreeProcInstance16(FARPROC16);
 BOOL16      WINAPI FreeResource16(HGLOBAL16);
 UINT16      WINAPI GetAtomName16(ATOM,LPSTR,INT16);
@@ -205,7 +204,7 @@
 /* Extra functions that don't exist in the Windows API */
 
 HPEN16      WINAPI GetSysColorPen16(INT16);
-UINT32      WINAPI WIN16_GetTempDrive(BYTE);
+UINT      WINAPI WIN16_GetTempDrive(BYTE);
 SEGPTR      WINAPI WIN16_LockResource16(HGLOBAL16);
 LONG        WINAPI WIN16_hread(HFILE16,SEGPTR,LONG);
 UINT16      WINAPI WIN16_lread(HFILE16,SEGPTR,UINT16);
diff --git a/include/wine/winesound.h b/include/wine/winesound.h
index 0200bbe..78ea085 100644
--- a/include/wine/winesound.h
+++ b/include/wine/winesound.h
@@ -3,51 +3,36 @@
 
 #include "wintypes.h"
 
-VOID        WINAPI CloseSound(VOID);
+VOID        WINAPI CloseSound16(VOID);
 INT16       WINAPI CountVoiceNotes16(INT16);
-DWORD       WINAPI CountVoiceNotes32(DWORD);
-#define     CountVoiceNotes WINELIB_NAME(CountVoiceNotes)
+DWORD       WINAPI CountVoiceNotes(DWORD);
 LPINT16     WINAPI GetThresholdEvent16(void);
-LPDWORD     WINAPI GetThresholdEvent32(void);
-#define     GetThresholdEvent WINELIB_NAME(GetThresholdEvent)
+LPDWORD     WINAPI GetThresholdEvent(void);
 INT16       WINAPI GetThresholdStatus16(void);
-DWORD       WINAPI GetThresholdStatus32(void);
-#define     GetThresholdStatus WINELIB_NAME(GetThresholdStatus)
+DWORD       WINAPI GetThresholdStatus(void);
 INT16       WINAPI OpenSound16(void);
-VOID        WINAPI OpenSound32(void);
-#define     OpenSound WINELIB_NAME(OpenSound)
+VOID        WINAPI OpenSound(void);
 INT16       WINAPI SetSoundNoise16(INT16,INT16);
-DWORD       WINAPI SetSoundNoise32(DWORD,DWORD);
-#define     SetSoundNoise WINELIB_NAME(SetSoundNoise)
+DWORD       WINAPI SetSoundNoise(DWORD,DWORD);
 INT16       WINAPI SetVoiceAccent16(INT16,INT16,INT16,INT16,INT16);
-DWORD       WINAPI SetVoiceAccent32(DWORD,DWORD,DWORD,DWORD,DWORD);
-#define     SetVoiceAccent WINELIB_NAME(SetVoiceAccent)
+DWORD       WINAPI SetVoiceAccent(DWORD,DWORD,DWORD,DWORD,DWORD);
 INT16       WINAPI SetVoiceEnvelope16(INT16,INT16,INT16);
-DWORD       WINAPI SetVoiceEnvelope32(DWORD,DWORD,DWORD);
-#define     SetVoiceEnvelope WINELIB_NAME(SetVoiceEnvelope)
+DWORD       WINAPI SetVoiceEnvelope(DWORD,DWORD,DWORD);
 INT16       WINAPI SetVoiceNote16(INT16,INT16,INT16,INT16);
-DWORD       WINAPI SetVoiceNote32(DWORD,DWORD,DWORD,DWORD);
-#define     SetVoiceNote WINELIB_NAME(SetVoiceNote)
+DWORD       WINAPI SetVoiceNote(DWORD,DWORD,DWORD,DWORD);
 INT16       WINAPI SetVoiceQueueSize16(INT16,INT16);
-DWORD       WINAPI SetVoiceQueueSize32(DWORD,DWORD);
-#define     SetVoiceQueueSize WINELIB_NAME(SetVoiceQueueSize)
+DWORD       WINAPI SetVoiceQueueSize(DWORD,DWORD);
 INT16       WINAPI SetVoiceSound16(INT16,DWORD,INT16);
-DWORD       WINAPI SetVoiceSound32(DWORD,DWORD,DWORD);
-#define     SetVoiceSound WINELIB_NAME(SetVoiceSound)
+DWORD       WINAPI SetVoiceSound(DWORD,DWORD,DWORD);
 INT16       WINAPI SetVoiceThreshold16(INT16,INT16);
-DWORD       WINAPI SetVoiceThreshold32(DWORD,DWORD);
-#define     SetVoiceThreshold WINELIB_NAME(SetVoiceThreshold)
+DWORD       WINAPI SetVoiceThreshold(DWORD,DWORD);
 INT16       WINAPI StartSound16(void);
-VOID        WINAPI StartSound32(void);
-#define     StartSound WINELIB_NAME(StartSound)
+VOID        WINAPI StartSound(void);
 INT16       WINAPI StopSound16(void);
-VOID        WINAPI StopSound32(void);
-#define     StopSound WINELIB_NAME(StopSound)
+VOID        WINAPI StopSound(void);
 INT16       WINAPI SyncAllVoices16(void);
-DWORD       WINAPI SyncAllVoices32(void);
-#define     SyncAllVoices WINELIB_NAME(SyncAllVoices)
+DWORD       WINAPI SyncAllVoices(void);
 INT16       WINAPI WaitSoundState16(INT16);
-DWORD       WINAPI WaitSoundState32(DWORD);
-#define     WaitSoundState WINELIB_NAME(WaitSoundState)
+DWORD       WINAPI WaitSoundState(DWORD);
 
 #endif /* _WINE_SOUND_H */
diff --git a/include/wine/winestring.h b/include/wine/winestring.h
index ee01331..4207588 100644
--- a/include/wine/winestring.h
+++ b/include/wine/winestring.h
@@ -4,17 +4,15 @@
 #include "wintypes.h"
 
 INT16       WINAPI WideCharToLocal16(LPSTR,LPWSTR,INT16);
-INT32       WINAPI WideCharToLocal32(LPSTR,LPWSTR,INT32);
-#define			WideCharToLocal WINELIB_NAME(WideCharToLocal)
+INT       WINAPI WideCharToLocal(LPSTR,LPWSTR,INT);
 INT16       WINAPI LocalToWideChar16(LPWSTR,LPSTR,INT16);
-INT32       WINAPI LocalToWideChar32(LPWSTR,LPSTR,INT32);
-#define			LocalToWideChar WINELIB_NAME(LocalToWideChar)
-INT32       WINAPI lstrncmp32A(LPCSTR,LPCSTR,INT32);
-INT32       WINAPI lstrncmp32W(LPCWSTR,LPCWSTR,INT32);
-INT32       WINAPI lstrncmpi32A(LPCSTR,LPCSTR,INT32);
-INT32       WINAPI lstrncmpi32W(LPCWSTR,LPCWSTR,INT32);
+INT       WINAPI LocalToWideChar(LPWSTR,LPSTR,INT);
+INT       WINAPI lstrncmpA(LPCSTR,LPCSTR,INT);
+INT       WINAPI lstrncmpW(LPCWSTR,LPCWSTR,INT);
+INT       WINAPI lstrncmpiA(LPCSTR,LPCSTR,INT);
+INT       WINAPI lstrncmpiW(LPCWSTR,LPCWSTR,INT);
 LPWSTR      WINAPI lstrcpyAtoW(LPWSTR,LPCSTR);
 LPSTR       WINAPI lstrcpyWtoA(LPSTR,LPCWSTR);
-LPWSTR      WINAPI lstrcpynAtoW(LPWSTR,LPCSTR,INT32);
-LPSTR       WINAPI lstrcpynWtoA(LPSTR,LPCWSTR,INT32);
+LPWSTR      WINAPI lstrcpynAtoW(LPWSTR,LPCSTR,INT);
+LPSTR       WINAPI lstrcpynWtoA(LPSTR,LPCWSTR,INT);
 #endif /* _INCLUDE_WINE_STRINGS_H */
diff --git a/include/wine/winuser16.h b/include/wine/winuser16.h
index 6dabd8e..8313681 100644
--- a/include/wine/winuser16.h
+++ b/include/wine/winuser16.h
@@ -35,8 +35,8 @@
 
 typedef struct
 {
-    UINT32      cbSize;
-    UINT32      style;
+    UINT      cbSize;
+    UINT      style;
     WNDPROC16   lpfnWndProc;
     INT16       cbClsExtra;
     INT16       cbWndExtra;
@@ -63,7 +63,7 @@
 {
     MSG16 msg;
     WORD wParamHigh;
-} MSG16_32, *LPMSG16_32;
+} MSG32_16, *LPMSG16_32;
 
 /* Cursors / Icons */
 
@@ -178,7 +178,7 @@
 
 typedef struct /* not sure if the 16bit version is correct */
 {
-    UINT32	cbSize;
+    UINT	cbSize;
     HWND16	hwndOwner;
     HINSTANCE16	hInstance;
     SEGPTR	lpszText;
@@ -497,40 +497,40 @@
 INT16       WINAPIV wsnprintf16(LPSTR,UINT16,LPCSTR,...);
 INT16       WINAPIV wsprintf16(LPSTR,LPCSTR,...);
 INT16       WINAPI wvsnprintf16(LPSTR,UINT16,LPCSTR,LPCVOID);
-VOID        WINAPI CalcChildScroll(HWND16,WORD);
-VOID        WINAPI CascadeChildWindows(HWND16,WORD);
-INT16       WINAPI CloseComm(INT16);
-HGLOBAL16   WINAPI CreateCursorIconIndirect(HINSTANCE16,CURSORICONINFO*,
+VOID        WINAPI CalcChildScroll16(HWND16,WORD);
+VOID        WINAPI CascadeChildWindows16(HWND16,WORD);
+INT16       WINAPI CloseComm16(INT16);
+HGLOBAL16   WINAPI CreateCursorIconIndirect16(HINSTANCE16,CURSORICONINFO*,
                                             LPCVOID,LPCVOID);
-BOOL16      WINAPI DCHook(HDC16,WORD,DWORD,LPARAM);
-BOOL16      WINAPI DlgDirSelect(HWND16,LPSTR,INT16);
-BOOL16      WINAPI DlgDirSelectComboBox(HWND16,LPSTR,INT16);
-DWORD       WINAPI DumpIcon(SEGPTR,WORD*,SEGPTR*,SEGPTR*);
-BOOL16      WINAPI EnableCommNotification(INT16,HWND16,INT16,INT16);
-BOOL16      WINAPI EnableHardwareInput(BOOL16);
-VOID        WINAPI FillWindow(HWND16,HWND16,HDC16,HBRUSH16);
-INT16       WINAPI FlushComm(INT16,INT16);
-UINT16      WINAPI GetCommEventMask(INT16,UINT16);
-HBRUSH16    WINAPI GetControlBrush(HWND16,HDC16,UINT16);
-HWND16      WINAPI GetDesktopHwnd(void);
-WORD        WINAPI GetIconID(HGLOBAL16,DWORD);
-FARPROC16   WINAPI GetMouseEventProc(void);
-INT16       WINAPI InitApp(HINSTANCE16);
-BOOL16      WINAPI IsUserIdle(void);
-HGLOBAL16   WINAPI LoadCursorIconHandler(HGLOBAL16,HMODULE16,HRSRC16);
-HGLOBAL16   WINAPI LoadDIBCursorHandler(HGLOBAL16,HMODULE16,HRSRC16);
-HGLOBAL16   WINAPI LoadDIBIconHandler(HGLOBAL16,HMODULE16,HRSRC16);
-HICON16     WINAPI LoadIconHandler(HGLOBAL16,BOOL16);
-HMENU16     WINAPI LookupMenuHandle(HMENU16,INT16);
-INT16       WINAPI OpenComm(LPCSTR,UINT16,UINT16);
-VOID        WINAPI PaintRect(HWND16,HWND16,HDC16,HBRUSH16,const RECT16*);
-INT16       WINAPI ReadComm(INT16,LPSTR,INT16);
-SEGPTR      WINAPI SetCommEventMask(INT16,UINT16);
+BOOL16      WINAPI DCHook16(HDC16,WORD,DWORD,LPARAM);
+BOOL16      WINAPI DlgDirSelect16(HWND16,LPSTR,INT16);
+BOOL16      WINAPI DlgDirSelectComboBox16(HWND16,LPSTR,INT16);
+DWORD       WINAPI DumpIcon16(SEGPTR,WORD*,SEGPTR*,SEGPTR*);
+BOOL16      WINAPI EnableCommNotification16(INT16,HWND16,INT16,INT16);
+BOOL16      WINAPI EnableHardwareInput16(BOOL16);
+VOID        WINAPI FillWindow16(HWND16,HWND16,HDC16,HBRUSH16);
+INT16       WINAPI FlushComm16(INT16,INT16);
+UINT16      WINAPI GetCommEventMask16(INT16,UINT16);
+HBRUSH16    WINAPI GetControlBrush16(HWND16,HDC16,UINT16);
+HWND16      WINAPI GetDesktopHwnd16(void);
+WORD        WINAPI GetIconID16(HGLOBAL16,DWORD);
+FARPROC16   WINAPI GetMouseEventProc16(void);
+INT16       WINAPI InitApp16(HINSTANCE16);
+BOOL16      WINAPI IsUserIdle16(void);
+HGLOBAL16   WINAPI LoadCursorIconHandler16(HGLOBAL16,HMODULE16,HRSRC16);
+HGLOBAL16   WINAPI LoadDIBCursorHandler16(HGLOBAL16,HMODULE16,HRSRC16);
+HGLOBAL16   WINAPI LoadDIBIconHandler16(HGLOBAL16,HMODULE16,HRSRC16);
+HICON16     WINAPI LoadIconHandler16(HGLOBAL16,BOOL16);
+HMENU16     WINAPI LookupMenuHandle16(HMENU16,INT16);
+INT16       WINAPI OpenComm16(LPCSTR,UINT16,UINT16);
+VOID        WINAPI PaintRect16(HWND16,HWND16,HDC16,HBRUSH16,const RECT16*);
+INT16       WINAPI ReadComm16(INT16,LPSTR,INT16);
+SEGPTR      WINAPI SetCommEventMask16(INT16,UINT16);
 BOOL16      WINAPI SetDeskPattern(void);
-VOID        WINAPI TileChildWindows(HWND16,WORD);
-INT16       WINAPI UngetCommChar(INT16,CHAR);
-VOID        WINAPI UserYield(void);
-INT16       WINAPI WriteComm(INT16,LPSTR,INT16);
+VOID        WINAPI TileChildWindows16(HWND16,WORD);
+INT16       WINAPI UngetCommChar16(INT16,CHAR);
+VOID        WINAPI UserYield16(void);
+INT16       WINAPI WriteComm16(INT16,LPSTR,INT16);
 BOOL16      WINAPI AdjustWindowRect16(LPRECT16,DWORD,BOOL16);
 BOOL16      WINAPI AdjustWindowRectEx16(LPRECT16,DWORD,BOOL16,DWORD);
 SEGPTR      WINAPI AnsiLower16(SEGPTR);
@@ -546,7 +546,7 @@
 HDC16       WINAPI BeginPaint16(HWND16,LPPAINTSTRUCT16);
 BOOL16      WINAPI BringWindowToTop16(HWND16);
 BOOL16      WINAPI CallMsgFilter16(SEGPTR,INT16);
-BOOL16      WINAPI WIN16_CallMsgFilter32(SEGPTR,INT16,BOOL16);
+BOOL16      WINAPI CallMsgFilter32_16(SEGPTR,INT16,BOOL16);
 LRESULT     WINAPI CallNextHookEx16(HHOOK,INT16,WPARAM16,LPARAM);
 LRESULT     WINAPI CallWindowProc16(WNDPROC16,HWND16,UINT16,WPARAM16,LPARAM);
 BOOL16      WINAPI ChangeClipboardChain16(HWND16,HWND16);
@@ -597,7 +597,7 @@
 INT16       WINAPI DialogBoxIndirectParam16(HINSTANCE16,HANDLE16,HWND16,DLGPROC16,LPARAM);
 INT16       WINAPI DialogBoxParam16(HINSTANCE16,SEGPTR,HWND16,DLGPROC16,LPARAM);
 LONG        WINAPI DispatchMessage16(const MSG16*);
-LONG        WINAPI WIN16_DispatchMessage32(const MSG16_32*,BOOL16);
+LONG        WINAPI DispatchMessage32_16(const MSG32_16*,BOOL16);
 INT16       WINAPI DlgDirList16(HWND16,LPSTR,INT16,INT16,UINT16);
 INT16       WINAPI DlgDirListComboBox16(HWND16,LPSTR,INT16,INT16,UINT16);
 BOOL16      WINAPI DlgDirSelectComboBoxEx16(HWND16,LPSTR,INT16,INT16);
@@ -675,7 +675,7 @@
 UINT16      WINAPI GetMenuState16(HMENU16,UINT16,UINT16);
 INT16       WINAPI GetMenuString16(HMENU16,UINT16,LPSTR,INT16,UINT16);
 BOOL16      WINAPI GetMessage16(SEGPTR,HWND16,UINT16,UINT16);
-BOOL16      WINAPI WIN16_GetMessage32(SEGPTR,HWND16,UINT16,UINT16,BOOL16);
+BOOL16      WINAPI GetMessage32_16(SEGPTR,HWND16,UINT16,UINT16,BOOL16);
 HWND16      WINAPI GetNextDlgGroupItem16(HWND16,HWND16,BOOL16);
 HWND16      WINAPI GetNextDlgTabItem16(HWND16,HWND16,BOOL16);
 HWND16      WINAPI GetNextWindow16(HWND16,WORD);
@@ -755,7 +755,7 @@
 BOOL16      WINAPI OpenClipboard16(HWND16);
 BOOL16      WINAPI OpenIcon16(HWND16);
 BOOL16      WINAPI PeekMessage16(LPMSG16,HWND16,UINT16,UINT16,UINT16);
-BOOL16      WINAPI WIN16_PeekMessage32(LPMSG16_32,HWND16,UINT16,UINT16,UINT16,BOOL16);
+BOOL16      WINAPI PeekMessage32_16(LPMSG16_32,HWND16,UINT16,UINT16,UINT16,BOOL16);
 BOOL16      WINAPI PostAppMessage16(HTASK16,UINT16,WPARAM16,LPARAM);
 BOOL16      WINAPI PostMessage16(HWND16,UINT16,WPARAM16,LPARAM);
 void        WINAPI PostQuitMessage16(INT16);
@@ -832,7 +832,7 @@
 INT16       WINAPI TranslateAccelerator16(HWND16,HACCEL16,LPMSG16);
 BOOL16      WINAPI TranslateMDISysAccel16(HWND16,LPMSG16);
 BOOL16      WINAPI TranslateMessage16(const MSG16*);
-BOOL16      WINAPI WIN16_TranslateMessage32(const MSG16_32*,BOOL16);
+BOOL16      WINAPI TranslateMessage32_16(const MSG32_16*,BOOL16);
 INT16       WINAPI TransmitCommChar16(INT16,CHAR);
 BOOL16      WINAPI UnionRect16(LPRECT16,const RECT16*,const RECT16*);
 BOOL16      WINAPI UnregisterClass16(SEGPTR,HINSTANCE16);
@@ -846,7 +846,7 @@
 INT16       WINAPI wvsprintf16(LPSTR,LPCSTR,LPCVOID);
 BOOL16      WINAPI DrawState16A(HDC16,HBRUSH16,DRAWSTATEPROC16,LPARAM,WPARAM16,INT16,INT16,INT16,INT16,UINT16);
 BOOL16      WINAPI IsDialogMessage16(HWND16,LPMSG16);
-INT16       WINAPI GetCommError(INT16,LPCOMSTAT);
+INT16       WINAPI GetCommError16(INT16,LPCOMSTAT);
 BOOL16      WINAPI BuildCommDCB16(LPCSTR,LPDCB16);
 INT16       WINAPI GetCommState16(INT16,LPDCB16);
 INT16       WINAPI SetCommState16(LPDCB16);
@@ -857,10 +857,10 @@
 typedef VOID (*SYSTEMTIMERPROC)(WORD);
 
 WORD        WINAPI CreateSystemTimer(WORD,SYSTEMTIMERPROC);
-VOID        WINAPI DisableSystemTimers(void);
-VOID        WINAPI EnableSystemTimers(void);
-DWORD       WINAPI GetFileResourceSize(LPCSTR,SEGPTR,SEGPTR,LPDWORD);
-DWORD       WINAPI GetFileResource(LPCSTR,SEGPTR,SEGPTR,DWORD,DWORD,LPVOID);
+VOID        WINAPI DisableSystemTimers16(void);
+VOID        WINAPI EnableSystemTimers16(void);
+DWORD       WINAPI GetFileResourceSize16(LPCSTR,SEGPTR,SEGPTR,LPDWORD);
+DWORD       WINAPI GetFileResource16(LPCSTR,SEGPTR,SEGPTR,DWORD,DWORD,LPVOID);
 BYTE        WINAPI GetTempDrive(BYTE);
 FARPROC16   WINAPI SetTaskSignalProc(HTASK16,FARPROC16);
 #endif  /* __WINE__ */
diff --git a/include/wingdi.h b/include/wingdi.h
index 7345b9d..ede2b61 100644
--- a/include/wingdi.h
+++ b/include/wingdi.h
@@ -22,11 +22,9 @@
 {
     WORD   wFirst;
     WORD   wSecond;
-    INT32  iKernAmount;
-} KERNINGPAIR32, *LPKERNINGPAIR32;
+    INT  iKernAmount;
+} KERNINGPAIR, *LPKERNINGPAIR;
 
-DECL_WINELIB_TYPE(KERNINGPAIR)
-DECL_WINELIB_TYPE(LPKERNINGPAIR)
 
 typedef struct
 {
@@ -40,16 +38,14 @@
 
 typedef struct
 {
-    HDC32   hdc;
-    BOOL32  fErase;
-    RECT32  rcPaint;
-    BOOL32  fRestore;
-    BOOL32  fIncUpdate;
+    HDC   hdc;
+    BOOL  fErase;
+    RECT  rcPaint;
+    BOOL  fRestore;
+    BOOL  fIncUpdate;
     BYTE    rgbReserved[32];
-} PAINTSTRUCT32, *LPPAINTSTRUCT32;
+} PAINTSTRUCT, *LPPAINTSTRUCT;
 
-DECL_WINELIB_TYPE(PAINTSTRUCT)
-DECL_WINELIB_TYPE(LPPAINTSTRUCT)
 
 
 typedef struct tagPIXELFORMATDESCRIPTOR {
@@ -345,17 +341,15 @@
 
 typedef struct
 {
-    INT32  bmType;
-    INT32  bmWidth;
-    INT32  bmHeight;
-    INT32  bmWidthBytes;
+    INT  bmType;
+    INT  bmWidth;
+    INT  bmHeight;
+    INT  bmWidthBytes;
     WORD   bmPlanes;
     WORD   bmBitsPixel;
     LPVOID bmBits WINE_PACKED;
-} BITMAP32, *LPBITMAP32;
+} BITMAP, *LPBITMAP;
 
-DECL_WINELIB_TYPE(BITMAP)
-DECL_WINELIB_TYPE(LPBITMAP)
 
   /* Brushes */
 
@@ -368,13 +362,11 @@
 
 typedef struct
 { 
-    UINT32     lbStyle;
+    UINT     lbStyle;
     COLORREF   lbColor;
-    INT32      lbHatch;
-} LOGBRUSH32, *LPLOGBRUSH32;
+    INT      lbHatch;
+} LOGBRUSH, *LPLOGBRUSH;
 
-DECL_WINELIB_TYPE(LOGBRUSH)
-DECL_WINELIB_TYPE(LPLOGBRUSH)
 
   /* Brush styles */
 #define BS_SOLID	    0
@@ -426,11 +418,11 @@
 
 typedef struct
 {
-    INT32  lfHeight;
-    INT32  lfWidth;
-    INT32  lfEscapement;
-    INT32  lfOrientation;
-    INT32  lfWeight;
+    INT  lfHeight;
+    INT  lfWidth;
+    INT  lfEscapement;
+    INT  lfOrientation;
+    INT  lfWeight;
     BYTE   lfItalic;
     BYTE   lfUnderline;
     BYTE   lfStrikeOut;
@@ -440,15 +432,15 @@
     BYTE   lfQuality;
     BYTE   lfPitchAndFamily;
     CHAR   lfFaceName[LF_FACESIZE];
-} LOGFONT32A, *LPLOGFONT32A;
+} LOGFONTA, *LPLOGFONTA;
 
 typedef struct
 {
-    INT32  lfHeight;
-    INT32  lfWidth;
-    INT32  lfEscapement;
-    INT32  lfOrientation;
-    INT32  lfWeight;
+    INT  lfHeight;
+    INT  lfWidth;
+    INT  lfEscapement;
+    INT  lfOrientation;
+    INT  lfWeight;
     BYTE   lfItalic;
     BYTE   lfUnderline;
     BYTE   lfStrikeOut;
@@ -458,7 +450,7 @@
     BYTE   lfQuality;
     BYTE   lfPitchAndFamily;
     WCHAR  lfFaceName[LF_FACESIZE];
-} LOGFONT32W, *LPLOGFONT32W;
+} LOGFONTW, *LPLOGFONTW;
 
 DECL_WINELIB_TYPE_AW(LOGFONT)
 DECL_WINELIB_TYPE_AW(LPLOGFONT)
@@ -472,17 +464,17 @@
 
 typedef struct
 {
-  LOGFONT32A elfLogFont;
+  LOGFONTA elfLogFont;
   BYTE       elfFullName[LF_FULLFACESIZE] WINE_PACKED;
   BYTE       elfStyle[LF_FACESIZE] WINE_PACKED;
-} ENUMLOGFONT32A, *LPENUMLOGFONT32A;
+} ENUMLOGFONTA, *LPENUMLOGFONTA;
 
 typedef struct
 {
-  LOGFONT32W elfLogFont;
+  LOGFONTW elfLogFont;
   WCHAR      elfFullName[LF_FULLFACESIZE] WINE_PACKED;
   WCHAR      elfStyle[LF_FACESIZE] WINE_PACKED;
-} ENUMLOGFONT32W, *LPENUMLOGFONT32W;
+} ENUMLOGFONTW, *LPENUMLOGFONTW;
 
 typedef struct
 {
@@ -494,19 +486,19 @@
 
 typedef struct
 {
-  LOGFONT32A elfLogFont;
+  LOGFONTA elfLogFont;
   BYTE       elfFullName[LF_FULLFACESIZE] WINE_PACKED;
   BYTE       elfStyle[LF_FACESIZE] WINE_PACKED;
   BYTE       elfScript[LF_FACESIZE] WINE_PACKED;
-} ENUMLOGFONTEX32A,*LPENUMLOGFONTEX32A;
+} ENUMLOGFONTEXA,*LPENUMLOGFONTEXA;
 
 typedef struct
 {
-  LOGFONT32W elfLogFont;
+  LOGFONTW elfLogFont;
   WCHAR      elfFullName[LF_FULLFACESIZE] WINE_PACKED;
   WCHAR      elfStyle[LF_FACESIZE] WINE_PACKED;
   WCHAR      elfScript[LF_FACESIZE] WINE_PACKED;
-} ENUMLOGFONTEX32W,*LPENUMLOGFONTEX32W;
+} ENUMLOGFONTEXW,*LPENUMLOGFONTEXW;
 
 DECL_WINELIB_TYPE_AW(ENUMLOGFONT)
 DECL_WINELIB_TYPE_AW(LPENUMLOGFONT)
@@ -532,8 +524,8 @@
 
 typedef struct 
 {
-  UINT32	ciCharset; /* character set */
-  UINT32	ciACP; /* ANSI code page */
+  UINT	ciCharset; /* character set */
+  UINT	ciACP; /* ANSI code page */
   FONTSIGNATURE	fs;
 } CHARSETINFO,*LPCHARSETINFO;
 
@@ -733,17 +725,17 @@
 
 typedef struct
 {
-    INT32     tmHeight;
-    INT32     tmAscent;
-    INT32     tmDescent;
-    INT32     tmInternalLeading;
-    INT32     tmExternalLeading;
-    INT32     tmAveCharWidth;
-    INT32     tmMaxCharWidth;
-    INT32     tmWeight;
-    INT32     tmOverhang;
-    INT32     tmDigitizedAspectX;
-    INT32     tmDigitizedAspectY;
+    INT     tmHeight;
+    INT     tmAscent;
+    INT     tmDescent;
+    INT     tmInternalLeading;
+    INT     tmExternalLeading;
+    INT     tmAveCharWidth;
+    INT     tmMaxCharWidth;
+    INT     tmWeight;
+    INT     tmOverhang;
+    INT     tmDigitizedAspectX;
+    INT     tmDigitizedAspectY;
     BYTE      tmFirstChar;
     BYTE      tmLastChar;
     BYTE      tmDefaultChar;
@@ -753,21 +745,21 @@
     BYTE      tmStruckOut;
     BYTE      tmPitchAndFamily;
     BYTE      tmCharSet;
-} TEXTMETRIC32A, *LPTEXTMETRIC32A;
+} TEXTMETRICA, *LPTEXTMETRICA;
 
 typedef struct
 {
-    INT32     tmHeight;
-    INT32     tmAscent;
-    INT32     tmDescent;
-    INT32     tmInternalLeading;
-    INT32     tmExternalLeading;
-    INT32     tmAveCharWidth;
-    INT32     tmMaxCharWidth;
-    INT32     tmWeight;
-    INT32     tmOverhang;
-    INT32     tmDigitizedAspectX;
-    INT32     tmDigitizedAspectY;
+    INT     tmHeight;
+    INT     tmAscent;
+    INT     tmDescent;
+    INT     tmInternalLeading;
+    INT     tmExternalLeading;
+    INT     tmAveCharWidth;
+    INT     tmMaxCharWidth;
+    INT     tmWeight;
+    INT     tmOverhang;
+    INT     tmDigitizedAspectX;
+    INT     tmDigitizedAspectY;
     WCHAR     tmFirstChar;
     WCHAR     tmLastChar;
     WCHAR     tmDefaultChar;
@@ -777,7 +769,7 @@
     BYTE      tmStruckOut;
     BYTE      tmPitchAndFamily;
     BYTE      tmCharSet;
-} TEXTMETRIC32W, *LPTEXTMETRIC32W;
+} TEXTMETRICW, *LPTEXTMETRICW;
 
 DECL_WINELIB_TYPE_AW(TEXTMETRIC)
 DECL_WINELIB_TYPE_AW(LPTEXTMETRIC)
@@ -798,77 +790,77 @@
 } PANOSE;
 
 
-typedef struct _OUTLINETEXTMETRIC32A
+typedef struct _OUTLINETEXTMETRICA
 {
-    UINT32          otmSize;
-    TEXTMETRIC32A   otmTextMetrics;
+    UINT          otmSize;
+    TEXTMETRICA   otmTextMetrics;
     BYTE            otmFilter;
     PANOSE          otmPanoseNumber;
-    UINT32          otmfsSelection;
-    UINT32          otmfsType;
-    INT32           otmsCharSlopeRise;
-    INT32           otmsCharSlopeRun;
-    INT32           otmItalicAngle;
-    UINT32          otmEMSquare;
-    INT32           otmAscent;
-    INT32           otmDescent;
-    UINT32          otmLineGap;
-    UINT32          otmsCapEmHeight;
-    UINT32          otmsXHeight;
-    RECT32          otmrcFontBox;
-    INT32           otmMacAscent;
-    INT32           otmMacDescent;
-    UINT32          otmMacLineGap;
-    UINT32          otmusMinimumPPEM;
-    POINT32         otmptSubscriptSize;
-    POINT32         otmptSubscriptOffset;
-    POINT32         otmptSuperscriptSize;
-    POINT32         otmptSuperscriptOffset;
-    UINT32          otmsStrikeoutSize;
-    INT32           otmsStrikeoutPosition;
-    INT32           otmsUnderscoreSize;
-    INT32           otmsUnderscorePosition;
+    UINT          otmfsSelection;
+    UINT          otmfsType;
+    INT           otmsCharSlopeRise;
+    INT           otmsCharSlopeRun;
+    INT           otmItalicAngle;
+    UINT          otmEMSquare;
+    INT           otmAscent;
+    INT           otmDescent;
+    UINT          otmLineGap;
+    UINT          otmsCapEmHeight;
+    UINT          otmsXHeight;
+    RECT          otmrcFontBox;
+    INT           otmMacAscent;
+    INT           otmMacDescent;
+    UINT          otmMacLineGap;
+    UINT          otmusMinimumPPEM;
+    POINT         otmptSubscriptSize;
+    POINT         otmptSubscriptOffset;
+    POINT         otmptSuperscriptSize;
+    POINT         otmptSuperscriptOffset;
+    UINT          otmsStrikeoutSize;
+    INT           otmsStrikeoutPosition;
+    INT           otmsUnderscoreSize;
+    INT           otmsUnderscorePosition;
     LPSTR           otmpFamilyName;
     LPSTR           otmpFaceName;
     LPSTR           otmpStyleName;
     LPSTR           otmpFullName;
-} OUTLINETEXTMETRIC32A, *LPOUTLINETEXTMETRIC32A;
+} OUTLINETEXTMETRICA, *LPOUTLINETEXTMETRICA;
 
-typedef struct _OUTLINETEXTMETRIC32W
+typedef struct _OUTLINETEXTMETRICW
 {
-    UINT32          otmSize;
-    TEXTMETRIC32W   otmTextMetrics;
+    UINT          otmSize;
+    TEXTMETRICW   otmTextMetrics;
     BYTE            otmFilter;
     PANOSE          otmPanoseNumber;
-    UINT32          otmfsSelection;
-    UINT32          otmfsType;
-    INT32           otmsCharSlopeRise;
-    INT32           otmsCharSlopeRun;
-    INT32           otmItalicAngle;
-    UINT32          otmEMSquare;
-    INT32           otmAscent;
-    INT32           otmDescent;
-    UINT32          otmLineGap;
-    UINT32          otmsCapEmHeight;
-    UINT32          otmsXHeight;
-    RECT32          otmrcFontBox;
-    INT32           otmMacAscent;
-    INT32           otmMacDescent;
-    UINT32          otmMacLineGap;
-    UINT32          otmusMinimumPPEM;
-    POINT32         otmptSubscriptSize;
-    POINT32         otmptSubscriptOffset;
-    POINT32         otmptSuperscriptSize;
-    POINT32         otmptSuperscriptOffset;
-    UINT32          otmsStrikeoutSize;
-    INT32           otmsStrikeoutPosition;
-    INT32           otmsUnderscoreSize;
-    INT32           otmsUnderscorePosition;
+    UINT          otmfsSelection;
+    UINT          otmfsType;
+    INT           otmsCharSlopeRise;
+    INT           otmsCharSlopeRun;
+    INT           otmItalicAngle;
+    UINT          otmEMSquare;
+    INT           otmAscent;
+    INT           otmDescent;
+    UINT          otmLineGap;
+    UINT          otmsCapEmHeight;
+    UINT          otmsXHeight;
+    RECT          otmrcFontBox;
+    INT           otmMacAscent;
+    INT           otmMacDescent;
+    UINT          otmMacLineGap;
+    UINT          otmusMinimumPPEM;
+    POINT         otmptSubscriptSize;
+    POINT         otmptSubscriptOffset;
+    POINT         otmptSuperscriptSize;
+    POINT         otmptSuperscriptOffset;
+    UINT          otmsStrikeoutSize;
+    INT           otmsStrikeoutPosition;
+    INT           otmsUnderscoreSize;
+    INT           otmsUnderscorePosition;
     LPSTR           otmpFamilyName;
     LPSTR           otmpFaceName;
     LPSTR           otmpStyleName;
     LPSTR           otmpFullName;
-} OUTLINETEXTMETRIC32W, *LPOUTLINETEXTMETRIC32W;
+} OUTLINETEXTMETRICW, *LPOUTLINETEXTMETRICW;
 
 typedef struct _OUTLINETEXTMETRIC16
 {
@@ -899,7 +891,7 @@
     UINT16          otmsStrikeoutSize;
     INT16           otmsStrikeoutPosition;
     INT16           otmsUnderscoreSize;
-    INT32           otmsUnderscorePosition;
+    INT           otmsUnderscorePosition;
     LPSTR           otmpFamilyName;
     LPSTR           otmpFaceName;
     LPSTR           otmpStyleName;
@@ -946,17 +938,17 @@
 
 typedef struct
 {
-    INT32     tmHeight;
-    INT32     tmAscent;
-    INT32     tmDescent;
-    INT32     tmInternalLeading;
-    INT32     tmExternalLeading;
-    INT32     tmAveCharWidth;
-    INT32     tmMaxCharWidth;
-    INT32     tmWeight;
-    INT32     tmOverhang;
-    INT32     tmDigitizedAspectX;
-    INT32     tmDigitizedAspectY;
+    INT     tmHeight;
+    INT     tmAscent;
+    INT     tmDescent;
+    INT     tmInternalLeading;
+    INT     tmExternalLeading;
+    INT     tmAveCharWidth;
+    INT     tmMaxCharWidth;
+    INT     tmWeight;
+    INT     tmOverhang;
+    INT     tmDigitizedAspectX;
+    INT     tmDigitizedAspectY;
     BYTE      tmFirstChar;
     BYTE      tmLastChar;
     BYTE      tmDefaultChar;
@@ -967,24 +959,24 @@
     BYTE      tmPitchAndFamily;
     BYTE      tmCharSet;
     DWORD     ntmFlags;
-    UINT32    ntmSizeEM;
-    UINT32    ntmCellHeight;
-    UINT32    ntmAvgWidth;
-} NEWTEXTMETRIC32A, *LPNEWTEXTMETRIC32A;
+    UINT    ntmSizeEM;
+    UINT    ntmCellHeight;
+    UINT    ntmAvgWidth;
+} NEWTEXTMETRICA, *LPNEWTEXTMETRICA;
 
 typedef struct
 {
-    INT32     tmHeight;
-    INT32     tmAscent;
-    INT32     tmDescent;
-    INT32     tmInternalLeading;
-    INT32     tmExternalLeading;
-    INT32     tmAveCharWidth;
-    INT32     tmMaxCharWidth;
-    INT32     tmWeight;
-    INT32     tmOverhang;
-    INT32     tmDigitizedAspectX;
-    INT32     tmDigitizedAspectY;
+    INT     tmHeight;
+    INT     tmAscent;
+    INT     tmDescent;
+    INT     tmInternalLeading;
+    INT     tmExternalLeading;
+    INT     tmAveCharWidth;
+    INT     tmMaxCharWidth;
+    INT     tmWeight;
+    INT     tmOverhang;
+    INT     tmDigitizedAspectX;
+    INT     tmDigitizedAspectY;
     WCHAR     tmFirstChar;
     WCHAR     tmLastChar;
     WCHAR     tmDefaultChar;
@@ -995,10 +987,10 @@
     BYTE      tmPitchAndFamily;
     BYTE      tmCharSet;
     DWORD     ntmFlags;
-    UINT32    ntmSizeEM;
-    UINT32    ntmCellHeight;
-    UINT32    ntmAvgWidth;
-} NEWTEXTMETRIC32W, *LPNEWTEXTMETRIC32W;
+    UINT    ntmSizeEM;
+    UINT    ntmCellHeight;
+    UINT    ntmAvgWidth;
+} NEWTEXTMETRICW, *LPNEWTEXTMETRICW;
 
 DECL_WINELIB_TYPE_AW(NEWTEXTMETRIC)
 DECL_WINELIB_TYPE_AW(LPNEWTEXTMETRIC)
@@ -1011,30 +1003,30 @@
 
 typedef struct
 {
-    NEWTEXTMETRIC32A	ntmetm;
+    NEWTEXTMETRICA	ntmetm;
     FONTSIGNATURE       ntmeFontSignature;
-} NEWTEXTMETRICEX32A,*LPNEWTEXTMETRICEX32A;
+} NEWTEXTMETRICEXA,*LPNEWTEXTMETRICEXA;
 
 typedef struct
 {
-    NEWTEXTMETRIC32W	ntmetm;
+    NEWTEXTMETRICW	ntmetm;
     FONTSIGNATURE       ntmeFontSignature;
-} NEWTEXTMETRICEX32W,*LPNEWTEXTMETRICEX32W;
+} NEWTEXTMETRICEXW,*LPNEWTEXTMETRICEXW;
 
 DECL_WINELIB_TYPE_AW(NEWTEXTMETRICEX)
 DECL_WINELIB_TYPE_AW(LPNEWTEXTMETRICEX)
 
 
 typedef INT16 (CALLBACK *FONTENUMPROC16)(SEGPTR,SEGPTR,UINT16,LPARAM);
-typedef INT32 (CALLBACK *FONTENUMPROC32A)(LPENUMLOGFONT32A,LPNEWTEXTMETRIC32A,
-                                          UINT32,LPARAM);
-typedef INT32 (CALLBACK *FONTENUMPROC32W)(LPENUMLOGFONT32W,LPNEWTEXTMETRIC32W,
-                                          UINT32,LPARAM);
+typedef INT (CALLBACK *FONTENUMPROCA)(LPENUMLOGFONTA,LPNEWTEXTMETRICA,
+                                          UINT,LPARAM);
+typedef INT (CALLBACK *FONTENUMPROCW)(LPENUMLOGFONTW,LPNEWTEXTMETRICW,
+                                          UINT,LPARAM);
 DECL_WINELIB_TYPE_AW(FONTENUMPROC)
 
 typedef INT16 (CALLBACK *FONTENUMPROCEX16)(SEGPTR,SEGPTR,UINT16,LPARAM);
-typedef INT32 (CALLBACK *FONTENUMPROCEX32A)(LPENUMLOGFONTEX32A,LPNEWTEXTMETRICEX32A,UINT32,LPARAM);
-typedef INT32 (CALLBACK *FONTENUMPROCEX32W)(LPENUMLOGFONTEX32W,LPNEWTEXTMETRICEX32W,UINT32,LPARAM);
+typedef INT (CALLBACK *FONTENUMPROCEXA)(LPENUMLOGFONTEXA,LPNEWTEXTMETRICEXA,UINT,LPARAM);
+typedef INT (CALLBACK *FONTENUMPROCEXW)(LPENUMLOGFONTEXW,LPNEWTEXTMETRICEXW,UINT,LPARAM);
 DECL_WINELIB_TYPE_AW(FONTENUMPROCEX)
 
   /* tmPitchAndFamily bits */
@@ -1069,15 +1061,13 @@
 
 typedef struct
 {
-    UINT32	gmBlackBoxX;
-    UINT32	gmBlackBoxY;
-    POINT32	gmptGlyphOrigin;
+    UINT	gmBlackBoxX;
+    UINT	gmBlackBoxY;
+    POINT	gmptGlyphOrigin;
     INT16	gmCellIncX;
     INT16	gmCellIncY;
-} GLYPHMETRICS32, *LPGLYPHMETRICS32;
+} GLYPHMETRICS, *LPGLYPHMETRICS;
 
-DECL_WINELIB_TYPE(GLYPHMETRICS)
-DECL_WINELIB_TYPE(LPGLYPHMETRICS)
 
 #define GGO_METRICS         0
 #define GGO_BITMAP          1
@@ -1107,40 +1097,38 @@
 
 typedef struct
 {
-    INT32   abcA;
-    UINT32  abcB;
-    INT32   abcC;
-} ABC32, *LPABC32;
+    INT   abcA;
+    UINT  abcB;
+    INT   abcC;
+} ABC, *LPABC;
 
-DECL_WINELIB_TYPE(ABC)
-DECL_WINELIB_TYPE(LPABC)
 
   /* for GetCharacterPlacement () */
-typedef struct tagGCP_RESULTS32A
+typedef struct tagGCP_RESULTSA
 {
     DWORD  lStructSize;
     LPSTR  lpOutString;
-    UINT32 *lpOrder;
-    INT32  *lpDx;
-    INT32  *lpCaretPos;
+    UINT *lpOrder;
+    INT  *lpDx;
+    INT  *lpCaretPos;
     LPSTR  lpClass;
-    UINT32 *lpGlyphs;
-    UINT32 nGlyphs;
-    UINT32 nMaxFit;
-} GCP_RESULTS32A;
+    UINT *lpGlyphs;
+    UINT nGlyphs;
+    UINT nMaxFit;
+} GCP_RESULTSA;
 
-typedef struct tagGCP_RESULTS32W
+typedef struct tagGCP_RESULTSW
 {
     DWORD  lStructSize;
     LPWSTR lpOutString;
-    UINT32 *lpOrder;
-    INT32  *lpDx;
-    INT32  *lpCaretPos;
+    UINT *lpOrder;
+    INT  *lpDx;
+    INT  *lpCaretPos;
     LPWSTR lpClass;
-    UINT32 *lpGlyphs;
-    UINT32 nGlyphs;
-    UINT32 nMaxFit;
-} GCP_RESULTS32W;
+    UINT *lpGlyphs;
+    UINT nGlyphs;
+    UINT nMaxFit;
+} GCP_RESULTSW;
 
 DECL_WINELIB_TYPE_AW(GCP_RESULTS)
 
@@ -1187,13 +1175,11 @@
 
 typedef struct
 {
-    UINT32   lopnStyle; 
-    POINT32  lopnWidth WINE_PACKED;
+    UINT   lopnStyle; 
+    POINT  lopnWidth WINE_PACKED;
     COLORREF lopnColor WINE_PACKED;
-} LOGPEN32, *LPLOGPEN32;
+} LOGPEN, *LPLOGPEN;
 
-DECL_WINELIB_TYPE(LOGPEN)
-DECL_WINELIB_TYPE(LPLOGPEN)
 
 typedef struct tagEXTLOGPEN
 {
@@ -1559,10 +1545,10 @@
 
 typedef struct 
 {
-	BITMAP32		dsBm;
+	BITMAP		dsBm;
 	BITMAPINFOHEADER	dsBmih;
 	DWORD			dsBitfields[3];
-	HANDLE32		dshSection;
+	HANDLE		dshSection;
 	DWORD			dsOffset;
 } DIBSECTION,*LPDIBSECTION;
 
@@ -1620,11 +1606,9 @@
 
 typedef struct
 {
-    HGDIOBJ32 objectHandle[1];
-} HANDLETABLE32, *LPHANDLETABLE32;
+    HGDIOBJ objectHandle[1];
+} HANDLETABLE, *LPHANDLETABLE;
 
-DECL_WINELIB_TYPE(HANDLETABLE)
-DECL_WINELIB_TYPE(LPHANDLETABLE)
 
 /* Clipboard metafile picture structure */
 typedef struct
@@ -1637,14 +1621,12 @@
 
 typedef struct
 {
-    INT32        mm;
-    INT32        xExt;
-    INT32        yExt;
-    HMETAFILE32  hMF;
-} METAFILEPICT32, *LPMETAFILEPICT32;
+    INT        mm;
+    INT        xExt;
+    INT        yExt;
+    HMETAFILE  hMF;
+} METAFILEPICT, *LPMETAFILEPICT;
 
-DECL_WINELIB_TYPE(METAFILEPICT)
-DECL_WINELIB_TYPE(LPMETAFILEPICT)
 
 /* Metafile functions */
 #define META_SETBKCOLOR              0x0201
@@ -1729,9 +1711,8 @@
 
 typedef INT16 (CALLBACK *MFENUMPROC16)(HDC16,HANDLETABLE16*,METARECORD*,
                                        INT16,LPARAM);
-typedef INT32 (CALLBACK *MFENUMPROC32)(HDC32,HANDLETABLE32*,METARECORD*,
-                                       INT32,LPARAM);
-DECL_WINELIB_TYPE(MFENUMPROC)
+typedef INT (CALLBACK *MFENUMPROC)(HDC,HANDLETABLE*,METARECORD*,
+                                       INT,LPARAM);
 
 /* enhanced metafile structures and functions */
 
@@ -1740,8 +1721,8 @@
 typedef struct {
     DWORD iType; 
     DWORD nSize; 
-    RECT32 rclBounds; 
-    RECT32 rclFrame; 
+    RECT rclBounds; 
+    RECT rclFrame; 
     DWORD dSignature; 
     DWORD nVersion; 
     DWORD nBytes; 
@@ -1751,8 +1732,8 @@
     DWORD nDescription; 
     DWORD offDescription; 
     DWORD nPalEntries; 
-    SIZE32 szlDevice; 
-    SIZE32 szlMillimeters;
+    SIZE szlDevice; 
+    SIZE szlMillimeters;
     DWORD cbPixelFormat;
     DWORD offPixelFormat;
     DWORD bOpenGL;
@@ -1764,8 +1745,8 @@
     DWORD dParm[1]; 
 } ENHMETARECORD, *LPENHMETARECORD; 
 
-typedef INT32 (CALLBACK *ENHMFENUMPROC32)(HDC32, LPHANDLETABLE32, 
-					  LPENHMETARECORD, INT32, LPVOID);
+typedef INT (CALLBACK *ENHMFENUMPROC)(HDC, LPHANDLETABLE, 
+					  LPENHMETARECORD, INT, LPVOID);
 
 #define EMR_HEADER	1
 #define EMR_POLYBEZIER	2
@@ -1940,7 +1921,7 @@
     DWORD  dmDitherType;
     DWORD  dmReserved1;
     DWORD  dmReserved2;
-} DEVMODE32A, *LPDEVMODE32A;
+} DEVMODEA, *LPDEVMODEA;
 
 typedef struct
 {
@@ -1976,7 +1957,7 @@
     DWORD  dmDitherType;
     DWORD  dmReserved1;
     DWORD  dmReserved2;
-} DEVMODE32W, *LPDEVMODE32W;
+} DEVMODEW, *LPDEVMODEW;
 
 DECL_WINELIB_TYPE_AW(DEVMODE)
 DECL_WINELIB_TYPE_AW(LPDEVMODE)
@@ -1990,21 +1971,21 @@
 
 typedef struct 
 {
-    INT32    cbSize;
+    INT    cbSize;
     LPCSTR   lpszDocName;
     LPCSTR   lpszOutput;
     LPCSTR   lpszDatatype;
     DWORD    fwType;
-} DOCINFO32A, *LPDOCINFO32A;
+} DOCINFOA, *LPDOCINFOA;
 
 typedef struct 
 {
-    INT32    cbSize;
+    INT    cbSize;
     LPCWSTR  lpszDocName;
     LPCWSTR  lpszOutput;
     LPCWSTR  lpszDatatype;
     DWORD    fwType;
-} DOCINFO32W, *LPDOCINFO32W;
+} DOCINFOW, *LPDOCINFOW;
 
 DECL_WINELIB_TYPE_AW(DOCINFO)
 DECL_WINELIB_TYPE_AW(LPDOCINFO)
@@ -2028,40 +2009,40 @@
 } NONCLIENTMETRICS16,*LPNONCLIENTMETRICS16;
 
 typedef struct {
-	UINT32		cbSize;
-	INT32		iBorderWidth;
-	INT32		iScrollWidth;
-	INT32		iScrollHeight;
-	INT32		iCaptionWidth;
-	INT32		iCaptionHeight;
-	LOGFONT32A	lfCaptionFont;
-	INT32		iSmCaptionWidth;
-	INT32		iSmCaptionHeight;
-	LOGFONT32A	lfSmCaptionFont;
-	INT32		iMenuWidth;
-	INT32		iMenuHeight;
-	LOGFONT32A	lfMenuFont;
-	LOGFONT32A	lfStatusFont;
-	LOGFONT32A	lfMessageFont;
-} NONCLIENTMETRICS32A,*LPNONCLIENTMETRICS32A;
+	UINT		cbSize;
+	INT		iBorderWidth;
+	INT		iScrollWidth;
+	INT		iScrollHeight;
+	INT		iCaptionWidth;
+	INT		iCaptionHeight;
+	LOGFONTA	lfCaptionFont;
+	INT		iSmCaptionWidth;
+	INT		iSmCaptionHeight;
+	LOGFONTA	lfSmCaptionFont;
+	INT		iMenuWidth;
+	INT		iMenuHeight;
+	LOGFONTA	lfMenuFont;
+	LOGFONTA	lfStatusFont;
+	LOGFONTA	lfMessageFont;
+} NONCLIENTMETRICSA,*LPNONCLIENTMETRICSA;
 
 typedef struct {
-	UINT32		cbSize;
-	INT32		iBorderWidth;
-	INT32		iScrollWidth;
-	INT32		iScrollHeight;
-	INT32		iCaptionWidth;
-	INT32		iCaptionHeight;
-	LOGFONT32W	lfCaptionFont;
-	INT32		iSmCaptionWidth;
-	INT32		iSmCaptionHeight;
-	LOGFONT32W	lfSmCaptionFont;
-	INT32		iMenuWidth;
-	INT32		iMenuHeight;
-	LOGFONT32W	lfMenuFont;
-	LOGFONT32W	lfStatusFont;
-	LOGFONT32W	lfMessageFont;
-} NONCLIENTMETRICS32W,*LPNONCLIENTMETRICS32W;
+	UINT		cbSize;
+	INT		iBorderWidth;
+	INT		iScrollWidth;
+	INT		iScrollHeight;
+	INT		iCaptionWidth;
+	INT		iCaptionHeight;
+	LOGFONTW	lfCaptionFont;
+	INT		iSmCaptionWidth;
+	INT		iSmCaptionHeight;
+	LOGFONTW	lfSmCaptionFont;
+	INT		iMenuWidth;
+	INT		iMenuHeight;
+	LOGFONTW	lfMenuFont;
+	LOGFONTW	lfStatusFont;
+	LOGFONTW	lfMessageFont;
+} NONCLIENTMETRICSW,*LPNONCLIENTMETRICSW;
 
 DECL_WINELIB_TYPE_AW(NONCLIENTMETRICS)
 DECL_WINELIB_TYPE_AW(LPNONCLIENTMETRICS)
@@ -2079,7 +2060,7 @@
     DWORD	iType;
     DWORD	nCount;
     DWORD	nRgnSize;
-    RECT32	rcBound;
+    RECT	rcBound;
 } RGNDATAHEADER,*LPRGNDATAHEADER;
 
 typedef struct _RGNDATA {
@@ -2088,769 +2069,601 @@
 } RGNDATA,*PRGNDATA,*LPRGNDATA;
 
 typedef BOOL16 (CALLBACK* ABORTPROC16)(HDC16, INT16);
-typedef BOOL32 (CALLBACK* ABORTPROC32)(HDC32, INT32);
-DECL_WINELIB_TYPE(ABORTPROC)
+typedef BOOL (CALLBACK* ABORTPROC)(HDC, INT);
 
 #pragma pack(4)
 
 /* Declarations for functions that exist only in Win16 */
 
-VOID        WINAPI Death(HDC16);
-VOID        WINAPI Resurrection(HDC16,WORD,WORD,WORD,WORD,WORD,WORD);
+VOID        WINAPI Death16(HDC16);
+VOID        WINAPI Resurrection16(HDC16,WORD,WORD,WORD,WORD,WORD,WORD);
 
 /* Declarations for functions that exist only in Win32 */
 
-BOOL32      WINAPI AngleArc(HDC32, INT32, INT32, DWORD, FLOAT, FLOAT);
-BOOL32      WINAPI ArcTo(HDC32, INT32, INT32, INT32, INT32, INT32, INT32, INT32, INT32); 
-HENHMETAFILE32 WINAPI CloseEnhMetaFile(HDC32);
-HBRUSH32    WINAPI CreateDIBPatternBrushPt(const void*,UINT32);
-HDC32       WINAPI CreateEnhMetaFile32A(HDC32,LPCSTR,const RECT32*,LPCSTR);
-HDC32       WINAPI CreateEnhMetaFile32W(HDC32,LPCWSTR,const RECT32*,LPCWSTR);
+BOOL      WINAPI AngleArc(HDC, INT, INT, DWORD, FLOAT, FLOAT);
+BOOL      WINAPI ArcTo(HDC, INT, INT, INT, INT, INT, INT, INT, INT); 
+HENHMETAFILE WINAPI CloseEnhMetaFile(HDC);
+HBRUSH    WINAPI CreateDIBPatternBrushPt(const void*,UINT);
+HDC       WINAPI CreateEnhMetaFileA(HDC,LPCSTR,const RECT*,LPCSTR);
+HDC       WINAPI CreateEnhMetaFileW(HDC,LPCWSTR,const RECT*,LPCWSTR);
 #define     CreateEnhMetaFile WINELIB_NAME_AW(CreateEnhMetaFile)
-INT32       WINAPI DrawEscape(HDC32,INT32,INT32,LPCSTR);
-INT16       WINAPI ExcludeVisRect(HDC16,INT16,INT16,INT16,INT16);
-BOOL16      WINAPI FastWindowFrame(HDC16,const RECT16*,INT16,INT16,DWORD);
-UINT16      WINAPI GDIRealizePalette(HDC16);
-HPALETTE16  WINAPI GDISelectPalette(HDC16,HPALETTE16,WORD);
-BOOL32      WINAPI GdiComment(HDC32,UINT32,const BYTE *);
-DWORD       WINAPI GetBitmapDimension(HBITMAP16);
-DWORD       WINAPI GetBrushOrg(HDC16);
-BOOL32      WINAPI GetCharABCWidthsFloat32A(HDC32,UINT32,UINT32,LPABCFLOAT);
-BOOL32      WINAPI GetCharABCWidthsFloat32W(HDC32,UINT32,UINT32,LPABCFLOAT);
+INT       WINAPI DrawEscape(HDC,INT,INT,LPCSTR);
+INT16       WINAPI ExcludeVisRect16(HDC16,INT16,INT16,INT16,INT16);
+BOOL16      WINAPI FastWindowFrame16(HDC16,const RECT16*,INT16,INT16,DWORD);
+UINT16      WINAPI GDIRealizePalette16(HDC16);
+HPALETTE16  WINAPI GDISelectPalette16(HDC16,HPALETTE16,WORD);
+BOOL      WINAPI GdiComment(HDC,UINT,const BYTE *);
+DWORD       WINAPI GetBitmapDimension16(HBITMAP16);
+DWORD       WINAPI GetBrushOrg16(HDC16);
+BOOL      WINAPI GetCharABCWidthsFloatA(HDC,UINT,UINT,LPABCFLOAT);
+BOOL      WINAPI GetCharABCWidthsFloatW(HDC,UINT,UINT,LPABCFLOAT);
 #define     GetCharABCWidthsFloat WINELIB_NAME_AW(GetCharABCWidthsFloat)
-BOOL32      WINAPI GetCharWidthFloat32A(HDC32,UINT32,UINT32,PFLOAT);
-BOOL32      WINAPI GetCharWidthFloat32W(HDC32,UINT32,UINT32,PFLOAT);
+BOOL      WINAPI GetCharWidthFloatA(HDC,UINT,UINT,PFLOAT);
+BOOL      WINAPI GetCharWidthFloatW(HDC,UINT,UINT,PFLOAT);
 #define     GetCharWidthFloat WINELIB_NAME_AW(GetCharWidthFloat)
-BOOL32      WINAPI GetColorAdjustment(HDC32, LPCOLORADJUSTMENT);
-HFONT16     WINAPI GetCurLogFont(HDC16);
-DWORD       WINAPI GetCurrentPosition(HDC16);
+BOOL      WINAPI GetColorAdjustment(HDC, LPCOLORADJUSTMENT);
+HFONT16     WINAPI GetCurLogFont16(HDC16);
+DWORD       WINAPI GetCurrentPosition16(HDC16);
 DWORD       WINAPI GetDCHook(HDC16,FARPROC16*);
-DWORD       WINAPI GetDCOrg(HDC16);
-HDC16       WINAPI GetDCState(HDC16);
-INT16       WINAPI GetEnvironment(LPCSTR,LPDEVMODE16,UINT16);
-HGLOBAL16   WINAPI GetMetaFileBits(HMETAFILE16);
-BOOL32      WINAPI GetMiterLimit(HDC32, PFLOAT);
-DWORD       WINAPI GetTextExtent(HDC16,LPCSTR,INT16);
-DWORD       WINAPI GetViewportExt(HDC16);
-DWORD       WINAPI GetViewportOrg(HDC16);
-DWORD       WINAPI GetWindowExt(HDC16);
-DWORD       WINAPI GetWindowOrg(HDC16);
-HRGN16      WINAPI InquireVisRgn(HDC16);
-INT16       WINAPI IntersectVisRect(HDC16,INT16,INT16,INT16,INT16);
-BOOL16      WINAPI IsDCCurrentPalette(HDC16);
-BOOL16      WINAPI IsGDIObject(HGDIOBJ16);
-BOOL16      WINAPI IsValidMetaFile(HMETAFILE16);
-BOOL32      WINAPI MaskBlt(HDC32,INT32,INT32,INT32,INT32,HDC32,INT32,INT32,HBITMAP32,INT32,INT32,DWORD);
-DWORD       WINAPI MoveTo(HDC16,INT16,INT16);
-DWORD       WINAPI OffsetViewportOrg(HDC16,INT16,INT16);
-INT16       WINAPI OffsetVisRgn(HDC16,INT16,INT16);
-DWORD       WINAPI OffsetWindowOrg(HDC16,INT16,INT16);
-BOOL32      WINAPI PlgBlt32(HDC32,const POINT32*,HDC32,INT32,INT32,INT32,INT32,HBITMAP32,INT32,INT32);
-BOOL32      WINAPI PolyDraw32(HDC32,const POINT32*,const BYTE*,DWORD);
-UINT16      WINAPI RealizeDefaultPalette(HDC16);
-INT16       WINAPI RestoreVisRgn(HDC16);
-HRGN16      WINAPI SaveVisRgn(HDC16);
-DWORD       WINAPI ScaleViewportExt(HDC16,INT16,INT16,INT16,INT16);
-DWORD       WINAPI ScaleWindowExt(HDC16,INT16,INT16,INT16,INT16);
-INT16       WINAPI SelectVisRgn(HDC16,HRGN16);
-DWORD       WINAPI SetBitmapDimension(HBITMAP16,INT16,INT16);
-DWORD       WINAPI SetBrushOrg(HDC16,INT16,INT16);
-BOOL32      WINAPI SetColorAdjustment32(HDC32,const COLORADJUSTMENT*);
+DWORD       WINAPI GetDCOrg16(HDC16);
+HDC16       WINAPI GetDCState16(HDC16);
+INT16       WINAPI GetEnvironment16(LPCSTR,LPDEVMODE16,UINT16);
+HGLOBAL16   WINAPI GetMetaFileBits16(HMETAFILE16);
+BOOL      WINAPI GetMiterLimit(HDC, PFLOAT);
+DWORD       WINAPI GetTextExtent16(HDC16,LPCSTR,INT16);
+DWORD       WINAPI GetViewportExt16(HDC16);
+DWORD       WINAPI GetViewportOrg16(HDC16);
+DWORD       WINAPI GetWindowExt16(HDC16);
+DWORD       WINAPI GetWindowOrg16(HDC16);
+HRGN16      WINAPI InquireVisRgn16(HDC16);
+INT16       WINAPI IntersectVisRect16(HDC16,INT16,INT16,INT16,INT16);
+BOOL16      WINAPI IsDCCurrentPalette16(HDC16);
+BOOL16      WINAPI IsGDIObject16(HGDIOBJ16);
+BOOL16      WINAPI IsValidMetaFile16(HMETAFILE16);
+BOOL      WINAPI MaskBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,HBITMAP,INT,INT,DWORD);
+DWORD       WINAPI MoveTo16(HDC16,INT16,INT16);
+DWORD       WINAPI OffsetViewportOrg16(HDC16,INT16,INT16);
+INT16       WINAPI OffsetVisRgn16(HDC16,INT16,INT16);
+DWORD       WINAPI OffsetWindowOrg16(HDC16,INT16,INT16);
+BOOL      WINAPI PlgBlt(HDC,const POINT*,HDC,INT,INT,INT,INT,HBITMAP,INT,INT);
+BOOL      WINAPI PolyDraw(HDC,const POINT*,const BYTE*,DWORD);
+UINT16      WINAPI RealizeDefaultPalette16(HDC16);
+INT16       WINAPI RestoreVisRgn16(HDC16);
+HRGN16      WINAPI SaveVisRgn16(HDC16);
+DWORD       WINAPI ScaleViewportExt16(HDC16,INT16,INT16,INT16,INT16);
+DWORD       WINAPI ScaleWindowExt16(HDC16,INT16,INT16,INT16,INT16);
+INT16       WINAPI SelectVisRgn16(HDC16,HRGN16);
+DWORD       WINAPI SetBitmapDimension16(HBITMAP16,INT16,INT16);
+DWORD       WINAPI SetBrushOrg16(HDC16,INT16,INT16);
+BOOL      WINAPI SetColorAdjustment(HDC,const COLORADJUSTMENT*);
 BOOL16      WINAPI SetDCHook(HDC16,FARPROC16,DWORD);
-DWORD       WINAPI SetDCOrg(HDC16,INT16,INT16);
-VOID        WINAPI SetDCState(HDC16,HDC16);
-INT16       WINAPI SetEnvironment(LPCSTR,LPDEVMODE16,UINT16);
-WORD        WINAPI SetHookFlags(HDC16,WORD);
-HMETAFILE16 WINAPI SetMetaFileBits(HGLOBAL16);
-BOOL32      WINAPI SetMiterLimit(HDC32, FLOAT, PFLOAT);
-DWORD       WINAPI SetViewportExt(HDC16,INT16,INT16);
-DWORD       WINAPI SetViewportOrg(HDC16,INT16,INT16);
-DWORD       WINAPI SetWindowExt(HDC16,INT16,INT16);
-DWORD       WINAPI SetWindowOrg(HDC16,INT16,INT16);
-BOOL32      WINAPI CombineTransform(LPXFORM,const XFORM *,const XFORM *);
-HENHMETAFILE32 WINAPI CopyEnhMetaFile32A(HENHMETAFILE32,LPCSTR);
-HENHMETAFILE32 WINAPI CopyEnhMetaFile32W(HENHMETAFILE32,LPCWSTR);
+DWORD       WINAPI SetDCOrg16(HDC16,INT16,INT16);
+VOID        WINAPI SetDCState16(HDC16,HDC16);
+INT16       WINAPI SetEnvironment16(LPCSTR,LPDEVMODE16,UINT16);
+WORD        WINAPI SetHookFlags16(HDC16,WORD);
+HMETAFILE16 WINAPI SetMetaFileBits16(HGLOBAL16);
+BOOL      WINAPI SetMiterLimit(HDC, FLOAT, PFLOAT);
+DWORD       WINAPI SetViewportExt16(HDC16,INT16,INT16);
+DWORD       WINAPI SetViewportOrg16(HDC16,INT16,INT16);
+DWORD       WINAPI SetWindowExt16(HDC16,INT16,INT16);
+DWORD       WINAPI SetWindowOrg16(HDC16,INT16,INT16);
+BOOL      WINAPI CombineTransform(LPXFORM,const XFORM *,const XFORM *);
+HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE,LPCSTR);
+HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE,LPCWSTR);
 #define     CopyEnhMetaFile WINELIB_NAME_AW(CopyEnhMetaFile)
-HPALETTE32  WINAPI CreateHalftonePalette(HDC32);
-BOOL32      WINAPI DeleteEnhMetaFile(HENHMETAFILE32);
-INT32       WINAPI ExtSelectClipRgn(HDC32,HRGN32,INT32);
-HRGN32      WINAPI ExtCreateRegion(const XFORM*,DWORD,const RGNDATA*);
-INT32       WINAPI ExtEscape(HDC32,INT32,INT32,LPCSTR,INT32,LPSTR);
-BOOL32      WINAPI FixBrushOrgEx(HDC32,INT32,INT32,LPPOINT32);
-HANDLE32    WINAPI GetCurrentObject(HDC32,UINT32);
-BOOL32      WINAPI GetDCOrgEx(HDC32,LPPOINT32);
-HENHMETAFILE32 WINAPI GetEnhMetaFile32A(LPCSTR);
-HENHMETAFILE32 WINAPI GetEnhMetaFile32W(LPCWSTR);
+HPALETTE  WINAPI CreateHalftonePalette(HDC);
+BOOL      WINAPI DeleteEnhMetaFile(HENHMETAFILE);
+INT       WINAPI ExtSelectClipRgn(HDC,HRGN,INT);
+HRGN      WINAPI ExtCreateRegion(const XFORM*,DWORD,const RGNDATA*);
+INT       WINAPI ExtEscape(HDC,INT,INT,LPCSTR,INT,LPSTR);
+BOOL      WINAPI FixBrushOrgEx(HDC,INT,INT,LPPOINT);
+HANDLE    WINAPI GetCurrentObject(HDC,UINT);
+BOOL      WINAPI GetDCOrgEx(HDC,LPPOINT);
+HENHMETAFILE WINAPI GetEnhMetaFileA(LPCSTR);
+HENHMETAFILE WINAPI GetEnhMetaFileW(LPCWSTR);
 #define     GetEnhMetaFile WINELIB_NAME_AW(GetEnhMetaFile)
-UINT32      WINAPI GetEnhMetaFileBits(HENHMETAFILE32,UINT32,LPBYTE);
-UINT32      WINAPI GetEnhMetaFileHeader(HENHMETAFILE32,UINT32,LPENHMETAHEADER);
-UINT32      WINAPI GetEnhMetaFilePaletteEntries(HENHMETAFILE32,UINT32,LPPALETTEENTRY);
-INT32       WINAPI GetGraphicsMode(HDC32);
-UINT32      WINAPI GetMetaFileBitsEx(HMETAFILE32,UINT32,LPVOID);
-DWORD       WINAPI GetObjectType(HANDLE32);
-UINT32      WINAPI GetTextCharsetInfo(HDC32,LPFONTSIGNATURE,DWORD);
-BOOL32      WINAPI GetTextExtentExPoint32A(HDC32,LPCSTR,INT32,INT32,
-                                           LPINT32,LPINT32,LPSIZE32);
-BOOL32      WINAPI GetTextExtentExPoint32W(HDC32,LPCWSTR,INT32,INT32,
-                                           LPINT32,LPINT32,LPSIZE32);
+UINT      WINAPI GetEnhMetaFileBits(HENHMETAFILE,UINT,LPBYTE);
+UINT      WINAPI GetEnhMetaFileHeader(HENHMETAFILE,UINT,LPENHMETAHEADER);
+UINT      WINAPI GetEnhMetaFilePaletteEntries(HENHMETAFILE,UINT,LPPALETTEENTRY);
+INT       WINAPI GetGraphicsMode(HDC);
+UINT      WINAPI GetMetaFileBitsEx(HMETAFILE,UINT,LPVOID);
+DWORD       WINAPI GetObjectType(HANDLE);
+UINT      WINAPI GetTextCharsetInfo(HDC,LPFONTSIGNATURE,DWORD);
+BOOL      WINAPI GetTextExtentExPointA(HDC,LPCSTR,INT,INT,
+                                           LPINT,LPINT,LPSIZE);
+BOOL      WINAPI GetTextExtentExPointW(HDC,LPCWSTR,INT,INT,
+                                           LPINT,LPINT,LPSIZE);
 #define     GetTextExtentExPoint WINELIB_NAME_AW(GetTextExtentExPoint)
-BOOL32      WINAPI GetWorldTransform(HDC32,LPXFORM);
-BOOL32      WINAPI ModifyWorldTransform(HDC32,const XFORM *, DWORD);
-BOOL32      WINAPI PlayEnhMetaFile(HDC32,HENHMETAFILE32,const RECT32*);
-BOOL32      WINAPI PlayEnhMetaFileRecord(HDC32,LPHANDLETABLE32,const ENHMETARECORD*,UINT32);
-BOOL32      WINAPI PolyPolyline(HDC32,const POINT32*,const DWORD*,DWORD);
-BOOL32      WINAPI SetBrushOrgEx(HDC32,INT32,INT32,LPPOINT32);
-HENHMETAFILE32 WINAPI SetEnhMetaFileBits(UINT32,const BYTE *);
-INT32       WINAPI SetGraphicsMode(HDC32,INT32);
-HMETAFILE32 WINAPI SetMetaFileBitsEx(UINT32,const BYTE*);
-BOOL32      WINAPI SetWorldTransform(HDC32,const XFORM*);
-BOOL32      WINAPI TranslateCharsetInfo(LPDWORD,LPCHARSETINFO,DWORD);
+BOOL      WINAPI GetWorldTransform(HDC,LPXFORM);
+BOOL      WINAPI ModifyWorldTransform(HDC,const XFORM *, DWORD);
+BOOL      WINAPI PlayEnhMetaFile(HDC,HENHMETAFILE,const RECT*);
+BOOL      WINAPI PlayEnhMetaFileRecord(HDC,LPHANDLETABLE,const ENHMETARECORD*,UINT);
+BOOL      WINAPI PolyPolyline(HDC,const POINT*,const DWORD*,DWORD);
+BOOL      WINAPI SetBrushOrgEx(HDC,INT,INT,LPPOINT);
+HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE *);
+INT       WINAPI SetGraphicsMode(HDC,INT);
+HMETAFILE WINAPI SetMetaFileBitsEx(UINT,const BYTE*);
+BOOL      WINAPI SetWorldTransform(HDC,const XFORM*);
+BOOL      WINAPI TranslateCharsetInfo(LPDWORD,LPCHARSETINFO,DWORD);
 
 /* Declarations for functions that change between Win16 and Win32 */
 
 INT16       WINAPI AbortDoc16(HDC16);
-INT32       WINAPI AbortDoc32(HDC32);
-#define     AbortDoc WINELIB_NAME(AbortDoc)
+INT       WINAPI AbortDoc(HDC);
 BOOL16      WINAPI AbortPath16(HDC16);
-BOOL32      WINAPI AbortPath32(HDC32);
-#define     AbortPath WINELIB_NAME(AbortPath)
+BOOL      WINAPI AbortPath(HDC);
 INT16       WINAPI AddFontResource16(LPCSTR);
-INT32       WINAPI AddFontResource32A(LPCSTR);
-INT32       WINAPI AddFontResource32W(LPCWSTR);
+INT       WINAPI AddFontResourceA(LPCSTR);
+INT       WINAPI AddFontResourceW(LPCWSTR);
 #define     AddFontResource WINELIB_NAME_AW(AddFontResource)
 void        WINAPI AnimatePalette16(HPALETTE16,UINT16,UINT16,const PALETTEENTRY*);
-BOOL32      WINAPI AnimatePalette32(HPALETTE32,UINT32,UINT32,const PALETTEENTRY*);
-#define     AnimatePalette WINELIB_NAME(AnimatePalette)
+BOOL      WINAPI AnimatePalette(HPALETTE,UINT,UINT,const PALETTEENTRY*);
 BOOL16      WINAPI Arc16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);
-BOOL32      WINAPI Arc32(HDC32,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32);
-#define     Arc WINELIB_NAME(Arc)
+BOOL      WINAPI Arc(HDC,INT,INT,INT,INT,INT,INT,INT,INT);
 BOOL16      WINAPI BeginPath16(HDC16);
-BOOL32      WINAPI BeginPath32(HDC32);
-#define     BeginPath WINELIB_NAME(BeginPath)
+BOOL      WINAPI BeginPath(HDC);
 BOOL16      WINAPI BitBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,INT16,DWORD);
-BOOL32      WINAPI BitBlt32(HDC32,INT32,INT32,INT32,INT32,HDC32,INT32,INT32,DWORD);
-#define     BitBlt WINELIB_NAME(BitBlt)
-INT32       WINAPI ChoosePixelFormat(HDC32,const PIXELFORMATDESCRIPTOR*);
+BOOL      WINAPI BitBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,DWORD);
+INT       WINAPI ChoosePixelFormat(HDC,const PIXELFORMATDESCRIPTOR*);
 BOOL16      WINAPI Chord16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);
-BOOL32      WINAPI Chord32(HDC32,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32);
-#define     Chord WINELIB_NAME(Chord)
+BOOL      WINAPI Chord(HDC,INT,INT,INT,INT,INT,INT,INT,INT);
 BOOL16      WINAPI CloseFigure16(HDC16);
-BOOL32      WINAPI CloseFigure32(HDC32);
-#define     CloseFigure WINELIB_NAME(CloseFigure)
+BOOL      WINAPI CloseFigure(HDC);
 HMETAFILE16 WINAPI CloseMetaFile16(HDC16);
-HMETAFILE32 WINAPI CloseMetaFile32(HDC32);
-#define     CloseMetaFile WINELIB_NAME(CloseMetaFile)
+HMETAFILE WINAPI CloseMetaFile(HDC);
 INT16       WINAPI CombineRgn16(HRGN16,HRGN16,HRGN16,INT16);
-INT32       WINAPI CombineRgn32(HRGN32,HRGN32,HRGN32,INT32);
-#define     CombineRgn WINELIB_NAME(CombineRgn)
+INT       WINAPI CombineRgn(HRGN,HRGN,HRGN,INT);
 HMETAFILE16 WINAPI CopyMetaFile16(HMETAFILE16,LPCSTR);
-HMETAFILE32 WINAPI CopyMetaFile32A(HMETAFILE32,LPCSTR);
-HMETAFILE32 WINAPI CopyMetaFile32W(HMETAFILE32,LPCWSTR);
+HMETAFILE WINAPI CopyMetaFileA(HMETAFILE,LPCSTR);
+HMETAFILE WINAPI CopyMetaFileW(HMETAFILE,LPCWSTR);
 #define     CopyMetaFile WINELIB_NAME_AW(CopyMetaFile)
 HBITMAP16   WINAPI CreateBitmap16(INT16,INT16,UINT16,UINT16,LPCVOID);
-HBITMAP32   WINAPI CreateBitmap32(INT32,INT32,UINT32,UINT32,LPCVOID);
-#define     CreateBitmap WINELIB_NAME(CreateBitmap)
+HBITMAP   WINAPI CreateBitmap(INT,INT,UINT,UINT,LPCVOID);
 HBITMAP16   WINAPI CreateBitmapIndirect16(const BITMAP16*);
-HBITMAP32   WINAPI CreateBitmapIndirect32(const BITMAP32*);
-#define     CreateBitmapIndirect WINELIB_NAME(CreateBitmapIndirect)
+HBITMAP   WINAPI CreateBitmapIndirect(const BITMAP*);
 HBRUSH16    WINAPI CreateBrushIndirect16(const LOGBRUSH16*);
-HBRUSH32    WINAPI CreateBrushIndirect32(const LOGBRUSH32*);
-#define     CreateBrushIndirect WINELIB_NAME(CreateBrushIndirect)
+HBRUSH    WINAPI CreateBrushIndirect(const LOGBRUSH*);
 HBITMAP16   WINAPI CreateCompatibleBitmap16(HDC16,INT16,INT16);
-HBITMAP32   WINAPI CreateCompatibleBitmap32(HDC32,INT32,INT32);
-#define     CreateCompatibleBitmap WINELIB_NAME(CreateCompatibleBitmap)
+HBITMAP   WINAPI CreateCompatibleBitmap(HDC,INT,INT);
 HDC16       WINAPI CreateCompatibleDC16(HDC16);
-HDC32       WINAPI CreateCompatibleDC32(HDC32);
-#define     CreateCompatibleDC WINELIB_NAME(CreateCompatibleDC)
+HDC       WINAPI CreateCompatibleDC(HDC);
 HDC16       WINAPI CreateDC16(LPCSTR,LPCSTR,LPCSTR,const DEVMODE16*);
-HDC32       WINAPI CreateDC32A(LPCSTR,LPCSTR,LPCSTR,const DEVMODE32A*);
-HDC32       WINAPI CreateDC32W(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODE32W*);
+HDC       WINAPI CreateDCA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+HDC       WINAPI CreateDCW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
 #define     CreateDC WINELIB_NAME_AW(CreateDC)
 HBITMAP16   WINAPI CreateDIBitmap16(HDC16,const BITMAPINFOHEADER*,DWORD,
                                     LPCVOID,const BITMAPINFO*,UINT16);
-HBITMAP32   WINAPI CreateDIBitmap32(HDC32,const BITMAPINFOHEADER*,DWORD,
-                                    LPCVOID,const BITMAPINFO*,UINT32);
-#define     CreateDIBitmap WINELIB_NAME(CreateDIBitmap)
+HBITMAP   WINAPI CreateDIBitmap(HDC,const BITMAPINFOHEADER*,DWORD,
+                                    LPCVOID,const BITMAPINFO*,UINT);
 HBRUSH16    WINAPI CreateDIBPatternBrush16(HGLOBAL16,UINT16);
-HBRUSH32    WINAPI CreateDIBPatternBrush32(HGLOBAL32,UINT32);
-#define     CreateDIBPatternBrush WINELIB_NAME(CreateDIBPatternBrush)
+HBRUSH    WINAPI CreateDIBPatternBrush(HGLOBAL,UINT);
 HBITMAP16   WINAPI CreateDIBSection16 (HDC16, BITMAPINFO *, UINT16,
-				       SEGPTR *, HANDLE32, DWORD offset);
-HBITMAP32   WINAPI CreateDIBSection32 (HDC32, BITMAPINFO *, UINT32,
-				       LPVOID *, HANDLE32, DWORD offset);
-#define     CreateDIBSection WINELIB_NAME(CreateDIBSection)
+				       SEGPTR *, HANDLE, DWORD offset);
+HBITMAP   WINAPI CreateDIBSection (HDC, BITMAPINFO *, UINT,
+				       LPVOID *, HANDLE, DWORD offset);
 HBITMAP16   WINAPI CreateDiscardableBitmap16(HDC16,INT16,INT16);
-HBITMAP32   WINAPI CreateDiscardableBitmap32(HDC32,INT32,INT32);
-#define     CreateDiscardableBitmap WINELIB_NAME(CreateDiscardableBitmap)
+HBITMAP   WINAPI CreateDiscardableBitmap(HDC,INT,INT);
 HRGN16      WINAPI CreateEllipticRgn16(INT16,INT16,INT16,INT16);
-HRGN32      WINAPI CreateEllipticRgn32(INT32,INT32,INT32,INT32);
-#define     CreateEllipticRgn WINELIB_NAME(CreateEllipticRgn)
+HRGN      WINAPI CreateEllipticRgn(INT,INT,INT,INT);
 HRGN16      WINAPI CreateEllipticRgnIndirect16(const RECT16 *);
-HRGN32      WINAPI CreateEllipticRgnIndirect32(const RECT32 *);
-#define     CreateEllipticRgnIndirect WINELIB_NAME(CreateEllipticRgnIndirect)
+HRGN      WINAPI CreateEllipticRgnIndirect(const RECT *);
 HFONT16     WINAPI CreateFont16(INT16,INT16,INT16,INT16,INT16,BYTE,BYTE,BYTE,
                                 BYTE,BYTE,BYTE,BYTE,BYTE,LPCSTR);
-HFONT32     WINAPI CreateFont32A(INT32,INT32,INT32,INT32,INT32,DWORD,DWORD,
+HFONT     WINAPI CreateFontA(INT,INT,INT,INT,INT,DWORD,DWORD,
                                  DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCSTR);
-HFONT32     WINAPI CreateFont32W(INT32,INT32,INT32,INT32,INT32,DWORD,DWORD,
+HFONT     WINAPI CreateFontW(INT,INT,INT,INT,INT,DWORD,DWORD,
                                  DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCWSTR);
 #define     CreateFont WINELIB_NAME_AW(CreateFont)
 HFONT16     WINAPI CreateFontIndirect16(const LOGFONT16*);
-HFONT32     WINAPI CreateFontIndirect32A(const LOGFONT32A*);
-HFONT32     WINAPI CreateFontIndirect32W(const LOGFONT32W*);
+HFONT     WINAPI CreateFontIndirectA(const LOGFONTA*);
+HFONT     WINAPI CreateFontIndirectW(const LOGFONTW*);
 #define     CreateFontIndirect WINELIB_NAME_AW(CreateFontIndirect)
 HBRUSH16    WINAPI CreateHatchBrush16(INT16,COLORREF);
-HBRUSH32    WINAPI CreateHatchBrush32(INT32,COLORREF);
-#define     CreateHatchBrush WINELIB_NAME(CreateHatchBrush)
+HBRUSH    WINAPI CreateHatchBrush(INT,COLORREF);
 HDC16       WINAPI CreateIC16(LPCSTR,LPCSTR,LPCSTR,const DEVMODE16*);
-HDC32       WINAPI CreateIC32A(LPCSTR,LPCSTR,LPCSTR,const DEVMODE32A*);
-HDC32       WINAPI CreateIC32W(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODE32W*);
+HDC       WINAPI CreateICA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+HDC       WINAPI CreateICW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
 #define     CreateIC WINELIB_NAME_AW(CreateIC)
 HDC16       WINAPI CreateMetaFile16(LPCSTR);
-HDC32       WINAPI CreateMetaFile32A(LPCSTR);
-HDC32       WINAPI CreateMetaFile32W(LPCWSTR);
+HDC       WINAPI CreateMetaFileA(LPCSTR);
+HDC       WINAPI CreateMetaFileW(LPCWSTR);
 #define     CreateMetaFile WINELIB_NAME_AW(CreateMetaFile)
 HPALETTE16  WINAPI CreatePalette16(const LOGPALETTE*);
-HPALETTE32  WINAPI CreatePalette32(const LOGPALETTE*);
-#define     CreatePalette WINELIB_NAME(CreatePalette)
+HPALETTE  WINAPI CreatePalette(const LOGPALETTE*);
 HBRUSH16    WINAPI CreatePatternBrush16(HBITMAP16);
-HBRUSH32    WINAPI CreatePatternBrush32(HBITMAP32);
-#define     CreatePatternBrush WINELIB_NAME(CreatePatternBrush)
+HBRUSH    WINAPI CreatePatternBrush(HBITMAP);
 HPEN16      WINAPI CreatePen16(INT16,INT16,COLORREF);
-HPEN32      WINAPI CreatePen32(INT32,INT32,COLORREF);
-#define     CreatePen WINELIB_NAME(CreatePen)
+HPEN      WINAPI CreatePen(INT,INT,COLORREF);
 HPEN16      WINAPI CreatePenIndirect16(const LOGPEN16*);
-HPEN32      WINAPI CreatePenIndirect32(const LOGPEN32*);
-#define     CreatePenIndirect WINELIB_NAME(CreatePenIndirect)
+HPEN      WINAPI CreatePenIndirect(const LOGPEN*);
 HRGN16      WINAPI CreatePolyPolygonRgn16(const POINT16*,const INT16*,INT16,INT16);
-HRGN32      WINAPI CreatePolyPolygonRgn32(const POINT32*,const INT32*,INT32,INT32);
-#define     CreatePolyPolygonRgn WINELIB_NAME(CreatePolyPolygonRgn)
+HRGN      WINAPI CreatePolyPolygonRgn(const POINT*,const INT*,INT,INT);
 HRGN16      WINAPI CreatePolygonRgn16(const POINT16*,INT16,INT16);
-HRGN32      WINAPI CreatePolygonRgn32(const POINT32*,INT32,INT32);
-#define     CreatePolygonRgn WINELIB_NAME(CreatePolygonRgn)
+HRGN      WINAPI CreatePolygonRgn(const POINT*,INT,INT);
 HRGN16      WINAPI CreateRectRgn16(INT16,INT16,INT16,INT16);
-HRGN32      WINAPI CreateRectRgn32(INT32,INT32,INT32,INT32);
-#define     CreateRectRgn WINELIB_NAME(CreateRectRgn)
+HRGN      WINAPI CreateRectRgn(INT,INT,INT,INT);
 HRGN16      WINAPI CreateRectRgnIndirect16(const RECT16*);
-HRGN32      WINAPI CreateRectRgnIndirect32(const RECT32*);
-#define     CreateRectRgnIndirect WINELIB_NAME(CreateRectRgnIndirect)
+HRGN      WINAPI CreateRectRgnIndirect(const RECT*);
 HRGN16      WINAPI CreateRoundRectRgn16(INT16,INT16,INT16,INT16,INT16,INT16);
-HRGN32      WINAPI CreateRoundRectRgn32(INT32,INT32,INT32,INT32,INT32,INT32);
-#define     CreateRoundRectRgn WINELIB_NAME(CreateRoundRectRgn)
+HRGN      WINAPI CreateRoundRectRgn(INT,INT,INT,INT,INT,INT);
 BOOL16      WINAPI CreateScalableFontResource16(UINT16,LPCSTR,LPCSTR,LPCSTR);
-BOOL32      WINAPI CreateScalableFontResource32A(DWORD,LPCSTR,LPCSTR,LPCSTR);
-BOOL32      WINAPI CreateScalableFontResource32W(DWORD,LPCWSTR,LPCWSTR,LPCWSTR);
+BOOL      WINAPI CreateScalableFontResourceA(DWORD,LPCSTR,LPCSTR,LPCSTR);
+BOOL      WINAPI CreateScalableFontResourceW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR);
 #define     CreateScalableFontResource WINELIB_NAME_AW(CreateScalableFontResource)
 HBRUSH16    WINAPI CreateSolidBrush16(COLORREF);
-HBRUSH32    WINAPI CreateSolidBrush32(COLORREF);
-#define     CreateSolidBrush WINELIB_NAME(CreateSolidBrush)
+HBRUSH    WINAPI CreateSolidBrush(COLORREF);
 BOOL16      WINAPI DeleteDC16(HDC16);
-BOOL32      WINAPI DeleteDC32(HDC32);
-#define     DeleteDC WINELIB_NAME(DeleteDC)
+BOOL      WINAPI DeleteDC(HDC);
 BOOL16      WINAPI DeleteMetaFile16(HMETAFILE16);
-BOOL32      WINAPI DeleteMetaFile32(HMETAFILE32);
-#define     DeleteMetaFile WINELIB_NAME(DeleteMetaFile)
+BOOL      WINAPI DeleteMetaFile(HMETAFILE);
 BOOL16      WINAPI DeleteObject16(HGDIOBJ16);
-BOOL32      WINAPI DeleteObject32(HGDIOBJ32);
-#define     DeleteObject WINELIB_NAME(DeleteObject)
-INT32       WINAPI DescribePixelFormat(HDC32,int,UINT32,
+BOOL      WINAPI DeleteObject(HGDIOBJ);
+INT       WINAPI DescribePixelFormat(HDC,int,UINT,
                                        LPPIXELFORMATDESCRIPTOR);
 BOOL16      WINAPI DPtoLP16(HDC16,LPPOINT16,INT16);
-BOOL32      WINAPI DPtoLP32(HDC32,LPPOINT32,INT32);
-#define     DPtoLP WINELIB_NAME(DPtoLP)
+BOOL      WINAPI DPtoLP(HDC,LPPOINT,INT);
 BOOL16      WINAPI Ellipse16(HDC16,INT16,INT16,INT16,INT16);
-BOOL32      WINAPI Ellipse32(HDC32,INT32,INT32,INT32,INT32);
-#define     Ellipse WINELIB_NAME(Ellipse)
+BOOL      WINAPI Ellipse(HDC,INT,INT,INT,INT);
 INT16       WINAPI EndDoc16(HDC16);
-INT32       WINAPI EndDoc32(HDC32);
-#define     EndDoc WINELIB_NAME(EndDoc)
+INT       WINAPI EndDoc(HDC);
 BOOL16      WINAPI EndPath16(HDC16);
-BOOL32      WINAPI EndPath32(HDC32);
-#define     EndPath WINELIB_NAME(EndPath)
+BOOL      WINAPI EndPath(HDC);
 INT16       WINAPI EnumFontFamilies16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);
-INT32       WINAPI EnumFontFamilies32A(HDC32,LPCSTR,FONTENUMPROC32A,LPARAM);
-INT32       WINAPI EnumFontFamilies32W(HDC32,LPCWSTR,FONTENUMPROC32W,LPARAM);
+INT       WINAPI EnumFontFamiliesA(HDC,LPCSTR,FONTENUMPROCA,LPARAM);
+INT       WINAPI EnumFontFamiliesW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM);
 #define     EnumFontFamilies WINELIB_NAME_AW(EnumFontFamilies)
 INT16       WINAPI EnumFontFamiliesEx16(HDC16,LPLOGFONT16,FONTENUMPROCEX16,LPARAM,DWORD);
-INT32       WINAPI EnumFontFamiliesEx32A(HDC32,LPLOGFONT32A,FONTENUMPROCEX32A,LPARAM,DWORD);
-INT32       WINAPI EnumFontFamiliesEx32W(HDC32,LPLOGFONT32W,FONTENUMPROCEX32W,LPARAM,DWORD);
+INT       WINAPI EnumFontFamiliesExA(HDC,LPLOGFONTA,FONTENUMPROCEXA,LPARAM,DWORD);
+INT       WINAPI EnumFontFamiliesExW(HDC,LPLOGFONTW,FONTENUMPROCEXW,LPARAM,DWORD);
 #define     EnumFontFamiliesEx WINELIB_NAME_AW(EnumFontFamiliesEx)
 INT16       WINAPI EnumFonts16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);
-INT32       WINAPI EnumFonts32A(HDC32,LPCSTR,FONTENUMPROC32A,LPARAM);
-INT32       WINAPI EnumFonts32W(HDC32,LPCWSTR,FONTENUMPROC32W,LPARAM);
+INT       WINAPI EnumFontsA(HDC,LPCSTR,FONTENUMPROCA,LPARAM);
+INT       WINAPI EnumFontsW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM);
 #define     EnumFonts WINELIB_NAME_AW(EnumFonts)
 BOOL16      WINAPI EnumMetaFile16(HDC16,HMETAFILE16,MFENUMPROC16,LPARAM);
-BOOL32      WINAPI EnumMetaFile32(HDC32,HMETAFILE32,MFENUMPROC32,LPARAM);
-#define     EnumMetaFile WINELIB_NAME(EnumMetaFile)
+BOOL      WINAPI EnumMetaFile(HDC,HMETAFILE,MFENUMPROC,LPARAM);
 INT16       WINAPI EnumObjects16(HDC16,INT16,GOBJENUMPROC16,LPARAM);
-INT32       WINAPI EnumObjects32(HDC32,INT32,GOBJENUMPROC32,LPARAM);
-#define     EnumObjects WINELIB_NAME(EnumObjects)
+INT       WINAPI EnumObjects(HDC,INT,GOBJENUMPROC,LPARAM);
 BOOL16      WINAPI EqualRgn16(HRGN16,HRGN16);
-BOOL32      WINAPI EqualRgn32(HRGN32,HRGN32);
-#define     EqualRgn WINELIB_NAME(EqualRgn)
+BOOL      WINAPI EqualRgn(HRGN,HRGN);
 INT16       WINAPI Escape16(HDC16,INT16,INT16,SEGPTR,SEGPTR);
-INT32       WINAPI Escape32(HDC32,INT32,INT32,LPCSTR,LPVOID);
-#define     Escape WINELIB_NAME(Escape)
+INT       WINAPI Escape(HDC,INT,INT,LPCSTR,LPVOID);
 INT16       WINAPI ExcludeClipRect16(HDC16,INT16,INT16,INT16,INT16);
-INT32       WINAPI ExcludeClipRect32(HDC32,INT32,INT32,INT32,INT32);
-#define     ExcludeClipRect WINELIB_NAME(ExcludeClipRect)
+INT       WINAPI ExcludeClipRect(HDC,INT,INT,INT,INT);
 HPEN16      WINAPI ExtCreatePen16(DWORD,DWORD,const LOGBRUSH16*,DWORD,const DWORD*);
-HPEN32      WINAPI ExtCreatePen32(DWORD,DWORD,const LOGBRUSH32*,DWORD,const DWORD*);
-#define     ExtCreatePen WINELIB_NAME(ExtCreatePen)
+HPEN      WINAPI ExtCreatePen(DWORD,DWORD,const LOGBRUSH*,DWORD,const DWORD*);
 BOOL16      WINAPI ExtFloodFill16(HDC16,INT16,INT16,COLORREF,UINT16);
-BOOL32      WINAPI ExtFloodFill32(HDC32,INT32,INT32,COLORREF,UINT32);
-#define     ExtFloodFill WINELIB_NAME(ExtFloodFill)
+BOOL      WINAPI ExtFloodFill(HDC,INT,INT,COLORREF,UINT);
 BOOL16      WINAPI ExtTextOut16(HDC16,INT16,INT16,UINT16,const RECT16*,
                                 LPCSTR,UINT16,const INT16*);
-BOOL32      WINAPI ExtTextOut32A(HDC32,INT32,INT32,UINT32,const RECT32*,
-                                 LPCSTR,UINT32,const INT32*);
-BOOL32      WINAPI ExtTextOut32W(HDC32,INT32,INT32,UINT32,const RECT32*,
-                                 LPCWSTR,UINT32,const INT32*);
+BOOL      WINAPI ExtTextOutA(HDC,INT,INT,UINT,const RECT*,
+                                 LPCSTR,UINT,const INT*);
+BOOL      WINAPI ExtTextOutW(HDC,INT,INT,UINT,const RECT*,
+                                 LPCWSTR,UINT,const INT*);
 #define     ExtTextOut WINELIB_NAME_AW(ExtTextOut)
 BOOL16      WINAPI FillPath16(HDC16);
-BOOL32      WINAPI FillPath32(HDC32);
-#define     FillPath WINELIB_NAME(FillPath)
+BOOL      WINAPI FillPath(HDC);
 BOOL16      WINAPI FillRgn16(HDC16,HRGN16,HBRUSH16);
-BOOL32      WINAPI FillRgn32(HDC32,HRGN32,HBRUSH32);
-#define     FillRgn WINELIB_NAME(FillRgn)
+BOOL      WINAPI FillRgn(HDC,HRGN,HBRUSH);
 BOOL16      WINAPI FlattenPath16(HDC16);
-BOOL32      WINAPI FlattenPath32(HDC32);
-#define     FlattenPath WINELIB_NAME(FlattenPath)
+BOOL      WINAPI FlattenPath(HDC);
 BOOL16      WINAPI FloodFill16(HDC16,INT16,INT16,COLORREF);
-BOOL32      WINAPI FloodFill32(HDC32,INT32,INT32,COLORREF);
-#define     FloodFill WINELIB_NAME(FloodFill)
+BOOL      WINAPI FloodFill(HDC,INT,INT,COLORREF);
 BOOL16      WINAPI FrameRgn16(HDC16,HRGN16,HBRUSH16,INT16,INT16);
-BOOL32      WINAPI FrameRgn32(HDC32,HRGN32,HBRUSH32,INT32,INT32);
-#define     FrameRgn WINELIB_NAME(FrameRgn)
+BOOL      WINAPI FrameRgn(HDC,HRGN,HBRUSH,INT,INT);
 INT16       WINAPI GetArcDirection16(HDC16);
-INT32       WINAPI GetArcDirection32(HDC32);
-#define     GetArcDirection WINELIB_NAME(GetArcDirection)
+INT       WINAPI GetArcDirection(HDC);
 BOOL16      WINAPI GetAspectRatioFilterEx16(HDC16,LPSIZE16);
-BOOL32      WINAPI GetAspectRatioFilterEx32(HDC32,LPSIZE32);
-#define     GetAspectRatioFilterEx WINELIB_NAME(GetAspectRatioFilterEx)
+BOOL      WINAPI GetAspectRatioFilterEx(HDC,LPSIZE);
 LONG        WINAPI GetBitmapBits16(HBITMAP16,LONG,LPVOID);
-LONG        WINAPI GetBitmapBits32(HBITMAP32,LONG,LPVOID);
-#define     GetBitmapBits WINELIB_NAME(GetBitmapBits)
+LONG        WINAPI GetBitmapBits(HBITMAP,LONG,LPVOID);
 BOOL16      WINAPI GetBitmapDimensionEx16(HBITMAP16,LPSIZE16);
-BOOL32      WINAPI GetBitmapDimensionEx32(HBITMAP32,LPSIZE32);
-#define     GetBitmapDimensionEx WINELIB_NAME(GetBitmapDimensionEx)
+BOOL      WINAPI GetBitmapDimensionEx(HBITMAP,LPSIZE);
 BOOL16      WINAPI GetBrushOrgEx16(HDC16,LPPOINT16);
-BOOL32      WINAPI GetBrushOrgEx32(HDC32,LPPOINT32);
-#define     GetBrushOrgEx WINELIB_NAME(GetBrushOrgEx)
+BOOL      WINAPI GetBrushOrgEx(HDC,LPPOINT);
 COLORREF    WINAPI GetBkColor16(HDC16);
-COLORREF    WINAPI GetBkColor32(HDC32);
-#define     GetBkColor WINELIB_NAME(GetBkColor)
+COLORREF    WINAPI GetBkColor(HDC);
 INT16       WINAPI GetBkMode16(HDC16);
-INT32       WINAPI GetBkMode32(HDC32);
-#define     GetBkMode WINELIB_NAME(GetBkMode)
+INT       WINAPI GetBkMode(HDC);
 UINT16      WINAPI GetBoundsRect16(HDC16,LPRECT16,UINT16);
-UINT32      WINAPI GetBoundsRect32(HDC32,LPRECT32,UINT32);
-#define     GetBoundsRect WINELIB_NAME(GetBoundsRect)
+UINT      WINAPI GetBoundsRect(HDC,LPRECT,UINT);
 BOOL16      WINAPI GetCharABCWidths16(HDC16,UINT16,UINT16,LPABC16);
-BOOL32      WINAPI GetCharABCWidths32A(HDC32,UINT32,UINT32,LPABC32);
-BOOL32      WINAPI GetCharABCWidths32W(HDC32,UINT32,UINT32,LPABC32);
+BOOL      WINAPI GetCharABCWidthsA(HDC,UINT,UINT,LPABC);
+BOOL      WINAPI GetCharABCWidthsW(HDC,UINT,UINT,LPABC);
 #define     GetCharABCWidths WINELIB_NAME_AW(GetCharABCWidths)
-DWORD       WINAPI GetCharacterPlacement32A(HDC32,LPCSTR,INT32,INT32,GCP_RESULTS32A*,DWORD);
-DWORD       WINAPI GetCharacterPlacement32W(HDC32,LPCWSTR,INT32,INT32,GCP_RESULTS32W*,DWORD);
+DWORD       WINAPI GetCharacterPlacementA(HDC,LPCSTR,INT,INT,GCP_RESULTSA*,DWORD);
+DWORD       WINAPI GetCharacterPlacementW(HDC,LPCWSTR,INT,INT,GCP_RESULTSW*,DWORD);
 #define     GetCharacterPlacement WINELIB_NAME_AW(GetCharacterPlacement)
 BOOL16      WINAPI GetCharWidth16(HDC16,UINT16,UINT16,LPINT16);
-BOOL32      WINAPI GetCharWidth32A(HDC32,UINT32,UINT32,LPINT32);
-BOOL32      WINAPI GetCharWidth32W(HDC32,UINT32,UINT32,LPINT32);
+BOOL      WINAPI GetCharWidth32A(HDC,UINT,UINT,LPINT);
+BOOL      WINAPI GetCharWidth32W(HDC,UINT,UINT,LPINT);
 #define     GetCharWidth WINELIB_NAME_AW(GetCharWidth)
 INT16       WINAPI GetClipBox16(HDC16,LPRECT16);
-INT32       WINAPI GetClipBox32(HDC32,LPRECT32);
-#define     GetClipBox WINELIB_NAME(GetClipBox)
+INT       WINAPI GetClipBox(HDC,LPRECT);
 HRGN16      WINAPI GetClipRgn16(HDC16);
-INT32       WINAPI GetClipRgn32(HDC32,HRGN32);
-#define     GetClipRgn WINELIB_NAME(GetClipRgn)
+INT       WINAPI GetClipRgn(HDC,HRGN);
 BOOL16      WINAPI GetCurrentPositionEx16(HDC16,LPPOINT16);
-BOOL32      WINAPI GetCurrentPositionEx32(HDC32,LPPOINT32);
-#define     GetCurrentPositionEx WINELIB_NAME(GetCurrentPositionEx)
+BOOL      WINAPI GetCurrentPositionEx(HDC,LPPOINT);
 INT16       WINAPI GetDeviceCaps16(HDC16,INT16);
-INT32       WINAPI GetDeviceCaps32(HDC32,INT32);
-#define     GetDeviceCaps WINELIB_NAME(GetDeviceCaps)
+INT       WINAPI GetDeviceCaps(HDC,INT);
 UINT16      WINAPI GetDIBColorTable16(HDC16,UINT16,UINT16,RGBQUAD*);
-UINT32      WINAPI GetDIBColorTable32(HDC32,UINT32,UINT32,RGBQUAD*);
-#define     GetDIBColorTable WINELIB_NAME(GetDIBColorTable)
+UINT      WINAPI GetDIBColorTable(HDC,UINT,UINT,RGBQUAD*);
 INT16       WINAPI GetDIBits16(HDC16,HBITMAP16,UINT16,UINT16,LPVOID,LPBITMAPINFO,UINT16);
-INT32       WINAPI GetDIBits32(HDC32,HBITMAP32,UINT32,UINT32,LPVOID,LPBITMAPINFO,UINT32);
-#define     GetDIBits WINELIB_NAME(GetDIBits)
-DWORD       WINAPI GetFontData32(HDC32,DWORD,DWORD,LPVOID,DWORD);
-#define     GetFontData WINELIB_NAME(GetFontData)
+INT       WINAPI GetDIBits(HDC,HBITMAP,UINT,UINT,LPVOID,LPBITMAPINFO,UINT);
+DWORD       WINAPI GetFontData(HDC,DWORD,DWORD,LPVOID,DWORD);
 DWORD       WINAPI GetFontLanguageInfo16(HDC16);
-DWORD       WINAPI GetFontLanguageInfo32(HDC32);
-#define     GetFontLanguageInfo WINELIB_NAME(GetFontLanguageInfo)
+DWORD       WINAPI GetFontLanguageInfo(HDC);
 DWORD       WINAPI GetGlyphOutline16(HDC16,UINT16,UINT16,LPGLYPHMETRICS16,DWORD,LPVOID,const MAT2*);
-DWORD       WINAPI GetGlyphOutline32A(HDC32,UINT32,UINT32,LPGLYPHMETRICS32,DWORD,LPVOID,const MAT2*);
-DWORD       WINAPI GetGlyphOutline32W(HDC32,UINT32,UINT32,LPGLYPHMETRICS32,DWORD,LPVOID,const MAT2*);
+DWORD       WINAPI GetGlyphOutlineA(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*);
+DWORD       WINAPI GetGlyphOutlineW(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*);
 #define     GetGlyphOutline WINELIB_NAME_AW(GetGlyphOutline)
 INT16       WINAPI GetKerningPairs16(HDC16,INT16,LPKERNINGPAIR16);
-DWORD       WINAPI GetKerningPairs32A(HDC32,DWORD,LPKERNINGPAIR32);
-DWORD       WINAPI GetKerningPairs32W(HDC32,DWORD,LPKERNINGPAIR32);
+DWORD       WINAPI GetKerningPairsA(HDC,DWORD,LPKERNINGPAIR);
+DWORD       WINAPI GetKerningPairsW(HDC,DWORD,LPKERNINGPAIR);
 #define     GetKerningPairs WINELIB_NAME_AW(GetKerningPairs)
 INT16       WINAPI GetMapMode16(HDC16);
-INT32       WINAPI GetMapMode32(HDC32);
-#define     GetMapMode WINELIB_NAME(GetMapMode)
+INT       WINAPI GetMapMode(HDC);
 HMETAFILE16 WINAPI GetMetaFile16(LPCSTR);
-HMETAFILE32 WINAPI GetMetaFile32A(LPCSTR);
-HMETAFILE32 WINAPI GetMetaFile32W(LPCWSTR);
+HMETAFILE WINAPI GetMetaFileA(LPCSTR);
+HMETAFILE WINAPI GetMetaFileW(LPCWSTR);
 #define     GetMetaFile WINELIB_NAME_AW(GetMetaFile)
 DWORD       WINAPI GetNearestColor16(HDC16,DWORD);
-DWORD       WINAPI GetNearestColor32(HDC32,DWORD);
-#define     GetNearestColor WINELIB_NAME(GetNearestColor)
+DWORD       WINAPI GetNearestColor(HDC,DWORD);
 UINT16      WINAPI GetNearestPaletteIndex16(HPALETTE16,COLORREF);
-UINT32      WINAPI GetNearestPaletteIndex32(HPALETTE32,COLORREF);
-#define     GetNearestPaletteIndex WINELIB_NAME(GetNearestPaletteIndex)
+UINT      WINAPI GetNearestPaletteIndex(HPALETTE,COLORREF);
 INT16       WINAPI GetObject16(HANDLE16,INT16,LPVOID);
-INT32       WINAPI GetObject32A(HANDLE32,INT32,LPVOID);
-INT32       WINAPI GetObject32W(HANDLE32,INT32,LPVOID);
+INT       WINAPI GetObjectA(HANDLE,INT,LPVOID);
+INT       WINAPI GetObjectW(HANDLE,INT,LPVOID);
 #define     GetObject WINELIB_NAME_AW(GetObject)
 UINT16      WINAPI GetOutlineTextMetrics16(HDC16,UINT16,LPOUTLINETEXTMETRIC16);
-UINT32      WINAPI GetOutlineTextMetrics32A(HDC32,UINT32,LPOUTLINETEXTMETRIC32A);
-UINT32      WINAPI GetOutlineTextMetrics32W(HDC32,UINT32,LPOUTLINETEXTMETRIC32W);
+UINT      WINAPI GetOutlineTextMetricsA(HDC,UINT,LPOUTLINETEXTMETRICA);
+UINT      WINAPI GetOutlineTextMetricsW(HDC,UINT,LPOUTLINETEXTMETRICW);
 #define     GetOutlineTextMetrics WINELIB_NAME_AW(GetOutlineTextMetrics)
 UINT16      WINAPI GetPaletteEntries16(HPALETTE16,UINT16,UINT16,LPPALETTEENTRY);
-UINT32      WINAPI GetPaletteEntries32(HPALETTE32,UINT32,UINT32,LPPALETTEENTRY);
-#define     GetPaletteEntries WINELIB_NAME(GetPaletteEntries)
+UINT      WINAPI GetPaletteEntries(HPALETTE,UINT,UINT,LPPALETTEENTRY);
 INT16       WINAPI GetPath16(HDC16,LPPOINT16,LPBYTE,INT16);
-INT32       WINAPI GetPath32(HDC32,LPPOINT32,LPBYTE,INT32);
-#define     GetPath WINELIB_NAME(GetPath)
+INT       WINAPI GetPath(HDC,LPPOINT,LPBYTE,INT);
 COLORREF    WINAPI GetPixel16(HDC16,INT16,INT16);
-COLORREF    WINAPI GetPixel32(HDC32,INT32,INT32);
-#define     GetPixel WINELIB_NAME(GetPixel)
-INT32       WINAPI GetPixelFormat(HDC32);
+COLORREF    WINAPI GetPixel(HDC,INT,INT);
+INT       WINAPI GetPixelFormat(HDC);
 INT16       WINAPI GetPolyFillMode16(HDC16);
-INT32       WINAPI GetPolyFillMode32(HDC32);
-#define     GetPolyFillMode WINELIB_NAME(GetPolyFillMode)
+INT       WINAPI GetPolyFillMode(HDC);
 BOOL16      WINAPI GetRasterizerCaps16(LPRASTERIZER_STATUS,UINT16);
-BOOL32      WINAPI GetRasterizerCaps32(LPRASTERIZER_STATUS,UINT32);
-#define     GetRasterizerCaps WINELIB_NAME(GetRasterizerCaps)
+BOOL      WINAPI GetRasterizerCaps(LPRASTERIZER_STATUS,UINT);
 DWORD       WINAPI GetRegionData16(HRGN16,DWORD,LPRGNDATA);
-DWORD       WINAPI GetRegionData32(HRGN32,DWORD,LPRGNDATA);
-#define     GetRegionData WINELIB_NAME(GetRegionData)
+DWORD       WINAPI GetRegionData(HRGN,DWORD,LPRGNDATA);
 INT16       WINAPI GetRelAbs16(HDC16);
-INT32       WINAPI GetRelAbs32(HDC32);
-#define     GetRelAbs WINELIB_NAME(GetRelAbs)
+INT       WINAPI GetRelAbs(HDC);
 INT16       WINAPI GetRgnBox16(HRGN16,LPRECT16);
-INT32       WINAPI GetRgnBox32(HRGN32,LPRECT32);
-#define     GetRgnBox WINELIB_NAME(GetRgnBox)
+INT       WINAPI GetRgnBox(HRGN,LPRECT);
 INT16       WINAPI GetROP216(HDC16);
-INT32       WINAPI GetROP232(HDC32);
-#define     GetROP2 WINELIB_NAME(GetROP2)
+INT       WINAPI GetROP2(HDC);
 HGDIOBJ16   WINAPI GetStockObject16(INT16);
-HGDIOBJ32   WINAPI GetStockObject32(INT32);
-#define     GetStockObject WINELIB_NAME(GetStockObject)
+HGDIOBJ   WINAPI GetStockObject(INT);
 INT16       WINAPI GetStretchBltMode16(HDC16);
-INT32       WINAPI GetStretchBltMode32(HDC32);
-#define     GetStretchBltMode WINELIB_NAME(GetStretchBltMode)
+INT       WINAPI GetStretchBltMode(HDC);
 UINT16      WINAPI GetSystemPaletteEntries16(HDC16,UINT16,UINT16,LPPALETTEENTRY);
-UINT32      WINAPI GetSystemPaletteEntries32(HDC32,UINT32,UINT32,LPPALETTEENTRY);
-#define     GetSystemPaletteEntries WINELIB_NAME(GetSystemPaletteEntries)
+UINT      WINAPI GetSystemPaletteEntries(HDC,UINT,UINT,LPPALETTEENTRY);
 UINT16      WINAPI GetSystemPaletteUse16(HDC16);
-UINT32      WINAPI GetSystemPaletteUse32(HDC32);
-#define     GetSystemPaletteUse WINELIB_NAME(GetSystemPaletteUse)
+UINT      WINAPI GetSystemPaletteUse(HDC);
 UINT16      WINAPI GetTextAlign16(HDC16);
-UINT32      WINAPI GetTextAlign32(HDC32);
-#define     GetTextAlign WINELIB_NAME(GetTextAlign)
+UINT      WINAPI GetTextAlign(HDC);
 INT16       WINAPI GetTextCharacterExtra16(HDC16);
-INT32       WINAPI GetTextCharacterExtra32(HDC32);
-#define     GetTextCharacterExtra WINELIB_NAME(GetTextCharacterExtra)
+INT       WINAPI GetTextCharacterExtra(HDC);
 UINT16      WINAPI GetTextCharset16(HDC16);
-UINT32      WINAPI GetTextCharset32(HDC32);
-#define     GetTextCharset WINELIB_NAME(GetTextCharset)
+UINT      WINAPI GetTextCharset(HDC);
 COLORREF    WINAPI GetTextColor16(HDC16);
-COLORREF    WINAPI GetTextColor32(HDC32);
-#define     GetTextColor WINELIB_NAME(GetTextColor)
+COLORREF    WINAPI GetTextColor(HDC);
 /* this one is different, because Win32 has *both* 
  * GetTextExtentPoint and GetTextExtentPoint32 !
  */
 BOOL16      WINAPI GetTextExtentPoint16(HDC16,LPCSTR,INT16,LPSIZE16);
-BOOL32      WINAPI GetTextExtentPoint32A(HDC32,LPCSTR,INT32,LPSIZE32);
-BOOL32      WINAPI GetTextExtentPoint32W(HDC32,LPCWSTR,INT32,LPSIZE32);
-BOOL32      WINAPI GetTextExtentPoint32ABuggy(HDC32,LPCSTR,INT32,LPSIZE32);
-BOOL32      WINAPI GetTextExtentPoint32WBuggy(HDC32,LPCWSTR,INT32,LPSIZE32);
+BOOL      WINAPI GetTextExtentPoint32A(HDC,LPCSTR,INT,LPSIZE);
+BOOL      WINAPI GetTextExtentPoint32W(HDC,LPCWSTR,INT,LPSIZE);
+BOOL      WINAPI GetTextExtentPointA(HDC,LPCSTR,INT,LPSIZE);
+BOOL      WINAPI GetTextExtentPointW(HDC,LPCWSTR,INT,LPSIZE);
 #ifdef UNICODE
-#define     GetTextExtentPoint GetTextExtentPoint32WBuggy
+#define     GetTextExtentPoint GetTextExtentPointW
 #define     GetTextExtentPoint32 GetTextExtentPoint32W
 #else
-#define     GetTextExtentPoint GetTextExtentPoint32ABuggy
+#define     GetTextExtentPoint GetTextExtentPointA
 #define     GetTextExtentPoint32 GetTextExtentPoint32A
 #endif
 INT16       WINAPI GetTextFace16(HDC16,INT16,LPSTR);
-INT32       WINAPI GetTextFace32A(HDC32,INT32,LPSTR);
-INT32       WINAPI GetTextFace32W(HDC32,INT32,LPWSTR);
+INT       WINAPI GetTextFaceA(HDC,INT,LPSTR);
+INT       WINAPI GetTextFaceW(HDC,INT,LPWSTR);
 #define     GetTextFace WINELIB_NAME_AW(GetTextFace)
 BOOL16      WINAPI GetTextMetrics16(HDC16,LPTEXTMETRIC16);
-BOOL32      WINAPI GetTextMetrics32A(HDC32,LPTEXTMETRIC32A);
-BOOL32      WINAPI GetTextMetrics32W(HDC32,LPTEXTMETRIC32W);
+BOOL      WINAPI GetTextMetricsA(HDC,LPTEXTMETRICA);
+BOOL      WINAPI GetTextMetricsW(HDC,LPTEXTMETRICW);
 #define     GetTextMetrics WINELIB_NAME_AW(GetTextMetrics)
 BOOL16      WINAPI GetViewportExtEx16(HDC16,LPSIZE16);
-BOOL32      WINAPI GetViewportExtEx32(HDC32,LPSIZE32);
-#define     GetViewportExtEx WINELIB_NAME(GetViewportExtEx)
+BOOL      WINAPI GetViewportExtEx(HDC,LPSIZE);
 BOOL16      WINAPI GetViewportOrgEx16(HDC16,LPPOINT16);
-BOOL32      WINAPI GetViewportOrgEx32(HDC32,LPPOINT32);
-#define     GetViewportOrgEx WINELIB_NAME(GetViewportOrgEx)
+BOOL      WINAPI GetViewportOrgEx(HDC,LPPOINT);
 BOOL16      WINAPI GetWindowExtEx16(HDC16,LPSIZE16);
-BOOL32      WINAPI GetWindowExtEx32(HDC32,LPSIZE32);
-#define     GetWindowExtEx WINELIB_NAME(GetWindowExtEx)
+BOOL      WINAPI GetWindowExtEx(HDC,LPSIZE);
 BOOL16      WINAPI GetWindowOrgEx16(HDC16,LPPOINT16);
-BOOL32      WINAPI GetWindowOrgEx32(HDC32,LPPOINT32);
-#define     GetWindowOrgEx WINELIB_NAME(GetWindowOrgEx)
+BOOL      WINAPI GetWindowOrgEx(HDC,LPPOINT);
 INT16       WINAPI IntersectClipRect16(HDC16,INT16,INT16,INT16,INT16);
-INT32       WINAPI IntersectClipRect32(HDC32,INT32,INT32,INT32,INT32);
-#define     IntersectClipRect WINELIB_NAME(IntersectClipRect)
+INT       WINAPI IntersectClipRect(HDC,INT,INT,INT,INT);
 BOOL16      WINAPI InvertRgn16(HDC16,HRGN16);
-BOOL32      WINAPI InvertRgn32(HDC32,HRGN32);
-#define     InvertRgn WINELIB_NAME(InvertRgn)
+BOOL      WINAPI InvertRgn(HDC,HRGN);
 VOID        WINAPI LineDDA16(INT16,INT16,INT16,INT16,LINEDDAPROC16,LPARAM);
-BOOL32      WINAPI LineDDA32(INT32,INT32,INT32,INT32,LINEDDAPROC32,LPARAM);
-#define     LineDDA WINELIB_NAME(LineDDA)
+BOOL      WINAPI LineDDA(INT,INT,INT,INT,LINEDDAPROC,LPARAM);
 BOOL16      WINAPI LineTo16(HDC16,INT16,INT16);
-BOOL32      WINAPI LineTo32(HDC32,INT32,INT32);
-#define     LineTo WINELIB_NAME(LineTo)
+BOOL      WINAPI LineTo(HDC,INT,INT);
 BOOL16      WINAPI LPtoDP16(HDC16,LPPOINT16,INT16);
-BOOL32      WINAPI LPtoDP32(HDC32,LPPOINT32,INT32);
-#define     LPtoDP WINELIB_NAME(LPtoDP)
+BOOL      WINAPI LPtoDP(HDC,LPPOINT,INT);
 BOOL16      WINAPI MoveToEx16(HDC16,INT16,INT16,LPPOINT16);
-BOOL32      WINAPI MoveToEx32(HDC32,INT32,INT32,LPPOINT32);
-#define     MoveToEx WINELIB_NAME(MoveToEx)
+BOOL      WINAPI MoveToEx(HDC,INT,INT,LPPOINT);
 INT16       WINAPI MulDiv16(INT16,INT16,INT16);
 /* FIXME This is defined in kernel32.spec !?*/
-INT32       WINAPI MulDiv32(INT32,INT32,INT32);
-#define     MulDiv WINELIB_NAME(MulDiv)
+INT       WINAPI MulDiv(INT,INT,INT);
 INT16       WINAPI OffsetClipRgn16(HDC16,INT16,INT16);
-INT32       WINAPI OffsetClipRgn32(HDC32,INT32,INT32);
-#define     OffsetClipRgn WINELIB_NAME(OffsetClipRgn)
+INT       WINAPI OffsetClipRgn(HDC,INT,INT);
 INT16       WINAPI OffsetRgn16(HRGN16,INT16,INT16);
-INT32       WINAPI OffsetRgn32(HRGN32,INT32,INT32);
-#define     OffsetRgn WINELIB_NAME(OffsetRgn)
+INT       WINAPI OffsetRgn(HRGN,INT,INT);
 BOOL16      WINAPI OffsetViewportOrgEx16(HDC16,INT16,INT16,LPPOINT16);
-BOOL32      WINAPI OffsetViewportOrgEx32(HDC32,INT32,INT32,LPPOINT32);
-#define     OffsetViewportOrgEx WINELIB_NAME(OffsetViewportOrgEx)
+BOOL      WINAPI OffsetViewportOrgEx(HDC,INT,INT,LPPOINT);
 BOOL16      WINAPI OffsetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);
-BOOL32      WINAPI OffsetWindowOrgEx32(HDC32,INT32,INT32,LPPOINT32);
-#define     OffsetWindowOrgEx WINELIB_NAME(OffsetWindowOrgEx)
+BOOL      WINAPI OffsetWindowOrgEx(HDC,INT,INT,LPPOINT);
 BOOL16      WINAPI PaintRgn16(HDC16,HRGN16);
-BOOL32      WINAPI PaintRgn32(HDC32,HRGN32);
-#define     PaintRgn WINELIB_NAME(PaintRgn)
+BOOL      WINAPI PaintRgn(HDC,HRGN);
 BOOL16      WINAPI PatBlt16(HDC16,INT16,INT16,INT16,INT16,DWORD);
-BOOL32      WINAPI PatBlt32(HDC32,INT32,INT32,INT32,INT32,DWORD);
-#define     PatBlt WINELIB_NAME(PatBlt)
+BOOL      WINAPI PatBlt(HDC,INT,INT,INT,INT,DWORD);
 HRGN16      WINAPI PathToRegion16(HDC16);
-HRGN32      WINAPI PathToRegion32(HDC32);
-#define     PathToRegion WINELIB_NAME(PathToRegion)
+HRGN      WINAPI PathToRegion(HDC);
 BOOL16      WINAPI Pie16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);
-BOOL32      WINAPI Pie32(HDC32,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32);
-#define     Pie WINELIB_NAME(Pie)
+BOOL      WINAPI Pie(HDC,INT,INT,INT,INT,INT,INT,INT,INT);
 BOOL16      WINAPI PlayMetaFile16(HDC16,HMETAFILE16);
-BOOL32      WINAPI PlayMetaFile32(HDC32,HMETAFILE32);
-#define     PlayMetaFile WINELIB_NAME(PlayMetaFile)
+BOOL      WINAPI PlayMetaFile(HDC,HMETAFILE);
 VOID        WINAPI PlayMetaFileRecord16(HDC16,LPHANDLETABLE16,LPMETARECORD,UINT16);
-BOOL32      WINAPI PlayMetaFileRecord32(HDC32,LPHANDLETABLE32,LPMETARECORD,UINT32);
-#define     PlayMetaFileRecord WINELIB_NAME(PlayMetaFileRecord)
+BOOL      WINAPI PlayMetaFileRecord(HDC,LPHANDLETABLE,LPMETARECORD,UINT);
 BOOL16      WINAPI PolyBezier16(HDC16,const POINT16*,INT16);
-BOOL32      WINAPI PolyBezier32(HDC32,const POINT32*,DWORD);
-#define     PolyBezier WINELIB_NAME(PolyBezier)
+BOOL      WINAPI PolyBezier(HDC,const POINT*,DWORD);
 BOOL16      WINAPI PolyBezierTo16(HDC16,const POINT16*,INT16);
-BOOL32      WINAPI PolyBezierTo32(HDC32,const POINT32*,DWORD);
-#define     PolyBezierTo WINELIB_NAME(PolyBezierTo)
+BOOL      WINAPI PolyBezierTo(HDC,const POINT*,DWORD);
 BOOL16      WINAPI PolyPolygon16(HDC16,const POINT16*,const INT16*,UINT16);
-BOOL32      WINAPI PolyPolygon32(HDC32,const POINT32*,const INT32*,UINT32);
-#define     PolyPolygon WINELIB_NAME(PolyPolygon)
+BOOL      WINAPI PolyPolygon(HDC,const POINT*,const INT*,UINT);
 BOOL16      WINAPI Polygon16(HDC16,const POINT16*,INT16);
-BOOL32      WINAPI Polygon32(HDC32,const POINT32*,INT32);
-#define     Polygon WINELIB_NAME(Polygon)
+BOOL      WINAPI Polygon(HDC,const POINT*,INT);
 BOOL16      WINAPI Polyline16(HDC16,const POINT16*,INT16);
-BOOL32      WINAPI Polyline32(HDC32,const POINT32*,INT32);
-#define     Polyline WINELIB_NAME(Polyline)
-BOOL32      WINAPI PolylineTo32(HDC32,const POINT32*,DWORD);
+BOOL      WINAPI Polyline(HDC,const POINT*,INT);
+BOOL      WINAPI PolylineTo(HDC,const POINT*,DWORD);
 BOOL16      WINAPI PtInRegion16(HRGN16,INT16,INT16);
-BOOL32      WINAPI PtInRegion32(HRGN32,INT32,INT32);
-#define     PtInRegion WINELIB_NAME(PtInRegion)
+BOOL      WINAPI PtInRegion(HRGN,INT,INT);
 BOOL16      WINAPI PtVisible16(HDC16,INT16,INT16);
-BOOL32      WINAPI PtVisible32(HDC32,INT32,INT32);
-#define     PtVisible WINELIB_NAME(PtVisible)
+BOOL      WINAPI PtVisible(HDC,INT,INT);
 /* FIXME This is defined in user.spec !? */
 UINT16      WINAPI RealizePalette16(HDC16);
-UINT32      WINAPI RealizePalette32(HDC32);
-#define     RealizePalette WINELIB_NAME(RealizePalette)
+UINT      WINAPI RealizePalette(HDC);
 BOOL16      WINAPI Rectangle16(HDC16,INT16,INT16,INT16,INT16);
-BOOL32      WINAPI Rectangle32(HDC32,INT32,INT32,INT32,INT32);
-#define     Rectangle WINELIB_NAME(Rectangle)
+BOOL      WINAPI Rectangle(HDC,INT,INT,INT,INT);
 BOOL16      WINAPI RectInRegion16(HRGN16,const RECT16 *);
-BOOL32      WINAPI RectInRegion32(HRGN32,const RECT32 *);
-#define     RectInRegion WINELIB_NAME(RectInRegion)
+BOOL      WINAPI RectInRegion(HRGN,const RECT *);
 BOOL16      WINAPI RectVisible16(HDC16,const RECT16*);
-BOOL32      WINAPI RectVisible32(HDC32,const RECT32*);
-#define     RectVisible WINELIB_NAME(RectVisible)
+BOOL      WINAPI RectVisible(HDC,const RECT*);
 BOOL16      WINAPI RemoveFontResource16(SEGPTR);
-BOOL32      WINAPI RemoveFontResource32A(LPCSTR);
-BOOL32      WINAPI RemoveFontResource32W(LPCWSTR);
+BOOL      WINAPI RemoveFontResourceA(LPCSTR);
+BOOL      WINAPI RemoveFontResourceW(LPCWSTR);
 #define     RemoveFontResource WINELIB_NAME_AW(RemoveFontResource)
 HDC16       WINAPI ResetDC16(HDC16,const DEVMODE16 *);
-HDC32       WINAPI ResetDC32A(HDC32,const DEVMODE32A *);
-HDC32       WINAPI ResetDC32W(HDC32,const DEVMODE32W *);
+HDC       WINAPI ResetDCA(HDC,const DEVMODEA *);
+HDC       WINAPI ResetDCW(HDC,const DEVMODEW *);
 #define     ResetDC WINELIB_NAME_AW(ResetDC)
 BOOL16      WINAPI ResizePalette16(HPALETTE16,UINT16);
-BOOL32      WINAPI ResizePalette32(HPALETTE32,UINT32);
-#define     ResizePalette WINELIB_NAME(ResizePalette)
+BOOL      WINAPI ResizePalette(HPALETTE,UINT);
 BOOL16      WINAPI RestoreDC16(HDC16,INT16);
-BOOL32      WINAPI RestoreDC32(HDC32,INT32);
-#define     RestoreDC WINELIB_NAME(RestoreDC)
+BOOL      WINAPI RestoreDC(HDC,INT);
 BOOL16      WINAPI RoundRect16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16);
-BOOL32      WINAPI RoundRect32(HDC32,INT32,INT32,INT32,INT32,INT32,INT32);
-#define     RoundRect WINELIB_NAME(RoundRect)
+BOOL      WINAPI RoundRect(HDC,INT,INT,INT,INT,INT,INT);
 INT16       WINAPI SaveDC16(HDC16);
-INT32       WINAPI SaveDC32(HDC32);
-#define     SaveDC WINELIB_NAME(SaveDC)
+INT       WINAPI SaveDC(HDC);
 BOOL16      WINAPI ScaleViewportExtEx16(HDC16,INT16,INT16,INT16,INT16,LPSIZE16);
-BOOL32      WINAPI ScaleViewportExtEx32(HDC32,INT32,INT32,INT32,INT32,LPSIZE32);
-#define     ScaleViewportExtEx WINELIB_NAME(ScaleViewportExtEx)
+BOOL      WINAPI ScaleViewportExtEx(HDC,INT,INT,INT,INT,LPSIZE);
 BOOL16      WINAPI ScaleWindowExtEx16(HDC16,INT16,INT16,INT16,INT16,LPSIZE16);
-BOOL32      WINAPI ScaleWindowExtEx32(HDC32,INT32,INT32,INT32,INT32,LPSIZE32);
-#define     ScaleWindowExtEx WINELIB_NAME(ScaleWindowExtEx)
+BOOL      WINAPI ScaleWindowExtEx(HDC,INT,INT,INT,INT,LPSIZE);
 BOOL16      WINAPI SelectClipPath16(HDC16,INT16);
-BOOL32      WINAPI SelectClipPath32(HDC32,INT32);
-#define     SelectClipPath WINELIB_NAME(SelectClipPath)
+BOOL      WINAPI SelectClipPath(HDC,INT);
 INT16       WINAPI SelectClipRgn16(HDC16,HRGN16);
-INT32       WINAPI SelectClipRgn32(HDC32,HRGN32);
-#define     SelectClipRgn WINELIB_NAME(SelectClipRgn)
+INT       WINAPI SelectClipRgn(HDC,HRGN);
 HGDIOBJ16   WINAPI SelectObject16(HDC16,HGDIOBJ16);
-HGDIOBJ32   WINAPI SelectObject32(HDC32,HGDIOBJ32);
-#define     SelectObject WINELIB_NAME(SelectObject)
+HGDIOBJ   WINAPI SelectObject(HDC,HGDIOBJ);
 /* FIXME This is defined in user.spec !? */
 HPALETTE16  WINAPI SelectPalette16(HDC16,HPALETTE16,BOOL16);
-HPALETTE32  WINAPI SelectPalette32(HDC32,HPALETTE32,BOOL32);
-#define     SelectPalette WINELIB_NAME(SelectPalette)
+HPALETTE  WINAPI SelectPalette(HDC,HPALETTE,BOOL);
 INT16       WINAPI SetAbortProc16(HDC16,SEGPTR);
-INT32       WINAPI SetAbortProc32(HDC32,ABORTPROC32);
-#define     SetAbortProc WINELIB_NAME(SetAbortProc)
+INT       WINAPI SetAbortProc(HDC,ABORTPROC);
 INT16       WINAPI SetArcDirection16(HDC16,INT16);
-INT32       WINAPI SetArcDirection32(HDC32,INT32);
-#define     SetArcDirection WINELIB_NAME(SetArcDirection)
+INT       WINAPI SetArcDirection(HDC,INT);
 LONG        WINAPI SetBitmapBits16(HBITMAP16,LONG,LPCVOID);
-LONG        WINAPI SetBitmapBits32(HBITMAP32,LONG,LPCVOID);
-#define     SetBitmapBits WINELIB_NAME(SetBitmapBits)
+LONG        WINAPI SetBitmapBits(HBITMAP,LONG,LPCVOID);
 BOOL16      WINAPI SetBitmapDimensionEx16(HBITMAP16,INT16,INT16,LPSIZE16);
-BOOL32      WINAPI SetBitmapDimensionEx32(HBITMAP32,INT32,INT32,LPSIZE32);
-#define     SetBitmapDimensionEx WINELIB_NAME(SetBitmapDimensionEx)
+BOOL      WINAPI SetBitmapDimensionEx(HBITMAP,INT,INT,LPSIZE);
 COLORREF    WINAPI SetBkColor16(HDC16,COLORREF);
-COLORREF    WINAPI SetBkColor32(HDC32,COLORREF);
-#define     SetBkColor WINELIB_NAME(SetBkColor)
+COLORREF    WINAPI SetBkColor(HDC,COLORREF);
 INT16       WINAPI SetBkMode16(HDC16,INT16);
-INT32       WINAPI SetBkMode32(HDC32,INT32);
-#define     SetBkMode WINELIB_NAME(SetBkMode)
+INT       WINAPI SetBkMode(HDC,INT);
 UINT16      WINAPI SetBoundsRect16(HDC16,const RECT16*,UINT16);
-UINT32      WINAPI SetBoundsRect32(HDC32,const RECT32*,UINT32);
-#define     SetBoundsRect WINELIB_NAME(SetBoundsRect)
+UINT      WINAPI SetBoundsRect(HDC,const RECT*,UINT);
 UINT16      WINAPI SetDIBColorTable16(HDC16,UINT16,UINT16,RGBQUAD*);
-UINT32      WINAPI SetDIBColorTable32(HDC32,UINT32,UINT32,RGBQUAD*);
-#define     SetDIBColorTable WINELIB_NAME(SetDIBColorTable)
+UINT      WINAPI SetDIBColorTable(HDC,UINT,UINT,RGBQUAD*);
 INT16       WINAPI SetDIBits16(HDC16,HBITMAP16,UINT16,UINT16,LPCVOID,const BITMAPINFO*,UINT16);
-INT32       WINAPI SetDIBits32(HDC32,HBITMAP32,UINT32,UINT32,LPCVOID,const BITMAPINFO*,UINT32);
-#define     SetDIBits WINELIB_NAME(SetDIBits)
+INT       WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
 INT16       WINAPI SetDIBitsToDevice16(HDC16,INT16,INT16,INT16,INT16,INT16,
                          INT16,UINT16,UINT16,LPCVOID,const BITMAPINFO*,UINT16);
-INT32       WINAPI SetDIBitsToDevice32(HDC32,INT32,INT32,DWORD,DWORD,INT32,
-                         INT32,UINT32,UINT32,LPCVOID,const BITMAPINFO*,UINT32);
-#define     SetDIBitsToDevice WINELIB_NAME(SetDIBitsToDevice)
+INT       WINAPI SetDIBitsToDevice(HDC,INT,INT,DWORD,DWORD,INT,
+                         INT,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
 INT16       WINAPI SetMapMode16(HDC16,INT16);
-INT32       WINAPI SetMapMode32(HDC32,INT32);
-#define     SetMapMode WINELIB_NAME(SetMapMode)
+INT       WINAPI SetMapMode(HDC,INT);
 DWORD       WINAPI SetMapperFlags16(HDC16,DWORD);
-DWORD       WINAPI SetMapperFlags32(HDC32,DWORD);
-#define     SetMapperFlags WINELIB_NAME(SetMapperFlags)
+DWORD       WINAPI SetMapperFlags(HDC,DWORD);
 UINT16      WINAPI SetPaletteEntries16(HPALETTE16,UINT16,UINT16,LPPALETTEENTRY);
-UINT32      WINAPI SetPaletteEntries32(HPALETTE32,UINT32,UINT32,LPPALETTEENTRY);
-#define     SetPaletteEntries WINELIB_NAME(SetPaletteEntries)
+UINT      WINAPI SetPaletteEntries(HPALETTE,UINT,UINT,LPPALETTEENTRY);
 COLORREF    WINAPI SetPixel16(HDC16,INT16,INT16,COLORREF);
-COLORREF    WINAPI SetPixel32(HDC32,INT32,INT32,COLORREF);
-#define     SetPixel WINELIB_NAME(SetPixel)
-BOOL32      WINAPI SetPixelV32(HDC32,INT32,INT32,COLORREF);
-#define     SetPixelV WINELIB_NAME(SetPixelV)
-BOOL32      WINAPI SetPixelFormat(HDC32,int,const PIXELFORMATDESCRIPTOR*);
+COLORREF    WINAPI SetPixel(HDC,INT,INT,COLORREF);
+BOOL      WINAPI SetPixelV(HDC,INT,INT,COLORREF);
+BOOL      WINAPI SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR*);
 INT16       WINAPI SetPolyFillMode16(HDC16,INT16);
-INT32       WINAPI SetPolyFillMode32(HDC32,INT32);
-#define     SetPolyFillMode WINELIB_NAME(SetPolyFillMode)
+INT       WINAPI SetPolyFillMode(HDC,INT);
 VOID        WINAPI SetRectRgn16(HRGN16,INT16,INT16,INT16,INT16);
-VOID        WINAPI SetRectRgn32(HRGN32,INT32,INT32,INT32,INT32);
-#define     SetRectRgn WINELIB_NAME(SetRectRgn)
+VOID        WINAPI SetRectRgn(HRGN,INT,INT,INT,INT);
 INT16       WINAPI SetRelAbs16(HDC16,INT16);
-INT32       WINAPI SetRelAbs32(HDC32,INT32);
-#define     SetRelAbs WINELIB_NAME(SetRelAbs)
+INT       WINAPI SetRelAbs(HDC,INT);
 INT16       WINAPI SetROP216(HDC16,INT16);
-INT32       WINAPI SetROP232(HDC32,INT32);
-#define     SetROP2 WINELIB_NAME(SetROP2)
+INT       WINAPI SetROP2(HDC,INT);
 INT16       WINAPI SetStretchBltMode16(HDC16,INT16);
-INT32       WINAPI SetStretchBltMode32(HDC32,INT32);
-#define     SetStretchBltMode WINELIB_NAME(SetStretchBltMode)
+INT       WINAPI SetStretchBltMode(HDC,INT);
 UINT16      WINAPI SetSystemPaletteUse16(HDC16,UINT16);
-UINT32      WINAPI SetSystemPaletteUse32(HDC32,UINT32);
-#define     SetSystemPaletteUse WINELIB_NAME(SetSystemPaletteUse)
+UINT      WINAPI SetSystemPaletteUse(HDC,UINT);
 UINT16      WINAPI SetTextAlign16(HDC16,UINT16);
-UINT32      WINAPI SetTextAlign32(HDC32,UINT32);
-#define     SetTextAlign WINELIB_NAME(SetTextAlign)
+UINT      WINAPI SetTextAlign(HDC,UINT);
 INT16       WINAPI SetTextCharacterExtra16(HDC16,INT16);
-INT32       WINAPI SetTextCharacterExtra32(HDC32,INT32);
-#define     SetTextCharacterExtra WINELIB_NAME(SetTextCharacterExtra)
+INT       WINAPI SetTextCharacterExtra(HDC,INT);
 COLORREF    WINAPI SetTextColor16(HDC16,COLORREF);
-COLORREF    WINAPI SetTextColor32(HDC32,COLORREF);
-#define     SetTextColor WINELIB_NAME(SetTextColor)
+COLORREF    WINAPI SetTextColor(HDC,COLORREF);
 INT16       WINAPI SetTextJustification16(HDC16,INT16,INT16);
-BOOL32      WINAPI SetTextJustification32(HDC32,INT32,INT32);
-#define     SetTextJustification WINELIB_NAME(SetTextJustification)
+BOOL      WINAPI SetTextJustification(HDC,INT,INT);
 BOOL16      WINAPI SetViewportExtEx16(HDC16,INT16,INT16,LPSIZE16);
-BOOL32      WINAPI SetViewportExtEx32(HDC32,INT32,INT32,LPSIZE32);
-#define     SetViewportExtEx WINELIB_NAME(SetViewportExtEx)
+BOOL      WINAPI SetViewportExtEx(HDC,INT,INT,LPSIZE);
 BOOL16      WINAPI SetViewportOrgEx16(HDC16,INT16,INT16,LPPOINT16);
-BOOL32      WINAPI SetViewportOrgEx32(HDC32,INT32,INT32,LPPOINT32);
-#define     SetViewportOrgEx WINELIB_NAME(SetViewportOrgEx)
+BOOL      WINAPI SetViewportOrgEx(HDC,INT,INT,LPPOINT);
 BOOL16      WINAPI SetWindowExtEx16(HDC16,INT16,INT16,LPSIZE16);
-BOOL32      WINAPI SetWindowExtEx32(HDC32,INT32,INT32,LPSIZE32);
-#define     SetWindowExtEx WINELIB_NAME(SetWindowExtEx)
+BOOL      WINAPI SetWindowExtEx(HDC,INT,INT,LPSIZE);
 BOOL16      WINAPI SetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);
-BOOL32      WINAPI SetWindowOrgEx32(HDC32,INT32,INT32,LPPOINT32);
-#define     SetWindowOrgEx WINELIB_NAME(SetWindowOrgEx)
-HENHMETAFILE32 WINAPI SetWinMetaFileBits(UINT32,CONST BYTE*,HDC32,CONST METAFILEPICT32 *);
+BOOL      WINAPI SetWindowOrgEx(HDC,INT,INT,LPPOINT);
+HENHMETAFILE WINAPI SetWinMetaFileBits(UINT,CONST BYTE*,HDC,CONST METAFILEPICT *);
 INT16       WINAPI StartDoc16(HDC16,const DOCINFO16*);
-INT32       WINAPI StartDoc32A(HDC32,const DOCINFO32A*);
-INT32       WINAPI StartDoc32W(HDC32,const DOCINFO32W*);
+INT       WINAPI StartDocA(HDC,const DOCINFOA*);
+INT       WINAPI StartDocW(HDC,const DOCINFOW*);
 #define     StartDoc WINELIB_NAME_AW(StartDoc)
 INT16       WINAPI StartPage16(HDC16);
-INT32       WINAPI StartPage32(HDC32);
-#define     StartPage WINELIB_NAME(StartPage)
+INT       WINAPI StartPage(HDC);
 INT16       WINAPI EndPage16(HDC16);
-INT32       WINAPI EndPage32(HDC32);
-#define     EndPage WINELIB_NAME(EndPage)
+INT       WINAPI EndPage(HDC);
 BOOL16      WINAPI StretchBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,
                                 INT16,INT16,INT16,DWORD);
-BOOL32      WINAPI StretchBlt32(HDC32,INT32,INT32,INT32,INT32,HDC32,INT32,
-                                INT32,INT32,INT32,DWORD);
-#define     StretchBlt WINELIB_NAME(StretchBlt)
+BOOL      WINAPI StretchBlt(HDC,INT,INT,INT,INT,HDC,INT,
+                                INT,INT,INT,DWORD);
 INT16       WINAPI StretchDIBits16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,
                        INT16,INT16,const VOID*,const BITMAPINFO*,UINT16,DWORD);
-INT32       WINAPI StretchDIBits32(HDC32,INT32,INT32,INT32,INT32,INT32,INT32,
-                       INT32,INT32,const VOID*,const BITMAPINFO*,UINT32,DWORD);
-#define     StretchDIBits WINELIB_NAME(StretchDIBits)
+INT       WINAPI StretchDIBits(HDC,INT,INT,INT,INT,INT,INT,
+                       INT,INT,const VOID*,const BITMAPINFO*,UINT,DWORD);
 BOOL16      WINAPI StrokeAndFillPath16(HDC16);
-BOOL32      WINAPI StrokeAndFillPath32(HDC32);
-#define     StrokeAndFillPath WINELIB_NAME(StrokeAndFillPath)
+BOOL      WINAPI StrokeAndFillPath(HDC);
 BOOL16      WINAPI StrokePath16(HDC16);
-BOOL32      WINAPI StrokePath32(HDC32);
-#define     StrokePath WINELIB_NAME(StrokePath)
-BOOL32      WINAPI SwapBuffers(HDC32);
+BOOL      WINAPI StrokePath(HDC);
+BOOL      WINAPI SwapBuffers(HDC);
 BOOL16      WINAPI TextOut16(HDC16,INT16,INT16,LPCSTR,INT16);
-BOOL32      WINAPI TextOut32A(HDC32,INT32,INT32,LPCSTR,INT32);
-BOOL32      WINAPI TextOut32W(HDC32,INT32,INT32,LPCWSTR,INT32);
+BOOL      WINAPI TextOutA(HDC,INT,INT,LPCSTR,INT);
+BOOL      WINAPI TextOutW(HDC,INT,INT,LPCWSTR,INT);
 #define     TextOut WINELIB_NAME_AW(TextOut)
 BOOL16      WINAPI UnrealizeObject16(HGDIOBJ16);
-BOOL32      WINAPI UnrealizeObject32(HGDIOBJ32);
-#define     UnrealizeObject WINELIB_NAME(UnrealizeObject)
+BOOL      WINAPI UnrealizeObject(HGDIOBJ);
 INT16       WINAPI UpdateColors16(HDC16);
-BOOL32      WINAPI UpdateColors32(HDC32);
-#define     UpdateColors WINELIB_NAME(UpdateColors)
+BOOL      WINAPI UpdateColors(HDC);
 BOOL16      WINAPI WidenPath16(HDC16);
-BOOL32      WINAPI WidenPath32(HDC32);
-#define     WidenPath WINELIB_NAME(WidenPath)
+BOOL      WINAPI WidenPath(HDC);
 
 #endif /* __WINE_WINGDI_H */
diff --git a/include/winioctl.h b/include/winioctl.h
index cc197c7..3d7b7f8 100644
--- a/include/winioctl.h
+++ b/include/winioctl.h
@@ -207,7 +207,7 @@
 #define PARTITION_EXTENDED              0x05      /* Extended partition entry */
 #define PARTITION_HUGE                  0x06      /* Huge partition MS-DOS V4 */
 #define PARTITION_IFS                   0x07      /* IFS Partition */
-#define PARTITION_FAT32                 0x0B      /* FAT32 */
+#define PARTITION_FAT                 0x0B      /* FAT32 */
 #define PARTITION_FAT32_XINT13          0x0C      /* FAT32 using extended int13 services */
 #define PARTITION_XINT13                0x0E      /* Win95 partition using extended int13 services */
 #define PARTITION_XINT13_EXTENDED       0x0F      /* Same as type 5 but uses extended int13 services */
diff --git a/include/winnetwk.h b/include/winnetwk.h
index 9999706..55515b4 100644
--- a/include/winnetwk.h
+++ b/include/winnetwk.h
@@ -13,7 +13,7 @@
 	LPSTR	lpRemoteName;
 	LPSTR	lpComment ;
 	LPSTR	lpProvider;
-} NETRESOURCE32A,*LPNETRESOURCE32A;
+} NETRESOURCEA,*LPNETRESOURCEA;
 
 typedef struct {
 	DWORD	dwScope;
@@ -24,25 +24,25 @@
 	LPWSTR	lpRemoteName;
 	LPWSTR	lpComment ;
 	LPWSTR	lpProvider;
-} NETRESOURCE32W,*LPNETRESOURCE32W;
+} NETRESOURCEW,*LPNETRESOURCEW;
 
 DECL_WINELIB_TYPE_AW(NETRESOURCE)
 DECL_WINELIB_TYPE_AW(LPNETRESOURCE)
 
 typedef struct {
     DWORD cbStructure;       /* size of this structure in bytes */
-    HWND32 hwndOwner;          /* owner window for the dialog */
-    LPNETRESOURCE32A lpConnRes;/* Requested Resource info    */
+    HWND hwndOwner;          /* owner window for the dialog */
+    LPNETRESOURCEA lpConnRes;/* Requested Resource info    */
     DWORD dwFlags;           /* flags (see below) */
     DWORD dwDevNum;          /* number of devices connected to */
-} CONNECTDLGSTRUCT32A, *LPCONNECTDLGSTRUCT32A;
+} CONNECTDLGSTRUCTA, *LPCONNECTDLGSTRUCTA;
 typedef struct {
     DWORD cbStructure;       /* size of this structure in bytes */
-    HWND32 hwndOwner;          /* owner window for the dialog */
-    LPNETRESOURCE32W lpConnRes;/* Requested Resource info    */
+    HWND hwndOwner;          /* owner window for the dialog */
+    LPNETRESOURCEW lpConnRes;/* Requested Resource info    */
     DWORD dwFlags;           /* flags (see below) */
     DWORD dwDevNum;          /* number of devices connected to */
-} CONNECTDLGSTRUCT32W, *LPCONNECTDLGSTRUCT32W;
+} CONNECTDLGSTRUCTW, *LPCONNECTDLGSTRUCTW;
 
 DECL_WINELIB_TYPE_AW(CONNECTDLGSTRUCT)
 DECL_WINELIB_TYPE_AW(LPCONNECTDLGSTRUCT)
@@ -66,18 +66,18 @@
 } NETCONNECTINFOSTRUCT,*LPNETCONNECTINFOSTRUCT;
   
 
-UINT32      WINAPI WNetAddConnection2_32A(LPNETRESOURCE32A,LPCSTR,LPCSTR,DWORD);
-UINT32      WINAPI WNetAddConnection2_32W(LPNETRESOURCE32W,LPCWSTR,LPCWSTR,DWORD);
+UINT      WINAPI WNetAddConnection2A(LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD);
+UINT      WINAPI WNetAddConnection2W(LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD);
 #define     WNetAddConnection2 WINELIB_NAME_AW(WNetAddConnection2_)
-UINT32      WINAPI WNetAddConnection3_32A(HWND32,LPNETRESOURCE32A,LPCSTR,LPCSTR,DWORD);
-UINT32      WINAPI WNetAddConnection3_32W(HWND32,LPNETRESOURCE32W,LPCWSTR,LPCWSTR,DWORD);
+UINT      WINAPI WNetAddConnection3A(HWND,LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD);
+UINT      WINAPI WNetAddConnection3W(HWND,LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD);
 #define     WNetAddConnection3 WINELIB_NAME_AW(WNetAddConnection3_)
-UINT32      WINAPI WNetConnectionDialog1_32(HWND32,DWORD);
-UINT32      WINAPI WNetConnectionDialog1_32A(LPCONNECTDLGSTRUCT32A);
-UINT32      WINAPI WNetConnectionDialog1_32W(LPCONNECTDLGSTRUCT32W);
+UINT      WINAPI WNetConnectionDialog1(HWND,DWORD);
+UINT      WINAPI WNetConnectionDialog1A(LPCONNECTDLGSTRUCTA);
+UINT      WINAPI WNetConnectionDialog1W(LPCONNECTDLGSTRUCTW);
 #define     WNetConnectionDialog1 WINELIB_NAME_AW(WNetConnectionDialog1_)
-UINT32      WINAPI MultinetGetErrorText32A(DWORD,DWORD,DWORD);
-UINT32      WINAPI MultinetGetErrorText32W(DWORD,DWORD,DWORD);
+UINT      WINAPI MultinetGetErrorTextA(DWORD,DWORD,DWORD);
+UINT      WINAPI MultinetGetErrorTextW(DWORD,DWORD,DWORD);
 #define     MultinetGetErrorText WINELIB_NAME_AW(MultinetGetErrorText_)
 
 
diff --git a/include/winnt.h b/include/winnt.h
index 2c4e89d..d97bbc1 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -37,7 +37,7 @@
 #define ANYSIZE_ARRAY 1
 
 #define FIELD_OFFSET(type, field) \
-  ((LONG)(INT32)&(((type *)0)->field))
+  ((LONG)(INT)&(((type *)0)->field))
 
 #define CONTAINING_RECORD(address, type, field) \
   ((type *)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
@@ -47,14 +47,14 @@
 typedef BYTE     BOOLEAN;
 typedef BOOLEAN *PBOOLEAN;
 
-typedef struct _LIST_ENTRY32 {
-  struct _LIST_ENTRY32 *Flink;
-  struct _LIST_ENTRY32 *Blink;
-} LIST_ENTRY32, *PLIST_ENTRY32;
+typedef struct _LIST_ENTRY {
+  struct _LIST_ENTRY *Flink;
+  struct _LIST_ENTRY *Blink;
+} LIST_ENTRY, *PLIST_ENTRY;
 
-typedef struct _SINGLE_LIST_ENTRY32 {
-  struct _SINGLE_LIST_ENTRY32 *Next;
-} SINGLE_LIST_ENTRY32, *PSINGLE_LIST_ENTRY32;
+typedef struct _SINGLE_LIST_ENTRY {
+  struct _SINGLE_LIST_ENTRY *Next;
+} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
 
 /* Heap flags */
 
@@ -145,7 +145,7 @@
     DWORD   SegSs;
 } CONTEXT, *PCONTEXT;
 
-typedef HANDLE32 *PHANDLE;
+typedef HANDLE *PHANDLE;
 
 #ifdef __WINE__
 
diff --git a/include/winpos.h b/include/winpos.h
index 5cd0116..66bbcec 100644
--- a/include/winpos.h
+++ b/include/winpos.h
@@ -10,7 +10,7 @@
 #include "win.h"
 #include "wine/winuser16.h" /* for WINDOWPOS16 */
 
-#define DWP_MAGIC  ((INT32)('W' | ('P' << 8) | ('O' << 16) | ('S' << 24)))
+#define DWP_MAGIC  ((INT)('W' | ('P' << 8) | ('O' << 16) | ('S' << 24)))
 
 /* undocumented SWP flags - from SDK 3.1 */
 #define SWP_NOCLIENTSIZE	0x0800
@@ -18,32 +18,32 @@
 
 typedef struct
 {
-    INT32       actualCount;
-    INT32       suggestedCount;
-    BOOL32      valid;
-    INT32       wMagic;
-    HWND32      hwndParent;
-    WINDOWPOS32 winPos[1];
+    INT       actualCount;
+    INT       suggestedCount;
+    BOOL      valid;
+    INT       wMagic;
+    HWND      hwndParent;
+    WINDOWPOS winPos[1];
 } DWP;
 
-extern BOOL32 WINPOS_RedrawIconTitle( HWND32 hWnd );
-extern BOOL32 WINPOS_ShowIconTitle( WND* pWnd, BOOL32 bShow );
-extern void   WINPOS_GetMinMaxInfo( WND* pWnd, POINT32 *maxSize,
-                                    POINT32 *maxPos, POINT32 *minTrack,
-                                    POINT32 *maxTrack );
+extern BOOL WINPOS_RedrawIconTitle( HWND hWnd );
+extern BOOL WINPOS_ShowIconTitle( WND* pWnd, BOOL bShow );
+extern void   WINPOS_GetMinMaxInfo( WND* pWnd, POINT *maxSize,
+                                    POINT *maxPos, POINT *minTrack,
+                                    POINT *maxTrack );
 extern UINT16 WINPOS_MinMaximize( WND* pWnd, UINT16 cmd, LPRECT16 lpPos);
-extern BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse,
-                                      BOOL32 fChangeFocus );
-extern BOOL32 WINPOS_ChangeActiveWindow( HWND32 hwnd, BOOL32 mouseMsg );
-extern LONG WINPOS_SendNCCalcSize(HWND32 hwnd, BOOL32 calcValidRect,
-                                  RECT32 *newWindowRect, RECT32 *oldWindowRect,
-                                  RECT32 *oldClientRect, WINDOWPOS32 *winpos,
-                                  RECT32 *newClientRect );
+extern BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse,
+                                      BOOL fChangeFocus );
+extern BOOL WINPOS_ChangeActiveWindow( HWND hwnd, BOOL mouseMsg );
+extern LONG WINPOS_SendNCCalcSize(HWND hwnd, BOOL calcValidRect,
+                                  RECT *newWindowRect, RECT *oldWindowRect,
+                                  RECT *oldClientRect, WINDOWPOS *winpos,
+                                  RECT *newClientRect );
 extern LONG WINPOS_HandleWindowPosChanging16(WND *wndPtr, WINDOWPOS16 *winpos);
-extern LONG WINPOS_HandleWindowPosChanging32(WND *wndPtr, WINDOWPOS32 *winpos);
+extern LONG WINPOS_HandleWindowPosChanging(WND *wndPtr, WINDOWPOS *winpos);
 extern INT16 WINPOS_WindowFromPoint( WND* scopeWnd, POINT16 pt, WND **ppWnd );
 extern void WINPOS_CheckInternalPos( WND* wndPtr );
-extern BOOL32 WINPOS_ActivateOtherWindow(WND* pWnd);
-extern BOOL32 WINPOS_CreateInternalPosAtom(void);
+extern BOOL WINPOS_ActivateOtherWindow(WND* pWnd);
+extern BOOL WINPOS_CreateInternalPosAtom(void);
 
 #endif  /* __WINE_WINPOS_H */
diff --git a/include/winproc.h b/include/winproc.h
index df76418..bc92894 100644
--- a/include/winproc.h
+++ b/include/winproc.h
@@ -35,44 +35,44 @@
 
 typedef struct
 {
-    WPARAM32    wParam;
+    WPARAM    wParam;
     LPARAM	lParam;
     LRESULT	lResult;
-} MSGPARAM32;
+} MSGPARAM;
 
-extern BOOL32 WINPROC_Init(void);
+extern BOOL WINPROC_Init(void);
 extern WNDPROC16 WINPROC_GetProc( HWINDOWPROC proc, WINDOWPROCTYPE type );
-extern BOOL32 WINPROC_SetProc( HWINDOWPROC *pFirst, WNDPROC16 func,
+extern BOOL WINPROC_SetProc( HWINDOWPROC *pFirst, WNDPROC16 func,
                                WINDOWPROCTYPE type, WINDOWPROCUSER user );
 extern void WINPROC_FreeProc( HWINDOWPROC proc, WINDOWPROCUSER user );
 extern WINDOWPROCTYPE WINPROC_GetProcType( HWINDOWPROC proc );
 
-extern INT32 WINPROC_MapMsg32ATo32W( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
+extern INT WINPROC_MapMsg32ATo32W( HWND hwnd, UINT msg, WPARAM wParam,
                                      LPARAM *plparam );
-extern INT32 WINPROC_MapMsg32WTo32A( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
+extern INT WINPROC_MapMsg32WTo32A( HWND hwnd, UINT msg, WPARAM wParam,
                                      LPARAM *plparam );
-extern INT32 WINPROC_MapMsg16To32A( UINT16 msg16, WPARAM16 wParam16,
-                                    UINT32 *pmsg32, WPARAM32 *pwparam32,
+extern INT WINPROC_MapMsg16To32A( UINT16 msg16, WPARAM16 wParam16,
+                                    UINT *pmsg32, WPARAM *pwparam32,
                                     LPARAM *plparam );
-extern INT32 WINPROC_MapMsg16To32W( HWND16, UINT16 msg16, WPARAM16 wParam16,
-                                    UINT32 *pmsg32, WPARAM32 *pwparam32,
+extern INT WINPROC_MapMsg16To32W( HWND16, UINT16 msg16, WPARAM16 wParam16,
+                                    UINT *pmsg32, WPARAM *pwparam32,
                                     LPARAM *plparam );
-extern INT32 WINPROC_MapMsg32ATo16( HWND32 hwnd, UINT32 msg32,
-                                    WPARAM32 wParam32, UINT16 *pmsg16,
+extern INT WINPROC_MapMsg32ATo16( HWND hwnd, UINT msg32,
+                                    WPARAM wParam32, UINT16 *pmsg16,
                                     WPARAM16 *pwparam16, LPARAM *plparam );
-extern INT32 WINPROC_MapMsg32WTo16( HWND32 hwnd, UINT32 msg32,
-                                    WPARAM32 wParam32, UINT16 *pmsg16,
+extern INT WINPROC_MapMsg32WTo16( HWND hwnd, UINT msg32,
+                                    WPARAM wParam32, UINT16 *pmsg16,
                                     WPARAM16 *pwparam16, LPARAM *plparam );
-extern void WINPROC_UnmapMsg32ATo32W( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
+extern void WINPROC_UnmapMsg32ATo32W( HWND hwnd, UINT msg, WPARAM wParam,
                                       LPARAM lParam );
-extern void WINPROC_UnmapMsg32WTo32A( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
+extern void WINPROC_UnmapMsg32WTo32A( HWND hwnd, UINT msg, WPARAM wParam,
                                       LPARAM lParam );
-extern LRESULT WINPROC_UnmapMsg16To32A( HWND16 hwnd, UINT32 msg, WPARAM32 wParam,
+extern LRESULT WINPROC_UnmapMsg16To32A( HWND16 hwnd, UINT msg, WPARAM wParam,
                                         LPARAM lParam, LRESULT result );
-extern LRESULT WINPROC_UnmapMsg16To32W( HWND16 hwnd, UINT32 msg, WPARAM32 wParam,
+extern LRESULT WINPROC_UnmapMsg16To32W( HWND16 hwnd, UINT msg, WPARAM wParam,
                                         LPARAM lParam, LRESULT result );
-extern void WINPROC_UnmapMsg32ATo16( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
+extern void WINPROC_UnmapMsg32ATo16( HWND hwnd, UINT msg, WPARAM wParam,
                                      LPARAM lParam, MSGPARAM16* pm16 );
-extern void WINPROC_UnmapMsg32WTo16( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
+extern void WINPROC_UnmapMsg32WTo16( HWND hwnd, UINT msg, WPARAM wParam,
                                      LPARAM lParam, MSGPARAM16* pm16 );
 #endif  /* __WINE_WINPROC_H */
diff --git a/include/winreg.h b/include/winreg.h
index 8c45d71..faa726e 100644
--- a/include/winreg.h
+++ b/include/winreg.h
@@ -108,75 +108,75 @@
     DWORD dwWaitHint;
 } SERVICE_STATUS, *LPSERVICE_STATUS;
 
-HANDLE32    WINAPI OpenSCManager32A(LPCSTR,LPCSTR,DWORD);
-HANDLE32    WINAPI OpenSCManager32W(LPCWSTR,LPCWSTR,DWORD);
+HANDLE    WINAPI OpenSCManagerA(LPCSTR,LPCSTR,DWORD);
+HANDLE    WINAPI OpenSCManagerW(LPCWSTR,LPCWSTR,DWORD);
 #define     OpenSCManager WINELIB_NAME_AW(OpenSCManager)
-HANDLE32    WINAPI OpenService32A(HANDLE32,LPCSTR,DWORD);
-HANDLE32    WINAPI OpenService32W(HANDLE32,LPCWSTR,DWORD);
+HANDLE    WINAPI OpenServiceA(HANDLE,LPCSTR,DWORD);
+HANDLE    WINAPI OpenServiceW(HANDLE,LPCWSTR,DWORD);
 #define     OpenService WINELIB_NAME_AW(OpenService)
-BOOL32      WINAPI LookupPrivilegeValue32A(LPCSTR,LPCSTR,LPVOID);
-BOOL32      WINAPI LookupPrivilegeValue32W(LPCWSTR,LPCWSTR,LPVOID);
+BOOL      WINAPI LookupPrivilegeValueA(LPCSTR,LPCSTR,LPVOID);
+BOOL      WINAPI LookupPrivilegeValueW(LPCWSTR,LPCWSTR,LPVOID);
 #define     LookupPrivilegeValue WINELIB_NAME_AW(LookupPrivilegeValue)
-HANDLE32    WINAPI RegisterEventSource32A(LPCSTR,LPCSTR);
-HANDLE32    WINAPI RegisterEventSource32W(LPCWSTR,LPCWSTR);
+HANDLE    WINAPI RegisterEventSourceA(LPCSTR,LPCSTR);
+HANDLE    WINAPI RegisterEventSourceW(LPCWSTR,LPCWSTR);
 #define     RegisterEventSource WINELIB_NAME_AW(RegisterEventSource)
-DWORD       WINAPI RegCreateKeyEx32A(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,
+DWORD       WINAPI RegCreateKeyExA(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,
                                      LPSECURITY_ATTRIBUTES,LPHKEY,LPDWORD);
-DWORD       WINAPI RegCreateKeyEx32W(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,
+DWORD       WINAPI RegCreateKeyExW(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,
                                      LPSECURITY_ATTRIBUTES,LPHKEY,LPDWORD);
 #define     RegCreateKeyEx WINELIB_NAME_AW(RegCreateKeyEx)
-LONG        WINAPI RegSaveKey32A(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES);
-LONG        WINAPI RegSaveKey32W(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES);
+LONG        WINAPI RegSaveKeyA(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES);
+LONG        WINAPI RegSaveKeyW(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES);
 #define     RegSaveKey WINELIB_NAME_AW(RegSaveKey)
 LONG        WINAPI RegSetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
-BOOL32      WINAPI CloseServiceHandle(HANDLE32);
-BOOL32      WINAPI ControlService(HANDLE32,DWORD,LPSERVICE_STATUS);
-BOOL32      WINAPI DeleteService(HANDLE32);
-BOOL32      WINAPI DeregisterEventSource(HANDLE32);
-BOOL32      WINAPI GetFileSecurity32A(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
-BOOL32      WINAPI GetFileSecurity32W(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+BOOL      WINAPI CloseServiceHandle(HANDLE);
+BOOL      WINAPI ControlService(HANDLE,DWORD,LPSERVICE_STATUS);
+BOOL      WINAPI DeleteService(HANDLE);
+BOOL      WINAPI DeregisterEventSource(HANDLE);
+BOOL      WINAPI GetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+BOOL      WINAPI GetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
 #define     GetFileSecurity WINELIB_NAME_AW(GetFileSecurity)
-BOOL32      WINAPI GetUserName32A(LPSTR,LPDWORD);
-BOOL32      WINAPI GetUserName32W(LPWSTR,LPDWORD);
+BOOL      WINAPI GetUserNameA(LPSTR,LPDWORD);
+BOOL      WINAPI GetUserNameW(LPWSTR,LPDWORD);
 #define     GetUserName WINELIB_NAME_AW(GetUserName)
-BOOL32      WINAPI OpenProcessToken(HANDLE32,DWORD,HANDLE32*);
-LONG        WINAPI RegConnectRegistry32A(LPCSTR,HKEY,LPHKEY);
-LONG        WINAPI RegConnectRegistry32W(LPCWSTR,HKEY,LPHKEY);
+BOOL      WINAPI OpenProcessToken(HANDLE,DWORD,HANDLE*);
+LONG        WINAPI RegConnectRegistryA(LPCSTR,HKEY,LPHKEY);
+LONG        WINAPI RegConnectRegistryW(LPCWSTR,HKEY,LPHKEY);
 #define     RegConnectRegistry WINELIB_NAME_AW(RegConnectRegistry)
-DWORD       WINAPI RegEnumKeyEx32A(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPSTR,
+DWORD       WINAPI RegEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPSTR,
                                    LPDWORD,LPFILETIME);
-DWORD       WINAPI RegEnumKeyEx32W(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPWSTR,
+DWORD       WINAPI RegEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPWSTR,
                                    LPDWORD,LPFILETIME);
 #define     RegEnumKeyEx WINELIB_NAME_AW(RegEnumKeyEx)
 LONG        WINAPI RegGetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,LPDWORD);
-LONG        WINAPI RegLoadKey32A(HKEY,LPCSTR,LPCSTR);
-LONG        WINAPI RegLoadKey32W(HKEY,LPCWSTR,LPCWSTR);
+LONG        WINAPI RegLoadKeyA(HKEY,LPCSTR,LPCSTR);
+LONG        WINAPI RegLoadKeyW(HKEY,LPCWSTR,LPCWSTR);
 #define     RegLoadKey WINELIB_NAME_AW(RegLoadKey)
-LONG        WINAPI RegNotifyChangeKeyValue(HKEY,BOOL32,DWORD,HANDLE32,BOOL32);
-DWORD       WINAPI RegOpenKeyEx32W(HKEY,LPCWSTR,DWORD,REGSAM,LPHKEY);
-DWORD       WINAPI RegOpenKeyEx32A(HKEY,LPCSTR,DWORD,REGSAM,LPHKEY);
+LONG        WINAPI RegNotifyChangeKeyValue(HKEY,BOOL,DWORD,HANDLE,BOOL);
+DWORD       WINAPI RegOpenKeyExW(HKEY,LPCWSTR,DWORD,REGSAM,LPHKEY);
+DWORD       WINAPI RegOpenKeyExA(HKEY,LPCSTR,DWORD,REGSAM,LPHKEY);
 #define     RegOpenKeyEx WINELIB_NAME_AW(RegOpenKeyEx)
-DWORD       WINAPI RegQueryInfoKey32W(HKEY,LPWSTR,LPDWORD,LPDWORD,LPDWORD,
+DWORD       WINAPI RegQueryInfoKeyW(HKEY,LPWSTR,LPDWORD,LPDWORD,LPDWORD,
                                       LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,
                                       LPDWORD,LPFILETIME);
-DWORD       WINAPI RegQueryInfoKey32A(HKEY,LPSTR,LPDWORD,LPDWORD,LPDWORD,
+DWORD       WINAPI RegQueryInfoKeyA(HKEY,LPSTR,LPDWORD,LPDWORD,LPDWORD,
                                       LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,
                                       LPDWORD,LPFILETIME);
 #define     RegQueryInfoKey WINELIB_NAME_AW(RegQueryInfoKey)
-LONG        WINAPI RegReplaceKey32A(HKEY,LPCSTR,LPCSTR,LPCSTR);
-LONG        WINAPI RegReplaceKey32W(HKEY,LPCWSTR,LPCWSTR,LPCWSTR);
+LONG        WINAPI RegReplaceKeyA(HKEY,LPCSTR,LPCSTR,LPCSTR);
+LONG        WINAPI RegReplaceKeyW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR);
 #define     RegReplaceKey WINELIB_NAME_AW(RegReplaceKey)
-LONG        WINAPI RegRestoreKey32A(HKEY,LPCSTR,DWORD);
-LONG        WINAPI RegRestoreKey32W(HKEY,LPCWSTR,DWORD);
+LONG        WINAPI RegRestoreKeyA(HKEY,LPCSTR,DWORD);
+LONG        WINAPI RegRestoreKeyW(HKEY,LPCWSTR,DWORD);
 #define     RegRestoreKey WINELIB_NAME_AW(RegRestoreKey)
-LONG        WINAPI RegUnLoadKey32A(HKEY,LPCSTR);
-LONG        WINAPI RegUnLoadKey32W(HKEY,LPCWSTR);
+LONG        WINAPI RegUnLoadKeyA(HKEY,LPCSTR);
+LONG        WINAPI RegUnLoadKeyW(HKEY,LPCWSTR);
 #define     RegUnLoadKey WINELIB_NAME_AW(RegUnLoadKey)
-BOOL32      WINAPI SetFileSecurity32A(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
-BOOL32      WINAPI SetFileSecurity32W(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+BOOL      WINAPI SetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+BOOL      WINAPI SetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
 #define     SetFileSecurity WINELIB_NAME_AW(SetFileSecurity)
-BOOL32      WINAPI StartService32A(HANDLE32,DWORD,LPCSTR*);
-BOOL32      WINAPI StartService32W(HANDLE32,DWORD,LPCWSTR*);
+BOOL      WINAPI StartServiceA(HANDLE,DWORD,LPCSTR*);
+BOOL      WINAPI StartServiceW(HANDLE,DWORD,LPCWSTR*);
 #define     StartService WINELIB_NAME_AW(StartService)
 
 /* Declarations for functions that are the same in Win16 and Win32 */
@@ -184,35 +184,35 @@
 DWORD       WINAPI RegCloseKey(HKEY);
 DWORD       WINAPI RegFlushKey(HKEY);
 
-DWORD       WINAPI RegCreateKey32A(HKEY,LPCSTR,LPHKEY);
-DWORD       WINAPI RegCreateKey32W(HKEY,LPCWSTR,LPHKEY);
+DWORD       WINAPI RegCreateKeyA(HKEY,LPCSTR,LPHKEY);
+DWORD       WINAPI RegCreateKeyW(HKEY,LPCWSTR,LPHKEY);
 #define     RegCreateKey WINELIB_NAME_AW(RegCreateKey)
-DWORD       WINAPI RegDeleteKey32A(HKEY,LPCSTR);
-DWORD       WINAPI RegDeleteKey32W(HKEY,LPWSTR);
+DWORD       WINAPI RegDeleteKeyA(HKEY,LPCSTR);
+DWORD       WINAPI RegDeleteKeyW(HKEY,LPWSTR);
 #define     RegDeleteKey WINELIB_NAME_AW(RegDeleteKey)
-DWORD       WINAPI RegDeleteValue32A(HKEY,LPSTR);
-DWORD       WINAPI RegDeleteValue32W(HKEY,LPWSTR);
+DWORD       WINAPI RegDeleteValueA(HKEY,LPSTR);
+DWORD       WINAPI RegDeleteValueW(HKEY,LPWSTR);
 #define     RegDeleteValue WINELIB_NAME_AW(RegDeleteValue)
-DWORD       WINAPI RegEnumKey32A(HKEY,DWORD,LPSTR,DWORD);
-DWORD       WINAPI RegEnumKey32W(HKEY,DWORD,LPWSTR,DWORD);
+DWORD       WINAPI RegEnumKeyA(HKEY,DWORD,LPSTR,DWORD);
+DWORD       WINAPI RegEnumKeyW(HKEY,DWORD,LPWSTR,DWORD);
 #define     RegEnumKey WINELIB_NAME_AW(RegEnumKey)
-DWORD       WINAPI RegEnumValue32A(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
-DWORD       WINAPI RegEnumValue32W(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+DWORD       WINAPI RegEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+DWORD       WINAPI RegEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
 #define     RegEnumValue WINELIB_NAME_AW(RegEnumValue)
-DWORD       WINAPI RegOpenKey32A(HKEY,LPCSTR,LPHKEY);
-DWORD       WINAPI RegOpenKey32W(HKEY,LPCWSTR,LPHKEY);
+DWORD       WINAPI RegOpenKeyA(HKEY,LPCSTR,LPHKEY);
+DWORD       WINAPI RegOpenKeyW(HKEY,LPCWSTR,LPHKEY);
 #define     RegOpenKey WINELIB_NAME_AW(RegOpenKey)
-DWORD       WINAPI RegQueryValue32A(HKEY,LPCSTR,LPSTR,LPLONG);
-DWORD       WINAPI RegQueryValue32W(HKEY,LPCWSTR,LPWSTR,LPLONG);
+DWORD       WINAPI RegQueryValueA(HKEY,LPCSTR,LPSTR,LPLONG);
+DWORD       WINAPI RegQueryValueW(HKEY,LPCWSTR,LPWSTR,LPLONG);
 #define     RegQueryValue WINELIB_NAME_AW(RegQueryValue)
-DWORD       WINAPI RegQueryValueEx32A(HKEY,LPSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
-DWORD       WINAPI RegQueryValueEx32W(HKEY,LPWSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+DWORD       WINAPI RegQueryValueExA(HKEY,LPSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+DWORD       WINAPI RegQueryValueExW(HKEY,LPWSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
 #define     RegQueryValueEx WINELIB_NAME_AW(RegQueryValueEx)
-DWORD       WINAPI RegSetValue32A(HKEY,LPCSTR,DWORD,LPCSTR,DWORD);
-DWORD       WINAPI RegSetValue32W(HKEY,LPCWSTR,DWORD,LPCWSTR,DWORD);
+DWORD       WINAPI RegSetValueA(HKEY,LPCSTR,DWORD,LPCSTR,DWORD);
+DWORD       WINAPI RegSetValueW(HKEY,LPCWSTR,DWORD,LPCWSTR,DWORD);
 #define     RegSetValue WINELIB_NAME_AW(RegSetValue)
-DWORD       WINAPI RegSetValueEx32A(HKEY,LPSTR,DWORD,DWORD,LPBYTE,DWORD);
-DWORD       WINAPI RegSetValueEx32W(HKEY,LPWSTR,DWORD,DWORD,LPBYTE,DWORD);
+DWORD       WINAPI RegSetValueExA(HKEY,LPSTR,DWORD,DWORD,LPBYTE,DWORD);
+DWORD       WINAPI RegSetValueExW(HKEY,LPWSTR,DWORD,DWORD,LPBYTE,DWORD);
 #define     RegSetValueEx WINELIB_NAME_AW(RegSetValueEx)
 
 #endif  /* __WINE_WINREG_H */
diff --git a/include/winsock.h b/include/winsock.h
index 6961d96..84f0153 100644
--- a/include/winsock.h
+++ b/include/winsock.h
@@ -34,7 +34,7 @@
 /* Win16 socket-related types */
 
 typedef UINT16		SOCKET16;
-typedef UINT32		SOCKET32;
+typedef UINT		SOCKET;
 
 typedef struct ws_hostent
 {
@@ -65,7 +65,7 @@
         SEGPTR  n_name;         /* official name of net */
         SEGPTR  n_aliases;      /* alias list */
         INT16   n_addrtype;     /* net address type */
-        INT32   n_net;          /* network # */
+        INT   n_net;          /* network # */
 } _ws_netent;
 
 typedef struct sockaddr		ws_sockaddr;
@@ -78,15 +78,14 @@
 
 typedef struct
 {
-        UINT32    fd_count;               /* how many are SET? */
-        SOCKET32  fd_array[FD_SETSIZE];   /* an array of SOCKETs */
+        UINT    fd_count;               /* how many are SET? */
+        SOCKET  fd_array[FD_SETSIZE];   /* an array of SOCKETs */
 } ws_fd_set32;
 
 /* ws_fd_set operations */
 
 INT16 WINAPI __WSAFDIsSet16( SOCKET16, ws_fd_set16 * );
-INT32 WINAPI __WSAFDIsSet32( SOCKET32, ws_fd_set32 * );
-#define __WSAFDIsSet WINELIB_NAME(__WSAFDIsSet)
+INT WINAPI __WSAFDIsSet( SOCKET, ws_fd_set32 * );
 
 #define __WS_FD_CLR(fd, set, cast) do { \
     UINT16 __i; \
@@ -106,24 +105,20 @@
     } \
 } while(0)
 #define WS_FD_CLR16(fd, set)	__WS_FD_CLR((fd),(set), ws_fd_set16)
-#define WS_FD_CLR32(fd, set)	__WS_FD_CLR((fd),(set), ws_fd_set32)
-#define WS_FD_CLR 		WINELIB_NAME(WS_FD_CLR)
+#define WS_FD_CLR(fd, set)	__WS_FD_CLR((fd),(set), ws_fd_set32)
 
 #define __WS_FD_SET(fd, set, cast) do { \
     if (((cast*)(set))->fd_count < FD_SETSIZE) \
         ((cast*)(set))->fd_array[((cast*)(set))->fd_count++]=(fd);\
 } while(0)
 #define WS_FD_SET16(fd, set)    __WS_FD_SET((fd),(set), ws_fd_set16)
-#define WS_FD_SET32(fd, set)    __WS_FD_SET((fd),(set), ws_fd_set32)
-#define WS_FD_SET		WINELIB_NAME(WS_FD_SET)
+#define WS_FD_SET(fd, set)    __WS_FD_SET((fd),(set), ws_fd_set32)
 
 #define WS_FD_ZERO16(set) (((ws_fd_set16*)(set))->fd_count=0)
-#define WS_FD_ZERO32(set) (((ws_fd_set32*)(set))->fd_count=0)
-#define WS_FD_ZERO		WINELIB_NAME(WS_FD_ZERO)
+#define WS_FD_ZERO(set) (((ws_fd_set32*)(set))->fd_count=0)
 
 #define WS_FD_ISSET16(fd, set) __WSAFDIsSet16((SOCKET16)(fd), (ws_fd_set16*)(set))
-#define WS_FD_ISSET32(fd, set) __WSAFDIsSet32((SOCKET32)(fd), (ws_fd_set32*)(set))
-#define WS_FD_ISSET		WINELIB_NAME(WS_FD_ISSET)
+#define WS_FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (ws_fd_set32*)(set))
 
 /* 
  * Internet address (old style... should be updated) 
@@ -134,7 +129,7 @@
         union {
                 struct { BYTE   s_b1,s_b2,s_b3,s_b4; } S_un_b;
                 struct { UINT16 s_w1,s_w2; } S_un_w;
-                UINT32 S_addr;
+                UINT S_addr;
         } S_un;
 #define ws_addr  S_un.S_addr		/* can be used for most tcp & ip code */
 #define ws_host  S_un.S_un_b.s_b2	/* host on imp */
@@ -174,11 +169,9 @@
  * SOCKET type is unsigned.
  */
 #define INVALID_SOCKET16 	   (~0)
-#define INVALID_SOCKET32 	   (~0)
+#define INVALID_SOCKET 	   (~0)
 #define SOCKET_ERROR               (-1)
 
-DECL_WINELIB_TYPE(INVALID_SOCKET)
-DECL_WINELIB_TYPE(SOCKET)
 
 /*
  * Types
@@ -205,7 +198,7 @@
 #define WS_SO_LINGER       0x0080          /* linger on close if data present */
 #define WS_SO_OOBINLINE    0x0100          /* leave received OOB data in line */
 
-#define WS_SO_DONTLINGER   (UINT32)(~WS_SO_LINGER)
+#define WS_SO_DONTLINGER   (UINT)(~WS_SO_LINGER)
 
 /*
  * Additional options.
@@ -224,8 +217,8 @@
 #define WS_IOC_OUT         0x40000000      /* copy out parameters */
 #define WS_IOC_IN          0x80000000      /* copy in parameters */
 #define WS_IOC_INOUT       (WS_IOC_IN|WS_IOC_OUT)
-#define WS_IOR(x,y,t)      (WS_IOC_OUT|(((UINT32)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))
-#define WS_IOW(x,y,t)      (WS_IOC_IN|(((UINT32)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))
+#define WS_IOR(x,y,t)      (WS_IOC_OUT|(((UINT)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))
+#define WS_IOW(x,y,t)      (WS_IOC_IN|(((UINT)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))
 
 /*
  * Socket I/O flags (supported by spec 1.1)
@@ -370,65 +363,53 @@
 /* Microsoft Windows Extension function prototypes */
 
 INT16     WINAPI WSAStartup16(UINT16 wVersionRequired, LPWSADATA lpWSAData);
-INT32     WINAPI WSAStartup32(UINT32 wVersionRequired, LPWSADATA lpWSAData);
-#define   WSAStartup WINELIB_NAME(WSAStartup)
+INT     WINAPI WSAStartup(UINT wVersionRequired, LPWSADATA lpWSAData);
 void      WINAPI WSASetLastError16(INT16 iError);
-void      WINAPI WSASetLastError32(INT32 iError);
-#define   WSASetLastError WINELIB_NAME(WSASetLastError)
-INT32     WINAPI WSACleanup(void);
-INT32     WINAPI WSAGetLastError(void);
-BOOL32    WINAPI WSAIsBlocking(void);
-INT32     WINAPI WSACancelBlockingCall(void);
+void      WINAPI WSASetLastError(INT iError);
+INT     WINAPI WSACleanup(void);
+INT     WINAPI WSAGetLastError(void);
+BOOL    WINAPI WSAIsBlocking(void);
+INT     WINAPI WSACancelBlockingCall(void);
 INT16     WINAPI WSAUnhookBlockingHook16(void);
-INT32     WINAPI WSAUnhookBlockingHook32(void);
-#define   WSAUnhookBlockingHook WINELIB_NAME(WSAUnhookBlockingHook)
+INT     WINAPI WSAUnhookBlockingHook(void);
 FARPROC16 WINAPI WSASetBlockingHook16(FARPROC16 lpBlockFunc);
-FARPROC32 WINAPI WSASetBlockingHook32(FARPROC32 lpBlockFunc);
-#define   WSASetBlockingHook WINELIB_NAME(WSASetBlockingHook)
+FARPROC WINAPI WSASetBlockingHook(FARPROC lpBlockFunc);
 
 HANDLE16  WINAPI WSAAsyncGetServByName16(HWND16 hWnd, UINT16 wMsg, LPCSTR name, LPCSTR proto,
                                          SEGPTR buf, INT16 buflen);
-HANDLE32  WINAPI WSAAsyncGetServByName32(HWND32 hWnd, UINT32 uMsg, LPCSTR name, LPCSTR proto,
-					 LPSTR sbuf, INT32 buflen);
-#define   WSAAsyncGetServByName WINELIB_NAME(WSAAsyncGetServByName)
+HANDLE  WINAPI WSAAsyncGetServByName(HWND hWnd, UINT uMsg, LPCSTR name, LPCSTR proto,
+					 LPSTR sbuf, INT buflen);
 
 HANDLE16  WINAPI WSAAsyncGetServByPort16(HWND16 hWnd, UINT16 wMsg, INT16 port,
                                          LPCSTR proto, SEGPTR buf, INT16 buflen);
-HANDLE32  WINAPI WSAAsyncGetServByPort32(HWND32 hWnd, UINT32 uMsg, INT32 port,
-					 LPCSTR proto, LPSTR sbuf, INT32 buflen);
-#define   WSAAsyncGetServByPort WINELIB_NAME(WSAAsyncGetServByPort)
+HANDLE  WINAPI WSAAsyncGetServByPort(HWND hWnd, UINT uMsg, INT port,
+					 LPCSTR proto, LPSTR sbuf, INT buflen);
 
 HANDLE16  WINAPI WSAAsyncGetProtoByName16(HWND16 hWnd, UINT16 wMsg,
                                           LPCSTR name, SEGPTR buf, INT16 buflen);
-HANDLE32  WINAPI WSAAsyncGetProtoByName32(HWND32 hWnd, UINT32 uMsg,
-					  LPCSTR name, LPSTR sbuf, INT32 buflen);
-#define   WSAAsyncGetProtoByByName WINELIB_NAME(WSAAsyncGetProtoByByName)
+HANDLE  WINAPI WSAAsyncGetProtoByName(HWND hWnd, UINT uMsg,
+					  LPCSTR name, LPSTR sbuf, INT buflen);
 
 HANDLE16  WINAPI WSAAsyncGetProtoByNumber16(HWND16 hWnd, UINT16 wMsg,
                                             INT16 number, SEGPTR buf, INT16 buflen);
-HANDLE32  WINAPI WSAAsyncGetProtoByNumber32(HWND32 hWnd, UINT32 uMsg,
-					    INT32 number, LPSTR sbuf, INT32 buflen);
-#define   WSAAsyncGetProtoByNumber WINELIB_NAME(WSAAsyncGetProtoByNumber)
+HANDLE  WINAPI WSAAsyncGetProtoByNumber(HWND hWnd, UINT uMsg,
+					    INT number, LPSTR sbuf, INT buflen);
 
 HANDLE16  WINAPI WSAAsyncGetHostByName16(HWND16 hWnd, UINT16 wMsg,
                                          LPCSTR name, SEGPTR buf, INT16 buflen);
-HANDLE32  WINAPI WSAAsyncGetHostByName32(HWND32 hWnd, UINT32 uMsg,
-					 LPCSTR name, LPSTR sbuf, INT32 buflen);
-#define   WSAAsyncGetHostByName WINELIB_NAME(WSAAsyncGetHostByName)
+HANDLE  WINAPI WSAAsyncGetHostByName(HWND hWnd, UINT uMsg,
+					 LPCSTR name, LPSTR sbuf, INT buflen);
 
 HANDLE16  WINAPI WSAAsyncGetHostByAddr16(HWND16 hWnd, UINT16 wMsg, LPCSTR addr,
                               INT16 len, INT16 type, SEGPTR buf, INT16 buflen);
-HANDLE32  WINAPI WSAAsyncGetHostByAddr32(HWND32 hWnd, UINT32 uMsg, LPCSTR addr,
-			      INT32 len, INT32 type, LPSTR sbuf, INT32 buflen);
-#define   WSAAsyncGetHostByAddr WINELIB_NAME(WSAAsyncGetHostByAddr)
+HANDLE  WINAPI WSAAsyncGetHostByAddr(HWND hWnd, UINT uMsg, LPCSTR addr,
+			      INT len, INT type, LPSTR sbuf, INT buflen);
 
 INT16 	  WINAPI WSACancelAsyncRequest16(HANDLE16 hAsyncTaskHandle);
-INT32     WINAPI WSACancelAsyncRequest32(HANDLE32 hAsyncTaskHandle);
-#define   WSACancelAsyncRequest WINELIB_NAME(WSACancelAsyncRequest)
+INT     WINAPI WSACancelAsyncRequest(HANDLE hAsyncTaskHandle);
 
-INT16     WINAPI WSAAsyncSelect16(SOCKET16 s, HWND16 hWnd, UINT16 wMsg, UINT32 lEvent);
-INT32     WINAPI WSAAsyncSelect32(SOCKET32 s, HWND32 hWnd, UINT32 uMsg, UINT32 lEvent);
-#define   WSAAsyncSelect WINELIB_NAME(WSAAsyncSelect)
+INT16     WINAPI WSAAsyncSelect16(SOCKET16 s, HWND16 hWnd, UINT16 wMsg, UINT lEvent);
+INT     WINAPI WSAAsyncSelect(SOCKET s, HWND hWnd, UINT uMsg, UINT lEvent);
 
 
 /*
@@ -469,7 +450,7 @@
 struct ws_sockaddr_ipx
 {
 	INT16		sipx_family	__attribute__((packed));
-	UINT32		sipx_network	__attribute__((packed));
+	UINT		sipx_network	__attribute__((packed));
 	CHAR		sipx_node[6]	__attribute__((packed));
 	UINT16		sipx_port	__attribute__((packed));
 };
@@ -554,8 +535,8 @@
 
   /* custom data */
 
-  HWND32        hWnd;				/* hWnd to post */ 
-  UINT32        uMsg;				/* uMsg message to. */
+  HWND        hWnd;				/* hWnd to post */ 
+  UINT        uMsg;				/* uMsg message to. */
 
   union 
   {
@@ -564,8 +545,8 @@
     void*  ptr_base;
   } 		b;				/* buffer to copy result to */
 
-  UINT32        buflen;
-  UINT32	flags;				/* WSMSG_ASYNC_... */
+  UINT        buflen;
+  UINT	flags;				/* WSMSG_ASYNC_... */
 } ws_async_op;
 
 #define WSMSG_ASYNC_HOSTBYNAME  0x0001
@@ -584,8 +565,8 @@
   struct __sop *next, *prev;
 
   struct __ws*  pws;
-  HWND32        hWnd;
-  UINT32        uMsg;
+  HWND        hWnd;
+  UINT        uMsg;
 } ws_select_op;
 
 typedef struct	__ws	/* socket */
@@ -599,14 +580,14 @@
 #define WS_MAX_UDP_DATAGRAM             1024
 
 #define WSI_BLOCKINGCALL	0x00000001	/* per-thread info flags */
-#define WSI_BLOCKINGHOOK32	0x00000002	/* 32-bit callback */
+#define WSI_BLOCKINGHOOK	0x00000002	/* 32-bit callback */
 
 typedef struct _WSINFO
 {
   struct _WSINFO*       prev,*next;
 
   unsigned		flags;
-  INT32			err;			/* WSAGetLastError() return value */
+  INT			err;			/* WSAGetLastError() return value */
   INT16			num_startup;		/* reference counter */
   INT16			num_async_rq;
   INT16			last_free;		/* entry in the socket table */
@@ -635,9 +616,9 @@
 void WS_do_async_getserv(LPWSINFO, unsigned);
 
 /* winsock_dns.c */
-extern HANDLE16 __WSAsyncDBQuery(LPWSINFO pwsi, HWND32 hWnd, UINT32 uMsg, 
-    INT32 type, LPCSTR init, INT32 len, LPCSTR proto, void* sbuf, 
-    INT32 buflen, UINT32 flag);
+extern HANDLE16 __WSAsyncDBQuery(LPWSINFO pwsi, HWND hWnd, UINT uMsg, 
+    INT type, LPCSTR init, INT len, LPCSTR proto, void* sbuf, 
+    INT buflen, UINT flag);
 
 int WINSOCK_async_io(int fd, int async);
 int WINSOCK_unblock_io(int fd, int noblock);
@@ -649,12 +630,12 @@
 
 void WINSOCK_cancel_task_aops(HTASK16, void (*__memfree)(void*) );
 
-BOOL32 WINSOCK_HandleIO(int* fd_max, int num_pending, fd_set pending_set[3], fd_set master_set[3] );
+BOOL WINSOCK_HandleIO(int* fd_max, int num_pending, fd_set pending_set[3], fd_set master_set[3] );
 void   WINSOCK_Shutdown(void);
 UINT16 wsaErrno(void);
 UINT16 wsaHerrno(void);
 
-extern INT32 WINSOCK_DeleteTaskWSI( TDB* pTask, struct _WSINFO* );
+extern INT WINSOCK_DeleteTaskWSI( TDB* pTask, struct _WSINFO* );
 
 #endif  /* _WINSOCKAPI_ */
 
diff --git a/include/winspool.h b/include/winspool.h
index 99dc631..821ad33 100644
--- a/include/winspool.h
+++ b/include/winspool.h
@@ -58,68 +58,68 @@
 #define PRINTER_ENUM_ICON8       0x00800000
 
 /* TYPES */
-typedef struct _PRINTER_DEFAULTS32A {
+typedef struct _PRINTER_DEFAULTSA {
   LPSTR        pDatatype;
-  LPDEVMODE32A pDevMode;
+  LPDEVMODEA pDevMode;
   ACCESS_MASK  DesiredAccess;
-} PRINTER_DEFAULTS32A, *LPPRINTER_DEFAULTS32A;
+} PRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;
 
-typedef struct _PRINTER_DEFAULTS32W {
+typedef struct _PRINTER_DEFAULTSW {
   LPWSTR       pDatatype;
-  LPDEVMODE32W pDevMode;
+  LPDEVMODEW pDevMode;
   ACCESS_MASK  DesiredAccess;
-} PRINTER_DEFAULTS32W, *LPPRINTER_DEFAULTS32W;
+} PRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;
 
 DECL_WINELIB_TYPE_AW(PRINTER_DEFAULTS)
 DECL_WINELIB_TYPE_AW(LPPRINTER_DEFAULTS)
 
-typedef struct _DRIVER_INFO_132A {
+typedef struct _DRIVER_INFO_1A {
   LPSTR     pName;
-} DRIVER_INFO_132A, *PDRIVER_INFO_132A, *LPDRIVER_INFO_132A;
+} DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A;
 
-typedef struct _DRIVER_INFO_132W {
+typedef struct _DRIVER_INFO_1W {
   LPWSTR    pName;
-} DRIVER_INFO_132W, *PDRIVER_INFO_132W, *LPDRIVER_INFO_132W;
+} DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W;
 
 DECL_WINELIB_TYPE_AW(DRIVER_INFO_1)
 DECL_WINELIB_TYPE_AW(PDRIVER_INFO_1)
 DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_1)
 
-typedef struct _DRIVER_INFO_232A {
+typedef struct _DRIVER_INFO_2A {
   DWORD   cVersion;
   LPSTR     pName;
   LPSTR     pEnvironment;
   LPSTR     pDriverPath;
   LPSTR     pDataFile; 
   LPSTR     pConfigFile;
-} DRIVER_INFO_232A, *PDRIVER_INFO_232A, *LPDRIVER_INFO_232A;
+} DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A;
 
-typedef struct _DRIVER_INFO_232W {
+typedef struct _DRIVER_INFO_2W {
   DWORD   cVersion;
   LPWSTR    pName;     
   LPWSTR    pEnvironment;
   LPWSTR    pDriverPath;
   LPWSTR    pDataFile; 
   LPWSTR    pConfigFile;
-} DRIVER_INFO_232W, *PDRIVER_INFO_232W, *LPDRIVER_INFO_232W;
+} DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W;
 
 DECL_WINELIB_TYPE_AW(DRIVER_INFO_2)
 DECL_WINELIB_TYPE_AW(PDRIVER_INFO_2)
 DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_2)
 
-typedef struct _PRINTER_INFO_132A {
+typedef struct _PRINTER_INFO_1A {
   DWORD   Flags;
   LPSTR   pDescription;
   LPSTR   pName;
   LPSTR   pComment;
-} PRINTER_INFO_132A, *PPRINTER_INFO_132A, *LPPRINTER_INFO_132A;
+} PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A;
 
-typedef struct _PRINTER_INFO_132W {
+typedef struct _PRINTER_INFO_1W {
   DWORD   Flags;
   LPWSTR  pDescription;
   LPWSTR  pName;
   LPWSTR  pComment;
-} PRINTER_INFO_132W, *PPRINTER_INFO_132W, *LPPRINTER_INFO_132W;
+} PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W;
 
 DECL_WINELIB_TYPE_AW(PRINTER_INFO_1)
 DECL_WINELIB_TYPE_AW(PPRINTER_INFO_1)
@@ -130,7 +130,7 @@
  * therfore the following hack */
 #ifndef Status
 
-typedef struct _PRINTER_INFO_232A {
+typedef struct _PRINTER_INFO_2A {
   LPSTR     pServerName;
   LPSTR     pPrinterName;
   LPSTR     pShareName;
@@ -138,7 +138,7 @@
   LPSTR     pDriverName;
   LPSTR     pComment;
   LPSTR     pLocation;
-  LPDEVMODE32A pDevMode;
+  LPDEVMODEA pDevMode;
   LPSTR     pSepFile;
   LPSTR     pPrintProcessor;
   LPSTR     pDatatype;
@@ -152,9 +152,9 @@
   DWORD   Status;
   DWORD   cJobs;
   DWORD   AveragePPM;
-} PRINTER_INFO_232A, *PPRINTER_INFO_232A, *LPPRINTER_INFO_232A;
+} PRINTER_INFO_2A, *PPRINTER_INFO_2A, *LPPRINTER_INFO_2A;
 
-typedef struct _PRINTER_INFO_232W {
+typedef struct _PRINTER_INFO_2W {
   LPWSTR    pServerName;
   LPWSTR    pPrinterName;
   LPWSTR    pShareName;
@@ -162,7 +162,7 @@
   LPWSTR    pDriverName;
   LPWSTR    pComment;
   LPWSTR    pLocation;
-  LPDEVMODE32W pDevMode;
+  LPDEVMODEW pDevMode;
   LPWSTR    pSepFile;
   LPWSTR    pPrintProcessor;
   LPWSTR    pDatatype;
@@ -176,7 +176,7 @@
   DWORD   Status;
   DWORD   cJobs;
   DWORD   AveragePPM;
-} PRINTER_INFO_232W, *PPRINTER_INFO_232W, *LPPRINTER_INFO_232W;
+} PRINTER_INFO_2W, *PPRINTER_INFO_2W, *LPPRINTER_INFO_2W;
 
 DECL_WINELIB_TYPE_AW(PRINTER_INFO_2)
 DECL_WINELIB_TYPE_AW(PPRINTER_INFO_2)
@@ -185,47 +185,46 @@
 #endif /* Status */
 
 /* DECLARATIONS */
-DWORD WINAPI DrvGetPrinterData(LPSTR lpPrinter, LPSTR lpProfile,
+DWORD WINAPI DrvGetPrinterData16(LPSTR lpPrinter, LPSTR lpProfile,
 	  LPDWORD lpType, LPBYTE lpPrinterData, int cbData, LPDWORD lpNeeded);
-DWORD WINAPI DrvSetPrinterData(LPSTR lpPrinter, LPSTR lpProfile,
+DWORD WINAPI DrvSetPrinterData16(LPSTR lpPrinter, LPSTR lpProfile,
           DWORD lpType, LPBYTE lpPrinterData, DWORD dwSize);
-HANDLE16 WINAPI OpenJob(LPSTR lpOutput, LPSTR lpTitle, HDC16 hDC);
-int WINAPI CloseJob(HANDLE16 hJob);
-int WINAPI WriteSpool(HANDLE16 hJob, LPSTR lpData, WORD cch);
-int WINAPI DeleteJob(HANDLE16 hJob, WORD wNotUsed);
-int WINAPI StartSpoolPage(HANDLE16 hJob);
-int WINAPI EndSpoolPage(HANDLE16 hJob);
-DWORD WINAPI GetSpoolJob(int nOption, LONG param);
-int WINAPI WriteDialog(HANDLE16 hJob, LPSTR lpMsg, WORD cchMsg);
+HANDLE16 WINAPI OpenJob16(LPSTR lpOutput, LPSTR lpTitle, HDC16 hDC);
+int WINAPI CloseJob16(HANDLE16 hJob);
+int WINAPI WriteSpool16(HANDLE16 hJob, LPSTR lpData, WORD cch);
+int WINAPI DeleteJob16(HANDLE16 hJob, WORD wNotUsed);
+int WINAPI StartSpoolPage16(HANDLE16 hJob);
+int WINAPI EndSpoolPage16(HANDLE16 hJob);
+DWORD WINAPI GetSpoolJob16(int nOption, LONG param);
+int WINAPI WriteDialog16(HANDLE16 hJob, LPSTR lpMsg, WORD cchMsg);
 
-INT32 WINAPI DeviceCapabilities32A(LPCSTR printer,LPCSTR target,WORD z,
-                                   LPSTR a,LPDEVMODE32A b);
-INT32 WINAPI DeviceCapabilities32W(LPCWSTR pDevice, LPCWSTR pPort,
+INT WINAPI DeviceCapabilitiesA(LPCSTR printer,LPCSTR target,WORD z,
+                                   LPSTR a,LPDEVMODEA b);
+INT WINAPI DeviceCapabilitiesW(LPCWSTR pDevice, LPCWSTR pPort,
                                    WORD fwCapability, LPWSTR pOutput,
-                                   const DEVMODE32W *pDevMode);
+                                   const DEVMODEW *pDevMode);
 
 #define DeviceCapabilities WINELIB_NAME_AW(DeviceCapabilities)
 
-LONG WINAPI DocumentProperties32A(HWND32 hWnd,HANDLE32 hPrinter,
-                                LPSTR pDeviceName, LPDEVMODE32A pDevModeOutput,
-                                  LPDEVMODE32A pDevModeInput,DWORD fMode );
-LONG WINAPI DocumentProperties32W(HWND32 hWnd, HANDLE32 hPrinter,
+LONG WINAPI DocumentPropertiesA(HWND hWnd,HANDLE hPrinter,
+                                LPSTR pDeviceName, LPDEVMODEA pDevModeOutput,
+                                  LPDEVMODEA pDevModeInput,DWORD fMode );
+LONG WINAPI DocumentPropertiesW(HWND hWnd, HANDLE hPrinter,
                                   LPWSTR pDeviceName,
-                                  LPDEVMODE32W pDevModeOutput,
-                                  LPDEVMODE32W pDevModeInput, DWORD fMode);
+                                  LPDEVMODEW pDevModeOutput,
+                                  LPDEVMODEW pDevModeInput, DWORD fMode);
 
 #define DocumentProperties WINELIB_NAME_AW(DocumentProperties)
 
-BOOL32 WINAPI OpenPrinter32A(LPSTR lpPrinterName,HANDLE32 *phPrinter,
-			     LPPRINTER_DEFAULTS32A pDefault);
-BOOL32 WINAPI OpenPrinter32W(LPWSTR lpPrinterName,HANDLE32 *phPrinter,
-			     LPPRINTER_DEFAULTS32W pDefault);
+BOOL WINAPI OpenPrinterA(LPSTR lpPrinterName,HANDLE *phPrinter,
+			     LPPRINTER_DEFAULTSA pDefault);
+BOOL WINAPI OpenPrinterW(LPWSTR lpPrinterName,HANDLE *phPrinter,
+			     LPPRINTER_DEFAULTSW pDefault);
 
 #define OpenPrinter WINELIB_NAME_AW(OpenPrinter)
 
-BOOL32 WINAPI ClosePrinter32 (HANDLE32 phPrinter);
+BOOL WINAPI ClosePrinter (HANDLE phPrinter);
 
-#define ClosePrinter WINELIB_NAME(ClosePrinter)
 
 #ifdef __cplusplus
 } // extern "C"
diff --git a/include/wintypes.h b/include/wintypes.h
index 3e3f967..7728a6a 100644
--- a/include/wintypes.h
+++ b/include/wintypes.h
@@ -38,22 +38,18 @@
 /* Note that Winelib is purely Win32.                             */
 
 #ifdef __WINE__
-# define WINELIB_NAME(func)      this_is_a_syntax_error this_is_a_syntax_error
 # define WINELIB_NAME_AW(func)   this_is_a_syntax_error this_is_a_syntax_error
 #else  /* __WINE__ */
-# define WINELIB_NAME(func)     func##32
 # ifdef UNICODE
-#  define WINELIB_NAME_AW(func) func##32W
+#  define WINELIB_NAME_AW(func) func##W
 # else
-#  define WINELIB_NAME_AW(func) func##32A
+#  define WINELIB_NAME_AW(func) func##A
 # endif  /* UNICODE */
 #endif  /* __WINE__ */
 
 #ifdef __WINE__
-# define DECL_WINELIB_TYPE(type)     /* nothing */
 # define DECL_WINELIB_TYPE_AW(type)  /* nothing */
 #else   /* __WINE__ */
-# define DECL_WINELIB_TYPE(type)     typedef WINELIB_NAME(type) type;
 # define DECL_WINELIB_TYPE_AW(type)  typedef WINELIB_NAME_AW(type) type;
 #endif  /* __WINE__ */
 
@@ -90,8 +86,8 @@
 typedef void            VOID;
 typedef short           INT16;
 typedef unsigned short  UINT16;
-typedef int             INT32;
-typedef unsigned int    UINT32;
+typedef int             INT;
+typedef unsigned int    UINT;
 typedef unsigned short  WORD;
 typedef unsigned long   DWORD;
 typedef unsigned long   ULONG;
@@ -104,7 +100,7 @@
 /* Some systems might have wchar_t, but we really need 16 bit characters */
 typedef unsigned short  WCHAR;
 typedef unsigned short  BOOL16;
-typedef int             BOOL32;
+typedef int             BOOL;
 typedef double          DATE;
 typedef long            LONG_PTR;
 typedef unsigned long   ULONG_PTR;
@@ -115,11 +111,11 @@
 /* Integer types. These are the same for emulator and library. */
 
 typedef UINT16          HANDLE16;
-typedef UINT32          HANDLE32;
+typedef UINT            HANDLE;
 typedef UINT16         *LPHANDLE16;
-typedef UINT32         *LPHANDLE32;
+typedef UINT           *LPHANDLE;
 typedef UINT16          WPARAM16;
-typedef UINT32          WPARAM32;
+typedef UINT            WPARAM;
 typedef LONG            LPARAM;
 typedef LONG            HRESULT;
 typedef LONG            LRESULT;
@@ -128,9 +124,9 @@
 typedef WORD           *LPCATCHBUF;
 typedef DWORD           ACCESS_MASK;
 typedef ACCESS_MASK     REGSAM;
-typedef HANDLE32        HHOOK;
-typedef HANDLE32        HKEY;
-typedef HANDLE32        HMONITOR;
+typedef HANDLE          HHOOK;
+typedef HANDLE          HKEY;
+typedef HANDLE          HMONITOR;
 typedef DWORD           LCID;
 typedef WORD            LANGID;
 typedef DWORD           LCTYPE;
@@ -164,16 +160,16 @@
 typedef const VOID     *LPCVOID;
 typedef INT16          *LPINT16;
 typedef UINT16         *LPUINT16;
-typedef INT32          *PINT32;
-typedef INT32          *LPINT32;
-typedef UINT32         *PUINT32;
-typedef UINT32         *LPUINT32;
+typedef INT            *PINT;
+typedef INT            *LPINT;
+typedef UINT           *PUINT;
+typedef UINT           *LPUINT;
 typedef HKEY           *LPHKEY;
 typedef HKEY           *PHKEY;
 typedef FLOAT          *PFLOAT;
 typedef FLOAT          *LPFLOAT;
-typedef BOOL32         *PBOOL32;
-typedef BOOL32         *LPBOOL32;
+typedef BOOL           *PBOOL;
+typedef BOOL           *LPBOOL;
 
 /* Special case: a segmented pointer is just a pointer in the user's code. */
 
@@ -185,7 +181,7 @@
 
 /* Handle types that exist both in Win16 and Win32. */
 
-#define DECLARE_HANDLE(a)  typedef HANDLE16 a##16; typedef HANDLE32 a##32
+#define DECLARE_HANDLE(a)  typedef HANDLE16 a##16; typedef HANDLE a
 DECLARE_HANDLE(HACCEL);
 DECLARE_HANDLE(HBITMAP);
 DECLARE_HANDLE(HBRUSH);
@@ -232,56 +228,45 @@
 
 /* Callback function pointers types */
 
-typedef BOOL32 (CALLBACK* DATEFMT_ENUMPROC32A)(LPSTR);
-typedef BOOL32 (CALLBACK* DATEFMT_ENUMPROC32W)(LPWSTR);
+typedef BOOL    (CALLBACK* DATEFMT_ENUMPROCA)(LPSTR);
+typedef BOOL    (CALLBACK* DATEFMT_ENUMPROCW)(LPWSTR);
 DECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROC)
-typedef BOOL16 (CALLBACK *DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
-typedef BOOL32 (CALLBACK *DLGPROC32)(HWND32,UINT32,WPARAM32,LPARAM);
-DECL_WINELIB_TYPE(DLGPROC)
+typedef BOOL16  (CALLBACK *DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
+typedef BOOL    (CALLBACK *DLGPROC)(HWND,UINT,WPARAM,LPARAM);
 typedef LRESULT (CALLBACK *DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);
-typedef LRESULT (CALLBACK *DRIVERPROC32)(DWORD,HDRVR32,UINT32,LPARAM,LPARAM);
-DECL_WINELIB_TYPE(DRIVERPROC)
+typedef LRESULT (CALLBACK *DRIVERPROC)(DWORD,HDRVR,UINT,LPARAM,LPARAM);
 typedef INT16   (CALLBACK *EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16);
-typedef INT32   (CALLBACK *EDITWORDBREAKPROC32A)(LPSTR,INT32,INT32,INT32);
-typedef INT32   (CALLBACK *EDITWORDBREAKPROC32W)(LPWSTR,INT32,INT32,INT32);
+typedef INT     (CALLBACK *EDITWORDBREAKPROCA)(LPSTR,INT,INT,INT);
+typedef INT     (CALLBACK *EDITWORDBREAKPROCW)(LPWSTR,INT,INT,INT);
 DECL_WINELIB_TYPE_AW(EDITWORDBREAKPROC)
 typedef LRESULT (CALLBACK *FARPROC16)();
-typedef LRESULT (CALLBACK *FARPROC32)();
-DECL_WINELIB_TYPE(FARPROC)
+typedef LRESULT (CALLBACK *FARPROC)();
 typedef INT16   (CALLBACK *PROC16)();
-typedef INT32   (CALLBACK *PROC32)();
-DECL_WINELIB_TYPE(PROC)
+typedef INT     (CALLBACK *PROC)();
 typedef INT16   (CALLBACK *GOBJENUMPROC16)(SEGPTR,LPARAM);
-typedef INT32   (CALLBACK *GOBJENUMPROC32)(LPVOID,LPARAM);
-DECL_WINELIB_TYPE(GOBJENUMPROC)
+typedef INT     (CALLBACK *GOBJENUMPROC)(LPVOID,LPARAM);
 typedef BOOL16  (CALLBACK *GRAYSTRINGPROC16)(HDC16,LPARAM,INT16);
-typedef BOOL32  (CALLBACK *GRAYSTRINGPROC32)(HDC32,LPARAM,INT32);
-DECL_WINELIB_TYPE(GRAYSTRINGPROC)
+typedef BOOL    (CALLBACK *GRAYSTRINGPROC)(HDC,LPARAM,INT);
 typedef LRESULT (CALLBACK *HOOKPROC16)(INT16,WPARAM16,LPARAM);
-typedef LRESULT (CALLBACK *HOOKPROC32)(INT32,WPARAM32,LPARAM);
-DECL_WINELIB_TYPE(HOOKPROC)
+typedef LRESULT (CALLBACK *HOOKPROC)(INT,WPARAM,LPARAM);
 typedef VOID    (CALLBACK *LINEDDAPROC16)(INT16,INT16,LPARAM);
-typedef VOID    (CALLBACK *LINEDDAPROC32)(INT32,INT32,LPARAM);
-DECL_WINELIB_TYPE(LINEDDAPROC)
+typedef VOID    (CALLBACK *LINEDDAPROC)(INT,INT,LPARAM);
 typedef BOOL16  (CALLBACK *PROPENUMPROC16)(HWND16,SEGPTR,HANDLE16);
-typedef BOOL32  (CALLBACK *PROPENUMPROC32A)(HWND32,LPCSTR,HANDLE32);
-typedef BOOL32  (CALLBACK *PROPENUMPROC32W)(HWND32,LPCWSTR,HANDLE32);
+typedef BOOL    (CALLBACK *PROPENUMPROCA)(HWND,LPCSTR,HANDLE);
+typedef BOOL    (CALLBACK *PROPENUMPROCW)(HWND,LPCWSTR,HANDLE);
 DECL_WINELIB_TYPE_AW(PROPENUMPROC)
-typedef BOOL32  (CALLBACK *PROPENUMPROCEX32A)(HWND32,LPCSTR,HANDLE32,LPARAM);
-typedef BOOL32  (CALLBACK *PROPENUMPROCEX32W)(HWND32,LPCWSTR,HANDLE32,LPARAM);
+typedef BOOL    (CALLBACK *PROPENUMPROCEXA)(HWND,LPCSTR,HANDLE,LPARAM);
+typedef BOOL    (CALLBACK *PROPENUMPROCEXW)(HWND,LPCWSTR,HANDLE,LPARAM);
 DECL_WINELIB_TYPE_AW(PROPENUMPROCEX)
-typedef BOOL32 (CALLBACK* TIMEFMT_ENUMPROC32A)(LPSTR);
-typedef BOOL32 (CALLBACK* TIMEFMT_ENUMPROC32W)(LPWSTR);
+typedef BOOL    (CALLBACK* TIMEFMT_ENUMPROCA)(LPSTR);
+typedef BOOL    (CALLBACK* TIMEFMT_ENUMPROCW)(LPWSTR);
 DECL_WINELIB_TYPE_AW(TIMEFMT_ENUMPROC)
 typedef VOID    (CALLBACK *TIMERPROC16)(HWND16,UINT16,UINT16,DWORD);
-typedef VOID    (CALLBACK *TIMERPROC32)(HWND32,UINT32,UINT32,DWORD);
-DECL_WINELIB_TYPE(TIMERPROC)
+typedef VOID    (CALLBACK *TIMERPROC)(HWND,UINT,UINT,DWORD);
 typedef LRESULT (CALLBACK *WNDENUMPROC16)(HWND16,LPARAM);
-typedef LRESULT (CALLBACK *WNDENUMPROC32)(HWND32,LPARAM);
-DECL_WINELIB_TYPE(WNDENUMPROC)
+typedef LRESULT (CALLBACK *WNDENUMPROC)(HWND,LPARAM);
 typedef LRESULT (CALLBACK *WNDPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
-typedef LRESULT (CALLBACK *WNDPROC32)(HWND32,UINT32,WPARAM32,LPARAM);
-DECL_WINELIB_TYPE(WNDPROC)
+typedef LRESULT (CALLBACK *WNDPROC)(HWND,UINT,WPARAM,LPARAM);
 
 /* TCHAR data types definitions for Winelib. */
 /* These types are _not_ defined for the emulator, because they */
@@ -304,52 +289,7 @@
 
 /* Data types specific to the library. These do _not_ exist in the emulator. */
 
-DECL_WINELIB_TYPE(INT)
-DECL_WINELIB_TYPE(LPINT)
-DECL_WINELIB_TYPE(PUINT)
-DECL_WINELIB_TYPE(LPUINT)
-DECL_WINELIB_TYPE(UINT)
-DECL_WINELIB_TYPE(BOOL)
-DECL_WINELIB_TYPE(LPBOOL)
-DECL_WINELIB_TYPE(WPARAM)
 
-DECL_WINELIB_TYPE(HACCEL)
-DECL_WINELIB_TYPE(HANDLE)
-DECL_WINELIB_TYPE(LPHANDLE)
-DECL_WINELIB_TYPE(HBITMAP)
-DECL_WINELIB_TYPE(HBRUSH)
-DECL_WINELIB_TYPE(HCOLORSPACE)
-DECL_WINELIB_TYPE(HCURSOR)
-DECL_WINELIB_TYPE(HDC)
-DECL_WINELIB_TYPE(HDROP)
-DECL_WINELIB_TYPE(HDRVR)
-DECL_WINELIB_TYPE(HDWP)
-DECL_WINELIB_TYPE(HENHMETAFILE)
-DECL_WINELIB_TYPE(HFILE)
-DECL_WINELIB_TYPE(HFONT)
-DECL_WINELIB_TYPE(HGDIOBJ)
-DECL_WINELIB_TYPE(HGLOBAL)
-DECL_WINELIB_TYPE(HIC)
-DECL_WINELIB_TYPE(HICON)
-DECL_WINELIB_TYPE(HINSTANCE)
-DECL_WINELIB_TYPE(HLOCAL)
-DECL_WINELIB_TYPE(HMENU)
-DECL_WINELIB_TYPE(HMETAFILE)
-DECL_WINELIB_TYPE(HMIDI)
-DECL_WINELIB_TYPE(HMIDIIN)
-DECL_WINELIB_TYPE(HMIDIOUT)
-DECL_WINELIB_TYPE(HMMIO)
-DECL_WINELIB_TYPE(HMODULE)
-DECL_WINELIB_TYPE(HPALETTE)
-DECL_WINELIB_TYPE(HPEN)
-DECL_WINELIB_TYPE(HQUEUE)
-DECL_WINELIB_TYPE(HRGN)
-DECL_WINELIB_TYPE(HRSRC)
-DECL_WINELIB_TYPE(HTASK)
-DECL_WINELIB_TYPE(HWAVE)
-DECL_WINELIB_TYPE(HWAVEIN)
-DECL_WINELIB_TYPE(HWAVEOUT)
-DECL_WINELIB_TYPE(HWND)
 
 /* Define some empty macros for compatibility with Windows code. */
 
@@ -387,7 +327,7 @@
 #define MAKEWORD(low,high)     ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8))
 #define MAKELONG(low,high)     ((LONG)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))
 #define MAKELPARAM(low,high)   ((LPARAM)MAKELONG(low,high))
-#define MAKEWPARAM(low,high)   ((WPARAM32)MAKELONG(low,high))
+#define MAKEWPARAM(low,high)   ((WPARAM)MAKELONG(low,high))
 #define MAKELRESULT(low,high)  ((LRESULT)MAKELONG(low,high))
 #define MAKEINTATOM(atom)      ((LPCSTR)MAKELONG((atom),0))
 
@@ -461,18 +401,15 @@
 
 typedef struct tagSIZE
 {
-    INT32  cx;
-    INT32  cy;
-} SIZE32, *PSIZE32, *LPSIZE32;
+    INT  cx;
+    INT  cy;
+} SIZE, *PSIZE, *LPSIZE;
 
-DECL_WINELIB_TYPE(SIZE)
-DECL_WINELIB_TYPE(PSIZE)
-DECL_WINELIB_TYPE(LPSIZE)
 
-typedef SIZE32 SIZEL, *PSIZEL, *LPSIZEL;
+typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;
 
 #define CONV_SIZE16TO32(s16,s32) \
-            ((s32)->cx = (INT32)(s16)->cx, (s32)->cy = (INT32)(s16)->cy)
+            ((s32)->cx = (INT)(s16)->cx, (s32)->cy = (INT)(s16)->cy)
 #define CONV_SIZE32TO16(s32,s16) \
             ((s16)->cx = (INT16)(s32)->cx, (s16)->cy = (INT16)(s32)->cy)
 
@@ -488,19 +425,15 @@
 {
     LONG  x;
     LONG  y;
-} POINT32, *PPOINT32, *LPPOINT32;
+} POINT, *PPOINT, *LPPOINT;
 
-DECL_WINELIB_TYPE(POINT)
-DECL_WINELIB_TYPE(PPOINT)
-DECL_WINELIB_TYPE(LPPOINT)
 
 #define CONV_POINT16TO32(p16,p32) \
-            ((p32)->x = (INT32)(p16)->x, (p32)->y = (INT32)(p16)->y)
+            ((p32)->x = (INT)(p16)->x, (p32)->y = (INT)(p16)->y)
 #define CONV_POINT32TO16(p32,p16) \
             ((p16)->x = (INT16)(p32)->x, (p16)->y = (INT16)(p32)->y)
 
 #define MAKEPOINT16(l) (*((POINT16 *)&(l)))
-#define MAKEPOINT WINELIB_NAME(MAKEPOINT)
 
 /* The POINTS structure */
 
@@ -508,11 +441,8 @@
 {
 	SHORT x;
 	SHORT y;
-} POINTS32, *PPOINTS32, *LPPOINTS32;
+} POINTS, *PPOINTS, *LPPOINTS;
 
-DECL_WINELIB_TYPE(POINTS)
-DECL_WINELIB_TYPE(PPOINTS)
-DECL_WINELIB_TYPE(LPPOINTS)
 
 #define MAKEPOINTS(l)  (*((POINTS *)&(l)))
 
@@ -529,17 +459,13 @@
 
 typedef struct tagRECT
 {
-    INT32  left;
-    INT32  top;
-    INT32  right;
-    INT32  bottom;
-} RECT32, *PRECT32, *LPRECT32;
-typedef const RECT32 *LPCRECT32;
+    INT  left;
+    INT  top;
+    INT  right;
+    INT  bottom;
+} RECT, *PRECT, *LPRECT;
+typedef const RECT *LPCRECT32;
 
-DECL_WINELIB_TYPE(RECT)
-DECL_WINELIB_TYPE(PRECT)
-DECL_WINELIB_TYPE(LPRECT)
-DECL_WINELIB_TYPE(LPCRECT)
 
 typedef struct tagRECTL
 {
@@ -552,8 +478,8 @@
 typedef const RECTL *LPCRECTL;
 
 #define CONV_RECT16TO32(r16,r32) \
-    ((r32)->left  = (INT32)(r16)->left,  (r32)->top    = (INT32)(r16)->top, \
-     (r32)->right = (INT32)(r16)->right, (r32)->bottom = (INT32)(r16)->bottom)
+    ((r32)->left  = (INT)(r16)->left,  (r32)->top    = (INT)(r16)->top, \
+     (r32)->right = (INT)(r16)->right, (r32)->bottom = (INT)(r16)->bottom)
 #define CONV_RECT32TO16(r32,r16) \
     ((r16)->left  = (INT16)(r32)->left,  (r16)->top    = (INT16)(r32)->top, \
      (r16)->right = (INT16)(r32)->right, (r16)->bottom = (INT16)(r32)->bottom)
diff --git a/include/winuser.h b/include/winuser.h
index ffc5d61..51d98ba 100644
--- a/include/winuser.h
+++ b/include/winuser.h
@@ -19,61 +19,54 @@
 #define HCF_INDICATOR       0x00000020
 #define HCF_HOTKEYAVAILABLE 0x00000040
 
-typedef struct tagHIGHCONTRAST32A
+typedef struct tagHIGHCONTRASTA
 {
-    UINT32  cbSize;
+    UINT  cbSize;
     DWORD   dwFlags;
     LPSTR   lpszDefaultScheme;
-} HIGHCONTRAST32A, *LPHIGHCONTRAST32A;
+} HIGHCONTRASTA, *LPHIGHCONTRASTA;
 
 typedef struct tagHIGHCONTRAST32W
 {
-    UINT32  cbSize;
+    UINT  cbSize;
     DWORD   dwFlags;
     LPWSTR  lpszDefaultScheme;
-} HIGHCONTRAST32W, *LPHIGHCONTRAST32W;
+} HIGHCONTRASTW, *LPHIGHCONTRASTW;
 
 DECL_WINELIB_TYPE_AW(HIGHCONTRAST)
 DECL_WINELIB_TYPE_AW(LPHIGHCONTRAST)
 
 typedef struct
 {
-    UINT32  message;
-    UINT32  paramL;
-    UINT32  paramH;
+    UINT  message;
+    UINT  paramL;
+    UINT  paramH;
     DWORD   time;
-    HWND32  hwnd;
-} EVENTMSG32, *LPEVENTMSG32;
+    HWND  hwnd;
+} EVENTMSG, *LPEVENTMSG;
 
-DECL_WINELIB_TYPE(EVENTMSG)
-DECL_WINELIB_TYPE(LPEVENTMSG)
 
     /* Mouse hook structure */
 
 typedef struct
 {
-    POINT32 pt;
-    HWND32  hwnd;
-    UINT32  wHitTestCode;
+    POINT pt;
+    HWND  hwnd;
+    UINT  wHitTestCode;
     DWORD   dwExtraInfo;
-} MOUSEHOOKSTRUCT32, *PMOUSEHOOKSTRUCT32, *LPMOUSEHOOKSTRUCT32;
+} MOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT32, *LPMOUSEHOOKSTRUCT;
 
-DECL_WINELIB_TYPE(MOUSEHOOKSTRUCT)
-DECL_WINELIB_TYPE(PMOUSEHOOKSTRUCT)
-DECL_WINELIB_TYPE(LPMOUSEHOOKSTRUCT)
 
     /* Hardware hook structure */
 
 typedef struct
 {
-    HWND32    hWnd;
-    UINT32    wMessage;
-    WPARAM32  wParam;
+    HWND    hWnd;
+    UINT    wMessage;
+    WPARAM  wParam;
     LPARAM    lParam;
-} HARDWAREHOOKSTRUCT32, *LPHARDWAREHOOKSTRUCT32;
+} HARDWAREHOOKSTRUCT, *LPHARDWAREHOOKSTRUCT;
 
-DECL_WINELIB_TYPE(HARDWAREHOOKSTRUCT)
-DECL_WINELIB_TYPE(LPHARDWAREHOOKSTRUCT)
 
   /* Debug hook structure */
 
@@ -82,12 +75,10 @@
     DWORD       idThread;
     DWORD       idThreadInstaller;
     LPARAM      lParam;
-    WPARAM32    wParam;
-    INT32       code;
-} DEBUGHOOKINFO32, *LPDEBUGHOOKINFO32;
+    WPARAM    wParam;
+    INT       code;
+} DEBUGHOOKINFO, *LPDEBUGHOOKINFO;
 
-DECL_WINELIB_TYPE(DEBUGHOOKINFO)
-DECL_WINELIB_TYPE(LPDEBUGHOOKINFO)
 
   /***** Dialogs *****/
 #ifdef FSHIFT
@@ -104,40 +95,38 @@
 
 typedef struct tagANIMATIONINFO
 {
-       UINT32          cbSize;
-       INT32           iMinAnimate;
+       UINT          cbSize;
+       INT           iMinAnimate;
 } ANIMATIONINFO, *LPANIMATIONINFO;
 
 typedef struct tagNMHDR
 {
-    HWND32  hwndFrom;
-    UINT32  idFrom;
-    UINT32  code;
+    HWND  hwndFrom;
+    UINT  idFrom;
+    UINT  code;
 } NMHDR, *LPNMHDR;
 
 typedef struct
 {
-	UINT32	cbSize;
-	INT32	iTabLength;
-	INT32	iLeftMargin;
-	INT32	iRightMargin;
-	UINT32	uiLengthDrawn;
+	UINT	cbSize;
+	INT	iTabLength;
+	INT	iLeftMargin;
+	INT	iRightMargin;
+	UINT	uiLengthDrawn;
 } DRAWTEXTPARAMS,*LPDRAWTEXTPARAMS;
 
 #define WM_USER             0x0400
 
 typedef struct
 {
-    UINT32   length;
-    UINT32   flags;
-    UINT32   showCmd;
-    POINT32  ptMinPosition WINE_PACKED;
-    POINT32  ptMaxPosition WINE_PACKED;
-    RECT32   rcNormalPosition WINE_PACKED;
-} WINDOWPLACEMENT32, *LPWINDOWPLACEMENT32;
+    UINT   length;
+    UINT   flags;
+    UINT   showCmd;
+    POINT  ptMinPosition WINE_PACKED;
+    POINT  ptMaxPosition WINE_PACKED;
+    RECT   rcNormalPosition WINE_PACKED;
+} WINDOWPLACEMENT, *LPWINDOWPLACEMENT;
 
-DECL_WINELIB_TYPE(WINDOWPLACEMENT)
-DECL_WINELIB_TYPE(LPWINDOWPLACEMENT)
 
   /* WINDOWPLACEMENT flags */
 #define WPF_SETMINPOSITION      0x0001
@@ -297,84 +286,47 @@
 #define OIC_WINEICON        32519
 
 /* Edit control messages */
-#define EM_GETSEL32                0x00b0
-#define EM_GETSEL                  WINELIB_NAME(EM_GETSEL)
-#define EM_SETSEL32                0x00b1
-#define EM_SETSEL                  WINELIB_NAME(EM_SETSEL)
-#define EM_GETRECT32               0x00b2
-#define EM_GETRECT                 WINELIB_NAME(EM_GETRECT)
-#define EM_SETRECT32               0x00b3
-#define EM_SETRECT                 WINELIB_NAME(EM_SETRECT)
-#define EM_SETRECTNP32             0x00b4
-#define EM_SETRECTNP               WINELIB_NAME(EM_SETRECTNP)
-#define EM_SCROLL32                0x00b5
-#define EM_SCROLL                  WINELIB_NAME(EM_SCROLL)
-#define EM_LINESCROLL32            0x00b6
-#define EM_LINESCROLL              WINELIB_NAME(EM_LINESCROLL)
-#define EM_SCROLLCARET32           0x00b7
-#define EM_SCROLLCARET             WINELIB_NAME(EM_SCROLLCARET)
-#define EM_GETMODIFY32             0x00b8
-#define EM_GETMODIFY               WINELIB_NAME(EM_GETMODIFY)
-#define EM_SETMODIFY32             0x00b9
-#define EM_SETMODIFY               WINELIB_NAME(EM_SETMODIFY)
-#define EM_GETLINECOUNT32          0x00ba
-#define EM_GETLINECOUNT            WINELIB_NAME(EM_GETLINECOUNT)
-#define EM_LINEINDEX32             0x00bb
-#define EM_LINEINDEX               WINELIB_NAME(EM_LINEINDEX)
-#define EM_SETHANDLE32             0x00bc
-#define EM_SETHANDLE               WINELIB_NAME(EM_SETHANDLE)
-#define EM_GETHANDLE32             0x00bd
-#define EM_GETHANDLE               WINELIB_NAME(EM_GETHANDLE)
-#define EM_GETTHUMB32              0x00be
-#define EM_GETTHUMB                WINELIB_NAME(EM_GETTHUMB)
+#define EM_GETSEL                0x00b0
+#define EM_SETSEL                0x00b1
+#define EM_GETRECT               0x00b2
+#define EM_SETRECT               0x00b3
+#define EM_SETRECTNP             0x00b4
+#define EM_SCROLL                0x00b5
+#define EM_LINESCROLL            0x00b6
+#define EM_SCROLLCARET           0x00b7
+#define EM_GETMODIFY             0x00b8
+#define EM_SETMODIFY             0x00b9
+#define EM_GETLINECOUNT          0x00ba
+#define EM_LINEINDEX             0x00bb
+#define EM_SETHANDLE             0x00bc
+#define EM_GETHANDLE             0x00bd
+#define EM_GETTHUMB              0x00be
 /* FIXME : missing from specs 0x00bf and 0x00c0 */
-#define EM_LINELENGTH32            0x00c1
-#define EM_LINELENGTH              WINELIB_NAME(EM_LINELENGTH)
-#define EM_REPLACESEL32            0x00c2
-#define EM_REPLACESEL              WINELIB_NAME(EM_REPLACESEL)
+#define EM_LINELENGTH            0x00c1
+#define EM_REPLACESEL            0x00c2
 /* FIXME : missing from specs 0x00c3 */
-#define EM_GETLINE32               0x00c4
-#define EM_GETLINE                 WINELIB_NAME(EM_GETLINE)
-#define EM_LIMITTEXT32             0x00c5
-#define EM_LIMITTEXT               WINELIB_NAME(EM_LIMITTEXT)
-#define EM_CANUNDO32               0x00c6
-#define EM_CANUNDO                 WINELIB_NAME(EM_CANUNDO)
-#define EM_UNDO32                  0x00c7
-#define EM_UNDO                    WINELIB_NAME(EM_UNDO)
-#define EM_FMTLINES32              0x00c8
-#define EM_FMTLINES                WINELIB_NAME(EM_FMTLINES)
-#define EM_LINEFROMCHAR32          0x00c9
-#define EM_LINEFROMCHAR            WINELIB_NAME(EM_LINEFROMCHAR)
+#define EM_GETLINE               0x00c4
+#define EM_LIMITTEXT             0x00c5
+#define EM_CANUNDO               0x00c6
+#define EM_UNDO                  0x00c7
+#define EM_FMTLINES              0x00c8
+#define EM_LINEFROMCHAR          0x00c9
 /* FIXME : missing from specs 0x00ca */
-#define EM_SETTABSTOPS32           0x00cb
-#define EM_SETTABSTOPS             WINELIB_NAME(EM_SETTABSTOPS)
-#define EM_SETPASSWORDCHAR32       0x00cc
-#define EM_SETPASSWORDCHAR         WINELIB_NAME(EM_SETPASSWORDCHAR)
-#define EM_EMPTYUNDOBUFFER32       0x00cd
-#define EM_EMPTYUNDOBUFFER         WINELIB_NAME(EM_EMPTYUNDOBUFFER)
-#define EM_GETFIRSTVISIBLELINE32   0x00ce
-#define EM_GETFIRSTVISIBLELINE     WINELIB_NAME(EM_GETFIRSTVISIBLELINE)
-#define EM_SETREADONLY32           0x00cf
-#define EM_SETREADONLY             WINELIB_NAME(EM_SETREADONLY)
-#define EM_SETWORDBREAKPROC32      0x00d0
-#define EM_SETWORDBREAKPROC        WINELIB_NAME(EM_SETWORDBREAKPROC)
-#define EM_GETWORDBREAKPROC32      0x00d1
-#define EM_GETWORDBREAKPROC        WINELIB_NAME(EM_GETWORDBREAKPROC)
-#define EM_GETPASSWORDCHAR32       0x00d2
-#define EM_GETPASSWORDCHAR         WINELIB_NAME(EM_GETPASSWORDCHAR)
-#define EM_SETMARGINS32            0x00d3
-#define EM_SETMARGINS              WINELIB_NAME(EM_SETMARGINS)
-#define EM_GETMARGINS32            0x00d4
-#define EM_GETMARGINS              WINELIB_NAME(EM_GETMARGINS)
-#define EM_GETLIMITTEXT32          0x00d5
-#define EM_GETLIMITTEXT            WINELIB_NAME(EM_GETLIMITTEXT)
-#define EM_POSFROMCHAR32           0x00d6
-#define EM_POSFROMCHAR             WINELIB_NAME(EM_POSFROMCHAR)
-#define EM_CHARFROMPOS32           0x00d7
-#define EM_CHARFROMPOS             WINELIB_NAME(EM_CHARFROMPOS)
+#define EM_SETTABSTOPS           0x00cb
+#define EM_SETPASSWORDCHAR       0x00cc
+#define EM_EMPTYUNDOBUFFER       0x00cd
+#define EM_GETFIRSTVISIBLELINE   0x00ce
+#define EM_SETREADONLY           0x00cf
+#define EM_SETWORDBREAKPROC      0x00d0
+#define EM_GETWORDBREAKPROC      0x00d1
+#define EM_GETPASSWORDCHAR       0x00d2
+#define EM_SETMARGINS            0x00d3
+#define EM_GETMARGINS            0x00d4
+#define EM_GETLIMITTEXT          0x00d5
+#define EM_POSFROMCHAR           0x00d6
+#define EM_CHARFROMPOS           0x00d7
 /* a name change since win95 */
-#define EM_SETLIMITTEXT32          EM_LIMITTEXT32
-#define EM_SETLIMITTEXT            WINELIB_NAME(EM_SETLIMITTEXT)
+#define EM_SETLIMITTEXT          EM_LIMITTEXT
 
 /* EDITWORDBREAKPROC code values */
 #define WB_LEFT         0
@@ -691,72 +643,70 @@
 typedef struct
 {
     LPVOID      lpCreateParams;
-    HINSTANCE32 hInstance;
-    HMENU32     hMenu;
-    HWND32      hwndParent;
-    INT32       cy;
-    INT32       cx;
-    INT32       y;
-    INT32       x;
+    HINSTANCE hInstance;
+    HMENU     hMenu;
+    HWND      hwndParent;
+    INT       cy;
+    INT       cx;
+    INT       y;
+    INT       x;
     LONG        style;
     LPCSTR      lpszName;
     LPCSTR      lpszClass;
     DWORD       dwExStyle;
-} CREATESTRUCT32A, *LPCREATESTRUCT32A;
+} CREATESTRUCTA, *LPCREATESTRUCTA;
 
 typedef struct
 {
     LPVOID      lpCreateParams;
-    HINSTANCE32 hInstance;
-    HMENU32     hMenu;
-    HWND32      hwndParent;
-    INT32       cy;
-    INT32       cx;
-    INT32       y;
-    INT32       x;
+    HINSTANCE hInstance;
+    HMENU     hMenu;
+    HWND      hwndParent;
+    INT       cy;
+    INT       cx;
+    INT       y;
+    INT       x;
     LONG        style;
     LPCWSTR     lpszName;
     LPCWSTR     lpszClass;
     DWORD       dwExStyle;
-} CREATESTRUCT32W, *LPCREATESTRUCT32W;
+} CREATESTRUCTW, *LPCREATESTRUCTW;
 
 DECL_WINELIB_TYPE_AW(CREATESTRUCT)
 DECL_WINELIB_TYPE_AW(LPCREATESTRUCT)
 
 typedef struct 
 {
-    HMENU32   hWindowMenu;
-    UINT32    idFirstChild;
-} CLIENTCREATESTRUCT32, *LPCLIENTCREATESTRUCT32;
+    HMENU   hWindowMenu;
+    UINT    idFirstChild;
+} CLIENTCREATESTRUCT, *LPCLIENTCREATESTRUCT;
 
-DECL_WINELIB_TYPE(CLIENTCREATESTRUCT)
-DECL_WINELIB_TYPE(LPCLIENTCREATESTRUCT)
 
 typedef struct
 {
     LPCSTR       szClass;
     LPCSTR       szTitle;
-    HINSTANCE32  hOwner;
-    INT32        x;
-    INT32        y;
-    INT32        cx;
-    INT32        cy;
+    HINSTANCE  hOwner;
+    INT        x;
+    INT        y;
+    INT        cx;
+    INT        cy;
     DWORD        style;
     LPARAM       lParam;
-} MDICREATESTRUCT32A, *LPMDICREATESTRUCT32A;
+} MDICREATESTRUCTA, *LPMDICREATESTRUCTA;
 
 typedef struct
 {
     LPCWSTR      szClass;
     LPCWSTR      szTitle;
-    HINSTANCE32  hOwner;
-    INT32        x;
-    INT32        y;
-    INT32        cx;
-    INT32        cy;
+    HINSTANCE  hOwner;
+    INT        x;
+    INT        y;
+    INT        cx;
+    INT        cy;
     DWORD        style;
     LPARAM       lParam;
-} MDICREATESTRUCT32W, *LPMDICREATESTRUCT32W;
+} MDICREATESTRUCTW, *LPMDICREATESTRUCTW;
 
 DECL_WINELIB_TYPE_AW(MDICREATESTRUCT)
 DECL_WINELIB_TYPE_AW(LPMDICREATESTRUCT)
@@ -798,16 +748,13 @@
   /* WM_GETMINMAXINFO struct */
 typedef struct
 {
-    POINT32   ptReserved;
-    POINT32   ptMaxSize;
-    POINT32   ptMaxPosition;
-    POINT32   ptMinTrackSize;
-    POINT32   ptMaxTrackSize;
-} MINMAXINFO32, *PMINMAXINFO32, *LPMINMAXINFO32;
+    POINT   ptReserved;
+    POINT   ptMaxSize;
+    POINT   ptMaxPosition;
+    POINT   ptMinTrackSize;
+    POINT   ptMaxTrackSize;
+} MINMAXINFO, *PMINMAXINFO32, *LPMINMAXINFO32;
 
-DECL_WINELIB_TYPE(MINMAXINFO)
-DECL_WINELIB_TYPE(PMINMAXINFO)
-DECL_WINELIB_TYPE(LPMINMAXINFO)
 
   /* RedrawWindow() flags */
 #define RDW_INVALIDATE       0x0001
@@ -832,18 +779,15 @@
   /* WM_WINDOWPOSCHANGING/CHANGED struct */
 typedef struct
 {
-    HWND32  hwnd;
-    HWND32  hwndInsertAfter;
-    INT32   x;
-    INT32   y;
-    INT32   cx;
-    INT32   cy;
-    UINT32  flags;
-} WINDOWPOS32, *PWINDOWPOS32, *LPWINDOWPOS32;
+    HWND  hwnd;
+    HWND  hwndInsertAfter;
+    INT   x;
+    INT   y;
+    INT   cx;
+    INT   cy;
+    UINT  flags;
+} WINDOWPOS, *PWINDOWPOS32, *LPWINDOWPOS;
 
-DECL_WINELIB_TYPE(WINDOWPOS)
-DECL_WINELIB_TYPE(PWINDOWPOS)
-DECL_WINELIB_TYPE(LPWINDOWPOS)
 
   /* WM_MOUSEACTIVATE return values */
 #define MA_ACTIVATE             1
@@ -859,12 +803,10 @@
   /* WM_NCCALCSIZE parameter structure */
 typedef struct
 {
-    RECT32       rgrc[3];
-    WINDOWPOS32 *lppos;
-} NCCALCSIZE_PARAMS32, *LPNCCALCSIZE_PARAMS32;
+    RECT       rgrc[3];
+    WINDOWPOS *lppos;
+} NCCALCSIZE_PARAMS, *LPNCCALCSIZE_PARAMS;
 
-DECL_WINELIB_TYPE(NCCALCSIZE_PARAMS)
-DECL_WINELIB_TYPE(LPNCCALCSIZE_PARAMS)
 
   /* WM_NCCALCSIZE return flags */
 #define WVR_ALIGNTOP        0x0010
@@ -1014,31 +956,31 @@
 
 typedef struct
 {
-    UINT32      style;
-    WNDPROC32   lpfnWndProc;
-    INT32       cbClsExtra;
-    INT32       cbWndExtra;
-    HINSTANCE32 hInstance;
-    HICON32     hIcon;
-    HCURSOR32   hCursor;
-    HBRUSH32    hbrBackground;
+    UINT      style;
+    WNDPROC   lpfnWndProc;
+    INT       cbClsExtra;
+    INT       cbWndExtra;
+    HINSTANCE hInstance;
+    HICON     hIcon;
+    HCURSOR   hCursor;
+    HBRUSH    hbrBackground;
     LPCSTR      lpszMenuName;
     LPCSTR      lpszClassName;
-} WNDCLASS32A, *LPWNDCLASS32A;
+} WNDCLASSA, *LPWNDCLASSA;
 
 typedef struct
 {
-    UINT32      style;
-    WNDPROC32   lpfnWndProc;
-    INT32       cbClsExtra;
-    INT32       cbWndExtra;
-    HINSTANCE32 hInstance;
-    HICON32     hIcon;
-    HCURSOR32   hCursor;
-    HBRUSH32    hbrBackground;
+    UINT      style;
+    WNDPROC   lpfnWndProc;
+    INT       cbClsExtra;
+    INT       cbWndExtra;
+    HINSTANCE hInstance;
+    HICON     hIcon;
+    HCURSOR   hCursor;
+    HBRUSH    hbrBackground;
     LPCWSTR     lpszMenuName;
     LPCWSTR     lpszClassName;
-} WNDCLASS32W, *LPWNDCLASS32W;
+} WNDCLASSW, *LPWNDCLASSW;
 
 DECL_WINELIB_TYPE_AW(WNDCLASS)
 DECL_WINELIB_TYPE_AW(LPWNDCLASS)
@@ -1050,9 +992,9 @@
 } COPYDATASTRUCT, *PCOPYDATASTRUCT, *LPCOPYDATASTRUCT;
 
 typedef struct {
-    HMENU32 hmenuIn;
-    HMENU32 hmenuNext;
-    HWND32  hwndNext;
+    HMENU hmenuIn;
+    HMENU hmenuNext;
+    HWND  hwndNext;
 } MDINEXTMENU, *PMDINEXTMENU, *LPMDINEXTMENU;
 
 /* WinHelp internal structure */
@@ -1126,64 +1068,60 @@
 
 typedef struct
 {
-    UINT32      cbSize;
-    UINT32      style;
-    WNDPROC32   lpfnWndProc;
-    INT32       cbClsExtra;
-    INT32       cbWndExtra;
-    HINSTANCE32 hInstance;
-    HICON32     hIcon;
-    HCURSOR32   hCursor;
-    HBRUSH32    hbrBackground;
+    UINT      cbSize;
+    UINT      style;
+    WNDPROC   lpfnWndProc;
+    INT       cbClsExtra;
+    INT       cbWndExtra;
+    HINSTANCE hInstance;
+    HICON     hIcon;
+    HCURSOR   hCursor;
+    HBRUSH    hbrBackground;
     LPCSTR      lpszMenuName;
     LPCSTR      lpszClassName;
-    HICON32     hIconSm;
-} WNDCLASSEX32A, *LPWNDCLASSEX32A;
+    HICON     hIconSm;
+} WNDCLASSEXA, *LPWNDCLASSEXA;
 
 typedef struct
 {
-    UINT32      cbSize;
-    UINT32      style;
-    WNDPROC32   lpfnWndProc;
-    INT32       cbClsExtra;
-    INT32       cbWndExtra;
-    HINSTANCE32 hInstance;
-    HICON32     hIcon;
-    HCURSOR32   hCursor;
-    HBRUSH32    hbrBackground;
+    UINT      cbSize;
+    UINT      style;
+    WNDPROC   lpfnWndProc;
+    INT       cbClsExtra;
+    INT       cbWndExtra;
+    HINSTANCE hInstance;
+    HICON     hIcon;
+    HCURSOR   hCursor;
+    HBRUSH    hbrBackground;
     LPCWSTR     lpszMenuName;
     LPCWSTR     lpszClassName;
-    HICON32     hIconSm;
-} WNDCLASSEX32W, *LPWNDCLASSEX32W;
+    HICON     hIconSm;
+} WNDCLASSEXW, *LPWNDCLASSEXW;
 
 DECL_WINELIB_TYPE_AW(WNDCLASSEX)
 DECL_WINELIB_TYPE_AW(LPWNDCLASSEX)
 
 typedef struct
 {
-    HWND32    hwnd;
-    UINT32    message;
-    WPARAM32  wParam;
+    HWND    hwnd;
+    UINT    message;
+    WPARAM  wParam;
     LPARAM    lParam;
     DWORD     time;
-    POINT32   pt;
-} MSG32, *LPMSG32;
+    POINT   pt;
+} MSG, *LPMSG;
 
-DECL_WINELIB_TYPE(MSG)
-DECL_WINELIB_TYPE(LPMSG)
 	
 /* Cursors / Icons */
 
 typedef struct {
-	BOOL32		fIcon;
+	BOOL		fIcon;
 	DWORD		xHotspot;
 	DWORD		yHotspot;
-	HBITMAP32	hbmMask;
-	HBITMAP32	hbmColor;
-} ICONINFO32,*LPICONINFO32;
+	HBITMAP	hbmMask;
+	HBITMAP	hbmColor;
+} ICONINFO,*LPICONINFO;
 
-DECL_WINELIB_TYPE(ICONINFO)
-DECL_WINELIB_TYPE(LPICONINFO)
 
 /* this is the 6 byte accel struct used in Win32 when presented to the user */
 typedef struct
@@ -1192,7 +1130,7 @@
     BYTE   pad0;
     WORD   key;
     WORD   cmd;
-} ACCEL32, *LPACCEL32;
+} ACCEL, *LPACCEL;
 
 /* this is the 8 byte accel struct used in Win32 resources (internal only) */
 typedef struct
@@ -1204,8 +1142,6 @@
     WORD   pad1;
 } PE_ACCEL, *LPPE_ACCEL;
 
-DECL_WINELIB_TYPE(ACCEL)
-DECL_WINELIB_TYPE(LPACCEL)
 
 /* Flags for TrackPopupMenu */
 #define TPM_LEFTBUTTON    0x0000
@@ -1223,38 +1159,38 @@
 
 typedef struct 
 {
-    UINT32   cbSize;
-    RECT32   rcExclude;
+    UINT   cbSize;
+    RECT   rcExclude;
 } TPMPARAMS, *LPTPMPARAMS;
 
 /* FIXME: not sure this one is correct */
 typedef struct {
-  UINT32    cbSize;
-  UINT32    fMask;
-  UINT32    fType;
-  UINT32    fState;
-  UINT32    wID;
-  HMENU32   hSubMenu;
-  HBITMAP32 hbmpChecked;
-  HBITMAP32 hbmpUnchecked;
+  UINT    cbSize;
+  UINT    fMask;
+  UINT    fType;
+  UINT    fState;
+  UINT    wID;
+  HMENU   hSubMenu;
+  HBITMAP hbmpChecked;
+  HBITMAP hbmpUnchecked;
   DWORD     dwItemData;
   LPSTR     dwTypeData;
-  UINT32    cch;
-} MENUITEMINFO32A, *LPMENUITEMINFO32A;
+  UINT    cch;
+} MENUITEMINFOA, *LPMENUITEMINFOA;
 
 typedef struct {
-  UINT32    cbSize;
-  UINT32    fMask;
-  UINT32    fType;
-  UINT32    fState;
-  UINT32    wID;
-  HMENU32   hSubMenu;
-  HBITMAP32 hbmpChecked;
-  HBITMAP32 hbmpUnchecked;
+  UINT    cbSize;
+  UINT    fMask;
+  UINT    fType;
+  UINT    fState;
+  UINT    wID;
+  HMENU   hSubMenu;
+  HBITMAP hbmpChecked;
+  HBITMAP hbmpUnchecked;
   DWORD     dwItemData;
   LPWSTR    dwTypeData;
-  UINT32    cch;
-} MENUITEMINFO32W, *LPMENUITEMINFO32W;
+  UINT    cch;
+} MENUITEMINFOW, *LPMENUITEMINFOW;
 
 DECL_WINELIB_TYPE_AW(MENUITEMINFO)
 DECL_WINELIB_TYPE_AW(LPMENUITEMINFO)
@@ -1268,8 +1204,7 @@
 #define MIIM_DATA        0x00000020
 
 /* DrawState defines ... */
-typedef BOOL32 (CALLBACK *DRAWSTATEPROC32)(HDC32,LPARAM,WPARAM32,INT32,INT32);
-DECL_WINELIB_TYPE(DRAWSTATEPROC)
+typedef BOOL (CALLBACK *DRAWSTATEPROC)(HDC,LPARAM,WPARAM,INT,INT);
 
 /* WM_H/VSCROLL commands */
 #define SB_LINEUP           0
@@ -1320,23 +1255,15 @@
 #define ESB_DISABLE_RTDN    ESB_DISABLE_RIGHT
 
 /* Win32 button control messages */
-#define BM_GETCHECK32          0x00f0
-#define BM_SETCHECK32          0x00f1
-#define BM_GETSTATE32          0x00f2
-#define BM_SETSTATE32          0x00f3
-#define BM_SETSTYLE32          0x00f4
-#define BM_CLICK32             0x00f5
-#define BM_GETIMAGE32          0x00f6
-#define BM_SETIMAGE32          0x00f7
+#define BM_GETCHECK          0x00f0
+#define BM_SETCHECK          0x00f1
+#define BM_GETSTATE          0x00f2
+#define BM_SETSTATE          0x00f3
+#define BM_SETSTYLE          0x00f4
+#define BM_CLICK             0x00f5
+#define BM_GETIMAGE          0x00f6
+#define BM_SETIMAGE          0x00f7
 /* Winelib button control messages */
-#define BM_GETCHECK            WINELIB_NAME(BM_GETCHECK)
-#define BM_SETCHECK            WINELIB_NAME(BM_SETCHECK)
-#define BM_GETSTATE            WINELIB_NAME(BM_GETSTATE)
-#define BM_SETSTATE            WINELIB_NAME(BM_SETSTATE)
-#define BM_SETSTYLE            WINELIB_NAME(BM_SETSTYLE)
-#define BM_CLICK               WINELIB_NAME(BM_CLICK)
-#define BM_GETIMAGE            WINELIB_NAME(BM_GETIMAGE)
-#define BM_SETIMAGE            WINELIB_NAME(BM_SETIMAGE)
 
 /* Button notification codes */
 #define BN_CLICKED             0
@@ -1378,41 +1305,31 @@
 #define SS_SUNKEN           0x00001000L
 
 /* Static Control Messages */
-#define STM_SETICON32       0x0170
-#define STM_SETICON	    WINELIB_NAME(STM_SETICON)
-#define STM_GETICON32       0x0171
-#define STM_GETICON	    WINELIB_NAME(STM_GETICON)
+#define STM_SETICON       0x0170
+#define STM_GETICON       0x0171
 #define STM_SETIMAGE        0x0172
 #define STM_GETIMAGE        0x0173
 
 /* Scrollbar messages */
-#define SBM_SETPOS32             0x00e0
-#define SBM_SETPOS               WINELIB_NAME(SBM_SETPOS)
-#define SBM_GETPOS32             0x00e1
-#define SBM_GETPOS               WINELIB_NAME(SBM_GETPOS)
-#define SBM_SETRANGE32           0x00e2
-#define SBM_SETRANGE             WINELIB_NAME(SBM_SETRANGE)
-#define SBM_GETRANGE32           0x00e3
-#define SBM_GETRANGE             WINELIB_NAME(SBM_GETRANGE)
-#define SBM_ENABLE_ARROWS32      0x00e4
-#define SBM_ENABLE_ARROWS        WINELIB_NAME(SBM_ENABLE_ARROWS)
-#define SBM_SETRANGEREDRAW32     0x00e6
-#define SBM_SETRANGEREDRAW       WINELIB_NAME(SBM_SETRANGEREDRAW)
-#define SBM_SETSCROLLINFO32      0x00e9
-#define SBM_SETSCROLLINFO        WINELIB_NAME(SBM_SETSCROLLINFO)
-#define SBM_GETSCROLLINFO32      0x00ea
-#define SBM_GETSCROLLINFO        WINELIB_NAME(SBM_GETSCROLLINFO)
+#define SBM_SETPOS             0x00e0
+#define SBM_GETPOS             0x00e1
+#define SBM_SETRANGE           0x00e2
+#define SBM_GETRANGE           0x00e3
+#define SBM_ENABLE_ARROWS      0x00e4
+#define SBM_SETRANGEREDRAW     0x00e6
+#define SBM_SETSCROLLINFO      0x00e9
+#define SBM_GETSCROLLINFO      0x00ea
 
 /* Scrollbar info */
 typedef struct
 {
-    UINT32    cbSize;
-    UINT32    fMask;
-    INT32     nMin;
-    INT32     nMax;
-    UINT32    nPage;
-    INT32     nPos;
-    INT32     nTrackPos;
+    UINT    cbSize;
+    UINT    fMask;
+    INT     nMin;
+    INT     nMax;
+    UINT    nPage;
+    INT     nPos;
+    INT     nTrackPos;
 } SCROLLINFO, *LPSCROLLINFO;
  
 /* GetScrollInfo() flags */ 
@@ -1442,90 +1359,48 @@
 #define LBS_STANDARD  (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)
 
 /* Listbox messages */
-#define LB_ADDSTRING32           0x0180
-#define LB_ADDSTRING             WINELIB_NAME(LB_ADDSTRING)
-#define LB_INSERTSTRING32        0x0181
-#define LB_INSERTSTRING          WINELIB_NAME(LB_INSERTSTRING)
-#define LB_DELETESTRING32        0x0182
-#define LB_DELETESTRING          WINELIB_NAME(LB_DELETESTRING)
-#define LB_SELITEMRANGEEX32      0x0183
-#define LB_SELITEMRANGEEX        WINELIB_NAME(LB_SELITEMRANGEEX)
-#define LB_RESETCONTENT32        0x0184
-#define LB_RESETCONTENT          WINELIB_NAME(LB_RESETCONTENT)
-#define LB_SETSEL32              0x0185
-#define LB_SETSEL                WINELIB_NAME(LB_SETSEL)
-#define LB_SETCURSEL32           0x0186
-#define LB_SETCURSEL             WINELIB_NAME(LB_SETCURSEL)
-#define LB_GETSEL32              0x0187
-#define LB_GETSEL                WINELIB_NAME(LB_GETSEL)
-#define LB_GETCURSEL32           0x0188
-#define LB_GETCURSEL             WINELIB_NAME(LB_GETCURSEL)
-#define LB_GETTEXT32             0x0189
-#define LB_GETTEXT               WINELIB_NAME(LB_GETTEXT)
-#define LB_GETTEXTLEN32          0x018a
-#define LB_GETTEXTLEN            WINELIB_NAME(LB_GETTEXTLEN)
-#define LB_GETCOUNT32            0x018b
-#define LB_GETCOUNT              WINELIB_NAME(LB_GETCOUNT)
-#define LB_SELECTSTRING32        0x018c
-#define LB_SELECTSTRING          WINELIB_NAME(LB_SELECTSTRING)
-#define LB_DIR32                 0x018d
-#define LB_DIR                   WINELIB_NAME(LB_DIR)
-#define LB_GETTOPINDEX32         0x018e
-#define LB_GETTOPINDEX           WINELIB_NAME(LB_GETTOPINDEX)
-#define LB_FINDSTRING32          0x018f
-#define LB_FINDSTRING            WINELIB_NAME(LB_FINDSTRING)
-#define LB_GETSELCOUNT32         0x0190
-#define LB_GETSELCOUNT           WINELIB_NAME(LB_GETSELCOUNT)
-#define LB_GETSELITEMS32         0x0191
-#define LB_GETSELITEMS           WINELIB_NAME(LB_GETSELITEMS)
-#define LB_SETTABSTOPS32         0x0192
-#define LB_SETTABSTOPS           WINELIB_NAME(LB_SETTABSTOPS)
-#define LB_GETHORIZONTALEXTENT32 0x0193
-#define LB_GETHORIZONTALEXTENT   WINELIB_NAME(LB_GETHORIZONTALEXTENT)
-#define LB_SETHORIZONTALEXTENT32 0x0194
-#define LB_SETHORIZONTALEXTENT   WINELIB_NAME(LB_SETHORIZONTALEXTENT)
-#define LB_SETCOLUMNWIDTH32      0x0195
-#define LB_SETCOLUMNWIDTH        WINELIB_NAME(LB_SETCOLUMNWIDTH)
-#define LB_ADDFILE32             0x0196
-#define LB_ADDFILE               WINELIB_NAME(LB_ADDFILE)
-#define LB_SETTOPINDEX32         0x0197
-#define LB_SETTOPINDEX           WINELIB_NAME(LB_SETTOPINDEX)
-#define LB_GETITEMRECT32         0x0198
-#define LB_GETITEMRECT           WINELIB_NAME(LB_GETITEMRECT)
-#define LB_GETITEMDATA32         0x0199
-#define LB_GETITEMDATA           WINELIB_NAME(LB_GETITEMDATA)
-#define LB_SETITEMDATA32         0x019a
-#define LB_SETITEMDATA           WINELIB_NAME(LB_SETITEMDATA)
-#define LB_SELITEMRANGE32        0x019b
-#define LB_SELITEMRANGE          WINELIB_NAME(LB_SELITEMRANGE)
-#define LB_SETANCHORINDEX32      0x019c
-#define LB_SETANCHORINDEX        WINELIB_NAME(LB_SETANCHORINDEX)
-#define LB_GETANCHORINDEX32      0x019d
-#define LB_GETANCHORINDEX        WINELIB_NAME(LB_GETANCHORINDEX)
-#define LB_SETCARETINDEX32       0x019e
-#define LB_SETCARETINDEX         WINELIB_NAME(LB_SETCARETINDEX)
-#define LB_GETCARETINDEX32       0x019f
-#define LB_GETCARETINDEX         WINELIB_NAME(LB_GETCARETINDEX)
-#define LB_SETITEMHEIGHT32       0x01a0
-#define LB_SETITEMHEIGHT         WINELIB_NAME(LB_SETITEMHEIGHT)
-#define LB_GETITEMHEIGHT32       0x01a1
-#define LB_GETITEMHEIGHT         WINELIB_NAME(LB_GETITEMHEIGHT)
-#define LB_FINDSTRINGEXACT32     0x01a2
-#define LB_FINDSTRINGEXACT       WINELIB_NAME(LB_FINDSTRINGEXACT)
-#define LB_CARETON32             0x01a3
-#define LB_CARETON               WINELIB_NAME(LB_CARETON)
-#define LB_CARETOFF32            0x01a4
-#define LB_CARETOFF              WINELIB_NAME(LB_CARETOFF)
-#define LB_SETLOCALE32           0x01a5
-#define LB_SETLOCALE             WINELIB_NAME(LB_SETLOCALE)
-#define LB_GETLOCALE32           0x01a6
-#define LB_GETLOCALE             WINELIB_NAME(LB_GETLOCALE)
-#define LB_SETCOUNT32            0x01a7
-#define LB_SETCOUNT              WINELIB_NAME(LB_SETCOUNT)
-#define LB_INITSTORAGE32         0x01a8
-#define LB_INITSTORAGE           WINELIB_NAME(LB_INITSTORAGE)
-#define LB_ITEMFROMPOINT32       0x01a9
-#define LB_ITEMFROMPOINT         WINELIB_NAME(LB_ITEMFROMPOINT)
+#define LB_ADDSTRING           0x0180
+#define LB_INSERTSTRING        0x0181
+#define LB_DELETESTRING        0x0182
+#define LB_SELITEMRANGEEX      0x0183
+#define LB_RESETCONTENT        0x0184
+#define LB_SETSEL              0x0185
+#define LB_SETCURSEL           0x0186
+#define LB_GETSEL              0x0187
+#define LB_GETCURSEL           0x0188
+#define LB_GETTEXT             0x0189
+#define LB_GETTEXTLEN          0x018a
+#define LB_GETCOUNT            0x018b
+#define LB_SELECTSTRING        0x018c
+#define LB_DIR                 0x018d
+#define LB_GETTOPINDEX         0x018e
+#define LB_FINDSTRING          0x018f
+#define LB_GETSELCOUNT         0x0190
+#define LB_GETSELITEMS         0x0191
+#define LB_SETTABSTOPS         0x0192
+#define LB_GETHORIZONTALEXTENT 0x0193
+#define LB_SETHORIZONTALEXTENT 0x0194
+#define LB_SETCOLUMNWIDTH      0x0195
+#define LB_ADDFILE             0x0196
+#define LB_SETTOPINDEX         0x0197
+#define LB_GETITEMRECT         0x0198
+#define LB_GETITEMDATA         0x0199
+#define LB_SETITEMDATA         0x019a
+#define LB_SELITEMRANGE        0x019b
+#define LB_SETANCHORINDEX      0x019c
+#define LB_GETANCHORINDEX      0x019d
+#define LB_SETCARETINDEX       0x019e
+#define LB_GETCARETINDEX       0x019f
+#define LB_SETITEMHEIGHT       0x01a0
+#define LB_GETITEMHEIGHT       0x01a1
+#define LB_FINDSTRINGEXACT     0x01a2
+#define LB_CARETON             0x01a3
+#define LB_CARETOFF            0x01a4
+#define LB_SETLOCALE           0x01a5
+#define LB_GETLOCALE           0x01a6
+#define LB_SETCOUNT            0x01a7
+#define LB_INITSTORAGE         0x01a8
+#define LB_ITEMFROMPOINT       0x01a9
 
 /* Listbox notification codes */
 #define LBN_ERRSPACE        (-2)
@@ -1560,74 +1435,40 @@
 
 
 /* Combo box messages */
-#define CB_GETEDITSEL32            0x0140
-#define CB_GETEDITSEL              WINELIB_NAME(CB_GETEDITSEL)
-#define CB_LIMITTEXT32             0x0141
-#define CB_LIMITTEXT               WINELIB_NAME(CB_LIMITTEXT)
-#define CB_SETEDITSEL32            0x0142
-#define CB_SETEDITSEL              WINELIB_NAME(CB_SETEDITSEL)
-#define CB_ADDSTRING32             0x0143
-#define CB_ADDSTRING               WINELIB_NAME(CB_ADDSTRING)
-#define CB_DELETESTRING32          0x0144
-#define CB_DELETESTRING            WINELIB_NAME(CB_DELETESTRING)
-#define CB_DIR32                   0x0145
-#define CB_DIR                     WINELIB_NAME(CB_DIR)
-#define CB_GETCOUNT32              0x0146
-#define CB_GETCOUNT                WINELIB_NAME(CB_GETCOUNT)
-#define CB_GETCURSEL32             0x0147
-#define CB_GETCURSEL               WINELIB_NAME(CB_GETCURSEL)
-#define CB_GETLBTEXT32             0x0148
-#define CB_GETLBTEXT               WINELIB_NAME(CB_GETLBTEXT)
-#define CB_GETLBTEXTLEN32          0x0149
-#define CB_GETLBTEXTLEN            WINELIB_NAME(CB_GETLBTEXTLEN)
-#define CB_INSERTSTRING32          0x014a
-#define CB_INSERTSTRING            WINELIB_NAME(CB_INSERTSTRING)
-#define CB_RESETCONTENT32          0x014b
-#define CB_RESETCONTENT            WINELIB_NAME(CB_RESETCONTENT)
-#define CB_FINDSTRING32            0x014c
-#define CB_FINDSTRING              WINELIB_NAME(CB_FINDSTRING)
-#define CB_SELECTSTRING32          0x014d
-#define CB_SELECTSTRING            WINELIB_NAME(CB_SELECTSTRING)
-#define CB_SETCURSEL32             0x014e
-#define CB_SETCURSEL               WINELIB_NAME(CB_SETCURSEL)
-#define CB_SHOWDROPDOWN32          0x014f
-#define CB_SHOWDROPDOWN            WINELIB_NAME(CB_SHOWDROPDOWN)
-#define CB_GETITEMDATA32           0x0150
-#define CB_GETITEMDATA             WINELIB_NAME(CB_GETITEMDATA)
-#define CB_SETITEMDATA32           0x0151
-#define CB_SETITEMDATA             WINELIB_NAME(CB_SETITEMDATA)
-#define CB_GETDROPPEDCONTROLRECT32 0x0152
-#define CB_GETDROPPEDCONTROLRECT   WINELIB_NAME(CB_GETDROPPEDCONTROLRECT)
-#define CB_SETITEMHEIGHT32         0x0153
-#define CB_SETITEMHEIGHT           WINELIB_NAME(CB_SETITEMHEIGHT)
-#define CB_GETITEMHEIGHT32         0x0154
-#define CB_GETITEMHEIGHT           WINELIB_NAME(CB_GETITEMHEIGHT)
-#define CB_SETEXTENDEDUI32         0x0155
-#define CB_SETEXTENDEDUI           WINELIB_NAME(CB_SETEXTENDEDUI)
-#define CB_GETEXTENDEDUI32         0x0156
-#define CB_GETEXTENDEDUI           WINELIB_NAME(CB_GETEXTENDEDUI)
-#define CB_GETDROPPEDSTATE32       0x0157
-#define CB_GETDROPPEDSTATE         WINELIB_NAME(CB_GETDROPPEDSTATE)
-#define CB_FINDSTRINGEXACT32       0x0158
-#define CB_FINDSTRINGEXACT         WINELIB_NAME(CB_FINDSTRINGEXACT)
-#define CB_SETLOCALE32             0x0159
-#define CB_SETLOCALE               WINELIB_NAME(CB_SETLOCALE)
-#define CB_GETLOCALE32             0x015a
-#define CB_GETLOCALE               WINELIB_NAME(CB_GETLOCALE)
-#define CB_GETTOPINDEX32           0x015b
-#define CB_GETTOPINDEX             WINELIB_NAME(CB_GETTOPINDEX)
-#define CB_SETTOPINDEX32           0x015c
-#define CB_SETTOPINDEX             WINELIB_NAME(CB_SETTOPINDEX)
-#define CB_GETHORIZONTALEXTENT32   0x015d
-#define CB_GETHORIZONTALEXTENT     WINELIB_NAME(CB_GETHORIZONTALEXTENT)
-#define CB_SETHORIZONTALEXTENT32   0x015e
-#define CB_SETHORIZONTALEXTENT     WINELIB_NAME(CB_SETHORIZONTALEXTENT)
-#define CB_GETDROPPEDWIDTH32       0x015f
-#define CB_GETDROPPEDWIDTH         WINELIB_NAME(CB_GETDROPPEDWIDTH)
-#define CB_SETDROPPEDWIDTH32       0x0160
-#define CB_SETDROPPEDWIDTH         WINELIB_NAME(CB_SETDROPPEDWIDTH)
-#define CB_INITSTORAGE32           0x0161
-#define CB_INITSTORAGE             WINELIB_NAME(CB_INITSTORAGE)
+#define CB_GETEDITSEL            0x0140
+#define CB_LIMITTEXT             0x0141
+#define CB_SETEDITSEL            0x0142
+#define CB_ADDSTRING             0x0143
+#define CB_DELETESTRING          0x0144
+#define CB_DIR                   0x0145
+#define CB_GETCOUNT              0x0146
+#define CB_GETCURSEL             0x0147
+#define CB_GETLBTEXT             0x0148
+#define CB_GETLBTEXTLEN          0x0149
+#define CB_INSERTSTRING          0x014a
+#define CB_RESETCONTENT          0x014b
+#define CB_FINDSTRING            0x014c
+#define CB_SELECTSTRING          0x014d
+#define CB_SETCURSEL             0x014e
+#define CB_SHOWDROPDOWN          0x014f
+#define CB_GETITEMDATA           0x0150
+#define CB_SETITEMDATA           0x0151
+#define CB_GETDROPPEDCONTROLRECT 0x0152
+#define CB_SETITEMHEIGHT         0x0153
+#define CB_GETITEMHEIGHT         0x0154
+#define CB_SETEXTENDEDUI         0x0155
+#define CB_GETEXTENDEDUI         0x0156
+#define CB_GETDROPPEDSTATE       0x0157
+#define CB_FINDSTRINGEXACT       0x0158
+#define CB_SETLOCALE             0x0159
+#define CB_GETLOCALE             0x015a
+#define CB_GETTOPINDEX           0x015b
+#define CB_SETTOPINDEX           0x015c
+#define CB_GETHORIZONTALEXTENT   0x015d
+#define CB_SETHORIZONTALEXTENT   0x015e
+#define CB_GETDROPPEDWIDTH       0x015f
+#define CB_SETDROPPEDWIDTH       0x0160
+#define CB_INITSTORAGE           0x0161
 
 /* Combo box notification codes */
 #define CBN_ERRSPACE        (-1)
@@ -1695,21 +1536,21 @@
 /* Structure pointed to by lParam of WM_HELP */
 typedef struct			
 {
-    UINT32	cbSize;		/* Size in bytes of this struct  */
-    INT32	iContextType;	/* Either HELPINFO_WINDOW or HELPINFO_MENUITEM */
-    INT32	iCtrlId;	/* Control Id or a Menu item Id. */
-    HANDLE32	hItemHandle;	/* hWnd of control or hMenu.     */
+    UINT	cbSize;		/* Size in bytes of this struct  */
+    INT	iContextType;	/* Either HELPINFO_WINDOW or HELPINFO_MENUITEM */
+    INT	iCtrlId;	/* Control Id or a Menu item Id. */
+    HANDLE	hItemHandle;	/* hWnd of control or hMenu.     */
     DWORD	dwContextId;	/* Context Id associated with this item */
-    POINT32	MousePos;	/* Mouse Position in screen co-ordinates */
+    POINT	MousePos;	/* Mouse Position in screen co-ordinates */
 }  HELPINFO,*LPHELPINFO;
 
 typedef void (CALLBACK *MSGBOXCALLBACK)(LPHELPINFO lpHelpInfo);
 
 typedef struct
 {
-    UINT32	cbSize;
-    HWND32	hwndOwner;
-    HINSTANCE32	hInstance;
+    UINT	cbSize;
+    HWND	hwndOwner;
+    HINSTANCE	hInstance;
     LPCSTR	lpszText;
     LPCSTR	lpszCaption;
     DWORD	dwStyle;
@@ -1717,13 +1558,13 @@
     DWORD	dwContextHelpId;
     MSGBOXCALLBACK	lpfnMsgBoxCallback;
     DWORD	dwLanguageId;
-} MSGBOXPARAMS32A,*LPMSGBOXPARAMS32A;
+} MSGBOXPARAMSA,*LPMSGBOXPARAMSA;
 
 typedef struct
 {
-    UINT32	cbSize;
-    HWND32	hwndOwner;
-    HINSTANCE32	hInstance;
+    UINT	cbSize;
+    HWND	hwndOwner;
+    HINSTANCE	hInstance;
     LPCWSTR	lpszText;
     LPCWSTR	lpszCaption;
     DWORD	dwStyle;
@@ -1731,28 +1572,28 @@
     DWORD	dwContextHelpId;
     MSGBOXCALLBACK	lpfnMsgBoxCallback;
     DWORD	dwLanguageId;
-} MSGBOXPARAMS32W,*LPMSGBOXPARAMS32W;
+} MSGBOXPARAMSW,*LPMSGBOXPARAMSW;
 
 DECL_WINELIB_TYPE_AW(MSGBOXPARAMS)
 DECL_WINELIB_TYPE_AW(LPMSGBOXPARAMS)
 
 typedef struct _numberfmt32a {
-    UINT32 NumDigits;
-    UINT32 LeadingZero;
-    UINT32 Grouping;
+    UINT NumDigits;
+    UINT LeadingZero;
+    UINT Grouping;
     LPCSTR lpDecimalSep;
     LPCSTR lpThousandSep;
-    UINT32 NegativeOrder;
-} NUMBERFMT32A;
+    UINT NegativeOrder;
+} NUMBERFMTA;
 
 typedef struct _numberfmt32w {
-    UINT32 NumDigits;
-    UINT32 LeadingZero;
-    UINT32 Grouping;
+    UINT NumDigits;
+    UINT LeadingZero;
+    UINT Grouping;
     LPCWSTR lpDecimalSep;
     LPCWSTR lpThousandSep;
-    UINT32 NegativeOrder;
-} NUMBERFMT32W;
+    UINT NegativeOrder;
+} NUMBERFMTW;
 
 #define MONITOR_DEFAULTTONULL       0x00000000
 #define MONITOR_DEFAULTTOPRIMARY    0x00000001
@@ -1763,27 +1604,27 @@
 typedef struct tagMONITORINFO
 {
     DWORD   cbSize;
-    RECT32  rcMonitor;
-    RECT32  rcWork;
+    RECT  rcMonitor;
+    RECT  rcWork;
     DWORD   dwFlags;
 } MONITORINFO, *LPMONITORINFO;
 
-typedef struct tagMONITORINFOEX32A
+typedef struct tagMONITORINFOEXA
 {
     MONITORINFO dummy;
     CHAR        szDevice[CCHDEVICENAME];
-} MONITORINFOEX32A, *LPMONITORINFOEX32A;
+} MONITORINFOEXA, *LPMONITORINFOEXA;
 
-typedef struct tagMONITORINFOEX32W
+typedef struct tagMONITORINFOEXW
 {
     MONITORINFO dummy;
     WCHAR       szDevice[CCHDEVICENAME];
-} MONITORINFOEX32W, *LPMONITORINFOEX32W;
+} MONITORINFOEXW, *LPMONITORINFOEXW;
 
 DECL_WINELIB_TYPE_AW(MONITORINFOEX)
 DECL_WINELIB_TYPE_AW(LPMONITORINFOEX)
 
-typedef BOOL32  (CALLBACK *MONITORENUMPROC)(HMONITOR,HDC32,LPRECT32,LPARAM);
+typedef BOOL  (CALLBACK *MONITORENUMPROC)(HMONITOR,HDC,LPRECT,LPARAM);
 
 typedef struct tagDLGTEMPLATE
 {
@@ -1827,27 +1668,25 @@
 
 typedef struct
 {
-    CREATESTRUCT32A *lpcs;
-    HWND32           hwndInsertAfter;
-} CBT_CREATEWND32A, *LPCBT_CREATEWND32A;
+    CREATESTRUCTA *lpcs;
+    HWND           hwndInsertAfter;
+} CBT_CREATEWNDA, *LPCBT_CREATEWNDA;
 
 typedef struct
 {
-    CREATESTRUCT32W *lpcs;
-    HWND32           hwndInsertAfter;
-} CBT_CREATEWND32W, *LPCBT_CREATEWND32W;
+    CREATESTRUCTW *lpcs;
+    HWND           hwndInsertAfter;
+} CBT_CREATEWNDW, *LPCBT_CREATEWNDW;
 
 DECL_WINELIB_TYPE_AW(CBT_CREATEWND)
 DECL_WINELIB_TYPE_AW(LPCBT_CREATEWND)
 
 typedef struct
 {
-    BOOL32    fMouse;
-    HWND32    hWndActive;
-} CBTACTIVATESTRUCT32, *LPCBTACTIVATESTRUCT32;
+    BOOL    fMouse;
+    HWND    hWndActive;
+} CBTACTIVATESTRUCT, *LPCBTACTIVATESTRUCT;
 
-DECL_WINELIB_TYPE(CBTACTIVATESTRUCT)
-DECL_WINELIB_TYPE(LPCBTACTIVATESTRUCT)
 
 /* modifiers for RegisterHotKey */
 #define	MOD_ALT		0x0001
@@ -1892,69 +1731,69 @@
 #define	SLE_WARNING	0x00000003
 
 /* Predefined resources */
-#define IDI_APPLICATION32A MAKEINTRESOURCE32A(32512)
-#define IDI_APPLICATION32W MAKEINTRESOURCE32W(32512)
+#define IDI_APPLICATIONA MAKEINTRESOURCEA(32512)
+#define IDI_APPLICATIONW MAKEINTRESOURCEW(32512)
 #define IDI_APPLICATION    WINELIB_NAME_AW(IDI_APPLICATION)
-#define IDI_HAND32A        MAKEINTRESOURCE32A(32513)
-#define IDI_HAND32W        MAKEINTRESOURCE32W(32513)
+#define IDI_HANDA        MAKEINTRESOURCEA(32513)
+#define IDI_HANDW        MAKEINTRESOURCEW(32513)
 #define IDI_HAND           WINELIB_NAME_AW(IDI_HAND)
-#define IDI_QUESTION32A    MAKEINTRESOURCE32A(32514)
-#define IDI_QUESTION32W    MAKEINTRESOURCE32W(32514)
+#define IDI_QUESTIONA    MAKEINTRESOURCEA(32514)
+#define IDI_QUESTIONW    MAKEINTRESOURCEW(32514)
 #define IDI_QUESTION       WINELIB_NAME_AW(IDI_QUESTION)
-#define IDI_EXCLAMATION32A MAKEINTRESOURCE32A(32515)
-#define IDI_EXCLAMATION32W MAKEINTRESOURCE32W(32515)
+#define IDI_EXCLAMATIONA MAKEINTRESOURCEA(32515)
+#define IDI_EXCLAMATIONW MAKEINTRESOURCEW(32515)
 #define IDI_EXCLAMATION    WINELIB_NAME_AW(IDI_EXCLAMATION)
-#define IDI_ASTERISK32A    MAKEINTRESOURCE32A(32516)
-#define IDI_ASTERISK32W    MAKEINTRESOURCE32W(32516)
+#define IDI_ASTERISKA    MAKEINTRESOURCEA(32516)
+#define IDI_ASTERISKW    MAKEINTRESOURCEW(32516)
 #define IDI_ASTERISK       WINELIB_NAME_AW(IDI_ASTERISK)
 
-#define IDC_BUMMER32A      MAKEINTRESOURCE32A(100)
-#define IDC_BUMMER32W      MAKEINTRESOURCE32W(100)
+#define IDC_BUMMERA      MAKEINTRESOURCEA(100)
+#define IDC_BUMMERW      MAKEINTRESOURCEW(100)
 #define IDC_BUMMER         WINELIB_NAME_AW(IDC_BUMMER)
-#define IDC_ARROW32A       MAKEINTRESOURCE32A(32512)
-#define IDC_ARROW32W       MAKEINTRESOURCE32W(32512)
+#define IDC_ARROWA       MAKEINTRESOURCEA(32512)
+#define IDC_ARROWW       MAKEINTRESOURCEW(32512)
 #define IDC_ARROW          WINELIB_NAME_AW(IDC_ARROW)
-#define IDC_IBEAM32A       MAKEINTRESOURCE32A(32513)
-#define IDC_IBEAM32W       MAKEINTRESOURCE32W(32513)
+#define IDC_IBEAMA       MAKEINTRESOURCEA(32513)
+#define IDC_IBEAMW       MAKEINTRESOURCEW(32513)
 #define IDC_IBEAM          WINELIB_NAME_AW(IDC_IBEAM)
-#define IDC_WAIT32A        MAKEINTRESOURCE32A(32514)
-#define IDC_WAIT32W        MAKEINTRESOURCE32W(32514)
+#define IDC_WAITA        MAKEINTRESOURCEA(32514)
+#define IDC_WAITW        MAKEINTRESOURCEW(32514)
 #define IDC_WAIT           WINELIB_NAME_AW(IDC_WAIT)
-#define IDC_CROSS32A       MAKEINTRESOURCE32A(32515)
-#define IDC_CROSS32W       MAKEINTRESOURCE32W(32515)
+#define IDC_CROSSA       MAKEINTRESOURCEA(32515)
+#define IDC_CROSSW       MAKEINTRESOURCEW(32515)
 #define IDC_CROSS          WINELIB_NAME_AW(IDC_CROSS)
-#define IDC_UPARROW32A     MAKEINTRESOURCE32A(32516)
-#define IDC_UPARROW32W     MAKEINTRESOURCE32W(32516)
+#define IDC_UPARROWA     MAKEINTRESOURCEA(32516)
+#define IDC_UPARROWW     MAKEINTRESOURCEW(32516)
 #define IDC_UPARROW        WINELIB_NAME_AW(IDC_UPARROW)
-#define IDC_SIZE32A        MAKEINTRESOURCE32A(32640)
-#define IDC_SIZE32W        MAKEINTRESOURCE32W(32640)
+#define IDC_SIZEA        MAKEINTRESOURCEA(32640)
+#define IDC_SIZEW        MAKEINTRESOURCEW(32640)
 #define IDC_SIZE           WINELIB_NAME_AW(IDC_SIZE)
-#define IDC_ICON32A        MAKEINTRESOURCE32A(32641)
-#define IDC_ICON32W        MAKEINTRESOURCE32W(32641)
+#define IDC_ICONA        MAKEINTRESOURCEA(32641)
+#define IDC_ICONW        MAKEINTRESOURCEW(32641)
 #define IDC_ICON           WINELIB_NAME_AW(IDC_ICON)
-#define IDC_SIZENWSE32A    MAKEINTRESOURCE32A(32642)
-#define IDC_SIZENWSE32W    MAKEINTRESOURCE32W(32642)
+#define IDC_SIZENWSEA    MAKEINTRESOURCEA(32642)
+#define IDC_SIZENWSEW    MAKEINTRESOURCEW(32642)
 #define IDC_SIZENWSE       WINELIB_NAME_AW(IDC_SIZENWSE)
-#define IDC_SIZENESW32A    MAKEINTRESOURCE32A(32643)
-#define IDC_SIZENESW32W    MAKEINTRESOURCE32W(32643)
+#define IDC_SIZENESWA    MAKEINTRESOURCEA(32643)
+#define IDC_SIZENESWW    MAKEINTRESOURCEW(32643)
 #define IDC_SIZENESW       WINELIB_NAME_AW(IDC_SIZENESW)
-#define IDC_SIZEWE32A      MAKEINTRESOURCE32A(32644)
-#define IDC_SIZEWE32W      MAKEINTRESOURCE32W(32644)
+#define IDC_SIZEWEA      MAKEINTRESOURCEA(32644)
+#define IDC_SIZEWEW      MAKEINTRESOURCEW(32644)
 #define IDC_SIZEWE         WINELIB_NAME_AW(IDC_SIZEWE)
-#define IDC_SIZENS32A      MAKEINTRESOURCE32A(32645)
-#define IDC_SIZENS32W      MAKEINTRESOURCE32W(32645)
+#define IDC_SIZENSA      MAKEINTRESOURCEA(32645)
+#define IDC_SIZENSW      MAKEINTRESOURCEW(32645)
 #define IDC_SIZENS         WINELIB_NAME_AW(IDC_SIZENS)
-#define IDC_SIZEALL32A     MAKEINTRESOURCE32A(32646)
-#define IDC_SIZEALL32W     MAKEINTRESOURCE32W(32646)
+#define IDC_SIZEALLA     MAKEINTRESOURCEA(32646)
+#define IDC_SIZEALLW     MAKEINTRESOURCEW(32646)
 #define IDC_SIZEALL        WINELIB_NAME_AW(IDC_SIZEALL)
-#define IDC_NO32A          MAKEINTRESOURCE32A(32648)
-#define IDC_NO32W          MAKEINTRESOURCE32W(32648)
+#define IDC_NOA          MAKEINTRESOURCEA(32648)
+#define IDC_NOW          MAKEINTRESOURCEW(32648)
 #define IDC_NO             WINELIB_NAME_AW(IDC_NO)
-#define IDC_APPSTARTING32A MAKEINTRESOURCE32A(32650)
-#define IDC_APPSTARTING32W MAKEINTRESOURCE32W(32650)
+#define IDC_APPSTARTINGA MAKEINTRESOURCEA(32650)
+#define IDC_APPSTARTINGW MAKEINTRESOURCEW(32650)
 #define IDC_APPSTARTING    WINELIB_NAME_AW(IDC_APPSTARTING)
-#define IDC_HELP32A        MAKEINTRESOURCE32A(32651)
-#define IDC_HELP32W        MAKEINTRESOURCE32W(32651)
+#define IDC_HELPA        MAKEINTRESOURCEA(32651)
+#define IDC_HELPW        MAKEINTRESOURCEW(32651)
 #define IDC_HELP           WINELIB_NAME_AW(IDC_HELP)
 
 /* SystemParametersInfo */
@@ -2168,8 +2007,7 @@
 #define SW_ERASE               0x0004
 
 /* CreateWindow() coordinates */
-#define CW_USEDEFAULT32 ((INT32)0x80000000)
-#define CW_USEDEFAULT   WINELIB_NAME(CW_USEDEFAULT)
+#define CW_USEDEFAULT ((INT)0x80000000)
 
 /* ChildWindowFromPointEx Flags */
 #define CWP_ALL                0x0000
@@ -2237,14 +2075,14 @@
 #define SWP_NOSENDCHANGING  0x0400
 #define SWP_DEFERERASE      0x2000
 
-#define HWND_DESKTOP        ((HWND32)0)
-#define HWND_BROADCAST      ((HWND32)0xffff)
+#define HWND_DESKTOP        ((HWND)0)
+#define HWND_BROADCAST      ((HWND)0xffff)
 
 /* SetWindowPos() hwndInsertAfter field values */
-#define HWND_TOP            ((HWND32)0)
-#define HWND_BOTTOM         ((HWND32)1)
-#define HWND_TOPMOST        ((HWND32)-1)
-#define HWND_NOTOPMOST      ((HWND32)-2)
+#define HWND_TOP            ((HWND)0)
+#define HWND_BOTTOM         ((HWND)1)
+#define HWND_TOPMOST        ((HWND)-1)
+#define HWND_NOTOPMOST      ((HWND)-2)
 
 #define MF_INSERT          0x0000
 #define MF_CHANGE          0x0080
@@ -2418,61 +2256,51 @@
 
 typedef struct
 {
-    UINT32      CtlType;
-    UINT32      CtlID;
-    UINT32      itemID;
-    UINT32      itemAction;
-    UINT32      itemState;
-    HWND32      hwndItem;
-    HDC32       hDC;
-    RECT32      rcItem WINE_PACKED;
+    UINT      CtlType;
+    UINT      CtlID;
+    UINT      itemID;
+    UINT      itemAction;
+    UINT      itemState;
+    HWND      hwndItem;
+    HDC       hDC;
+    RECT      rcItem WINE_PACKED;
     DWORD       itemData WINE_PACKED;
-} DRAWITEMSTRUCT32, *PDRAWITEMSTRUCT32, *LPDRAWITEMSTRUCT32;
+} DRAWITEMSTRUCT, *PDRAWITEMSTRUCT, *LPDRAWITEMSTRUCT;
 
-DECL_WINELIB_TYPE(DRAWITEMSTRUCT)
-DECL_WINELIB_TYPE(PDRAWITEMSTRUCT)
-DECL_WINELIB_TYPE(LPDRAWITEMSTRUCT)
 
 typedef struct
 {
-    UINT32      CtlType;
-    UINT32      CtlID;
-    UINT32      itemID;
-    UINT32      itemWidth;
-    UINT32      itemHeight;
+    UINT      CtlType;
+    UINT      CtlID;
+    UINT      itemID;
+    UINT      itemWidth;
+    UINT      itemHeight;
     DWORD       itemData;
-} MEASUREITEMSTRUCT32, *PMEASUREITEMSTRUCT32, *LPMEASUREITEMSTRUCT32;
+} MEASUREITEMSTRUCT, *PMEASUREITEMSTRUCT, *LPMEASUREITEMSTRUCT;
 
-DECL_WINELIB_TYPE(MEASUREITEMSTRUCT)
-DECL_WINELIB_TYPE(PMEASUREITEMSTRUCT)
-DECL_WINELIB_TYPE(LPMEASUREITEMSTRUCT)
 
 typedef struct
 {
-    UINT32     CtlType;
-    UINT32     CtlID;
-    UINT32     itemID;
-    HWND32     hwndItem;
+    UINT     CtlType;
+    UINT     CtlID;
+    UINT     itemID;
+    HWND     hwndItem;
     DWORD      itemData;
-} DELETEITEMSTRUCT32, *LPDELETEITEMSTRUCT32;
+} DELETEITEMSTRUCT, *LPDELETEITEMSTRUCT;
 
-DECL_WINELIB_TYPE(DELETEITEMSTRUCT)
-DECL_WINELIB_TYPE(LPDELETEITEMSTRUCT)
 
 typedef struct
 {
-    UINT32      CtlType;
-    UINT32      CtlID;
-    HWND32      hwndItem;
-    UINT32      itemID1;
+    UINT      CtlType;
+    UINT      CtlID;
+    HWND      hwndItem;
+    UINT      itemID1;
     DWORD       itemData1;
-    UINT32      itemID2;
+    UINT      itemID2;
     DWORD       itemData2;
     DWORD       dwLocaleId;
-} COMPAREITEMSTRUCT32, *LPCOMPAREITEMSTRUCT32;
+} COMPAREITEMSTRUCT, *LPCOMPAREITEMSTRUCT;
 
-DECL_WINELIB_TYPE(COMPAREITEMSTRUCT)
-DECL_WINELIB_TYPE(LPCOMPAREITEMSTRUCT)
 
 /* WM_KEYUP/DOWN/CHAR HIWORD(lParam) flags */
 #define KF_EXTENDED         0x0100
@@ -2793,84 +2621,79 @@
 #define NF_REQUERY	    4
 
 #pragma pack(4)
-#define     EnumTaskWindows32(handle,proc,lparam) \
+#define     EnumTaskWindows(handle,proc,lparam) \
             EnumThreadWindows(handle,proc,lparam)
-#define     EnumTaskWindows WINELIB_NAME(EnumTaskWindows)
-#define     OemToAnsi32A OemToChar32A
-#define     OemToAnsi32W OemToChar32W
+#define     OemToAnsiA OemToCharA
+#define     OemToAnsiW OemToCharW
 #define     OemToAnsi WINELIB_NAME_AW(OemToAnsi)
-#define     OemToAnsiBuff32A OemToCharBuff32A
-#define     OemToAnsiBuff32W OemToCharBuff32W
+#define     OemToAnsiBuffA OemToCharBuffA
+#define     OemToAnsiBuffW OemToCharBuffW
 #define     OemToAnsiBuff WINELIB_NAME_AW(OemToAnsiBuff)
-#define     AnsiToOem32A CharToOem32A
-#define     AnsiToOem32W CharToOem32W
+#define     AnsiToOemA CharToOemA
+#define     AnsiToOemW CharToOemW
 #define     AnsiToOem WINELIB_NAME_AW(AnsiToOem)
-#define     AnsiToOemBuff32A CharToOemBuff32A
-#define     AnsiToOemBuff32W CharToOemBuff32W
+#define     AnsiToOemBuffA CharToOemBuffA
+#define     AnsiToOemBuffW CharToOemBuffW
 #define     AnsiToOemBuff WINELIB_NAME_AW(AnsiToOemBuff)
-WORD        WINAPI CascadeWindows (HWND32, UINT32, const LPRECT32,
-                                   UINT32, const HWND32 *);
-INT32       WINAPI CopyAcceleratorTable32A(HACCEL32,LPACCEL32,INT32);
-INT32       WINAPI CopyAcceleratorTable32W(HACCEL32,LPACCEL32,INT32);
+WORD        WINAPI CascadeWindows (HWND, UINT, const LPRECT,
+                                   UINT, const HWND *);
+INT       WINAPI CopyAcceleratorTableA(HACCEL,LPACCEL,INT);
+INT       WINAPI CopyAcceleratorTableW(HACCEL,LPACCEL,INT);
 #define     CopyAcceleratorTable WINELIB_NAME_AW(CopyAcceleratorTable)
-HICON32     WINAPI CreateIconIndirect(LPICONINFO32);
-BOOL32      WINAPI DestroyAcceleratorTable(HACCEL32);
-BOOL32      WINAPI EnumDisplayMonitors(HDC32,LPRECT32,MONITORENUMPROC,LPARAM);
-INT32       WINAPI EnumPropsEx32A(HWND32,PROPENUMPROCEX32A,LPARAM);
-INT32       WINAPI EnumPropsEx32W(HWND32,PROPENUMPROCEX32W,LPARAM);
+HICON     WINAPI CreateIconIndirect(LPICONINFO);
+BOOL      WINAPI DestroyAcceleratorTable(HACCEL);
+BOOL      WINAPI EnumDisplayMonitors(HDC,LPRECT,MONITORENUMPROC,LPARAM);
+INT       WINAPI EnumPropsExA(HWND,PROPENUMPROCEXA,LPARAM);
+INT       WINAPI EnumPropsExW(HWND,PROPENUMPROCEXW,LPARAM);
 #define     EnumPropsEx WINELIB_NAME_AW(EnumPropsEx)
-BOOL32      WINAPI EnumThreadWindows(DWORD,WNDENUMPROC32,LPARAM);
-BOOL32      WINAPI ExitWindowsEx(UINT32,DWORD);
-BOOL32      WINAPI GetIconInfo32(HICON32,LPICONINFO32);
-#define     GetIconInfo WINELIB_NAME(GetIconInfo)
-DWORD       WINAPI GetMenuContextHelpId32(HMENU32);
-#define     GetMenuContextHelpId WINELIB_NAME(GetMenuContextHelpId)
-UINT32      WINAPI GetMenuDefaultItem32(HMENU32,UINT32,UINT32);
-#define     GetMenuDefaultItem WINELIB_NAME(GetMenuDefaultItem)
-BOOL32      WINAPI GetMenuItemInfo32A(HMENU32,UINT32,BOOL32,MENUITEMINFO32A*);
-BOOL32      WINAPI GetMenuItemInfo32W(HMENU32,UINT32,BOOL32,MENUITEMINFO32W*);
+BOOL      WINAPI EnumThreadWindows(DWORD,WNDENUMPROC,LPARAM);
+BOOL      WINAPI ExitWindowsEx(UINT,DWORD);
+BOOL      WINAPI GetIconInfo(HICON,LPICONINFO);
+DWORD       WINAPI GetMenuContextHelpId(HMENU);
+UINT      WINAPI GetMenuDefaultItem(HMENU,UINT,UINT);
+BOOL      WINAPI GetMenuItemInfoA(HMENU,UINT,BOOL,MENUITEMINFOA*);
+BOOL      WINAPI GetMenuItemInfoW(HMENU,UINT,BOOL,MENUITEMINFOW*);
 #define     GetMenuItemInfo WINELIB_NAME_AW(GetMenuItemInfo)
-BOOL32      WINAPI GetMonitorInfo32A(HMONITOR,LPMONITORINFO);
-BOOL32      WINAPI GetMonitorInfo32W(HMONITOR,LPMONITORINFO);
+BOOL      WINAPI GetMonitorInfoA(HMONITOR,LPMONITORINFO);
+BOOL      WINAPI GetMonitorInfoW(HMONITOR,LPMONITORINFO);
 #define     GetMonitorInfo WINELIB_NAME_AW(GetMonitorInfo)
-INT32       WINAPI GetNumberFormat32A(LCID,DWORD,LPCSTR,const NUMBERFMT32A*,LPSTR,int);
-INT32       WINAPI GetNumberFormat32W(LCID,DWORD,LPCWSTR,const NUMBERFMT32W*,LPWSTR,int);
+INT       WINAPI GetNumberFormatA(LCID,DWORD,LPCSTR,const NUMBERFMTA*,LPSTR,int);
+INT       WINAPI GetNumberFormatW(LCID,DWORD,LPCWSTR,const NUMBERFMTW*,LPWSTR,int);
 #define     GetNumberFormat WINELIB_NAME_AW(GetNumberFormat);
-DWORD       WINAPI GetWindowContextHelpId(HWND32);
-DWORD       WINAPI GetWindowThreadProcessId(HWND32,LPDWORD);
-BOOL32      WINAPI IsWindowUnicode(HWND32);
-HKL32       WINAPI LoadKeyboardLayout32A(LPCSTR,UINT32);
-HKL32       WINAPI LoadKeyboardLayout32W(LPCWSTR,UINT32);
+DWORD       WINAPI GetWindowContextHelpId(HWND);
+DWORD       WINAPI GetWindowThreadProcessId(HWND,LPDWORD);
+BOOL      WINAPI IsWindowUnicode(HWND);
+HKL       WINAPI LoadKeyboardLayoutA(LPCSTR,UINT);
+HKL       WINAPI LoadKeyboardLayoutW(LPCWSTR,UINT);
 #define     LoadKeyboardLayout WINELIB_NAME_AW(LoadKeyboardLayout)
-INT32       WINAPI MessageBoxEx32A(HWND32,LPCSTR,LPCSTR,UINT32,WORD);
-INT32       WINAPI MessageBoxEx32W(HWND32,LPCWSTR,LPCWSTR,UINT32,WORD);
+INT       WINAPI MessageBoxExA(HWND,LPCSTR,LPCSTR,UINT,WORD);
+INT       WINAPI MessageBoxExW(HWND,LPCWSTR,LPCWSTR,UINT,WORD);
 #define     MessageBoxEx WINELIB_NAME_AW(MessageBoxEx)
-HMONITOR    WINAPI MonitorFromPoint(POINT32,DWORD);
-HMONITOR    WINAPI MonitorFromRect(LPRECT32,DWORD);
-HMONITOR    WINAPI MonitorFromWindow(HWND32,DWORD);
-DWORD       WINAPI MsgWaitForMultipleObjects(DWORD,HANDLE32*,BOOL32,DWORD,DWORD);
-BOOL32      WINAPI PaintDesktop(HDC32);
-BOOL32      WINAPI PostThreadMessage32A(DWORD, UINT32, WPARAM32, LPARAM);
-BOOL32      WINAPI PostThreadMessage32W(DWORD, UINT32, WPARAM32, LPARAM);
+HMONITOR    WINAPI MonitorFromPoint(POINT,DWORD);
+HMONITOR    WINAPI MonitorFromRect(LPRECT,DWORD);
+HMONITOR    WINAPI MonitorFromWindow(HWND,DWORD);
+DWORD       WINAPI MsgWaitForMultipleObjects(DWORD,HANDLE*,BOOL,DWORD,DWORD);
+BOOL      WINAPI PaintDesktop(HDC);
+BOOL      WINAPI PostThreadMessageA(DWORD, UINT, WPARAM, LPARAM);
+BOOL      WINAPI PostThreadMessageW(DWORD, UINT, WPARAM, LPARAM);
 #define     PostThreadMessage WINELIB_NAME_AW(PostThreadMessage)
-UINT32      WINAPI ReuseDDElParam(UINT32,UINT32,UINT32,UINT32,UINT32);
-BOOL32      WINAPI SendNotifyMessage32A(HWND32,UINT32,WPARAM32,LPARAM);
-BOOL32      WINAPI SendNotifyMessage32W(HWND32,UINT32,WPARAM32,LPARAM);
+UINT      WINAPI ReuseDDElParam(UINT,UINT,UINT,UINT,UINT);
+BOOL      WINAPI SendNotifyMessageA(HWND,UINT,WPARAM,LPARAM);
+BOOL      WINAPI SendNotifyMessageW(HWND,UINT,WPARAM,LPARAM);
 #define     SendNotifyMessage WINELIB_NAME_AW(SendNotifyMessage)
 VOID        WINAPI SetDebugErrorLevel(DWORD);
 VOID        WINAPI SetLastErrorEx(DWORD,DWORD);
-BOOL32      WINAPI SetMenuDefaultItem32(HMENU32,UINT32,UINT32);
-#define     SetMenuDefaultItem WINELIB_NAME(SetMenuDefaultItem)
-BOOL32      WINAPI SetMenuItemInfo32A(HMENU32,UINT32,BOOL32,const MENUITEMINFO32A*);
-BOOL32      WINAPI SetMenuItemInfo32W(HMENU32,UINT32,BOOL32,const MENUITEMINFO32W*);
+BOOL      WINAPI SetMenuDefaultItem(HMENU,UINT,UINT);
+BOOL      WINAPI SetMenuItemInfoA(HMENU,UINT,BOOL,const MENUITEMINFOA*);
+BOOL      WINAPI SetMenuItemInfoW(HMENU,UINT,BOOL,const MENUITEMINFOW*);
 #define     SetMenuItemInfo WINELIB_NAME_AW(SetMenuItemInfo)
-BOOL32      WINAPI SetWindowContextHelpId(HWND32,DWORD);
-WORD        WINAPI TileWindows (HWND32, UINT32, const LPRECT32,
-                                UINT32, const HWND32 *);
-BOOL32      WINAPI TrackPopupMenuEx(HMENU32,UINT32,INT32,INT32,HWND32,
+BOOL      WINAPI SetWindowContextHelpId(HWND,DWORD);
+WORD        WINAPI TileWindows (HWND, UINT, const LPRECT,
+                                UINT, const HWND *);
+BOOL      WINAPI TrackPopupMenuEx(HMENU,UINT,INT,INT,HWND,
                                     LPTPMPARAMS);
-UINT32      WINAPI UnpackDDElParam(UINT32,UINT32,UINT32*,UINT32*);
-DWORD       WINAPI WaitForInputIdle(HANDLE32,DWORD);
+UINT      WINAPI UnpackDDElParam(UINT,UINT,UINT*,UINT*);
+DWORD       WINAPI WaitForInputIdle(HANDLE,DWORD);
 VOID        WINAPI keybd_event(BYTE,BYTE,DWORD,DWORD);
 VOID        WINAPI mouse_event(DWORD,DWORD,DWORD,DWORD,DWORD);
 
@@ -2892,846 +2715,620 @@
 
 /* Declarations for functions that change between Win16 and Win32 */
 
-BOOL32      WINAPI AdjustWindowRect32(LPRECT32,DWORD,BOOL32);
-#define     AdjustWindowRect WINELIB_NAME(AdjustWindowRect)
-BOOL32      WINAPI AdjustWindowRectEx32(LPRECT32,DWORD,BOOL32,DWORD);
-#define     AdjustWindowRectEx WINELIB_NAME(AdjustWindowRectEx)
-#define     AnsiLower32A CharLower32A
-#define     AnsiLower32W CharLower32W
+BOOL      WINAPI AdjustWindowRect(LPRECT,DWORD,BOOL);
+BOOL      WINAPI AdjustWindowRectEx(LPRECT,DWORD,BOOL,DWORD);
+#define     AnsiLowerA CharLowerA
+#define     AnsiLowerW CharLowerW
 #define     AnsiLower WINELIB_NAME_AW(AnsiLower)
-#define     AnsiLowerBuff32A CharLowerBuff32A
-#define     AnsiLowerBuff32W CharLowerBuff32W
+#define     AnsiLowerBuffA CharLowerBuffA
+#define     AnsiLowerBuffW CharLowerBuffW
 #define     AnsiLowerBuff WINELIB_NAME_AW(AnsiLowerBuff)
-#define     AnsiNext32A CharNext32A
-#define     AnsiNext32W CharNext32W
+#define     AnsiNextA CharNextA
+#define     AnsiNextW CharNextW
 #define     AnsiNext WINELIB_NAME_AW(AnsiNext)
-#define     AnsiPrev32A CharPrev32A
-#define     AnsiPrev32W CharPrev32W
+#define     AnsiPrevA CharPrevA
+#define     AnsiPrevW CharPrevW
 #define     AnsiPrev WINELIB_NAME_AW(AnsiPrev)
-#define     AnsiUpper32A CharUpper32A
-#define     AnsiUpper32W CharUpper32W
+#define     AnsiUpperA CharUpperA
+#define     AnsiUpperW CharUpperW
 #define     AnsiUpper WINELIB_NAME_AW(AnsiUpper)
-#define     AnsiUpperBuff32A CharUpperBuff32A
-#define     AnsiUpperBuff32W CharUpperBuff32W
+#define     AnsiUpperBuffA CharUpperBuffA
+#define     AnsiUpperBuffW CharUpperBuffW
 #define     AnsiUpperBuff WINELIB_NAME_AW(AnsiUpperBuff)
-BOOL32      WINAPI AnyPopup32(void);
-#define     AnyPopup WINELIB_NAME(AnyPopup)
-BOOL32      WINAPI AppendMenu32A(HMENU32,UINT32,UINT32,LPCSTR);
-BOOL32      WINAPI AppendMenu32W(HMENU32,UINT32,UINT32,LPCWSTR);
+BOOL      WINAPI AnyPopup(void);
+BOOL      WINAPI AppendMenuA(HMENU,UINT,UINT,LPCSTR);
+BOOL      WINAPI AppendMenuW(HMENU,UINT,UINT,LPCWSTR);
 #define     AppendMenu WINELIB_NAME_AW(AppendMenu)
-UINT32      WINAPI ArrangeIconicWindows32(HWND32);
-#define     ArrangeIconicWindows WINELIB_NAME(ArrangeIconicWindows)
-HDWP32      WINAPI BeginDeferWindowPos32(INT32);
-#define     BeginDeferWindowPos WINELIB_NAME(BeginDeferWindowPos)
-HDC32       WINAPI BeginPaint32(HWND32,LPPAINTSTRUCT32);
-#define     BeginPaint WINELIB_NAME(BeginPaint)
-BOOL32      WINAPI BringWindowToTop32(HWND32);
-#define     BringWindowToTop WINELIB_NAME(BringWindowToTop)
-BOOL32      WINAPI CallMsgFilter32A(LPMSG32,INT32);
-BOOL32      WINAPI CallMsgFilter32W(LPMSG32,INT32);
+UINT      WINAPI ArrangeIconicWindows(HWND);
+HDWP      WINAPI BeginDeferWindowPos(INT);
+HDC       WINAPI BeginPaint(HWND,LPPAINTSTRUCT);
+BOOL      WINAPI BringWindowToTop(HWND);
+BOOL      WINAPI CallMsgFilterA(LPMSG,INT);
+BOOL      WINAPI CallMsgFilterW(LPMSG,INT);
 #define     CallMsgFilter WINELIB_NAME_AW(CallMsgFilter)
-LRESULT     WINAPI CallNextHookEx32(HHOOK,INT32,WPARAM32,LPARAM);
-#define     CallNextHookEx WINELIB_NAME(CallNextHookEx)
-LRESULT     WINAPI CallWindowProc32A(WNDPROC32,HWND32,UINT32,WPARAM32,LPARAM);
-LRESULT     WINAPI CallWindowProc32W(WNDPROC32,HWND32,UINT32,WPARAM32,LPARAM);
+LRESULT     WINAPI CallNextHookEx(HHOOK,INT,WPARAM,LPARAM);
+LRESULT     WINAPI CallWindowProcA(WNDPROC,HWND,UINT,WPARAM,LPARAM);
+LRESULT     WINAPI CallWindowProcW(WNDPROC,HWND,UINT,WPARAM,LPARAM);
 #define     CallWindowProc WINELIB_NAME_AW(CallWindowProc)
-BOOL32      WINAPI ChangeClipboardChain32(HWND32,HWND32);
-#define     ChangeClipboardChain WINELIB_NAME(ChangeClipboardChain)
-BOOL32      WINAPI ChangeMenu32A(HMENU32,UINT32,LPCSTR,UINT32,UINT32);
-BOOL32      WINAPI ChangeMenu32W(HMENU32,UINT32,LPCWSTR,UINT32,UINT32);
+BOOL      WINAPI ChangeClipboardChain(HWND,HWND);
+BOOL      WINAPI ChangeMenuA(HMENU,UINT,LPCSTR,UINT,UINT);
+BOOL      WINAPI ChangeMenuW(HMENU,UINT,LPCWSTR,UINT,UINT);
 #define     ChangeMenu WINELIB_NAME_AW(ChangeMenu)
-LPSTR       WINAPI CharLower32A(LPSTR);
-LPWSTR      WINAPI CharLower32W(LPWSTR);
+LPSTR       WINAPI CharLowerA(LPSTR);
+LPWSTR      WINAPI CharLowerW(LPWSTR);
 #define     CharLower WINELIB_NAME_AW(CharLower)
-DWORD       WINAPI CharLowerBuff32A(LPSTR,DWORD);
-DWORD       WINAPI CharLowerBuff32W(LPWSTR,DWORD);
+DWORD       WINAPI CharLowerBuffA(LPSTR,DWORD);
+DWORD       WINAPI CharLowerBuffW(LPWSTR,DWORD);
 #define     CharLowerBuff WINELIB_NAME_AW(CharLowerBuff)
-LPSTR       WINAPI CharNext32A(LPCSTR);
-LPWSTR      WINAPI CharNext32W(LPCWSTR);
+LPSTR       WINAPI CharNextA(LPCSTR);
+LPWSTR      WINAPI CharNextW(LPCWSTR);
 #define     CharNext WINELIB_NAME_AW(CharNext)
-LPSTR       WINAPI CharNextEx32A(WORD,LPCSTR,DWORD);
-LPWSTR      WINAPI CharNextEx32W(WORD,LPCWSTR,DWORD);
+LPSTR       WINAPI CharNextExA(WORD,LPCSTR,DWORD);
+LPWSTR      WINAPI CharNextExW(WORD,LPCWSTR,DWORD);
 #define     CharNextEx WINELIB_NAME_AW(CharNextEx)
-LPSTR       WINAPI CharPrev32A(LPCSTR,LPCSTR);
-LPWSTR      WINAPI CharPrev32W(LPCWSTR,LPCWSTR);
+LPSTR       WINAPI CharPrevA(LPCSTR,LPCSTR);
+LPWSTR      WINAPI CharPrevW(LPCWSTR,LPCWSTR);
 #define     CharPrev WINELIB_NAME_AW(CharPrev)
-LPSTR       WINAPI CharPrevEx32A(WORD,LPCSTR,LPCSTR,DWORD);
-LPWSTR      WINAPI CharPrevEx32W(WORD,LPCWSTR,LPCWSTR,DWORD);
+LPSTR       WINAPI CharPrevExA(WORD,LPCSTR,LPCSTR,DWORD);
+LPWSTR      WINAPI CharPrevExW(WORD,LPCWSTR,LPCWSTR,DWORD);
 #define     CharPrevEx WINELIB_NAME_AW(CharPrevEx)
-LPSTR       WINAPI CharUpper32A(LPSTR);
-LPWSTR      WINAPI CharUpper32W(LPWSTR);
+LPSTR       WINAPI CharUpperA(LPSTR);
+LPWSTR      WINAPI CharUpperW(LPWSTR);
 #define     CharUpper WINELIB_NAME_AW(CharUpper)
-DWORD       WINAPI CharUpperBuff32A(LPSTR,DWORD);
-DWORD       WINAPI CharUpperBuff32W(LPWSTR,DWORD);
+DWORD       WINAPI CharUpperBuffA(LPSTR,DWORD);
+DWORD       WINAPI CharUpperBuffW(LPWSTR,DWORD);
 #define     CharUpperBuff WINELIB_NAME_AW(CharUpperBuff)
-BOOL32      WINAPI CharToOem32A(LPCSTR,LPSTR);
-BOOL32      WINAPI CharToOem32W(LPCWSTR,LPSTR);
+BOOL      WINAPI CharToOemA(LPCSTR,LPSTR);
+BOOL      WINAPI CharToOemW(LPCWSTR,LPSTR);
 #define     CharToOem WINELIB_NAME_AW(CharToOem)
-BOOL32      WINAPI CharToOemBuff32A(LPCSTR,LPSTR,DWORD);
-BOOL32      WINAPI CharToOemBuff32W(LPCWSTR,LPSTR,DWORD);
+BOOL      WINAPI CharToOemBuffA(LPCSTR,LPSTR,DWORD);
+BOOL      WINAPI CharToOemBuffW(LPCWSTR,LPSTR,DWORD);
 #define     CharToOemBuff WINELIB_NAME_AW(CharToOemBuff)
-BOOL32      WINAPI CheckDlgButton32(HWND32,INT32,UINT32);
-#define     CheckDlgButton WINELIB_NAME(CheckDlgButton)
-DWORD       WINAPI CheckMenuItem32(HMENU32,UINT32,UINT32);
-#define     CheckMenuItem WINELIB_NAME(CheckMenuItem)
-BOOL32      WINAPI CheckMenuRadioItem32(HMENU32,UINT32,UINT32,UINT32,UINT32);
-#define     CheckMenuRadioItem WINELIB_NAME(CheckMenuRadioItem)
-BOOL32      WINAPI CheckRadioButton32(HWND32,UINT32,UINT32,UINT32);
-#define     CheckRadioButton WINELIB_NAME(CheckRadioButton)
-HWND32      WINAPI ChildWindowFromPoint32(HWND32,POINT32);
-#define     ChildWindowFromPoint WINELIB_NAME(ChildWindowFromPoint)
-HWND32      WINAPI ChildWindowFromPointEx32(HWND32,POINT32,UINT32);
-#define     ChildWindowFromPointEx WINELIB_NAME(ChildWindowFromPointEx)
-BOOL32      WINAPI ClearCommBreak32(INT32);
-#define     ClearCommBreak WINELIB_NAME(ClearCommBreak)
-BOOL32      WINAPI ClientToScreen32(HWND32,LPPOINT32);
-#define     ClientToScreen WINELIB_NAME(ClientToScreen)
-BOOL32      WINAPI ClipCursor32(const RECT32*);
-#define     ClipCursor WINELIB_NAME(ClipCursor)
-BOOL32      WINAPI CloseClipboard32(void);
-#define     CloseClipboard WINELIB_NAME(CloseClipboard)
-BOOL32      WINAPI CloseWindow32(HWND32);
-#define     CloseWindow WINELIB_NAME(CloseWindow)
-#define     CopyCursor32(cur) ((HCURSOR32)CopyIcon32((HICON32)(cur)))
-#define     CopyCursor WINELIB_NAME(CopyCursor)
-HICON32     WINAPI CopyIcon32(HICON32);
-#define     CopyIcon WINELIB_NAME(CopyIcon)
-HICON32     WINAPI CopyImage32(HANDLE32,UINT32,INT32,INT32,UINT32);
-#define     CopyImage WINELIB_NAME(CopyImage)
-BOOL32      WINAPI CopyRect32(RECT32*,const RECT32*);
-#define     CopyRect WINELIB_NAME(CopyRect)
-INT32       WINAPI CountClipboardFormats32(void);
-#define     CountClipboardFormats WINELIB_NAME(CountClipboardFormats)
-BOOL32      WINAPI CreateCaret32(HWND32,HBITMAP32,INT32,INT32);
-#define     CreateCaret WINELIB_NAME(CreateCaret)
-HCURSOR32   WINAPI CreateCursor32(HINSTANCE32,INT32,INT32,INT32,INT32,LPCVOID,LPCVOID);
-#define     CreateCursor WINELIB_NAME(CreateCursor)
-#define     CreateDialog32A(inst,ptr,hwnd,dlg) \
-           CreateDialogParam32A(inst,ptr,hwnd,dlg,0)
-#define     CreateDialog32W(inst,ptr,hwnd,dlg) \
-           CreateDialogParam32W(inst,ptr,hwnd,dlg,0)
+BOOL      WINAPI CheckDlgButton(HWND,INT,UINT);
+DWORD       WINAPI CheckMenuItem(HMENU,UINT,UINT);
+BOOL      WINAPI CheckMenuRadioItem(HMENU,UINT,UINT,UINT,UINT);
+BOOL      WINAPI CheckRadioButton(HWND,UINT,UINT,UINT);
+HWND      WINAPI ChildWindowFromPoint(HWND,POINT);
+HWND      WINAPI ChildWindowFromPointEx(HWND,POINT,UINT);
+BOOL      WINAPI ClearCommBreak(INT);
+BOOL      WINAPI ClientToScreen(HWND,LPPOINT);
+BOOL      WINAPI ClipCursor(const RECT*);
+BOOL      WINAPI CloseClipboard(void);
+BOOL      WINAPI CloseWindow(HWND);
+#define     CopyCursor(cur) ((HCURSOR)CopyIcon((HICON)(cur)))
+HICON     WINAPI CopyIcon(HICON);
+HICON     WINAPI CopyImage(HANDLE,UINT,INT,INT,UINT);
+BOOL      WINAPI CopyRect(RECT*,const RECT*);
+INT       WINAPI CountClipboardFormats(void);
+BOOL      WINAPI CreateCaret(HWND,HBITMAP,INT,INT);
+HCURSOR   WINAPI CreateCursor(HINSTANCE,INT,INT,INT,INT,LPCVOID,LPCVOID);
+#define     CreateDialogA(inst,ptr,hwnd,dlg) \
+           CreateDialogParamA(inst,ptr,hwnd,dlg,0)
+#define     CreateDialogW(inst,ptr,hwnd,dlg) \
+           CreateDialogParamW(inst,ptr,hwnd,dlg,0)
 #define     CreateDialog WINELIB_NAME_AW(CreateDialog)
-#define     CreateDialogIndirect32A(inst,ptr,hwnd,dlg) \
-           CreateDialogIndirectParam32A(inst,ptr,hwnd,dlg,0)
-#define     CreateDialogIndirect32W(inst,ptr,hwnd,dlg) \
-           CreateDialogIndirectParam32W(inst,ptr,hwnd,dlg,0)
+#define     CreateDialogIndirectA(inst,ptr,hwnd,dlg) \
+           CreateDialogIndirectParamA(inst,ptr,hwnd,dlg,0)
+#define     CreateDialogIndirectW(inst,ptr,hwnd,dlg) \
+           CreateDialogIndirectParamW(inst,ptr,hwnd,dlg,0)
 #define     CreateDialogIndirect WINELIB_NAME_AW(CreateDialogIndirect)
-HWND32      WINAPI CreateDialogIndirectParam32A(HINSTANCE32,LPCVOID,HWND32,
-                                                DLGPROC32,LPARAM);
-HWND32      WINAPI CreateDialogIndirectParam32W(HINSTANCE32,LPCVOID,HWND32,
-                                                DLGPROC32,LPARAM);
+HWND      WINAPI CreateDialogIndirectParamA(HINSTANCE,LPCVOID,HWND,
+                                                DLGPROC,LPARAM);
+HWND      WINAPI CreateDialogIndirectParamW(HINSTANCE,LPCVOID,HWND,
+                                                DLGPROC,LPARAM);
 #define     CreateDialogIndirectParam WINELIB_NAME_AW(CreateDialogIndirectParam)
-HWND32      WINAPI CreateDialogParam32A(HINSTANCE32,LPCSTR,HWND32,DLGPROC32,LPARAM);
-HWND32      WINAPI CreateDialogParam32W(HINSTANCE32,LPCWSTR,HWND32,DLGPROC32,LPARAM);
+HWND      WINAPI CreateDialogParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);
+HWND      WINAPI CreateDialogParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);
 #define     CreateDialogParam WINELIB_NAME_AW(CreateDialogParam)
-HICON32     WINAPI CreateIcon32(HINSTANCE32,INT32,INT32,BYTE,BYTE,LPCVOID,LPCVOID);
-#define     CreateIcon WINELIB_NAME(CreateIcon)
-HICON32     WINAPI CreateIconFromResource32(LPBYTE,UINT32,BOOL32,DWORD);
-#define     CreateIconFromResource WINELIB_NAME(CreateIconFromResource)
-HICON32     WINAPI CreateIconFromResourceEx32(LPBYTE,UINT32,BOOL32,DWORD,INT32,INT32,UINT32);
-#define     CreateIconFromResourceEx WINELIB_NAME(CreateIconFromResourceEx)
-HMENU32     WINAPI CreateMenu32(void);
-#define     CreateMenu WINELIB_NAME(CreateMenu)
-HMENU32     WINAPI CreatePopupMenu32(void);
-#define     CreatePopupMenu WINELIB_NAME(CreatePopupMenu)
-#define     CreateWindow32A(className,titleName,style,x,y,width,height,\
+HICON     WINAPI CreateIcon(HINSTANCE,INT,INT,BYTE,BYTE,LPCVOID,LPCVOID);
+HICON     WINAPI CreateIconFromResource(LPBYTE,UINT,BOOL,DWORD);
+HICON     WINAPI CreateIconFromResourceEx(LPBYTE,UINT,BOOL,DWORD,INT,INT,UINT);
+HMENU     WINAPI CreateMenu(void);
+HMENU     WINAPI CreatePopupMenu(void);
+#define     CreateWindowA(className,titleName,style,x,y,width,height,\
                             parent,menu,instance,param) \
-            CreateWindowEx32A(0,className,titleName,style,x,y,width,height,\
+            CreateWindowExA(0,className,titleName,style,x,y,width,height,\
                               parent,menu,instance,param)
-#define     CreateWindow32W(className,titleName,style,x,y,width,height,\
+#define     CreateWindowW(className,titleName,style,x,y,width,height,\
                             parent,menu,instance,param) \
-            CreateWindowEx32W(0,className,titleName,style,x,y,width,height,\
+            CreateWindowExW(0,className,titleName,style,x,y,width,height,\
                               parent,menu,instance,param)
 #define     CreateWindow WINELIB_NAME_AW(CreateWindow)
-HWND32      WINAPI CreateWindowEx32A(DWORD,LPCSTR,LPCSTR,DWORD,INT32,INT32,
-                                INT32,INT32,HWND32,HMENU32,HINSTANCE32,LPVOID);
-HWND32      WINAPI CreateWindowEx32W(DWORD,LPCWSTR,LPCWSTR,DWORD,INT32,INT32,
-                                INT32,INT32,HWND32,HMENU32,HINSTANCE32,LPVOID);
+HWND      WINAPI CreateWindowExA(DWORD,LPCSTR,LPCSTR,DWORD,INT,INT,
+                                INT,INT,HWND,HMENU,HINSTANCE,LPVOID);
+HWND      WINAPI CreateWindowExW(DWORD,LPCWSTR,LPCWSTR,DWORD,INT,INT,
+                                INT,INT,HWND,HMENU,HINSTANCE,LPVOID);
 #define     CreateWindowEx WINELIB_NAME_AW(CreateWindowEx)
-HWND32      WINAPI CreateMDIWindow32A(LPCSTR,LPCSTR,DWORD,INT32,INT32,
-                                INT32,INT32,HWND32,HINSTANCE32,LPARAM);
-HWND32      WINAPI CreateMDIWindow32W(LPCWSTR,LPCWSTR,DWORD,INT32,INT32,
-                                INT32,INT32,HWND32,HINSTANCE32,LPARAM);
+HWND      WINAPI CreateMDIWindowA(LPCSTR,LPCSTR,DWORD,INT,INT,
+                                INT,INT,HWND,HINSTANCE,LPARAM);
+HWND      WINAPI CreateMDIWindowW(LPCWSTR,LPCWSTR,DWORD,INT,INT,
+                                INT,INT,HWND,HINSTANCE,LPARAM);
 #define     CreateMDIWindow WINELIB_NAME_AW(CreateMDIWindow)
-LRESULT     WINAPI DefDlgProc32A(HWND32,UINT32,WPARAM32,LPARAM);
-LRESULT     WINAPI DefDlgProc32W(HWND32,UINT32,WPARAM32,LPARAM);
+LRESULT     WINAPI DefDlgProcA(HWND,UINT,WPARAM,LPARAM);
+LRESULT     WINAPI DefDlgProcW(HWND,UINT,WPARAM,LPARAM);
 #define     DefDlgProc WINELIB_NAME_AW(DefDlgProc)
-HDWP32      WINAPI DeferWindowPos32(HDWP32,HWND32,HWND32,INT32,INT32,INT32,INT32,UINT32);
-#define     DeferWindowPos WINELIB_NAME(DeferWindowPos)
-LRESULT     WINAPI DefFrameProc32A(HWND32,HWND32,UINT32,WPARAM32,LPARAM);
-LRESULT     WINAPI DefFrameProc32W(HWND32,HWND32,UINT32,WPARAM32,LPARAM);
+HDWP      WINAPI DeferWindowPos(HDWP,HWND,HWND,INT,INT,INT,INT,UINT);
+LRESULT     WINAPI DefFrameProcA(HWND,HWND,UINT,WPARAM,LPARAM);
+LRESULT     WINAPI DefFrameProcW(HWND,HWND,UINT,WPARAM,LPARAM);
 #define     DefFrameProc WINELIB_NAME_AW(DefFrameProc)
-#define     DefHookProc32(code,wparam,lparam,phhook) \
-            CallNextHookEx32(*(phhook),code,wparam,lparam)
-#define     DefHookProc WINELIB_NAME(DefHookProc)
-LRESULT     WINAPI DefMDIChildProc32A(HWND32,UINT32,WPARAM32,LPARAM);
-LRESULT     WINAPI DefMDIChildProc32W(HWND32,UINT32,WPARAM32,LPARAM);
+#define     DefHookProc(code,wparam,lparam,phhook) \
+            CallNextHookEx(*(phhook),code,wparam,lparam)
+LRESULT     WINAPI DefMDIChildProcA(HWND,UINT,WPARAM,LPARAM);
+LRESULT     WINAPI DefMDIChildProcW(HWND,UINT,WPARAM,LPARAM);
 #define     DefMDIChildProc WINELIB_NAME_AW(DefMDIChildProc)
-LRESULT     WINAPI DefWindowProc32A(HWND32,UINT32,WPARAM32,LPARAM);
-LRESULT     WINAPI DefWindowProc32W(HWND32,UINT32,WPARAM32,LPARAM);
+LRESULT     WINAPI DefWindowProcA(HWND,UINT,WPARAM,LPARAM);
+LRESULT     WINAPI DefWindowProcW(HWND,UINT,WPARAM,LPARAM);
 #define     DefWindowProc WINELIB_NAME_AW(DefWindowProc)
-BOOL32      WINAPI DeleteMenu32(HMENU32,UINT32,UINT32);
-#define     DeleteMenu WINELIB_NAME(DeleteMenu)
-BOOL32      WINAPI DestroyCaret32(void);
-#define     DestroyCaret WINELIB_NAME(DestroyCaret)
-BOOL32      WINAPI DestroyCursor32(HCURSOR32);
-#define     DestroyCursor WINELIB_NAME(DestroyCursor)
-BOOL32      WINAPI DestroyIcon32(HICON32);
-#define     DestroyIcon WINELIB_NAME(DestroyIcon)
-BOOL32      WINAPI DestroyMenu32(HMENU32);
-#define     DestroyMenu WINELIB_NAME(DestroyMenu)
-BOOL32      WINAPI DestroyWindow32(HWND32);
-#define     DestroyWindow WINELIB_NAME(DestroyWindow)
-#define     DialogBox32A(inst,template,owner,func) \
-            DialogBoxParam32A(inst,template,owner,func,0)
-#define     DialogBox32W(inst,template,owner,func) \
-            DialogBoxParam32W(inst,template,owner,func,0)
+BOOL      WINAPI DeleteMenu(HMENU,UINT,UINT);
+BOOL      WINAPI DestroyCaret(void);
+BOOL      WINAPI DestroyCursor(HCURSOR);
+BOOL      WINAPI DestroyIcon(HICON);
+BOOL      WINAPI DestroyMenu(HMENU);
+BOOL      WINAPI DestroyWindow(HWND);
+#define     DialogBoxA(inst,template,owner,func) \
+            DialogBoxParamA(inst,template,owner,func,0)
+#define     DialogBoxW(inst,template,owner,func) \
+            DialogBoxParamW(inst,template,owner,func,0)
 #define     DialogBox WINELIB_NAME_AW(DialogBox)
-#define     DialogBoxIndirect32A(inst,template,owner,func) \
-            DialogBoxIndirectParam32A(inst,template,owner,func,0)
-#define     DialogBoxIndirect32W(inst,template,owner,func) \
-            DialogBoxIndirectParam32W(inst,template,owner,func,0)
+#define     DialogBoxIndirectA(inst,template,owner,func) \
+            DialogBoxIndirectParamA(inst,template,owner,func,0)
+#define     DialogBoxIndirectW(inst,template,owner,func) \
+            DialogBoxIndirectParamW(inst,template,owner,func,0)
 #define     DialogBoxIndirect WINELIB_NAME_AW(DialogBoxIndirect)
-INT32       WINAPI DialogBoxIndirectParam32A(HINSTANCE32,LPCVOID,HWND32,DLGPROC32,LPARAM);
-INT32       WINAPI DialogBoxIndirectParam32W(HINSTANCE32,LPCVOID,HWND32,DLGPROC32,LPARAM);
+INT       WINAPI DialogBoxIndirectParamA(HINSTANCE,LPCVOID,HWND,DLGPROC,LPARAM);
+INT       WINAPI DialogBoxIndirectParamW(HINSTANCE,LPCVOID,HWND,DLGPROC,LPARAM);
 #define     DialogBoxIndirectParam WINELIB_NAME_AW(DialogBoxIndirectParam)
-INT32       WINAPI DialogBoxParam32A(HINSTANCE32,LPCSTR,HWND32,DLGPROC32,LPARAM);
-INT32       WINAPI DialogBoxParam32W(HINSTANCE32,LPCWSTR,HWND32,DLGPROC32,LPARAM);
+INT       WINAPI DialogBoxParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);
+INT       WINAPI DialogBoxParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);
 #define     DialogBoxParam WINELIB_NAME_AW(DialogBoxParam)
-LONG        WINAPI DispatchMessage32A(const MSG32*);
-LONG        WINAPI DispatchMessage32W(const MSG32*);
+LONG        WINAPI DispatchMessageA(const MSG*);
+LONG        WINAPI DispatchMessageW(const MSG*);
 #define     DispatchMessage WINELIB_NAME_AW(DispatchMessage)
-INT32       WINAPI DlgDirList32A(HWND32,LPSTR,INT32,INT32,UINT32);
-INT32       WINAPI DlgDirList32W(HWND32,LPWSTR,INT32,INT32,UINT32);
+INT       WINAPI DlgDirListA(HWND,LPSTR,INT,INT,UINT);
+INT       WINAPI DlgDirListW(HWND,LPWSTR,INT,INT,UINT);
 #define     DlgDirList WINELIB_NAME_AW(DlgDirList)
-INT32       WINAPI DlgDirListComboBox32A(HWND32,LPSTR,INT32,INT32,UINT32);
-INT32       WINAPI DlgDirListComboBox32W(HWND32,LPWSTR,INT32,INT32,UINT32);
+INT       WINAPI DlgDirListComboBoxA(HWND,LPSTR,INT,INT,UINT);
+INT       WINAPI DlgDirListComboBoxW(HWND,LPWSTR,INT,INT,UINT);
 #define     DlgDirListComboBox WINELIB_NAME_AW(DlgDirListComboBox)
-BOOL32      WINAPI DlgDirSelectComboBoxEx32A(HWND32,LPSTR,INT32,INT32);
-BOOL32      WINAPI DlgDirSelectComboBoxEx32W(HWND32,LPWSTR,INT32,INT32);
+BOOL      WINAPI DlgDirSelectComboBoxExA(HWND,LPSTR,INT,INT);
+BOOL      WINAPI DlgDirSelectComboBoxExW(HWND,LPWSTR,INT,INT);
 #define     DlgDirSelectComboBoxEx WINELIB_NAME_AW(DlgDirSelectComboBoxEx)
-BOOL32      WINAPI DlgDirSelectEx32A(HWND32,LPSTR,INT32,INT32);
-BOOL32      WINAPI DlgDirSelectEx32W(HWND32,LPWSTR,INT32,INT32);
+BOOL      WINAPI DlgDirSelectExA(HWND,LPSTR,INT,INT);
+BOOL      WINAPI DlgDirSelectExW(HWND,LPWSTR,INT,INT);
 #define     DlgDirSelectEx WINELIB_NAME_AW(DlgDirSelectEx)
-BOOL32      WINAPI DragDetect32(HWND32,POINT32);
-#define     DragDetect WINELIB_NAME(DragDetect)
-DWORD       WINAPI DragObject32(HWND32,HWND32,UINT32,DWORD,HCURSOR32);
-#define     DragObject WINELIB_NAME(DragObject)
-BOOL32      WINAPI DrawAnimatedRects32(HWND32,int,const RECT32*,const RECT32*);
-#define     DrawAnimatedRects WINELIB_NAME(DrawAnimatedRects)
-BOOL32      WINAPI DrawCaption32(HWND32,HDC32,const RECT32*,UINT32);
-#define     DrawCaption WINELIB_NAME(DrawCaption)
-BOOL32      WINAPI DrawCaptionTemp32A(HWND32,HDC32,const RECT32*,HFONT32,HICON32,LPCSTR,UINT32);
-BOOL32      WINAPI DrawCaptionTemp32W(HWND32,HDC32,const RECT32*,HFONT32,HICON32,LPCWSTR,UINT32);
+BOOL      WINAPI DragDetect(HWND,POINT);
+DWORD       WINAPI DragObject(HWND,HWND,UINT,DWORD,HCURSOR);
+BOOL      WINAPI DrawAnimatedRects(HWND,int,const RECT*,const RECT*);
+BOOL      WINAPI DrawCaption(HWND,HDC,const RECT*,UINT);
+BOOL      WINAPI DrawCaptionTempA(HWND,HDC,const RECT*,HFONT,HICON,LPCSTR,UINT);
+BOOL      WINAPI DrawCaptionTempW(HWND,HDC,const RECT*,HFONT,HICON,LPCWSTR,UINT);
 #define     DrawCaptionTemp WINELIB_NAME_AW(DrawCaptionTemp)
-BOOL32      WINAPI DrawEdge32(HDC32,LPRECT32,UINT32,UINT32);
-#define     DrawEdge WINELIB_NAME(DrawEdge)
-BOOL32      WINAPI DrawFocusRect32(HDC32,const RECT32*);
-#define     DrawFocusRect WINELIB_NAME(DrawFocusRect)
-BOOL32      WINAPI DrawFrameControl32(HDC32,LPRECT32,UINT32,UINT32);
-#define     DrawFrameControl WINELIB_NAME(DrawFrameControl)
-BOOL32      WINAPI DrawIcon32(HDC32,INT32,INT32,HICON32);
-#define     DrawIcon WINELIB_NAME(DrawIcon)
-BOOL32      WINAPI DrawIconEx32(HDC32,INT32,INT32,HICON32,INT32,INT32,
-				UINT32,HBRUSH32,UINT32);
-#define     DrawIconEx WINELIB_NAME(DrawIconEx)
-BOOL32      WINAPI DrawMenuBar32(HWND32);
-#define     DrawMenuBar WINELIB_NAME(DrawMenuBar)
-BOOL32      WINAPI DrawState32A(HDC32,HBRUSH32,DRAWSTATEPROC32,LPARAM,WPARAM32,INT32,INT32,INT32,INT32,UINT32);
-BOOL32      WINAPI DrawState32W(HDC32,HBRUSH32,DRAWSTATEPROC32,LPARAM,WPARAM32,INT32,INT32,INT32,INT32,UINT32);
+BOOL      WINAPI DrawEdge(HDC,LPRECT,UINT,UINT);
+BOOL      WINAPI DrawFocusRect(HDC,const RECT*);
+BOOL      WINAPI DrawFrameControl(HDC,LPRECT,UINT,UINT);
+BOOL      WINAPI DrawIcon(HDC,INT,INT,HICON);
+BOOL      WINAPI DrawIconEx(HDC,INT,INT,HICON,INT,INT,
+				UINT,HBRUSH,UINT);
+BOOL      WINAPI DrawMenuBar(HWND);
+BOOL      WINAPI DrawStateA(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,INT,INT,INT,INT,UINT);
+BOOL      WINAPI DrawStateW(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,INT,INT,INT,INT,UINT);
 #define     DrawState WINELIB_NAME_AW(DrawState)
-INT32       WINAPI DrawText32A(HDC32,LPCSTR,INT32,LPRECT32,UINT32);
-INT32       WINAPI DrawText32W(HDC32,LPCWSTR,INT32,LPRECT32,UINT32);
+INT       WINAPI DrawTextA(HDC,LPCSTR,INT,LPRECT,UINT);
+INT       WINAPI DrawTextW(HDC,LPCWSTR,INT,LPRECT,UINT);
 #define     DrawText WINELIB_NAME_AW(DrawText)
-BOOL32      WINAPI EmptyClipboard32(void);
-#define     EmptyClipboard WINELIB_NAME(EmptyClipboard)
-UINT32      WINAPI EnableMenuItem32(HMENU32,UINT32,UINT32);
-#define     EnableMenuItem WINELIB_NAME(EnableMenuItem)
-BOOL32      WINAPI EnableScrollBar32(HWND32,INT32,UINT32);
-#define     EnableScrollBar WINELIB_NAME(EnableScrollBar)
-BOOL32      WINAPI EnableWindow32(HWND32,BOOL32);
-#define     EnableWindow WINELIB_NAME(EnableWindow)
-BOOL32      WINAPI EndDeferWindowPos32(HDWP32);
-#define     EndDeferWindowPos WINELIB_NAME(EndDeferWindowPos)
-BOOL32      WINAPI EndDialog32(HWND32,INT32);
-#define     EndDialog WINELIB_NAME(EndDialog)
-BOOL32      WINAPI EndPaint32(HWND32,const PAINTSTRUCT32*);
-#define     EndPaint WINELIB_NAME(EndPaint)
-BOOL32      WINAPI EnumChildWindows32(HWND32,WNDENUMPROC32,LPARAM);
-#define     EnumChildWindows WINELIB_NAME(EnumChildWindows)
-UINT32      WINAPI EnumClipboardFormats32(UINT32);
-#define     EnumClipboardFormats WINELIB_NAME(EnumClipboardFormats)
-INT32       WINAPI EnumProps32A(HWND32,PROPENUMPROC32A);
-INT32       WINAPI EnumProps32W(HWND32,PROPENUMPROC32W);
+BOOL      WINAPI EmptyClipboard(void);
+UINT      WINAPI EnableMenuItem(HMENU,UINT,UINT);
+BOOL      WINAPI EnableScrollBar(HWND,INT,UINT);
+BOOL      WINAPI EnableWindow(HWND,BOOL);
+BOOL      WINAPI EndDeferWindowPos(HDWP);
+BOOL      WINAPI EndDialog(HWND,INT);
+BOOL      WINAPI EndPaint(HWND,const PAINTSTRUCT*);
+BOOL      WINAPI EnumChildWindows(HWND,WNDENUMPROC,LPARAM);
+UINT      WINAPI EnumClipboardFormats(UINT);
+INT       WINAPI EnumPropsA(HWND,PROPENUMPROCA);
+INT       WINAPI EnumPropsW(HWND,PROPENUMPROCW);
 #define     EnumProps WINELIB_NAME_AW(EnumProps)
-BOOL32      WINAPI EnumWindows32(WNDENUMPROC32,LPARAM);
-#define     EnumWindows WINELIB_NAME(EnumWindows)
-BOOL32      WINAPI EqualRect32(const RECT32*,const RECT32*);
-#define     EqualRect WINELIB_NAME(EqualRect)
-BOOL32      WINAPI EscapeCommFunction32(INT32,UINT32);
-#define     EscapeCommFunction WINELIB_NAME(EscapeCommFunction)
-INT32       WINAPI ExcludeUpdateRgn32(HDC32,HWND32);
-#define     ExcludeUpdateRgn WINELIB_NAME(ExcludeUpdateRgn)
-#define     ExitWindows32(a,b) ExitWindowsEx(EWX_LOGOFF,0xffffffff)
-#define     ExitWindows WINELIB_NAME(ExitWindows)
-INT32       WINAPI FillRect32(HDC32,const RECT32*,HBRUSH32);
-#define     FillRect WINELIB_NAME(FillRect)
-HWND32      WINAPI FindWindow32A(LPCSTR,LPCSTR);
-HWND32      WINAPI FindWindow32W(LPCWSTR,LPCWSTR);
+BOOL      WINAPI EnumWindows(WNDENUMPROC,LPARAM);
+BOOL      WINAPI EqualRect(const RECT*,const RECT*);
+BOOL      WINAPI EscapeCommFunction(INT,UINT);
+INT       WINAPI ExcludeUpdateRgn(HDC,HWND);
+#define     ExitWindows(a,b) ExitWindowsEx(EWX_LOGOFF,0xffffffff)
+INT       WINAPI FillRect(HDC,const RECT*,HBRUSH);
+HWND      WINAPI FindWindowA(LPCSTR,LPCSTR);
+HWND      WINAPI FindWindowW(LPCWSTR,LPCWSTR);
 #define     FindWindow WINELIB_NAME_AW(FindWindow)
-HWND32      WINAPI FindWindowEx32A(HWND32,HWND32,LPCSTR,LPCSTR);
-HWND32      WINAPI FindWindowEx32W(HWND32,HWND32,LPCWSTR,LPCWSTR);
+HWND      WINAPI FindWindowExA(HWND,HWND,LPCSTR,LPCSTR);
+HWND      WINAPI FindWindowExW(HWND,HWND,LPCWSTR,LPCWSTR);
 #define     FindWindowEx WINELIB_NAME_AW(FindWindowEx)
-BOOL32      WINAPI FlashWindow32(HWND32,BOOL32);
-#define     FlashWindow WINELIB_NAME(FlashWindow)
-INT32       WINAPI FrameRect32(HDC32,const RECT32*,HBRUSH32);
-#define     FrameRect WINELIB_NAME(FrameRect)
-HWND32      WINAPI GetActiveWindow32(void);
-#define     GetActiveWindow WINELIB_NAME(GetActiveWindow)
-DWORD       WINAPI GetAppCompatFlags32(HTASK32);
-#define     GetAppCompatFlags WINELIB_NAME(GetAppCompatFlags)
-WORD        WINAPI GetAsyncKeyState32(INT32);
-#define     GetAsyncKeyState WINELIB_NAME(GetAsyncKeyState)
-HWND32      WINAPI GetCapture32(void);
-#define     GetCapture WINELIB_NAME(GetCapture)
-UINT32      WINAPI GetCaretBlinkTime32(void);
-#define     GetCaretBlinkTime WINELIB_NAME(GetCaretBlinkTime)
-BOOL32      WINAPI GetCaretPos32(LPPOINT32);
-#define     GetCaretPos WINELIB_NAME(GetCaretPos)
-BOOL32      WINAPI GetClassInfo32A(HINSTANCE32,LPCSTR,WNDCLASS32A *);
-BOOL32      WINAPI GetClassInfo32W(HINSTANCE32,LPCWSTR,WNDCLASS32W *);
+BOOL      WINAPI FlashWindow(HWND,BOOL);
+INT       WINAPI FrameRect(HDC,const RECT*,HBRUSH);
+HWND      WINAPI GetActiveWindow(void);
+DWORD       WINAPI GetAppCompatFlags(HTASK);
+WORD        WINAPI GetAsyncKeyState(INT);
+HWND      WINAPI GetCapture(void);
+UINT      WINAPI GetCaretBlinkTime(void);
+BOOL      WINAPI GetCaretPos(LPPOINT);
+BOOL      WINAPI GetClassInfoA(HINSTANCE,LPCSTR,WNDCLASSA *);
+BOOL      WINAPI GetClassInfoW(HINSTANCE,LPCWSTR,WNDCLASSW *);
 #define     GetClassInfo WINELIB_NAME_AW(GetClassInfo)
-BOOL32      WINAPI GetClassInfoEx32A(HINSTANCE32,LPCSTR,WNDCLASSEX32A *);
-BOOL32      WINAPI GetClassInfoEx32W(HINSTANCE32,LPCWSTR,WNDCLASSEX32W *);
+BOOL      WINAPI GetClassInfoExA(HINSTANCE,LPCSTR,WNDCLASSEXA *);
+BOOL      WINAPI GetClassInfoExW(HINSTANCE,LPCWSTR,WNDCLASSEXW *);
 #define     GetClassInfoEx WINELIB_NAME_AW(GetClassInfoEx)
-LONG        WINAPI GetClassLong32A(HWND32,INT32);
-LONG        WINAPI GetClassLong32W(HWND32,INT32);
+LONG        WINAPI GetClassLongA(HWND,INT);
+LONG        WINAPI GetClassLongW(HWND,INT);
 #define     GetClassLong WINELIB_NAME_AW(GetClassLong)
-INT32       WINAPI GetClassName32A(HWND32,LPSTR,INT32);
-INT32       WINAPI GetClassName32W(HWND32,LPWSTR,INT32);
+INT       WINAPI GetClassNameA(HWND,LPSTR,INT);
+INT       WINAPI GetClassNameW(HWND,LPWSTR,INT);
 #define     GetClassName WINELIB_NAME_AW(GetClassName)
-WORD        WINAPI GetClassWord32(HWND32,INT32);
-#define     GetClassWord WINELIB_NAME(GetClassWord)
-BOOL32      WINAPI GetClientRect32(HWND32,LPRECT32);
-#define     GetClientRect WINELIB_NAME(GetClientRect)
-HANDLE32    WINAPI GetClipboardData32(UINT32);
-#define     GetClipboardData WINELIB_NAME(GetClipboardData)
-INT32       WINAPI GetClipboardFormatName32A(UINT32,LPSTR,INT32);
-INT32       WINAPI GetClipboardFormatName32W(UINT32,LPWSTR,INT32);
+WORD        WINAPI GetClassWord(HWND,INT);
+BOOL      WINAPI GetClientRect(HWND,LPRECT);
+HANDLE    WINAPI GetClipboardData(UINT);
+INT       WINAPI GetClipboardFormatNameA(UINT,LPSTR,INT);
+INT       WINAPI GetClipboardFormatNameW(UINT,LPWSTR,INT);
 #define     GetClipboardFormatName WINELIB_NAME_AW(GetClipboardFormatName)
-HWND32      WINAPI GetClipboardOwner32(void);
-#define     GetClipboardOwner WINELIB_NAME(GetClipboardOwner)
-HWND32      WINAPI GetClipboardViewer32(void);
-#define     GetClipboardViewer WINELIB_NAME(GetClipboardViewer)
-BOOL32      WINAPI GetClipCursor32(LPRECT32);
-#define     GetClipCursor WINELIB_NAME(GetClipCursor)
-#define     GetCurrentTime32() GetTickCount()
-#define     GetCurrentTime WINELIB_NAME(GetCurrentTime)
-HCURSOR32   WINAPI GetCursor32(void);
-#define     GetCursor WINELIB_NAME(GetCursor)
-BOOL32      WINAPI GetCursorPos32(LPPOINT32);
-#define     GetCursorPos WINELIB_NAME(GetCursorPos)
-HDC32       WINAPI GetDC32(HWND32);
-#define     GetDC WINELIB_NAME(GetDC)
-HDC32       WINAPI GetDCEx32(HWND32,HRGN32,DWORD);
-#define     GetDCEx WINELIB_NAME(GetDCEx)
-HWND32      WINAPI GetDesktopWindow32(void);
-#define     GetDesktopWindow WINELIB_NAME(GetDesktopWindow)
-INT32       WINAPI GetDlgCtrlID32(HWND32);
-#define     GetDlgCtrlID WINELIB_NAME(GetDlgCtrlID)
-HWND32      WINAPI GetDlgItem32(HWND32,INT32);
-#define     GetDlgItem WINELIB_NAME(GetDlgItem)
-UINT32      WINAPI GetDlgItemInt32(HWND32,INT32,BOOL32*,BOOL32);
-#define     GetDlgItemInt WINELIB_NAME(GetDlgItemInt)
-INT32       WINAPI GetDlgItemText32A(HWND32,INT32,LPSTR,UINT32);
-INT32       WINAPI GetDlgItemText32W(HWND32,INT32,LPWSTR,UINT32);
+HWND      WINAPI GetClipboardOwner(void);
+HWND      WINAPI GetClipboardViewer(void);
+BOOL      WINAPI GetClipCursor(LPRECT);
+#define     GetCurrentTime() GetTickCount()
+HCURSOR   WINAPI GetCursor(void);
+BOOL      WINAPI GetCursorPos(LPPOINT);
+HDC       WINAPI GetDC(HWND);
+HDC       WINAPI GetDCEx(HWND,HRGN,DWORD);
+HWND      WINAPI GetDesktopWindow(void);
+INT       WINAPI GetDlgCtrlID(HWND);
+HWND      WINAPI GetDlgItem(HWND,INT);
+UINT      WINAPI GetDlgItemInt(HWND,INT,BOOL*,BOOL);
+INT       WINAPI GetDlgItemTextA(HWND,INT,LPSTR,UINT);
+INT       WINAPI GetDlgItemTextW(HWND,INT,LPWSTR,UINT);
 #define     GetDlgItemText WINELIB_NAME_AW(GetDlgItemText)
-UINT32      WINAPI GetDoubleClickTime32(void);
-#define     GetDoubleClickTime WINELIB_NAME(GetDoubleClickTime)
-HWND32      WINAPI GetFocus32(void);
-#define     GetFocus WINELIB_NAME(GetFocus)
-HWND32      WINAPI GetForegroundWindow32(void);
-#define     GetForegroundWindow WINELIB_NAME(GetForegroundWindow)
-BOOL32      WINAPI GetInputState32(void);
-#define     GetInputState WINELIB_NAME(GetInputState)
-UINT32      WINAPI GetInternalWindowPos32(HWND32,LPRECT32,LPPOINT32);
-#define     GetInternalWindowPos WINELIB_NAME(GetInternalWindowPos)
-UINT32      WINAPI GetKBCodePage32(void);
-#define     GetKBCodePage WINELIB_NAME(GetKBCodePage)
-INT32       WINAPI GetKeyboardType32(INT32);
-#define     GetKeyboardType WINELIB_NAME(GetKeyboardType)
-INT32       WINAPI GetKeyNameText32A(LONG,LPSTR,INT32);
-INT32       WINAPI GetKeyNameText32W(LONG,LPWSTR,INT32);
+UINT      WINAPI GetDoubleClickTime(void);
+HWND      WINAPI GetFocus(void);
+HWND      WINAPI GetForegroundWindow(void);
+BOOL      WINAPI GetInputState(void);
+UINT      WINAPI GetInternalWindowPos(HWND,LPRECT,LPPOINT);
+UINT      WINAPI GetKBCodePage(void);
+INT       WINAPI GetKeyboardType(INT);
+INT       WINAPI GetKeyNameTextA(LONG,LPSTR,INT);
+INT       WINAPI GetKeyNameTextW(LONG,LPWSTR,INT);
 #define     GetKeyNameText WINELIB_NAME_AW(GetKeyNameText)
-INT32       WINAPI GetKeyboardLayoutName32A(LPSTR);
-INT32       WINAPI GetKeyboardLayoutName32W(LPWSTR);
+INT       WINAPI GetKeyboardLayoutNameA(LPSTR);
+INT       WINAPI GetKeyboardLayoutNameW(LPWSTR);
 #define     GetKeyboardLayoutName WINELIB_NAME_AW(GetKeyboardLayoutName)
-INT16       WINAPI GetKeyState32(INT32);
-#define     GetKeyState WINELIB_NAME(GetKeyState)
-HWND32      WINAPI GetLastActivePopup32(HWND32);
-#define     GetLastActivePopup WINELIB_NAME(GetLastActivePopup)
-HMENU32     WINAPI GetMenu32(HWND32);
-#define     GetMenu WINELIB_NAME(GetMenu)
-INT32       WINAPI GetMenuItemCount32(HMENU32);
-#define     GetMenuItemCount WINELIB_NAME(GetMenuItemCount)
-UINT32      WINAPI GetMenuItemID32(HMENU32,INT32);
-#define     GetMenuItemID WINELIB_NAME(GetMenuItemID)
-BOOL32      WINAPI GetMenuItemRect32(HWND32,HMENU32,UINT32,LPRECT32);
-#define     GetMenuItemRect WINELIB_NAME(GetMenuItemRect)
-UINT32      WINAPI GetMenuState32(HMENU32,UINT32,UINT32);
-#define     GetMenuState WINELIB_NAME(GetMenuState)
-INT32       WINAPI GetMenuString32A(HMENU32,UINT32,LPSTR,INT32,UINT32);
-INT32       WINAPI GetMenuString32W(HMENU32,UINT32,LPWSTR,INT32,UINT32);
+INT16       WINAPI GetKeyState(INT);
+HWND      WINAPI GetLastActivePopup(HWND);
+HMENU     WINAPI GetMenu(HWND);
+INT       WINAPI GetMenuItemCount(HMENU);
+UINT      WINAPI GetMenuItemID(HMENU,INT);
+BOOL      WINAPI GetMenuItemRect(HWND,HMENU,UINT,LPRECT);
+UINT      WINAPI GetMenuState(HMENU,UINT,UINT);
+INT       WINAPI GetMenuStringA(HMENU,UINT,LPSTR,INT,UINT);
+INT       WINAPI GetMenuStringW(HMENU,UINT,LPWSTR,INT,UINT);
 #define     GetMenuString WINELIB_NAME_AW(GetMenuString)
-BOOL32      WINAPI GetMessage32A(LPMSG32,HWND32,UINT32,UINT32);
-BOOL32      WINAPI GetMessage32W(LPMSG32,HWND32,UINT32,UINT32);
+BOOL      WINAPI GetMessageA(LPMSG,HWND,UINT,UINT);
+BOOL      WINAPI GetMessageW(LPMSG,HWND,UINT,UINT);
 #define     GetMessage WINELIB_NAME_AW(GetMessage)
-HWND32      WINAPI GetNextDlgGroupItem32(HWND32,HWND32,BOOL32);
-#define     GetNextDlgGroupItem WINELIB_NAME(GetNextDlgGroupItem)
-HWND32      WINAPI GetNextDlgTabItem32(HWND32,HWND32,BOOL32);
-#define     GetNextDlgTabItem WINELIB_NAME(GetNextDlgTabItem)
-#define     GetNextWindow32 GetWindow32
-#define     GetNextWindow WINELIB_NAME(GetNextWindow)
-HWND32      WINAPI GetOpenClipboardWindow32(void);
-#define     GetOpenClipboardWindow WINELIB_NAME(GetOpenClipboardWindow)
-HWND32      WINAPI GetParent32(HWND32);
-#define     GetParent WINELIB_NAME(GetParent)
-INT32       WINAPI GetPriorityClipboardFormat32(UINT32*,INT32);
-#define     GetPriorityClipboardFormat WINELIB_NAME(GetPriorityClipboardFormat)
-HANDLE32    WINAPI GetProp32A(HWND32,LPCSTR);
-HANDLE32    WINAPI GetProp32W(HWND32,LPCWSTR);
+HWND      WINAPI GetNextDlgGroupItem(HWND,HWND,BOOL);
+HWND      WINAPI GetNextDlgTabItem(HWND,HWND,BOOL);
+#define     GetNextWindow GetWindow
+HWND      WINAPI GetOpenClipboardWindow(void);
+HWND      WINAPI GetParent(HWND);
+INT       WINAPI GetPriorityClipboardFormat(UINT*,INT);
+HANDLE    WINAPI GetPropA(HWND,LPCSTR);
+HANDLE    WINAPI GetPropW(HWND,LPCWSTR);
 #define     GetProp WINELIB_NAME_AW(GetProp)
-DWORD       WINAPI GetQueueStatus32(UINT32);
-#define     GetQueueStatus WINELIB_NAME(GetQueueStatus)
-BOOL32      WINAPI GetScrollInfo32(HWND32,INT32,LPSCROLLINFO);
-#define     GetScrollInfo WINELIB_NAME(GetScrollInfo)
-INT32       WINAPI GetScrollPos32(HWND32,INT32);
-#define     GetScrollPos WINELIB_NAME(GetScrollPos)
-BOOL32      WINAPI GetScrollRange32(HWND32,INT32,LPINT32,LPINT32);
-#define     GetScrollRange WINELIB_NAME(GetScrollRange)
-HWND32      WINAPI GetShellWindow32(void);
-#define     GetShellWindow WINELIB_NAME(GetShellWindow)
-HMENU32     WINAPI GetSubMenu32(HMENU32,INT32);
-#define     GetSubMenu WINELIB_NAME(GetSubMenu)
-COLORREF    WINAPI GetSysColor32(INT32);
-#define     GetSysColor WINELIB_NAME(GetSysColor)
-HBRUSH32    WINAPI GetSysColorBrush32(INT32);
-#define     GetSysColorBrush WINELIB_NAME(GetSysColorBrush)
-#define     GetSysModalWindow32() ((HWND32)0)
-#define     GetSysModalWindow WINELIB_NAME(GetSysModalWindow)
-HMENU32     WINAPI GetSystemMenu32(HWND32,BOOL32);
-#define     GetSystemMenu WINELIB_NAME(GetSystemMenu)
-INT32       WINAPI GetSystemMetrics32(INT32);
-#define     GetSystemMetrics WINELIB_NAME(GetSystemMetrics)
-DWORD       WINAPI GetTabbedTextExtent32A(HDC32,LPCSTR,INT32,INT32,const INT32*);
-DWORD       WINAPI GetTabbedTextExtent32W(HDC32,LPCWSTR,INT32,INT32,const INT32*);
+DWORD       WINAPI GetQueueStatus(UINT);
+BOOL      WINAPI GetScrollInfo(HWND,INT,LPSCROLLINFO);
+INT       WINAPI GetScrollPos(HWND,INT);
+BOOL      WINAPI GetScrollRange(HWND,INT,LPINT,LPINT);
+HWND      WINAPI GetShellWindow(void);
+HMENU     WINAPI GetSubMenu(HMENU,INT);
+COLORREF    WINAPI GetSysColor(INT);
+HBRUSH    WINAPI GetSysColorBrush(INT);
+#define     GetSysModalWindow() ((HWND)0)
+HMENU     WINAPI GetSystemMenu(HWND,BOOL);
+INT       WINAPI GetSystemMetrics(INT);
+DWORD       WINAPI GetTabbedTextExtentA(HDC,LPCSTR,INT,INT,const INT*);
+DWORD       WINAPI GetTabbedTextExtentW(HDC,LPCWSTR,INT,INT,const INT*);
 #define     GetTabbedTextExtent WINELIB_NAME_AW(GetTabbedTextExtent)
-HWND32      WINAPI GetTopWindow32(HWND32);
-#define     GetTopWindow WINELIB_NAME(GetTopWindow)
-BOOL32      WINAPI GetUpdateRect32(HWND32,LPRECT32,BOOL32);
-#define     GetUpdateRect WINELIB_NAME(GetUpdateRect)
-INT32       WINAPI GetUpdateRgn32(HWND32,HRGN32,BOOL32);
-#define     GetUpdateRgn WINELIB_NAME(GetUpdateRgn)
-HWND32      WINAPI GetWindow32(HWND32,WORD);
-#define     GetWindow WINELIB_NAME(GetWindow)
-HDC32       WINAPI GetWindowDC32(HWND32);
-#define     GetWindowDC WINELIB_NAME(GetWindowDC)
-LONG        WINAPI GetWindowLong32A(HWND32,INT32);
-LONG        WINAPI GetWindowLong32W(HWND32,INT32);
+HWND      WINAPI GetTopWindow(HWND);
+BOOL      WINAPI GetUpdateRect(HWND,LPRECT,BOOL);
+INT       WINAPI GetUpdateRgn(HWND,HRGN,BOOL);
+HWND      WINAPI GetWindow(HWND,WORD);
+HDC       WINAPI GetWindowDC(HWND);
+LONG        WINAPI GetWindowLongA(HWND,INT);
+LONG        WINAPI GetWindowLongW(HWND,INT);
 #define     GetWindowLong WINELIB_NAME_AW(GetWindowLong)
-BOOL32      WINAPI GetWindowPlacement32(HWND32,LPWINDOWPLACEMENT32);
-#define     GetWindowPlacement WINELIB_NAME(GetWindowPlacement)
-BOOL32      WINAPI GetWindowRect32(HWND32,LPRECT32);
-#define     GetWindowRect WINELIB_NAME(GetWindowRect)
-INT32       WINAPI GetWindowRgn32(HWND32,HRGN32);
-#define     GetWindowRgn WINELIB_NAME(GetWindowRgn)
-#define     GetWindowTask32(hwnd) ((HTASK32)GetWindowThreadProcessId(hwnd,NULL))
-#define     GetWindowTask WINELIB_NAME(GetWindowTask)
-INT32       WINAPI GetWindowText32A(HWND32,LPSTR,INT32);
-INT32       WINAPI GetWindowText32W(HWND32,LPWSTR,INT32);
+BOOL      WINAPI GetWindowPlacement(HWND,LPWINDOWPLACEMENT);
+BOOL      WINAPI GetWindowRect(HWND,LPRECT);
+INT       WINAPI GetWindowRgn(HWND,HRGN);
+#define     GetWindowTask(hwnd) ((HTASK)GetWindowThreadProcessId(hwnd,NULL))
+INT       WINAPI GetWindowTextA(HWND,LPSTR,INT);
+INT       WINAPI GetWindowTextW(HWND,LPWSTR,INT);
 #define     GetWindowText WINELIB_NAME_AW(GetWindowText)
-INT32       WINAPI GetWindowTextLength32A(HWND32);
-INT32       WINAPI GetWindowTextLength32W(HWND32);
+INT       WINAPI GetWindowTextLengthA(HWND);
+INT       WINAPI GetWindowTextLengthW(HWND);
 #define     GetWindowTextLength WINELIB_NAME_AW(GetWindowTextLength)
-WORD        WINAPI GetWindowWord32(HWND32,INT32);
-#define     GetWindowWord WINELIB_NAME(GetWindowWord)
-ATOM        WINAPI GlobalAddAtom32A(LPCSTR);
-ATOM        WINAPI GlobalAddAtom32W(LPCWSTR);
+WORD        WINAPI GetWindowWord(HWND,INT);
+ATOM        WINAPI GlobalAddAtomA(LPCSTR);
+ATOM        WINAPI GlobalAddAtomW(LPCWSTR);
 #define     GlobalAddAtom WINELIB_NAME_AW(GlobalAddAtom)
-ATOM        WINAPI GlobalFindAtom32A(LPCSTR);
-ATOM        WINAPI GlobalFindAtom32W(LPCWSTR);
+ATOM        WINAPI GlobalFindAtomA(LPCSTR);
+ATOM        WINAPI GlobalFindAtomW(LPCWSTR);
 #define     GlobalFindAtom WINELIB_NAME_AW(GlobalFindAtom)
-UINT32      WINAPI GlobalGetAtomName32A(ATOM,LPSTR,INT32);
-UINT32      WINAPI GlobalGetAtomName32W(ATOM,LPWSTR,INT32);
+UINT      WINAPI GlobalGetAtomNameA(ATOM,LPSTR,INT);
+UINT      WINAPI GlobalGetAtomNameW(ATOM,LPWSTR,INT);
 #define     GlobalGetAtomName WINELIB_NAME_AW(GlobalGetAtomName)
-BOOL32      WINAPI GrayString32A(HDC32,HBRUSH32,GRAYSTRINGPROC32,LPARAM,
-                                 INT32,INT32,INT32,INT32,INT32);
-BOOL32      WINAPI GrayString32W(HDC32,HBRUSH32,GRAYSTRINGPROC32,LPARAM,
-                                 INT32,INT32,INT32,INT32,INT32);
+BOOL      WINAPI GrayStringA(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,
+                                 INT,INT,INT,INT,INT);
+BOOL      WINAPI GrayStringW(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,
+                                 INT,INT,INT,INT,INT);
 #define     GrayString WINELIB_NAME_AW(GrayString)
-BOOL32      WINAPI HideCaret32(HWND32);
-#define     HideCaret WINELIB_NAME(HideCaret)
-BOOL32      WINAPI HiliteMenuItem32(HWND32,HMENU32,UINT32,UINT32);
-#define     HiliteMenuItem WINELIB_NAME(HiliteMenuItem)
-BOOL32      WINAPI InflateRect32(LPRECT32,INT32,INT32);
-#define     InflateRect WINELIB_NAME(InflateRect)
-BOOL32      WINAPI InSendMessage32(void);
-#define     InSendMessage WINELIB_NAME(InSendMessage)
-BOOL32      WINAPI InsertMenu32A(HMENU32,UINT32,UINT32,UINT32,LPCSTR);
-BOOL32      WINAPI InsertMenu32W(HMENU32,UINT32,UINT32,UINT32,LPCWSTR);
+BOOL      WINAPI HideCaret(HWND);
+BOOL      WINAPI HiliteMenuItem(HWND,HMENU,UINT,UINT);
+BOOL      WINAPI InflateRect(LPRECT,INT,INT);
+BOOL      WINAPI InSendMessage(void);
+BOOL      WINAPI InsertMenuA(HMENU,UINT,UINT,UINT,LPCSTR);
+BOOL      WINAPI InsertMenuW(HMENU,UINT,UINT,UINT,LPCWSTR);
 #define     InsertMenu WINELIB_NAME_AW(InsertMenu)
-BOOL32      WINAPI InsertMenuItem32A(HMENU32,UINT32,BOOL32,const MENUITEMINFO32A*);
-BOOL32      WINAPI InsertMenuItem32W(HMENU32,UINT32,BOOL32,const MENUITEMINFO32W*);
+BOOL      WINAPI InsertMenuItemA(HMENU,UINT,BOOL,const MENUITEMINFOA*);
+BOOL      WINAPI InsertMenuItemW(HMENU,UINT,BOOL,const MENUITEMINFOW*);
 #define     InsertMenuItem WINELIB_NAME_AW(InsertMenuItem)
-BOOL32      WINAPI IntersectRect32(LPRECT32,const RECT32*,const RECT32*);
-#define     IntersectRect WINELIB_NAME(IntersectRect)
-BOOL32      WINAPI InvalidateRect32(HWND32,const RECT32*,BOOL32);
-#define     InvalidateRect WINELIB_NAME(InvalidateRect)
-BOOL32      WINAPI InvalidateRgn32(HWND32,HRGN32,BOOL32);
-#define     InvalidateRgn WINELIB_NAME(InvalidateRgn)
-BOOL32      WINAPI InvertRect32(HDC32,const RECT32*);
-#define     InvertRect WINELIB_NAME(InvertRect)
-BOOL32      WINAPI IsCharAlpha32A(CHAR);
-BOOL32      WINAPI IsCharAlpha32W(WCHAR);
+BOOL      WINAPI IntersectRect(LPRECT,const RECT*,const RECT*);
+BOOL      WINAPI InvalidateRect(HWND,const RECT*,BOOL);
+BOOL      WINAPI InvalidateRgn(HWND,HRGN,BOOL);
+BOOL      WINAPI InvertRect(HDC,const RECT*);
+BOOL      WINAPI IsCharAlphaA(CHAR);
+BOOL      WINAPI IsCharAlphaW(WCHAR);
 #define     IsCharAlpha WINELIB_NAME_AW(IsCharAlpha)
-BOOL32      WINAPI IsCharAlphaNumeric32A(CHAR);
-BOOL32      WINAPI IsCharAlphaNumeric32W(WCHAR);
+BOOL      WINAPI IsCharAlphaNumericA(CHAR);
+BOOL      WINAPI IsCharAlphaNumericW(WCHAR);
 #define     IsCharAlphaNumeric WINELIB_NAME_AW(IsCharAlphaNumeric)
-BOOL32      WINAPI IsCharLower32A(CHAR);
-BOOL32      WINAPI IsCharLower32W(WCHAR);
+BOOL      WINAPI IsCharLowerA(CHAR);
+BOOL      WINAPI IsCharLowerW(WCHAR);
 #define     IsCharLower WINELIB_NAME_AW(IsCharLower)
-BOOL32      WINAPI IsCharUpper32A(CHAR);
-BOOL32      WINAPI IsCharUpper32W(WCHAR);
+BOOL      WINAPI IsCharUpperA(CHAR);
+BOOL      WINAPI IsCharUpperW(WCHAR);
 #define     IsCharUpper WINELIB_NAME_AW(IsCharUpper)
-BOOL32      WINAPI IsChild32(HWND32,HWND32);
-#define     IsChild WINELIB_NAME(IsChild)
-BOOL32      WINAPI IsClipboardFormatAvailable32(UINT32);
-#define     IsClipboardFormatAvailable WINELIB_NAME(IsClipboardFormatAvailable)
-BOOL32      WINAPI IsDialogMessage32A(HWND32,LPMSG32);
-BOOL32      WINAPI IsDialogMessage32W(HWND32,LPMSG32);
+BOOL      WINAPI IsChild(HWND,HWND);
+BOOL      WINAPI IsClipboardFormatAvailable(UINT);
+BOOL      WINAPI IsDialogMessageA(HWND,LPMSG);
+BOOL      WINAPI IsDialogMessageW(HWND,LPMSG);
 #define     IsDialogMessage WINELIB_NAME_AW(IsDialogMessage)
-UINT32      WINAPI IsDlgButtonChecked32(HWND32,UINT32);
-#define     IsDlgButtonChecked WINELIB_NAME(IsDlgButtonChecked)
-BOOL32      WINAPI IsIconic32(HWND32);
-#define     IsIconic WINELIB_NAME(IsIconic)
-BOOL32      WINAPI IsMenu32(HMENU32);
-#define     IsMenu WINELIB_NAME(IsMenu)
-BOOL32      WINAPI IsRectEmpty32(const RECT32*);
-#define     IsRectEmpty WINELIB_NAME(IsRectEmpty)
-BOOL32      WINAPI IsWindow32(HWND32);
-#define     IsWindow WINELIB_NAME(IsWindow)
-BOOL32      WINAPI IsWindowEnabled32(HWND32);
-#define     IsWindowEnabled WINELIB_NAME(IsWindowEnabled)
-BOOL32      WINAPI IsWindowVisible32(HWND32);
-#define     IsWindowVisible WINELIB_NAME(IsWindowVisible)
-BOOL32      WINAPI IsZoomed32(HWND32);
-#define     IsZoomed WINELIB_NAME(IsZoomed)
-BOOL32      WINAPI KillSystemTimer32(HWND32,UINT32);
-#define     KillSystemTimer WINELIB_NAME(KillSystemTimer)
-BOOL32      WINAPI KillTimer32(HWND32,UINT32);
-#define     KillTimer WINELIB_NAME(KillTimer)
-HACCEL32    WINAPI LoadAccelerators32A(HINSTANCE32,LPCSTR);
-HACCEL32    WINAPI LoadAccelerators32W(HINSTANCE32,LPCWSTR);
+UINT      WINAPI IsDlgButtonChecked(HWND,UINT);
+BOOL      WINAPI IsIconic(HWND);
+BOOL      WINAPI IsMenu(HMENU);
+BOOL      WINAPI IsRectEmpty(const RECT*);
+BOOL      WINAPI IsWindow(HWND);
+BOOL      WINAPI IsWindowEnabled(HWND);
+BOOL      WINAPI IsWindowVisible(HWND);
+BOOL      WINAPI IsZoomed(HWND);
+BOOL      WINAPI KillSystemTimer(HWND,UINT);
+BOOL      WINAPI KillTimer(HWND,UINT);
+HACCEL    WINAPI LoadAcceleratorsA(HINSTANCE,LPCSTR);
+HACCEL    WINAPI LoadAcceleratorsW(HINSTANCE,LPCWSTR);
 #define     LoadAccelerators WINELIB_NAME_AW(LoadAccelerators)
-HBITMAP32   WINAPI LoadBitmap32A(HANDLE32,LPCSTR);
-HBITMAP32   WINAPI LoadBitmap32W(HANDLE32,LPCWSTR);
+HBITMAP   WINAPI LoadBitmapA(HANDLE,LPCSTR);
+HBITMAP   WINAPI LoadBitmapW(HANDLE,LPCWSTR);
 #define     LoadBitmap WINELIB_NAME_AW(LoadBitmap)
-HCURSOR32   WINAPI LoadCursor32A(HINSTANCE32,LPCSTR);
-HCURSOR32   WINAPI LoadCursor32W(HINSTANCE32,LPCWSTR);
+HCURSOR   WINAPI LoadCursorA(HINSTANCE,LPCSTR);
+HCURSOR   WINAPI LoadCursorW(HINSTANCE,LPCWSTR);
 #define     LoadCursor WINELIB_NAME_AW(LoadCursor)
-HCURSOR32   WINAPI LoadCursorFromFile32A(LPCSTR);
-HCURSOR32   WINAPI LoadCursorFromFile32W(LPCWSTR);
+HCURSOR   WINAPI LoadCursorFromFileA(LPCSTR);
+HCURSOR   WINAPI LoadCursorFromFileW(LPCWSTR);
 #define     LoadCursorFromFile WINELIB_NAME_AW(LoadCursorFromFile)
-HICON32     WINAPI LoadIcon32A(HINSTANCE32,LPCSTR);
-HICON32     WINAPI LoadIcon32W(HINSTANCE32,LPCWSTR);
+HICON     WINAPI LoadIconA(HINSTANCE,LPCSTR);
+HICON     WINAPI LoadIconW(HINSTANCE,LPCWSTR);
 #define     LoadIcon WINELIB_NAME_AW(LoadIcon)
-HANDLE32    WINAPI LoadImage32A(HINSTANCE32,LPCSTR,UINT32,INT32,INT32,UINT32);
-HANDLE32    WINAPI LoadImage32W(HINSTANCE32,LPCWSTR,UINT32,INT32,INT32,UINT32);
+HANDLE    WINAPI LoadImageA(HINSTANCE,LPCSTR,UINT,INT,INT,UINT);
+HANDLE    WINAPI LoadImageW(HINSTANCE,LPCWSTR,UINT,INT,INT,UINT);
 #define     LoadImage WINELIB_NAME_AW(LoadImage)
-HMENU32     WINAPI LoadMenu32A(HINSTANCE32,LPCSTR);
-HMENU32     WINAPI LoadMenu32W(HINSTANCE32,LPCWSTR);
+HMENU     WINAPI LoadMenuA(HINSTANCE,LPCSTR);
+HMENU     WINAPI LoadMenuW(HINSTANCE,LPCWSTR);
 #define     LoadMenu WINELIB_NAME_AW(LoadMenu)
-HMENU32     WINAPI LoadMenuIndirect32A(LPCVOID);
-HMENU32     WINAPI LoadMenuIndirect32W(LPCVOID);
+HMENU     WINAPI LoadMenuIndirectA(LPCVOID);
+HMENU     WINAPI LoadMenuIndirectW(LPCVOID);
 #define     LoadMenuIndirect WINELIB_NAME_AW(LoadMenuIndirect)
-INT32       WINAPI LoadString32A(HINSTANCE32,UINT32,LPSTR,INT32);
-INT32       WINAPI LoadString32W(HINSTANCE32,UINT32,LPWSTR,INT32);
+INT       WINAPI LoadStringA(HINSTANCE,UINT,LPSTR,INT);
+INT       WINAPI LoadStringW(HINSTANCE,UINT,LPWSTR,INT);
 #define     LoadString WINELIB_NAME_AW(LoadString)
-BOOL32      WINAPI LockWindowUpdate32(HWND32);
-#define     LockWindowUpdate WINELIB_NAME(LockWindowUpdate)
-INT32       WINAPI LookupIconIdFromDirectory32(LPBYTE,BOOL32);
-#define     LookupIconIdFromDirectory WINELIB_NAME(LookupIconIdFromDirectory)
-INT32       WINAPI LookupIconIdFromDirectoryEx32(LPBYTE,BOOL32,INT32,INT32,UINT32);
-#define     LookupIconIdFromDirectoryEx WINELIB_NAME(LookupIconIdFromDirectoryEx)
-UINT32      WINAPI MapVirtualKey32A(UINT32,UINT32);
-UINT32      WINAPI MapVirtualKey32W(UINT32,UINT32);
+BOOL      WINAPI LockWindowUpdate(HWND);
+INT       WINAPI LookupIconIdFromDirectory(LPBYTE,BOOL);
+INT       WINAPI LookupIconIdFromDirectoryEx(LPBYTE,BOOL,INT,INT,UINT);
+UINT      WINAPI MapVirtualKeyA(UINT,UINT);
+UINT      WINAPI MapVirtualKeyW(UINT,UINT);
 #define     MapVirtualKey WINELIB_NAME_AW(MapVirtualKey)
-UINT32      WINAPI MapVirtualKeyEx32A(UINT32,UINT32,HKL32);
+UINT      WINAPI MapVirtualKeyEx32A(UINT,UINT,HKL);
 #define     MapVirtualKeyEx WINELIB_NAME_AW(MapVirtualKeyEx)
-BOOL32      WINAPI MapDialogRect32(HWND32,LPRECT32);
-#define     MapDialogRect WINELIB_NAME(MapDialogRect)
-INT32       WINAPI MapWindowPoints32(HWND32,HWND32,LPPOINT32,UINT32);
-#define     MapWindowPoints WINELIB_NAME(MapWindowPoints)
-BOOL32      WINAPI MessageBeep32(UINT32);
-#define     MessageBeep WINELIB_NAME(MessageBeep)
-INT32       WINAPI MessageBox32A(HWND32,LPCSTR,LPCSTR,UINT32);
-INT32       WINAPI MessageBox32W(HWND32,LPCWSTR,LPCWSTR,UINT32);
+BOOL      WINAPI MapDialogRect(HWND,LPRECT);
+INT       WINAPI MapWindowPoints(HWND,HWND,LPPOINT,UINT);
+BOOL      WINAPI MessageBeep(UINT);
+INT       WINAPI MessageBoxA(HWND,LPCSTR,LPCSTR,UINT);
+INT       WINAPI MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT);
 #define     MessageBox WINELIB_NAME_AW(MessageBox)
-INT32       WINAPI MessageBoxIndirect32A(LPMSGBOXPARAMS32A);
-INT32       WINAPI MessageBoxIndirect32W(LPMSGBOXPARAMS32W);
+INT       WINAPI MessageBoxIndirectA(LPMSGBOXPARAMSA);
+INT       WINAPI MessageBoxIndirectW(LPMSGBOXPARAMSW);
 #define     MessageBoxIndirect WINELIB_NAME_AW(MessageBoxIndirect)
-BOOL32      WINAPI ModifyMenu32A(HMENU32,UINT32,UINT32,UINT32,LPCSTR);
-BOOL32      WINAPI ModifyMenu32W(HMENU32,UINT32,UINT32,UINT32,LPCWSTR);
+BOOL      WINAPI ModifyMenuA(HMENU,UINT,UINT,UINT,LPCSTR);
+BOOL      WINAPI ModifyMenuW(HMENU,UINT,UINT,UINT,LPCWSTR);
 #define     ModifyMenu WINELIB_NAME_AW(ModifyMenu)
-BOOL32      WINAPI MoveWindow32(HWND32,INT32,INT32,INT32,INT32,BOOL32);
-#define     MoveWindow WINELIB_NAME(MoveWindow)
-BOOL32      WINAPI OemToChar32A(LPCSTR,LPSTR);
-BOOL32      WINAPI OemToChar32W(LPCSTR,LPWSTR);
+BOOL      WINAPI MoveWindow(HWND,INT,INT,INT,INT,BOOL);
+BOOL      WINAPI OemToCharA(LPCSTR,LPSTR);
+BOOL      WINAPI OemToCharW(LPCSTR,LPWSTR);
 #define     OemToChar WINELIB_NAME_AW(OemToChar)
-BOOL32      WINAPI OemToCharBuff32A(LPCSTR,LPSTR,DWORD);
-BOOL32      WINAPI OemToCharBuff32W(LPCSTR,LPWSTR,DWORD);
+BOOL      WINAPI OemToCharBuffA(LPCSTR,LPSTR,DWORD);
+BOOL      WINAPI OemToCharBuffW(LPCSTR,LPWSTR,DWORD);
 #define     OemToCharBuff WINELIB_NAME_AW(OemToCharBuff)
-BOOL32      WINAPI OffsetRect32(LPRECT32,INT32,INT32);
-#define     OffsetRect WINELIB_NAME(OffsetRect)
-BOOL32      WINAPI OpenClipboard32(HWND32);
-#define     OpenClipboard WINELIB_NAME(OpenClipboard)
-BOOL32      WINAPI OpenIcon32(HWND32);
-#define     OpenIcon WINELIB_NAME(OpenIcon)
-BOOL32      WINAPI PeekMessage32A(LPMSG32,HWND32,UINT32,UINT32,UINT32);
-BOOL32      WINAPI PeekMessage32W(LPMSG32,HWND32,UINT32,UINT32,UINT32);
+BOOL      WINAPI OffsetRect(LPRECT,INT,INT);
+BOOL      WINAPI OpenClipboard(HWND);
+BOOL      WINAPI OpenIcon(HWND);
+BOOL      WINAPI PeekMessageA(LPMSG,HWND,UINT,UINT,UINT);
+BOOL      WINAPI PeekMessageW(LPMSG,HWND,UINT,UINT,UINT);
 #define     PeekMessage WINELIB_NAME_AW(PeekMessage)
-#define     PostAppMessage32A(thread,msg,wparam,lparam) \
-            PostThreadMessage32A((DWORD)(thread),msg,wparam,lparam)
-#define     PostAppMessage32W(thread,msg,wparam,lparam) \
-            PostThreadMessage32W((DWORD)(thread),msg,wparam,lparam)
+#define     PostAppMessageA(thread,msg,wparam,lparam) \
+            PostThreadMessageA((DWORD)(thread),msg,wparam,lparam)
+#define     PostAppMessageW(thread,msg,wparam,lparam) \
+            PostThreadMessageW((DWORD)(thread),msg,wparam,lparam)
 #define     PostAppMessage WINELIB_NAME_AW(PostAppMessage)
-BOOL32      WINAPI PostMessage32A(HWND32,UINT32,WPARAM32,LPARAM);
-BOOL32      WINAPI PostMessage32W(HWND32,UINT32,WPARAM32,LPARAM);
+BOOL      WINAPI PostMessageA(HWND,UINT,WPARAM,LPARAM);
+BOOL      WINAPI PostMessageW(HWND,UINT,WPARAM,LPARAM);
 #define     PostMessage WINELIB_NAME_AW(PostMessage)
-void        WINAPI PostQuitMessage32(INT32);
-#define     PostQuitMessage WINELIB_NAME(PostQuitMessage)
-BOOL32      WINAPI PtInRect32(const RECT32*,POINT32);
-#define     PtInRect WINELIB_NAME(PtInRect)
-BOOL32      WINAPI RedrawWindow32(HWND32,const RECT32*,HRGN32,UINT32);
-#define     RedrawWindow WINELIB_NAME(RedrawWindow)
-ATOM        WINAPI RegisterClass32A(const WNDCLASS32A *);
-ATOM        WINAPI RegisterClass32W(const WNDCLASS32W *);
+void        WINAPI PostQuitMessage(INT);
+BOOL      WINAPI PtInRect(const RECT*,POINT);
+BOOL      WINAPI RedrawWindow(HWND,const RECT*,HRGN,UINT);
+ATOM        WINAPI RegisterClassA(const WNDCLASSA *);
+ATOM        WINAPI RegisterClassW(const WNDCLASSW *);
 #define     RegisterClass WINELIB_NAME_AW(RegisterClass)
-ATOM        WINAPI RegisterClassEx32A(const WNDCLASSEX32A *);
-ATOM        WINAPI RegisterClassEx32W(const WNDCLASSEX32W *);
+ATOM        WINAPI RegisterClassExA(const WNDCLASSEXA *);
+ATOM        WINAPI RegisterClassExW(const WNDCLASSEXW *);
 #define     RegisterClassEx WINELIB_NAME_AW(RegisterClassEx)
-UINT32      WINAPI RegisterClipboardFormat32A(LPCSTR);
-UINT32      WINAPI RegisterClipboardFormat32W(LPCWSTR);
+UINT      WINAPI RegisterClipboardFormatA(LPCSTR);
+UINT      WINAPI RegisterClipboardFormatW(LPCWSTR);
 #define     RegisterClipboardFormat WINELIB_NAME_AW(RegisterClipboardFormat)
-WORD        WINAPI RegisterWindowMessage32A(LPCSTR);
-WORD        WINAPI RegisterWindowMessage32W(LPCWSTR);
+WORD        WINAPI RegisterWindowMessageA(LPCSTR);
+WORD        WINAPI RegisterWindowMessageW(LPCWSTR);
 #define     RegisterWindowMessage WINELIB_NAME_AW(RegisterWindowMessage)
-INT32       WINAPI ReleaseDC32(HWND32,HDC32);
-#define     ReleaseDC WINELIB_NAME(ReleaseDC)
-BOOL32      WINAPI RemoveMenu32(HMENU32,UINT32,UINT32);
-#define     RemoveMenu WINELIB_NAME(RemoveMenu)
-HANDLE32    WINAPI RemoveProp32A(HWND32,LPCSTR);
-HANDLE32    WINAPI RemoveProp32W(HWND32,LPCWSTR);
+INT       WINAPI ReleaseDC(HWND,HDC);
+BOOL      WINAPI RemoveMenu(HMENU,UINT,UINT);
+HANDLE    WINAPI RemovePropA(HWND,LPCSTR);
+HANDLE    WINAPI RemovePropW(HWND,LPCWSTR);
 #define     RemoveProp WINELIB_NAME_AW(RemoveProp)
-BOOL32      WINAPI ReplyMessage32(LRESULT);
-#define     ReplyMessage WINELIB_NAME(ReplyMessage)
-BOOL32      WINAPI ScreenToClient32(HWND32,LPPOINT32);
-#define     ScreenToClient WINELIB_NAME(ScreenToClient)
-VOID        WINAPI ScrollChildren32(HWND32,UINT32,WPARAM32,LPARAM);
-#define     ScrollChildren WINELIB_NAME(ScrollChildren)
-BOOL32      WINAPI ScrollDC32(HDC32,INT32,INT32,const RECT32*,const RECT32*,
-                      HRGN32,LPRECT32);
-#define     ScrollDC WINELIB_NAME(ScrollDC)
-BOOL32      WINAPI ScrollWindow32(HWND32,INT32,INT32,const RECT32*,const RECT32*);
-#define     ScrollWindow WINELIB_NAME(ScrollWindow)
-INT32       WINAPI ScrollWindowEx32(HWND32,INT32,INT32,const RECT32*,
-                                    const RECT32*,HRGN32,LPRECT32,UINT32);
-#define     ScrollWindowEx WINELIB_NAME(ScrollWindowEx)
-LRESULT     WINAPI SendDlgItemMessage32A(HWND32,INT32,UINT32,WPARAM32,LPARAM);
-LRESULT     WINAPI SendDlgItemMessage32W(HWND32,INT32,UINT32,WPARAM32,LPARAM);
+BOOL      WINAPI ReplyMessage(LRESULT);
+BOOL      WINAPI ScreenToClient(HWND,LPPOINT);
+VOID        WINAPI ScrollChildren(HWND,UINT,WPARAM,LPARAM);
+BOOL      WINAPI ScrollDC(HDC,INT,INT,const RECT*,const RECT*,
+                      HRGN,LPRECT);
+BOOL      WINAPI ScrollWindow(HWND,INT,INT,const RECT*,const RECT*);
+INT       WINAPI ScrollWindowEx(HWND,INT,INT,const RECT*,
+                                    const RECT*,HRGN,LPRECT,UINT);
+LRESULT     WINAPI SendDlgItemMessageA(HWND,INT,UINT,WPARAM,LPARAM);
+LRESULT     WINAPI SendDlgItemMessageW(HWND,INT,UINT,WPARAM,LPARAM);
 #define     SendDlgItemMessage WINELIB_NAME_AW(SendDlgItemMessage)
-LRESULT     WINAPI SendMessage32A(HWND32,UINT32,WPARAM32,LPARAM);
-LRESULT     WINAPI SendMessage32W(HWND32,UINT32,WPARAM32,LPARAM);
+LRESULT     WINAPI SendMessageA(HWND,UINT,WPARAM,LPARAM);
+LRESULT     WINAPI SendMessageW(HWND,UINT,WPARAM,LPARAM);
 #define     SendMessage WINELIB_NAME_AW(SendMessage)
-LRESULT     WINAPI SendMessageTimeout32A(HWND32,UINT32,WPARAM32,LPARAM,UINT32,
-					 UINT32,LPDWORD);
-LRESULT     WINAPI SendMessageTimeout32W(HWND32,UINT32,WPARAM32,LPARAM,UINT32,
-					 UINT32,LPDWORD);
+LRESULT     WINAPI SendMessageTimeoutA(HWND,UINT,WPARAM,LPARAM,UINT,
+					 UINT,LPDWORD);
+LRESULT     WINAPI SendMessageTimeoutW(HWND,UINT,WPARAM,LPARAM,UINT,
+					 UINT,LPDWORD);
 #define     SendMessageTimeout WINELIB_NAME_AW(SendMessageTimeout)
-HWND32      WINAPI SetActiveWindow32(HWND32);
-#define     SetActiveWindow WINELIB_NAME(SetActiveWindow)
-HWND32      WINAPI SetCapture32(HWND32);
-#define     SetCapture WINELIB_NAME(SetCapture)
-BOOL32      WINAPI SetCaretBlinkTime32(UINT32);
-#define     SetCaretBlinkTime WINELIB_NAME(SetCaretBlinkTime)
-BOOL32      WINAPI SetCaretPos32(INT32,INT32);
-#define     SetCaretPos WINELIB_NAME(SetCaretPos)
-LONG        WINAPI SetClassLong32A(HWND32,INT32,LONG);
-LONG        WINAPI SetClassLong32W(HWND32,INT32,LONG);
+HWND      WINAPI SetActiveWindow(HWND);
+HWND      WINAPI SetCapture(HWND);
+BOOL      WINAPI SetCaretBlinkTime(UINT);
+BOOL      WINAPI SetCaretPos(INT,INT);
+LONG        WINAPI SetClassLongA(HWND,INT,LONG);
+LONG        WINAPI SetClassLongW(HWND,INT,LONG);
 #define     SetClassLong WINELIB_NAME_AW(SetClassLong)
-WORD        WINAPI SetClassWord32(HWND32,INT32,WORD);
-#define     SetClassWord WINELIB_NAME(SetClassWord)
-HANDLE32    WINAPI SetClipboardData32(UINT32,HANDLE32);
-#define     SetClipboardData WINELIB_NAME(SetClipboardData)
-HWND32      WINAPI SetClipboardViewer32(HWND32);
-#define     SetClipboardViewer WINELIB_NAME(SetClipboardViewer)
-BOOL32      WINAPI SetCommBreak32(INT32);
-#define     SetCommBreak WINELIB_NAME(SetCommBreak)
-HCURSOR32   WINAPI SetCursor32(HCURSOR32);
-#define     SetCursor WINELIB_NAME(SetCursor)
-BOOL32      WINAPI SetCursorPos32(INT32,INT32);
-#define     SetCursorPos WINELIB_NAME(SetCursorPos)
-BOOL32      WINAPI SetDeskWallPaper32(LPCSTR);
-#define     SetDeskWallPaper WINELIB_NAME(SetDeskWallPaper)
-BOOL32      WINAPI SetDlgItemInt32(HWND32,INT32,UINT32,BOOL32);
-#define     SetDlgItemInt WINELIB_NAME(SetDlgItemInt)
-BOOL32      WINAPI SetDlgItemText32A(HWND32,INT32,LPCSTR);
-BOOL32      WINAPI SetDlgItemText32W(HWND32,INT32,LPCWSTR);
+WORD        WINAPI SetClassWord(HWND,INT,WORD);
+HANDLE    WINAPI SetClipboardData(UINT,HANDLE);
+HWND      WINAPI SetClipboardViewer(HWND);
+BOOL      WINAPI SetCommBreak(INT);
+HCURSOR   WINAPI SetCursor(HCURSOR);
+BOOL      WINAPI SetCursorPos(INT,INT);
+BOOL      WINAPI SetDeskWallPaper(LPCSTR);
+BOOL      WINAPI SetDlgItemInt(HWND,INT,UINT,BOOL);
+BOOL      WINAPI SetDlgItemTextA(HWND,INT,LPCSTR);
+BOOL      WINAPI SetDlgItemTextW(HWND,INT,LPCWSTR);
 #define     SetDlgItemText WINELIB_NAME_AW(SetDlgItemText)
-BOOL32      WINAPI SetDoubleClickTime32(UINT32);
-#define     SetDoubleClickTime WINELIB_NAME(SetDoubleClickTime)
-HWND32      WINAPI SetFocus32(HWND32);
-#define     SetFocus WINELIB_NAME(SetFocus)
-BOOL32      WINAPI SetForegroundWindow32(HWND32);
-#define     SetForegroundWindow WINELIB_NAME(SetForegroundWindow)
-void        WINAPI SetInternalWindowPos32(HWND32,UINT32,LPRECT32,LPPOINT32);
-#define     SetInternalWindowPos WINELIB_NAME(SetInternalWindowPos)
-BOOL32      WINAPI SetMenu32(HWND32,HMENU32);
-#define     SetMenu WINELIB_NAME(SetMenu)
-BOOL32      WINAPI SetMenuContextHelpId32(HMENU32,DWORD);
-#define     SetMenuContextHelpId WINELIB_NAME(SetMenuContextHelpId)
-BOOL32      WINAPI SetMenuItemBitmaps32(HMENU32,UINT32,UINT32,HBITMAP32,HBITMAP32);
-#define     SetMenuItemBitmaps WINELIB_NAME(SetMenuItemBitmaps)
-BOOL32      WINAPI SetMessageQueue32(INT32);
-#define     SetMessageQueue WINELIB_NAME(SetMessageQueue)
-HWND32      WINAPI SetParent32(HWND32,HWND32);
-#define     SetParent WINELIB_NAME(SetParent)
-BOOL32      WINAPI SetProp32A(HWND32,LPCSTR,HANDLE32);
-BOOL32      WINAPI SetProp32W(HWND32,LPCWSTR,HANDLE32);
+BOOL      WINAPI SetDoubleClickTime(UINT);
+HWND      WINAPI SetFocus(HWND);
+BOOL      WINAPI SetForegroundWindow(HWND);
+void        WINAPI SetInternalWindowPos(HWND,UINT,LPRECT,LPPOINT);
+BOOL      WINAPI SetMenu(HWND,HMENU);
+BOOL      WINAPI SetMenuContextHelpId(HMENU,DWORD);
+BOOL      WINAPI SetMenuItemBitmaps(HMENU,UINT,UINT,HBITMAP,HBITMAP);
+BOOL      WINAPI SetMessageQueue(INT);
+HWND      WINAPI SetParent(HWND,HWND);
+BOOL      WINAPI SetPropA(HWND,LPCSTR,HANDLE);
+BOOL      WINAPI SetPropW(HWND,LPCWSTR,HANDLE);
 #define     SetProp WINELIB_NAME_AW(SetProp)
-BOOL32      WINAPI SetRect32(LPRECT32,INT32,INT32,INT32,INT32);
-#define     SetRect WINELIB_NAME(SetRect)
-BOOL32      WINAPI SetRectEmpty32(LPRECT32);
-#define     SetRectEmpty WINELIB_NAME(SetRectEmpty)
-INT32       WINAPI SetScrollInfo32(HWND32,INT32,const SCROLLINFO*,BOOL32);
-#define     SetScrollInfo WINELIB_NAME(SetScrollInfo)
-INT32       WINAPI SetScrollPos32(HWND32,INT32,INT32,BOOL32);
-#define     SetScrollPos WINELIB_NAME(SetScrollPos)
-BOOL32      WINAPI SetScrollRange32(HWND32,INT32,INT32,INT32,BOOL32);
-#define     SetScrollRange WINELIB_NAME(SetScrollRange)
-BOOL32      WINAPI SetSysColors32(INT32,const INT32*,const COLORREF*);
-#define     SetSysColors WINELIB_NAME(SetSysColors)
-#define     SetSysModalWindow32(hwnd) ((HWND32)0)
-#define     SetSysModalWindow WINELIB_NAME(SetSysModalWindow)
-BOOL32      WINAPI SetSystemMenu32(HWND32,HMENU32);
-#define     SetSystemMenu WINELIB_NAME(SetSystemMenu)
-UINT32      WINAPI SetSystemTimer32(HWND32,UINT32,UINT32,TIMERPROC32);
-#define     SetSystemTimer WINELIB_NAME(SetSystemTimer)
-UINT32      WINAPI SetTimer32(HWND32,UINT32,UINT32,TIMERPROC32);
-#define     SetTimer WINELIB_NAME(SetTimer)
-LONG        WINAPI SetWindowLong32A(HWND32,INT32,LONG);
-LONG        WINAPI SetWindowLong32W(HWND32,INT32,LONG);
+BOOL      WINAPI SetRect(LPRECT,INT,INT,INT,INT);
+BOOL      WINAPI SetRectEmpty(LPRECT);
+INT       WINAPI SetScrollInfo(HWND,INT,const SCROLLINFO*,BOOL);
+INT       WINAPI SetScrollPos(HWND,INT,INT,BOOL);
+BOOL      WINAPI SetScrollRange(HWND,INT,INT,INT,BOOL);
+BOOL      WINAPI SetSysColors(INT,const INT*,const COLORREF*);
+#define     SetSysModalWindow(hwnd) ((HWND)0)
+BOOL      WINAPI SetSystemMenu(HWND,HMENU);
+UINT      WINAPI SetSystemTimer(HWND,UINT,UINT,TIMERPROC);
+UINT      WINAPI SetTimer(HWND,UINT,UINT,TIMERPROC);
+LONG        WINAPI SetWindowLongA(HWND,INT,LONG);
+LONG        WINAPI SetWindowLongW(HWND,INT,LONG);
 #define     SetWindowLong WINELIB_NAME_AW(SetWindowLong)
-BOOL32      WINAPI SetWindowPlacement32(HWND32,const WINDOWPLACEMENT32*);
-#define     SetWindowPlacement WINELIB_NAME(SetWindowPlacement)
-HHOOK       WINAPI SetWindowsHook32A(INT32,HOOKPROC32);
-HHOOK       WINAPI SetWindowsHook32W(INT32,HOOKPROC32);
+BOOL      WINAPI SetWindowPlacement(HWND,const WINDOWPLACEMENT*);
+HHOOK       WINAPI SetWindowsHookA(INT,HOOKPROC);
+HHOOK       WINAPI SetWindowsHookW(INT,HOOKPROC);
 #define     SetWindowsHook WINELIB_NAME_AW(SetWindowsHook)
-HHOOK       WINAPI SetWindowsHookEx32A(INT32,HOOKPROC32,HINSTANCE32,DWORD);
-HHOOK       WINAPI SetWindowsHookEx32W(INT32,HOOKPROC32,HINSTANCE32,DWORD);
+HHOOK       WINAPI SetWindowsHookExA(INT,HOOKPROC,HINSTANCE,DWORD);
+HHOOK       WINAPI SetWindowsHookExW(INT,HOOKPROC,HINSTANCE,DWORD);
 #define     SetWindowsHookEx WINELIB_NAME_AW(SetWindowsHookEx)
-BOOL32      WINAPI SetWindowPos32(HWND32,HWND32,INT32,INT32,INT32,INT32,WORD);
-#define     SetWindowPos WINELIB_NAME(SetWindowPos)
-INT32       WINAPI SetWindowRgn32(HWND32,HRGN32,BOOL32);
-#define     SetWindowRgn WINELIB_NAME(SetWindowRgn)
-BOOL32      WINAPI SetWindowText32A(HWND32,LPCSTR);
-BOOL32      WINAPI SetWindowText32W(HWND32,LPCWSTR);
+BOOL      WINAPI SetWindowPos(HWND,HWND,INT,INT,INT,INT,WORD);
+INT       WINAPI SetWindowRgn(HWND,HRGN,BOOL);
+BOOL      WINAPI SetWindowTextA(HWND,LPCSTR);
+BOOL      WINAPI SetWindowTextW(HWND,LPCWSTR);
 #define     SetWindowText WINELIB_NAME_AW(SetWindowText)
-WORD        WINAPI SetWindowWord32(HWND32,INT32,WORD);
-#define     SetWindowWord WINELIB_NAME(SetWindowWord)
-BOOL32      WINAPI ShowCaret32(HWND32);
-#define     ShowCaret WINELIB_NAME(ShowCaret)
-INT32       WINAPI ShowCursor32(BOOL32);
-#define     ShowCursor WINELIB_NAME(ShowCursor)
-BOOL32      WINAPI ShowScrollBar32(HWND32,INT32,BOOL32);
-#define     ShowScrollBar WINELIB_NAME(ShowScrollBar)
-BOOL32      WINAPI ShowOwnedPopups32(HWND32,BOOL32);
-#define     ShowOwnedPopups WINELIB_NAME(ShowOwnedPopups)
-BOOL32      WINAPI ShowWindow32(HWND32,INT32);
-#define     ShowWindow WINELIB_NAME(ShowWindow)
-BOOL32      WINAPI SubtractRect32(LPRECT32,const RECT32*,const RECT32*);
-#define     SubtractRect WINELIB_NAME(SubtractRect)
-BOOL32      WINAPI SwapMouseButton32(BOOL32);
-#define     SwapMouseButton WINELIB_NAME(SwapMouseButton)
-VOID        WINAPI SwitchToThisWindow32(HWND32,BOOL32);
-#define     SwitchToThisWindow WINELIB_NAME(SwitchToThisWindow)
-BOOL32      WINAPI SystemParametersInfo32A(UINT32,UINT32,LPVOID,UINT32);
-BOOL32      WINAPI SystemParametersInfo32W(UINT32,UINT32,LPVOID,UINT32);
+WORD        WINAPI SetWindowWord(HWND,INT,WORD);
+BOOL      WINAPI ShowCaret(HWND);
+INT       WINAPI ShowCursor(BOOL);
+BOOL      WINAPI ShowScrollBar(HWND,INT,BOOL);
+BOOL      WINAPI ShowOwnedPopups(HWND,BOOL);
+BOOL      WINAPI ShowWindow(HWND,INT);
+BOOL      WINAPI SubtractRect(LPRECT,const RECT*,const RECT*);
+BOOL      WINAPI SwapMouseButton(BOOL);
+VOID        WINAPI SwitchToThisWindow(HWND,BOOL);
+BOOL      WINAPI SystemParametersInfoA(UINT,UINT,LPVOID,UINT);
+BOOL      WINAPI SystemParametersInfoW(UINT,UINT,LPVOID,UINT);
 #define     SystemParametersInfo WINELIB_NAME_AW(SystemParametersInfo)
-LONG        WINAPI TabbedTextOut32A(HDC32,INT32,INT32,LPCSTR,INT32,INT32,const INT32*,INT32);
-LONG        WINAPI TabbedTextOut32W(HDC32,INT32,INT32,LPCWSTR,INT32,INT32,const INT32*,INT32);
+LONG        WINAPI TabbedTextOutA(HDC,INT,INT,LPCSTR,INT,INT,const INT*,INT);
+LONG        WINAPI TabbedTextOutW(HDC,INT,INT,LPCWSTR,INT,INT,const INT*,INT);
 #define     TabbedTextOut WINELIB_NAME_AW(TabbedTextOut)
-INT32       WINAPI ToAscii32(UINT32,UINT32,LPBYTE,LPWORD,UINT32);
-#define     ToAscii WINELIB_NAME(ToAscii)
-BOOL32      WINAPI TrackPopupMenu32(HMENU32,UINT32,INT32,INT32,INT32,HWND32,const RECT32*);
-#define     TrackPopupMenu WINELIB_NAME(TrackPopupMenu)
-INT32       WINAPI TranslateAccelerator32(HWND32,HACCEL32,LPMSG32);
-#define     TranslateAccelerator WINELIB_NAME(TranslateAccelerator)
-BOOL32      WINAPI TranslateMDISysAccel32(HWND32,LPMSG32);
-#define     TranslateMDISysAccel WINELIB_NAME(TranslateMDISysAccel)
-BOOL32      WINAPI TranslateMessage32(const MSG32*);
-#define     TranslateMessage WINELIB_NAME(TranslateMessage)
-BOOL32      WINAPI UnhookWindowsHook32(INT32,HOOKPROC32);
-#define     UnhookWindowsHook WINELIB_NAME(UnhookWindowsHook)
-BOOL32      WINAPI UnhookWindowsHookEx32(HHOOK);
-#define     UnhookWindowsHookEx WINELIB_NAME(UnhookWindowsHookEx)
-BOOL32      WINAPI UnionRect32(LPRECT32,const RECT32*,const RECT32*);
-#define     UnionRect WINELIB_NAME(UnionRect)
-BOOL32      WINAPI UnregisterClass32A(LPCSTR,HINSTANCE32);
-BOOL32      WINAPI UnregisterClass32W(LPCWSTR,HINSTANCE32);
+INT       WINAPI ToAscii(UINT,UINT,LPBYTE,LPWORD,UINT);
+BOOL      WINAPI TrackPopupMenu(HMENU,UINT,INT,INT,INT,HWND,const RECT*);
+INT       WINAPI TranslateAccelerator(HWND,HACCEL,LPMSG);
+BOOL      WINAPI TranslateMDISysAccel(HWND,LPMSG);
+BOOL      WINAPI TranslateMessage(const MSG*);
+BOOL      WINAPI UnhookWindowsHook(INT,HOOKPROC);
+BOOL      WINAPI UnhookWindowsHookEx(HHOOK);
+BOOL      WINAPI UnionRect(LPRECT,const RECT*,const RECT*);
+BOOL      WINAPI UnregisterClassA(LPCSTR,HINSTANCE);
+BOOL      WINAPI UnregisterClassW(LPCWSTR,HINSTANCE);
 #define     UnregisterClass WINELIB_NAME_AW(UnregisterClass)
-VOID        WINAPI UpdateWindow32(HWND32);
-#define     UpdateWindow WINELIB_NAME(UpdateWindow)
-VOID        WINAPI ValidateRect32(HWND32,const RECT32*);
-#define     ValidateRect WINELIB_NAME(ValidateRect)
-VOID        WINAPI ValidateRgn32(HWND32,HRGN32);
-#define     ValidateRgn WINELIB_NAME(ValidateRgn)
-WORD        WINAPI VkKeyScan32A(CHAR);
-WORD        WINAPI VkKeyScan32W(WCHAR);
+VOID        WINAPI UpdateWindow(HWND);
+VOID        WINAPI ValidateRect(HWND,const RECT*);
+VOID        WINAPI ValidateRgn(HWND,HRGN);
+WORD        WINAPI VkKeyScanA(CHAR);
+WORD        WINAPI VkKeyScanW(WCHAR);
 #define     VkKeyScan WINELIB_NAME_AW(VkKeyScan)
-HWND32      WINAPI WindowFromDC32(HDC32);
-#define     WindowFromDC WINELIB_NAME(WindowFromDC)
-HWND32      WINAPI WindowFromPoint32(POINT32);
-#define     WindowFromPoint WINELIB_NAME(WindowFromPoint)
-BOOL32      WINAPI WinHelp32A(HWND32,LPCSTR,UINT32,DWORD);
-BOOL32      WINAPI WinHelp32W(HWND32,LPCWSTR,UINT32,DWORD);
+HWND      WINAPI WindowFromDC(HDC);
+HWND      WINAPI WindowFromPoint(POINT);
+BOOL      WINAPI WinHelpA(HWND,LPCSTR,UINT,DWORD);
+BOOL      WINAPI WinHelpW(HWND,LPCWSTR,UINT,DWORD);
 #define     WinHelp WINELIB_NAME_AW(WinHelp)
-UINT32      WINAPI WNetAddConnection32A(LPCSTR,LPCSTR,LPCSTR);
-UINT32      WINAPI WNetAddConnection32W(LPCWSTR,LPCWSTR,LPCWSTR);
+UINT      WINAPI WNetAddConnectionA(LPCSTR,LPCSTR,LPCSTR);
+UINT      WINAPI WNetAddConnectionW(LPCWSTR,LPCWSTR,LPCWSTR);
 #define     WNetAddConnection WINELIB_NAME_AW(WNetAddConnection)
-INT32       WINAPIV wsnprintf32A(LPSTR,UINT32,LPCSTR,...);
-INT32       WINAPIV wsnprintf32W(LPWSTR,UINT32,LPCWSTR,...);
+INT       WINAPIV wsnprintfA(LPSTR,UINT,LPCSTR,...);
+INT       WINAPIV wsnprintfW(LPWSTR,UINT,LPCWSTR,...);
 #define     wsnprintf WINELIB_NAME_AW(wsnprintf)
-INT32       WINAPIV wsprintf32A(LPSTR,LPCSTR,...);
-INT32       WINAPIV wsprintf32W(LPWSTR,LPCWSTR,...);
+INT       WINAPIV wsprintfA(LPSTR,LPCSTR,...);
+INT       WINAPIV wsprintfW(LPWSTR,LPCWSTR,...);
 #define     wsprintf WINELIB_NAME_AW(wsprintf)
-INT32       WINAPI wvsnprintf32A(LPSTR,UINT32,LPCSTR,va_list);
-INT32       WINAPI wvsnprintf32W(LPWSTR,UINT32,LPCWSTR,va_list);
+INT       WINAPI wvsnprintfA(LPSTR,UINT,LPCSTR,va_list);
+INT       WINAPI wvsnprintfW(LPWSTR,UINT,LPCWSTR,va_list);
 #define     wvsnprintf WINELIB_NAME_AW(wvsnprintf)
-INT32       WINAPI wvsprintf32A(LPSTR,LPCSTR,va_list);
-INT32       WINAPI wvsprintf32W(LPWSTR,LPCWSTR,va_list);
+INT       WINAPI wvsprintfA(LPSTR,LPCSTR,va_list);
+INT       WINAPI wvsprintfW(LPWSTR,LPCWSTR,va_list);
 #define     wvsprintf WINELIB_NAME_AW(wvsprintf)
 
-BOOL32      WINAPI RegisterShellHook(HWND16,UINT16);
+BOOL      WINAPI RegisterShellHook16(HWND16,UINT16);
 /* NOTE: This is SYSTEM.3, not USER.182, which is also named KillSystemTimer */
 WORD        WINAPI SYSTEM_KillSystemTimer( WORD );
 
 /* Extra functions that don't exist in the Windows API */
 
-HPEN32      WINAPI GetSysColorPen32(INT32);
-INT32       WINAPI LoadMessage32A(HMODULE32,UINT32,WORD,LPSTR,INT32);
-INT32       WINAPI LoadMessage32W(HMODULE32,UINT32,WORD,LPWSTR,INT32);
+HPEN      WINAPI GetSysColorPen(INT);
+INT       WINAPI LoadMessageA(HMODULE,UINT,WORD,LPSTR,INT);
+INT       WINAPI LoadMessageW(HMODULE,UINT,WORD,LPWSTR,INT);
 
-VOID        WINAPI ScreenSwitchEnable(WORD);
+VOID        WINAPI ScreenSwitchEnable16(WORD);
 
 #endif /* __INCLUDE_WINUSER_H */
diff --git a/include/winver.h b/include/winver.h
index a489eb7..4374967 100644
--- a/include/winver.h
+++ b/include/winver.h
@@ -4,25 +4,25 @@
 #include "wintypes.h"
 
 DWORD       WINAPI VerFindFile16(UINT16,LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT16*,LPSTR,UINT16*);
-DWORD       WINAPI VerFindFile32A(UINT32,LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT32*,LPSTR,UINT32*);
-DWORD       WINAPI VerFindFile32W(UINT32,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT32*,LPWSTR,UINT32*);
+DWORD       WINAPI VerFindFileA(UINT,LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT*,LPSTR,UINT*);
+DWORD       WINAPI VerFindFileW(UINT,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT*,LPWSTR,UINT*);
 #define     VerFindFile WINELIB_NAME_AW(VerFindFile)
 DWORD       WINAPI VerInstallFile16(UINT16,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT16*);
-DWORD       WINAPI VerInstallFile32A(UINT32,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT32*);
-DWORD       WINAPI VerInstallFile32W(UINT32,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT32*);
+DWORD       WINAPI VerInstallFileA(UINT,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT*);
+DWORD       WINAPI VerInstallFileW(UINT,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT*);
 #define     VerInstallFile WINELIB_NAME_AW(VerInstallFile)
 DWORD       WINAPI VerLanguageName16(UINT16,LPSTR,UINT16);
 DWORD       WINAPI VerQueryValue16(SEGPTR,LPCSTR,SEGPTR*,UINT16*);
-DWORD       WINAPI VerQueryValue32A(LPVOID,LPCSTR,LPVOID*,UINT32*);
-DWORD       WINAPI VerQueryValue32W(LPVOID,LPCWSTR,LPVOID*,UINT32*);
+DWORD       WINAPI VerQueryValueA(LPVOID,LPCSTR,LPVOID*,UINT*);
+DWORD       WINAPI VerQueryValueW(LPVOID,LPCWSTR,LPVOID*,UINT*);
 #define     VerQueryValue WINELIB_NAME_AW(VerQueryValue)
 DWORD       WINAPI GetFileVersionInfoSize16(LPCSTR,LPDWORD);
-DWORD       WINAPI GetFileVersionInfoSize32A(LPCSTR,LPDWORD);
-DWORD       WINAPI GetFileVersionInfoSize32W(LPCWSTR,LPDWORD);
+DWORD       WINAPI GetFileVersionInfoSizeA(LPCSTR,LPDWORD);
+DWORD       WINAPI GetFileVersionInfoSizeW(LPCWSTR,LPDWORD);
 #define     GetFileVersionInfoSize WINELIB_NAME_AW(GetFileVersionInfoSize)
 DWORD       WINAPI GetFileVersionInfo16(LPCSTR,DWORD,DWORD,LPVOID);
-DWORD       WINAPI GetFileVersionInfo32A(LPCSTR,DWORD,DWORD,LPVOID);
-DWORD       WINAPI GetFileVersionInfo32W(LPCWSTR,DWORD,DWORD,LPVOID);
+DWORD       WINAPI GetFileVersionInfoA(LPCSTR,DWORD,DWORD,LPVOID);
+DWORD       WINAPI GetFileVersionInfoW(LPCWSTR,DWORD,DWORD,LPVOID);
 #define     GetFileVersionInfo WINELIB_NAME_AW(GetFileVersionInfo)
 
 #endif /* __WINE_WINVER_H */
diff --git a/include/winversion.h b/include/winversion.h
index a9f798e..e3fb5c8 100644
--- a/include/winversion.h
+++ b/include/winversion.h
@@ -12,6 +12,6 @@
 
 extern WINDOWS_VERSION VERSION_GetVersion(void); 
 extern char *VERSION_GetVersionName(void); 
-extern BOOL32 VERSION_OsIsUnicode(void);
+extern BOOL VERSION_OsIsUnicode(void);
 
 #endif  /* __WINE_WINVERSION_H */
diff --git a/include/wnaspi32.h b/include/wnaspi32.h
index b62a633..78702d9 100644
--- a/include/wnaspi32.h
+++ b/include/wnaspi32.h
@@ -3,9 +3,9 @@
 
 #pragma pack(1)
 
-typedef union SRB32 * LPSRB32;
+typedef union SRB * LPSRB;
 
-typedef struct tagSRB_HaInquiry32 {
+typedef struct tagSRB_HaInquiry {
  BYTE  SRB_Cmd;                 /* ASPI command code = SC_HA_INQUIRY */
  BYTE  SRB_Status;              /* ASPI command status byte */
  BYTE  SRB_HaId;                /* ASPI host adapter number */
@@ -17,9 +17,9 @@
  BYTE  HA_Identifier[16];       /* String describing the host adapter */
  BYTE  HA_Unique[16];           /* Host Adapter Unique parameters */
  WORD  HA_Rsvd1;
-} SRB_HaInquiry32 WINE_PACKED;
+} SRB_HaInquiry WINE_PACKED;
 
-typedef struct tagSRB_ExecSCSICmd32 {
+typedef struct tagSRB_ExecSCSICmd {
   BYTE        SRB_Cmd;            /* ASPI command code = SC_EXEC_SCSI_CMD */
   BYTE        SRB_Status;         /* ASPI command status byte */
   BYTE        SRB_HaId;           /* ASPI host adapter number */
@@ -39,18 +39,18 @@
   BYTE        SRB_Rsvd3[16];      /* Reserved for expansion */
   BYTE        CDBByte[16];        /* SCSI CDB */
   BYTE        SenseArea[0];       /* Request sense buffer - var length */
-} SRB_ExecSCSICmd32 WINE_PACKED;
+} SRB_ExecSCSICmd WINE_PACKED;
 
-typedef struct tagSRB_Abort32 {
+typedef struct tagSRB_Abort {
   BYTE        SRB_Cmd;            /* ASPI command code = SC_ABORT_SRB */
   BYTE        SRB_Status;         /* ASPI command status byte */
   BYTE        SRB_HaId;           /* ASPI host adapter number */
   BYTE        SRB_Flags;          /* Reserved */
   DWORD       SRB_Hdr_Rsvd;       /* Reserved, MUST = 0 */
-  LPSRB32     SRB_ToAbort;        /* Pointer to SRB to abort */
-} SRB_Abort32 WINE_PACKED;
+  LPSRB     SRB_ToAbort;        /* Pointer to SRB to abort */
+} SRB_Abort WINE_PACKED;
 
-typedef struct tagSRB_BusDeviceReset32 {
+typedef struct tagSRB_BusDeviceReset {
  BYTE         SRB_Cmd;                  /* ASPI command code = SC_RESET_DEV */
  BYTE         SRB_Status;               /* ASPI command status byte */
  BYTE         SRB_HaId;                 /* ASPI host adapter number */
@@ -64,9 +64,9 @@
  void         (*SRB_PostProc)();        /* Post routine */
  void         *SRB_Rsvd2;               /* Reserved */
  BYTE         SRB_Rsvd3[32];            /* Reserved */
-} SRB_BusDeviceReset32 WINE_PACKED;
+} SRB_BusDeviceReset WINE_PACKED;
 
-typedef struct tagSRB_GDEVBlock32 {
+typedef struct tagSRB_GDEVBlock {
  BYTE  SRB_Cmd;                 /* ASPI command code = SC_GET_DEV_TYPE */
  BYTE  SRB_Status;              /* ASPI command status byte */
  BYTE  SRB_HaId;                /* ASPI host adapter number */
@@ -76,21 +76,21 @@
  BYTE  SRB_Lun;                 /* Target's LUN number */
  BYTE  SRB_DeviceType;          /* Target's peripheral device type */
  BYTE  SRB_Rsvd1;
-} SRB_GDEVBlock32 WINE_PACKED;
+} SRB_GDEVBlock WINE_PACKED;
 
-typedef struct tagSRB_Common32 {
+typedef struct tagSRB_Common {
   BYTE  SRB_Cmd;
-} SRB_Common32;
+} SRB_Common;
 
-union SRB32 {
-  SRB_Common32          common;
-  SRB_HaInquiry32       inquiry;
-  SRB_ExecSCSICmd32     cmd;
-  SRB_Abort32           abort;
-  SRB_BusDeviceReset32  reset;
-  SRB_GDEVBlock32       devtype;
+union SRB {
+  SRB_Common          common;
+  SRB_HaInquiry       inquiry;
+  SRB_ExecSCSICmd     cmd;
+  SRB_Abort           abort;
+  SRB_BusDeviceReset  reset;
+  SRB_GDEVBlock       devtype;
 };
 
-typedef union SRB32 SRB32;
+typedef union SRB SRB;
 
 #endif
diff --git a/include/wrc_rsc.h b/include/wrc_rsc.h
index 5cd0a5b..2ceaad1 100644
--- a/include/wrc_rsc.h
+++ b/include/wrc_rsc.h
@@ -24,22 +24,22 @@
 
 typedef struct wrc_resource16
 {
-	INT32	resid;		/* The resource id if resname == NULL */
+	INT	resid;		/* The resource id if resname == NULL */
 	LPSTR	resname;
-	INT32	restype;	/* The resource type-id if typename == NULL */
+	INT	restype;	/* The resource type-id if typename == NULL */
 	LPSTR	restypename;
 	LPBYTE	data;		/* Actual resource data */
-	UINT32	datasize;	/* The size of the resource */
+	UINT	datasize;	/* The size of the resource */
 } wrc_resource16_t;
 
 typedef struct wrc_resource32
 {
-	INT32	resid;		/* The resource id if resname == NULL */
+	INT	resid;		/* The resource id if resname == NULL */
 	LPWSTR	resname;
-	INT32	restype;	/* The resource type-id if typename == NULL */
+	INT	restype;	/* The resource type-id if typename == NULL */
 	LPWSTR	restypename;
 	LPBYTE	data;		/* Actual resource data */
-	UINT32	datasize;	/* The size of the resource */
+	UINT	datasize;	/* The size of the resource */
 } wrc_resource32_t;
 
 #endif
diff --git a/include/wtypes.h b/include/wtypes.h
index 2dc5b14..3089ae4 100644
--- a/include/wtypes.h
+++ b/include/wtypes.h
@@ -16,28 +16,22 @@
 typedef void* RPC_AUTHZ_HANDLE;
 
 
-typedef WORD CLIPFORMAT32, *LPCLIPFORMAT32;
-DECL_WINELIB_TYPE(CLIPFORMAT)
+typedef WORD CLIPFORMAT, *LPCLIPFORMAT;
 
 typedef CHAR		OLECHAR16;
-typedef WCHAR		OLECHAR32;
-DECL_WINELIB_TYPE(OLECHAR)
+typedef WCHAR		OLECHAR;
 
 typedef LPSTR		LPOLESTR16;
-typedef LPWSTR		LPOLESTR32;
-DECL_WINELIB_TYPE(LPOLESTR)
+typedef LPWSTR		LPOLESTR;
 
 typedef LPCSTR		LPCOLESTR16;
-typedef LPCWSTR		LPCOLESTR32;
-DECL_WINELIB_TYPE(LPCOLESTR)
+typedef LPCWSTR		LPCOLESTR;
 
 typedef OLECHAR16	*BSTR16;
-typedef OLECHAR32	*BSTR32;
-DECL_WINELIB_TYPE(BSTR)
+typedef OLECHAR	*BSTR;
 
 typedef BSTR16		*LPBSTR16;
-typedef BSTR32		*LPBSTR32;
-DECL_WINELIB_TYPE(LPBSTR)
+typedef BSTR		*LPBSTR;
 
 #ifndef GUID_DEFINED
 #define GUID_DEFINED
@@ -67,7 +61,7 @@
 #endif // !__cplusplus
 
 
-#define DECLARE_HANDLE(a)  typedef HANDLE16 a##16; typedef HANDLE32 a##32
+#define DECLARE_HANDLE(a)  typedef HANDLE16 a##16; typedef HANDLE a
 DECLARE_HANDLE(HMETAFILEPICT);
 #undef DECLARE_HANDLE
 
diff --git a/include/x11drv.h b/include/x11drv.h
index b3bf74d..9b70a81 100644
--- a/include/x11drv.h
+++ b/include/x11drv.h
@@ -46,7 +46,7 @@
 } X_PHYSBRUSH;
 
   /* X physical font */
-typedef UINT32	 X_PHYSFONT;
+typedef UINT	 X_PHYSFONT;
 
   /* X physical device */
 typedef struct
@@ -74,98 +74,98 @@
 
 /* Wine driver X11 functions */
 
-extern BOOL32 X11DRV_Init(void);
-extern BOOL32 X11DRV_BitBlt( struct tagDC *dcDst, INT32 xDst, INT32 yDst,
-                             INT32 width, INT32 height, struct tagDC *dcSrc,
-                             INT32 xSrc, INT32 ySrc, DWORD rop );
-extern BOOL32 X11DRV_EnumDeviceFonts( struct tagDC *dc, LPLOGFONT16 plf,
+extern BOOL X11DRV_Init(void);
+extern BOOL X11DRV_BitBlt( struct tagDC *dcDst, INT xDst, INT yDst,
+                             INT width, INT height, struct tagDC *dcSrc,
+                             INT xSrc, INT ySrc, DWORD rop );
+extern BOOL X11DRV_EnumDeviceFonts( struct tagDC *dc, LPLOGFONT16 plf,
 				      DEVICEFONTENUMPROC dfeproc, LPARAM lp );
-extern BOOL32 X11DRV_GetCharWidth( struct tagDC *dc, UINT32 firstChar,
-                                   UINT32 lastChar, LPINT32 buffer );
-extern BOOL32 X11DRV_GetTextExtentPoint( struct tagDC *dc, LPCSTR str,
-                                         INT32 count, LPSIZE32 size );
-extern BOOL32 X11DRV_GetTextMetrics(struct tagDC *dc, TEXTMETRIC32A *metrics);
-extern BOOL32 X11DRV_PatBlt( struct tagDC *dc, INT32 left, INT32 top,
-                             INT32 width, INT32 height, DWORD rop );
+extern BOOL X11DRV_GetCharWidth( struct tagDC *dc, UINT firstChar,
+                                   UINT lastChar, LPINT buffer );
+extern BOOL X11DRV_GetTextExtentPoint( struct tagDC *dc, LPCSTR str,
+                                         INT count, LPSIZE size );
+extern BOOL X11DRV_GetTextMetrics(struct tagDC *dc, TEXTMETRICA *metrics);
+extern BOOL X11DRV_PatBlt( struct tagDC *dc, INT left, INT top,
+                             INT width, INT height, DWORD rop );
 extern VOID   X11DRV_SetDeviceClipping(struct tagDC *dc);
-extern BOOL32 X11DRV_StretchBlt( struct tagDC *dcDst, INT32 xDst, INT32 yDst,
-                                 INT32 widthDst, INT32 heightDst,
-                                 struct tagDC *dcSrc, INT32 xSrc, INT32 ySrc,
-                                 INT32 widthSrc, INT32 heightSrc, DWORD rop );
-extern BOOL32 X11DRV_MoveToEx( struct tagDC *dc, INT32 x, INT32 y,LPPOINT32 pt);
-extern BOOL32 X11DRV_LineTo( struct tagDC *dc, INT32 x, INT32 y);
-extern BOOL32 X11DRV_Arc( struct tagDC *dc, INT32 left, INT32 top, INT32 right,
-			  INT32 bottom, INT32 xstart, INT32 ystart, INT32 xend,
-			  INT32 yend );
-extern BOOL32 X11DRV_Pie( struct tagDC *dc, INT32 left, INT32 top, INT32 right,
-			  INT32 bottom, INT32 xstart, INT32 ystart, INT32 xend,
-			  INT32 yend );
-extern BOOL32 X11DRV_Chord( struct tagDC *dc, INT32 left, INT32 top,
-			    INT32 right, INT32 bottom, INT32 xstart,
-			    INT32 ystart, INT32 xend, INT32 yend );
-extern BOOL32 X11DRV_Ellipse( struct tagDC *dc, INT32 left, INT32 top,
-			      INT32 right, INT32 bottom );
-extern BOOL32 X11DRV_Rectangle(struct tagDC *dc, INT32 left, INT32 top,
-			      INT32 right, INT32 bottom);
-extern BOOL32 X11DRV_RoundRect( struct tagDC *dc, INT32 left, INT32 top,
-				INT32 right, INT32 bottom, INT32 ell_width,
-				INT32 ell_height );
-extern COLORREF X11DRV_SetPixel( struct tagDC *dc, INT32 x, INT32 y,
+extern BOOL X11DRV_StretchBlt( struct tagDC *dcDst, INT xDst, INT yDst,
+                                 INT widthDst, INT heightDst,
+                                 struct tagDC *dcSrc, INT xSrc, INT ySrc,
+                                 INT widthSrc, INT heightSrc, DWORD rop );
+extern BOOL X11DRV_MoveToEx( struct tagDC *dc, INT x, INT y,LPPOINT pt);
+extern BOOL X11DRV_LineTo( struct tagDC *dc, INT x, INT y);
+extern BOOL X11DRV_Arc( struct tagDC *dc, INT left, INT top, INT right,
+			  INT bottom, INT xstart, INT ystart, INT xend,
+			  INT yend );
+extern BOOL X11DRV_Pie( struct tagDC *dc, INT left, INT top, INT right,
+			  INT bottom, INT xstart, INT ystart, INT xend,
+			  INT yend );
+extern BOOL X11DRV_Chord( struct tagDC *dc, INT left, INT top,
+			    INT right, INT bottom, INT xstart,
+			    INT ystart, INT xend, INT yend );
+extern BOOL X11DRV_Ellipse( struct tagDC *dc, INT left, INT top,
+			      INT right, INT bottom );
+extern BOOL X11DRV_Rectangle(struct tagDC *dc, INT left, INT top,
+			      INT right, INT bottom);
+extern BOOL X11DRV_RoundRect( struct tagDC *dc, INT left, INT top,
+				INT right, INT bottom, INT ell_width,
+				INT ell_height );
+extern COLORREF X11DRV_SetPixel( struct tagDC *dc, INT x, INT y,
 				 COLORREF color );
-extern COLORREF X11DRV_GetPixel( struct tagDC *dc, INT32 x, INT32 y);
-extern BOOL32 X11DRV_PaintRgn( struct tagDC *dc, HRGN32 hrgn );
-extern BOOL32 X11DRV_Polyline( struct tagDC *dc,const POINT32* pt,INT32 count);
-extern BOOL32 X11DRV_PolyBezier( struct tagDC *dc, const POINT32 start, const POINT32* lppt, DWORD cPoints);
-extern BOOL32 X11DRV_Polygon( struct tagDC *dc, const POINT32* pt, INT32 count );
-extern BOOL32 X11DRV_PolyPolygon( struct tagDC *dc, const POINT32* pt, 
-				  const INT32* counts, UINT32 polygons);
-extern BOOL32 X11DRV_PolyPolyline( struct tagDC *dc, const POINT32* pt, 
+extern COLORREF X11DRV_GetPixel( struct tagDC *dc, INT x, INT y);
+extern BOOL X11DRV_PaintRgn( struct tagDC *dc, HRGN hrgn );
+extern BOOL X11DRV_Polyline( struct tagDC *dc,const POINT* pt,INT count);
+extern BOOL X11DRV_PolyBezier( struct tagDC *dc, const POINT start, const POINT* lppt, DWORD cPoints);
+extern BOOL X11DRV_Polygon( struct tagDC *dc, const POINT* pt, INT count );
+extern BOOL X11DRV_PolyPolygon( struct tagDC *dc, const POINT* pt, 
+				  const INT* counts, UINT polygons);
+extern BOOL X11DRV_PolyPolyline( struct tagDC *dc, const POINT* pt, 
 				  const DWORD* counts, DWORD polylines);
 
-extern HGDIOBJ32 X11DRV_SelectObject( struct tagDC *dc, HGDIOBJ32 handle );
+extern HGDIOBJ X11DRV_SelectObject( struct tagDC *dc, HGDIOBJ handle );
 
 extern COLORREF X11DRV_SetBkColor( struct tagDC *dc, COLORREF color );
 extern COLORREF X11DRV_SetTextColor( struct tagDC *dc, COLORREF color );
-extern BOOL32 X11DRV_ExtFloodFill( struct tagDC *dc, INT32 x, INT32 y,
-				   COLORREF color, UINT32 fillType );
-extern BOOL32 X11DRV_ExtTextOut( struct tagDC *dc, INT32 x, INT32 y,
-				 UINT32 flags, const RECT32 *lprect,
-				 LPCSTR str, UINT32 count, const INT32 *lpDx );
-extern BOOL32 X11DRV_CreateBitmap( HBITMAP32 hbitmap );
-extern BOOL32 X11DRV_DeleteObject( HGDIOBJ32 handle );
-extern LONG X11DRV_BitmapBits( HBITMAP32 hbitmap, void *bits, LONG count,
+extern BOOL X11DRV_ExtFloodFill( struct tagDC *dc, INT x, INT y,
+				   COLORREF color, UINT fillType );
+extern BOOL X11DRV_ExtTextOut( struct tagDC *dc, INT x, INT y,
+				 UINT flags, const RECT *lprect,
+				 LPCSTR str, UINT count, const INT *lpDx );
+extern BOOL X11DRV_CreateBitmap( HBITMAP hbitmap );
+extern BOOL X11DRV_DeleteObject( HGDIOBJ handle );
+extern LONG X11DRV_BitmapBits( HBITMAP hbitmap, void *bits, LONG count,
 			       WORD flags );
-extern INT32 X11DRV_SetDIBitsToDevice( struct tagDC *dc, INT32 xDest,
-				       INT32 yDest, DWORD cx, DWORD cy,
-				       INT32 xSrc, INT32 ySrc,
-				       UINT32 startscan, UINT32 lines,
+extern INT X11DRV_SetDIBitsToDevice( struct tagDC *dc, INT xDest,
+				       INT yDest, DWORD cx, DWORD cy,
+				       INT xSrc, INT ySrc,
+				       UINT startscan, UINT lines,
 				       LPCVOID bits, const BITMAPINFO *info,
-				       UINT32 coloruse );
-extern INT32 X11DRV_DeviceBitmapBits( struct tagDC *dc, HBITMAP32 hbitmap,
-				      WORD fGet, UINT32 startscan,
-				      UINT32 lines, LPSTR bits,
-				      LPBITMAPINFO info, UINT32 coloruse );
-extern HANDLE32 X11DRV_LoadOEMResource( WORD id, WORD type );
+				       UINT coloruse );
+extern INT X11DRV_DeviceBitmapBits( struct tagDC *dc, HBITMAP hbitmap,
+				      WORD fGet, UINT startscan,
+				      UINT lines, LPSTR bits,
+				      LPBITMAPINFO info, UINT coloruse );
+extern HANDLE X11DRV_LoadOEMResource( WORD id, WORD type );
 
 /* X11 driver internal functions */
 
-extern BOOL32 X11DRV_BITMAP_Init(void);
-extern BOOL32 X11DRV_BRUSH_Init(void);
-extern BOOL32 X11DRV_DIB_Init(void);
-extern BOOL32 X11DRV_FONT_Init( struct tagDeviceCaps* );
-extern BOOL32 X11DRV_OBM_Init(void);
+extern BOOL X11DRV_BITMAP_Init(void);
+extern BOOL X11DRV_BRUSH_Init(void);
+extern BOOL X11DRV_DIB_Init(void);
+extern BOOL X11DRV_FONT_Init( struct tagDeviceCaps* );
+extern BOOL X11DRV_OBM_Init(void);
 
 struct tagBITMAPOBJ;
 extern XImage *X11DRV_BITMAP_GetXImage( const struct tagBITMAPOBJ *bmp );
 extern int X11DRV_DIB_GetXImageWidthBytes( int width, int depth );
-extern BOOL32 X11DRV_DIB_Init(void);
+extern BOOL X11DRV_DIB_Init(void);
 extern X11DRV_PHYSBITMAP *X11DRV_AllocBitmap( struct tagBITMAPOBJ *bmp );
 
-extern BOOL32 X11DRV_SetupGCForPatBlt( struct tagDC *dc, GC gc,
-				       BOOL32 fMapColors );
-extern BOOL32 X11DRV_SetupGCForBrush( struct tagDC *dc );
-extern BOOL32 X11DRV_SetupGCForPen( struct tagDC *dc );
-extern BOOL32 X11DRV_SetupGCForText( struct tagDC *dc );
+extern BOOL X11DRV_SetupGCForPatBlt( struct tagDC *dc, GC gc,
+				       BOOL fMapColors );
+extern BOOL X11DRV_SetupGCForBrush( struct tagDC *dc );
+extern BOOL X11DRV_SetupGCForPen( struct tagDC *dc );
+extern BOOL X11DRV_SetupGCForText( struct tagDC *dc );
 
 extern const int X11DRV_XROPfunction[];
 
@@ -219,12 +219,12 @@
 extern struct _CLIPBOARD_DRIVER X11DRV_CLIPBOARD_Driver;
 
 extern void X11DRV_CLIPBOARD_EmptyClipboard(void);
-extern void X11DRV_CLIPBOARD_SetClipboardData(UINT32 wFormat);
-extern BOOL32 X11DRV_CLIPBOARD_RequestSelection(void);
-extern void X11DRV_CLIPBOARD_ResetOwner(struct tagWND *pWnd, BOOL32 bFooBar);
+extern void X11DRV_CLIPBOARD_SetClipboardData(UINT wFormat);
+extern BOOL X11DRV_CLIPBOARD_RequestSelection(void);
+extern void X11DRV_CLIPBOARD_ResetOwner(struct tagWND *pWnd, BOOL bFooBar);
 
 void X11DRV_CLIPBOARD_ReadSelection(Window w, Atom prop);
-void X11DRV_CLIPBOARD_ReleaseSelection(Window w, HWND32 hwnd);
+void X11DRV_CLIPBOARD_ReleaseSelection(Window w, HWND hwnd);
 
 /* X11 color driver */
 
@@ -252,15 +252,15 @@
 
 extern struct _EVENT_DRIVER X11DRV_EVENT_Driver;
 
-extern BOOL32 X11DRV_EVENT_Init(void);
+extern BOOL X11DRV_EVENT_Init(void);
 extern void X11DRV_EVENT_AddIO(int fd, unsigned flag);
 extern void X11DRV_EVENT_DeleteIO(int fd, unsigned flag);
-extern BOOL32 X11DRV_EVENT_WaitNetEvent(BOOL32 sleep, BOOL32 peek);
+extern BOOL X11DRV_EVENT_WaitNetEvent(BOOL sleep, BOOL peek);
 extern void X11DRV_EVENT_Synchronize(void);
-extern BOOL32 X11DRV_EVENT_CheckFocus( void );
-extern BOOL32 X11DRV_EVENT_QueryPointer(DWORD *posX, DWORD *posY, DWORD *state);
+extern BOOL X11DRV_EVENT_CheckFocus( void );
+extern BOOL X11DRV_EVENT_QueryPointer(DWORD *posX, DWORD *posY, DWORD *state);
 extern void X11DRV_EVENT_DummyMotionNotify(void);
-extern BOOL32 X11DRV_EVENT_Pending(void);
+extern BOOL X11DRV_EVENT_Pending(void);
 extern BOOL16 X11DRV_EVENT_IsUserIdle(void);
 extern void X11DRV_EVENT_WakeUp(void);
 
@@ -334,18 +334,18 @@
 
 extern void X11DRV_WND_Initialize(struct tagWND *wndPtr);
 extern void X11DRV_WND_Finalize(struct tagWND *wndPtr);
-extern BOOL32 X11DRV_WND_CreateDesktopWindow(struct tagWND *wndPtr, struct tagCLASS *classPtr, BOOL32 bUnicode);
-extern BOOL32 X11DRV_WND_CreateWindow(struct tagWND *wndPtr, struct tagCLASS *classPtr, CREATESTRUCT32A *cs, BOOL32 bUnicode);
-extern BOOL32 X11DRV_WND_DestroyWindow(struct tagWND *pWnd);
+extern BOOL X11DRV_WND_CreateDesktopWindow(struct tagWND *wndPtr, struct tagCLASS *classPtr, BOOL bUnicode);
+extern BOOL X11DRV_WND_CreateWindow(struct tagWND *wndPtr, struct tagCLASS *classPtr, CREATESTRUCTA *cs, BOOL bUnicode);
+extern BOOL X11DRV_WND_DestroyWindow(struct tagWND *pWnd);
 extern struct tagWND *X11DRV_WND_SetParent(struct tagWND *wndPtr, struct tagWND *pWndParent);
 extern void X11DRV_WND_ForceWindowRaise(struct tagWND *pWnd);
-extern void X11DRV_WND_SetWindowPos(struct tagWND *wndPtr, const WINDOWPOS32 *winpos, BOOL32 bSMC_SETXPOS);
+extern void X11DRV_WND_SetWindowPos(struct tagWND *wndPtr, const WINDOWPOS *winpos, BOOL bSMC_SETXPOS);
 extern void X11DRV_WND_SetText(struct tagWND *wndPtr, LPCSTR text);
 extern void X11DRV_WND_SetFocus(struct tagWND *wndPtr);
 extern void X11DRV_WND_PreSizeMove(struct tagWND *wndPtr);
 extern void X11DRV_WND_PostSizeMove(struct tagWND *wndPtr);
-extern void X11DRV_WND_ScrollWindow(struct tagWND *wndPtr, struct tagDC *dcPtr, INT32 dx, INT32 dy, const RECT32 *clipRect, BOOL32 bUpdate);
-extern void X11DRV_WND_SetDrawable(struct tagWND *wndPtr, struct tagDC *dc, WORD flags, BOOL32 bSetClipOrigin);
-extern BOOL32 X11DRV_WND_IsSelfClipping(struct tagWND *wndPtr);
+extern void X11DRV_WND_ScrollWindow(struct tagWND *wndPtr, struct tagDC *dcPtr, INT dx, INT dy, const RECT *clipRect, BOOL bUpdate);
+extern void X11DRV_WND_SetDrawable(struct tagWND *wndPtr, struct tagDC *dc, WORD flags, BOOL bSetClipOrigin);
+extern BOOL X11DRV_WND_IsSelfClipping(struct tagWND *wndPtr);
 
 #endif  /* __WINE_X11DRV_H */
diff --git a/include/x11font.h b/include/x11font.h
index 8919637..718b14f 100644
--- a/include/x11font.h
+++ b/include/x11font.h
@@ -103,7 +103,7 @@
   UINT16			fo_count;
   fontInfo*			fi;
   char*                         resource;
-  HANDLE32			hOwner;		/*  For FR_SOFTFONT/FR_SOFTRESOURCE fonts */
+  HANDLE			hOwner;		/*  For FR_SOFTFONT/FR_SOFTRESOURCE fonts */
   CHAR				lfFaceName[LF_FACESIZE];
 } fontResource;
 
@@ -182,12 +182,12 @@
 
 typedef struct
 {
-  LPLOGFONT32W		lpLogFontParam;
-  FONTENUMPROC32W	lpEnumFunc;
+  LPLOGFONTW		lpLogFontParam;
+  FONTENUMPROCW	lpEnumFunc;
   LPARAM		lpData;
 
-  LPNEWTEXTMETRICEX32W  lpTextMetric;
-  LPENUMLOGFONTEX32W    lpLogFont;
+  LPNEWTEXTMETRICEXW  lpTextMetric;
+  LPENUMLOGFONTEXW    lpLogFont;
   DWORD			dwFlags;
 } fontEnum32;
 
