module System.Console.Haskeline.Backend where import System.Console.Haskeline.Term import System.Console.Haskeline.Monads import Control.Monad import System.IO (stdin, hGetEcho, Handle) #ifdef MINGW import System.Console.Haskeline.Backend.Win32 as Win32 #else import System.Console.Haskeline.Backend.Posix as Posix #ifdef TERMINFO import System.Console.Haskeline.Backend.Terminfo as Terminfo #endif import System.Console.Haskeline.Backend.DumbTerm as DumbTerm #endif defaultRunTerm :: IO RunTerm defaultRunTerm = (liftIO (hGetEcho stdin) >>= guard >> stdinTTY) `orElse` fileHandleRunTerm stdin terminalRunTerm :: IO RunTerm terminalRunTerm = directTTY `orElse` fileHandleRunTerm stdin stdinTTY :: MaybeT IO RunTerm #ifdef MINGW stdinTTY = win32TermStdin #else stdinTTY = stdinTTYHandles >>= runDraw #endif directTTY :: MaybeT IO RunTerm #ifdef MINGW directTTY = win32Term #else directTTY = ttyHandles >>= runDraw #endif #ifndef MINGW runDraw :: Handles -> MaybeT IO RunTerm #ifndef TERMINFO runDraw = runDumbTerm #else runDraw h = runTerminfoDraw h `mplus` runDumbTerm h #endif #endif fileHandleRunTerm :: Handle -> IO RunTerm #ifdef MINGW fileHandleRunTerm = Win32.fileRunTerm #else fileHandleRunTerm = Posix.fileRunTerm #endif