; ; USER3A.ASM ; More Win16 USER thunks ; ; History: ; ; Created 25-Jan-1991 by Jeff Parsons (jeffpar) ; Added Win 31 thunks 22nd-March-1992 by Chandan S. Chauhan (ChandanC) ; Split off from USER2.ASM 4-Dec-92 by barryb ; Split off user3a.asm from user3.asm 2-May-95 davehart ; ;-- TITLE USER3A.ASM PAGE ,132 .286p .xlist include wow.inc include wowusr.inc include cmacros.inc NOEXTERNS=1 ; to suppress including most of the stuff in user.inc include user.inc .list externFP WOW16Call createSeg _TEXT,CODE,WORD,PUBLIC,CODE createSeg _DATA,DATA,WORD,PUBLIC,DATA,DGROUP defgrp DGROUP,DATA sBegin CODE assumes CS,CODE assumes DS,DATA assumes ES,NOTHING ;*--------------------------------------------------------------------------* ;* ;* CheckMsgForTranslate, CheckAccMsgForTranslate, CheckMDIAccMsgForTranslate ;* ;* Checks to see if the message number in the message is one of those ;* that the system actually uses. If not, then the API just returns with ;* a 0 in AX. This saves the 16-32-16 bit transition for most messages. ;* ;*--------------------------------------------------------------------------* ALIGN 16 cProc CheckMsgForTranslate, parmD lpMsg ; Callers parameter parmD lpReturn ; Callers Return Address ;parmW wBP ; Thunk saved BP ;parmW wDS ; Thunk saved DS cBegin les bx,lpMsg ; load msg address into es:bx mov ax,es:[bx+2] ; load message number ; we are looking for ,WM_KEYDOWN, KEYUP, SYSKEYDOWN, SYSKEYUP ; in other words, 100, 101, 104, amd 105 hex and ax,0fffah ; wipe out 2 bits that are variable xor ax, 0100h ; compensate for bit that must be on jz @f ; cmp ax,WM_KEYDOWN ; jz @f ; cmp ax,WM_KEYUP ; jz @f ; cmp ax,WM_SYSKEYDOWN ; jz @f ; cmp ax,WM_SYSKEYUP ; jz @f sub ax,ax ; flag not translated pop bp add sp,2 ; skip thunk IP retf 4 ; lpMsg -- 4 bytes to pop @@: mov sp,bp ; Do cEnd without Ret count (leave parameters there) pop bp ret cEnd ALIGN 16 cProc CheckAccMsgForTranslate, parmW hWnd parmW hAccTbl parmD lpMsg ; Callers parameter parmD lpReturn ; Callers Return Address cBegin test hWnd,0ffffh jz SHORT t_not les bx,lpMsg ; load msg address into es:bx mov ax,es:[bx+2] ; load message number ; we are looking for ,WM_KEYDOWN, CHAR, SYSKEYDOWN, SYSCHAR ; in other words, 100, 102, 104, amd 106 hex and ax,0fff9h ; wipe out 2 bits that are variable xor ax, 0100h ; compensate for bit that must be on jz @f ; cmp ax,WM_KEYDOWN ; jz @f ; cmp ax,WM_CHAR ; jz @f ; cmp ax,WM_SYSKEYDOWN ; jz @f ; cmp ax,WM_SYSCHAR ; jz @f t_not: sub ax,ax ; flag not translated pop bp add sp,2 ; skip thunk IP retf 8 ; 8 bytes to pop @@: mov sp,bp ; Do cEnd without Ret count (leave parameters there) pop bp ret cEnd ALIGN 16 cProc CheckMDIAccMsgForTranslate, parmD lpMsg ; Callers parameter parmD lpReturn ; Callers Return Address cBegin les bx,lpMsg ; load msg address into es:bx mov ax,es:[bx+2] ; load message number ; we are looking for ,WM_KEYDOWN, SYSKEYDOWN ; in other words, 100, 104 and ax,0fffbh ; wipe out 1 bit that is variable xor ax, 0100h ; compensate for bit that must be on jz @f ; cmp ax,WM_KEYDOWN ; jz @f ; cmp ax,WM_KEYUP ; jz @f ; cmp ax,WM_SYSKEYDOWN ; jz @f ; cmp ax,WM_SYSKEYUP ; jz @f sub ax,ax ; flag not translated pop bp add sp,2 ; skip thunk IP retf 6 ; 6 bytes to pop @@: mov sp,bp ; Do cEnd without Ret count (leave parameters there) pop bp ret cEnd ; ; Our message queues resize automagically, so just say YES ; to whatever they ask for. ; cProc SetMessageQueue, ParmW qSize cBegin mov ax,1 ; just say we did it cEnd ExternFP ExternFP externA __MOD_DUSER cProc SysErrorBox, cBegin ; we check whether the queue exists for this process call GetCurrentTask or ax, ax jz i_SysErrorBox call HqCurrent ; flags are set on exit jz i_SysErrorBox push size SysErrorBox16 t_SysErrorBox: push word ptr HI_WCALLID push __MOD_DUSER + FUN_SYSERRORBOX call WOW16Call .erre (($ - t_SysErrorBox) EQ (05h + 03h + 03h)) i_SysErrorBox: retf 0eh cEnd UserThunk SETCOMMBREAK UserThunk SETCOMMEVENTMASK UserThunk SETCOMMSTATE UserThunk SETCURSOR DUserThunk SETCURSORPOS UserThunk SETDESKPATTERN UserThunk SETDESKWALLPAPER UserThunk SETDLGITEMINT UserThunk SETDLGITEMTEXT DUserThunk SETDOUBLECLICKTIME UserThunk SETEVENTHOOK UserThunk SETFOCUS UserThunk SETGETKBDSTATE UserThunk SETGRIDGRANULARITY DUserThunk SETINTERNALWINDOWPOS UserThunk SETKEYBOARDSTATE UserThunk SETMENU UserThunk SETMENUITEMBITMAPS UserThunk SETPARENT UserThunk SETPROP ;;; UserThunk SETRECT ; LOCALAPI in winrect.asm ;;; UserThunk SETRECTEMPTY ; LOCALAPI in winrect.asm UserThunk SETSCROLLPOS UserThunk SETSCROLLRANGE UserThunk SETSYSCOLORS ;;; UserThunk SETSYSMODALWINDOW ; local api in winmisc1.asm UserThunk SETSYSTEMMENU DUserThunk SETSYSTEMTIMER ;;;;;;; UserThunk SETTIMER UserThunk SETTIMER2 UserThunk SETWC2 UserThunk SETWINDOWLONG UserThunk SETWINDOWPOS DUserThunk SETWINDOWSHOOKINTERNAL UserThunk SETWINDOWTEXT UserThunk SETWINDOWWORD UserThunk SHOWCARET DUserThunk SHOWCURSOR UserThunk SHOWOWNEDPOPUPS UserThunk SHOWSCROLLBAR UserThunk SHOWWINDOW DUserThunk SIGNALPROC UserThunk SNAPWINDOW ;;; UserThunk STATICWNDPROC ;LOCALAPI in wsubcls.c ;;; UserThunk STRINGFUNC ;LOCALAPI in winlang.asm DUserThunk SWAPMOUSEBUTTON DUserThunk SWITCHTOTHISWINDOW UserThunk SWITCHWNDPROC ;;; DUserThunk SYSERRORBOX ; LOCALAPI in this file UserThunk TABBEDTEXTOUT UserThunk TABTHETEXTOUTFORWIMPS UserThunk TRACKPOPUPMENU PUserThunk TRANSLATEACCELERATOR,CheckAccMsgForTranslate PUserThunk TRANSLATEMDISYSACCEL,CheckMDIAccMsgForTranslate PUserThunk TRANSLATEMESSAGE,CheckMsgForTranslate UserThunk TRANSMITCOMMCHAR UserThunk UNGETCOMMCHAR UserThunk UNHOOKWINDOWSHOOK ;;; UserThunk UNIONRECT ; LOCALAPI in winrect.asm UserThunk UNREGISTERCLASS UserThunk UPDATEWINDOW DUserThunk USERYIELD sEnd CODE end