|
@@ -5,7 +5,7 @@ import Numeric (showHex, showIntAtBase)
|
|
|
import Data.List (isInfixOf, intercalate, genericTake, genericDrop)
|
|
|
import Data.List.Split (splitOn)
|
|
|
import Text.Read (readMaybe)
|
|
|
-import System.IO (hFlush, stdout)
|
|
|
+import System.IO (stdout, hFlush, hSetBuffering, BufferMode(NoBuffering))
|
|
|
|
|
|
import Logic (hexDigits)
|
|
|
|
|
@@ -17,7 +17,7 @@ import Data.Semigroup ((<>))
|
|
|
prompt :: (Integer -> String) -> String -> IO ()
|
|
|
prompt printFun delim = do
|
|
|
putStr ">> "
|
|
|
- hFlush stdout
|
|
|
+ hFlush stdout
|
|
|
response <- getLine
|
|
|
putStrLn $ parseIndex printFun delim response
|
|
|
prompt printFun delim
|
|
@@ -31,10 +31,10 @@ parseIndex printFun delim response =
|
|
|
if (isInfixOf ".." response) then
|
|
|
let
|
|
|
range = splitOn ".." response
|
|
|
- jlow = readMaybe $ range !! 0 :: Maybe Integer
|
|
|
- jhigh = readMaybe $ range !! 1 :: Maybe Integer
|
|
|
+ jLow = readMaybe $ range !! 0 :: Maybe Integer
|
|
|
+ jHigh = readMaybe $ range !! 1 :: Maybe Integer
|
|
|
in
|
|
|
- case (jlow, jhigh) of
|
|
|
+ case (jLow, jHigh) of
|
|
|
(Just low, Just high) -> getDigitsFrom low high
|
|
|
_ -> []
|
|
|
else
|
|
@@ -55,7 +55,6 @@ getDigitsFrom low high
|
|
|
| otherwise = genericDrop low . genericTake high $ hexDigits
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
printErr :: String
|
|
|
printErr = "Error: Please give a positive Integer (ex: 3) or a valid range of positive Integers (ex: 3..5)."
|
|
@@ -65,7 +64,8 @@ printErr = "Error: Please give a positive Integer (ex: 3) or a valid range of po
|
|
|
data Arguments = Arguments
|
|
|
{ eval :: Maybe String
|
|
|
, print :: Maybe PrintFunc
|
|
|
- , delimiter :: String}
|
|
|
+ , delimiter :: String
|
|
|
+ , buffer :: Bool}
|
|
|
|
|
|
arguments :: Parser Arguments
|
|
|
arguments = Arguments
|
|
@@ -77,6 +77,8 @@ arguments = Arguments
|
|
|
<> metavar "delim"
|
|
|
<> value ""
|
|
|
<> help "Delimiter to separate printed values.")
|
|
|
+ <*> switch (long "buffer"
|
|
|
+ <> help "Don't print output as it's calculated.")
|
|
|
|
|
|
|
|
|
|
|
@@ -99,7 +101,7 @@ binPrint = flag' BinPrint ( long "binary"
|
|
|
|
|
|
|
|
|
argHandle :: Arguments -> IO ()
|
|
|
-argHandle (Arguments toEval outputType delim) = do
|
|
|
+argHandle (Arguments toEval outputType delim buff) = do
|
|
|
let
|
|
|
printFunIO =
|
|
|
case outputType of
|
|
@@ -114,6 +116,10 @@ argHandle (Arguments toEval outputType delim) = do
|
|
|
return (\n -> showHex n "")
|
|
|
in do
|
|
|
printFun <- printFunIO
|
|
|
+ if buff then
|
|
|
+ return ()
|
|
|
+ else
|
|
|
+ hSetBuffering stdout NoBuffering
|
|
|
case toEval of
|
|
|
Just s -> putStrLn $ parseIndex printFun delim s
|
|
|
_ -> do
|