module Bindings.Posix.Time where
import Foreign.Ptr (Ptr,FunPtr,plusPtr)
import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (peekArray,pokeArray)
import Data.Int
import Data.Word
import Bindings.Posix.Sys.Types
import Bindings.Posix.Locale
import Bindings.Posix.Signal
data C'tm = C'tm{
c'tm'tm_sec :: CInt,
c'tm'tm_min :: CInt,
c'tm'tm_hour :: CInt,
c'tm'tm_mday :: CInt,
c'tm'tm_mon :: CInt,
c'tm'tm_year :: CInt,
c'tm'tm_wday :: CInt,
c'tm'tm_yday :: CInt,
c'tm'tm_isdst :: CInt
} deriving (Eq,Show)
p'tm'tm_sec p = plusPtr p 0
p'tm'tm_sec :: Ptr (C'tm) -> Ptr (CInt)
p'tm'tm_min p = plusPtr p 4
p'tm'tm_min :: Ptr (C'tm) -> Ptr (CInt)
p'tm'tm_hour p = plusPtr p 8
p'tm'tm_hour :: Ptr (C'tm) -> Ptr (CInt)
p'tm'tm_mday p = plusPtr p 12
p'tm'tm_mday :: Ptr (C'tm) -> Ptr (CInt)
p'tm'tm_mon p = plusPtr p 16
p'tm'tm_mon :: Ptr (C'tm) -> Ptr (CInt)
p'tm'tm_year p = plusPtr p 20
p'tm'tm_year :: Ptr (C'tm) -> Ptr (CInt)
p'tm'tm_wday p = plusPtr p 24
p'tm'tm_wday :: Ptr (C'tm) -> Ptr (CInt)
p'tm'tm_yday p = plusPtr p 28
p'tm'tm_yday :: Ptr (C'tm) -> Ptr (CInt)
p'tm'tm_isdst p = plusPtr p 32
p'tm'tm_isdst :: Ptr (C'tm) -> Ptr (CInt)
instance Storable C'tm where
sizeOf _ = 44
alignment _ = 4
peek p = do
v0 <- peekByteOff p 0
v1 <- peekByteOff p 4
v2 <- peekByteOff p 8
v3 <- peekByteOff p 12
v4 <- peekByteOff p 16
v5 <- peekByteOff p 20
v6 <- peekByteOff p 24
v7 <- peekByteOff p 28
v8 <- peekByteOff p 32
return $ C'tm v0 v1 v2 v3 v4 v5 v6 v7 v8
poke p (C'tm v0 v1 v2 v3 v4 v5 v6 v7 v8) = do
pokeByteOff p 0 v0
pokeByteOff p 4 v1
pokeByteOff p 8 v2
pokeByteOff p 12 v3
pokeByteOff p 16 v4
pokeByteOff p 20 v5
pokeByteOff p 24 v6
pokeByteOff p 28 v7
pokeByteOff p 32 v8
return ()
data C'timespec = C'timespec{
c'timespec'tv_sec :: CTime,
c'timespec'tv_nsec :: CLong
} deriving (Eq,Show)
p'timespec'tv_sec p = plusPtr p 0
p'timespec'tv_sec :: Ptr (C'timespec) -> Ptr (CTime)
p'timespec'tv_nsec p = plusPtr p 4
p'timespec'tv_nsec :: Ptr (C'timespec) -> Ptr (CLong)
instance Storable C'timespec where
sizeOf _ = 8
alignment _ = 4
peek p = do
v0 <- peekByteOff p 0
v1 <- peekByteOff p 4
return $ C'timespec v0 v1
poke p (C'timespec v0 v1) = do
pokeByteOff p 0 v0
pokeByteOff p 4 v1
return ()
data C'itimerspec = C'itimerspec{
c'itimerspec'it_interval :: C'timespec,
c'itimerspec'it_value :: C'timespec
} deriving (Eq,Show)
p'itimerspec'it_interval p = plusPtr p 0
p'itimerspec'it_interval :: Ptr (C'itimerspec) -> Ptr (C'timespec)
p'itimerspec'it_value p = plusPtr p 8
p'itimerspec'it_value :: Ptr (C'itimerspec) -> Ptr (C'timespec)
instance Storable C'itimerspec where
sizeOf _ = 16
alignment _ = 4
peek p = do
v0 <- peekByteOff p 0
v1 <- peekByteOff p 8
return $ C'itimerspec v0 v1
poke p (C'itimerspec v0 v1) = do
pokeByteOff p 0 v0
pokeByteOff p 8 v1
return ()
c'CLOCKS_PER_SEC = 1000000
c'CLOCKS_PER_SEC :: (Num a) => a
c'CLOCK_REALTIME = 0
c'CLOCK_REALTIME :: (Num a) => a
c'TIMER_ABSTIME = 1
c'TIMER_ABSTIME :: (Num a) => a
foreign import ccall "inline_getdate_err" c'getdate_err
:: IO CInt
foreign import ccall "clock_getres" c'clock_getres
:: C'clockid_t -> Ptr C'timespec -> IO CInt
foreign import ccall "&clock_getres" p'clock_getres
:: FunPtr (C'clockid_t -> Ptr C'timespec -> IO CInt)
foreign import ccall "clock_gettime" c'clock_gettime
:: C'clockid_t -> Ptr C'timespec -> IO CInt
foreign import ccall "&clock_gettime" p'clock_gettime
:: FunPtr (C'clockid_t -> Ptr C'timespec -> IO CInt)
foreign import ccall "clock_nanosleep" c'clock_nanosleep
:: C'clockid_t -> CInt -> Ptr C'timespec -> Ptr C'timespec -> IO CInt
foreign import ccall "&clock_nanosleep" p'clock_nanosleep
:: FunPtr (C'clockid_t -> CInt -> Ptr C'timespec -> Ptr C'timespec -> IO CInt)
foreign import ccall "clock_settime" c'clock_settime
:: C'clockid_t -> Ptr C'timespec -> IO CInt
foreign import ccall "&clock_settime" p'clock_settime
:: FunPtr (C'clockid_t -> Ptr C'timespec -> IO CInt)
foreign import ccall "difftime" c'difftime
:: C'time_t -> C'time_t -> IO CDouble
foreign import ccall "&difftime" p'difftime
:: FunPtr (C'time_t -> C'time_t -> IO CDouble)
foreign import ccall "getdate" c'getdate
:: CString -> IO (Ptr C'tm)
foreign import ccall "&getdate" p'getdate
:: FunPtr (CString -> IO (Ptr C'tm))
foreign import ccall "gmtime" c'gmtime
:: Ptr C'time_t -> IO (Ptr C'tm)
foreign import ccall "&gmtime" p'gmtime
:: FunPtr (Ptr C'time_t -> IO (Ptr C'tm))
foreign import ccall "gmtime_r" c'gmtime_r
:: Ptr C'time_t -> Ptr C'tm -> IO (Ptr C'tm)
foreign import ccall "&gmtime_r" p'gmtime_r
:: FunPtr (Ptr C'time_t -> Ptr C'tm -> IO (Ptr C'tm))
foreign import ccall "localtime" c'localtime
:: Ptr C'time_t -> IO (Ptr C'tm)
foreign import ccall "&localtime" p'localtime
:: FunPtr (Ptr C'time_t -> IO (Ptr C'tm))
foreign import ccall "localtime_r" c'localtime_r
:: Ptr C'time_t -> Ptr C'tm -> IO (Ptr C'tm)
foreign import ccall "&localtime_r" p'localtime_r
:: FunPtr (Ptr C'time_t -> Ptr C'tm -> IO (Ptr C'tm))
foreign import ccall "mktime" c'mktime
:: Ptr C'tm -> IO C'time_t
foreign import ccall "&mktime" p'mktime
:: FunPtr (Ptr C'tm -> IO C'time_t)
foreign import ccall "nanosleep" c'nanosleep
:: Ptr C'timespec -> Ptr C'timespec -> IO CInt
foreign import ccall "&nanosleep" p'nanosleep
:: FunPtr (Ptr C'timespec -> Ptr C'timespec -> IO CInt)
foreign import ccall "strftime" c'strftime
:: CString -> CSize -> CString -> Ptr C'tm -> IO CSize
foreign import ccall "&strftime" p'strftime
:: FunPtr (CString -> CSize -> CString -> Ptr C'tm -> IO CSize)
foreign import ccall "strptime" c'strptime
:: CString -> CString -> Ptr C'tm -> IO CString
foreign import ccall "&strptime" p'strptime
:: FunPtr (CString -> CString -> Ptr C'tm -> IO CString)
foreign import ccall "time" c'time
:: Ptr C'time_t -> IO C'time_t
foreign import ccall "&time" p'time
:: FunPtr (Ptr C'time_t -> IO C'time_t)
foreign import ccall "timer_create" c'timer_create
:: C'clockid_t -> Ptr C'sigevent -> Ptr C'timer_t -> IO CInt
foreign import ccall "&timer_create" p'timer_create
:: FunPtr (C'clockid_t -> Ptr C'sigevent -> Ptr C'timer_t -> IO CInt)
foreign import ccall "timer_delete" c'timer_delete
:: C'timer_t -> IO CInt
foreign import ccall "&timer_delete" p'timer_delete
:: FunPtr (C'timer_t -> IO CInt)
foreign import ccall "timer_getoverrun" c'timer_getoverrun
:: C'timer_t -> IO CInt
foreign import ccall "&timer_getoverrun" p'timer_getoverrun
:: FunPtr (C'timer_t -> IO CInt)
foreign import ccall "timer_gettime" c'timer_gettime
:: C'timer_t -> Ptr C'itimerspec -> IO CInt
foreign import ccall "&timer_gettime" p'timer_gettime
:: FunPtr (C'timer_t -> Ptr C'itimerspec -> IO CInt)
foreign import ccall "timer_settime" c'timer_settime
:: C'timer_t -> CInt -> Ptr C'itimerspec -> Ptr C'itimerspec -> IO CInt
foreign import ccall "&timer_settime" p'timer_settime
:: FunPtr (C'timer_t -> CInt -> Ptr C'itimerspec -> Ptr C'itimerspec -> IO CInt)
foreign import ccall "tzset" c'tzset
:: IO ()
foreign import ccall "&tzset" p'tzset
:: FunPtr (IO ())
foreign import ccall "&daylight" p'daylight
:: Ptr (CInt)
foreign import ccall "&timezone" p'timezone
:: Ptr (CLong)
foreign import ccall "array_tzname" c'tzname
:: Ptr (CString)