module Bindings.Utilities where import Foreign.C import Foreign import Data.Int newtype (Storable a) => GlobalVar a = GlobalVar (Ptr a) setGlobalVar(GlobalVar p) v = poke p v getGlobalVar (GlobalVar p) = peek p class Callback f where makeCallback :: f -> IO (FunPtr f) freeCallback :: FunPtr f -> IO () withCallback :: f -> (FunPtr f -> IO a) -> IO a freeCallback = freeHaskellFunPtr withCallback fun action = do funPtr <- makeCallback fun result <- action funPtr freeHaskellFunPtr funPtr return result type CallbackMaker a = a -> IO (FunPtr a) type CB0001 a = Ptr a -> CInt -> Ptr CString -> Ptr CString -> IO CInt foreign import ccall "wrapper" mkCB0001 :: CallbackMaker (CB0001 a) instance Callback (CB0001 a) where makeCallback = mkCB0001 type CB0002 = Ptr () -> Ptr () -> IO CInt foreign import ccall "wrapper" mkCB0002 :: CallbackMaker CB0002 instance Callback CB0002 where makeCallback = mkCB0002 type CB0003 a = Ptr a -> CInt -> IO CInt foreign import ccall "wrapper" mkCB0003 :: CallbackMaker (CB0003 a) instance Callback (CB0003 a) where makeCallback = mkCB0003 type CB0004 a b = Ptr a -> Ptr b -> CInt -> CString -> IO () foreign import ccall "wrapper" mkCB0004 :: CallbackMaker (CB0004 a b) instance Callback (CB0004 a b) where makeCallback = mkCB0004 type CB0005 a = Ptr a -> IO CInt foreign import ccall "wrapper" mkCB0005 :: CallbackMaker (CB0005 a) instance Callback (CB0005 a) where makeCallback = mkCB0005 type CB0006 a = Ptr a -> CInt -> CString -> CInt -> CString -> IO CInt foreign import ccall "wrapper" mkCB0006 :: CallbackMaker (CB0006 a) instance Callback (CB0006 a) where makeCallback = mkCB0006 type CB0007 a b = Ptr a -> CInt -> Ptr (Ptr b) -> IO () foreign import ccall "wrapper" mkCB0007 :: CallbackMaker (CB0007 a b) instance Callback (CB0007 a b) where makeCallback = mkCB0007 type CB0008 a = Ptr a -> IO () foreign import ccall "wrapper" mkCB0008 :: CallbackMaker (CB0008 a) instance Callback (CB0008 a) where makeCallback = mkCB0008 type CB0009 a = Ptr a -> CInt -> CString -> CString -> CString -> CString -> IO CInt foreign import ccall "wrapper" mkCB0009 :: CallbackMaker (CB0009 a) instance Callback (CB0009 a) where makeCallback = mkCB0009 type CB000A a = Ptr a -> CInt -> CString -> CString -> Data.Int.Int64 -> IO () foreign import ccall "wrapper" mkCB000A :: CallbackMaker (CB000A a) instance Callback (CB000A a) where makeCallback = mkCB000A type CB000B = CInt -> IO () foreign import ccall "wrapper" mkCB000B :: CallbackMaker CB000B instance Callback CB000B where makeCallback = mkCB000B type CB000C = IO () foreign import ccall "wrapper" mkCB000C :: CallbackMaker CB000C instance Callback CB000C where makeCallback = mkCB000C