packages feed

kevin-0.10.0: src/Main.hs

import Kevin
import Kevin.Version
import System.Console.GetOpt
import System.Environment

defaultPort :: Int
defaultPort = 6669

data Flag = Port Int | Version | Help deriving (Eq)

opts :: [OptDescr Flag]
opts = [ Option "p" ["port"] (ReqArg (Port . read) "number") $ "local port to run the server on (defaults to " ++ show defaultPort ++ ")"
       , Option "h" ["help"] (NoArg Help) "print this message"
       , Option "v" ["version"] (NoArg Version) "show kevin's version number" ]

header :: String
header = "Usage: kevin [options...]"

getPort :: [Flag] -> Int
getPort (Port x:_) = x
getPort (_:xs)     = getPort xs
getPort []         = defaultPort

main :: IO ()
main = do args <- getArgs
          case getOpt Permute opts args of (flags, _, [])     -> case flags of f | Help `elem` f    -> putStrLn $ usageInfo header opts
                                                                                 | Version `elem` f -> putStrLn $ "kevin version " ++ showVersion version
                                                                                 | otherwise        -> kevinServer $ getPort flags
                                           (_, _, msgs@(_:_)) -> putStrLn $ concat msgs ++ usageInfo header opts