/* libopt++/src/tests/simple.cpp * * (c)2006, Laurence Withers. Released under the GNU GPL. See file * COPYING for more information / terms of license. */ #include "opt" #include class Opt : private opt::Parser { public: Opt(int argc, const char* const* argv) : quiet(false) { addOption(OptSummary, false, "print-summary", 0, "Displays a one-line summary of usage."); addOption(OptHelp, false, "help", 'h', "Displays options and usage."); addOption(OptPrint, true, "print", 'p', "Prints a string."); addOption(OptPrint, true, "", 'P', "As -p."); parse(argc, argv); } virtual ~Opt() throw() { } void displayArgs() { if(quiet) return; std::cout << "\nprogName = " << progName << "\nprogPath = " << progPath << "\nprogDir = " << progDir << "\n"; for(uint i = 0, end = args.size(); i != end; ++i) std::cout << "Argument: " << args[i] << "\n"; } private: enum { OptSummary, OptHelp, OptPrint }; bool quiet; virtual void option(int result, const std::string& opt) { switch(result) { case OptSummary: std::cout << "A simple example program with a couple of options.\n"; quiet = true; break; case OptHelp: std::cout << "Usage:\n\n " << progName << " [options] args\n\n"; showHelp(std::cout); break; default: std::cerr << "Unrecognised option " << result << " (" << opt << ") -- this is a program bug.\n"; } } virtual void option(int result, const std::string& opt, const std::string& arg) { switch(result) { case OptPrint: std::cout << opt << ": " << arg << "\n"; break; default: std::cerr << "Unrecognised option " << result << " (" << opt << ' ' << arg << ") -- this is a program bug.\n"; } } }; int main(int argc, char* argv[]) { int ret = 0; try { Opt o(argc, argv); o.displayArgs(); } catch(std::exception& e) { std::cerr << e.what() << std::endl; ret = 1; } catch(...) { std::cerr << "Unknown exception caught." << std::endl; ret = 1; } return ret; } /* options for text editors kate: replace-trailing-space-save true; space-indent true; tab-width 4; */