1 {-# LANGUAGE ScopedTypeVariables #-}
5 import Control.Concurrent
6 import Data.ReactiveValue
9 import RCMA.Layer.Board
10 import RCMA.Layer.Layer
12 import RCMA.Translator.Jack
13 import RCMA.Translator.Message
14 import RCMA.Translator.Translator
20 makeBoard [((0,0), mkCell (ChDir False na1 N)),
21 ((0,1), mkCell (ChDir False na1 SE)),
22 ((1,1), mkCell (Split na1)),
23 ((1,-1), mkCell (Split na1)),
24 ((-1,0), mkCell (ChDir False na2 NE))]
29 naOrn = Ornaments Nothing [] NoSlide
35 naOrn = Ornaments Nothing [(10, MIDICVRnd)] SlideUp
41 naOrn = Ornaments Nothing [] NoSlide
48 tempoRV :: ReactiveFieldReadWrite IO Tempo
49 tempoRV = ReactiveFieldReadWrite (\_ -> return ()) (return 96) (\_ -> return ())
51 waitForChildren :: MVar [MVar ()] -> IO ()
52 waitForChildren children = do
53 cs <- takeMVar children
59 waitForChildren children
63 (children :: MVar [MVar ()]) <- newMVar []
64 let forkChild :: IO () -> IO ThreadId
67 childs <- takeMVar children
68 putMVar children (mvar:childs)
69 forkFinally io (\_ -> putMVar mvar ())
71 layerRV <- getDefaultLayerRV
72 boardInRV <- boardSetup board tempoRV layerRV
73 jackT <- forkChild $ jackSetup (liftR2 (\t n -> (t, 0, n)) tempoRV boardInRV)
74 waitForChildren children