From 00ce114d4078733cfa9ae6061325821fd04601c0 Mon Sep 17 00:00:00 2001 From: Hayodea Hakol Date: Sun, 5 Jan 2025 13:35:14 -0400 Subject: [PATCH] cmdopts: Add a -?/--help option --- hcore/include/opts.h | 6 +++--- hcore/opts.cpp | 9 +++++++-- main.cpp | 7 +++++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/hcore/include/opts.h b/hcore/include/opts.h index eff1ca2..e3c5608 100644 --- a/hcore/include/opts.h +++ b/hcore/include/opts.h @@ -9,19 +9,19 @@ class OptionParser { public: - OptionParser() : verbose(false) {} + OptionParser() : verbose(false), printUsage(false) {} ~OptionParser() = default; void parseArguments(int argc, char *argv[]); void dumpOptions() const; std::string getUsage() const; -private: +public: std::vector extro; std::vector intero; std::vector actuator; std::string devFile; - bool verbose; + bool verbose, printUsage; static struct option longOptions[]; }; diff --git a/hcore/opts.cpp b/hcore/opts.cpp index 991620f..4c6d780 100644 --- a/hcore/opts.cpp +++ b/hcore/opts.cpp @@ -15,6 +15,7 @@ struct option OptionParser::longOptions[] = { {"devfile", required_argument, 0, 'd'}, {"devicefile", required_argument, 0, 'd'}, {"verbose", no_argument, 0, 'v'}, + {"help", no_argument, 0, '?'}, {0, 0, 0, 0} }; @@ -24,7 +25,7 @@ void OptionParser::parseArguments(int argc, char *argv[]) int optionIndex = 0; optind = 1; // Reset optind to 1 before parsing while ((opt = getopt_long( - argc, argv, "e:i:a:d:v", longOptions, &optionIndex)) != -1) + argc, argv, "e:i:a:d:v?", longOptions, &optionIndex)) != -1) { switch (opt) { @@ -43,6 +44,9 @@ void OptionParser::parseArguments(int argc, char *argv[]) case 'v': verbose = true; break; + case '?': + printUsage = true; + return; default: throw std::invalid_argument("Invalid argument encountered: " + std::string(argv[optind - 1])); } @@ -55,7 +59,8 @@ std::string OptionParser::getUsage() const "[-i|--intero|--interoceptor ] " "[-a|--act|--actuator ] " "[-d|--devfile|--devicefile ] " - "[-v|--verbose]"; + "[-v|--verbose] " + "[-?|--help]"; } void OptionParser::dumpOptions() const diff --git a/main.cpp b/main.cpp index 1febc36..74a0a23 100644 --- a/main.cpp +++ b/main.cpp @@ -15,11 +15,14 @@ try { options.parseArguments(argc, argv); } catch (const std::invalid_argument& e) { - std::cerr << e.what() << std::endl; - std::cerr << options.getUsage() << std::endl; + std::cerr << e.what() <<'\n' << options.getUsage() <<'\n'; return EXIT_FAILURE; } + if (options.printUsage) { + std::cout << options.getUsage() << std::endl; + return EXIT_SUCCESS; + } options.dumpOptions(); } catch (...) {