From 5c138aa4a5a27eb3c679251896ea84988fb13135 Mon Sep 17 00:00:00 2001 From: AlexandreRouma Date: Mon, 21 Feb 2022 18:10:01 +0100 Subject: [PATCH] More work on the new param system --- core/src/command_args.cpp | 24 ++++++++++++++++++++++-- core/src/command_args.h | 4 ++-- core/src/core.cpp | 11 +++++++++++ core/src/core.h | 2 ++ 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/core/src/command_args.cpp b/core/src/command_args.cpp index c108f810..75418fad 100644 --- a/core/src/command_args.cpp +++ b/core/src/command_args.cpp @@ -1,4 +1,24 @@ #include "command_args.h" +#include + +void CommandArgsParser::defineAll() { +#if defined(_WIN32) + std::string root = "."; + define('c', "con", "Show console on Windows"); +#elif defined(IS_MACOS_BUNDLE) + std::string root = (std::string)getenv("HOME") + "/Library/Application Support/sdrpp"; +#elif defined(__ANDROID__) + std::string root = "/storage/self/primary/sdrpp"; +#else + std::string root = (std::string)getenv("HOME") + "/.config/sdrpp"; +#endif + + define('a', "addr", "Server mode address", "0.0.0.0"); + define('h', "help", "Show help"); + define('p', "port", "Server mode port", 5259); + define('r', "root", "Root directory, where all config files are stored", std::filesystem::absolute(root).string()); + define('s', "server", "Run in server mode"); +} int CommandArgsParser::parse(int argc, char* argv[]) { for (int i = 1; i < argc; i++) { @@ -94,10 +114,10 @@ int CommandArgsParser::parse(int argc, char* argv[]) { void CommandArgsParser::showHelp() { for (auto const& [ln, arg] : args) { if (arg.alias) { - printf("-%c\t--%s\t\t%s\n", arg.alias, ln.c_str(), arg.description.c_str()); + printf("-%c --%s\t\t%s\n", arg.alias, ln.c_str(), arg.description.c_str()); } else { - printf(" \t--%s\t\t%s\n", ln.c_str(), arg.description.c_str()); + printf(" --%s\t\t%s\n", ln.c_str(), arg.description.c_str()); } } } \ No newline at end of file diff --git a/core/src/command_args.h b/core/src/command_args.h index 272990df..17998021 100644 --- a/core/src/command_args.h +++ b/core/src/command_args.h @@ -48,7 +48,6 @@ public: } CLIArg(char al, std::string desc, std::string s) { - printf("String const called\n"); alias = al; description = desc; type = CLI_ARG_TYPE_STRING; @@ -56,7 +55,6 @@ public: } CLIArg(char al, std::string desc, const char* s) { - printf("String const called\n"); alias = al; description = desc; type = CLI_ARG_TYPE_STRING; @@ -108,6 +106,8 @@ public: aliases[shortName] = name; } + void defineAll(); + template void define(char shortName, std::string name, std::string desc, T defValue) { args[name] = CLIArg(shortName, desc, defValue); diff --git a/core/src/core.cpp b/core/src/core.cpp index 2dd131a8..2b46cc26 100644 --- a/core/src/core.cpp +++ b/core/src/core.cpp @@ -37,6 +37,7 @@ namespace core { ConfigManager configManager; ModuleManager moduleManager; ModuleComManager modComManager; + CommandArgsParser args; void setInputSampleRate(double samplerate) { // Forward this to the server @@ -64,6 +65,16 @@ int sdrpp_main(int argc, char* argv[]) { chdir(execPath.parent_path().string().c_str()); #endif + // Define command line options and parse arguments + core::args.defineAll(); + core::args.parse(argc, argv); + + // Show help and exit if requested + if ((bool)core::args["help"]) { + core::args.showHelp(); + return 0; + } + // Load default options and parse command line options::loadDefaults(); if (!options::parse(argc, argv)) { return -1; } diff --git a/core/src/core.h b/core/src/core.h index 1b2dfa98..0c171d50 100644 --- a/core/src/core.h +++ b/core/src/core.h @@ -3,11 +3,13 @@ #include #include #include +#include "command_args.h" namespace core { SDRPP_EXPORT ConfigManager configManager; SDRPP_EXPORT ModuleManager moduleManager; SDRPP_EXPORT ModuleComManager modComManager; + SDRPP_EXPORT CommandArgsParser args; void setInputSampleRate(double samplerate); };