// Copyright (c) 1999-2002 David Muse
// See the COPYING file for more information
#include <rudiments/commandline.h>
#include <rudiments/charstring.h>
#include <stdio.h>
#ifdef RUDIMENTS_NAMESPACE
namespace rudiments {
#endif
class commandlineprivate {
friend class commandline;
private:
int _argc;
char **_argv;
};
commandline::commandline(int argc, const char **argv) {
pvt=new commandlineprivate;
pvt->_argc=argc;
pvt->_argv=(char **)argv;
}
commandline::~commandline() {
delete pvt;
}
const char *commandline::getValue(const char *arg) const {
if (arg && arg[0]) {
const char *realarg=arg;
// arg can be "arg" "-arg" or "--arg"
if (realarg[0]=='-') {
realarg=realarg+1;
}
if (realarg[0]=='-') {
realarg=realarg+1;
}
size_t realarglen=charstring::length(realarg);
for (int i=1; i<pvt->_argc; i++) {
// look for "-arg value" or "--arg=value"
if (i<pvt->_argc-1 &&
pvt->_argv[i][0]=='-' &&
!charstring::compare(pvt->_argv[i]+1,realarg)) {
return pvt->_argv[i+1];
} else if (charstring::length(pvt->_argv[i])>=
realarglen+3 &&
!charstring::compare(pvt->_argv[i],
"--",2) &&
!charstring::compare(pvt->_argv[i]+2,
realarg,
realarglen) &&
pvt->_argv[i][2+realarglen]=='=') {
return pvt->_argv[i]+2+realarglen+1;
}
}
}
return "";
}
bool commandline::found(const char *arg) const {
if (arg && arg[0]) {
const char *realarg=arg;
// arg can be "arg" "-arg" or "--arg"
if (realarg[0]=='-') {
realarg=realarg+1;
}
if (realarg[0]=='-') {
realarg=realarg+1;
}
size_t realarglen=charstring::length(realarg);
for (int i=1; i<pvt->_argc; i++) {
// look for "-arg value" or "--arg=value"
if ((pvt->_argv[i][0]=='-' &&
!charstring::compare(
pvt->_argv[i]+1,realarg)) ||
(charstring::length(pvt->_argv[i])>=
realarglen+3 &&
!charstring::compare(pvt->_argv[i],
"--",2) &&
!charstring::compare(pvt->_argv[i]+2,
realarg,
realarglen) &&
pvt->_argv[i][2+realarglen]=='=')) {
return true;
}
}
}
return false;
}
#ifdef RUDIMENTS_NAMESPACE
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1