Ann,
Annotate( (:=) ),
Data,
- Typeable,
(+=),
auto,
cmdArgs_,
"(regexed mode) place barriers in front/back of the regex " ++
"to prevent e.g. '127.0.0.1' from matching '127.0.0.100'"
+normalize_help :: String
+normalize_help =
+ "(reduced mode) normalize the output CIDRS, replacing any " ++
+ "masked bits by zeros; e.g. '127.0.0.1/8' -> '127.0.0.0/8'"
+
-- | The Args type represents the possible command-line options. The
-- duplication here seems necessary; CmdArgs' magic requires us to
-- define some things explicitly.
--
--- The application currently has six modes (if this number is wrong,
+-- The application currently has five modes (if this number is wrong,
-- it means I forgot to update the comment!), all of which take the
-- same options and arguments.
--
data Args =
- Regexed { barriers :: Bool } |
- Reduced { barriers :: Bool } |
- Duped { barriers :: Bool } |
- Diffed { barriers :: Bool } |
- Listed { barriers :: Bool } |
- Reversed { barriers :: Bool }
- deriving (Data, Show, Typeable)
+ Regexed { barriers :: Bool, normalize :: Bool } |
+ Reduced { barriers :: Bool, normalize :: Bool } |
+ Duped { barriers :: Bool, normalize :: Bool } |
+ Diffed { barriers :: Bool, normalize :: Bool } |
+ Listed { barriers :: Bool, normalize :: Bool }
+ deriving (Data, Show)
-- | Description of the 'Regexed' mode.
regexed_description :: String
listed_description =
"Enumerate the IP addresses contained within the input CIDRs."
--- | Description of the 'Reversed' mode.
-reversed_description :: String
-reversed_description =
- "Perform a reverse DNS (PTR) lookup on each IP address " ++
- "contained within the input CIDRs."
-
-
-- | We use explicit annotation here because if we use the magic
-- annotation, we have to duplicate the same argument definitions six
-- times.
--
arg_spec :: Annotate Ann
arg_spec =
- modes_ [regexed += auto, reduced, duped, diffed, listed, reversed]
+ modes_ [regexed += auto, reduced, duped, diffed, listed]
+= program program_name
+= summary my_summary
+= helpArg [explicit,
name "v",
groupname "Common flags"]
where
- make_mode :: (Bool -> Args) -> String -> (Annotate Ann)
+ make_mode :: (Bool -> Bool -> Args) -> String -> (Annotate Ann)
make_mode ctor desc =
- record (ctor def) [ barriers := def
- += groupname "Common flags"
- += help barriers_help ]
- += details [" " ++ desc]
+ record (ctor def def)
+ [ barriers := def
+ += groupname "Common flags"
+ += help barriers_help,
+ normalize := def
+ += groupname "Common flags"
+ += help normalize_help ]
+ += details [" " ++ desc]
regexed = make_mode Regexed regexed_description
reduced = make_mode Reduced reduced_description
duped = make_mode Duped duped_description
diffed = make_mode Diffed diffed_description
listed = make_mode Listed listed_description
- reversed = make_mode Reversed reversed_description
-- | This is the public interface; i.e. what main() should use to get
-- the command-line arguments.