Release 970202

Sun Feb  2 12:31:03 1997  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [files/drive.c]
	Fixed SetCurrentDirectory() to also change the current drive.

	* [win32/except.c] [tools/build.c]
	Use Win32 register functions to implement exception handling.
	Fixed UnhandledExceptionFilter.

Fri Jan 31 15:42:41  1997  David Faure  <david.faure@ihamy.insa-lyon.fr>

	* [windows/keyboard.c]
	Added KEYBOARD_GenerateMsg to generate Caps Lock and NumLock events
	Added calls to KEYBOARD_GenerateMsg when the key is pressed/released
	or when the state has changed, out of wine.
	Changed type 3-state 'ToggleKeyState' to boolean. The On/Off is given
	by InputKeyStateTable.

Wed Jan 29 21:53:04 1997  Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>

	* [loader/*resource.c][if1632/thunk.c]
	EnumResource* added.

	* [loader/pe_resource.] [loader/resource.c]
	SizeofResource32(), LoadAccelerators32() added.

	* [misc/lstr.c]
	FormatMessage %n added.

	* [misc/crtdll.c][include/ctrdll.h][if1632/crtdll.spec]
	_chdrive,_errno,_isctype added.

	* [misc/cpu.c]
	Replaced runtime_cpu by GetSystemInfo().

	* [windows/hook.c][include/hook.h]
	Fixed mapping of hooks to win32/unicode.

	* [windows/keyboard.c] [windows/defwnd.c]
	Updated to win32 standard.
	ALT-<Menukey> fixed.

	* [windows/queue.c]
	GetWindowThreadProcessId() implemented.

Mon Jan 27 16:42:49 1997  John Harvey <john@division.co.uk>

	* [graphics/metafiledrv/*] [graphics/x11drv/*]
	  [objects/bitmap.c] [objects/brush.c] [objects/font.c]
	  [objects/gdiobj.c] [objects/pen.c]
	Moved SelectObject to graphics drivers. Printer support now works
	in a few cases but is definitely not complete. Generic/text driver
	works. The postscript driver works if true type fonts are disabled
	from the control panel. To enable printer support add Printer=on
	to the wine section of your wine.conf file. This causes write not
	to work properly. I know that several other printer drivers do not
	work.

	* [tools/build.c]
	Make .stabs not used for svr4 since it doesn't use GNU assembler.

	* [misc/fontengine.c]
	Make sure a printf doesn't crash the system.

Sat Jan 25 15:53:35 1997  Huw D M Davies <h.davies1@physics.oxford.ac.uk>

	* [objects/metafile.c]
	Fixed some problems with PlayMetaFileRecord().

	* [objects/dc.c]
	hClipRgn gets initialized in GetDCState().

Fri Jan 24 21:22:26 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* [debugger/stabs.c]
	Handle file names beginning with '/'.

Fri Jan 24 18:33:04 1997  Robert Pouliot <krynos@clic.net>

	* [*/*]
	Some more patches for OS/2 support.

Fri Jan 24 11:30:41 1997  Bang Jun-Young  <bangjy@nownuri.nowcom.co.kr>

	* [resources/sysres_Ko.rc]
	Updated support for Korean (Ko) language.
diff --git a/include/bitmap.h b/include/bitmap.h
index b4a731e..d3896e2 100644
--- a/include/bitmap.h
+++ b/include/bitmap.h
@@ -7,11 +7,12 @@
 #ifndef __WINE_BITMAP_H
 #define __WINE_BITMAP_H
 
-#include <X11/extensions/XShm.h>
 #include "gdi.h"
 #include "xmalloc.h"
 
 #ifdef PRELIMINARY_WING16_SUPPORT
+/* FIXME: this doesn't belong here */
+#include <X11/extensions/XShm.h>
 
 typedef struct
 {
@@ -52,8 +53,6 @@
 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 HBITMAP16 BITMAP_SelectObject( DC * dc, HBITMAP16 hbitmap,
-                                      BITMAPOBJ * bmp );
 
   /* objects/dib.c */
 extern int DIB_GetImageWidthBytes( int width, int depth );
diff --git a/include/brush.h b/include/brush.h
index f03ad8f..8c136d9 100644
--- a/include/brush.h
+++ b/include/brush.h
@@ -16,10 +16,10 @@
     LOGBRUSH32  logbrush;
 } BRUSHOBJ;
 
-extern BOOL32 BRUSH_Init(void);
+#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 HBRUSH32 BRUSH_SelectObject(DC * dc, HBRUSH32 hbrush, BRUSHOBJ * brush);
 
 #endif  /* __WINE_BRUSH_H */
diff --git a/include/callback.h b/include/callback.h
index 2f603c2..9dcf165 100644
--- a/include/callback.h
+++ b/include/callback.h
@@ -77,6 +77,7 @@
 extern LONG CallTo32_2( FARPROC32, DWORD, DWORD );
 extern LONG CallTo32_3( FARPROC32, DWORD, DWORD, DWORD );
 extern LONG CallTo32_4( FARPROC32, DWORD, DWORD, DWORD, DWORD );
+extern LONG CallTo32_5( FARPROC32, DWORD, DWORD, DWORD, DWORD, DWORD );
 
 #define CallTaskStart32( func ) \
     CallTo32_0( func )
diff --git a/include/crtdll.h b/include/crtdll.h
index 916e9b4..c5d9f4e 100644
--- a/include/crtdll.h
+++ b/include/crtdll.h
@@ -10,4 +10,16 @@
 #define CRTDLL_LC_MIN		LC_ALL
 #define CRTDLL_LC_MAX		LC_TIME
 
+/* ctype defines */
+#define CRTDLL_UPPER		0x1
+#define CRTDLL_LOWER		0x2
+#define CRTDLL_DIGIT		0x4
+#define CRTDLL_SPACE		0x8
+#define CRTDLL_PUNCT		0x10
+#define CRTDLL_CONTROL		0x20
+#define CRTDLL_BLANK		0x40
+#define CRTDLL_HEX		0x80
+#define CRTDLL_LEADBYTE		0x8000
+#define CRTDLL_ALPHA		(0x0100|CRTDLL_UPPER|CRTDLL_LOWER)
+
 #endif
diff --git a/include/debugger.h b/include/debugger.h
index 91f5121..1a1f02a 100644
--- a/include/debugger.h
+++ b/include/debugger.h
@@ -309,7 +309,6 @@
 extern void DEBUG_NukePath(void);
 
   /* debugger/dbg.y */
-extern void DEBUG_EnterDebugger(void);
 extern void wine_debug( int signal, SIGCONTEXT *regs );
 
 #endif  /* __WINE_DEBUGGER_H */
diff --git a/include/except.h b/include/except.h
index ff68c39..d55146b 100644
--- a/include/except.h
+++ b/include/except.h
@@ -7,129 +7,6 @@
 #define __WINE_EXCEPT_H
 
 #include "winnt.h"
-/*
- * exception codes
- */
- 
-#define STATUS_WAIT_0                    0x00000000
-#define STATUS_ABANDONED_WAIT_0          0x00000080
-#define STATUS_USER_APC                  0x000000C0
-#define STATUS_TIMEOUT                   0x00000102
-#define STATUS_PENDING                   0x00000103
-#define STATUS_DATATYPE_MISALIGNMENT     0x80000002
-#define STATUS_BREAKPOINT                0x80000003
-#define STATUS_SINGLE_STEP               0x80000004
-#define STATUS_ACCESS_VIOLATION          0xC0000005
-#define STATUS_IN_PAGE_ERROR             0xC0000006
-#define STATUS_NO_MEMORY                 0xC0000017
-#define STATUS_ILLEGAL_INSTRUCTION       0xC000001D
-#define STATUS_NONCONTINUABLE_EXCEPTION  0xC0000025
-#define STATUS_INVALID_DISPOSITION       0xC0000026
-#define STATUS_ARRAY_BOUNDS_EXCEEDED     0xC000008C
-#define STATUS_FLOAT_DENORMAL_OPERAND    0xC000008D
-#define STATUS_FLOAT_DIVIDE_BY_ZERO      0xC000008E
-#define STATUS_FLOAT_INEXACT_RESULT      0xC000008F
-#define STATUS_FLOAT_INVALID_OPERATION   0xC0000090
-#define STATUS_FLOAT_OVERFLOW            0xC0000091
-#define STATUS_FLOAT_STACK_CHECK         0xC0000092
-#define STATUS_FLOAT_UNDERFLOW           0xC0000093
-#define STATUS_INTEGER_DIVIDE_BY_ZERO    0xC0000094
-#define STATUS_INTEGER_OVERFLOW          0xC0000095
-#define STATUS_PRIVILEGED_INSTRUCTION    0xC0000096
-#define STATUS_STACK_OVERFLOW            0xC00000FD
-#define STATUS_CONTROL_C_EXIT            0xC000013A
-
-#define EXCEPTION_ACCESS_VIOLATION      STATUS_ACCESS_VIOLATION
-#define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT
-#define EXCEPTION_BREAKPOINT            STATUS_BREAKPOINT
-#define EXCEPTION_SINGLE_STEP           STATUS_SINGLE_STEP
-#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED
-#define EXCEPTION_FLT_DENORMAL_OPERAND  STATUS_FLOAT_DENORMAL_OPERAND
-#define EXCEPTION_FLT_DIVIDE_BY_ZERO    STATUS_FLOAT_DIVIDE_BY_ZERO
-#define EXCEPTION_FLT_INEXACT_RESULT    STATUS_FLOAT_INEXACT_RESULT
-#define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION
-#define EXCEPTION_FLT_OVERFLOW          STATUS_FLOAT_OVERFLOW
-#define EXCEPTION_FLT_STACK_CHECK       STATUS_FLOAT_STACK_CHECK
-#define EXCEPTION_FLT_UNDERFLOW         STATUS_FLOAT_UNDERFLOW
-#define EXCEPTION_INT_DIVIDE_BY_ZERO    STATUS_INTEGER_DIVIDE_BY_ZERO
-#define EXCEPTION_INT_OVERFLOW          STATUS_INTEGER_OVERFLOW
-#define EXCEPTION_PRIV_INSTRUCTION      STATUS_PRIVILEGED_INSTRUCTION
-#define EXCEPTION_IN_PAGE_ERROR         STATUS_IN_PAGE_ERROR
-
-/*
- * return values from the actual exception handlers
- */
-
-#define ExceptionContinueExecution 0
-#define ExceptionContinueSearch    1
-#define ExceptionNestedException   2
-#define ExceptionCollidedUnwind    3
- 
-/*
- * return values from filters in except() and from UnhandledExceptionFilter
- */
- 
-#define EXCEPTION_EXECUTE_HANDLER        1
-#define EXCEPTION_CONTINUE_SEARCH        0
-#define EXCEPTION_CONTINUE_EXECUTION    -1
-
-/*
- * from OS/2 2.0 exception handling
- * Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD
- */
-
-#define EH_NONCONTINUABLE   0x01
-#define EH_UNWINDING        0x02
-#define EH_EXIT_UNWIND      0x04
-#define EH_STACK_INVALID    0x08
-#define EH_NESTED_CALL      0x10
-
-#define EXCEPTION_CONTINUABLE        0
-#define EXCEPTION_NONCONTINUABLE     EH_NONCONTINUABLE
- 
-/*
- * The exception record used by Win32 to give additional information 
- * about exception to exception handlers.
- */
-
-#define EXCEPTION_MAXIMUM_PARAMETERS 15
-
-typedef struct __EXCEPTION_RECORD
-{
-    DWORD    ExceptionCode;
-    DWORD    ExceptionFlags;
-    struct __EXCEPTION_RECORD *ExceptionRecord;
-
-    LPVOID   ExceptionAddress;
-    DWORD    NumberParameters;
-    DWORD    ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
-} EXCEPTION_RECORD;
-
-typedef struct __EXCEPTION_RECORD_MIN
-{
-    DWORD    ExceptionCode;
-    DWORD    ExceptionFlags;
-    struct __EXCEPTION_RECORD *ExceptionRecord;
-
-    LPVOID   ExceptionAddress;
-    DWORD    NumberParameters;
-    DWORD    ExceptionInformation[0];
-} EXCEPTION_RECORD_MIN;
-
-typedef struct __EXCEPTION_RECORD *PEXCEPTION_RECORD;
-
-/*
- * The exception pointers structure passed to exception filters
- * in except() and the UnhandledExceptionFilter().
- */
- 
-typedef struct __EXCEPTION_POINTERS 
-{
-  PEXCEPTION_RECORD  ExceptionRecord;
-  PCONTEXT           ContextRecord;
-} EXCEPTION_POINTERS;
-
-typedef struct __EXCEPTION_POINTERS *PEXCEPTION_POINTERS;
 
 /*
  * the function pointer to a exception handler
@@ -144,16 +21,6 @@
                                       LPVOID                     pdispatcher);
 
 /*
- * function pointer to a UnhandledExceptionFilter();
- */
-
-typedef long (*__PTOP_EXCFILTER)
-                   (PEXCEPTION_POINTERS ExceptionInfo);
-
-typedef __PTOP_EXCFILTER PTOP_LEVER_EXCEPTION_FILTER;
-typedef __PTOP_EXCFILTER LPTOP_LEVEL_EXCEPTION_FILTER;
-                                 
-/*
  * The exception frame, used for registering exception handlers 
  * Win32 cares only about this, but compilers generally emit 
  * larger exception frames for their own use.
@@ -163,37 +30,16 @@
 {
   struct __EXCEPTION_FRAME *Prev;
   PEXCEPTION_HANDLER       Handler;
-} EXCEPTION_FRAME;
-
-typedef struct __EXCEPTION_FRAME *PEXCEPTION_FRAME;
-
-extern PEXCEPTION_FRAME  TebExceptionFrame asm("%fs:0");
-
-#define EXC_GetFrame()   TebExceptionFrame
-#define EXC_SetFrame(a) (TebExceptionFrame=(a))
+} EXCEPTION_FRAME, *PEXCEPTION_FRAME;
 
 /*
  * Function definitions  
  */
  
-void EXC_RaiseException(DWORD exccode, DWORD excflags, 
-                        DWORD nargs, const LPDWORD pargs,
-                        PCONTEXT pcontext); 
+void RaiseException(DWORD exccode, DWORD excflags, 
+                    DWORD nargs, const LPDWORD pargs,
+                    PCONTEXT pcontext /* Wine additional parameter */ ); 
                         
-void EXC_RtlUnwind( PEXCEPTION_FRAME pestframe,
-                    LPVOID unusedEIP,
-                    PEXCEPTION_RECORD pexcrec,
-                    DWORD contextEAX,
-                    PCONTEXT pcontext );
-                    
-DWORD EXC_CallUnhandledExceptionFilter( PEXCEPTION_RECORD precord,
-                                        PCONTEXT          pcontext);
-
-void EXC_Init(void);
-
-BOOL RaiseException(DWORD exccode, DWORD excflags,
-                    DWORD nargs, const LPDWORD pargs);
-
 /*
  *  this undocumented function is called when an exception
  *  handler wants all the frames to be unwound. RtlUnwind
@@ -208,11 +54,10 @@
  *  context.   
  */
 
-BOOL RtlUnwind( PEXCEPTION_FRAME pestframe,
+void RtlUnwind( PEXCEPTION_FRAME pestframe,
                 LPVOID unusedEIP,
                 PEXCEPTION_RECORD pexcrec,
-                DWORD contextEAX );
-
-DWORD UnhandledExceptionFilter(PEXCEPTION_POINTERS epointers);
+                DWORD contextEAX,
+                PCONTEXT pcontext /* Wine additional parameter */ );
 
 #endif  /* __WINE_EXCEPT_H */
diff --git a/include/font.h b/include/font.h
index 641d029..12456ad 100644
--- a/include/font.h
+++ b/include/font.h
@@ -20,6 +20,10 @@
 
 #pragma pack(4)
 
+#define FONTCACHE 	32	/* dynamic font cache size */
+#define MAX_FONTS	256
+extern LPLOGFONT16 lpLogFontList[MAX_FONTS+1];
+
 /* may be switched... */
 #define GGO_BITMAP	0x4F4D
 #define GGO_NATIVE	0x4F50
@@ -43,6 +47,9 @@
 extern BOOL32 FONT_Init( void );
 extern INT16 FONT_GetObject16( FONTOBJ * font, INT16 count, LPSTR buffer );
 extern INT32 FONT_GetObject32A( FONTOBJ * font, INT32 count, LPSTR buffer );
-extern HFONT16 FONT_SelectObject( DC * dc, HFONT16 hfont, FONTOBJ * font );
+extern int FONT_ParseFontParms(LPSTR lpFont, WORD wParmsNo, LPSTR lpRetStr, WORD wMaxSiz);
+extern void FONT_GetMetrics( LOGFONT16 * logfont, XFontStruct * xfont,
+                            TEXTMETRIC16 * metrics );
+
 
 #endif /* __WINE_FONT_H */
diff --git a/include/hook.h b/include/hook.h
index 21c0196..b9ea056 100644
--- a/include/hook.h
+++ b/include/hook.h
@@ -9,11 +9,12 @@
 
 #include "windows.h"
 
-#define HOOK_WIN16   0x0
-#define HOOK_WIN32   0x1
-#define HOOK_UNICODE 0x2
+#define HOOK_WIN16	0x0
+#define HOOK_WIN32A	0x1
+#define HOOK_WIN32W	0x2
 
-#define HOOK_MAPTYPE (HOOK_WIN32 | HOOK_UNICODE)
+/* hook type mask */
+#define HOOK_MAPTYPE (3)
 
 extern HOOKPROC16 HOOK_GetProc16( HHOOK hhook );
 extern BOOL32 HOOK_IsHooked( INT16 id );
diff --git a/include/metafiledrv.h b/include/metafiledrv.h
index dfb4b92..a8e67a9 100644
--- a/include/metafiledrv.h
+++ b/include/metafiledrv.h
@@ -66,6 +66,7 @@
 extern BOOL32 MFDRV_Polygon( struct tagDC *dc, LPPOINT32 pt, INT32 count );
 extern BOOL32 MFDRV_PolyPolygon( struct tagDC *dc, LPPOINT32 pt, LPINT32 counts,
 				 UINT32 polygons);
+extern HGDIOBJ32 MFDRV_SelectObject( DC *dc, HGDIOBJ32 handle );
 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,
diff --git a/include/miscemu.h b/include/miscemu.h
index bacc10e..04e523a 100644
--- a/include/miscemu.h
+++ b/include/miscemu.h
@@ -35,9 +35,6 @@
 /* msdos/int1a.c */
 extern DWORD INT1A_GetTicksSinceMidnight(void);
 
-/* misc/cpu.c */
-extern int runtime_cpu(void);
-
 #define INT_BARF(context,num) \
     fprintf( stderr, "int%x: unknown/not implemented parameters:\n" \
                      "int%x: AX %04x, BX %04x, CX %04x, DX %04x, " \
diff --git a/include/pe_image.h b/include/pe_image.h
index 1130ba8..12f6895 100644
--- a/include/pe_image.h
+++ b/include/pe_image.h
@@ -23,5 +23,15 @@
 extern int PE_unloadImage(HMODULE32 hModule);
 extern FARPROC32 PE_FindExportedFunction(struct pe_data *pe, LPCSTR funcName);
 extern void my_wcstombs(char * result, u_short * source, int len);
+extern PE_EnumResourceTypes32A(HMODULE32,ENUMRESTYPEPROC32A,LONG);
+extern PE_EnumResourceTypes32W(HMODULE32,ENUMRESTYPEPROC32W,LONG);
+extern PE_EnumResourceNames32A(HMODULE32,LPCSTR,ENUMRESNAMEPROC32A,LONG);
+extern PE_EnumResourceNames32W(HMODULE32,LPCWSTR,ENUMRESNAMEPROC32W,LONG);
+extern PE_EnumResourceLanguages32A(HMODULE32,LPCSTR,LPCSTR,ENUMRESLANGPROC32A,LONG);
+extern PE_EnumResourceLanguages32W(HMODULE32,LPCWSTR,LPCWSTR,ENUMRESLANGPROC32W,LONG);
+extern HRSRC32 PE_FindResourceEx32W(HINSTANCE32,LPCWSTR,LPCWSTR,WORD);
+extern DWORD PE_SizeofResource32(HINSTANCE32,HRSRC32);
+extern HGLOBAL32 PE_LoadResource32(HINSTANCE32,HRSRC32);
+extern void PE_InitializeDLLs(HMODULE16);
 
 #endif /* __WINE_PE_IMAGE_H */
diff --git a/include/pen.h b/include/pen.h
index ab4f5b2..effed43 100644
--- a/include/pen.h
+++ b/include/pen.h
@@ -18,6 +18,5 @@
 
 extern INT16 PEN_GetObject16( PENOBJ * pen, INT16 count, LPSTR buffer );
 extern INT32 PEN_GetObject32( PENOBJ * pen, INT32 count, LPSTR buffer );
-extern HPEN32 PEN_SelectObject( DC * dc, HPEN32 hpen, PENOBJ * pen );
 
 #endif  /* __WINE_PEN_H */
diff --git a/include/process.h b/include/process.h
index 2c018e7..dc6b421 100644
--- a/include/process.h
+++ b/include/process.h
@@ -9,6 +9,7 @@
 
 #include "windows.h"
 #include "winbase.h"
+#include "winnt.h"
 #include "handle32.h"
 #include "task.h"
 
@@ -82,7 +83,7 @@
     DWORD            process_dword;    /* 90 Unknown */
     struct _PDB32   *group;            /* 94 Process group */
     void            *exe_modref;       /* 98 MODREF for the process EXE */
-    void            *top_exc_filter;   /* 9c Top exception filter */
+    LPTOP_LEVEL_EXCEPTION_FILTER top_filter; /* 9c Top exception filter */
     DWORD            priority;         /* a0 Priority level */
     HANDLE32         heap_list;        /* a4 Head of process heap list */
     void            *heap_handles;     /* a8 Head of heap handles list */
diff --git a/include/selectors.h b/include/selectors.h
index f807403..673a2f5 100644
--- a/include/selectors.h
+++ b/include/selectors.h
@@ -40,9 +40,9 @@
 #define WINE_CODE_SELECTOR 0x17
 #endif  /* svr4 || SCO_DS */
 
-#ifdef __EMX__
-#define WINE_DATA_SELECTOR 0x00 /* FIXME: This is wrong */
-#define WINE_CODE_SELECTOR 0x00
+#ifdef __EMX__ /* Is this always true? */
+#define WINE_DATA_SELECTOR 0x53
+#define WINE_CODE_SELECTOR 0x5b
 #endif  /* OS/2 */
 
 #else  /* WINELIB */
diff --git a/include/sigcontext.h b/include/sigcontext.h
index 157bd91..55c60c2 100644
--- a/include/sigcontext.h
+++ b/include/sigcontext.h
@@ -59,7 +59,40 @@
 #endif  /* svr4 || SCO_DS */
 
 #ifdef __EMX__
-typedef struct CONTEXTRECORD SIGCONTEXT;
+typedef unsigned long ULONG;
+typedef unsigned short USHORT;
+typedef struct _fpreg		/* Note 1 */
+{
+  ULONG	 losig;
+  ULONG	 hisig;
+  USHORT signexp;
+} FPREG;
+typedef FPREG *PFPREG;
+
+typedef struct _CONTEXT		/* Note 1 */
+{
+  ULONG ContextFlags;
+  ULONG ctx_env[7];
+  FPREG ctx_stack[8];
+  ULONG ctx_SegGs;
+  ULONG ctx_SegFs;
+  ULONG ctx_SegEs;
+  ULONG ctx_SegDs;
+  ULONG ctx_RegEdi;
+  ULONG ctx_RegEsi;
+  ULONG ctx_RegEax;
+  ULONG ctx_RegEbx;
+  ULONG ctx_RegEcx;
+  ULONG ctx_RegEdx;
+  ULONG ctx_RegEbp;
+  ULONG ctx_RegEip;
+  ULONG ctx_SegCs;
+  ULONG ctx_EFlags;
+  ULONG ctx_RegEsp;
+  ULONG ctx_SegSs;
+} SIGCONTEXT;
+/*typedef CONTEXTRECORD *PCONTEXTRECORD;*/
+
 #endif  /* __EMX__ */
 
 
@@ -138,12 +171,12 @@
 #define EDI_sig(context)     ((context)->ctx_RegEdi)
 #define EBP_sig(context)     ((context)->ctx_RegEbp)
 #define ESP_sig(context)     ((context)->ctx_RegEsp)
-#define CS_sig(context)      ((context)->ctx_SegCS)
-#define DS_sig(context)      ((context)->ctx_SegDS)
-#define ES_sig(context)      ((context)->ctx_SegES)
-#define SS_sig(context)      ((context)->ctx_SegSS)
-#define FS_sig(context)      ((context)->ctx_SegFS)
-#define GS_sig(context)      ((context)->ctx_SegGS)
+#define CS_sig(context)      ((context)->ctx_SegCs)
+#define DS_sig(context)      ((context)->ctx_SegDs)
+#define ES_sig(context)      ((context)->ctx_SegEs)
+#define SS_sig(context)      ((context)->ctx_SegSs)
+#define FS_sig(context)      ((context)->ctx_SegFs)
+#define GS_sig(context)      ((context)->ctx_SegGs)
 #define EFL_sig(context)     ((context)->ctx_EFlags)
 #define EIP_sig(context)     ((context)->ctx_RegEip)
 
diff --git a/include/thread.h b/include/thread.h
index 11d9cbb..ec3fa4a 100644
--- a/include/thread.h
+++ b/include/thread.h
@@ -8,6 +8,7 @@
 #define __WINE_THREAD_H
 
 #include "process.h"
+#include "winnt.h"
 
 /* Thread exception block */
 typedef struct _TEB
@@ -35,7 +36,7 @@
     K32OBJ       header;         /*  00 Kernel object header */
     PDB32       *process;        /*  08 Process owning this thread */
     K32OBJ      *event;          /*  0c Thread event */
-    TEB          teb;            /*  10 Thread information block */
+    TEB          teb;            /*  10 Thread exception block */
     PDB32       *process2;       /*  40 Same as offset 08 (?) */
     DWORD        flags;          /*  44 Flags */
     DWORD        exit_code;      /*  48 Termination status */
@@ -52,7 +53,7 @@
     DWORD        last_error;     /*  70 Last error code */
     void        *debugger_CB;    /*  74 Debugger context block */
     DWORD        debug_thread;   /*  78 Thread debugging this one (?) */
-    void        *context;        /*  7c Thread register context */
+    void        *pcontext;       /*  7c Thread register context */
     DWORD        unknown3[3];    /*  80 Unknown */
     WORD         current_ss;     /*  8c Another 16-bit stack selector */
     WORD         pad2;           /*  8e */
@@ -69,11 +70,14 @@
     K32OBJ      *win16_mutex;    /* 1e8 Pointer to Win16 mutex */
     K32OBJ      *win32_mutex;    /* 1ec Pointer to KERNEL32 mutex */
     K32OBJ      *crit_section2;  /* 1f0 Another critical section */
-    DWORD        unknown6[2];    /* 1f4 Unknown */
+    DWORD        unknown6[3];    /* 1f4 Unknown */
+    /* The following are Wine-specific fields */
+    CONTEXT      context;        /* 200 Thread context */
 } THDB;
 
 
-extern THDB *THREAD_Create( PDB32 *pdb, DWORD stack_size );
+extern THDB *THREAD_Create( PDB32 *pdb, DWORD stack_size,
+                            LPTHREAD_START_ROUTINE start_addr );
 extern void THREAD_Destroy( K32OBJ *ptr );
 
 extern THDB *pCurrentThread;
diff --git a/include/winbase.h b/include/winbase.h
index e277353..919124f 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -38,12 +38,6 @@
 #define FS_CASE_IS_PRESERVED            FILE_CASE_PRESERVED_NAMES
 #define FS_UNICODE_STORED_ON_DISK       FILE_UNICODE_ON_DISK
 
-struct _EXCEPTION_POINTERS;
-
-typedef LONG (TOP_LEVEL_EXCEPTION_FILTER)(struct _EXCEPTION_POINTERS *);
-
-TOP_LEVEL_EXCEPTION_FILTER *SetUnhandledExceptionFilter(TOP_LEVEL_EXCEPTION_FILTER *func);
-
 /*WINAPI int  SetErrorMode(int);*/
 
 #define STATUS_SUCCESS                   0x00000000
diff --git a/include/windows.h b/include/windows.h
index 4d71ced..338bf13 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -1825,6 +1825,12 @@
 #define OF_EXIST              0x4000
 #define OF_REOPEN             0x8000
 
+/* SetErrorMode values */
+#define SEM_FAILCRITICALERRORS      0x0001
+#define SEM_NOGPFAULTERRORBOX       0x0002
+#define SEM_NOALIGNMENTFAULTEXCEPT  0x0004
+#define SEM_NOOPENFILEERRORBOX      0x8000
+
 /* GetTempFileName() Flags */
 #define TF_FORCEDRIVE	        0x80
 
@@ -3667,7 +3673,11 @@
 #define VK_X                0x58
 #define VK_Y                0x59
 #define VK_Z                0x5A
-/*                          0x5B-0x5F  Undefined */
+
+#define VK_LWIN             0x5B
+#define VK_RWIN             0x5C
+#define VK_APPS             0x5D
+/*                          0x5E-0x5F Unassigned */
 #define VK_NUMPAD0          0x60
 #define VK_NUMPAD1          0x61
 #define VK_NUMPAD2          0x62
@@ -3711,16 +3721,37 @@
 /*                          0x88-0x8F  Unassigned */
 #define VK_NUMLOCK          0x90
 #define VK_SCROLL           0x91
-/*                          0x92-0xB9  Unassigned */
+/*                          0x92-0x9F  Unassigned */
+/*
+ * differencing between right and left shift/control/alt key.
+ * Used only by GetAsyncKeyState() and GetKeyState().
+ */
+#define VK_LSHIFT           0xA0
+#define VK_RSHIFT           0xA1
+#define VK_LCONTROL         0xA2
+#define VK_RCONTROL         0xA3
+#define VK_LMENU            0xA4
+#define VK_RMENU            0xA5
+/*                          0xA6-0xB9  Unassigned */
 /*                          0xBA-0xC0  OEM specific */
 /*                          0xC1-0xDA  Unassigned */
 /*                          0xDB-0xE4  OEM specific */
-/*                          0xE5       Unassigned */
+
+#define VK_PROCESSKEY       0xE5
+
 /*                          0xE6       OEM specific */
 /*                          0xE7-0xE8  Unassigned */
 /*                          0xE9-0xF5  OEM specific */
-/*                          0xF6-0xFE  Unassigned */
 
+#define VK_ATTN             0xF6
+#define VK_CRSEL            0xF7
+#define VK_EXSEL            0xF8
+#define VK_EREOF            0xF9
+#define VK_PLAY             0xFA
+#define VK_ZOOM             0xFB
+#define VK_NONAME           0xFC
+#define VK_PA1              0xFD
+#define VK_OEM_CLEAR        0xFE
   
 #define LMEM_FIXED          0   
 #define LMEM_MOVEABLE       0x0002
@@ -4597,6 +4628,21 @@
 
 #define PR_JOBSTATUS	0x0000
 
+typedef BOOL32 (*ENUMRESTYPEPROC32A)(HMODULE32 hModule, LPSTR type,LONG lParam);
+typedef BOOL32 (*ENUMRESTYPEPROC32W)(HMODULE32 hModule, LPWSTR type,LONG lParam);
+typedef BOOL32 (*ENUMRESNAMEPROC32A)(HMODULE32 hModule, LPCSTR type,
+				LPSTR name,LONG lParam);
+typedef BOOL32 (*ENUMRESNAMEPROC32W)(HMODULE32 hModule, LPCWSTR type,
+				LPWSTR name,LONG lParam);
+typedef BOOL32 (*ENUMRESLANGPROC32A)(HMODULE32 hModule, LPCSTR type,
+				LPCSTR name,WORD lang,LONG lParam);
+typedef BOOL32 (*ENUMRESLANGPROC32W)(HMODULE32 hModule, LPCWSTR type,
+				LPCWSTR name,WORD lang,LONG lParam);
+
+DECL_WINELIB_TYPE_AW(ENUMRESTYPEPROC);
+DECL_WINELIB_TYPE_AW(ENUMRESNAMEPROC);
+DECL_WINELIB_TYPE_AW(ENUMRESLANGPROC);
+
 #pragma pack(4)
 
 /* Declarations for functions that exist only in Win16 */
@@ -4637,6 +4683,7 @@
 HWND16     GetDesktopHwnd(void);
 HMODULE16  GetExePtr(HANDLE16);
 WORD       GetExeVersion(void);
+INT16      GetKbCodePage(VOID);
 INT16      GetInstanceData(HINSTANCE16,WORD,INT16);
 BOOL16     GetModuleName(HINSTANCE16,LPSTR,INT16);
 FARPROC16  GetMouseEventProc(void);
@@ -4650,6 +4697,7 @@
 DWORD      GetViewportOrg(HDC16);
 DWORD      GetWindowExt(HDC16);
 DWORD      GetWindowOrg(HDC16);
+DWORD      GetWinFlags(void);
 DWORD      GlobalDOSAlloc(DWORD);
 WORD       GlobalDOSFree(WORD);
 void       GlobalFreeAll(HGLOBAL16);
@@ -4720,6 +4768,7 @@
 BOOL32     CopyFile32A(LPCSTR,LPCSTR,BOOL32);
 BOOL32     CopyFile32W(LPCWSTR,LPCWSTR,BOOL32);
 #define    CopyFile WINELIB_NAME_AW(CopyFile)
+INT32      CompareFileTime(LPFILETIME,LPFILETIME);
 HFILE32    CreateFile32A(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE32);
 HFILE32    CreateFile32W(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE32);
 #define    CreateFile WINELIB_NAME_AW(CreateFile)
@@ -4730,6 +4779,15 @@
 INT32      EnumPropsEx32A(HWND32,PROPENUMPROCEX32A,LPARAM);
 INT32      EnumPropsEx32W(HWND32,PROPENUMPROCEX32W,LPARAM);
 #define    EnumPropsEx WINELIB_NAME_AW(EnumPropsEx)
+BOOL32     EnumResourceLanguages32A(HMODULE32,LPCSTR,LPCSTR,ENUMRESLANGPROC32A,LONG);
+BOOL32     EnumResourceLanguages32W(HMODULE32,LPCWSTR,LPCWSTR,ENUMRESLANGPROC32W,LONG);
+#define    EnumResourceLanguages WINELIB_NAME_AW(EnumResourceLanguages)
+BOOL32     EnumResourceNames32A(HMODULE32,LPCSTR,ENUMRESNAMEPROC32A,LONG);
+BOOL32     EnumResourceNames32W(HMODULE32,LPCWSTR,ENUMRESNAMEPROC32W,LONG);
+#define    EnumResourceNames WINELIB_NAME_AW(EnumResourceNames)
+BOOL32     EnumResourceTypes32A(HMODULE32,ENUMRESTYPEPROC32A,LONG);
+BOOL32     EnumResourceTypes32W(HMODULE32,ENUMRESTYPEPROC32W,LONG);
+#define    EnumResourceTypes WINELIB_NAME_AW(EnumResourceTypes)
 BOOL32     EnumSystemCodePages32A(CODEPAGE_ENUMPROC32A,DWORD);
 BOOL32     EnumSystemCodePages32W(CODEPAGE_ENUMPROC32W,DWORD);
 #define    EnumSystemCodePages WINELIB_NAME_AW(EnumSystemCodePages)
@@ -4787,6 +4845,7 @@
 VOID       GetSystemTime(LPSYSTEMTIME);
 LCID       GetThreadLocale();
 INT32      GetThreadPriority(HANDLE32);
+DWORD      GetWindowThreadProcessId(HWND32,LPDWORD);
 VOID       GlobalMemoryStatus(LPMEMORYSTATUS);
 LPVOID     HeapAlloc(HANDLE32,DWORD,DWORD);
 DWORD      HeapCompact(HANDLE32,DWORD);
@@ -4803,6 +4862,9 @@
 BOOL32     IsValidLocale(DWORD,DWORD);
 BOOL32     LocalFileTimeToFileTime(const FILETIME*,LPFILETIME);
 LPVOID     MapViewOfFileEx(HANDLE32,DWORD,DWORD,DWORD,DWORD,DWORD);
+INT32      MessageBoxEx32A(HWND32,LPCSTR,LPCSTR,UINT32,WORD);
+INT32      MessageBoxEx32W(HWND32,LPCWSTR,LPCWSTR,UINT32,WORD);
+#define    MessageBoxEx WINELIB_NAME_AW(MessageBoxEx)
 BOOL32     MoveFile32A(LPCSTR,LPCSTR);
 BOOL32     MoveFile32W(LPCWSTR,LPCWSTR);
 #define    MoveFile WINELIB_NAME_AW(MoveFile)
@@ -4883,6 +4945,7 @@
 LONG       GetBitmapBits(HBITMAP32,LONG,LPVOID);
 WORD       GetClassWord(HWND32,INT32);
 DWORD      GetDialogBaseUnits(void);
+VOID       GetKeyboardState(LPBYTE);
 DWORD      GetLastError(void);
 DWORD      GetMenuCheckMarkDimensions(void);
 COLORREF   GetSysColor(INT32);
@@ -4891,7 +4954,8 @@
 WORD       GetWindowWord(HWND32,INT32);
 BOOL16     HideCaret(HWND32);
 BOOL16     IsWindow(HWND32);
-void       LZDone(void);
+VOID       LZDone(void);
+DWORD      OemKeyScan(WORD);
 UINT16     RealizePalette(HDC32);
 DWORD      RegCloseKey(HKEY);
 DWORD      RegFlushKey(HKEY);
@@ -4901,6 +4965,7 @@
 BOOL16     SetCaretBlinkTime(UINT32);
 BOOL16     SetCaretPos(INT32,INT32);
 WORD       SetClassWord(HWND32,INT32,WORD);
+VOID       SetKeyboardState(LPBYTE);
 VOID       SetLastError(DWORD);
 VOID       SetRectRgn(HRGN32,INT32,INT32,INT32,INT32);
 COLORREF   SetTextColor(HDC32,COLORREF);
@@ -5419,6 +5484,9 @@
 HWND16     GetActiveWindow16(void);
 HWND32     GetActiveWindow32(void);
 #define    GetActiveWindow WINELIB_NAME(GetActiveWindow)
+WORD       GetAsyncKeyState16(INT16);
+WORD       GetAsyncKeyState32(INT32);
+#define    GetAsyncKeyState WINELIB_NAME(GetAsyncKeyState)
 BOOL16     GetBitmapDimensionEx16(HBITMAP16,LPSIZE16);
 BOOL32     GetBitmapDimensionEx32(HBITMAP32,LPSIZE32);
 #define    GetBitmapDimensionEx WINELIB_NAME(GetBitmapDimensionEx)
@@ -5544,10 +5612,16 @@
 UINT16     GetInternalWindowPos16(HWND16,LPRECT16,LPPOINT16);
 UINT32     GetInternalWindowPos32(HWND32,LPRECT32,LPPOINT32);
 #define    GetInternalWindowPos WINELIB_NAME(GetInternalWindowPos)
+INT16      GetKeyboardType16(INT16);
+INT32      GetKeyboardType32(INT32);
+#define    GetKeyboardType WINELIB_NAME(GetKeyboardType)
 INT16      GetKeyNameText16(LONG,LPSTR,INT16);
 INT32      GetKeyNameText32A(LONG,LPSTR,INT32);
 INT32      GetKeyNameText32W(LONG,LPWSTR,INT32);
 #define    GetKeyNameText WINELIB_NAME_AW(GetKeyNameText)
+WORD       GetKeyState16(INT16);
+WORD       GetKeyState32(INT32);
+#define    GetKeyState WINELIB_NAME(GetKeyState)
 UINT32     GetLogicalDriveStrings32A(UINT32,LPSTR);
 UINT32     GetLogicalDriveStrings32W(UINT32,LPWSTR);
 #define    GetLogicalDriveStrings WINELIB_NAME_AW(GetLogicalDriveStrings)
@@ -5979,6 +6053,10 @@
 LONG       LZSeek16(HFILE16,LONG,INT16);
 LONG       LZSeek32(HFILE32,LONG,INT32);
 #define    LZSeek WINELIB_NAME(LZSeek)
+UINT16     MapVirtualKey16(UINT16,UINT16);
+UINT32     MapVirtualKey32A(UINT32,UINT32);
+UINT32     MapVirtualKey32W(UINT32,UINT32);
+#define    MapVirtualKey WINELIB_NAME_AW(MapVirtualKey)
 FARPROC16  MakeProcInstance16(FARPROC16,HANDLE16);
 #define    MakeProcInstance32(proc,inst) (proc)
 #define    MakeProcInstance WINELIB_NAME(MakeProcInstance)
@@ -6227,6 +6305,10 @@
 INT16      SetCommState16(LPDCB16);
 BOOL32     SetCommState32(INT32,LPDCB32);
 #define    SetCommState WINELIB_NAME(SetCommState)
+BOOL16     SetCurrentDirectory16(LPCSTR);
+BOOL32     SetCurrentDirectory32A(LPCSTR);
+BOOL32     SetCurrentDirectory32W(LPCWSTR);
+#define    SetCurrentDirectory WINELIB_NAME_AW(SetCurrentDirectory)
 BOOL16     SetDeskWallPaper16(LPCSTR);
 BOOL32     SetDeskWallPaper32(LPCSTR);
 #define    SetDeskWallPaper WINELIB_NAME(SetDeskWallPaper)
@@ -6245,6 +6327,9 @@
 void       SetDlgItemText32A(HWND32,INT32,LPCSTR);
 void       SetDlgItemText32W(HWND32,INT32,LPCWSTR);
 #define    SetDlgItemText WINELIB_NAME_AW(SetDlgItemText)
+UINT16     SetErrorMode16(UINT16);
+UINT32     SetErrorMode32(UINT32);
+#define    SetErrorMode WINELIB_NAME(SetErrorMode)
 BOOL16     SetFileAttributes16(LPCSTR,DWORD);
 BOOL32     SetFileAttributes32A(LPCSTR,DWORD);
 BOOL32     SetFileAttributes32W(LPCWSTR,DWORD);
@@ -6366,6 +6451,9 @@
 BOOL16     ShowWindow16(HWND16,INT16);
 BOOL32     ShowWindow32(HWND32,INT32);
 #define    ShowWindow WINELIB_NAME(ShowWindow)
+DWORD      SizeofResource16(HMODULE16,HRSRC16);
+DWORD      SizeofResource32(HMODULE32,HRSRC32);
+#define    SizeofResource WINELIB_NAME(SizeofResource)
 BOOL16     StretchBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,INT16,
                         INT16,INT16,DWORD);
 BOOL32     StretchBlt32(HDC32,INT32,INT32,INT32,INT32,HDC32,INT32,INT32,
@@ -6387,9 +6475,15 @@
 BOOL32     TextOut32A(HDC32,INT32,INT32,LPCSTR,INT32);
 BOOL32     TextOut32W(HDC32,INT32,INT32,LPCWSTR,INT32);
 #define    TextOut WINELIB_NAME_AW(TextOut)
+INT16      ToAscii16(UINT16,UINT16,LPBYTE,LPVOID,UINT16);
+INT32      ToAscii32(UINT32,UINT32,LPBYTE,LPWORD,UINT32);
+#define    ToAscii WINELIB_NAME(ToAscii)
 BOOL16     TrackPopupMenu16(HMENU16,UINT16,INT16,INT16,INT16,HWND16,const RECT16*);
 BOOL32     TrackPopupMenu32(HMENU32,UINT32,INT32,INT32,INT32,HWND32,const RECT32*);
 #define    TrackPopupMenu WINELIB_NAME(TrackPopupMenu)
+INT16      TranslateAccelerator16(HWND16,HACCEL16,LPMSG16);
+INT32      TranslateAccelerator32(HWND32,HACCEL32,LPMSG32);
+#define    TranslateAccelerator WINELIB_NAME(TranslateAccelerator)
 INT16      TransmitCommChar16(INT16,CHAR);
 BOOL32     TransmitCommChar32(INT32,CHAR);
 #define    TransmitCommChar WINELIB_NAME(TransmitCommChar)
@@ -6434,6 +6528,10 @@
 DWORD      VerQueryValue32A(LPVOID,LPCSTR,LPVOID*,UINT32*);
 DWORD      VerQueryValue32W(LPVOID,LPCWSTR,LPVOID*,UINT32*);
 #define    VerQueryValue WINELIB_NAME_AW(VerQueryValue)
+WORD       VkKeyScan16(CHAR);
+WORD       VkKeyScan32A(CHAR);
+WORD       VkKeyScan32W(WCHAR);
+#define    VkKeyScan WINELIB_NAME_AW(VkKeyScan)
 HWND16     WindowFromDC16(HDC16);
 HWND32     WindowFromDC32(HDC32);
 #define    WindowFromDC WINELIB_NAME(WindowFromDC)
@@ -6529,6 +6627,7 @@
 INT32      LoadMessage32A(HINSTANCE32,UINT32,WORD,LPSTR,INT32);
 INT32      LoadMessage32W(HINSTANCE32,UINT32,WORD,LPWSTR,INT32);
 SEGPTR     WIN16_GlobalLock16(HGLOBAL16);
+SEGPTR     WIN16_LockResource(HGLOBAL16);
 INT32      lstrncmp32A(LPCSTR,LPCSTR,INT32);
 INT32      lstrncmp32W(LPCWSTR,LPCWSTR,INT32);
 INT32      lstrncmpi32A(LPCSTR,LPCSTR,INT32);
@@ -6604,7 +6703,6 @@
 UINT       GDIRealizePalette(HDC16);
 HPALETTE16 GDISelectPalette(HDC16,HPALETTE16,WORD);
 DWORD      GetAspectRatioFilter(HDC16);
-int        GetAsyncKeyState(int);
 WORD       GetAtomName(ATOM,LPSTR,short);
 HANDLE16   GetClipboardData(WORD);
 int        GetClipboardFormatName(WORD,LPSTR,short);
@@ -6622,9 +6720,6 @@
 BOOL       GetInputState(void);
 int        GetKBCodePage(void);
 int        GetKerningPairs(HDC16,int,LPKERNINGPAIR16);
-INT        GetKeyState(INT);
-void       GetKeyboardState(BYTE*);
-int        GetKeyboardType(int);
 HWND       GetLastActivePopup(HWND);
 BOOL       GetMessage(SEGPTR,HWND,UINT,UINT);
 LONG       GetMessageExtraInfo(void);
@@ -6649,7 +6744,6 @@
 LPINT16    GetThresholdEvent(void);
 int        GetThresholdStatus(void);
 BOOL       GetWinDebugInfo(LPWINDEBUGINFO,UINT);
-LONG       GetWinFlags(void);
 ATOM       GlobalDeleteAtom(ATOM);
 void       GlobalFix(HGLOBAL16);
 BOOL16     GlobalUnWire(HGLOBAL16);
@@ -6663,9 +6757,7 @@
 BOOL       IsValidMetaFile(HMETAFILE16);
 HINSTANCE16 LoadModule(LPCSTR,LPVOID);
 FARPROC16  LocalNotify(FARPROC16);
-WORD       MapVirtualKey(WORD,WORD);
 void       MessageBeep(WORD);
-DWORD      OemKeyScan(WORD);
 BOOL       OpenClipboard(HWND);
 BOOL       OpenIcon(HWND);
 int        OpenSound(void);
@@ -6692,14 +6784,11 @@
 HWND       SetClipboardViewer(HWND);
 void       SetConvertHook(BOOL);
 BOOL       SetConvertParams(int,int);
-BOOL32     SetCurrentDirectory(LPCSTR);
 HCURSOR16  SetCursor(HCURSOR16);
 void       SetCursorPos(short,short);
 void       SetDoubleClickTime(WORD);
 int        SetEnvironment(LPCSTR,LPCSTR,WORD);
-UINT       SetErrorMode(UINT);
 WORD       SetHookFlags(HDC16,WORD);
-void       SetKeyboardState(BYTE*);
 DWORD      SetMapperFlags(HDC16,DWORD);
 BOOL       SetMessageQueue(int);
 HMETAFILE16 SetMetaFileBits(HGLOBAL16);
@@ -6719,20 +6808,15 @@
 HINSTANCE16 ShellExecute(HWND,LPCSTR,LPCSTR,LPSTR,LPCSTR,INT);
 int        ShowCursor(BOOL);
 void       ShowOwnedPopups(HWND,BOOL);
-DWORD      SizeofResource(HMODULE16,HRSRC16);
 int        StartSound(void);
 int        StopSound(void);
 BOOL       SwapMouseButton(BOOL);
 void       SwapRecording(WORD);
 int        SyncAllVoices(void);
 LONG       TabbedTextOut(HDC16,short,short,LPSTR,short,short,LPINT16,short);
-int        ToAscii(WORD,WORD,LPSTR,LPVOID,WORD);
-INT16      TranslateAccelerator(HWND,HACCEL16,LPMSG16);
 BOOL       TranslateMDISysAccel(HWND,LPMSG16);
 BOOL       TranslateMessage(LPMSG16);
 int        UpdateColors(HDC16);
-WORD       VkKeyScan(WORD);
-SEGPTR     WIN16_LockResource(HGLOBAL16);
 void       WaitMessage(void);
 int        WaitSoundState(int);
 
diff --git a/include/winnt.h b/include/winnt.h
index 55a96a8..4bd7387 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -139,6 +139,126 @@
 
 #endif  /* __WINE__ */
 
+/*
+ * Exception codes
+ */
+ 
+#define STATUS_WAIT_0                    0x00000000
+#define STATUS_ABANDONED_WAIT_0          0x00000080
+#define STATUS_USER_APC                  0x000000C0
+#define STATUS_TIMEOUT                   0x00000102
+#define STATUS_PENDING                   0x00000103
+#define STATUS_DATATYPE_MISALIGNMENT     0x80000002
+#define STATUS_BREAKPOINT                0x80000003
+#define STATUS_SINGLE_STEP               0x80000004
+#define STATUS_ACCESS_VIOLATION          0xC0000005
+#define STATUS_IN_PAGE_ERROR             0xC0000006
+#define STATUS_NO_MEMORY                 0xC0000017
+#define STATUS_ILLEGAL_INSTRUCTION       0xC000001D
+#define STATUS_NONCONTINUABLE_EXCEPTION  0xC0000025
+#define STATUS_INVALID_DISPOSITION       0xC0000026
+#define STATUS_ARRAY_BOUNDS_EXCEEDED     0xC000008C
+#define STATUS_FLOAT_DENORMAL_OPERAND    0xC000008D
+#define STATUS_FLOAT_DIVIDE_BY_ZERO      0xC000008E
+#define STATUS_FLOAT_INEXACT_RESULT      0xC000008F
+#define STATUS_FLOAT_INVALID_OPERATION   0xC0000090
+#define STATUS_FLOAT_OVERFLOW            0xC0000091
+#define STATUS_FLOAT_STACK_CHECK         0xC0000092
+#define STATUS_FLOAT_UNDERFLOW           0xC0000093
+#define STATUS_INTEGER_DIVIDE_BY_ZERO    0xC0000094
+#define STATUS_INTEGER_OVERFLOW          0xC0000095
+#define STATUS_PRIVILEGED_INSTRUCTION    0xC0000096
+#define STATUS_STACK_OVERFLOW            0xC00000FD
+#define STATUS_CONTROL_C_EXIT            0xC000013A
+
+#define EXCEPTION_ACCESS_VIOLATION      STATUS_ACCESS_VIOLATION
+#define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT
+#define EXCEPTION_BREAKPOINT            STATUS_BREAKPOINT
+#define EXCEPTION_SINGLE_STEP           STATUS_SINGLE_STEP
+#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED
+#define EXCEPTION_FLT_DENORMAL_OPERAND  STATUS_FLOAT_DENORMAL_OPERAND
+#define EXCEPTION_FLT_DIVIDE_BY_ZERO    STATUS_FLOAT_DIVIDE_BY_ZERO
+#define EXCEPTION_FLT_INEXACT_RESULT    STATUS_FLOAT_INEXACT_RESULT
+#define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION
+#define EXCEPTION_FLT_OVERFLOW          STATUS_FLOAT_OVERFLOW
+#define EXCEPTION_FLT_STACK_CHECK       STATUS_FLOAT_STACK_CHECK
+#define EXCEPTION_FLT_UNDERFLOW         STATUS_FLOAT_UNDERFLOW
+#define EXCEPTION_INT_DIVIDE_BY_ZERO    STATUS_INTEGER_DIVIDE_BY_ZERO
+#define EXCEPTION_INT_OVERFLOW          STATUS_INTEGER_OVERFLOW
+#define EXCEPTION_PRIV_INSTRUCTION      STATUS_PRIVILEGED_INSTRUCTION
+#define EXCEPTION_IN_PAGE_ERROR         STATUS_IN_PAGE_ERROR
+
+/*
+ * Return values from the actual exception handlers
+ */
+
+#define ExceptionContinueExecution 0
+#define ExceptionContinueSearch    1
+#define ExceptionNestedException   2
+#define ExceptionCollidedUnwind    3
+ 
+/*
+ * Return values from filters in except() and from UnhandledExceptionFilter
+ */
+ 
+#define EXCEPTION_EXECUTE_HANDLER        1
+#define EXCEPTION_CONTINUE_SEARCH        0
+#define EXCEPTION_CONTINUE_EXECUTION    -1
+
+/*
+ * From OS/2 2.0 exception handling
+ * Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD
+ */
+
+#define EH_NONCONTINUABLE   0x01
+#define EH_UNWINDING        0x02
+#define EH_EXIT_UNWIND      0x04
+#define EH_STACK_INVALID    0x08
+#define EH_NESTED_CALL      0x10
+
+#define EXCEPTION_CONTINUABLE        0
+#define EXCEPTION_NONCONTINUABLE     EH_NONCONTINUABLE
+ 
+/*
+ * The exception record used by Win32 to give additional information 
+ * about exception to exception handlers.
+ */
+
+#define EXCEPTION_MAXIMUM_PARAMETERS 15
+
+typedef struct __EXCEPTION_RECORD
+{
+    DWORD    ExceptionCode;
+    DWORD    ExceptionFlags;
+    struct __EXCEPTION_RECORD *ExceptionRecord;
+
+    LPVOID   ExceptionAddress;
+    DWORD    NumberParameters;
+    DWORD    ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} EXCEPTION_RECORD, *PEXCEPTION_RECORD;
+
+/*
+ * The exception pointers structure passed to exception filters
+ * in except() and the UnhandledExceptionFilter().
+ */
+ 
+typedef struct _EXCEPTION_POINTERS 
+{
+  PEXCEPTION_RECORD  ExceptionRecord;
+  PCONTEXT           ContextRecord;
+} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
+
+/*
+ * function pointer to a exception filter
+ */
+
+typedef LONG (*PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS ExceptionInfo);
+typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
+
+DWORD UnhandledExceptionFilter( PEXCEPTION_POINTERS epointers );
+LPTOP_LEVEL_EXCEPTION_FILTER
+SetUnhandledExceptionFilter( LPTOP_LEVEL_EXCEPTION_FILTER filter );
+
 /* Language IDs */
 
 #define LANG_NEUTRAL                     0x00
diff --git a/include/x11drv.h b/include/x11drv.h
index 127441d..a08831e 100644
--- a/include/x11drv.h
+++ b/include/x11drv.h
@@ -90,6 +90,8 @@
 extern BOOL32 X11DRV_PolyPolygon( struct tagDC *dc, LPPOINT32 pt,
 				  LPINT32 counts, UINT32 polygons);
 
+extern HGDIOBJ32 X11DRV_SelectObject( struct tagDC *dc, HGDIOBJ32 handle );
+
 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,
@@ -97,4 +99,10 @@
 				 LPCSTR str, UINT32 count, const INT32 *lpDx );
 
 
+/* X11 driver internal functions */
+
+extern BOOL32 X11DRV_BITMAP_Init(void);
+extern BOOL32 X11DRV_BRUSH_Init(void);
+extern BOOL32 X11DRV_FONT_Init(void);
+
 #endif  /* __WINE_X11DRV_H */