diff --git a/Source/Core/DolphinWX/MainNoGUI.cpp b/Source/Core/DolphinWX/MainNoGUI.cpp index 7cc814d05b..5ba439d19f 100644 --- a/Source/Core/DolphinWX/MainNoGUI.cpp +++ b/Source/Core/DolphinWX/MainNoGUI.cpp @@ -2,10 +2,10 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include #include #include #include -#include #include #include #include @@ -29,6 +29,7 @@ #include "Core/IOS/USB/Bluetooth/WiimoteDevice.h" #include "Core/State.h" +#include "UICommon/CommandLineParse.h" #include "UICommon/UICommon.h" #include "VideoCommon/RenderBase.h" @@ -379,37 +380,24 @@ static Platform* GetPlatform() int main(int argc, char* argv[]) { - int ch, help = 0; - struct option longopts[] = {{"exec", no_argument, nullptr, 'e'}, - {"help", no_argument, nullptr, 'h'}, - {"version", no_argument, nullptr, 'v'}, - {nullptr, 0, nullptr, 0}}; + std::string boot_filename; + auto parser = CommandLineParse::CreateParser(CommandLineParse::ParserOptions::OmitGUIOptions); + optparse::Values& options = CommandLineParse::ParseArguments(parser.get(), argc, argv); + std::vector args = parser->args(); - while ((ch = getopt_long(argc, argv, "eh?v", longopts, 0)) != -1) + if (options.is_set("exec")) { - switch (ch) - { - case 'e': - break; - case 'h': - case '?': - help = 1; - break; - case 'v': - fprintf(stderr, "%s\n", scm_rev_str.c_str()); - return 1; - } + boot_filename = static_cast(options.get("exec")); } - - if (help == 1 || argc == optind) + else if (args.size()) { - fprintf(stderr, "%s\n\n", scm_rev_str.c_str()); - fprintf(stderr, "A multi-platform GameCube/Wii emulator\n\n"); - fprintf(stderr, "Usage: %s [-e ] [-h] [-v]\n", argv[0]); - fprintf(stderr, " -e, --exec Load the specified file\n"); - fprintf(stderr, " -h, --help Show this help message\n"); - fprintf(stderr, " -v, --version Print version and exit\n"); - return 1; + boot_filename = args.front(); + args.erase(args.begin()); + } + else + { + parser->print_help(); + return 0; } platform = GetPlatform(); @@ -435,9 +423,9 @@ int main(int argc, char* argv[]) DolphinAnalytics::Instance()->ReportDolphinStart("nogui"); - if (!BootManager::BootCore(argv[optind])) + if (!BootManager::BootCore(boot_filename)) { - fprintf(stderr, "Could not boot %s\n", argv[optind]); + fprintf(stderr, "Could not boot %s\n", boot_filename.c_str()); return 1; }