88 unsigned long long nargs;
92 if (!(flags & ARGV_NO_PRINT)) \
96 srcIndex = dstIndex = 0;
100 srcIndex = dstIndex = 1;
105 curArg = argv[srcIndex];
109 length = strlen(curArg);
118 for (
unsigned int i = 0; i < 2; ++i) {
125 for (; infoPtr->type !=
ARGV_END; ++infoPtr) {
126 if (infoPtr->key !=
nullptr) {
127 bool stop_for_loop =
false;
128 if ((infoPtr->key[1] != c) || (strncmp(infoPtr->key, curArg, length) != 0)) {
129 stop_for_loop =
true;
131 if (!stop_for_loop) {
132 if (infoPtr->key[length] == 0) {
137 stop_for_loop =
true;
139 if (!stop_for_loop) {
140 if (matchPtr !=
nullptr) {
141 FPRINTF(stderr,
"ambiguous option \"%s\"\n", curArg);
150 if (matchPtr ==
nullptr) {
158 FPRINTF(stderr,
"unrecognized argument \"%s\"\n", curArg);
160 argv[dstIndex] = curArg;
170 switch (infoPtr->type) {
173 *((
int *)infoPtr->dst) = 1;
176 *((
bool *)infoPtr->dst) =
true;
179 nargs = (uintptr_t)infoPtr->src;
182 for (
unsigned long i = 0; i < nargs; ++i) {
187 char *endPtr =
nullptr;
189 *(((
int *)infoPtr->dst) + i) =
static_cast<int>(strtol(argv[srcIndex], &endPtr, 0));
190 if ((endPtr == argv[srcIndex]) || (*endPtr != 0)) {
191 FPRINTF(stderr,
"expected integer argument for \"%s\" but got \"%s\"\n", infoPtr->key, argv[srcIndex]);
200 nargs = (uintptr_t)infoPtr->src;
203 for (
unsigned long i = 0; i < nargs; ++i) {
208 char *endPtr =
nullptr;
210 *(((
long *)infoPtr->dst) + i) = strtol(argv[srcIndex], &endPtr, 0);
211 if ((endPtr == argv[srcIndex]) || (*endPtr != 0)) {
212 FPRINTF(stderr,
"expected long argument for \"%s\" but got \"%s\"\n", infoPtr->key, argv[srcIndex]);
221 nargs = (uintptr_t)infoPtr->src;
224 for (
unsigned long i = 0; i < nargs; ++i) {
229 *(((
const char **)infoPtr->dst) + i) = argv[srcIndex];
236 *((
int *)infoPtr->dst) = dstIndex;
239 nargs = (uintptr_t)infoPtr->src;
242 for (
unsigned long i = 0; i < nargs; ++i) {
249 *(((
float *)infoPtr->dst) + i) =
static_cast<float>(strtod(argv[srcIndex], &endPtr));
250 if ((endPtr == argv[srcIndex]) || (*endPtr != 0)) {
251 FPRINTF(stderr,
"expected floating-point argument for \"%s\" but got\"%s\"\n", infoPtr->key,
261 nargs = (uintptr_t)infoPtr->src;
264 for (
unsigned long i = 0; i < nargs; ++i) {
271 *(((
double *)infoPtr->dst) + i) = strtod(argv[srcIndex], &endPtr);
272 if ((endPtr == argv[srcIndex]) || (*endPtr != 0)) {
273 FPRINTF(stderr,
"expected double-point argument for \"%s\" but got\"%s\"\n", infoPtr->key, argv[srcIndex]);
283 handlerProc1 = (int (*)(
const char *dst,
const char *key,
const char *argument))infoPtr->src;
285 if ((*handlerProc1)(infoPtr->dst, infoPtr->key, argv[srcIndex])) {
292 handlerProc2 = (int (*)(
const char *dst,
const char *key,
int valargc,
const char **argument))infoPtr->src;
294 argc = (*handlerProc2)(infoPtr->dst, infoPtr->key, argc, argv + srcIndex);
302 printUsage(argTable, flags);
306 FPRINTF(stderr,
"bad argument type %d in vpArgvInfo", infoPtr->type);
318 argv[dstIndex] = argv[srcIndex];
323 argv[dstIndex] = (
char *)
nullptr;
328 FPRINTF(stderr,
"\"%s\" option requires an additional argument\n", curArg);
515 const char *psz =
nullptr;
516 const char *pszParam =
nullptr;
519 psz = &(argv[iArg][0]);
522 chOpt = argv[iArg][1];
523 if (isalnum(chOpt) || ispunct(chOpt)) {
525 psz = strchr(validOpts, chOpt);
526 if (psz !=
nullptr) {
530 psz = &(argv[iArg][2]);
533 if (iArg + 1 < argc) {
534 psz = &(argv[iArg + 1][0]);
543 pszParam = &(argv[iArg][0]);
559 pszParam = &(argv[iArg][0]);
566 pszParam = &(argv[iArg][0]);
572 pszParam = &(argv[iArg][0]);