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
inCloseNowrite :: Mask
inCloseNowrite = UserSpace 16
inOpen :: Mask
inOpen = UserSpace 32
inMovedFrom :: Mask
inMovedFrom = UserSpace 64
inMovedTo :: Mask
inMovedTo = UserSpace 128
inCreate :: Mask
inCreate = UserSpace 256
inDelete :: Mask
inDelete = UserSpace 512
inDeleteSelf :: Mask
inDeleteSelf = UserSpace 1024
inMoveSelf :: Mask
inMoveSelf = UserSpace 2048
inUnmount :: Mask
inUnmount = Extra 8192
inQOverflow :: Mask
inQOverflow = Extra 16384
inIgnored :: Mask
inIgnored = Extra 32768
inClose :: Mask
inClose = Helper 24
inMove :: Mask
inMove = Helper 192
inOnlydir :: Mask
inOnlydir = Special 16777216
inDontFollow :: Mask
inDontFollow = Special 33554432
inMaskAdd :: Mask
inMaskAdd = Special 536870912
inIsdir :: Mask
inIsdir = Special 1073741824
inOneshot :: Mask
inOneshot = Special 2147483648
inAllEvents :: Mask
inAllEvents = All 4095