{-# LINE 1 "src/Bindings/Posix/Sys/Select.hsc" #-}

{-# LINE 2 "src/Bindings/Posix/Sys/Select.hsc" #-}

{-# LINE 3 "src/Bindings/Posix/Sys/Select.hsc" #-}

-- | <http://www.opengroup.org/onlinepubs/9699919799/basedefs/sys_select.h.html>

module Bindings.Posix.Sys.Select 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

{-# LINE 8 "src/Bindings/Posix/Sys/Select.hsc" #-}
import Bindings.Posix.Sys.Types
import Bindings.Posix.Time
import Bindings.Posix.Signal


{-# LINE 13 "src/Bindings/Posix/Sys/Select.hsc" #-}

{-# LINE 14 "src/Bindings/Posix/Sys/Select.hsc" #-}

{-# LINE 15 "src/Bindings/Posix/Sys/Select.hsc" #-}
data C'timeval = C'timeval{
  c'timeval'tv_sec :: CTime,
  c'timeval'tv_usec :: C'suseconds_t
} deriving (Eq,Show)
p'timeval'tv_sec p = plusPtr p 0
p'timeval'tv_sec :: Ptr (C'timeval) -> Ptr (CTime)
p'timeval'tv_usec p = plusPtr p 4
p'timeval'tv_usec :: Ptr (C'timeval) -> Ptr (C'suseconds_t)
instance Storable C'timeval where
  sizeOf _ = 8
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    return $ C'timeval v0 v1
  poke p (C'timeval v0 v1) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    return ()

{-# LINE 16 "src/Bindings/Posix/Sys/Select.hsc" #-}


{-# LINE 18 "src/Bindings/Posix/Sys/Select.hsc" #-}
data C'fd_set = C'fd_set{
} deriving (Eq,Show)
instance Storable C'fd_set where
  sizeOf _ = 128
  alignment _ = 4
  peek p = do
    return $ C'fd_set
  poke p (C'fd_set) = do
    return ()

{-# LINE 19 "src/Bindings/Posix/Sys/Select.hsc" #-}

c'FD_SETSIZE = 1024
c'FD_SETSIZE :: (Num a) => a

{-# LINE 21 "src/Bindings/Posix/Sys/Select.hsc" #-}

foreign import ccall "inline_FD_CLR" c'FD_CLR
  :: CInt -> Ptr C'fd_set -> IO ()

{-# LINE 23 "src/Bindings/Posix/Sys/Select.hsc" #-}
foreign import ccall "inline_FD_ISSET" c'FD_ISSET
  :: CInt -> Ptr C'fd_set -> IO CInt

{-# LINE 24 "src/Bindings/Posix/Sys/Select.hsc" #-}
foreign import ccall "inline_FD_SET" c'FD_SET
  :: CInt -> Ptr C'fd_set -> IO ()

{-# LINE 25 "src/Bindings/Posix/Sys/Select.hsc" #-}
foreign import ccall "inline_FD_ZERO" c'FD_ZERO
  :: Ptr C'fd_set -> IO ()

{-# LINE 26 "src/Bindings/Posix/Sys/Select.hsc" #-}

foreign import ccall "pselect" c'pselect
  :: CInt -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'timespec -> Ptr C'sigset_t -> IO CInt
foreign import ccall "&pselect" p'pselect
  :: FunPtr (CInt -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'timespec -> Ptr C'sigset_t -> IO CInt)

{-# LINE 29 "src/Bindings/Posix/Sys/Select.hsc" #-}
foreign import ccall "select" c'select
  :: CInt -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'timeval -> IO CInt
foreign import ccall "&select" p'select
  :: FunPtr (CInt -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'timeval -> IO CInt)

{-# LINE 31 "src/Bindings/Posix/Sys/Select.hsc" #-}