diff options
author | Michi Henning <michi@zeroc.com> | 2004-12-16 03:15:51 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2004-12-16 03:15:51 +0000 |
commit | b5c3efca572afd6c9cadbc87e9f4c068d312d928 (patch) | |
tree | e34f481e7ed94f176fcbe266767fea241dc3c764 /cpp/src/IcePack/Client.cpp | |
parent | remove now returns null if the key is not found (diff) | |
download | ice-b5c3efca572afd6c9cadbc87e9f4c068d312d928.tar.bz2 ice-b5c3efca572afd6c9cadbc87e9f4c068d312d928.tar.xz ice-b5c3efca572afd6c9cadbc87e9f4c068d312d928.zip |
Changed command line parsing to use IceUtil::Options.
Diffstat (limited to 'cpp/src/IcePack/Client.cpp')
-rw-r--r-- | cpp/src/IcePack/Client.cpp | 130 |
1 files changed, 61 insertions, 69 deletions
diff --git a/cpp/src/IcePack/Client.cpp b/cpp/src/IcePack/Client.cpp index 3ba7d0c3267..af13f9c42d7 100644 --- a/cpp/src/IcePack/Client.cpp +++ b/cpp/src/IcePack/Client.cpp @@ -7,6 +7,7 @@ // // ********************************************************************** +#include <IceUtil/Options.h> #include <Ice/Application.h> #include <Ice/SliceChecksums.h> #include <IcePack/Parser.h> @@ -53,83 +54,74 @@ Client::run(int argc, char* argv[]) { string cpp("cpp"); string commands; - bool debug = false; - - int idx = 1; - while(idx < argc) + bool debug; + + IceUtil::Options opts; + opts.addOpt("h", "help"); + opts.addOpt("v", "version"); + opts.addOpt("D", "", IceUtil::Options::NeedArg, "", IceUtil::Options::Repeat); + opts.addOpt("U", "", IceUtil::Options::NeedArg, "", IceUtil::Options::Repeat); + opts.addOpt("I", "", IceUtil::Options::NeedArg, "", IceUtil::Options::Repeat); + opts.addOpt("e", "", IceUtil::Options::NeedArg, "", IceUtil::Options::Repeat); + opts.addOpt("d", "debug"); + + vector<string> args; + try { - if(strncmp(argv[idx], "-I", 2) == 0) - { - cpp += ' '; - cpp += argv[idx]; - - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strncmp(argv[idx], "-D", 2) == 0 || strncmp(argv[idx], "-U", 2) == 0) - { - cpp += ' '; - cpp += argv[idx]; + args = opts.parse(argc, argv); + } + catch(const IceUtil::Options::BadOpt& e) + { + cerr << e.reason << endl; + usage(); + return EXIT_FAILURE; + } - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; - } - else if(strcmp(argv[idx], "-h") == 0 || strcmp(argv[idx], "--help") == 0) - { - usage(); - return EXIT_SUCCESS; - } - else if(strcmp(argv[idx], "-v") == 0 || strcmp(argv[idx], "--version") == 0) - { - cout << ICE_STRING_VERSION << endl; - return EXIT_SUCCESS; - } - else if(strcmp(argv[idx], "-e") == 0) + if(opts.isSet("h") || opts.isSet("help")) + { + usage(); + return EXIT_SUCCESS; + } + if(opts.isSet("v") || opts.isSet("version")) + { + cout << ICE_STRING_VERSION << endl; + return EXIT_SUCCESS; + } + if(opts.isSet("D")) + { + vector<string> optargs = opts.argVec("D"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) { - if(idx + 1 >= argc) - { - cerr << appName() << ": argument expected for`" << argv[idx] << "'" << endl; - usage(); - return EXIT_FAILURE; - } - - commands += argv[idx + 1]; - commands += ';'; - - for(int i = idx ; i + 2 < argc ; ++i) - { - argv[i] = argv[i + 2]; - } - argc -= 2; + cpp += " -D" + *i; } - else if(strcmp(argv[idx], "-d") == 0 || strcmp(argv[idx], "--debug") == 0) + } + if(opts.isSet("U")) + { + vector<string> optargs = opts.argVec("U"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) { - debug = true; - for(int i = idx ; i + 1 < argc ; ++i) - { - argv[i] = argv[i + 1]; - } - --argc; + cpp += " -U" + *i; } - else if(argv[idx][0] == '-') + } + if(opts.isSet("I")) + { + vector<string> optargs = opts.argVec("I"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) { - cerr << appName() << ": unknown option `" << argv[idx] << "'" << endl; - usage(); - return EXIT_FAILURE; + cpp += " -I" + *i; } - else + } + if(opts.isSet("e")) + { + vector<string> optargs = opts.argVec("e"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) { - ++idx; + commands += *i + ";"; } } + debug = opts.isSet("d") || opts.isSet("debug"); - if(argc >= 2 && !commands.empty()) + if(!args.empty() && !commands.empty()) { cerr << appName() << ": `-e' option cannot be used if input files are given" << endl; usage(); @@ -192,17 +184,17 @@ Client::run(int argc, char* argv[]) } else // Process files given on the command line { - for(idx = 1 ; idx < argc ; ++idx) + for(vector<string>::const_iterator i = args.begin(); i != args.end(); ++i) { - ifstream test(argv[idx]); + ifstream test(i->c_str()); if(!test) { - cerr << appName() << ": can't open `" << argv[idx] << "' for reading: " << strerror(errno) << endl; + cerr << appName() << ": can't open `" << *i << "' for reading: " << strerror(errno) << endl; return EXIT_FAILURE; } test.close(); - string cmd = cpp + " " + argv[idx]; + string cmd = cpp + " " + *i; #ifdef _WIN32 FILE* cppHandle = _popen(cmd.c_str(), "r"); #else |