option processing
This commit is contained in:
		
							parent
							
								
									d0cf8f8840
								
							
						
					
					
						commit
						a316e901e7
					
				
							
								
								
									
										25
									
								
								Options.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Options.hs
									
									
									
									
									
										Normal file
									
								
							| @ -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 | ||||||
							
								
								
									
										12
									
								
								hledger.hs
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								hledger.hs
									
									
									
									
									
								
							| @ -1,3 +1,4 @@ | |||||||
|  | #!/usr/bin/runhaskell | ||||||
| -- hledger - ledger-compatible money management utilities | -- hledger - ledger-compatible money management utilities | ||||||
| -- GPLv3, (c) Simon Michael & contributors,  | -- GPLv3, (c) Simon Michael & contributors,  | ||||||
| -- ledger is at http://newartisans.com/ledger.html | -- ledger is at http://newartisans.com/ledger.html | ||||||
| @ -104,6 +105,7 @@ import Test.QuickCheck | |||||||
| import Test.HUnit | import Test.HUnit | ||||||
| 
 | 
 | ||||||
| --import TildeExpand -- confuses my ghc 6.7 | --import TildeExpand -- confuses my ghc 6.7 | ||||||
|  | import System (getArgs) | ||||||
| import System.Directory (getHomeDirectory) | import System.Directory (getHomeDirectory) | ||||||
| import System.Environment (getEnv) | import System.Environment (getEnv) | ||||||
| import Control.Exception (assert) | import Control.Exception (assert) | ||||||
| @ -112,6 +114,8 @@ import qualified Text.ParserCombinators.Parsec.Token as P | |||||||
| import Text.ParserCombinators.Parsec.Language | import Text.ParserCombinators.Parsec.Language | ||||||
| import Text.Printf | import Text.Printf | ||||||
| 
 | 
 | ||||||
|  | import Options | ||||||
|  | 
 | ||||||
| -- sample data | -- sample data | ||||||
| 
 | 
 | ||||||
| sample_entry = "\ | sample_entry = "\ | ||||||
| @ -454,4 +458,10 @@ register = do | |||||||
|     Left err -> do putStr "ledger parse error at "; print err |     Left err -> do putStr "ledger parse error at "; print err | ||||||
|     Right l  -> putStr $ showLedger l |     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 () | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user