From c9fb11bd60a2170fb896d77ff8d7706f563ad597 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Mon, 8 Nov 2004 06:43:11 +0000 Subject: updated to version 2.0 --- option.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 option.h (limited to 'option.h') diff --git a/option.h b/option.h new file mode 100644 index 00000000..2e4d7599 --- /dev/null +++ b/option.h @@ -0,0 +1,44 @@ +#ifndef _OPTION_H +#define _OPTION_H + +#include +#include +#include + +struct option_handler { + bool handled; + option_handler() : handled(false) {} + virtual void operator()(const char * arg = NULL) = 0; +}; + +struct option_t { + char short_opt; + std::string long_opt; + bool wants_arg; + option_handler * handler; + + option_t() : short_opt(0), wants_arg(false), handler(NULL) {} +}; + +class option_error : public std::exception { + std::string reason; + public: + option_error(const std::string& _reason) throw() : reason(_reason) {} + virtual ~option_error() throw() {} + + virtual const char* what() const throw() { + return reason.c_str(); + } +}; + +void add_option_handler(std::list& options, const std::string& label, + const std::string& opt_chars, option_handler& option); +bool process_option(std::list& options, + const std::string& opt, const char * arg = NULL); +void process_arguments(std::list& options, + int argc, char ** argv, const bool anywhere, + std::list& args); +void process_environment(std::list& options, + char ** envp, const std::string& tag); + +#endif // _OPTION_H -- cgit v1.2.3