Fungi-1.0: Text/Help/Fungi.hs
module Text.Help.Fungi (
help
) where
import Data.ByteSize (byteSize)
import Data.Char (toLower)
import Data.Int
import Data.List (sort, intercalate, nub)
import Data.Maybe (fromMaybe)
import System.Environment (getProgName)
import System.FilePath (dropExtension)
import Text.PrintOption
-----------------------------------------------------------
p :: Char -> String -> String -> IO ()
p = printOption
b :: Char -> String -> String -> IO ()
b = printOptionWith defaultPrintSettings { bulletDelim = Just "***" }
supportedSizes :: String
supportedSizes = intercalate ", " $ map show $ sort $ nub $ map (fromMaybe 0) [
byteSize (0 :: Integer)
, byteSize (0 :: Int)
, byteSize (0 :: Int8)
, byteSize (0 :: Int16)
, byteSize (0 :: Int32)
, byteSize (0 :: Int64)
]
fingerprints :: String
fingerprints = intercalate ", " $ sort [
"BASE"
, "BOOL"
, "CPLI"
, "FIXP"
, "MODE"
, "MODU"
, "NULL"
, "ORTH"
, "REFC"
, "ROMA"
]
line :: IO ()
line = putStrLn $ replicate 80 '-'
help :: IO ()
help = do
line
progName <- fmap (map toLower . dropExtension) getProgName
putStrLn $ "Usage: " ++ progName ++ " [OPTIONS] [PROGRAM FILE] [PROGRAM ARGS]"
line
putStrLn $ "Options:"
p '?' "help" "Display this help message."
b 'd' "debug [MODE=1]" $ concat [
"Run program using debugger."
, "***MODE=1,on,true: Run debugger in step mode."
, "***MODE=0,off,false: Run without debugger."
, "\nDefault is off."
]
p 's' "cell-size SIZE" $ concat [
"Set the funge cell byte size to SIZE.\n"
, "Supported sizes are " ++ supportedSizes ++ ".\n"
, "If SIZE <= 0 then cell size is unbounded.\n"
, "Default is " ++ show (fromMaybe 0 $ byteSize (0 :: Int)) ++ "."
]
b 'n' "dim DIM" $ concat [
"Set the funge dimensions to DIM."
, "\nDefault depends on file extension:"
, "***uf u98: 1"
, "***bf b98: 2"
, "***tf t98: 3"
, "\nAll other extensions default to 2."
, "\nAllowed values: 0 < DIM <= " ++ show (maxBound :: Int) ++ "."
]
b 'u' "unknown MODE" $ concat [
"What to do when encountering an unknown instruction."
, "***MODE=reverse: Reverse on unknown instruction."
, "***MODE=debug: Launch debugger on unknown instruction. Instruction reverses."
, "***MODE=fail: Terminate program on unknown instruction."
, "\nDefault is reverse."
]
line
p ' ' "FINGERPRINTS--" fingerprints
line