packages feed

prolog-graph-0.1.0.2: ParseArgs.hs

{-# 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)