module CTypes where import Foreign import Foreign.C -- time.h data Tm = Tm { tm'sec, tm'min, tm'hour, tm'mday, tm'mon, tm'year, tm'wday, tm'yday, tm'isdst :: CInt } instance Storable Tm where sizeOf _ = fromIntegral size_of_tm alignment = sizeOf peek p = with 0 $ \p1 -> with 0 $ \p2 -> with 0 $ \p3 -> with 0 $ \p4 -> with 0 $ \p5 -> with 0 $ \p6 -> with 0 $ \p7 -> with 0 $ \p8 -> with 0 $ \p9 -> c2hs_tm p p1 p2 p3 p4 p5 p6 p7 p8 p9 >> peek p1 >>= \v1 -> peek p2 >>= \v2 -> peek p3 >>= \v3 -> peek p4 >>= \v4 -> peek p5 >>= \v5 -> peek p6 >>= \v6 -> peek p7 >>= \v7 -> peek p8 >>= \v8 -> peek p9 >>= \v9 -> return $ Tm v1 v2 v3 v4 v5 v6 v7 v8 v9 poke p (Tm v1 v2 v3 v4 v5 v6 v7 v8 v9) = hs2c_tm p v1 v2 v3 v4 v5 v6 v7 v8 v9 foreign import ccall size_of_tm :: CInt foreign import ccall hs2c_tm :: Ptr Tm -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO () foreign import ccall c2hs_tm :: Ptr Tm -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO () -- sys/time.h data Timeval = Timeval {timeval'tv_sec, timeval'tv_usec :: CLong} instance Storable Timeval where sizeOf _ = fromIntegral size_of_timeval alignment = sizeOf peek p = with 0 $ \p1 -> with 0 $ \p2 -> c2hs_timeval p p1 p2 >> peek p1 >>= \v1 -> peek p2 >>= \v2 -> return $ Timeval {timeval'tv_sec = v1, timeval'tv_usec = v2} poke p v = hs2c_timeval p (timeval'tv_sec v) (timeval'tv_usec v) foreign import ccall "size_of_timeval" size_of_timeval :: CInt foreign import ccall "hs2c_timeval" hs2c_timeval :: Ptr Timeval -> CLong -> CLong -> IO () foreign import ccall "c2hs_timeval" c2hs_timeval :: Ptr Timeval -> Ptr CLong -> Ptr CLong -> IO ()