deb pkg
[ekitaihs.git] / Parse.hs
1 module Parse ( ekitaiOpts, optTimeStep, hGetLines ) where
2
3 import System.Console.GetOpt
4 import System.Environment
5 import System.Exit
6 import System.IO
7 import Data.Maybe
8 import Data.Either
9
10 data Options = Options
11     { optTimeStep   :: Int
12     }
13
14 defaultOptions = Options
15     { optTimeStep   = 50000
16     }
17
18 options :: [OptDescr (Options -> Options)]
19 options =
20     [ Option ['t'] ["timestep"]
21         (ReqArg (\t opts -> opts { optTimeStep = read t :: Int }) "timestep")
22         "sets the simulation time step"
23     ]
24
25 ekitaiOpts :: [String] -> IO (Options, String)
26 ekitaiOpts argv =
27     case getOpt RequireOrder options argv of
28         (o, [n], []) -> return (foldl (flip id) defaultOptions o, n)
29         (o, _, [])   -> ioError $ userError $ "missing input file"
30         (_, _, errs) -> ioError $ userError $ concat errs 
31
32 -- reads in file by lines
33 hGetLines :: Handle -> IO [String]
34 hGetLines h = do
35     line <- hGetLine h
36     isEof <- hIsEOF h
37     if isEof then return [line]
38     else do
39         lines <- hGetLines h
40         return (line:lines)
41