ddc-tools-0.4.2.1: src/ddci-core/DDCI/Core/Input.hs
module DDCI.Core.Input
( InputState (..)
, Input (..)
, readInput
, eatLine)
where
import DDCI.Core.State
import DDCI.Core.Command
import DDCI.Core.Command.TransInteract
import DDC.Driver.Interface.Input
-- Eating input lines.
eatLine :: State
-> InputState Command
-> String
-> IO (State, InputState Command)
eatLine state inputState chunk
| Just _ <- stateTransInteract state
= do state' <- cmdTransInteractLoop state chunk
return ( state'
, inputState
{ inputLineNumber = inputLineNumber inputState + 1 })
| otherwise
= do (inputState', mCmdLine)
<- inputLine (stateInterface state) inputState chunk
case mCmdLine of
Nothing
-> return (state, inputState')
Just (_source, Nothing, _line)
-> do return (state, inputState')
Just (source, Just cmd, line)
-> do state' <- handleCmd state cmd source line
return (state', inputState')