local ffi = require "ffi" local encoding = require "encoding" ffi.cdef[[ void Tolk_Load(); void Tolk_Output(const char *s, bool interrupt); void Tolk_Silence(); void Tolk_Speak(const char *s, bool interrupt); void Tolk_Braille(const char *s, bool interrupt); void Tolk_TrySAPI(bool try); void Tolk_PreferSAPI(bool prefer); const wchar_t * Tolk_DetectScreenReader(); bool Tolk_HasSpeech(); bool Tolk_HasBraille(); bool Tolk_IsSpeaking();]] local tolk = ffi.load("Tolk") tolk.Tolk_Load() local function output(s, interrupt) interrupt=interrupt or false tolk.Tolk_Output(encoding.to_utf16(s), interrupt) end local function speak(s, interrupt) interrupt=interrupt or false tolk.Tolk_Speak(encoding.to_utf16(s), interrupt) end local function braille(s) tolk.Tolk_Braille(encoding.to_utf16(s)) end local function silence() tolk.Tolk_Silence() end local function trySAPI(try) tolk.Tolk_TrySAPI(try) end local function preferSAPI(prefer) tolk.Tolk_PreferSAPI(prefer) end local function isSpeaking() return tolk.Tolk_IsSpeaking() end local function detectScreenReader() --todo, need to convert the returned value to something Lua likes end local function hasSpeech() return tolk.Tolk_HasSpeech() end local function hasBraille() return tolk.Tolk_HasBraille() end return { output=output, speak=speak, braille=braille, silence=silence, isSpeaking=isSpeaking, trySAPI=trySAPI, preferSAPI=preferSAPI, detectScreenReader=detectScreenReader, hasSpeech=hasSpeech, hasBraille=hasBraille}