; SAPI 5.1
; GUIDS ---------------------------------------------------------------------------
.data
CLSID_SpVoice GUID {096749377h,03391h,011D2h,<09Eh,0E3h,000h,0C0h,04Fh,079h,073h,096h>}
IID_ISpVoice GUID {06C44DF74h,072B9h,04992h,<0A1h,0ECh,0EFh,099h,06Eh,004h,022h,0D4h>}
.const
TEXT_ MACRO your_text:VARARG
LOCAL text_string
.data
text_string db your_text,0
.code
EXITM <addr text_string>
ENDM
;Com
CoMethod1Proto typedef proto :DWORD
CoMethod2Proto typedef proto :DWORD, :DWORD
CoMethod3Proto typedef proto :DWORD, :DWORD, :DWORD
CoMethod4Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD
CoMethod5Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
CoMethod6Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
CoMethod7Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
CoMethod8Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
CoMethod9Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
CoMethod10Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
CoMethod11Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
CoMethod12Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
CoMethod13Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
CoMethod14Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
CoMethod15Proto typedef proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
CoMethod1 typedef ptr CoMethod1Proto
CoMethod2 typedef ptr CoMethod2Proto
CoMethod3 typedef ptr CoMethod3Proto
CoMethod4 typedef ptr CoMethod4Proto
CoMethod5 typedef ptr CoMethod5Proto
CoMethod6 typedef ptr CoMethod6Proto
CoMethod7 typedef ptr CoMethod7Proto
CoMethod8 typedef ptr CoMethod8Proto
CoMethod9 typedef ptr CoMethod9Proto
CoMethod10 typedef ptr CoMethod10Proto
CoMethod11 typedef ptr CoMethod11Proto
CoMethod12 typedef ptr CoMethod12Proto
CoMethod13 typedef ptr CoMethod13Proto
CoMethod14 typedef ptr CoMethod14Proto
CoMethod15 typedef ptr CoMethod15Proto
_vtIUnknown MACRO Name:REQ
&Name&_QueryInterface CoMethod3 ?
&Name&_AddRef CoMethod1 ?
&Name&_Release CoMethod1 ?
ENDM
IUnknown struct
_vtIUnknown IUnknown
IUnknown ends
coinvoke MACRO pInterface:REQ, Interface:REQ, Function:REQ, args:VARARG
LOCAL istatement, arg
FOR arg, <args> ;; run thru args to see if edx is lurking in there
IFIDNI <&arg>, <edx>
.ERR <edx is not allowed as a coinvoke parameter>
ENDIF
ENDM
istatement CATSTR <invoke (Interface PTR[edx]).&Interface>,<_>,<&Function, pInterface>
IFNB <args> ;; add the list of parameter arguments if any
istatement CATSTR istatement, <, >, <&args>
ENDIF
mov edx, pInterface
mov edx, [edx]
istatement
ENDM
RELEASE_INTERFACE MACRO Interface:REQ
.if &Interface != 0
coinvoke Interface,IUnknown,Release
mov Interface,0
.endif
ENDM
; INTERFACES ---------------------------------------------------------------------------
_vtISpVoice MACRO Name:REQ
;; IUnknown Methods
_vtIUnknown Name
;; ISpVoice Methods
&Name&_SetNotifySink CoMethod1 ?
&Name&_SetNotifyWindowMessage CoMethod5 ?
&Name&_SetNotifyCallbackFunction CoMethod4 ?
&Name&_SetNotifyCallbackInterface CoMethod4 ?
&Name&_SetNotifyWin32Event CoMethod1 ?
&Name&_WaitForNotifyEvent CoMethod2 ?
&Name&_GetNotifyEventHandl CoMethod1 ?
&Name&_SetInterest CoMethod3 ?
&Name&_GetEvents CoMethod4 ?
&Name&_GetInfo CoMethod2 ?
&Name&_SetOutput CoMethod3 ?
&Name&_GetOutputObjectToken CoMethod2 ?
&Name&_GetOutputStream CoMethod2 ?
&Name&_Pause CoMethod1 ?
&Name&_Resume CoMethod1 ?
&Name&_SetVoice CoMethod2 ?
&Name&_GetVoice CoMethod2 ?
&Name&_Speak CoMethod4 ?
&Name&_SpeakStream CoMethod4 ?
&Name&_GetStatus CoMethod3 ?
&Name&_Skip CoMethod4 ?
&Name&_SetPriority CoMethod2 ?
&Name&_GetPriority CoMethod2 ?
&Name&_SetAlertBoundary CoMethod2 ?
&Name&_GetAlertBoundary CoMethod2 ?
&Name&_SetRate CoMethod2 ?
&Name&_GetRate CoMethod2 ?
&Name&_SetVolume CoMethod2 ?
&Name&_GetVolume CoMethod2 ?
&Name&_WaitUntilDone CoMethod2 ?
&Name&_SetSyncSpeakTimeout CoMethod2 ?
&Name&_GetSyncSpeakTimeout CoMethod2 ?
&Name&_SpeakCompleteEvent CoMethod1 ?
&Name&_IsUISupported CoMethod5 ?
&Name&_DisplayUI CoMethod6 ?
ENDM
ISpVoice struct dword
_vtISpVoice ISpVoice
ISpVoice ends
SpVoice TYPEDEF PTR ISpVoice
SPF_DEFAULT equ 0
SPF_ASYNC equ 1
SPF_PURGEBEFORESPEAK equ 2
SPF_IS_FILENAME equ 4
SPF_IS_XML equ 8
SPF_IS_NOT_XML equ 16
SPF_PERSIST_XML equ 32
SPF_NLP_SPEAK_PUNC equ 64
SPF_NLP_MASK equ SPF_NLP_SPEAK_PUNC
SPF_VOICE_MASK equ SPF_ASYNC or SPF_PURGEBEFORESPEAK or SPF_IS_FILENAME or SPF_IS_XML or SPF_IS_NOT_XML or SPF_NLP_MASK or SPF_PERSIST_XML
SPF_UNUSED_FLAGS equ NOT SPF_VOICE_MASK
Comments