yuzu_cmd: Order arguments alphabetically and port arguments from Qt

This commit is contained in:
german77 2023-02-04 11:32:14 -06:00
parent 8a33f8bd30
commit 3cd0b816cc
1 changed files with 37 additions and 20 deletions

View File

@ -62,13 +62,15 @@ __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
static void PrintHelp(const char* argv0) { static void PrintHelp(const char* argv0) {
std::cout << "Usage: " << argv0 std::cout << "Usage: " << argv0
<< " [options] <filename>\n" << " [options] <filename>\n"
"-c, --config Load the specified configuration file\n"
"-f, --fullscreen Start in fullscreen mode\n"
"-g, --game File path of the game to load\n"
"-h, --help Display this help and exit\n"
"-m, --multiplayer=nick:password@address:port" "-m, --multiplayer=nick:password@address:port"
" Nickname, password, address and port for multiplayer\n" " Nickname, password, address and port for multiplayer\n"
"-f, --fullscreen Start in fullscreen mode\n"
"-h, --help Display this help and exit\n"
"-v, --version Output version information and exit\n"
"-p, --program Pass following string as arguments to executable\n" "-p, --program Pass following string as arguments to executable\n"
"-c, --config Load the specified configuration file\n"; "-u, --user Select a specific user profile from 0 to 7\n"
"-v, --version Output version information and exit\n";
} }
static void PrintVersion() { static void PrintVersion() {
@ -199,6 +201,7 @@ int main(int argc, char** argv) {
std::string filepath; std::string filepath;
std::optional<std::string> config_path; std::optional<std::string> config_path;
std::string program_args; std::string program_args;
std::optional<int> selected_user;
bool use_multiplayer = false; bool use_multiplayer = false;
bool fullscreen = false; bool fullscreen = false;
@ -209,12 +212,14 @@ int main(int argc, char** argv) {
static struct option long_options[] = { static struct option long_options[] = {
// clang-format off // clang-format off
{"multiplayer", required_argument, 0, 'm'}, {"config", required_argument, 0, 'c'},
{"fullscreen", no_argument, 0, 'f'}, {"fullscreen", no_argument, 0, 'f'},
{"help", no_argument, 0, 'h'}, {"help", no_argument, 0, 'h'},
{"version", no_argument, 0, 'v'}, {"game", required_argument, 0, 'g'},
{"multiplayer", required_argument, 0, 'm'},
{"program", optional_argument, 0, 'p'}, {"program", optional_argument, 0, 'p'},
{"config", required_argument, 0, 'c'}, {"user", required_argument, 0, 'u'},
{"version", no_argument, 0, 'v'},
{0, 0, 0, 0}, {0, 0, 0, 0},
// clang-format on // clang-format on
}; };
@ -223,6 +228,21 @@ int main(int argc, char** argv) {
int arg = getopt_long(argc, argv, "g:fhvp::c:", long_options, &option_index); int arg = getopt_long(argc, argv, "g:fhvp::c:", long_options, &option_index);
if (arg != -1) { if (arg != -1) {
switch (static_cast<char>(arg)) { switch (static_cast<char>(arg)) {
case 'c':
config_path = optarg;
break;
case 'f':
fullscreen = true;
LOG_INFO(Frontend, "Starting in fullscreen mode...");
break;
case 'h':
PrintHelp(argv[0]);
return 0;
case 'g': {
const std::string str_arg(optarg);
filepath = str_arg;
break;
}
case 'm': { case 'm': {
use_multiplayer = true; use_multiplayer = true;
const std::string str_arg(optarg); const std::string str_arg(optarg);
@ -255,23 +275,16 @@ int main(int argc, char** argv) {
} }
break; break;
} }
case 'f':
fullscreen = true;
LOG_INFO(Frontend, "Starting in fullscreen mode...");
break;
case 'h':
PrintHelp(argv[0]);
return 0;
case 'v':
PrintVersion();
return 0;
case 'p': case 'p':
program_args = argv[optind]; program_args = argv[optind];
++optind; ++optind;
break; break;
case 'c': case 'u':
config_path = optarg; selected_user = atoi(optarg);
break; return 0;
case 'v':
PrintVersion();
return 0;
} }
} else { } else {
#ifdef _WIN32 #ifdef _WIN32
@ -295,6 +308,10 @@ int main(int argc, char** argv) {
Settings::values.program_args = program_args; Settings::values.program_args = program_args;
} }
if (selected_user.has_value()) {
Settings::values.current_user = std::clamp(*selected_user, 0, 7);
}
#ifdef _WIN32 #ifdef _WIN32
LocalFree(argv_w); LocalFree(argv_w);
#endif #endif