Keyboard/mouse event proc thunk creation moved out of if1632/thunk.c.
diff --git a/windows/mouse.c b/windows/mouse.c
index 9355e56..3089a19 100644
--- a/windows/mouse.c
+++ b/windows/mouse.c
@@ -5,7 +5,11 @@
*
*/
+#include <string.h>
+
#include "debugtools.h"
+#include "callback.h"
+#include "builtin16.h"
#include "mouse.h"
#include "monitor.h"
#include "winuser.h"
@@ -42,14 +46,43 @@
*/
VOID WINAPI MOUSE_Enable(LPMOUSE_EVENT_PROC lpMouseEventProc)
{
+ THUNK_Free( (FARPROC)DefMouseEventProc );
DefMouseEventProc = lpMouseEventProc;
}
+static VOID WINAPI MOUSE_CallMouseEventProc( FARPROC16 proc,
+ DWORD dwFlags, DWORD dx, DWORD dy,
+ DWORD cButtons, DWORD dwExtraInfo )
+{
+ CONTEXT86 context;
+
+ memset( &context, 0, sizeof(context) );
+ CS_reg(&context) = SELECTOROF( proc );
+ EIP_reg(&context) = OFFSETOF( proc );
+ AX_reg(&context) = (WORD)dwFlags;
+ BX_reg(&context) = (WORD)dx;
+ CX_reg(&context) = (WORD)dy;
+ DX_reg(&context) = (WORD)cButtons;
+ SI_reg(&context) = LOWORD( dwExtraInfo );
+ DI_reg(&context) = HIWORD( dwExtraInfo );
+
+ CallTo16RegisterShort( &context, 0 );
+}
+
+VOID WINAPI WIN16_MOUSE_Enable( FARPROC16 proc )
+{
+ LPMOUSE_EVENT_PROC thunk =
+ (LPMOUSE_EVENT_PROC)THUNK_Alloc( proc, (RELAY)MOUSE_CallMouseEventProc );
+
+ MOUSE_Enable( thunk );
+}
+
/***********************************************************************
* MOUSE_Disable (MOUSE.3)
*/
VOID WINAPI MOUSE_Disable(VOID)
{
+ THUNK_Free( (FARPROC)DefMouseEventProc );
DefMouseEventProc = 0;
}