1235 lines
35 KiB
PHP
1235 lines
35 KiB
PHP
|
|
CodeData equ <THUNK16BCodeData>
|
|
|
|
include thkrp.inc
|
|
include cbcheck.inc
|
|
include thkframe.inc
|
|
include public.inc
|
|
include thkmacro.inc
|
|
;include struc.inc
|
|
|
|
include cbcid.inc
|
|
include tapicbid.inc
|
|
|
|
;externDef IsBadCodePtr:far16
|
|
externDef CALLBACK_BODY_16:far16
|
|
externDef Escape:far16
|
|
externDef AllocCallback:far16
|
|
externDef MapLS:far16
|
|
externDef UnmapLS:far16
|
|
ifdef DEBUG
|
|
externDef _wsprintf:far16
|
|
externDef OutputDebugString:far16
|
|
endif
|
|
|
|
externDef FreeCallback:far16
|
|
|
|
|
|
externDef lineInitialize:far16
|
|
externDef phoneInitialize:far16
|
|
externDef lineShutdown:far16
|
|
externDef phoneShutdown:far16
|
|
|
|
|
|
public addrCBLineInit ;Address of callback routine passed in lineInitialize
|
|
public addrCBPhoneInit ;Address of callback routine passed in phoneInitialize
|
|
public cbcidTapi ;Callback ID for client returned by RegisterCBClient
|
|
_DATA SEGMENT
|
|
addrCBLineInit dd 0
|
|
addrCBPhoneInit dd 0
|
|
cbcidTapi dd 0
|
|
_DATA ENDS
|
|
|
|
ifdef DEBUG
|
|
;; Writes message to debug port.
|
|
;;
|
|
;; Usage:
|
|
;; DPRINT "I'm feeling buggy."
|
|
;;
|
|
DPRINT macro string
|
|
local mes, skip_mes
|
|
|
|
jmp skip_mes
|
|
mes db &string&,13,10,0
|
|
skip_mes:
|
|
push eax ;Save all registers not preserved by PASCAL format.
|
|
push ebx
|
|
push ecx
|
|
push edx
|
|
|
|
push cs ;Arg: OutputDebugString(lpstr)
|
|
push offset mes
|
|
call OutputDebugString
|
|
|
|
pop edx
|
|
pop ecx
|
|
pop ebx
|
|
pop eax
|
|
endm ;DPRINT
|
|
endif
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINEINITIALIZE16
|
|
;-----------------------------------------------------------------------;
|
|
body_LINEINITIALIZE16 macro
|
|
|
|
;LONG lineInitialize16 (LPHLINEAPP lphLineApp,
|
|
; HINSTANCE hInstance,
|
|
; LINECALLBACK lpfnCallback,
|
|
; LPCSTR lpszAppName,
|
|
; LPDWORD lpdwNumDevs)
|
|
;
|
|
bp_lphLineApp equ <bp_top>
|
|
bp_hInstance equ <bp_top+4>
|
|
bp_lpfnCallback equ <bp_top+8>
|
|
bp_lpszAppName equ <bp_top+12>
|
|
bp_lpdwNumDevs equ <bp_top+16>
|
|
;
|
|
|
|
bp_lpszAppNameTmp equ <dword ptr [bp-4]>
|
|
bp_lpdwNumDevsTmp equ <dword ptr [bp-8]>
|
|
bp_lphLineAppTmp equ <dword ptr [bp-12]>
|
|
|
|
;
|
|
; First order of business: check the code pointer. If it's
|
|
; bogus, we leave.
|
|
;
|
|
|
|
; push dword ptr bp_lpfnCallback
|
|
; call IsBadCodePtr
|
|
; or eax, eax
|
|
; jnz DoNothing
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lpszAppNameTmp
|
|
push eax ;bp_lpdwNumDevsTmp
|
|
push eax ;bp_lphLineAppTmp
|
|
|
|
push dword ptr bp_lphLineApp
|
|
call MapLS
|
|
mov bp_lphLineAppTmp, eax
|
|
push eax
|
|
|
|
mov eax, dword ptr bp_hInstance ; Get the hInst
|
|
or eax, eax ; Is it NULL?
|
|
jz @f ; Yup, and that's ok.
|
|
MAP_NULL_HINST eax ; Needs to be mapped.
|
|
push ax
|
|
|
|
; mov ax, seg addrCBLineInit
|
|
; mov ds, ax
|
|
; mov eax, dword ptr bp_lpfnCallback
|
|
; mov addrCBLineInit, eax
|
|
; push eax
|
|
; mov eax, cbcidTapi
|
|
; shl eax, 16
|
|
; add eax, ID_LINEINITIALIZE
|
|
; push eax
|
|
; call AllocCallback
|
|
; push dx
|
|
; push ax
|
|
|
|
push dword ptr bp_lpfnCallback
|
|
|
|
push dword ptr bp_lpszAppName
|
|
call MapLS
|
|
mov bp_lpszAppNameTmp, eax
|
|
push eax
|
|
|
|
push dword ptr bp_lpdwNumDevs
|
|
call MapLS
|
|
mov bp_lpdwNumDevsTmp, eax
|
|
push eax
|
|
|
|
|
|
call lineInitialize
|
|
|
|
|
|
shl eax,16 ; Convert the 16bit retcode...
|
|
shrd eax,edx,16 ; to a 32bit retcode.
|
|
|
|
push eax ; Save the retcode for later.
|
|
|
|
push dword ptr bp_lpdwNumDevsTmp
|
|
call UnMapLS
|
|
|
|
push dword ptr bp_lpszAppNameTmp
|
|
call UnMapLS
|
|
|
|
push dword ptr bp_lphLineAppTmp
|
|
call UnMapLS
|
|
|
|
pop eax ; Get the retcode
|
|
|
|
;DoNothing:
|
|
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_PHONEINITIALIZE
|
|
;-----------------------------------------------------------------------;
|
|
body_PHONEINITIALIZE16 macro
|
|
|
|
;LONG phoneInitialize (LPHPHONEAPP lphPhoneApp,
|
|
; HINSTANCE hInstance,
|
|
; PHONECALLBACK lpfnCallback,
|
|
; LPCSTR lpszAppName,
|
|
; LPDWORD lpdwNumDevs)
|
|
;
|
|
bp_lphPhoneApp equ <bp_top>
|
|
bp_hInstance equ <bp_top+4>
|
|
bp_lpfnCallback equ <bp_top+8>
|
|
bp_lpszAppName equ <bp_top+12>
|
|
bp_lpdwNumDevs equ <bp_top+16>
|
|
;
|
|
|
|
bp_lpszAppNameTmp equ <dword ptr [bp-4]>
|
|
bp_lpdwNumDevsTmp equ <dword ptr [bp-8]>
|
|
bp_lphPhoneAppTmp equ <dword ptr [bp-12]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lpszAppNameTmp
|
|
push eax ;bp_lpdwNumDevsTmp
|
|
push eax ;bp_lphPhoneAppTmp
|
|
|
|
push dword ptr bp_lphPhoneApp
|
|
call MapLS
|
|
mov bp_lphPhoneAppTmp, eax
|
|
push eax
|
|
|
|
mov eax, dword ptr bp_hInstance ; Get the hInst
|
|
or eax, eax ; Is it NULL?
|
|
jz @f ; Yup, and that's ok.
|
|
MAP_NULL_HINST eax ; Needs to be mapped.
|
|
push ax
|
|
|
|
; mov ax, seg addrCBPhoneInit
|
|
; mov ds, ax
|
|
; mov eax, dword ptr bp_lpfnCallback
|
|
; mov addrCBPhoneInit, eax
|
|
; push eax
|
|
; mov eax, cbcidTapi
|
|
; shl eax, 16
|
|
; add eax, ID_PHONEINITIALIZE
|
|
; push eax
|
|
; call AllocCallback
|
|
; push dx
|
|
; push ax
|
|
push dword ptr bp_lpfnCallback
|
|
|
|
push dword ptr bp_lpszAppName
|
|
call MapLS
|
|
mov bp_lpszAppNameTmp, eax
|
|
push eax
|
|
|
|
push dword ptr bp_lpdwNumDevs
|
|
call MapLS
|
|
mov bp_lpdwNumDevsTmp, eax
|
|
push eax
|
|
|
|
|
|
call phoneInitialize
|
|
|
|
|
|
shl eax,16 ; Convert the 16bit retcode...
|
|
shrd eax,edx,16 ; to a 32bit retcode.
|
|
|
|
push eax ; Save the retcode for later.
|
|
|
|
push dword ptr bp_lpdwNumDevsTmp
|
|
call UnMapLS
|
|
|
|
push dword ptr bp_lpszAppNameTmp
|
|
call UnMapLS
|
|
|
|
push dword ptr bp_lphPhoneAppTmp
|
|
call UnMapLS
|
|
|
|
pop eax ; Get the retcode
|
|
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
;-----------------------------------------------------------------------;
|
|
;PUSH__LINEINITIALIZE_hInstance macro iOffset, iJunk
|
|
; local Null_OK
|
|
;
|
|
; mov eax, [bp+iOffset] ;;Allow NULL to be passed here (for now)
|
|
; or eax, eax
|
|
; jz Null_OK
|
|
; MAP_NULL_HINST eax
|
|
;Null_OK:
|
|
; push ax
|
|
;
|
|
;endm ;PUSH__LINEINITIALIZE_hInstance
|
|
;
|
|
;
|
|
;-----------------------------------------------------------------------;
|
|
;-----------------------------------------------------------------------;
|
|
;PUSH__PHONEINITIALIZE_hInstance macro iOffset, iJunk
|
|
; local Null_OK
|
|
;
|
|
; mov eax, [bp+iOffset] ;;Allow NULL to be passed here (for now)
|
|
; or eax, eax
|
|
; jz Null_OK
|
|
; MAP_NULL_HINST eax
|
|
;Null_OK:
|
|
; push ax
|
|
;
|
|
;endm ;PUSH__PHONEINITIALIZE_hInstance
|
|
;
|
|
;
|
|
;;-----------------------------------------------------------------------;
|
|
;; PUSH__LINEINITIALIZE_lpfnCallback (similar to PUSH_SetAbortProc_pfnAbort)
|
|
;;-----------------------------------------------------------------------;
|
|
;PUSH__LINEINITIALIZE_lpfnCallback macro iOffset, iTempOffset
|
|
;; assume ds:DATA16
|
|
;
|
|
; mov ax, seg addrCBLineInit
|
|
; mov ds, ax
|
|
;
|
|
; mov eax, dword ptr [bp+iOffset]
|
|
; mov addrCBLineInit, eax
|
|
; push eax
|
|
; mov eax, cbcidTapi
|
|
; shl eax, 16
|
|
; add eax, ID_LINEINITIALIZE
|
|
; push eax
|
|
; call AllocCallback
|
|
; push dx
|
|
; push ax
|
|
;endm
|
|
;
|
|
;
|
|
;-----------------------------------------------------------------------;
|
|
; PUSH__PHONEINITIALIZE_lpfnCallback
|
|
;-----------------------------------------------------------------------;
|
|
;PUSH__PHONEINITIALIZE_lpfnCallback macro iOffset, iTempOffset
|
|
; assume ds:DATA16
|
|
; mov ax, seg addrCBPhoneInit
|
|
; mov ds, ax
|
|
;
|
|
; mov eax, dword ptr [bp+iOffset]
|
|
; mov addrCBPhoneInit, eax
|
|
; push eax
|
|
; mov eax, cbcidTapi
|
|
; shl eax, 16
|
|
; add eax, ID_PHONEINITIALIZE
|
|
; push eax
|
|
; call AllocCallback
|
|
; push dx
|
|
; push ax
|
|
;endm
|
|
|
|
|
|
;==============================================================================
|
|
; local macro, free resources allocated for a call-back function
|
|
; check if it is a NULL pointer before calling FreeCallBack.
|
|
; eax contains the 32-bit address of the mapped call-back function
|
|
; ecx contains the callback ID ((cbcidTapi << 16) + ID[PHONE/LINE]INITIALIZE)
|
|
;==============================================================================
|
|
;FREE_CALLBACK_TAPI macro
|
|
; local done
|
|
;
|
|
; or eax,eax
|
|
; jz done ;don't process NULL pointers
|
|
;
|
|
; push bx ;save BX
|
|
; push es ;save ES
|
|
;
|
|
; push eax ;32-bit callback address
|
|
; push ecx
|
|
; call FreeCallback
|
|
;
|
|
; pop es ;restore ES
|
|
; pop bx ;restore BX
|
|
;done:
|
|
;endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINESHUTDOWN
|
|
; Use FREE_CALLBACK instead of directly calling FreeCallback so that we
|
|
; check for NULL pointers.
|
|
;-----------------------------------------------------------------------;
|
|
body_LINESHUTDOWN16 macro
|
|
bp_hLineApp equ <bp_top>
|
|
; assume ds:DATA16
|
|
mov ax, seg addrCBLineInit
|
|
mov ds, ax
|
|
|
|
mov eax, dword ptr bp_hLineApp
|
|
push eax
|
|
ifdef DEBUG
|
|
int 3
|
|
endif
|
|
call lineShutdown
|
|
|
|
; return code long --> long
|
|
rol eax,16
|
|
xchg ax,dx
|
|
rol eax,16
|
|
|
|
; push eax ;; Save
|
|
; push ecx ;; Save
|
|
;
|
|
; mov eax, addrCBLineInit
|
|
;
|
|
; mov ecx, cbcidTapi
|
|
; shl ecx, 16
|
|
; add ecx, ID_LINEINITIALIZE
|
|
;
|
|
; FREE_CALLBACK_TAPI
|
|
;
|
|
; pop ecx
|
|
; pop eax
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_PHONESHUTDOWN
|
|
;-----------------------------------------------------------------------;
|
|
body_PHONESHUTDOWN16 macro
|
|
bp_hLineApp equ <bp_top>
|
|
; assume ds:DATA16
|
|
mov ax, seg addrCBPhoneInit
|
|
mov ds, ax
|
|
|
|
mov eax, dword ptr bp_hLineApp
|
|
push eax
|
|
call phoneShutdown
|
|
|
|
; return code long --> long
|
|
rol eax,16
|
|
xchg ax,dx
|
|
rol eax,16
|
|
|
|
; push eax ;; Save it
|
|
; push ecx ;; Save it
|
|
;
|
|
; mov eax, addrCBPhoneInit
|
|
;
|
|
; mov ecx, cbcidTapi
|
|
; shl ecx, 16
|
|
; add ecx, ID_PHONEINITIALIZE
|
|
;
|
|
; FREE_CALLBACK_TAPI
|
|
;
|
|
; pop ecx
|
|
; pop eax
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINEFORWARD
|
|
;-----------------------------------------------------------------------;
|
|
body_LINEFORWARD macro
|
|
|
|
bp_hLine equ <bp_top>
|
|
bp_bAllAddresses equ <bp_top+4>
|
|
bp_dwAddressID equ <bp_top+8>
|
|
bp_lpForwardList equ <bp_top+12>
|
|
bp_dwNumRingsNoAnswer equ <bp_top+16>
|
|
bp_lphConsultCall equ <bp_top+20>
|
|
bp_lpCallParams equ <bp_top+24>
|
|
;
|
|
; dword ptr [ebp+8]: hLine
|
|
; dword ptr [ebp+12]: bAllAddresses
|
|
; dword ptr [ebp+16]: dwAddressID
|
|
; dword ptr [ebp+20]: lpForwardList
|
|
; dword ptr [ebp+24]: dwNumRingsNoAnswer
|
|
; dword ptr [ebp+28]: lphConsultCall
|
|
; dword ptr [ebp+32]: lpCallParams
|
|
;
|
|
|
|
bp_lpForwardListTmp equ <dword ptr [bp-4]>
|
|
bp_lphConsultCallTmp equ <dword ptr [bp-8]>
|
|
bp_lpCallParamsTmp equ <dword ptr [bp-12]>
|
|
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lpForwardListTmp
|
|
push eax ;bp_lphConsultCallTmp
|
|
push eax ;bp_lpCallParams
|
|
|
|
push dword ptr bp_hLine ;hLine: dword->dword
|
|
push dword ptr bp_bAllAddresses ;bAllAddresses: dword->dword
|
|
push dword ptr bp_dwAddressID ;dwAddressID: dword->dword
|
|
push dword ptr bp_lpForwardList
|
|
call MapLS
|
|
mov bp_lpForwardListTmp, eax
|
|
push eax
|
|
push dword ptr bp_dwNumRingsNoAnswer ;dwNumRingsNoAnswer: dword->dword
|
|
push dword ptr bp_lphConsultCall
|
|
call MapLS
|
|
mov bp_lphConsultCallTmp, eax
|
|
push eax
|
|
push dword ptr bp_lpCallParams
|
|
call MapLS
|
|
mov bp_lpCallParamsTmp, eax
|
|
push eax
|
|
|
|
call lineForward
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
push eax
|
|
push dword ptr bp_lpForwardListTmp
|
|
call UnMapLS
|
|
;
|
|
; Don't UnMap lphConsultCallTmp: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lphConsultCallTmp
|
|
; call UnMapLS
|
|
push dword ptr bp_lpCallParamsTmp
|
|
call UnMapLS
|
|
pop eax
|
|
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINEMAKECALL
|
|
;-----------------------------------------------------------------------;
|
|
body_LINEMAKECALL macro
|
|
|
|
bp_hLine equ <bp_top>
|
|
bp_lphCall equ <bp_top+4>
|
|
bp_lpszDestAddress equ <bp_top+8>
|
|
bp_dwCountryCode equ <bp_top+12>
|
|
bp_lpCallParams equ <bp_top+16>
|
|
;
|
|
; dword ptr [ebp+8]: hLine
|
|
; dword ptr [ebp+12]: lphCall
|
|
; dword ptr [ebp+16]: lpszDestAddress
|
|
; dword ptr [ebp+20]: dwCountryCode
|
|
; dword ptr [ebp+24]: lpCallParams
|
|
;
|
|
|
|
bp_lphCallTmp equ <dword ptr [bp-4]>
|
|
bp_lpszDestAddressTmp equ <dword ptr [bp-8]>
|
|
bp_lpCallParamsTmp equ <dword ptr [bp-12]>
|
|
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lphCallTmp
|
|
push eax ;bp_lpszDestAddress
|
|
push eax ;bp_lpCallParams
|
|
|
|
push dword ptr bp_hLine ;hLine: dword->dword
|
|
push dword ptr bp_lphCall
|
|
call MapLS
|
|
mov bp_lphCallTmp, eax
|
|
push eax
|
|
push dword ptr bp_lpszDestAddress
|
|
call MapLS
|
|
mov bp_lpszDestAddressTmp, eax
|
|
push eax
|
|
push dword ptr bp_dwCountryCode ;dwCountryCode: dword->dword
|
|
push dword ptr bp_lpCallParams
|
|
call MapLS
|
|
mov bp_lpCallParamsTmp, eax
|
|
push eax
|
|
|
|
call lineMakeCall
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
push eax
|
|
;
|
|
; Don't UnMap lphCallTmp: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lphCallTmp
|
|
; call UnMapLS
|
|
push dword ptr bp_lpszDestAddressTmp
|
|
call UnMapLS
|
|
push dword ptr bp_lpCallParamsTmp
|
|
call UnMapLS
|
|
pop eax
|
|
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINEUNPARK
|
|
;-----------------------------------------------------------------------;
|
|
body_LINEUNPARK macro
|
|
|
|
bp_hLine equ <bp_top>
|
|
bp_dwAddressID equ <bp_top+4>
|
|
bp_lphCall equ <bp_top+8>
|
|
bp_lpszDestAddress equ <bp_top+12>
|
|
;
|
|
; dword ptr [ebp+8]: hLine
|
|
; dword ptr [ebp+12]: dwAddressID
|
|
; dword ptr [ebp+16]: lphCall
|
|
; dword ptr [ebp+20]: lpszDestAddress
|
|
;
|
|
|
|
bp_lphCallTmp equ <dword ptr [bp-4]>
|
|
bp_lpszDestAddressTmp equ <dword ptr [bp-8]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lphCallTmp
|
|
push eax ;bp_lpszDestAddress
|
|
|
|
push dword ptr bp_hLine ;hLine: dword->dword
|
|
push dword ptr bp_dwCountryCode ;dwCountryCode: dword->dword
|
|
push dword ptr bp_lphCall
|
|
call MapLS
|
|
mov bp_lphCallTmp, eax
|
|
push eax
|
|
push dword ptr bp_lpszDestAddress
|
|
call MapLS
|
|
mov bp_lpszDestAddressTmp, eax
|
|
push eax
|
|
|
|
call lineUnpark
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
push eax
|
|
;
|
|
; Don't UnMap lphCallTmp: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lphCallTmp
|
|
; call UnMapLS
|
|
push dword ptr bp_lpszDestAddressTmp
|
|
call UnMapLS
|
|
pop eax
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINEPICKUP
|
|
;-----------------------------------------------------------------------;
|
|
body_LINEPICKUP macro
|
|
|
|
bp_hLine equ <bp_top>
|
|
bp_dwAddressID equ <bp_top+4>
|
|
bp_lphCall equ <bp_top+8>
|
|
bp_lpszDestAddress equ <bp_top+12>
|
|
bp_lpszGroupID equ <bp_top+16>
|
|
;
|
|
; dword ptr [ebp+8]: hLine
|
|
; dword ptr [ebp+12]: dwAddressID
|
|
; dword ptr [ebp+16]: lphCall
|
|
; dword ptr [ebp+20]: lpszDestAddress
|
|
; dword ptr [ebp+24]: lpszGroupID
|
|
;
|
|
|
|
bp_lphCallTmp equ <dword ptr [bp-4]>
|
|
bp_lpszDestAddressTmp equ <dword ptr [bp-8]>
|
|
bp_lpszGroupIDTmp equ <dword ptr [bp-12]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lphCallTmp
|
|
push eax ;bp_lpszDestAddressTmp
|
|
push eax ;bp_lpszGroupIDTmp
|
|
|
|
push dword ptr bp_hLine ;hLine: dword->dword
|
|
push dword ptr bp_dwAddressID ;dwAddressID: dword->dword
|
|
push dword ptr bp_lphCall
|
|
call MapLS
|
|
mov bp_lphCallTmp, eax
|
|
push eax
|
|
push dword ptr bp_lpszDestAddress
|
|
call MapLS
|
|
mov bp_lpszDestAddressTmp, eax
|
|
push eax
|
|
push dword ptr bp_lpszGroupID
|
|
call MapLS
|
|
mov bp_lpszGroupIDTmp, eax
|
|
push eax
|
|
|
|
call linePickup
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
push eax
|
|
;
|
|
; Don't UnMap lphCallTmp: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lphCallTmp
|
|
; call UnMapLS
|
|
push dword ptr bp_lpszDestAddressTmp
|
|
call UnMapLS
|
|
push dword ptr bp_lpszGroupIDTmp
|
|
call UnMapLS
|
|
pop eax
|
|
endm
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINESETUPCONFERENCE
|
|
;-----------------------------------------------------------------------;
|
|
body_LINESETUPCONFERENCE macro
|
|
|
|
bp_hCall equ <bp_top>
|
|
bp_hLine equ <bp_top+4>
|
|
bp_lphConfCall equ <bp_top+8>
|
|
bp_lphConsultCall equ <bp_top+12>
|
|
bp_dwNumParties equ <bp_top+16>
|
|
bp_lpCallParams equ <bp_top+20>
|
|
;
|
|
; dword ptr [ebp+8]: hCall
|
|
; dword ptr [ebp+12]: hLine
|
|
; dword ptr [ebp+16]: lphConfCall
|
|
; dword ptr [ebp+20]: lphConsultCall
|
|
; dword ptr [ebp+24]: dwNumParties
|
|
; dword ptr [ebp+28]: lpCallParams
|
|
;
|
|
|
|
bp_lphConfCallTmp equ <dword ptr [bp-4]>
|
|
bp_lphConsultCallTmp equ <dword ptr [bp-8]>
|
|
bp_lpCallParamsTmp equ <dword ptr [bp-12]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lphConfCallTmp
|
|
push eax ;bp_lphConsultCallTmp
|
|
push eax ;bp_lpCallParamsTmp
|
|
|
|
push dword ptr bp_hCall ;hCall: dword->dword
|
|
push dword ptr bp_hLine ;hLine: dword->dword
|
|
push dword ptr bp_lphConfCall
|
|
call MapLS
|
|
mov bp_lphConfCallTmp, eax
|
|
push eax
|
|
push dword ptr bp_lphConsultCall
|
|
call MapLS
|
|
mov bp_lphConsultCallTmp, eax
|
|
push eax
|
|
push dword ptr bp_dwNumParties ;dwNumParties: dword->dword
|
|
push dword ptr bp_lpCallParams
|
|
call MapLS
|
|
mov bp_lpCallParamsTmp, eax
|
|
push eax
|
|
|
|
call lineSetupConference
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
push eax
|
|
;
|
|
; Don't UnMap lphConfCallTmp and lphConsultCallTmp: Done in tapi.dll
|
|
; due to async read/write.
|
|
;
|
|
; push dword ptr bp_lphConfCallTmp
|
|
; call UnMapLS
|
|
; push dword ptr bp_lphConsultCallTmp
|
|
; call UnMapLS
|
|
push dword ptr bp_lpCallParamsTmp
|
|
call UnMapLS
|
|
pop eax
|
|
endm
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINECOMPLETETRANSFER
|
|
;-----------------------------------------------------------------------;
|
|
body_LINECOMPLETETRANSFER macro
|
|
|
|
bp_hCall equ <bp_top>
|
|
bp_hConsultCall equ <bp_top+4>
|
|
bp_lphConfCall equ <bp_top+8>
|
|
bp_dwTransferMode equ <bp_top+12>
|
|
;
|
|
; dword ptr [ebp+8]: hCall
|
|
; dword ptr [ebp+12]: hConsultCall
|
|
; dword ptr [ebp+16]: lphConfCall
|
|
; dword ptr [ebp+20]: dwTransferMode
|
|
;
|
|
|
|
bp_lphConfCallTmp equ <dword ptr [bp-4]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lphConfCallTmp
|
|
push dword ptr bp_hCall ;hCall: dword->dword
|
|
push dword ptr bp_hConsultCall ;hConsultCall: dword->dword
|
|
push dword ptr bp_lphConfCall
|
|
call MapLS
|
|
mov bp_lphConfCallTmp, eax
|
|
push eax
|
|
push dword ptr bp_dwTransferMode ;dwTransferMode: dword->dword
|
|
|
|
call lineCompleteTransfer
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
; push eax
|
|
;
|
|
; Don't UnMap lphConfCallTmp: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lphConfCallTmp
|
|
; call UnMapLS
|
|
; pop eax
|
|
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINEPREPAREADDTOCONFERENCE
|
|
;-----------------------------------------------------------------------;
|
|
body_LINEPREPAREADDTOCONFERENCE macro
|
|
|
|
bp_hConfCall equ <bp_top>
|
|
bp_lphAddCall equ <bp_top+4>
|
|
bp_lpCallParams equ <bp_top+8>
|
|
;
|
|
; dword ptr [ebp+8]: hConfCall
|
|
; dword ptr [ebp+12]: lphAddCall
|
|
; dword ptr [ebp+16]: lpCallParams
|
|
;
|
|
|
|
bp_lphAddCallTmp equ <dword ptr [bp-4]>
|
|
bp_lpCallParamsTmp equ <dword ptr [bp-8]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lphAddCallTmp
|
|
push eax ;bp_lpCallParams
|
|
|
|
push dword ptr bp_hConfCall ;hConfCall: dword->dword
|
|
push dword ptr bp_lphAddCall
|
|
call MapLS
|
|
mov bp_lphAddCallTmp, eax
|
|
push eax
|
|
push dword ptr bp_lpCallParams
|
|
call MapLS
|
|
mov bp_lpCallParamsTmp, eax
|
|
push eax
|
|
|
|
call linePrepareAddToConference
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
push eax ; Save it
|
|
|
|
;
|
|
; Don't UnMap lphAddCallTmp: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lphAddCallTmp
|
|
; call UnMapLS
|
|
push dword ptr bp_lpCallParamsTmp
|
|
call UnMapLS
|
|
pop eax
|
|
|
|
endm
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINESETUPTRANSFER
|
|
;-----------------------------------------------------------------------;
|
|
body_LINESETUPTRANSFER macro
|
|
|
|
bp_hCall equ <bp_top>
|
|
bp_lphConsultCall equ <bp_top+4>
|
|
bp_lpCallParams equ <bp_top+8>
|
|
;
|
|
; dword ptr [ebp+8]: hCall
|
|
; dword ptr [ebp+12]: lphConsultCall
|
|
; dword ptr [ebp+16]: lpCallParams
|
|
;
|
|
|
|
bp_lphConsultCallTmp equ <dword ptr [bp-4]>
|
|
bp_lpCallParamsTmp equ <dword ptr [bp-8]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lphConsultCallTmp
|
|
push eax ;bp_lpCallParams
|
|
|
|
push dword ptr bp_hCall ;hCall: dword->dword
|
|
push dword ptr bp_lphConsultCall
|
|
call MapLS
|
|
mov bp_lphConsultCallTmp, eax
|
|
push eax
|
|
push dword ptr bp_lpCallParams
|
|
call MapLS
|
|
mov bp_lpCallParamsTmp, eax
|
|
push eax
|
|
|
|
call lineSetupTransfer
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
push eax ; Save it
|
|
|
|
;
|
|
; Don't UnMap lphConsultCallTmp: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lphConsultCallTmp
|
|
; call UnMapLS
|
|
push dword ptr bp_lpCallParamsTmp
|
|
call UnMapLS
|
|
pop eax
|
|
|
|
endm
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINECOMPLETECALL
|
|
;-----------------------------------------------------------------------;
|
|
body_LINECOMPLETECALL macro
|
|
|
|
bp_hCall equ <bp_top>
|
|
bp_lpdwCompletionID equ <bp_top+4>
|
|
bp_dwCompletionMode equ <bp_top+8>
|
|
bp_dwMessageID equ <bp_top+12>
|
|
;
|
|
; dword ptr [ebp+8]: hCall
|
|
; dword ptr [ebp+12]: lpdwCompletionID
|
|
; dword ptr [ebp+16]: dwCompletionMode
|
|
; dword ptr [ebp+20]: dwMessageID
|
|
;
|
|
|
|
bp_lpdwCompletionIDTmp equ <dword ptr [bp-4]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lpdwCompletionID
|
|
|
|
push dword ptr bp_hCall ;hCall: dword->dword
|
|
push dword ptr bp_lpdwCompletionID
|
|
call MapLS
|
|
mov bp_lpdwCompletionIDTmp, eax
|
|
push eax
|
|
push dword ptr bp_dwCompletionMode
|
|
push dword ptr bp_dwMessageID
|
|
|
|
call lineCompleteCall
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
; push eax
|
|
;
|
|
; Don't UnMap lpdwCompletionIDTmp: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lpdwCompletionIDTmp
|
|
; call UnMapLS
|
|
; pop eax
|
|
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINEDEVSPECIFIC
|
|
;-----------------------------------------------------------------------;
|
|
body_LINEDEVSPECIFIC macro
|
|
|
|
bp_hLine equ <bp_top>
|
|
bp_dwAddressID equ <bp_top+4>
|
|
bp_hCall equ <bp_top+8>
|
|
bp_lpParams equ <bp_top+12>
|
|
bp_dwSize equ <bp_top+16>
|
|
;
|
|
; dword ptr [ebp+8]: hLine
|
|
; dword ptr [ebp+12]: dwAddressID
|
|
; dword ptr [ebp+16]: hCall
|
|
; dword ptr [ebp+20]: lpParams
|
|
; dword ptr [ebp+24]: dwSize
|
|
;
|
|
|
|
bp_lpParamsTmp equ <dword ptr [bp-4]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lpParams
|
|
|
|
push dword ptr bp_hLine ;hLine: dword->dword
|
|
push dword ptr bp_dwAddressID ;dwAddressID: dword->dword
|
|
push dword ptr bp_hCall ;hCall: dword->dword
|
|
push dword ptr bp_lpParams
|
|
call MapLS
|
|
mov bp_lpParamsTmp, eax
|
|
push eax
|
|
push dword ptr bp_dwSize ;dwSize: dword->dword
|
|
|
|
call lineDevSpecific
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
; push eax
|
|
;
|
|
; Don't UnMap lpParams: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lpParamsTmp
|
|
; call UnMapLS
|
|
; pop eax
|
|
|
|
endm
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_PHONEDEVSPECIFIC
|
|
;-----------------------------------------------------------------------;
|
|
body_PHONEDEVSPECIFIC macro
|
|
|
|
bp_hPhone equ <bp_top>
|
|
bp_lpParams equ <bp_top+4>
|
|
bp_dwSize equ <bp_top+8>
|
|
;
|
|
; dword ptr [ebp+8]: hPhone
|
|
; dword ptr [ebp+12]: lpParams
|
|
; dword ptr [ebp+16]: dwSize
|
|
;
|
|
|
|
;bp_lpParamsTmp equ <dword ptr [bp-4]>
|
|
;
|
|
sub eax, eax
|
|
push eax ;bp_lpParams
|
|
|
|
push dword ptr bp_hPhone ;hPhone: dword->dword
|
|
push dword ptr bp_lpParams
|
|
call MapLS
|
|
mov bp_lpParamsTmp, eax
|
|
push eax
|
|
push dword ptr bp_dwSize ;dwSize: dword->dword
|
|
|
|
call phoneDevSpecific
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
; push eax
|
|
;
|
|
; Don't UnMap lpParams: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lpParamsTmp
|
|
; call UnMapLS
|
|
; pop eax
|
|
|
|
endm
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINEDEVSPECIFICFEATURE
|
|
;-----------------------------------------------------------------------;
|
|
body_LINEDEVSPECIFICFEATURE macro
|
|
|
|
bp_hLine equ <bp_top>
|
|
bp_dwFeature equ <bp_top+4>
|
|
bp_lpParams equ <bp_top+8>
|
|
bp_dwSize equ <bp_top+12>
|
|
;
|
|
; dword ptr [ebp+8]: hLine
|
|
; dword ptr [ebp+12]: dwFeature
|
|
; dword ptr [ebp+16]: lpParams
|
|
; dword ptr [ebp+20]: dwSize
|
|
;
|
|
|
|
bp_lpParamsTmp equ <dword ptr [bp-4]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lpParams
|
|
|
|
push dword ptr bp_hLine ;hLine: dword->dword
|
|
push dword ptr bp_dwFeature ;dwFeature: dword->dword
|
|
push dword ptr bp_lpParams
|
|
call MapLS
|
|
mov bp_lpParamsTmp, eax
|
|
push eax
|
|
push dword ptr bp_dwSize ;dwSize: dword->dword
|
|
|
|
call lineDevSpecificFeature
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
; push eax
|
|
;
|
|
; Don't UnMap lpParams: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lpParamsTmp
|
|
; call UnMapLS
|
|
; pop eax
|
|
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINEGATHERDIGITS
|
|
;-----------------------------------------------------------------------;
|
|
body_LINEGATHERDIGITS macro
|
|
|
|
bp_hCall equ <bp_top>
|
|
bp_dwDigitModes equ <bp_top+4>
|
|
bp_lpsDigits equ <bp_top+8>
|
|
bp_dwNumDigits equ <bp_top+12>
|
|
bp_lpszTermDigits equ <bp_top+16>
|
|
bp_dwFirstDigitTimeout equ <bp_top+20>
|
|
bp_dwInterDigitTimeout equ <bp_top+24>
|
|
;
|
|
; dword ptr [ebp+8]: hCall
|
|
; dword ptr [ebp+12]: dwDigitModes
|
|
; dword ptr [ebp+16]: lpsDigits
|
|
; dword ptr [ebp+20]: dwNumDigits
|
|
; dword ptr [ebp+24]: lpszTerminationDigits
|
|
; dword ptr [ebp+28]: dwFirstDigitTimeout
|
|
; dword ptr [ebp+32]: dwInterDigitTimeout
|
|
;
|
|
|
|
bp_lpsDigitsTmp equ <dword ptr [bp-4]>
|
|
bp_lpszTermDigitsTmp equ <dword ptr [bp-8]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lpsDigitsTmp
|
|
push eax ;bp_lpszTerminationDigitsTmp
|
|
|
|
push dword ptr bp_hCall ;hCall: dword->dword
|
|
push dword ptr bp_dwDigitModes ;dwDigitModes: dword->dword
|
|
push dword ptr bp_lpsDigits
|
|
call MapLS
|
|
mov bp_lpsDigitsTmp, eax
|
|
push eax
|
|
push dword ptr bp_dwNumDigits ;dwNumDigits: dword->dword
|
|
push dword ptr bp_lpszTermDigits
|
|
call MapLS
|
|
mov bp_lpszTermDigitsTmp, eax
|
|
push eax
|
|
push dword ptr bp_dwFirstDigitTimeout ;dwFirstDigitTimeout: dword->dword
|
|
push dword ptr bp_dwInterDigitTimeout ;dwInterDigitTimeout: dword->dword
|
|
|
|
call lineGatherDigits
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
push eax ; Save it
|
|
|
|
;
|
|
; Don't UnMap lpsDigits: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lpsDigitsTmp
|
|
; call UnMapLS
|
|
push dword ptr bp_lpszTermDigitsTmp
|
|
call UnMapLS
|
|
|
|
pop eax
|
|
endm
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINEPARK
|
|
;-----------------------------------------------------------------------;
|
|
body_LINEPARK macro
|
|
|
|
bp_hLine equ <bp_top>
|
|
bp_dwParkMode equ <bp_top+4>
|
|
bp_lpszDirAddress equ <bp_top+8>
|
|
bp_lpNonDirAddress equ <bp_top+12>
|
|
;
|
|
; dword ptr [ebp+8]: hLine
|
|
; dword ptr [ebp+12]: dwParkMode
|
|
; dword ptr [ebp+16]: lpszDirAddress
|
|
; dword ptr [ebp+20]: lpNonDirAddress
|
|
;
|
|
|
|
bp_lpszDirAddressTmp equ <dword ptr [bp-4]>
|
|
bp_lpNonDirAddressTmp equ <dword ptr [bp-8]>
|
|
|
|
sub eax, eax
|
|
push eax ;bp_lpszDirAddressTmp
|
|
push eax ;bp_lpNonDirAddressTmp
|
|
|
|
push dword ptr bp_hLine ;hLine: dword->dword
|
|
push dword ptr bp_dwParkMode ;dwParkMode: dworkd->dword
|
|
push dword ptr bp_lpszDirAddress
|
|
call MapLS
|
|
mov bp_lpszDirAddressTmp, eax
|
|
push eax
|
|
push dword ptr bp_lpNonDirAddress
|
|
call MapLS
|
|
mov bp_lpNonDirAddressTmp, eax
|
|
push eax
|
|
|
|
call linePark
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
push eax ; Save it
|
|
|
|
push dword ptr bp_lpszDirAddressTmp
|
|
call UnMapLS
|
|
;
|
|
; Don't UnMap lpNonDirAddressTmp: Done in tapi.dll due to async read/write.
|
|
;
|
|
; push dword ptr bp_lpNonDirAddressTmp
|
|
; call UnMapLS
|
|
|
|
pop eax
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_TAPIREQUESTMEDIACALL
|
|
;-----------------------------------------------------------------------;
|
|
body_TAPIREQUESTMEDIACALL macro
|
|
mov eax, -16
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_TAPIREQUESTDROP
|
|
;-----------------------------------------------------------------------;
|
|
body_TAPIREQUESTDROP macro
|
|
mov eax, -16
|
|
endm
|
|
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; body_LINEREGISTERREQUESTRECIPIENT
|
|
;-----------------------------------------------------------------------;
|
|
body_LINEREGISTERREQUESTRECIPIENT macro
|
|
|
|
bp_hLine equ <bp_top>
|
|
bp_dwRegistrationInstance equ <bp_top+4>
|
|
bp_dwRequestMode equ <bp_top+8>
|
|
bp_dwEnable equ <bp_top+12>
|
|
;
|
|
; dword ptr [ebp+8]: hLine
|
|
; dword ptr [ebp+12]: dwRegistrationInstance
|
|
; dword ptr [ebp+16]: dwRequestMode
|
|
; dword ptr [ebp+20]: bEnable
|
|
;
|
|
|
|
;
|
|
; sub eax, eax
|
|
; push eax ;bp_lpszDirAddressTmp
|
|
; push eax ;bp_lpNonDirAddressTmp
|
|
;
|
|
|
|
;
|
|
; If this is a 32bit app asking to register for media calls, tell 'em
|
|
; 'e's nuts.
|
|
;
|
|
test dword ptr bp_dwRequestMode, 2 ;*** *** ***Or should this be 6?
|
|
jz @f
|
|
|
|
ifdef DEBUG
|
|
DPRINT "32bit apps aren't allowed to register for Media calls"
|
|
endif
|
|
mov eax, 80000038h
|
|
jmp Done_LRRR
|
|
|
|
@@:
|
|
push dword ptr bp_hLine ;hLine: dword->dword
|
|
push dword ptr bp_dwRegistrationInstance
|
|
push dword ptr bp_dwRequestMode
|
|
push dword ptr bp_dwEnable
|
|
|
|
call lineRegisterRequestRecipient
|
|
|
|
shl eax,16
|
|
shrd eax,edx,16
|
|
|
|
Done_LRRR:
|
|
|
|
endm
|
|
|