removed haskeline extension
This commit is contained in:
2
bc.cabal
2
bc.cabal
@@ -14,6 +14,6 @@ cabal-version: >=1.10
|
|||||||
executable bc
|
executable bc
|
||||||
main-is: Main.hs
|
main-is: Main.hs
|
||||||
hs-source-dirs: src/
|
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
|
hs-source-dirs: src
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
|
@@ -1,45 +1,60 @@
|
|||||||
module BC.Prompt (startPrompt) where
|
module BC.Prompt (startPrompt) where
|
||||||
|
|
||||||
import System.Console.Haskeline
|
import Data.Char
|
||||||
|
import System.IO
|
||||||
import System.Posix.Signals
|
import System.Posix.Signals
|
||||||
|
|
||||||
import BC.Config
|
import BC.Config
|
||||||
|
|
||||||
printHeader :: IO ()
|
printHeader :: IO ()
|
||||||
printHeader = do
|
printHeader = do
|
||||||
putStrLn $ "bc (better calculator) version " ++ versionStr
|
putStrLn $ "bc (better calculator) version " ++ versionStr
|
||||||
putStrLn "Copyright 2017 Veit Heller"
|
putStrLn "Copyright 2017 Veit Heller"
|
||||||
putStrLn "This is free software with ABSOLUTELY NO WARRANTY.\n"
|
putStrLn "This is free software with ABSOLUTELY NO WARRANTY.\n"
|
||||||
|
|
||||||
|
|
||||||
output :: [Char] -> InputT IO ()
|
output :: String -> IO ()
|
||||||
output out = outputStrLn $ returnStr ++ out
|
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 :: IO ()
|
||||||
prompt = runInputT defaultSettings $ poll promptStr
|
prompt = do
|
||||||
where poll p = do
|
input <- readline
|
||||||
input <- getInputLine p
|
case input of
|
||||||
case input of
|
Nothing -> do
|
||||||
Nothing -> do
|
output "Bye!"
|
||||||
output "Bye!"
|
return ()
|
||||||
return ()
|
Just "quit" -> do
|
||||||
Just "quit" -> do
|
output "Bye!"
|
||||||
output "Bye!"
|
return ()
|
||||||
return ()
|
Just str -> do
|
||||||
Just str -> do
|
output str
|
||||||
output str
|
prompt
|
||||||
poll p
|
|
||||||
|
|
||||||
|
|
||||||
installHandlers :: IO ()
|
installHandlers :: IO ()
|
||||||
installHandlers = do
|
installHandlers = do
|
||||||
installHandler keyboardSignal (Catch (putStrLn "\n(interrupt) type quit to exit")) Nothing
|
installHandler keyboardSignal (Catch (putStrLn "\n(interrupt) type quit to exit")) Nothing
|
||||||
return ()
|
hSetBuffering stdout NoBuffering
|
||||||
|
hSetBuffering stdin NoBuffering
|
||||||
|
return ()
|
||||||
|
|
||||||
|
|
||||||
startPrompt :: IO ()
|
startPrompt :: IO ()
|
||||||
startPrompt = do
|
startPrompt = do
|
||||||
printHeader
|
printHeader
|
||||||
installHandlers
|
installHandlers
|
||||||
prompt
|
prompt
|
||||||
|
Reference in New Issue
Block a user