{-# LANGUAGE DeriveDataTypeable #-}
module ParseArgs (
parseArgs
) where
import System.Console.CmdArgs
import System.Environment (getProgName)
data Options = Options
{ query :: String
, file :: [String]
, output :: String
, positional :: [String]
}
deriving (Data, Typeable)
options = Options
{ query = def &= typ "QUERY" &= help "Set Prolog query (If not set, first positional argument is used)"
, file = def &= typ "FILE" &= help "Consult file before executing query"
, output = "graph.png" &= typ "FILE" &= help "Save generated image to file (default: 'graph.png')"
, positional = def &= args &= typ "QUERY [FILE]..."
}
&= versionArg [ignore]
&= helpArg [name "h"]
parseArgs = do
opts <- getProgName >>= cmdArgs . ((options &=) . program)
return $ case opts of
Options q fs o [] -> (q, fs, o)
Options _ fs o [q] -> (q, fs, o)
Options _ fs o (q:fs') -> (q, fs++fs', o)