diff -r b6ab9fea22fe -r d20e6e8928e3 netserver/Opts.hs --- a/netserver/Opts.hs Mon Oct 20 12:58:16 2008 +0000 +++ b/netserver/Opts.hs Mon Oct 20 15:59:05 2008 +0000 @@ -5,26 +5,40 @@ import Network import Data.Maybe ( fromMaybe ) import Miscutils - -data Flag = ListenPort PortNumber - deriving Show +import System.IO.Unsafe -options :: [OptDescr Flag] +data GlobalOptions = + GlobalOptions + { + isDedicated :: Bool, + serverMessage :: String, + listenPort :: PortNumber + } +defaultMessage = "

http://www.hedgewars.org/

" +defaultOptions = (GlobalOptions False defaultMessage 46631) + +options :: [OptDescr (GlobalOptions -> GlobalOptions)] options = [ - Option ['p'] ["port"] (OptArg readPort "PORT") "listen on PORT" + Option ['p'] ["port"] (ReqArg readListenPort "PORT") "listen on PORT", + Option ['d'] ["dedicated"] (ReqArg readDedicated "BOOL") "start as dedicated (True or False)" ] -readPort :: Maybe String -> Flag -readPort str = ListenPort $ fromInteger (fromMaybe 46631 (maybeRead (fromMaybe "46631" str) :: Maybe Integer)) +readListenPort, readDedicated :: String -> GlobalOptions -> GlobalOptions +readListenPort str opts = opts{listenPort = readPort} + where + readPort = fromInteger $ fromMaybe 46631 (maybeRead str :: Maybe Integer) -opts :: IO [Flag] +readDedicated str opts = opts{isDedicated = readDedicated} + where + readDedicated = fromMaybe True (maybeRead str :: Maybe Bool) + +opts :: IO GlobalOptions opts = do args <- getArgs case getOpt Permute options args of - (o, [], []) -> return o + (o, [], []) -> return $ foldr ($) defaultOptions o (_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options)) where header = "Usage: newhwserv [OPTION...]" -getPort :: [Flag] -> PortNumber -getPort [] = 46631 -getPort (ListenPort a:flags) = a +{-# NOINLINE globalOptions #-} +globalOptions = unsafePerformIO opts