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
|