Feature: Add ability for subparsers to consume extra arguments
This commit is contained in:
parent
080a79fdee
commit
77e50f7aec
@ -44,6 +44,7 @@ struct mSubParser {
|
|||||||
bool (*parse)(struct mSubParser* parser, int option, const char* arg);
|
bool (*parse)(struct mSubParser* parser, int option, const char* arg);
|
||||||
bool (*parseLong)(struct mSubParser* parser, const char* option, const char* arg);
|
bool (*parseLong)(struct mSubParser* parser, const char* option, const char* arg);
|
||||||
void (*apply)(struct mSubParser* parser, struct mCoreConfig* config);
|
void (*apply)(struct mSubParser* parser, struct mCoreConfig* config);
|
||||||
|
bool (*handleExtraArg)(struct mSubParser* parser, const char* arg);
|
||||||
const char* extraOptions;
|
const char* extraOptions;
|
||||||
const struct mOption* longOptions;
|
const struct mOption* longOptions;
|
||||||
void* opts;
|
void* opts;
|
||||||
|
@ -187,7 +187,21 @@ bool mArgumentsParse(struct mArguments* args, int argc, char* const* argv, struc
|
|||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
return false;
|
for (j = 0; j < argc; ++j) {
|
||||||
|
bool handled = false;
|
||||||
|
for (i = 0; i < nSubparsers; ++i) {
|
||||||
|
if (!subparsers[i].handleExtraArg) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
handled = subparsers[i].handleExtraArg(&subparsers[i], argv[j]);
|
||||||
|
if (handled) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!handled) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (argc == 1) {
|
} else if (argc == 1) {
|
||||||
args->fname = strdup(argv[0]);
|
args->fname = strdup(argv[0]);
|
||||||
} else {
|
} else {
|
||||||
@ -303,6 +317,7 @@ void mSubParserGraphicsInit(struct mSubParser* parser, struct mGraphicsOpts* opt
|
|||||||
parser->apply = _applyGraphicsArgs;
|
parser->apply = _applyGraphicsArgs;
|
||||||
parser->extraOptions = GRAPHICS_OPTIONS;
|
parser->extraOptions = GRAPHICS_OPTIONS;
|
||||||
parser->longOptions = _graphicsLongOpts;
|
parser->longOptions = _graphicsLongOpts;
|
||||||
|
parser->handleExtraArg = NULL;
|
||||||
opts->multiplier = 0;
|
opts->multiplier = 0;
|
||||||
opts->fullscreen = false;
|
opts->fullscreen = false;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user