static m64p_error ParseCommandLineFinal(int argc, const char **argv) { int i; /* parse commandline options */ for (i = 1; i < argc; i++) { int ArgsLeft = argc - i - 1; if (strcmp(argv[i], "--noosd") == 0) { int Osd = 0; (*ConfigSetParameter)(l_ConfigCore, "OnScreenDisplay", M64TYPE_BOOL, &Osd); } else if (strcmp(argv[i], "--osd") == 0) { int Osd = 1; (*ConfigSetParameter)(l_ConfigCore, "OnScreenDisplay", M64TYPE_BOOL, &Osd); } else if (strcmp(argv[i], "--fullscreen") == 0) { int Fullscreen = 1; (*ConfigSetParameter)(l_ConfigVideo, "Fullscreen", M64TYPE_BOOL, &Fullscreen); } else if (strcmp(argv[i], "--windowed") == 0) { int Fullscreen = 0; (*ConfigSetParameter)(l_ConfigVideo, "Fullscreen", M64TYPE_BOOL, &Fullscreen); } else if (strcmp(argv[i], "--nospeedlimit") == 0) { int EnableSpeedLimit = 0; if (g_CoreAPIVersion < 0x020001) DebugMessage(M64MSG_WARNING, "core library doesn't support --nospeedlimit"); else { if ((*CoreDoCommand)(M64CMD_CORE_STATE_SET, M64CORE_SPEED_LIMITER, &EnableSpeedLimit) != M64ERR_SUCCESS) DebugMessage(M64MSG_ERROR, "core gave error while setting --nospeedlimit option"); } } else if ((strcmp(argv[i], "--corelib") == 0 || strcmp(argv[i], "--configdir") == 0 || strcmp(argv[i], "--datadir") == 0) && ArgsLeft >= 1) { /* these are handled in ParseCommandLineInitial */ i++; } else if (strcmp(argv[i], "--resolution") == 0 && ArgsLeft >= 1) { const char *res = argv[i+1]; int xres, yres; i++; if (sscanf(res, "%ix%i", &xres, &yres) != 2) DebugMessage(M64MSG_WARNING, "couldn't parse resolution '%s'", res); else { (*ConfigSetParameter)(l_ConfigVideo, "ScreenWidth", M64TYPE_INT, &xres); (*ConfigSetParameter)(l_ConfigVideo, "ScreenHeight", M64TYPE_INT, &yres); } } else if (strcmp(argv[i], "--cheats") == 0 && ArgsLeft >= 1) { if (strcmp(argv[i+1], "all") == 0) l_CheatMode = CHEAT_ALL; else if (strcmp(argv[i+1], "list") == 0) l_CheatMode = CHEAT_SHOW_LIST; else { l_CheatMode = CHEAT_LIST; l_CheatNumList = (char*) argv[i+1]; } i++; } else if (strcmp(argv[i], "--plugindir") == 0 && ArgsLeft >= 1) { g_PluginDir = argv[i+1]; i++; } else if (strcmp(argv[i], "--sshotdir") == 0 && ArgsLeft >= 1) { (*ConfigSetParameter)(l_ConfigCore, "ScreenshotPath", M64TYPE_STRING, argv[i+1]); i++; } else if (strcmp(argv[i], "--gfx") == 0 && ArgsLeft >= 1) { g_GfxPlugin = argv[i+1]; i++; } else if (strcmp(argv[i], "--audio") == 0 && ArgsLeft >= 1) { g_AudioPlugin = argv[i+1]; i++; } else if (strcmp(argv[i], "--input") == 0 && ArgsLeft >= 1) { g_InputPlugin = argv[i+1]; i++; } else if (strcmp(argv[i], "--rsp") == 0 && ArgsLeft >= 1) { g_RspPlugin = argv[i+1]; i++; } else if (strcmp(argv[i], "--emumode") == 0 && ArgsLeft >= 1) { int emumode = atoi(argv[i+1]); i++; if (emumode < 0 || emumode > 2) { DebugMessage(M64MSG_WARNING, "invalid --emumode value '%i'", emumode); continue; } if (emumode == 2 && !(g_CoreCapabilities & M64CAPS_DYNAREC)) { DebugMessage(M64MSG_WARNING, "Emulator core doesn't support Dynamic Recompiler."); emumode = 1; } (*ConfigSetParameter)(l_ConfigCore, "R4300Emulator", M64TYPE_INT, &emumode); } else if (strcmp(argv[i], "--savestate") == 0 && ArgsLeft >= 1) { l_SaveStatePath = argv[i+1]; i++; } else if (strcmp(argv[i], "--testshots") == 0 && ArgsLeft >= 1) { l_TestShotList = ParseNumberList(argv[i+1], NULL); i++; } else if (strcmp(argv[i], "--set") == 0 && ArgsLeft >= 1) { if (SetConfigParameter(argv[i+1]) != 0) return M64ERR_INPUT_INVALID; i++; } else if (strcmp(argv[i], "--core-compare-send") == 0) { l_CoreCompareMode = 1; } else if (strcmp(argv[i], "--core-compare-recv") == 0) { l_CoreCompareMode = 2; } else if (strcmp(argv[i], "--nosaveoptions") == 0) { l_SaveOptions = 0; } else if (ArgsLeft == 0) { /* this is the last arg, it should be a ROM filename */ l_ROMFilepath = argv[i]; return M64ERR_SUCCESS; } else if (strcmp(argv[i], "--verbose") == 0) { g_Verbose = 1; } else { DebugMessage(M64MSG_WARNING, "unrecognized command-line parameter '%s'", argv[i]); } /* continue argv loop */ } /* missing ROM filepath */ DebugMessage(M64MSG_ERROR, "no ROM filepath given"); return M64ERR_INPUT_INVALID; }
static m64p_error ParseCommandLineFinal(int argc, const char **argv) { int i; /* parse commandline options */ for (i = 1; i < argc; i++) { int ArgsLeft = argc - i - 1; if (strcmp(argv[i], "--noosd") == 0) { int Osd = 0; (*ConfigSetParameter)(l_ConfigCore, "OnScreenDisplay", M64TYPE_BOOL, &Osd); } else if (strcmp(argv[i], "--osd") == 0) { int Osd = 1; (*ConfigSetParameter)(l_ConfigCore, "OnScreenDisplay", M64TYPE_BOOL, &Osd); } else if (strcmp(argv[i], "--fullscreen") == 0) { int Fullscreen = 1; (*ConfigSetParameter)(l_ConfigVideo, "Fullscreen", M64TYPE_BOOL, &Fullscreen); } else if (strcmp(argv[i], "--windowed") == 0) { int Fullscreen = 0; (*ConfigSetParameter)(l_ConfigVideo, "Fullscreen", M64TYPE_BOOL, &Fullscreen); } else if ((strcmp(argv[i], "--corelib") == 0 || strcmp(argv[i], "--configdir") == 0 || strcmp(argv[i], "--datadir") == 0) && ArgsLeft >= 1) { /* these are handled in ParseCommandLineInitial */ i++; } else if (strcmp(argv[i], "--resolution") == 0 && ArgsLeft >= 1) { const char *res = argv[i+1]; int xres, yres; i++; if (sscanf(res, "%ix%i", &xres, &yres) != 2) fprintf(stderr, "Warning: couldn't parse resolution '%s'\n", res); else { (*ConfigSetParameter)(l_ConfigVideo, "ScreenWidth", M64TYPE_INT, &xres); (*ConfigSetParameter)(l_ConfigVideo, "ScreenHeight", M64TYPE_INT, &yres); } } else if (strcmp(argv[i], "--cheats") == 0 && ArgsLeft >= 1) { if (strcmp(argv[i+1], "all") == 0) l_CheatMode = CHEAT_ALL; else if (strcmp(argv[i+1], "list") == 0) l_CheatMode = CHEAT_SHOW_LIST; else { l_CheatMode = CHEAT_LIST; l_CheatNumList = ParseNumberList(argv[i+1], &l_CheatListLength); } i++; } else if (strcmp(argv[i], "--plugindir") == 0 && ArgsLeft >= 1) { g_PluginDir = argv[i+1]; i++; } else if (strcmp(argv[i], "--sshotdir") == 0 && ArgsLeft >= 1) { (*ConfigSetParameter)(l_ConfigCore, "ScreenshotPath", M64TYPE_STRING, argv[i+1]); i++; } else if (strcmp(argv[i], "--gfx") == 0 && ArgsLeft >= 1) { g_GfxPlugin = argv[i+1]; i++; } else if (strcmp(argv[i], "--audio") == 0 && ArgsLeft >= 1) { g_AudioPlugin = argv[i+1]; i++; } else if (strcmp(argv[i], "--input") == 0 && ArgsLeft >= 1) { g_InputPlugin = argv[i+1]; i++; } else if (strcmp(argv[i], "--rsp") == 0 && ArgsLeft >= 1) { g_RspPlugin = argv[i+1]; i++; } else if (strcmp(argv[i], "--emumode") == 0 && ArgsLeft >= 1) { int emumode = atoi(argv[i+1]); (*ConfigSetParameter)(l_ConfigCore, "R4300Emulator", M64TYPE_INT, &emumode); i++; } else if (strcmp(argv[i], "--testshots") == 0 && ArgsLeft >= 1) { l_TestShotList = ParseNumberList(argv[i+1], NULL); i++; } else if (strcmp(argv[i], "--core-compare-send") == 0) { l_CoreCompareMode = 1; } else if (strcmp(argv[i], "--core-compare-recv") == 0) { l_CoreCompareMode = 2; } else if (strcmp(argv[i], "--saveoptions") == 0) { l_SaveOptions = 1; } else if (ArgsLeft == 0) { /* this is the last arg, it should be a ROM filename */ l_ROMFilepath = argv[i]; return M64ERR_SUCCESS; } else if (strcmp(argv[i], "--verbose") == 0) { g_Verbose = 1; } else { fprintf(stderr, "Warning: unrecognized command-line parameter '%s'\n", argv[i]); } /* continue argv loop */ } /* missing ROM filepath */ fprintf(stderr, "Error: no ROM filepath given\n"); exit(2); return M64ERR_INTERNAL; }