CodeData equ 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_hInstance equ bp_lpfnCallback equ bp_lpszAppName equ bp_lpdwNumDevs equ ; bp_lpszAppNameTmp equ bp_lpdwNumDevsTmp equ bp_lphLineAppTmp equ ; ; 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_hInstance equ bp_lpfnCallback equ bp_lpszAppName equ bp_lpdwNumDevs equ ; bp_lpszAppNameTmp equ bp_lpdwNumDevsTmp equ bp_lphPhoneAppTmp equ 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 ; 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 ; 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_bAllAddresses equ bp_dwAddressID equ bp_lpForwardList equ bp_dwNumRingsNoAnswer equ bp_lphConsultCall equ bp_lpCallParams equ ; ; 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 bp_lphConsultCallTmp equ bp_lpCallParamsTmp equ 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_lphCall equ bp_lpszDestAddress equ bp_dwCountryCode equ bp_lpCallParams equ ; ; 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 bp_lpszDestAddressTmp equ bp_lpCallParamsTmp equ 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_dwAddressID equ bp_lphCall equ bp_lpszDestAddress equ ; ; dword ptr [ebp+8]: hLine ; dword ptr [ebp+12]: dwAddressID ; dword ptr [ebp+16]: lphCall ; dword ptr [ebp+20]: lpszDestAddress ; bp_lphCallTmp equ bp_lpszDestAddressTmp equ 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_dwAddressID equ bp_lphCall equ bp_lpszDestAddress equ bp_lpszGroupID equ ; ; 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 bp_lpszDestAddressTmp equ bp_lpszGroupIDTmp equ 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_hLine equ bp_lphConfCall equ bp_lphConsultCall equ bp_dwNumParties equ bp_lpCallParams equ ; ; 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 bp_lphConsultCallTmp equ bp_lpCallParamsTmp equ 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_hConsultCall equ bp_lphConfCall equ bp_dwTransferMode equ ; ; dword ptr [ebp+8]: hCall ; dword ptr [ebp+12]: hConsultCall ; dword ptr [ebp+16]: lphConfCall ; dword ptr [ebp+20]: dwTransferMode ; bp_lphConfCallTmp equ 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_lphAddCall equ bp_lpCallParams equ ; ; dword ptr [ebp+8]: hConfCall ; dword ptr [ebp+12]: lphAddCall ; dword ptr [ebp+16]: lpCallParams ; bp_lphAddCallTmp equ bp_lpCallParamsTmp equ 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_lphConsultCall equ bp_lpCallParams equ ; ; dword ptr [ebp+8]: hCall ; dword ptr [ebp+12]: lphConsultCall ; dword ptr [ebp+16]: lpCallParams ; bp_lphConsultCallTmp equ bp_lpCallParamsTmp equ 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_lpdwCompletionID equ bp_dwCompletionMode equ bp_dwMessageID equ ; ; dword ptr [ebp+8]: hCall ; dword ptr [ebp+12]: lpdwCompletionID ; dword ptr [ebp+16]: dwCompletionMode ; dword ptr [ebp+20]: dwMessageID ; bp_lpdwCompletionIDTmp equ 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_dwAddressID equ bp_hCall equ bp_lpParams equ bp_dwSize equ ; ; 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 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_lpParams equ bp_dwSize equ ; ; dword ptr [ebp+8]: hPhone ; dword ptr [ebp+12]: lpParams ; dword ptr [ebp+16]: dwSize ; ;bp_lpParamsTmp equ ; 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_dwFeature equ bp_lpParams equ bp_dwSize equ ; ; dword ptr [ebp+8]: hLine ; dword ptr [ebp+12]: dwFeature ; dword ptr [ebp+16]: lpParams ; dword ptr [ebp+20]: dwSize ; bp_lpParamsTmp equ 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_dwDigitModes equ bp_lpsDigits equ bp_dwNumDigits equ bp_lpszTermDigits equ bp_dwFirstDigitTimeout equ bp_dwInterDigitTimeout equ ; ; 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 bp_lpszTermDigitsTmp equ 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_dwParkMode equ bp_lpszDirAddress equ bp_lpNonDirAddress equ ; ; dword ptr [ebp+8]: hLine ; dword ptr [ebp+12]: dwParkMode ; dword ptr [ebp+16]: lpszDirAddress ; dword ptr [ebp+20]: lpNonDirAddress ; bp_lpszDirAddressTmp equ bp_lpNonDirAddressTmp equ 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_dwRegistrationInstance equ bp_dwRequestMode equ bp_dwEnable equ ; ; 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