Xylitol icon

sapi51.inc

Xylitol | PRO | 02/25/17 06:24:41 PM UTC | 0 ⭐ | 604 👁️ | Never ⏰ | []
ASM (NASM) |

0 B

|

None

|

0 👍

/

0 👎

; 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