diff -r 95efe37482e3 -r 4e78ad846fb6 gameServer/Opts.hs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gameServer/Opts.hs Wed Feb 18 15:04:40 2009 +0000 @@ -0,0 +1,37 @@ +module Opts +( + getOpts, +) where + +import System +import System.Console.GetOpt +import Network +import Data.Maybe ( fromMaybe ) +import CoreTypes +import Utils + +options :: [OptDescr (ServerInfo -> ServerInfo)] +options = [ + Option ['p'] ["port"] (ReqArg readListenPort "PORT") "listen on PORT", + Option ['d'] ["dedicated"] (ReqArg readDedicated "BOOL") "start as dedicated (True or False)", + Option [] ["password"] (ReqArg readPassword "STRING") "admin password" + ] + +readListenPort, readDedicated, readPassword :: String -> ServerInfo -> ServerInfo +readListenPort str opts = opts{listenPort = readPort} + where + readPort = fromInteger $ fromMaybe 46631 (maybeRead str :: Maybe Integer) + +readDedicated str opts = opts{isDedicated = readDedicated} + where + readDedicated = fromMaybe True (maybeRead str :: Maybe Bool) + +readPassword str opts = opts{adminPassword = str} + +getOpts :: ServerInfo -> IO ServerInfo +getOpts opts = do + args <- getArgs + case getOpt Permute options args of + (o, [], []) -> return $ foldr ($) opts o + (_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options)) + where header = "Usage: newhwserv [OPTION...]"