diff options
author | Andrew Cady <d@jerkface.net> | 2015-12-04 05:58:46 -0500 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2015-12-04 05:58:46 -0500 |
commit | 507d7eea79bd52dcf3e5ae75a112532b7d89a5e8 (patch) | |
tree | bf53fbe92948d4538585e480a165aaa2b12d6691 | |
parent | 804d48fe9b4613c81759e192c8a04c41b571bf8e (diff) |
add command "exit"
-rw-r--r-- | midi-dump.hs | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/midi-dump.hs b/midi-dump.hs index 09da6b6..c77ef00 100644 --- a/midi-dump.hs +++ b/midi-dump.hs | |||
@@ -18,7 +18,7 @@ import Database.SQLite.Simple | |||
18 | import Database.SQLite.Simple.FromRow () | 18 | import Database.SQLite.Simple.FromRow () |
19 | 19 | ||
20 | import BasePrelude hiding (loop) | 20 | import BasePrelude hiding (loop) |
21 | import Control.Concurrent.Chan | 21 | import Control.Concurrent.Chan () |
22 | import Prelude hiding (id, (.)) | 22 | import Prelude hiding (id, (.)) |
23 | 23 | ||
24 | import qualified Sound.ALSA.Sequencer | 24 | import qualified Sound.ALSA.Sequencer |
@@ -43,11 +43,14 @@ getTS (MidiEvent ts _) = ts | |||
43 | getTS (Silence ts) = ts | 43 | getTS (Silence ts) = ts |
44 | 44 | ||
45 | data LoopState = LoopState { | 45 | data LoopState = LoopState { |
46 | _wantExit :: Bool, | ||
46 | keysDown :: MidiPitchSet, | 47 | keysDown :: MidiPitchSet, |
47 | inputHistory :: [EVENT], | 48 | inputHistory :: [EVENT], |
48 | lastTick :: TimeSpec | 49 | lastTick :: TimeSpec |
49 | } | 50 | } |
50 | 51 | ||
52 | emptyLoopState = LoopState False Set.empty [] | ||
53 | |||
51 | data LoopEnv = LoopEnv { | 54 | data LoopEnv = LoopEnv { |
52 | _saver :: Chan (Int64, Int64, [EVENT]), | 55 | _saver :: Chan (Int64, Int64, [EVENT]), |
53 | _sqlite :: Connection, | 56 | _sqlite :: Connection, |
@@ -69,8 +72,6 @@ getAbsTime = do | |||
69 | now <- liftIO $ getTime Monotonic | 72 | now <- liftIO $ getTime Monotonic |
70 | return $ now - startTime + startTimeReal | 73 | return $ now - startTime + startTimeReal |
71 | 74 | ||
72 | emptyLoopState = LoopState Set.empty [] | ||
73 | |||
74 | main' = withAlsaInit $ \h public private q publicAddr privateAddr -> do | 75 | main' = withAlsaInit $ \h public private q publicAddr privateAddr -> do |
75 | cmdlineAlsaConnect h public | 76 | cmdlineAlsaConnect h public |
76 | 77 | ||
@@ -89,16 +90,20 @@ main' = withAlsaInit $ \h public private q publicAddr privateAddr -> do | |||
89 | 90 | ||
90 | (_, ()) <- execRWST loop env (emptyLoopState startTime) | 91 | (_, ()) <- execRWST loop env (emptyLoopState startTime) |
91 | return () | 92 | return () |
93 | where | ||
94 | loop = do | ||
95 | maybeReadLine >>= maybe processMidi processCommand | ||
96 | wantExit <- gets _wantExit | ||
97 | unless wantExit loop | ||
92 | 98 | ||
93 | loop = do | 99 | processCommand "exit" = modify $ \s -> s { _wantExit = True } |
94 | startTime <- asks _startTime | 100 | processCommand str = liftIO $ putStrLn $ "Unknown command: " ++ str |
95 | startTimeReal <- asks _startTimeReal | 101 | |
102 | processMidi = do | ||
96 | h <- asks _h | 103 | h <- asks _h |
97 | q <- asks _q | 104 | q <- asks _q |
98 | publicAddr <- asks _publicAddr | 105 | publicAddr <- asks _publicAddr |
99 | 106 | ||
100 | mapM_ (liftIO . putStrLn . ("got line: " ++)) =<< maybeReadLine | ||
101 | |||
102 | oldKeys <- gets keysDown | 107 | oldKeys <- gets keysDown |
103 | let forwardNOW = forwardNoteEvent h q publicAddr | 108 | let forwardNOW = forwardNoteEvent h q publicAddr |
104 | (events, newKeys) <- liftIO $ parseAlsaEvents' h oldKeys forwardNOW | 109 | (events, newKeys) <- liftIO $ parseAlsaEvents' h oldKeys forwardNOW |
@@ -128,8 +133,6 @@ loop = do | |||
128 | when doSave $ gets inputHistory >>= saveMidi >> return () | 133 | when doSave $ gets inputHistory >>= saveMidi >> return () |
129 | modify $ \s -> s { inputHistory = [] } | 134 | modify $ \s -> s { inputHistory = [] } |
130 | 135 | ||
131 | loop | ||
132 | |||
133 | maybeReadLine = asks _lineReader >>= liftIO . tryTakeMVar | 136 | maybeReadLine = asks _lineReader >>= liftIO . tryTakeMVar |
134 | startLineReader = do | 137 | startLineReader = do |
135 | mv <- liftIO newEmptyMVar | 138 | mv <- liftIO newEmptyMVar |