{-# LINE 1 "src/System/INotify/Masks.hsc" #-} module System.INotify.Masks ( inAccess , inModify , inAttrib , inCloseWrite , inCloseNowrite , inOpen , inMovedFrom , inMovedTo , inMoveSelf , inCreate , inDelete , inDeleteSelf , inUnmount , inQOverflow , inIgnored , inClose , inMove , inOnlydir , inDontFollow , inMaskAdd , inIsdir , inOneshot , inAllEvents , maskIsSet , joinMasks , Mask ) where import Data.Bits import Data.Maybe import Foreign.C.Types data Mask = UserSpace CUInt | Extra CUInt | Helper CUInt | Special CUInt | All CUInt deriving (Eq,Ord) maskIsSet :: Mask -> CUInt -> Bool maskIsSet mask cuint = value mask .&. cuint > 0 value :: Mask -> CUInt value (UserSpace i) = i value (Extra i) = i value (Helper i) = i value (Special i) = i value (All i) = i instance Show Mask where show mask = fromJust $ lookup mask [ (inAccess, "IN_ACCESS"), (inModify, "IN_MODIFY"), (inAttrib, "IN_ATTRIB"), (inClose, "IN_CLOSE"), (inCloseWrite, "IN_CLOSE_WRITE"), (inCloseNowrite, "IN_CLOSE_NOWRITE"), (inOpen, "IN_OPEN"), (inMove, "IN_MOVE"), (inMovedFrom, "IN_MOVED_FROM"), (inMovedTo, "IN_MOVED_TO"), (inMoveSelf, "IN_MOVE_SELF"), (inCreate, "IN_CREATE"), (inDelete, "IN_DELETE"), (inDeleteSelf, "IN_DELETE_SELF"), (inUnmount, "IN_UNMOUNT"), (inQOverflow, "IN_Q_OVERFLOW"), (inIgnored, "IN_IGNORED"), (inClose, "IN_CLOSE"), (inIsdir, "IN_ISDIR"), (inOneshot, "IN_ONESHOT")] joinMasks :: [Mask] -> CUInt joinMasks = foldr (.|.) 0 . map value inAccess :: Mask inAccess = UserSpace 1 inModify :: Mask inModify = UserSpace 2 inAttrib :: Mask inAttrib = UserSpace 4 inCloseWrite :: Mask inCloseWrite = UserSpace 8 {-# LINE 83 "src/System/INotify/Masks.hsc" #-} inCloseNowrite :: Mask inCloseNowrite = UserSpace 16 inOpen :: Mask inOpen = UserSpace 32 inMovedFrom :: Mask inMovedFrom = UserSpace 64 inMovedTo :: Mask inMovedTo = UserSpace 128 {-# LINE 84 "src/System/INotify/Masks.hsc" #-} inCreate :: Mask inCreate = UserSpace 256 inDelete :: Mask inDelete = UserSpace 512 inDeleteSelf :: Mask inDeleteSelf = UserSpace 1024 inMoveSelf :: Mask inMoveSelf = UserSpace 2048 {-# LINE 85 "src/System/INotify/Masks.hsc" #-} inUnmount :: Mask inUnmount = Extra 8192 inQOverflow :: Mask inQOverflow = Extra 16384 inIgnored :: Mask inIgnored = Extra 32768 {-# LINE 87 "src/System/INotify/Masks.hsc" #-} inClose :: Mask inClose = Helper 24 inMove :: Mask inMove = Helper 192 {-# LINE 89 "src/System/INotify/Masks.hsc" #-} inOnlydir :: Mask inOnlydir = Special 16777216 inDontFollow :: Mask inDontFollow = Special 33554432 inMaskAdd :: Mask inMaskAdd = Special 536870912 inIsdir :: Mask inIsdir = Special 1073741824 {-# LINE 91 "src/System/INotify/Masks.hsc" #-} inOneshot :: Mask inOneshot = Special 2147483648 {-# LINE 92 "src/System/INotify/Masks.hsc" #-} inAllEvents :: Mask inAllEvents = All 4095 {-# LINE 94 "src/System/INotify/Masks.hsc" #-}