/* * MOUSE driver * * Copyright 1998 Ulrich Weigand * */ #include #include "debugtools.h" #include "callback.h" #include "builtin16.h" #include "mouse.h" #include "windef.h" #include "wingdi.h" #include "winuser.h" #include "wine/winbase16.h" DEFAULT_DEBUG_CHANNEL(event); #include "pshpack1.h" typedef struct _MOUSEINFO { BYTE msExist; BYTE msRelative; WORD msNumButtons; WORD msRate; WORD msXThreshold; WORD msYThreshold; WORD msXRes; WORD msYRes; WORD msMouseCommPort; } MOUSEINFO, *LPMOUSEINFO; #include "poppack.h" /**********************************************************************/ static LPMOUSE_EVENT_PROC DefMouseEventProc = NULL; /*********************************************************************** * MOUSE_Inquire (MOUSE.1) */ WORD WINAPI MOUSE_Inquire(LPMOUSEINFO mouseInfo) { mouseInfo->msExist = TRUE; mouseInfo->msRelative = FALSE; mouseInfo->msNumButtons = 2; mouseInfo->msRate = 34; /* the DDK says so ... */ mouseInfo->msXThreshold = 0; mouseInfo->msYThreshold = 0; mouseInfo->msXRes = 0; mouseInfo->msYRes = 0; mouseInfo->msMouseCommPort = 0; return sizeof(MOUSEINFO); } /*********************************************************************** * MOUSE_Enable (MOUSE.2) */ VOID WINAPI MOUSE_Enable(LPMOUSE_EVENT_PROC lpMouseEventProc) { THUNK_Free( (FARPROC)DefMouseEventProc ); DefMouseEventProc = lpMouseEventProc; USER_Driver.pInitMouse( 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) ); context.SegCs = SELECTOROF( proc ); context.Eip = OFFSETOF( proc ); context.Eax = (WORD)dwFlags; context.Ebx = (WORD)dx; context.Ecx = (WORD)dy; context.Edx = (WORD)cButtons; context.Esi = LOWORD( dwExtraInfo ); context.Edi = HIWORD( dwExtraInfo ); wine_call_to_16_regs_short( &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; USER_Driver.pInitMouse( 0 ); }