summaryrefslogtreecommitdiff
path: root/cpp/src/IcePack/Client.cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2004-12-16 03:15:51 +0000
committerMichi Henning <michi@zeroc.com>2004-12-16 03:15:51 +0000
commitb5c3efca572afd6c9cadbc87e9f4c068d312d928 (patch)
treee34f481e7ed94f176fcbe266767fea241dc3c764 /cpp/src/IcePack/Client.cpp
parentremove now returns null if the key is not found (diff)
downloadice-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.cpp130
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