drain and pump
[ekitaihs.git] / Parse.hs
1 module Parse ( ekitaiOpts, optTimeStep ) where
2
3 import System.Console.GetOpt
4 import System.Environment
5 import System.Exit
6 import Data.Maybe
7 import Data.Either
8
9 data Options = Options
10     { optHelp       :: Bool
11     , optColor      :: Bool
12     , optTimeStep   :: Int
13     }
14
15 defaultOptions = Options
16     { optHelp       = False
17     , optColor      = False
18     , optTimeStep   = 50000
19     }
20
21 options :: [OptDescr (Options -> Options)]
22 options =
23     [ Option ['h'] ["help"]
24         (NoArg (\opts -> opts { optHelp = True }))
25         "display's this message"
26     , Option ['c'] ["color", "colour"]
27         (NoArg (\opts -> opts { optColor = True }))
28         "enables color"
29     , Option ['t'] ["timestep"]
30         (ReqArg (\t opts -> opts { optTimeStep = read t :: Int }) "timestep")
31         "sets the simulation time step"
32     ]
33
34 ekitaiOpts :: [String] -> IO (Options, String)
35 ekitaiOpts argv =
36     case getOpt RequireOrder options argv of
37         (o, [n], []) -> return (foldl (flip id) defaultOptions o, n)
38         (o, _, [])   -> ioError $ userError $ "missing input file"
39         (_, _, errs) -> ioError $ userError $ concat errs 
40
41 -- ++ usageInfo header options
42 --         where header = "Usage: ekitai [OPTIONS...] simfile"
43
44         -- (o, _, [])   -> do
45         --     opts <- (foldl (flip id) defaultOptions o)
46         --     if optHelp then userError $ concat usageInfo "Usage: ekitai [OPTIONS...] simfile" options
47         --     else ioError $ userError $ "missing input file"