module NLP.GenI.Main where
import Control.Applicative ((<$>))
import Data.IORef(newIORef)
import Data.Typeable( Typeable )
import Data.Version ( showVersion )
import System.Environment(getArgs, getProgName)
import Paths_GenI ( version )
import NLP.GenI.Console(consoleGeni)
import NLP.GenI.Configuration (treatArgs, optionsForStandardGenI, processInstructions,
usage, optionsSections, Params,
hasFlagP, DisableGuiFlg(..),
HelpFlg(..), VersionFlg(..),
readGlobalConfig, setLoggers
)
import NLP.GenI.Configuration(setFlagP)
import NLP.GenI ( ProgState(..), emptyProgState )
main :: IO ()
main = do
args <- getArgs
confArgs <- forceGuiFlag <$> (processInstructions =<< treatArgs optionsForStandardGenI args)
mainWithState (emptyProgState confArgs)
mainWithState :: ProgState -> IO ()
mainWithState pst = do
pname <- getProgName
maybe (return ()) setLoggers =<< readGlobalConfig
pstRef <- newIORef pst
let has :: (Typeable f, Typeable x) => (x -> f) -> Bool
has = flip hasFlagP (pa pst)
case () of
_ | has HelpFlg -> putStrLn (usage optionsSections pname)
| has VersionFlg -> putStrLn (pname ++ " " ++ showVersion version)
| otherwise -> consoleGeni pstRef
forceGuiFlag :: Params -> Params
forceGuiFlag = setFlagP DisableGuiFlg ()