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