--- SIDPlayer/src/prefs.cpp 2001/01/21 18:04:46 1.4 +++ SIDPlayer/src/prefs.cpp 2001/04/01 12:13:49 1.5 @@ -48,82 +48,76 @@ static prefs_desc *find_prefs_desc(const * Initialize preferences */ -void PrefsInit(int argc, char **argv) +void PrefsInit(int &argc, char **&argv) { // Set defaults AddPrefsDefaults(); - // Override prefs with command line arguments - argc--; argv++; - for (; argc>0; argc--, argv++) { + // Override prefs with command line options + for (int i=1; i= argc) { + fprintf(stderr, "Option '%s' must be followed by a value\n", option); + continue; } + const char *value = argv[i]; + argv[i] = NULL; // Add/replace prefs item switch (d->type) { case TYPE_STRING: - if (argc < 2) { - printf("WARNING: Argument '%s' must be followed by value\n", *argv); - break; - } - argc--; argv++; if (d->multiple) - PrefsAddString(keyword, *argv); + PrefsAddString(keyword, value); else - PrefsReplaceString(keyword, *argv); + PrefsReplaceString(keyword, value); break; case TYPE_BOOLEAN: { - bool new_value; - if (negated_bool) - new_value = false; - else if (argc > 1 && argv[1][0] != '-') { - if (!strcmp(argv[1], "true") || !strcmp(argv[1], "on") || !strcmp(argv[1], "yes")) { - new_value = true; - argc--; argv++; - } else if (!strcmp(argv[1], "false") || !strcmp(argv[1], "off") || !strcmp(argv[1], "no")) { - new_value = false; - argc--; argv++; - } else - new_value = true; - } else - new_value = true; - PrefsReplaceBool(keyword, new_value); + if (!strcmp(value, "true") || !strcmp(value, "on") || !strcmp(value, "yes")) + PrefsReplaceBool(keyword, true); + else if (!strcmp(value, "false") || !strcmp(value, "off") || !strcmp(value, "no")) + PrefsReplaceBool(keyword, false); + else + fprintf(stderr, "Value for option '%s' must be 'true' or 'false'\n", option); break; } case TYPE_INT32: - if (argc < 2) { - printf("WARNING: Argument '%s' must be followed by value\n", *argv); - break; - } - argc--; argv++; - PrefsReplaceInt32(keyword, atoi(*argv)); + PrefsReplaceInt32(keyword, atoi(value)); break; default: break; } } + + // Remove processed arguments + for (int i=1; i i) { + k -= i; + for (int j=i+k; j