diff options
Diffstat (limited to '')
-rw-r--r-- | private/mvdm/wow32/wusercli.c | 711 |
1 files changed, 711 insertions, 0 deletions
diff --git a/private/mvdm/wow32/wusercli.c b/private/mvdm/wow32/wusercli.c new file mode 100644 index 000000000..c93e9f1b6 --- /dev/null +++ b/private/mvdm/wow32/wusercli.c @@ -0,0 +1,711 @@ +//************************************************************************** +// wusercli.c : +// Contains all functions that execute USER32 client code on 16bitside. +// Most of these functions don't exist on x86 builds. So any changes +// to these files must be reflected in wow16\user\usercli.asm +// +// - nanduri +//************************************************************************** + +#include "precomp.h" +#pragma hdrstop + +MODNAME(wusercli.c); + +#ifndef PMODE32 // NOT INCLUDED IN I386/PMODE32 + +//************************************************************************** +// WU32ClientToScreen - +// +//************************************************************************** + +ULONG FASTCALL WU32ClientToScreen(PVDMFRAME pFrame) +{ + POINT t2; + register PCLIENTTOSCREEN16 parg16; + + GETARGPTR(pFrame, sizeof(CLIENTTOSCREEN16), parg16); + GETPOINT16(parg16->f2, &t2); + + ClientToScreen( HWND32(parg16->f1), &t2 ); + + PUTPOINT16(parg16->f2, &t2); + FREEARGPTR(parg16); + RETURN(0); +} + + +//************************************************************************** +// WU32GetClassName - +// +//************************************************************************** + +ULONG FASTCALL WU32GetClassName(PVDMFRAME pFrame) +{ + ULONG ul; + PSZ psz2; + register PGETCLASSNAME16 parg16; + + GETARGPTR(pFrame, sizeof(GETCLASSNAME16), parg16); + ALLOCVDMPTR(parg16->f2, parg16->f3, psz2); + + ul = GETINT16(GetClassName( HWND32(parg16->f1), psz2, INT32(parg16->f3))); + + FLUSHVDMPTR(parg16->f2, strlen(psz2)+1, psz2); + FREEVDMPTR(psz2); + FREEARGPTR(parg16); + RETURN(ul); +} + + +//************************************************************************** +// WU32GetClientRect - +// +//************************************************************************** + +ULONG FASTCALL WU32GetClientRect(PVDMFRAME pFrame) +{ + RECT t2; + register PGETCLIENTRECT16 parg16; + + GETARGPTR(pFrame, sizeof(GETCLIENTRECT16), parg16); + + /* + * Home Design Gold 2.0 + * + * If the call fails, don't overwrite the passed-in + * rect. + */ + if (GetClientRect(HWND32(parg16->hwnd), &t2)) { + PUTRECT16(parg16->vpRect, &t2); + } + + FREEARGPTR(parg16); + RETURN(0); +} + + + +//************************************************************************** +// WU32GetCursorPos - +// +//************************************************************************** + +ULONG FASTCALL WU32GetCursorPos(PVDMFRAME pFrame) +{ + POINT t1; + register PGETCURSORPOS16 parg16; + + GETARGPTR(pFrame, sizeof(GETCURSORPOS16), parg16); + + GetCursorPos( &t1 ); + + PUTPOINT16(parg16->f1, &t1); + FREEARGPTR(parg16); + RETURN(0); +} + + +//************************************************************************** +// WU32GetDesktopWindow - +// +//************************************************************************** + +ULONG FASTCALL WU32GetDesktopWindow(PVDMFRAME pFrame) +{ + ULONG ul; + + UNREFERENCED_PARAMETER(pFrame); + + ul = GETHWND16(GetDesktopWindow()); + + RETURN(ul); +} + + +//************************************************************************** +// WU32GetDlgItem - +// +//************************************************************************** + +ULONG FASTCALL WU32GetDlgItem(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETDLGITEM16 parg16; + + // + // pass the child ID zero-extended. this ID is the hMenu param to + // CreateWindow, so USER gets this ID with hiword = 0. + // Visual Basic relies on this. + // + + + GETARGPTR(pFrame, sizeof(GETDLGITEM16), parg16); + + ul = GETHWND16(GetDlgItem(HWND32(parg16->f1),WORD32(parg16->f2))); + + if (CURRENTPTD()->dwWOWCompatFlags & WOWCF_DBASEHANDLEBUG) { + ((PTDB)SEGPTR(pFrame->wTDB,0))->TDB_CompatHandle = (USHORT) ul; + } + + + FREEARGPTR(parg16); + RETURN(ul); +} + + +//************************************************************************** +// WU32GetMenu - +// +//************************************************************************** + +ULONG FASTCALL WU32GetMenu(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETMENU16 parg16; + + GETARGPTR(pFrame, sizeof(GETMENU16), parg16); + + ul = GETHMENU16(GetMenu(HWND32(parg16->f1))); + + FREEARGPTR(parg16); + RETURN(ul); +} + + + +//************************************************************************** +// WU32GetMenuItemCount - +// +//************************************************************************** + +ULONG FASTCALL WU32GetMenuItemCount(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETMENUITEMCOUNT16 parg16; + + GETARGPTR(pFrame, sizeof(GETMENUITEMCOUNT16), parg16); + + ul = GETWORD16(GetMenuItemCount( HMENU32(parg16->f1) )); + + FREEARGPTR(parg16); + RETURN(ul); +} + + +//************************************************************************** +// WU32GetMenuItemID - +// +//************************************************************************** + +ULONG FASTCALL WU32GetMenuItemID(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETMENUITEMID16 parg16; + + GETARGPTR(pFrame, sizeof(GETMENUITEMID16), parg16); + + ul = GETWORD16(GetMenuItemID( HMENU32(parg16->f1), INT32(parg16->f2) )); + + FREEARGPTR(parg16); + RETURN(ul); +} + + + +//************************************************************************** +// WU32GetMenuState - +// +//************************************************************************** + +ULONG FASTCALL WU32GetMenuState(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETMENUSTATE16 parg16; + + GETARGPTR(pFrame, sizeof(GETMENUSTATE16), parg16); + + ul = GETWORD16(GetMenuState( HMENU32(parg16->f1), WORD32(parg16->f2), WORD32(parg16->f3) )); + + FREEARGPTR(parg16); + RETURN(ul); +} + + +//************************************************************************** +// WU32GetNextWindow - +// +//************************************************************************** + +ULONG FASTCALL WU32GetNextWindow(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETNEXTWINDOW16 parg16; + + GETARGPTR(pFrame, sizeof(GETNEXTWINDOW16), parg16); + + ul = GETHWND16(GetNextWindow(HWND32(parg16->f1), WORD32(parg16->f2))); + + FREEARGPTR(parg16); + RETURN(ul); +} + + +//************************************************************************** +// WU32GetParent - +// +//************************************************************************** + +ULONG FASTCALL WU32GetParent(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETPARENT16 parg16; + + GETARGPTR(pFrame, sizeof(GETPARENT16), parg16); + + ul = GETHWND16(GetParent(HWND32(parg16->f1))); + + FREEARGPTR(parg16); + RETURN(ul); +} + + + + +//************************************************************************** +// WU32GetSubMenu - +// +//************************************************************************** + +ULONG FASTCALL WU32GetSubMenu(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETSUBMENU16 parg16; + + GETARGPTR(pFrame, sizeof(GETSUBMENU16), parg16); + + ul = GETHMENU16(GetSubMenu(HMENU32(parg16->f1), INT32(parg16->f2))); + + FREEARGPTR(parg16); + RETURN(ul); +} + + + +//************************************************************************** +// WU32GetSysColor - +// +//************************************************************************** + +ULONG FASTCALL WU32GetSysColor(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETSYSCOLOR16 parg16; + + GETARGPTR(pFrame, sizeof(GETSYSCOLOR16), parg16); + + ul = GETDWORD16(GetSysColor( INT32(parg16->f1) )); + + FREEARGPTR(parg16); + RETURN(ul); +} + + + +//************************************************************************** +// WU32GetSystemMetrics - +// +//************************************************************************** + +ULONG FASTCALL WU32GetSystemMetrics(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETSYSTEMMETRICS16 parg16; + int sm; + + GETARGPTR(pFrame, sizeof(GETSYSTEMMETRICS16), parg16); + + sm = INT32(parg16->f1); + + ul = GETINT16(GetSystemMetrics(sm) ); + + FREEARGPTR(parg16); + RETURN(ul); +} + + +//************************************************************************** +// WU32GetTopWindow - +// +//************************************************************************** + +ULONG FASTCALL WU32GetTopWindow(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETTOPWINDOW16 parg16; + + GETARGPTR(pFrame, sizeof(GETTOPWINDOW16), parg16); + + ul = GETHWND16(GetTopWindow(HWND32(parg16->f1))); + + FREEARGPTR(parg16); + RETURN(ul); +} + + + +//************************************************************************** +// WU32GetWindow - +// +//************************************************************************** + +ULONG FASTCALL WU32GetWindow(PVDMFRAME pFrame) +{ + ULONG ul; + register PGETWINDOW16 parg16; + + GETARGPTR(pFrame, sizeof(GETWINDOW16), parg16); + + ul = GETHWND16(GetWindow(HWND32(parg16->f1), WORD32(parg16->f2))); + + FREEARGPTR(parg16); + RETURN(ul); +} + + +//************************************************************************** +// WU32GetWindowRect - +// +//************************************************************************** + +ULONG FASTCALL WU32GetWindowRect(PVDMFRAME pFrame) +{ + RECT t2; + register PGETWINDOWRECT16 parg16; + + GETARGPTR(pFrame, sizeof(GETWINDOWRECT16), parg16); + + /* + * Home Design Gold 2.0 + * + * If the call fails, don't overwrite the passed-in + * rect. + */ + if (GetWindowRect(HWND32(parg16->f1), &t2)) { + PUTRECT16(parg16->f2, &t2); + } + + FREEARGPTR(parg16); + RETURN(0); +} + + + +//************************************************************************** +// WU32IsWindow - +// +//************************************************************************** + +ULONG FASTCALL WU32IsWindow(PVDMFRAME pFrame) +{ + ULONG ul; + register PISWINDOW16 parg16; + + GETARGPTR(pFrame, sizeof(ISWINDOW16), parg16); + + ul = GETBOOL16(IsWindow( HWND32(parg16->f1) )); + + FREEARGPTR(parg16); + RETURN(ul); +} + + +//************************************************************************** +// WU32ScreenToClient - +// +//************************************************************************** + +ULONG FASTCALL WU32ScreenToClient(PVDMFRAME pFrame) +{ + POINT t2; + register PSCREENTOCLIENT16 parg16; + + GETARGPTR(pFrame, sizeof(SCREENTOCLIENT16), parg16); + GETPOINT16(parg16->f2, &t2); + + ScreenToClient( HWND32(parg16->f1), &t2 ); + + PUTPOINT16(parg16->f2, &t2); + FREEARGPTR(parg16); + RETURN(0); +} + + +//************************************************************************** +// WU32IsChild - +// +//************************************************************************** + +ULONG FASTCALL WU32IsChild(PVDMFRAME pFrame) +{ + ULONG ul; + register PISCHILD16 parg16; + + GETARGPTR(pFrame, sizeof(ISCHILD16), parg16); + + ul = GETBOOL16(IsChild( HWND32(parg16->f1), HWND32(parg16->f2) )); + + FREEARGPTR(parg16); + RETURN(ul); +} + + + +//************************************************************************** +// WU32IsIconic - +// +//************************************************************************** + +ULONG FASTCALL WU32IsIconic(PVDMFRAME pFrame) +{ + ULONG ul; + register PISICONIC16 parg16; + + GETARGPTR(pFrame, sizeof(ISICONIC16), parg16); + + ul = GETBOOL16(IsIconic( HWND32(parg16->f1) )); + + FREEARGPTR(parg16); + RETURN(ul); +} + + + +//************************************************************************** +// WU32IsWindowEnabled - +// +//************************************************************************** + +ULONG FASTCALL WU32IsWindowEnabled(PVDMFRAME pFrame) +{ + ULONG ul; + register PISWINDOWENABLED16 parg16; + + GETARGPTR(pFrame, sizeof(ISWINDOWENABLED16), parg16); + + ul = GETBOOL16(IsWindowEnabled( HWND32(parg16->f1) )); + + FREEARGPTR(parg16); + RETURN(ul); +} + + + +//************************************************************************** +// WU32IsWindowVisible - +// +//************************************************************************** + +ULONG FASTCALL WU32IsWindowVisible(PVDMFRAME pFrame) +{ + ULONG ul; + register PISWINDOWVISIBLE16 parg16; + + GETARGPTR(pFrame, sizeof(ISWINDOWVISIBLE16), parg16); + + ul = GETBOOL16(IsWindowVisible( HWND32(parg16->f1) )); + + FREEARGPTR(parg16); + RETURN(ul); +} + + +//************************************************************************** +// WU32IsZoomed - +// +//************************************************************************** + +ULONG FASTCALL WU32IsZoomed(PVDMFRAME pFrame) +{ + ULONG ul; + register PISZOOMED16 parg16; + + GETARGPTR(pFrame, sizeof(ISZOOMED16), parg16); + + ul = GETBOOL16(IsZoomed( HWND32(parg16->f1) )); + + FREEARGPTR(parg16); + RETURN(ul); +} + + + +//************************************************************************** +// WU32GetTickCount - +// +//************************************************************************** + +ULONG FASTCALL WU32GetTickCount(PVDMFRAME pFrame) +{ + ULONG ul; + + UNREFERENCED_PARAMETER(pFrame); + + ul = (ULONG)GetTickCount(); + + if (CURRENTPTD()->dwWOWCompatFlags & WOWCF_GRAINYTICS) { + + // + // round down to the nearest 55ms this is for RelayGold, which + // spins calling this API until consecutive calls return a delta + // greater than 52. + // + + ul = ul - (ul % 55); + } + + RETURN(ul); +} + + +#endif // ALL THE ABOVE NOT INCLUDED FOR I386/PMODE32 + + + +//************************************************************************** +// On I386 all these functions her handled on clientside. But conditionally +// they may endup doing the actual work via these thunks. +// +// So any changes here like 'win31 compatiblity code' may have to be added +// in mvdm\wow16\user\usercli.asm too. +// +// - nanduri +//************************************************************************** + + +//************************************************************************** +// WU32DefHookProc - +// +//************************************************************************** + +ULONG FASTCALL WU32DefHookProc(PVDMFRAME pFrame) +{ + ULONG ul = 0; + register PDEFHOOKPROC16 parg16; + HOOKSTATEDATA HkData; + ULONG hHook16; + INT iHookCode; + INT nCode; + LONG wParam; + LONG lParam; + LPINT lpiFunc; + + GETARGPTR(pFrame, sizeof(DEFHOOKPROC16), parg16); + + nCode = INT32(parg16->f1); + wParam = WORD32(parg16->f2); + lParam = DWORD32(parg16->f3); + + GETMISCPTR(parg16->f4, lpiFunc); + hHook16 = FETCHDWORD(*lpiFunc); + FREEVDMPTR(lpiFunc); + + if (ISVALIDHHOOK(hHook16)) { + iHookCode = GETHHOOKINDEX(hHook16); + HkData.iIndex = iHookCode; + if ( W32GetHookStateData( &HkData ) ) { + ul = (ULONG)WU32StdDefHookProc(nCode, wParam, lParam, iHookCode); + } + } + + FREEARGPTR(parg16); + RETURN(ul); +} + + +//************************************************************************** +// WU32EnableMenuItem - +// +//************************************************************************** + +ULONG FASTCALL WU32EnableMenuItem(PVDMFRAME pFrame) +{ + ULONG ul; + register PENABLEMENUITEM16 parg16; + + GETARGPTR(pFrame, sizeof(ENABLEMENUITEM16), parg16); + + ul = GETBOOL16(EnableMenuItem( HMENU32(parg16->f1), WORD32(parg16->f2), + WORD32(parg16->f3) )); + + FREEARGPTR(parg16); + RETURN(ul); +} + + +//************************************************************************** +// WU32GetKeyState - +// +//************************************************************************** + +ULONG FASTCALL WU32GetKeyState(PVDMFRAME pFrame) +{ + ULONG ul; + SHORT sTmp; + register PGETKEYSTATE16 parg16; + + GETARGPTR(pFrame, sizeof(GETKEYSTATE16), parg16); + + sTmp = GetKeyState(INT32(parg16->f1)); + + // compatiblity: + // MSTEST (testdrvr.exe) tests the bit 0x80 for checking the + // shift key state. This works in win31 because the keystate in win31 is + // one byte long and because of similar code below + // + // win31 code is similar to: + // mov al, byte ptr keystate + // cbw + // ret + // + // if 'al' is 0x80, cbw will make ax = 0xff80 and thus in win31 + // (state & 0x8000) and (state & 0x0080) will work and mean the same. + // + + ul = (ULONG)((sTmp & 0x8000) ? (sTmp | 0x80) : sTmp); + + + + FREEARGPTR(parg16); + RETURN(ul); +} + + + +//************************************************************************** +// WU32GetKeyboardState - +// +//************************************************************************** + +ULONG FASTCALL WU32GetKeyboardState(PVDMFRAME pFrame) +{ + PBYTE pb1; + register PGETKEYBOARDSTATE16 parg16; + + GETARGPTR(pFrame, sizeof(GETKEYBOARDSTATE16), parg16); + ALLOCVDMPTR(parg16->f1, 256, pb1); + +#ifdef HACK32 // bug 5704 + if (pb1) { + GetKeyboardState( pb1 ); + } +#else + GetKeyboardState( pb1 ); +#endif + + FLUSHVDMPTR(parg16->f1, 256, pb1); + FREEVDMPTR(pb1); + FREEARGPTR(parg16); + RETURN(0); +} + |