{-# OPTIONS -#include #-} {-# OPTIONS -#include "SafeArrayPrim.h" #-} -- Automatically generated by HaskellDirect (ihc.exe), version 0.20 -- Created: 20:11 Pacific Standard Time, Tuesday 16 December, 2003 -- Command line: -fno-qualified-names -fhs-to-c -fno-export-lists --gen-headers -fout-pointers-are-not-refs --gen-headers -c SafeArray.idl -o SafeArray.hs module SafeArray where import Prelude import Com (checkHR) import Foreign.ForeignPtr (ForeignPtr, withForeignPtr) import Foreign.Ptr (Ptr, FunPtr, castPtr) import HDirect (nullFinaliser, writefptr, readPtr, sizeofPtr, writeWord32, writeInt32, addNCastPtr, readWord32, readInt32, allocBytes, free, doThenFree, sizeofForeignPtr, marshalllist, trivialFree, freeref, sizeofInt32, marshallref) import IOExts (unsafePerformIO) import Int (Int32) import Pointer (makeFO) import StdTypes (VARTYPE) import Word (Word32, Word16) {- BEGIN_C_CODE #if defined(__MINGW32__) || defined(__CYGWIN32__) END_C_CODE-} {- BEGIN_C_CODE #include END_C_CODE-} {- BEGIN_C_CODE #endif END_C_CODE-} {- BEGIN_C_CODE #if !defined(_MSC_VER) && __W32API_MAJOR_VERSION == 1 END_C_CODE-} -- -------------------------------------------------- -- -- interface SAFEARRAY -- -- -------------------------------------------------- newtype SAFEARRAY = SAFEARRAY (ForeignPtr SAFEARRAY) foreign label "primSafeArrayDestroy" addrOf_SAFEARRAY_primSafeArrayDestroy :: FunPtr (Ptr SAFEARRAY -> IO ()) marshallSAFEARRAY :: SAFEARRAY -> IO (ForeignPtr SAFEARRAY) marshallSAFEARRAY (SAFEARRAY v) = return (v) unmarshallSAFEARRAY :: Bool -> Ptr SAFEARRAY -> IO SAFEARRAY unmarshallSAFEARRAY finaliseMe__ v = do v <- makeFO v (case finaliseMe__ of False -> nullFinaliser True -> addrOf_SAFEARRAY_primSafeArrayDestroy) return (SAFEARRAY v) writeSAFEARRAY :: Ptr (Ptr SAFEARRAY) -> SAFEARRAY -> IO () writeSAFEARRAY ptr (SAFEARRAY v) = writefptr ptr v readSAFEARRAY :: Bool -> Ptr SAFEARRAY -> IO SAFEARRAY readSAFEARRAY finaliseMe__ ptr = do v <- readPtr ptr v <- makeFO v (case finaliseMe__ of False -> nullFinaliser True -> addrOf_SAFEARRAY_primSafeArrayDestroy) return (SAFEARRAY v) sizeofSAFEARRAY :: Word32 sizeofSAFEARRAY = sizeofPtr addrToSAFEARRAY :: Ptr a -> SAFEARRAY addrToSAFEARRAY v = unsafePerformIO (makeFO (castPtr v) addrOf_SAFEARRAY_primSafeArrayDestroy >>= \ v -> return (SAFEARRAY v)) data SAFEARRAYBOUND = TagSAFEARRAYBOUND {cElements :: Word32, lLbound :: Int32} writeSAFEARRAYBOUND :: Ptr SAFEARRAYBOUND -> SAFEARRAYBOUND -> IO () writeSAFEARRAYBOUND ptr (TagSAFEARRAYBOUND cElements lLbound) = let pf0 = ptr pf1 = addNCastPtr pf0 0 in do writeWord32 pf1 cElements let pf2 = addNCastPtr pf1 4 writeInt32 pf2 lLbound readSAFEARRAYBOUND :: Ptr SAFEARRAYBOUND -> IO SAFEARRAYBOUND readSAFEARRAYBOUND ptr = let pf0 = ptr pf1 = addNCastPtr pf0 0 in do cElements <- readWord32 pf1 let pf2 = addNCastPtr pf1 4 lLbound <- readInt32 pf2 return (TagSAFEARRAYBOUND cElements lLbound) sizeofSAFEARRAYBOUND :: Word32 sizeofSAFEARRAYBOUND = 8 safeArrayAccessData :: SAFEARRAY -> IO (Ptr ()) safeArrayAccessData psa = do ppvData <- allocBytes (fromIntegral sizeofPtr) psa <- marshallSAFEARRAY psa o_safeArrayAccessData <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayAccessData psa ppvData) checkHR o_safeArrayAccessData doThenFree free readPtr ppvData foreign import stdcall "SafeArrayAccessData" prim_SafeArray_safeArrayAccessData :: Ptr SAFEARRAY -> Ptr (Ptr ()) -> IO Int32 safeArrayAllocData :: SAFEARRAY -> IO () safeArrayAllocData psa = do psa <- marshallSAFEARRAY psa o_safeArrayAllocData <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayAllocData psa) checkHR o_safeArrayAllocData foreign import stdcall "SafeArrayAllocData" prim_SafeArray_safeArrayAllocData :: Ptr SAFEARRAY -> IO Int32 safeArrayAllocDescriptor :: Word32 -> IO SAFEARRAY safeArrayAllocDescriptor cDims = do ppsaOut <- allocBytes (fromIntegral sizeofForeignPtr) o_safeArrayAllocDescriptor <- prim_SafeArray_safeArrayAllocDescriptor cDims ppsaOut checkHR o_safeArrayAllocDescriptor doThenFree free (readSAFEARRAY True) ppsaOut foreign import stdcall "SafeArrayAllocDescriptor" prim_SafeArray_safeArrayAllocDescriptor :: Word32 -> Ptr (Ptr SAFEARRAY) -> IO Int32 safeArrayCopy :: SAFEARRAY -> IO SAFEARRAY safeArrayCopy psa = do ppsaOut <- allocBytes (fromIntegral sizeofForeignPtr) psa <- marshallSAFEARRAY psa o_safeArrayCopy <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayCopy psa ppsaOut) checkHR o_safeArrayCopy doThenFree free (readSAFEARRAY True) ppsaOut foreign import stdcall "SafeArrayCopy" prim_SafeArray_safeArrayCopy :: Ptr SAFEARRAY -> Ptr (Ptr SAFEARRAY) -> IO Int32 safeArrayCreate :: VARTYPE -> [SAFEARRAYBOUND] -> IO SAFEARRAY safeArrayCreate vt rgsabound = let cDims = (fromIntegral (length rgsabound) :: Word32) in do rgsabound <- marshalllist sizeofSAFEARRAYBOUND writeSAFEARRAYBOUND rgsabound o_safeArrayCreate <- prim_SafeArray_safeArrayCreate vt cDims rgsabound freeref trivialFree rgsabound unmarshallSAFEARRAY True o_safeArrayCreate foreign import stdcall "SafeArrayCreate" prim_SafeArray_safeArrayCreate :: Word16 -> Word32 -> Ptr SAFEARRAYBOUND -> IO (Ptr SAFEARRAY) safeArrayDestroy :: SAFEARRAY -> IO () safeArrayDestroy psa = do psa <- marshallSAFEARRAY psa o_safeArrayDestroy <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayDestroy psa) checkHR o_safeArrayDestroy foreign import stdcall "SafeArrayDestroy" prim_SafeArray_safeArrayDestroy :: Ptr SAFEARRAY -> IO Int32 safeArrayDestroyData :: SAFEARRAY -> IO () safeArrayDestroyData psa = do psa <- marshallSAFEARRAY psa o_safeArrayDestroyData <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayDestroyData psa) checkHR o_safeArrayDestroyData foreign import stdcall "SafeArrayDestroyData" prim_SafeArray_safeArrayDestroyData :: Ptr SAFEARRAY -> IO Int32 safeArrayDestroyDescriptor :: SAFEARRAY -> IO () safeArrayDestroyDescriptor psa = do psa <- marshallSAFEARRAY psa o_safeArrayDestroyDescriptor <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayDestroyDescriptor psa) checkHR o_safeArrayDestroyDescriptor foreign import stdcall "SafeArrayDestroyDescriptor" prim_SafeArray_safeArrayDestroyDescriptor :: Ptr SAFEARRAY -> IO Int32 safeArrayGetDim :: SAFEARRAY -> IO Word32 safeArrayGetDim psa = do psa <- marshallSAFEARRAY psa withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayGetDim psa) foreign import stdcall "SafeArrayGetDim" prim_SafeArray_safeArrayGetDim :: Ptr SAFEARRAY -> IO Word32 safeArrayGetElement :: SAFEARRAY -> Ptr Int32 -> Ptr () -> IO () safeArrayGetElement psa rgIndices pv = do psa <- marshallSAFEARRAY psa o_safeArrayGetElement <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayGetElement psa rgIndices pv) checkHR o_safeArrayGetElement foreign import stdcall "SafeArrayGetElement" prim_SafeArray_safeArrayGetElement :: Ptr SAFEARRAY -> Ptr Int32 -> Ptr () -> IO Int32 safeArrayGetElemsize :: SAFEARRAY -> IO Word32 safeArrayGetElemsize psa = do psa <- marshallSAFEARRAY psa withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayGetElemsize psa) foreign import stdcall "SafeArrayGetElemsize" prim_SafeArray_safeArrayGetElemsize :: Ptr SAFEARRAY -> IO Word32 safeArrayGetLBound :: SAFEARRAY -> Word32 -> IO Int32 safeArrayGetLBound psa nDim = do plLbound <- allocBytes (fromIntegral sizeofInt32) psa <- marshallSAFEARRAY psa o_safeArrayGetLBound <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayGetLBound psa nDim plLbound) checkHR o_safeArrayGetLBound doThenFree free readInt32 plLbound foreign import stdcall "SafeArrayGetLBound" prim_SafeArray_safeArrayGetLBound :: Ptr SAFEARRAY -> Word32 -> Ptr Int32 -> IO Int32 safeArrayGetUBound :: SAFEARRAY -> Word32 -> IO Int32 safeArrayGetUBound psa nDim = do plLbound <- allocBytes (fromIntegral sizeofInt32) psa <- marshallSAFEARRAY psa o_safeArrayGetUBound <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayGetUBound psa nDim plLbound) checkHR o_safeArrayGetUBound doThenFree free readInt32 plLbound foreign import stdcall "SafeArrayGetUBound" prim_SafeArray_safeArrayGetUBound :: Ptr SAFEARRAY -> Word32 -> Ptr Int32 -> IO Int32 safeArrayLock :: SAFEARRAY -> IO () safeArrayLock psa = do psa <- marshallSAFEARRAY psa o_safeArrayLock <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayLock psa) checkHR o_safeArrayLock foreign import stdcall "SafeArrayLock" prim_SafeArray_safeArrayLock :: Ptr SAFEARRAY -> IO Int32 safeArrayPtrOfIndex :: SAFEARRAY -> Ptr Int32 -> IO (Ptr ()) safeArrayPtrOfIndex psa rgIndices = do ppvData <- allocBytes (fromIntegral sizeofPtr) psa <- marshallSAFEARRAY psa o_safeArrayPtrOfIndex <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayPtrOfIndex psa rgIndices ppvData) checkHR o_safeArrayPtrOfIndex doThenFree free readPtr ppvData foreign import stdcall "SafeArrayPtrOfIndex" prim_SafeArray_safeArrayPtrOfIndex :: Ptr SAFEARRAY -> Ptr Int32 -> Ptr (Ptr ()) -> IO Int32 safeArrayPutElement :: SAFEARRAY -> Ptr Int32 -> Ptr () -> IO () safeArrayPutElement psa rgIndices pv = do psa <- marshallSAFEARRAY psa o_safeArrayPutElement <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayPutElement psa rgIndices pv) checkHR o_safeArrayPutElement foreign import stdcall "SafeArrayPutElement" prim_SafeArray_safeArrayPutElement :: Ptr SAFEARRAY -> Ptr Int32 -> Ptr () -> IO Int32 safeArrayRedim :: SAFEARRAY -> SAFEARRAYBOUND -> IO () safeArrayRedim psa psaboundNew = do psa <- marshallSAFEARRAY psa psaboundNew <- marshallref (allocBytes (fromIntegral sizeofSAFEARRAYBOUND)) writeSAFEARRAYBOUND psaboundNew o_safeArrayRedim <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayRedim psa psaboundNew) free psaboundNew checkHR o_safeArrayRedim foreign import stdcall "SafeArrayRedim" prim_SafeArray_safeArrayRedim :: Ptr SAFEARRAY -> Ptr SAFEARRAYBOUND -> IO Int32 safeArrayUnaccessData :: SAFEARRAY -> IO () safeArrayUnaccessData psa = do psa <- marshallSAFEARRAY psa o_safeArrayUnaccessData <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayUnaccessData psa) checkHR o_safeArrayUnaccessData foreign import stdcall "SafeArrayUnaccessData" prim_SafeArray_safeArrayUnaccessData :: Ptr SAFEARRAY -> IO Int32 safeArrayUnlock :: SAFEARRAY -> IO () safeArrayUnlock psa = do psa <- marshallSAFEARRAY psa o_safeArrayUnlock <- withForeignPtr psa (\ psa -> prim_SafeArray_safeArrayUnlock psa) checkHR o_safeArrayUnlock foreign import stdcall "SafeArrayUnlock" prim_SafeArray_safeArrayUnlock :: Ptr SAFEARRAY -> IO Int32 {- BEGIN_C_CODE #endif END_C_CODE-}