static int amiga_parse_option(const char *option, const char *value, int type) { // some strings are modified during parsing char *value2 = strdup(value); int result = cfgfile_parse_option(&currprefs, (char*) option, (char*) value2, type); free(value2); write_log("set option \"%s\" to \"%s\" (result: %d)\n", option, value, result); if (result != 1) { gui_message("Option failed: %s = %s", option, value); amiga_log_warning("failed to set option \"%s\" to \"%s\" " "(result: %d)\n", option, value, result); } return result; }
static void parse_cmdline (int argc, TCHAR **argv) { int i; for (i = 1; i < argc; i++) { if (!_tcsncmp (argv[i], _T("-diskswapper="), 13)) { TCHAR *txt = parsetextpath (argv[i] + 13); parse_diskswapper (txt); xfree (txt); } else if (_tcsncmp (argv[i], _T("-cfgparam="), 10) == 0) { ; } else if (_tcscmp (argv[i], _T("-cfgparam")) == 0) { if (i + 1 < argc) i++; } else if (_tcsncmp (argv[i], _T("-config="), 8) == 0) { TCHAR *txt = parsetextpath (argv[i] + 8); currprefs.mountitems = 0; target_cfgfile_load (&currprefs, txt, -1, 0); xfree (txt); } else if (_tcsncmp (argv[i], _T("-statefile="), 11) == 0) { #ifdef SAVESTATE TCHAR *txt = parsetextpath (argv[i] + 11); savestate_state = STATE_DORESTORE; _tcscpy (savestate_fname, txt); xfree (txt); #else write_log (_T("Option -statefile ignored:\n")); write_log (_T("-> puae has been configured with --disable-save-state\n")); #endif // SAVESTATE } else if (_tcscmp (argv[i], _T("-f")) == 0) { /* Check for new-style "-f xxx" argument, where xxx is config-file */ if (i + 1 == argc) { write_log (_T("Missing argument for '-f' option.\n")); } else { TCHAR *txt = parsetextpath (argv[++i]); currprefs.mountitems = 0; target_cfgfile_load (&currprefs, txt, -1, 0); xfree (txt); } } else if (_tcscmp (argv[i], _T("-s")) == 0) { if (i + 1 == argc) write_log (_T("Missing argument for '-s' option.\n")); else cfgfile_parse_line (&currprefs, argv[++i], 0); } else if (_tcscmp (argv[i], _T("-h")) == 0 || _tcscmp (argv[i], _T("-help")) == 0) { usage (); exit (0); } else if (_tcsncmp (argv[i], _T("-cdimage="), 9) == 0) { TCHAR *txt = parsetextpath (argv[i] + 9); TCHAR *txt2 = xmalloc(TCHAR, _tcslen(txt) + 2); _tcscpy(txt2, txt); if (_tcsrchr(txt2, ',') != NULL) _tcscat(txt2, _T(",")); cfgfile_parse_option (&currprefs, _T("cdimage0"), txt2, 0); xfree(txt2); xfree (txt); } else { if (argv[i][0] == '-' && argv[i][1] != '\0') { const TCHAR *arg = argv[i] + 2; int extra_arg = *arg == '\0'; if (extra_arg) arg = i + 1 < argc ? argv[i + 1] : 0; if (parse_cmdline_option (&currprefs, argv[i][1], arg) && extra_arg) i++; } } } }
static void parse_cmdline (int argc, TCHAR **argv) { int i; static bool started; bool firstconfig = true; bool loaded = false; // only parse command line when starting for the first time if (started) return; started = true; for (i = 1; i < argc; i++) { if (!_tcsncmp (argv[i], _T("-diskswapper="), 13)) { TCHAR *txt = parsetextpath (argv[i] + 13); parse_diskswapper (txt); xfree (txt); } else if (_tcsncmp (argv[i], _T("-cfgparam="), 10) == 0) { ; } else if (_tcscmp (argv[i], _T("-cfgparam")) == 0) { if (i + 1 < argc) i++; } else if (_tcsncmp (argv[i], _T("-config="), 8) == 0) { TCHAR *txt = parsetextpath (argv[i] + 8); currprefs.mountitems = 0; target_cfgfile_load (&currprefs, txt, firstconfig ? CONFIG_TYPE_ALL : CONFIG_TYPE_HARDWARE | CONFIG_TYPE_HOST | CONFIG_TYPE_NORESET, 0); xfree (txt); firstconfig = false; loaded = true; } else if (_tcsncmp (argv[i], _T("-statefile="), 11) == 0) { TCHAR *txt = parsetextpath (argv[i] + 11); savestate_state = STATE_DORESTORE; _tcscpy (savestate_fname, txt); xfree (txt); loaded = true; } else if (_tcscmp (argv[i], _T("-f")) == 0) { /* Check for new-style "-f xxx" argument, where xxx is config-file */ if (i + 1 == argc) { write_log (_T("Missing argument for '-f' option.\n")); } else { TCHAR *txt = parsetextpath (argv[++i]); currprefs.mountitems = 0; target_cfgfile_load (&currprefs, txt, firstconfig ? CONFIG_TYPE_ALL : CONFIG_TYPE_HARDWARE | CONFIG_TYPE_HOST | CONFIG_TYPE_NORESET, 0); xfree (txt); firstconfig = false; } loaded = true; } else if (_tcscmp (argv[i], _T("-s")) == 0) { if (i + 1 == argc) write_log (_T("Missing argument for '-s' option.\n")); else cfgfile_parse_line (&currprefs, argv[++i], 0); } else if (_tcscmp (argv[i], _T("-h")) == 0 || _tcscmp (argv[i], _T("-help")) == 0) { usage (); exit (0); } else if (_tcsncmp (argv[i], _T("-cdimage="), 9) == 0) { TCHAR *txt = parsetextpath (argv[i] + 9); TCHAR *txt2 = xmalloc(TCHAR, _tcslen(txt) + 2); _tcscpy(txt2, txt); if (_tcsrchr(txt2, ',') != NULL) _tcscat(txt2, _T(",")); cfgfile_parse_option (&currprefs, _T("cdimage0"), txt2, 0); xfree(txt2); xfree(txt); loaded = true; } else if (argv[i][0] == '-' && argv[i][1] != '\0') { const TCHAR *arg = argv[i] + 2; int extra_arg = *arg == '\0'; if (extra_arg) arg = i + 1 < argc ? argv[i + 1] : 0; if (parse_cmdline_option (&currprefs, argv[i][1], arg) && extra_arg) i++; } else if (i == argc - 1) { // if last config entry is an orphan and nothing else was loaded: // check if it is config file or statefile if (!loaded) { TCHAR *txt = parsetextpath(argv[i]); struct zfile *z = zfile_fopen(txt, _T("rb"), ZFD_NORMAL); if (z) { int type = zfile_gettype(z); zfile_fclose(z); if (type == ZFILE_CONFIGURATION) { currprefs.mountitems = 0; target_cfgfile_load(&currprefs, txt, CONFIG_TYPE_ALL, 0); } else if (type == ZFILE_STATEFILE) { savestate_state = STATE_DORESTORE; _tcscpy(savestate_fname, txt); } } xfree(txt); } } } }
static void parse_cmdline (int argc, TCHAR **argv) { int i; bool firstconfig = true; for (i = 1; i < argc; i++) { if (!_tcsncmp (argv[i], _T("-diskswapper="), 13)) { TCHAR *txt = parsetextpath (argv[i] + 13); parse_diskswapper (txt); xfree (txt); } else if (_tcsncmp (argv[i], _T("-cfgparam="), 10) == 0) { ; } else if (_tcscmp (argv[i], _T("-cfgparam")) == 0) { if (i + 1 < argc) i++; } else if (_tcsncmp (argv[i], _T("-config="), 8) == 0) { TCHAR *txt = parsetextpath (argv[i] + 8); currprefs.mountitems = 0; target_cfgfile_load (&currprefs, txt, firstconfig ? CONFIG_TYPE_ALL : CONFIG_TYPE_HARDWARE | CONFIG_TYPE_HOST | CONFIG_TYPE_NORESET, 0); xfree (txt); firstconfig = false; } else if (_tcsncmp (argv[i], _T("-statefile="), 11) == 0) { TCHAR *txt = parsetextpath (argv[i] + 11); savestate_state = STATE_DORESTORE; _tcscpy (savestate_fname, txt); xfree (txt); } else if (_tcscmp (argv[i], _T("-f")) == 0) { /* Check for new-style "-f xxx" argument, where xxx is config-file */ if (i + 1 == argc) { write_log (_T("Missing argument for '-f' option.\n")); } else { TCHAR *txt = parsetextpath (argv[++i]); currprefs.mountitems = 0; target_cfgfile_load (&currprefs, txt, firstconfig ? CONFIG_TYPE_ALL : CONFIG_TYPE_HARDWARE | CONFIG_TYPE_HOST | CONFIG_TYPE_NORESET, 0); xfree (txt); firstconfig = false; } } else if (_tcscmp (argv[i], _T("-s")) == 0) { if (i + 1 == argc) write_log (_T("Missing argument for '-s' option.\n")); else cfgfile_parse_line (&currprefs, argv[++i], 0); } else if (_tcscmp (argv[i], _T("-h")) == 0 || _tcscmp (argv[i], _T("-help")) == 0) { usage (); exit (0); } else if (_tcsncmp (argv[i], _T("-cdimage="), 9) == 0) { TCHAR *txt = parsetextpath (argv[i] + 9); TCHAR *txt2 = xmalloc(TCHAR, _tcslen(txt) + 2); _tcscpy(txt2, txt); if (_tcsrchr(txt2, ',') != NULL) _tcscat(txt2, _T(",")); cfgfile_parse_option (&currprefs, _T("cdimage0"), txt2, 0); xfree(txt2); xfree (txt); } else { if (argv[i][0] == '-' && argv[i][1] != '\0') { const TCHAR *arg = argv[i] + 2; int extra_arg = *arg == '\0'; if (extra_arg) arg = i + 1 < argc ? argv[i + 1] : 0; if (parse_cmdline_option (&currprefs, argv[i][1], arg) && extra_arg) i++; } } } }