From 71983ddf3e999bbf94cf6dc99de1804048668c2f Mon Sep 17 00:00:00 2001 From: hellerve Date: Fri, 28 Apr 2017 12:58:11 +0200 Subject: [PATCH] removed haskeline extension --- bc.cabal | 2 +- src/BC/Prompt.hs | 63 ++++++++++++++++++++++++++++++------------------ 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/bc.cabal b/bc.cabal index d20cfb6..eda6cde 100644 --- a/bc.cabal +++ b/bc.cabal @@ -14,6 +14,6 @@ cabal-version: >=1.10 executable bc main-is: Main.hs hs-source-dirs: src/ - build-depends: base >=4.9 && <4.10, haskeline, unix + build-depends: base >=4.9 && <4.10, unix hs-source-dirs: src default-language: Haskell2010 diff --git a/src/BC/Prompt.hs b/src/BC/Prompt.hs index fd9ea51..edb5f14 100644 --- a/src/BC/Prompt.hs +++ b/src/BC/Prompt.hs @@ -1,45 +1,60 @@ module BC.Prompt (startPrompt) where -import System.Console.Haskeline +import Data.Char +import System.IO import System.Posix.Signals import BC.Config printHeader :: IO () printHeader = do - putStrLn $ "bc (better calculator) version " ++ versionStr - putStrLn "Copyright 2017 Veit Heller" - putStrLn "This is free software with ABSOLUTELY NO WARRANTY.\n" + putStrLn $ "bc (better calculator) version " ++ versionStr + putStrLn "Copyright 2017 Veit Heller" + putStrLn "This is free software with ABSOLUTELY NO WARRANTY.\n" -output :: [Char] -> InputT IO () -output out = outputStrLn $ returnStr ++ out +output :: String -> IO () +output out = putStrLn $ returnStr ++ out + + +readline :: IO (Maybe String) +readline = do + putStr promptStr + hFlush stdout + read' "" + where read' acc = do + c <- getChar + case c of + '\EOT' -> return Nothing + '\n' -> return (Just acc) + c -> read' (acc ++ [c]) prompt :: IO () -prompt = runInputT defaultSettings $ poll promptStr - where poll p = do - input <- getInputLine p - case input of - Nothing -> do - output "Bye!" - return () - Just "quit" -> do - output "Bye!" - return () - Just str -> do - output str - poll p +prompt = do + input <- readline + case input of + Nothing -> do + output "Bye!" + return () + Just "quit" -> do + output "Bye!" + return () + Just str -> do + output str + prompt installHandlers :: IO () installHandlers = do - installHandler keyboardSignal (Catch (putStrLn "\n(interrupt) type quit to exit")) Nothing - return () + installHandler keyboardSignal (Catch (putStrLn "\n(interrupt) type quit to exit")) Nothing + hSetBuffering stdout NoBuffering + hSetBuffering stdin NoBuffering + return () startPrompt :: IO () startPrompt = do - printHeader - installHandlers - prompt + printHeader + installHandlers + prompt