From a3efa59ebb778475fea278a933bd807b125814e2 Mon Sep 17 00:00:00 2001 From: quentin Date: Sat, 13 Aug 2022 18:42:16 -0500 Subject: [PATCH] MainOptHandler for the first parse of argv --- CMakeLists.txt | 3 +- src/main.cpp | 5 +-- src/optHandlers/mainOptHandler.cpp | 51 ++++++++++++++++++++++++++++++ src/optHandlers/mainOptHandler.h | 32 +++++++++++++++++++ 4 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 src/optHandlers/mainOptHandler.cpp create mode 100644 src/optHandlers/mainOptHandler.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e79fd0..9b32244 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,4 +12,5 @@ add_executable(${PROJECT_NAME} src/main.cpp src/main.h src/money/earning.cpp src/money/earning.h src/data/dateMoney.cpp src/data/dateMoney.h src/optHandlers/optHandler.cpp src/optHandlers/optHandler.h - src/optHandlers/accountOptHandler.cpp src/optHandlers/accountOptHandler.h) \ No newline at end of file + src/optHandlers/accountOptHandler.cpp src/optHandlers/accountOptHandler.h + src/optHandlers/mainOptHandler.cpp src/optHandlers/mainOptHandler.h) \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index bd490e8..6c1cc2a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,6 +5,7 @@ #include "main.h" #include "data/accountData.h" #include "optHandlers/accountOptHandler.h" +#include "optHandlers/mainOptHandler.h" #include #include @@ -27,8 +28,8 @@ void createRequiredFolders() { int main(int argc, char *argv[]) { std::vector args(argv, argv + argc); - OptHandlers::AccountOptHandler accountOptHandler(args); - accountOptHandler.parse(); + OptHandlers::MainOptHandler mainOptHandler(args); + mainOptHandler.parse(); createRequiredFolders(); // Read all accounts saved and store them in accounts diff --git a/src/optHandlers/mainOptHandler.cpp b/src/optHandlers/mainOptHandler.cpp new file mode 100644 index 0000000..2ba3dfb --- /dev/null +++ b/src/optHandlers/mainOptHandler.cpp @@ -0,0 +1,51 @@ +// +// Created by quentin on 8/13/22. +// + +#include "mainOptHandler.h" + +using namespace Budget::OptHandlers; + + +MainOptHandler::MainOptHandler(const std::vector &argv) : OptHandler(argv) {} + +void MainOptHandler::parse() { + struct option longOpts[] = { + {"help", no_argument, nullptr, 'h'}, + {"account", no_argument, nullptr, 'a'}, + { nullptr } + }; + + while (true) { + int opt = getopt_long(getArgc(), getArgv(), "ha", longOpts, nullptr); + + if (opt == -1) { + break; + } + + switch (opt) { + case 'h': + setOpts.help = true; + break; + case 'a': + setOpts.account = true; + break; + case '?': + setOpts.help = true; + setOpts.helpOut = stderr; + break; + default: + break; + } + } +} + +void MainOptHandler::help() { + fprintf(setOpts.helpOut, "Help budget {-ha}\n"); + fprintf(setOpts.helpOut, " -h --help Output this message.\n"); + fprintf(setOpts.helpOut, " -a --account Do budget -a -h for more info.\n"); +} + +const SetOpts *MainOptHandler::getSetOpts() const { + return &setOpts; +} diff --git a/src/optHandlers/mainOptHandler.h b/src/optHandlers/mainOptHandler.h new file mode 100644 index 0000000..0a65f96 --- /dev/null +++ b/src/optHandlers/mainOptHandler.h @@ -0,0 +1,32 @@ +// +// Created by quentin on 8/13/22. +// + +#ifndef BUDGET_MAINOPTHANDLER_H +#define BUDGET_MAINOPTHANDLER_H + +#include "optHandler.h" + +namespace Budget::OptHandlers { + class MainOptHandler : public OptHandler { + struct SetOpts { + FILE *helpOut = stdout; + bool help = false; + bool account = false; + }; + + public: + explicit MainOptHandler(const std::vector &argv); + + void parse() override; + + void help() override; + + [[nodiscard]] const SetOpts *getSetOpts() const; + + private: + SetOpts setOpts; + }; +} + +#endif //BUDGET_MAINOPTHANDLER_H