Make command line arguments more dynamic

This commit is contained in:
Jeffrey Pfau 2014-04-20 21:41:21 -07:00
parent 7334b89833
commit 5b300bbcff
3 changed files with 29 additions and 4 deletions

View File

@ -15,12 +15,16 @@ static const char* _defaultFilename = "test.rom";
static const struct option _options[] = {
{ "bios", 1, 0, 'b' },
#ifdef USE_CLI_DEBUGGER
{ "debug", 1, 0, 'd' },
#endif
#ifdef USE_GDB_STUB
{ "gdb", 1, 0, 'g' },
#endif
{ 0, 0, 0, 0 }
};
int parseCommandArgs(struct StartupOptions* opts, int argc, char* const* argv) {
int parseCommandArgs(struct StartupOptions* opts, int argc, char* const* argv, int hasGraphics) {
memset(opts, 0, sizeof(*opts));
opts->fd = -1;
opts->biosFd = -1;
@ -30,7 +34,19 @@ int parseCommandArgs(struct StartupOptions* opts, int argc, char* const* argv) {
int multiplier = 1;
int ch;
while ((ch = getopt_long(argc, argv, "234b:dfg", _options, 0)) != -1) {
char options[64] =
"b:"
#ifdef USE_CLI_DEBUGGER
"d"
#endif
#ifdef USE_GDB_STUB
"g"
#endif
;
if (hasGraphics) {
strncat(options, "234f", sizeof(options) - strlen(options) - 1);
}
while ((ch = getopt_long(argc, argv, options, _options, 0)) != -1) {
switch (ch) {
case 'b':
opts->biosFd = open(optarg, O_RDONLY);
@ -55,12 +71,21 @@ int parseCommandArgs(struct StartupOptions* opts, int argc, char* const* argv) {
break;
#endif
case '2':
if (multiplier != 1) {
return 0;
}
multiplier = 2;
break;
case '3':
if (multiplier != 1) {
return 0;
}
multiplier = 3;
break;
case '4':
if (multiplier != 1) {
return 0;
}
multiplier = 4;
break;
default:

View File

@ -30,7 +30,7 @@ struct StartupOptions {
int debugAtStart;
};
int parseCommandArgs(struct StartupOptions* opts, int argc, char* const* argv);
int parseCommandArgs(struct StartupOptions* opts, int argc, char* const* argv, int hasGraphics);
struct ARMDebugger* createDebugger(struct StartupOptions* opts);
void usage(const char* arg0);

View File

@ -62,7 +62,7 @@ int main(int argc, char** argv) {
GBAVideoSoftwareRendererCreate(&renderer.d);
struct StartupOptions opts;
if (!parseCommandArgs(&opts, argc, argv)) {
if (!parseCommandArgs(&opts, argc, argv, 1)) {
usage(argv[0]);
return 1;
}