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, optSeedNumber :: Int, optCores :: Int, optLog :: Bool } deriving Show startOptions = Options { optFile = [], optTime = Nothing, optMem = Nothing, optPowerPhrase = Nothing, optSeedNumber = 0, optCores = 1, optLog = True } 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" , Option "n" ["seednumber"] (ReqArg (\arg opt -> return opt { optSeedNumber = (read arg) }) "SEEDNUMBER") "Seed Number" , Option "c" ["cores"] (ReqArg (\arg opt -> return opt { optCores = (read arg) }) "CORES") "Cores" , Option "l" ["log"] (NoArg (\ opt -> return opt { optLog = True })) "Log" ] parseArgs :: [String] -> IO Options parseArgs args = do let (actions, _, _) = getOpt RequireOrder options args opts <- foldl (>>=) (return startOptions) actions return opts