diff --git a/dlls/winedos/int33.c b/dlls/winedos/int33.c index 9693d734e0033fe6cb7091c503749621e937b4c7..f97ebbc296d461be38ba2d0635d9f7425474bb95 100644 --- a/dlls/winedos/int33.c +++ b/dlls/winedos/int33.c @@ -19,6 +19,7 @@ DEFAULT_DEBUG_CHANNEL(int); static struct { DWORD x, y, but; + WORD lbcount, rbcount, rlastx, rlasty, llastx, llasty; FARPROC16 callback; WORD callmask; } mouse_info; @@ -52,6 +53,22 @@ void WINAPI DOSVM_Int33Handler( CONTEXT86 *context ) case 0x04: FIXME("Position mouse cursor\n"); break; + case 0x05: + TRACE("Return Mouse button press Information for %s mouse button\n", + BX_reg(context) ? "right" : "left"); + if (BX_reg(context)) { + BX_reg(context) = mouse_info.rbcount; + mouse_info.rbcount = 0; + CX_reg(context) = mouse_info.rlastx; + DX_reg(context) = mouse_info.rlasty; + } else { + BX_reg(context) = mouse_info.lbcount; + mouse_info.lbcount = 0; + CX_reg(context) = mouse_info.llastx; + DX_reg(context) = mouse_info.llasty; + } + AX_reg(context) = mouse_info.but; + break; case 0x07: FIXME("Define horizontal mouse cursor range\n"); break; @@ -106,7 +123,8 @@ void WINAPI DOSVM_Int33Message(UINT message,WPARAM wParam,LPARAM lParam) if (!VGA_GetMode(&Height,&Width,NULL)) { /* may need to do some coordinate scaling */ - SX = 640/Width; + if (Width) + SX = 640/Width; if (!SX) SX=1; } mouse_info.x = LOWORD(lParam) * SX; @@ -119,6 +137,9 @@ void WINAPI DOSVM_Int33Message(UINT message,WPARAM wParam,LPARAM lParam) case WM_LBUTTONDBLCLK: mouse_info.but |= 0x01; mask |= 0x02; + mouse_info.llastx = mouse_info.x; + mouse_info.llasty = mouse_info.y; + mouse_info.lbcount++; break; case WM_LBUTTONUP: mouse_info.but &= ~0x01; @@ -128,6 +149,9 @@ void WINAPI DOSVM_Int33Message(UINT message,WPARAM wParam,LPARAM lParam) case WM_RBUTTONDBLCLK: mouse_info.but |= 0x02; mask |= 0x08; + mouse_info.rlastx = mouse_info.x; + mouse_info.rlasty = mouse_info.y; + mouse_info.rbcount++; break; case WM_RBUTTONUP: mouse_info.but &= ~0x02;