module Haskore.Interface.SuperCollider.Channel.File where
import qualified Haskore.Interface.SuperCollider.Channel as ChannelMng
import Haskore.Interface.SuperCollider.Channel
(Channel, NumberChannels)
import System.IO.Error (catchIOError)
import Data.Char (isDigit)
manager :: ChannelMng.T IO
manager = ChannelMng.Cons next reset
next :: NumberChannels -> IO Channel
next inc =
do num <- catchIOError
(do numStr <- readFile fileName
if all isDigit numStr
then return (read numStr)
else ioError (userError "not a number in channel file"))
(const $ return ChannelMng.least)
writeFile fileName (show (inc+num))
return num
reset :: IO ()
reset = writeFile fileName (show ChannelMng.least)
fileName :: FilePath
fileName = "sc3-channel"