diff --git a/Options.hs b/Options.hs new file mode 100644 index 000000000..e301bc955 --- /dev/null +++ b/Options.hs @@ -0,0 +1,25 @@ +module Options where + +import System.Console.GetOpt +import Data.Maybe ( fromMaybe ) + +data Flag = File String | Version deriving Show + +options :: [OptDescr Flag] +options = [ + Option ['f'] ["file"] (OptArg inp "FILE") "ledger file, or - to read stdin" + , Option ['v'] ["version"] (NoArg Version) "show version number" + ] + +inp :: Maybe String -> Flag +inp = File . fromMaybe "stdin" + +getOptions :: [String] -> IO ([Flag], [String]) +getOptions argv = + case getOpt Permute options argv of + (o,n,[] ) -> return (o,n) + (_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options)) + where header = "Usage: hledger [OPTIONS]" + +get_content :: Flag -> Maybe String +get_content (File s) = Just s diff --git a/hledger.hs b/hledger.hs index c27b288d5..fb260700e 100644 --- a/hledger.hs +++ b/hledger.hs @@ -1,3 +1,4 @@ +#!/usr/bin/runhaskell -- hledger - ledger-compatible money management utilities -- GPLv3, (c) Simon Michael & contributors, -- ledger is at http://newartisans.com/ledger.html @@ -104,6 +105,7 @@ import Test.QuickCheck import Test.HUnit --import TildeExpand -- confuses my ghc 6.7 +import System (getArgs) import System.Directory (getHomeDirectory) import System.Environment (getEnv) import Control.Exception (assert) @@ -112,6 +114,8 @@ import qualified Text.ParserCombinators.Parsec.Token as P import Text.ParserCombinators.Parsec.Language import Text.Printf +import Options + -- sample data sample_entry = "\ @@ -454,4 +458,10 @@ register = do Left err -> do putStr "ledger parse error at "; print err Right l -> putStr $ showLedger l -main = do register +main = do + (opts, args) <- getArgs >>= getOptions + putStr "options: "; print opts + putStr "arguments: "; print args + if "reg" `elem` args + then register + else return ()