From fd5b63991c71503cae827608023032601fb65409 Mon Sep 17 00:00:00 2001 From: lucaspalomodevelop Date: Fri, 10 Mar 2023 16:55:27 +0100 Subject: [PATCH] add Commands (basic) --- .gitignore | 3 +++ .vscode/settings.json | 53 ++++++++++++++++++++++++++++++++++++++++++ makefile | 7 ++++-- src/autom | Bin 23016 -> 0 bytes src/command.cpp | 29 +++++++++++++++++++++++ src/command.h | 21 +++++++++++++++++ src/inputparser.h | 37 +++++++++++++++++++++++++++++ src/main.cpp | 48 +++++++++++++++++++++++--------------- src/main.h | 18 ++++++++++++++ 9 files changed, 195 insertions(+), 21 deletions(-) create mode 100644 .vscode/settings.json delete mode 100644 src/autom create mode 100644 src/command.cpp create mode 100644 src/command.h create mode 100644 src/inputparser.h create mode 100644 src/main.h diff --git a/.gitignore b/.gitignore index a642095..a4aa8ed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ + +/bin + # Prerequisites *.d diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..fcb19a3 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,53 @@ +{ + "files.associations": { + "*.html": "html", + "*.jsste": "plaintext", + "string": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "map": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "typeinfo": "cpp" + } +} \ No newline at end of file diff --git a/makefile b/makefile index 87aa1cd..deb14b4 100644 --- a/makefile +++ b/makefile @@ -1,3 +1,6 @@ all: - g++ -std=c++11 ./src/main.cpp -o ./src/autom - ./src/autom test \ No newline at end of file + mkdir -p bin + g++ -c ./src/main.cpp + g++ -c ./src/command.cpp + g++ -std=c++11 main.o command.o -o ./bin/autom + ./bin/autom help \ No newline at end of file diff --git a/src/autom b/src/autom deleted file mode 100644 index b2107ae30816fa48e5c02a9f820e6ab8bec875ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23016 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 + +Command::Command() {} + +Command::~Command() {} + +void Command::addCommand(std::string name, void (*func)(char *argv[])) +{ + commands[name] = func; +} + +void Command::addDefaultCommand(void (*func)(char *argv[])) +{ + defaultCommand = func; +} + +void Command::runCommand(char *name, char *argv[]) +{ + std::cout << "Running command: " << name << std::endl; + if (commands.count(name) > 0) + { + commands[name](argv); + } + else + { + defaultCommand(argv); + } +} diff --git a/src/command.h b/src/command.h new file mode 100644 index 0000000..c193222 --- /dev/null +++ b/src/command.h @@ -0,0 +1,21 @@ +#ifndef COMMAND_H +#define COMMAND_H + +#include +#include + +class Command +{ +public: + Command(void); + ~Command(void); + void addCommand(std::string name, void (*func)(char *argv[])); + void addDefaultCommand(void (*func)(char *argv[])); + void runCommand(char *name, char *argv[]); + +private: + std::map commands; + void (*defaultCommand)(char *argv[]); +}; + +#endif // COMMAND_H \ No newline at end of file diff --git a/src/inputparser.h b/src/inputparser.h new file mode 100644 index 0000000..d318f04 --- /dev/null +++ b/src/inputparser.h @@ -0,0 +1,37 @@ +#include +#include +#include +#include +#include + + +class InputParser +{ + std::map args; + public: + InputParser(int argc, char *argv[]) { + for (int i = 1; i < argc; i++) { + std::string arg(argv[i]); + if (arg.find("-") == 0) { + std::string key = arg.substr(1); + if (i + 1 < argc) { + std::string value(argv[i + 1]); + if (value.find("-") != 0) { + args[key] = value; + i++; + } else { + args[key] = ""; + } + } else { + args[key] = ""; + } + } + } + } + std::string getValue(std::string key) { + return args[key]; + } + bool hasKey(std::string key) { + return args.count(key) > 0; + } +}; diff --git a/src/main.cpp b/src/main.cpp index b42c6db..a2dc8ff 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,25 +1,35 @@ -#include -#include -#include +#include "main.h" int main(int argc, char *argv[]) { - - // make dir in ~/autom - std::string home = getenv("HOME"); - std::string dir = home + "/autom"; - // std::cout << "dir: " << dir << std::endl; mkdir(dir.c_str(), 0777); - - if (argc > 1 && argv[1][0] != '-') - { - std::string pre_script = "cd " + dir + " && "; - std::string script = pre_script + dir + "/" + argv[1]; - system(script.c_str()); - } - // else{ - // std::cout << "Usage: autom