import TestSample
import Control.EventDriven
import Control.Monad.Tools

main :: IO ()
main = do
  runConfigNoEv myConfig
  runConfigEv   myConfig

runConfigNoEv :: Config -> IO ()
runConfigNoEv cfg =
  runLoop ( initV cfg ) ( output cfg ) ( input cfg ) ( kbind cfg ) ( ebind cfg )
   >> return ()

runConfigEv :: Config -> IO ()
runConfigEv cfg = do
  talker <- getTalker ( initV cfg ) ( kbind cfg )
  doWhile_ $ do
    ans <- input cfg >>= putEvent talker
    case ans of
         Goodbye         -> return False
         ContainerIs _ n -> modifyContainer talker ( output cfg )
                              >> return True
         Answer a        -> ebind cfg a >> return True
         _               -> return True

noevdr :: IO ()
noevdr = runLoop 0 ( \n -> print n >> return n ) getLine keybind errbind
           >> return ()

evdr :: IO ()
evdr = do
  talker <- getTalker 0 keybind
  doWhile_ $ do
    ans <- getLine >>= putEvent talker
    case ans of
         Goodbye         -> return False
         ContainerIs _ n -> do
           print n
           return True
         Answer NotCmd   -> do
           putStrLn "no such command"
           return True
         _               -> return True
                  
  ret <- getContainer talker
  print ret
