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.

74 lines
2.3 KiB

9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
  1. module Opt(parseArgs,Options(..)) where
  2. import System.Console.GetOpt
  3. import Data.Maybe
  4. -- import Vm
  5. data Flag = File String
  6. | Time Int
  7. | Mem Int
  8. | PowerPhrase String
  9. deriving Show
  10. data Options = Options { optFile :: [String],
  11. optTime :: Maybe Int,
  12. optMem :: Maybe Int,
  13. optPowerPhrase :: Maybe String,
  14. optSeedNumber :: Int,
  15. optCores :: Int,
  16. optLog :: Bool
  17. }
  18. deriving Show
  19. startOptions = Options { optFile = [],
  20. optTime = Nothing,
  21. optMem = Nothing,
  22. optPowerPhrase = Nothing,
  23. optSeedNumber = 0,
  24. optCores = 1,
  25. optLog = True
  26. }
  27. options :: [ OptDescr (Options -> IO Options) ]
  28. options = [ Option "f" ["filename"]
  29. (ReqArg
  30. (\arg opt -> return opt { optFile = (arg:(optFile opt)) })
  31. "FILE")
  32. "Input Filename"
  33. , Option "t" ["timelimit"]
  34. (ReqArg
  35. (\arg opt -> return opt { optTime = Just (read arg) })
  36. "TIMELIMIT")
  37. "Time Limit in seconds"
  38. , Option "m" ["memlimit"]
  39. (ReqArg
  40. (\arg opt -> return opt { optMem = Just (read arg) })
  41. "MEMLIMIT")
  42. "Memory Limit in MB"
  43. , Option "p" ["phrasepower"]
  44. (ReqArg
  45. (\arg opt -> return opt { optPowerPhrase = Just arg })
  46. "POWERPHRASE")
  47. "Power Phrase"
  48. , Option "n" ["seednumber"]
  49. (ReqArg
  50. (\arg opt -> return opt { optSeedNumber = (read arg) })
  51. "SEEDNUMBER")
  52. "Seed Number"
  53. , Option "c" ["cores"]
  54. (ReqArg
  55. (\arg opt -> return opt { optCores = (read arg) })
  56. "CORES")
  57. "Cores"
  58. , Option "l" ["log"]
  59. (NoArg
  60. (\ opt -> return opt { optLog = True }))
  61. "Log"
  62. ]
  63. parseArgs :: [String] -> IO Options
  64. parseArgs args = do
  65. let (actions, _, _) = getOpt RequireOrder options args
  66. opts <- foldl (>>=) (return startOptions) actions
  67. return opts