Moved the if1632/signal.c stuff into loader/signal.c, adapted function
pointers for wine_debug and INSTR_EmulateInstruction.

diff --git a/graphics/ddraw.c b/graphics/ddraw.c
index 2a5f642..2fcde7f 100644
--- a/graphics/ddraw.c
+++ b/graphics/ddraw.c
@@ -73,7 +73,6 @@
 /* Restore signal handlers overwritten by XF86DGA 
  */
 #define RESTORE_SIGNALS
-BOOL32 (*SIGNAL_Reinit)(void); /* didn't find any obvious place to put this */
 
 /* Where do these GUIDs come from?  mkuuid.
  * They exist solely to distinguish between the targets Wine support,
@@ -2750,7 +2749,7 @@
 #endif
 
 #ifdef RESTORE_SIGNALS
-	if (SIGNAL_Reinit) SIGNAL_Reinit();
+	SIGNAL_InitHandlers();
 #endif
 	return DD_OK;
 #else /* defined(HAVE_LIBXXF86DGA) */
@@ -3000,7 +2999,7 @@
 	Sleep(1000);
 	TSXF86DGADirectVideo(display,DefaultScreen(display),0);
 #ifdef RESTORE_SIGNALS
-	if (SIGNAL_Reinit) SIGNAL_Reinit();
+	SIGNAL_InitHandlers();
 #endif
 	return DD_OK;
 #else /* defined(HAVE_LIBXXF86DGA) */
@@ -3033,7 +3032,8 @@
 #ifdef HAVE_LIBXXF86DGA
 	if (!--(this->ref)) {
 		TSXF86DGADirectVideo(display,DefaultScreen(display),0);
-
+		if (this->d.window && (this->d.mainWindow != this->d.window))
+			DestroyWindow32(this->d.window);
 #ifdef HAVE_LIBXXF86VM
 		if (orig_mode) {
 			TSXF86VidModeSwitchToMode(
@@ -3048,7 +3048,7 @@
 #endif
 		
 #ifdef RESTORE_SIGNALS
-		if (SIGNAL_Reinit) SIGNAL_Reinit();
+		SIGNAL_InitHandlers();
 #endif
 		HeapFree(GetProcessHeap(),0,this);
 		return 0;
@@ -3061,6 +3061,8 @@
         TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref );
 
 	if (!--(this->ref)) {
+		if (this->d.window && (this->d.mainWindow != this->d.window))
+			DestroyWindow32(this->d.window);
 		HeapFree(GetProcessHeap(),0,this);
 		return 0;
 	}
@@ -3773,7 +3775,7 @@
 	(*lplpDD)->d.screen_depth = DefaultDepthOfScreen(X11DRV_GetXScreen());
 	(*lplpDD)->d.depth = DefaultDepthOfScreen(X11DRV_GetXScreen());
 #ifdef RESTORE_SIGNALS
-	if (SIGNAL_Reinit) SIGNAL_Reinit();
+	SIGNAL_InitHandlers();
 #endif
 
 	return DD_OK;
diff --git a/if1632/Makefile.in b/if1632/Makefile.in
index 5552ef0..4ffa622 100644
--- a/if1632/Makefile.in
+++ b/if1632/Makefile.in
@@ -55,7 +55,6 @@
 	builtin.c \
 	dummy.c \
 	relay.c \
-	signal.c \
 	snoop.c \
 	thunk.c
 
diff --git a/if1632/signal.c b/if1632/signal.c
deleted file mode 100644
index 29ade19..0000000
--- a/if1632/signal.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Emulator signal handling
- *
- * Copyright 1995 Alexandre Julliard
- */
-
-#include <stdlib.h>
-#include <signal.h>
-#include <string.h>
-#include <errno.h>
-#include <time.h>
-#include <setjmp.h>
-
-#include <sys/time.h>
-#include <sys/timeb.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "debugger.h"
-#include "options.h"
-#include "sig_context.h"
-#include "miscemu.h"
-#include "dosexe.h"
-#include "thread.h"
-#include "debug.h"
-
-static const char * const SIGNAL_traps[] =
-{
-    "Division by zero exception",      /* 0 */
-    "Debug exception",                 /* 1 */
-    "NMI interrupt",                   /* 2 */
-    "Breakpoint exception",            /* 3 */
-    "Overflow exception",              /* 4 */
-    "Bound range exception",           /* 5 */
-    "Invalid opcode exception",        /* 6 */
-    "Device not available exception",  /* 7 */
-    "Double fault exception",          /* 8 */
-    "Coprocessor segment overrun",     /* 9 */
-    "Invalid TSS exception",           /* 10 */
-    "Segment not present exception",   /* 11 */
-    "Stack fault",                     /* 12 */
-    "General protection fault",        /* 13 */
-    "Page fault",                      /* 14 */
-    "Unknown exception",               /* 15 */
-    "Floating point exception",        /* 16 */
-    "Alignment check exception",       /* 17 */
-    "Machine check exception"          /* 18 */
-};
-
-#define NB_TRAPS  (sizeof(SIGNAL_traps) / sizeof(SIGNAL_traps[0]))
-
-extern void SIGNAL_SetHandler( int sig, void (*func)(), int flags );
-extern BOOL32 INSTR_EmulateInstruction( SIGCONTEXT *context );
-
-
-/**********************************************************************
- *              SIGNAL_break
- * 
- * Handle Ctrl-C and such
- */
-static HANDLER_DEF(SIGNAL_break)
-{
-    HANDLER_INIT();
-    if (Options.debug)
-        wine_debug( signal, HANDLER_CONTEXT );  /* Enter our debugger */
-    else exit(0);
-}
-
-
-/**********************************************************************
- *		SIGNAL_trap
- *
- * SIGTRAP handler.
- */
-static HANDLER_DEF(SIGNAL_trap)
-{
-    HANDLER_INIT();
-    wine_debug( signal, HANDLER_CONTEXT );  /* Enter our debugger */
-}
-
-
-/**********************************************************************
- *		SIGNAL_fault
- *
- * Segfault handler.
- */
-static HANDLER_DEF(SIGNAL_fault)
-{
-    const char *fault = "Segmentation fault";
-
-    HANDLER_INIT();
-    if (INSTR_EmulateInstruction( HANDLER_CONTEXT )) return;
-#ifdef TRAP_sig
-    if (TRAP_sig( HANDLER_CONTEXT ) < NB_TRAPS)
-        fault = SIGNAL_traps[TRAP_sig( HANDLER_CONTEXT )];
-#endif
-    if (IS_SELECTOR_SYSTEM(CS_sig(HANDLER_CONTEXT)))
-    {
-        MSG("%s in 32-bit code (0x%08lx).\n", fault, EIP_sig(HANDLER_CONTEXT));
-    }
-    else
-    {
-        MSG("%s in 16-bit code (%04x:%04lx).\n", fault,
-            (WORD)CS_sig(HANDLER_CONTEXT), EIP_sig(HANDLER_CONTEXT) );
-    }
-#ifdef CR2_sig
-    MSG("Fault address is 0x%08lx\n",CR2_sig(HANDLER_CONTEXT));
-#endif
-    wine_debug( signal, HANDLER_CONTEXT );
-}
-
-
-/***********************************************************************
- *           SIGNAL_SetContext
- *
- * Set the register values from a sigcontext. 
- */
-#ifdef UNUSED_FUNCTIONS
-static void SIGNAL_SetSigContext( const SIGCONTEXT *sigcontext,
-                                  CONTEXT *context )
-{
-    EAX_reg(context) = EAX_sig(sigcontext);
-    EBX_reg(context) = EBX_sig(sigcontext);
-    ECX_reg(context) = ECX_sig(sigcontext);
-    EDX_reg(context) = EDX_sig(sigcontext);
-    ESI_reg(context) = ESI_sig(sigcontext);
-    EDI_reg(context) = EDI_sig(sigcontext);
-    EBP_reg(context) = EBP_sig(sigcontext);
-    EFL_reg(context) = EFL_sig(sigcontext);
-    EIP_reg(context) = EIP_sig(sigcontext);
-    ESP_reg(context) = ESP_sig(sigcontext);
-    CS_reg(context)  = LOWORD(CS_sig(sigcontext));
-    DS_reg(context)  = LOWORD(DS_sig(sigcontext));
-    ES_reg(context)  = LOWORD(ES_sig(sigcontext));
-    SS_reg(context)  = LOWORD(SS_sig(sigcontext));
-#ifdef FS_sig
-    FS_reg(context)  = LOWORD(FS_sig(sigcontext));
-#else
-    GET_FS( FS_reg(&DEBUG_context) );
-    FS_reg(context) &= 0xffff;
-#endif
-#ifdef GS_sig
-    GS_reg(context)  = LOWORD(GS_sig(sigcontext));
-#else
-    GET_GS( GS_reg(&DEBUG_context) );
-    GS_reg(context) &= 0xffff;
-#endif
-}
-#endif
-
-
-/***********************************************************************
- *           SIGNAL_GetSigContext
- *
- * Build a sigcontext from the register values.
- */
-#ifdef UNUSED_FUNCTIONS
-static void SIGNAL_GetSigContext( SIGCONTEXT *sigcontext,
-                                  const CONTEXT *context )
-{
-    EAX_sig(sigcontext) = EAX_reg(context);
-    EBX_sig(sigcontext) = EBX_reg(context);
-    ECX_sig(sigcontext) = ECX_reg(context);
-    EDX_sig(sigcontext) = EDX_reg(context);
-    ESI_sig(sigcontext) = ESI_reg(context);
-    EDI_sig(sigcontext) = EDI_reg(context);
-    EBP_sig(sigcontext) = EBP_reg(context);
-    EFL_sig(sigcontext) = EFL_reg(context);
-    EIP_sig(sigcontext) = EIP_reg(context);
-    ESP_sig(sigcontext) = ESP_reg(context);
-    CS_sig(sigcontext)  = CS_reg(context);
-    DS_sig(sigcontext)  = DS_reg(context);
-    ES_sig(sigcontext)  = ES_reg(context);
-    SS_sig(sigcontext)  = SS_reg(context);
-#ifdef FS_sig
-    FS_sig(sigcontext)  = FS_reg(context);
-#else
-    SET_FS( FS_reg(&DEBUG_context) );
-#endif
-#ifdef GS_sig
-    GS_sig(sigcontext)  = GS_reg(context);
-#else
-    SET_GS( GS_reg(&DEBUG_context) );
-#endif
-}
-#endif
-
-
-/***********************************************************************
- *           SIGNAL_InfoRegisters
- *
- * Display registers information. 
- */
-void SIGNAL_InfoRegisters( CONTEXT *context )
-{
-    MSG(" CS:%04x SS:%04x DS:%04x ES:%04x FS:%04x GS:%04x",
-             (WORD)CS_reg(context), (WORD)SS_reg(context),
-             (WORD)DS_reg(context), (WORD)ES_reg(context),
-             (WORD)FS_reg(context), (WORD)GS_reg(context) );
-    MSG( "\n EIP:%08lx ESP:%08lx EBP:%08lx EFLAGS:%08lx\n", 
-             EIP_reg(context), ESP_reg(context),
-             EBP_reg(context), EFL_reg(context) );
-    MSG( " EAX:%08lx EBX:%08lx ECX:%08lx EDX:%08lx\n", 
-             EAX_reg(context), EBX_reg(context),
-             ECX_reg(context), EDX_reg(context) );
-    MSG( " ESI:%08lx EDI:%08lx\n",
-             ESI_reg(context), EDI_reg(context) );
-}
-
-
-/**********************************************************************
- *		SIGNAL_InitEmulator
- *
- * Initialize emulator signals.
- */
-BOOL32 SIGNAL_InitEmulator(void)
-{
-    SIGNAL_SetHandler( SIGINT,  (void (*)())SIGNAL_break, 1);
-    SIGNAL_SetHandler( SIGSEGV, (void (*)())SIGNAL_fault, 1);
-    SIGNAL_SetHandler( SIGILL,  (void (*)())SIGNAL_fault, 1);
-    SIGNAL_SetHandler( SIGFPE,  (void (*)())SIGNAL_fault, 1);
-    SIGNAL_SetHandler( SIGTRAP, (void (*)())SIGNAL_trap,  1); /* debugger */
-    SIGNAL_SetHandler( SIGHUP,  (void (*)())SIGNAL_trap,  1); /* forced break*/
-#ifdef SIGBUS
-    SIGNAL_SetHandler( SIGBUS,  (void (*)())SIGNAL_fault, 1);
-#endif
-    instr_emu_call = INSTR_EmulateInstruction;
-    return TRUE;
-}
diff --git a/include/debugger.h b/include/debugger.h
index 39ead45..74bf0bb 100644
--- a/include/debugger.h
+++ b/include/debugger.h
@@ -321,4 +321,13 @@
 extern void ctx_debug( int signal, CONTEXT *regs );
 extern void wine_debug( int signal, SIGCONTEXT *regs );
 
+  /* miscemu/instr.c */
+extern BOOL32 INSTR_EmulateInstruction( SIGCONTEXT* );
+
+  /* loader/signal.c */
+extern void (*fnWINE_Debugger)(int,SIGCONTEXT*);
+extern void (*ctx_debug_call)( int, CONTEXT* );
+extern BOOL32 (*fnINSTR_EmulateInstruction)( SIGCONTEXT* );
+
+
 #endif  /* __WINE_DEBUGGER_H */
diff --git a/include/dosexe.h b/include/dosexe.h
index bbed1f8..9da2437 100644
--- a/include/dosexe.h
+++ b/include/dosexe.h
@@ -43,11 +43,6 @@
 
 #define V86_FLAG 0x00020000
 
-extern void (*ctx_debug_call)( int, CONTEXT* );
-#ifdef __i386__
-extern BOOL32 (*instr_emu_call)( SIGCONTEXT* );
-#endif
-
 extern void MZ_Tick( WORD handle );
 
 extern HINSTANCE16 MZ_CreateProcess( LPCSTR name, LPCSTR cmdline, LPCSTR env, BOOL32 inherit,
diff --git a/include/miscemu.h b/include/miscemu.h
index 61b2f34..49992a6 100644
--- a/include/miscemu.h
+++ b/include/miscemu.h
@@ -105,10 +105,7 @@
 extern BOOL32 SIGNAL_Init(void);
 extern void SIGNAL_SetHandler( int sig, void (*func)(), int flags );
 extern void SIGNAL_MaskAsyncEvents( BOOL32 flag );
-
-/* if1632/signal.c */
-extern BOOL32 SIGNAL_InitEmulator(void);
-extern BOOL32 (*SIGNAL_Reinit)(void);
+extern void SIGNAL_InitHandlers(void);
 
 /* misc/aspi.c */
 extern void ASPI_DOS_HandleInt(CONTEXT *context);
diff --git a/include/sig_context.h b/include/sig_context.h
index 6a1541b..3554854 100644
--- a/include/sig_context.h
+++ b/include/sig_context.h
@@ -35,6 +35,7 @@
     unsigned long oldmask;
     unsigned long cr2;
 } SIGCONTEXT;
+#define __HAVE_SIGCONTEXT
 
 #define HANDLER_DEF(name) void name (int signal, SIGCONTEXT context)
 #define HANDLER_CONTEXT (&context)
@@ -58,6 +59,7 @@
 
 #include <machine/frame.h>
 typedef struct trapframe SIGCONTEXT;
+#define __HAVE_SIGCONTEXT
 
 #define HANDLER_DEF(name) void name(int signal, int code, SIGCONTEXT *context)
 #define HANDLER_CONTEXT context
@@ -73,6 +75,7 @@
 
 #include <signal.h>
 typedef struct sigcontext SIGCONTEXT;
+#define __HAVE_SIGCONTEXT
 
 #define HANDLER_DEF(name) void name(int signal, int code, SIGCONTEXT *context)
 #define HANDLER_CONTEXT context
@@ -87,6 +90,7 @@
 #endif
 #include <sys/ucontext.h>
 typedef struct ucontext SIGCONTEXT;
+#define __HAVE_SIGCONTEXT
 
 #define HANDLER_DEF(name) void name(int signal, void *siginfo, SIGCONTEXT *context)
 #define HANDLER_CONTEXT context
@@ -126,6 +130,7 @@
   ULONG ctx_RegEsp;
   ULONG ctx_SegSs;
 } SIGCONTEXT;
+#define __HAVE_SIGCONTEXT
 /*typedef CONTEXTRECORD *PCONTEXTRECORD;*/
 
 #endif  /* __EMX__ */
@@ -265,4 +270,9 @@
 
 #endif /* __i386__ */
 
+#ifndef __HAVE_SIGCONTEXT
+/* empty entry for non x86 architectures mostly. */
+typedef DWORD SIGCONTEXT;
+#endif
+
 #endif /* __WINE_SIG_CONTEXT_H */
diff --git a/loader/dos/dosvm.c b/loader/dos/dosvm.c
index 17d6d4a..0cf2990 100644
--- a/loader/dos/dosvm.c
+++ b/loader/dos/dosvm.c
@@ -23,15 +23,12 @@
 #include "msdos.h"
 #include "miscemu.h"
 #include "debugger.h"
-#include "debug.h"
 #include "module.h"
 #include "task.h"
 #include "ldt.h"
 #include "dosexe.h"
 #include "dosmod.h"
-
-void (*ctx_debug_call)(int sig,CONTEXT*ctx)=NULL;
-BOOL32 (*instr_emu_call)(SIGCONTEXT*ctx)=NULL;
+#include "debug.h"
 
 #ifdef MZ_SUPPORTED
 
@@ -121,7 +118,7 @@
 #define CP(x,y) y##_sig(&sigcontext) = VM86->regs.x
   CV;
 #undef CP
-  if (instr_emu_call) ret=instr_emu_call(&sigcontext);
+  if (fnINSTR_EmulateInstruction) ret=fnINSTR_EmulateInstruction(&sigcontext);
 #define CP(x,y) VM86->regs.x = y##_sig(&sigcontext)
   CV;
 #undef CP
diff --git a/loader/signal.c b/loader/signal.c
index 7e8c29f..6be2645 100644
--- a/loader/signal.c
+++ b/loader/signal.c
@@ -1,12 +1,13 @@
 /*
  * Wine signal handling
  *
+ * Copyright 1995 Alexandre Julliard
  */
 
 #include "config.h"
 
-#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <signal.h>
 #include <string.h>
 #include <errno.h>
@@ -29,10 +30,46 @@
 # endif
 #endif
 
-#include "miscemu.h"
-#include "selectors.h"
-#include "sig_context.h"
 #include "winsock.h"
+#include "global.h"
+#include "options.h"
+#include "debugger.h"
+#include "miscemu.h"
+#include "dosexe.h"
+#include "thread.h"
+#include "debug.h"
+
+void (*fnWINE_Debugger)(int,SIGCONTEXT*) = NULL;
+void (*ctx_debug_call)(int sig,CONTEXT*ctx)=NULL;
+BOOL32 (*fnINSTR_EmulateInstruction)(SIGCONTEXT*ctx)=NULL;
+
+#ifdef __i386__
+
+/* i386 specific faults */
+static const char * const SIGNAL_traps[] =
+{
+    "Division by zero exception",      /* 0 */
+    "Debug exception",                 /* 1 */
+    "NMI interrupt",                   /* 2 */
+    "Breakpoint exception",            /* 3 */
+    "Overflow exception",              /* 4 */
+    "Bound range exception",           /* 5 */
+    "Invalid opcode exception",        /* 6 */
+    "Device not available exception",  /* 7 */
+    "Double fault exception",          /* 8 */
+    "Coprocessor segment overrun",     /* 9 */
+    "Invalid TSS exception",           /* 10 */
+    "Segment not present exception",   /* 11 */
+    "Stack fault",                     /* 12 */
+    "General protection fault",        /* 13 */
+    "Page fault",                      /* 14 */
+    "Unknown exception",               /* 15 */
+    "Floating point exception",        /* 16 */
+    "Alignment check exception",       /* 17 */
+    "Machine check exception"          /* 18 */
+};
+#define NB_TRAPS  (sizeof(SIGNAL_traps) / sizeof(SIGNAL_traps[0]))
+#endif
 
 /* Linux sigaction function */
 
@@ -152,6 +189,106 @@
 
 
 /**********************************************************************
+ *              SIGNAL_MaskAsyncEvents
+ */
+void SIGNAL_MaskAsyncEvents( BOOL32 flag )
+{
+  sigprocmask( (flag) ? SIG_BLOCK : SIG_UNBLOCK , &async_signal_set, NULL);
+}
+
+extern void SIGNAL_SetHandler( int sig, void (*func)(), int flags );
+
+/**********************************************************************
+ *              SIGNAL_break
+ * 
+ * Handle Ctrl-C and such
+ */
+static HANDLER_DEF(SIGNAL_break)
+{
+    HANDLER_INIT();
+    if (Options.debug && fnWINE_Debugger)
+        fnWINE_Debugger( signal, HANDLER_CONTEXT );  /* Enter our debugger */
+    else exit(0);
+}
+
+
+/**********************************************************************
+ *		SIGNAL_trap
+ *
+ * SIGTRAP handler.
+ */
+static HANDLER_DEF(SIGNAL_trap)
+{
+    HANDLER_INIT();
+    if (fnWINE_Debugger)
+	fnWINE_Debugger( signal, HANDLER_CONTEXT );  /* Enter our debugger */
+}
+
+
+/**********************************************************************
+ *		SIGNAL_fault
+ *
+ * Segfault handler.
+ */
+static HANDLER_DEF(SIGNAL_fault)
+{
+    const char *fault = "Segmentation fault";
+    HANDLER_INIT();
+
+#ifdef __i386__
+
+#if defined(TRAP_sig) && defined(CR2_sig)
+    if (TRAP_sig(HANDLER_CONTEXT) == 0x0e
+        && VIRTUAL_HandleFault( (LPVOID)CR2_sig(HANDLER_CONTEXT) ))
+	return;
+#endif
+
+    if (fnINSTR_EmulateInstruction && 
+	fnINSTR_EmulateInstruction( HANDLER_CONTEXT )
+    )
+	return;
+
+#ifdef TRAP_sig
+    if (TRAP_sig( HANDLER_CONTEXT ) < NB_TRAPS)
+        fault = SIGNAL_traps[TRAP_sig( HANDLER_CONTEXT )];
+#endif
+    if (IS_SELECTOR_SYSTEM(CS_sig(HANDLER_CONTEXT)))
+    {
+        MSG("%s in 32-bit code (0x%08lx).\n", fault, EIP_sig(HANDLER_CONTEXT));
+    }
+    else
+    {
+        MSG("%s in 16-bit code (%04x:%04lx).\n", fault,
+            (WORD)CS_sig(HANDLER_CONTEXT), EIP_sig(HANDLER_CONTEXT) );
+    }
+#ifdef CR2_sig
+    MSG("Fault address is 0x%08lx\n",CR2_sig(HANDLER_CONTEXT));
+#endif
+#endif
+
+    if (fnWINE_Debugger)
+	fnWINE_Debugger( signal, HANDLER_CONTEXT );
+}
+
+
+/**********************************************************************
+ *		SIGNAL_InitHandlers
+ */
+void SIGNAL_InitHandlers(void)
+{
+    SIGNAL_SetHandler( SIGINT,  (void (*)())SIGNAL_break, 1);
+    SIGNAL_SetHandler( SIGSEGV, (void (*)())SIGNAL_fault, 1);
+    SIGNAL_SetHandler( SIGILL,  (void (*)())SIGNAL_fault, 1);
+    SIGNAL_SetHandler( SIGFPE,  (void (*)())SIGNAL_fault, 1);
+    SIGNAL_SetHandler( SIGTRAP, (void (*)())SIGNAL_trap,  1); /* debugger */
+    SIGNAL_SetHandler( SIGHUP,  (void (*)())SIGNAL_trap,  1); /* forced break*/
+#ifdef SIGBUS
+    SIGNAL_SetHandler( SIGBUS,  (void (*)())SIGNAL_fault, 1);
+#endif
+    return;
+}
+
+/**********************************************************************
  *		SIGNAL_Init
  */
 BOOL32 SIGNAL_Init(void)
@@ -180,20 +317,10 @@
 /*    SIGNAL_SetHandler( SIGIO,   (void (*)())WINSOCK_sigio, 0);  */
     SIGNAL_SetHandler( SIGIO,   (void (*)())ASYNC_sigio, 0); 
 #endif
-
     sigaddset(&async_signal_set, SIGALRM);
 
     /* ignore SIGPIPE so that WINSOCK can get a EPIPE error instead  */
     signal (SIGPIPE, SIG_IGN);
+    SIGNAL_InitHandlers();
     return TRUE;
 }
-
-
-/**********************************************************************
- *              SIGNAL_MaskAsyncEvents
- */
-void SIGNAL_MaskAsyncEvents( BOOL32 flag )
-{
-  sigprocmask( (flag) ? SIG_BLOCK : SIG_UNBLOCK , &async_signal_set, NULL);
-}
-
diff --git a/miscemu/instr.c b/miscemu/instr.c
index 8b4877b..577644c 100644
--- a/miscemu/instr.c
+++ b/miscemu/instr.c
@@ -323,13 +323,6 @@
     SEGPTR gpHandler;
     BYTE *instr;
 
-    /* Check for page-fault */
-
-#if defined(TRAP_sig) && defined(CR2_sig)
-    if (TRAP_sig(context) == 0x0e
-        && VIRTUAL_HandleFault( (LPVOID)CR2_sig(context) )) return TRUE;
-#endif
-
     long_op = long_addr = IS_SEL_32(context,CS_sig(context));
     instr = (BYTE *)MK_PTR(context,CS_sig(context),EIP_sig(context));
     if (!instr) return FALSE;
diff --git a/miscemu/main.c b/miscemu/main.c
index cda9fca..31b4b20 100644
--- a/miscemu/main.c
+++ b/miscemu/main.c
@@ -32,10 +32,6 @@
     /* Initialize relay code */
     if (!RELAY_Init()) return FALSE;
 
-    /* Initialize signal handling */
-    if (!SIGNAL_InitEmulator()) return FALSE;
-    SIGNAL_Reinit=SIGNAL_InitEmulator;
-
     /* Create the Win16 printer driver */
     if (!WIN16DRV_Init()) return FALSE;
 
@@ -150,8 +146,11 @@
         }
     }
 
-    /* Set up debugger callback routines */
-    ctx_debug_call = ctx_debug;
+    /* Set up debugger/instruction emulation callback routines */
+    ctx_debug_call		= ctx_debug;
+    fnWINE_Debugger		= wine_debug;
+    fnINSTR_EmulateInstruction	= INSTR_EmulateInstruction;
+
     if (Options.debug) 
         TASK_AddTaskEntryBreakpoint = DEBUG_AddTaskEntryBreakpoint;
 
@@ -177,4 +176,3 @@
     MSG( "main: Should never happen: returned from TASK_StartTask()\n" );
     return 0;
 }
-