You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.6 KiB

module Opt(parseArgs,Options(..)) where
import System.Console.GetOpt
import Data.Maybe
-- import Vm
data Flag = File String
| Time Int
| Mem Int
| PowerPhrase String
deriving Show
data Options = Options { optFile :: [String]
, optTime :: Maybe Int
, optMem :: Maybe Int
, optPowerPhrase :: Maybe String
}
deriving Show
startOptions = Options { optFile = []
, optTime = Nothing
, optMem = Nothing
, optPowerPhrase = Nothing
}
options :: [ OptDescr (Options -> IO Options) ]
options = [ Option "f" ["filename"]
(ReqArg
(\arg opt -> return opt { optFile = (arg:(optFile opt)) })
"FILE")
"Input Filename"
, Option "t" ["timelimit"]
(ReqArg
(\arg opt -> return opt { optTime = Just (read arg) })
"TIMELIMIT")
"Time Limit in seconds"
, Option "m" ["memlimit"]
(ReqArg
(\arg opt -> return opt { optMem = Just (read arg) })
"MEMLIMIT")
"Memory Limit in MB"
, Option "p" ["phrasepower"]
(ReqArg
(\arg opt -> return opt { optPowerPhrase = Just arg })
"POWERPHRASE")
"Power Phrase"
]
parseArgs :: [String] -> IO Options
parseArgs args = do
let (actions, _, _) = getOpt RequireOrder options args
opts <- foldl (>>=) (return startOptions) actions
return opts