From ac141ec143c6ef3e3c3f2c61b8693df722e27da9 Mon Sep 17 00:00:00 2001 From: lucaspalomodevelop Date: Tue, 11 Apr 2023 21:44:08 +0200 Subject: [PATCH] can compile on windows now | exectutes default-command --- makefile | 1 - src/command.cpp | 32 ++++++++++++++++++++++++++------ src/command.h | 11 ++++++----- src/main.cpp | 18 +++++++++++++----- src/main.h | 20 +++++++++++++------- 5 files changed, 58 insertions(+), 24 deletions(-) diff --git a/makefile b/makefile index deb14b4..bf49f6f 100644 --- a/makefile +++ b/makefile @@ -1,5 +1,4 @@ all: - mkdir -p bin g++ -c ./src/main.cpp g++ -c ./src/command.cpp g++ -std=c++11 main.o command.o -o ./bin/autom diff --git a/src/command.cpp b/src/command.cpp index 2383ee9..7de3f9c 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -5,25 +5,45 @@ Command::Command() {} Command::~Command() {} -void Command::addCommand(std::string name, void (*func)(char *argv[])) +void Command::addCommand(std::string name, void (*func)(int argc, char *argv[])) { commands[name] = func; } -void Command::addDefaultCommand(void (*func)(char *argv[])) +void Command::addDefaultCommand(void (*func)(int argc, char *argv[])) { defaultCommand = func; } -void Command::runCommand(char *name, char *argv[]) +void Command::runCommand(char *name, int argc, char *argv[]) { std::cout << "Running command: " << name << std::endl; - if (commands.count(name) > 0) + if (this->isInCommands(name)) { - commands[name](argv); + + for (int i = 0; i < argc; i++) + { + argv[i] = argv[i + 1]; + } + + commands[name](argc, argv); } else { - defaultCommand(argv); + defaultCommand(argc, argv); } } + +bool Command::isInCommands(char *name) +{ + for (auto const &command : commands) + { + if (command.first == name) + { + std::cout << "Command found: " << command.first << std::endl; + return true; + } + } + std::cout << "Command not found: " << name << std::endl; + return false; +} \ No newline at end of file diff --git a/src/command.h b/src/command.h index c193222..705f2bb 100644 --- a/src/command.h +++ b/src/command.h @@ -9,13 +9,14 @@ 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[]); + void addCommand(std::string name, void (*func)(int argc, char *argv[])); + void addDefaultCommand(void (*func)(int argc,char *argv[])); + void runCommand(char *name, int argc, char *argv[]); + bool isInCommands(char *name); private: - std::map commands; - void (*defaultCommand)(char *argv[]); + std::map commands; + void (*defaultCommand)(int argc,char *argv[]); }; #endif // COMMAND_H \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index a2dc8ff..78a2d5d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,12 +2,17 @@ int main(int argc, char *argv[]) { +#ifdef _WIN32 +#include + _mkdir(dir.c_str()); +#else mkdir(dir.c_str(), 0777); +#endif + input(argc, argv); return 0; } - void input(int argc, char *argv[]) { InputParser input(argc, argv); @@ -16,17 +21,20 @@ void input(int argc, char *argv[]) command.addCommand("run", runScript); command.addCommand("help", help); command.addDefaultCommand(runScript); - command.runCommand(argv[1], argv); + command.runCommand(argv[1],argc, argv); } -void runScript(char *argv[]) +void runScript(int argc,char *argv[]) { + + std::cout << "Running script: " << argv[1] << std::endl; std::string pre_script = "cd " + dir + " && "; - std::string script = pre_script + dir + "/" + argv[2]; + std::string script = pre_script + dir + "/" + argv[1]; + std::cout << "Running script: " << script << std::endl; system(script.c_str()); } -void help(char *argv[]) +void help(int argc,char *argv[]) { std::cout << "Usage: autom [command] [options]" << std::endl; std::cout << "Commands:" << std::endl; diff --git a/src/main.h b/src/main.h index 5940f40..9634076 100644 --- a/src/main.h +++ b/src/main.h @@ -5,14 +5,20 @@ #include "inputparser.h" #include "command.h" +#ifdef _WIN32 +#include +std::string home = getenv("USERPROFILE"); +#else std::string home = getenv("HOME"); +#endif + std::string dir = home + "/autom"; void input(int argc, char *argv[]); -void runScript(char *argv[]); -void help(char *argv[]); -void create(char *argv[]); -void remove(char *argv[]); -void list(char *argv[]); -void edit(char *argv[]); -void run(char *argv[]); +void runScript(int argc,char *argv[]); +void help(int argc,char *argv[]); +void create(int argc,char *argv[]); +void remove(int argc,char *argv[]); +void list(int argc,char *argv[]); +void edit(int argc,char *argv[]); +void run(int argc,char *argv[]);