+updateBrightness :: State -> IO ()
+updateBrightness state = do
+ let brightness = (stVolume state)
+ writeStatus (stPowerMate state) $
+ statusInit { brightness=brightness }
+
+volumeUp :: State -> IO State
+volumeUp state = do
+ createProcess (proc "volume-up" [])
+ state <- readState $ State {
+ stPowerMate=(stPowerMate state),
+ stVolume=(max 0 $ 1+(stVolume state)),
+ stPrevAction=(stPrevAction state),
+ stPrevDir=(stPrevDir state) }
+ state <- updatePrevAction state 1
+ return state
+
+volumeDown :: State -> IO State
+volumeDown state = do
+ createProcess (proc "volume-down" [])
+ state <- readState $ State {
+ stPowerMate=(stPowerMate state),
+ stVolume=(max 0 $ (stVolume state)-1),
+ stPrevAction=(stPrevAction state),
+ stPrevDir=(stPrevDir state) }
+ state <- updatePrevAction state 0
+ return state
+
+updatePrevState :: State -> Int -> IO State
+updatePrevState state dir = do
+ state <- readState $ State {
+ stPowerMate=(stPowerMate state),
+ stVolume=(stVolume state),
+ stPrevAction=(stPrevAction state),
+ stPrevDir=dir }
+ return state
+
+updatePrevAction :: State -> Int -> IO State
+updatePrevAction state action = do
+ state <- readState $ State {
+ stPowerMate=(stPowerMate state),
+ stVolume=(stVolume state),
+ stPrevAction=action,
+ stPrevDir=(stPrevDir state) }
+ return state