module Foreign.AppleScript
(
appleScriptAvailable,
execAppleScript
)
where
import Data.Int
import Foreign.C.String
import System.Exit
import Control.Monad(liftM)
import Foreign
import Foreign.C
type OSStatus = Int32
data AEDesc = AEDesc
foreign import ccall "RunScript.h LowRunAppleScript"
cLowRunAppleScript :: CString -> CLong -> Ptr AEDesc -> IO OSStatus
foreign import ccall "RunScript.h AppleScriptAvailable" appleScriptAvailable :: IO Bool
execAppleScript :: String -> IO ExitCode
execAppleScript script = do
let run (cstr,len) = cLowRunAppleScript cstr (fromIntegral len) nullPtr
osstatus <- withCStringLen script run
return (fromOSStatus osstatus)
noErr :: Int32
noErr = 0
fromOSStatus :: Int32 -> ExitCode
fromOSStatus n
| n == noErr = ExitSuccess
| otherwise = ExitFailure (fromIntegral n)