module Haskore.Interface.SuperCollider.Channel.Env where
import qualified Haskore.Interface.SuperCollider.Channel as ChannelMng
import Haskore.Interface.SuperCollider.Channel
(Channel, NumberChannels)
import System.Posix.Env (setEnv, getEnv)
import Data.Char (isDigit)
manager :: ChannelMng.T IO
manager = ChannelMng.Cons next reset
next :: NumberChannels -> IO Channel
next inc =
do maybeNumStr <- getEnv envName
let num =
maybe ChannelMng.least
(\numStr ->
if all isDigit numStr
then read numStr
else ChannelMng.least)
maybeNumStr
setEnv envName (show (inc+num)) True
return num
reset :: IO ()
reset = setEnv envName (show ChannelMng.least) True
envName :: String
envName = "HaskoreSC3Channel"