-- -- Copyright (c) 2005 Don Stewart - http://www.cse.unsw.edu.au/~dons -- Sean Seefried -- Stefan Wehr -- GPL version 2 or later (see http://www.gnu.org/copyleft/gpl.html) -- module CmdlineArgs where import System.IO import System.Exit import System.Console.GetOpt import System.Environment data Flag = DumpInstrs | Help deriving Eq {- getLogLevel :: [Flag] -> LogLevel getLogLevel [] = Warn getLogLevel (LogLevel l:_) = l getLogLevel (_:rest) = getLogLevel rest -} -- -- associate concrete flags with their abstract representation -- opts :: [OptDescr Flag] opts = [ Option ['?', 'h'] ["help"] (NoArg Help) "this message" , Option "d" ["dump-instrs"] (NoArg DumpInstrs) "Dump instructions" -- , Option ['l'] [] (ReqArg parseLevel "(debug|info|warn)") -- "set the log level" ] {- parseLevel :: String -> Flag parseLevel s = case levelFromString s of Nothing -> ("unknown debug level: " ++ s) Just l -> LogLevel l -} parseArgs :: IO ([Flag],[String]) parseArgs = do prog <- getProgName argv <- getArgs case (getOpt Permute opts argv) of (flags,fs,[]) -> case () of _| Help `elem` flags -> do putStrLn $ usage prog exitWith ExitSuccess | otherwise -> return (flags,fs) (_,_,err) -> error $ concat err ++ (usage prog) where usage prog = usageInfo ("Usage: "++ prog ++" [OPTION...] file") opts