AppleScript-0.1: Foreign/AppleScript.hs
-- | A module that enables you to compile and execute AppleScript.
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
-- | The 'appleScriptAvailable' function checks whether or not AppleScript is
-- available on your platform.
foreign import ccall "RunScript.h AppleScriptAvailable" appleScriptAvailable :: IO Bool
-- | The 'execAppleScript' function will attempt to compile and
-- execute the AppleScript, described in the @String@ it receives as
-- its argument. Any result of running the script is discarded. The
-- @ExitCode@ indicates whether or not any errors were encountered
-- during compilation or execution.
execAppleScript :: String -> IO ExitCode
execAppleScript script = do
let run (cstr,len) = cLowRunAppleScript cstr (fromIntegral len) nullPtr
osstatus <- withCStringLen script run
return (fromOSStatus osstatus)
-- Not the world's finest functions...
noErr :: Int32
noErr = 0
fromOSStatus :: Int32 -> ExitCode
fromOSStatus n
| n == noErr = ExitSuccess
| otherwise = ExitFailure (fromIntegral n)