From d9ef1122eead6b98cf48f7e614cf8917f805ec3a Mon Sep 17 00:00:00 2001 From: Nathan Date: Wed, 12 Mar 2025 14:07:04 -0500 Subject: [PATCH] work on testMenu --- modules/testMenu/src/testMenu.cpp | 4 +++- modules/testMenu/src/testMenu.h | 6 +++--- src/App.cpp | 36 ++++++++++++++++++++++++++++++- src/Module.h | 7 +++++- 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/modules/testMenu/src/testMenu.cpp b/modules/testMenu/src/testMenu.cpp index d00622c..c0382bd 100644 --- a/modules/testMenu/src/testMenu.cpp +++ b/modules/testMenu/src/testMenu.cpp @@ -1,6 +1,8 @@ #include "testMenu.h" -TestMenu::TestMenu() {} +TestMenu::TestMenu(void* h) { + handle = h; +} TestMenu::~TestMenu() {} diff --git a/modules/testMenu/src/testMenu.h b/modules/testMenu/src/testMenu.h index ab4db8c..1e0cb91 100644 --- a/modules/testMenu/src/testMenu.h +++ b/modules/testMenu/src/testMenu.h @@ -3,7 +3,7 @@ class TestMenu : public Module { public: - TestMenu(); + TestMenu(void*); ~TestMenu(); void run(); @@ -13,8 +13,8 @@ class TestMenu : public Module { }; extern "C" { - Module* create() { - return new TestMenu(); + Module* create(void* handle) { + return new TestMenu(handle); } void destroy(Module* m) { diff --git a/src/App.cpp b/src/App.cpp index a65e2d8..b6d0cfe 100644 --- a/src/App.cpp +++ b/src/App.cpp @@ -25,14 +25,44 @@ App::~App() { void App::run() { std::cout << "\nTesting...\n"; + done = modules.empty(); + // Main loop while (!done) { - end(); + + for(auto it = modules.begin(); it != modules.end(); it++) + (*it)->run(); } + } void App::load(std::string lib) { + void* handle = dlopen(lib.c_str(), RTLD_LAZY); + + if(!handle) { + std::cout << "could not open lib!\n"; + return; + } + + Module::create_t* create = (Module::create_t*) dlsym(handle, "create"); + if(dlerror()) { + std::cout << "error finding create function in file: " << lib << std::endl; + } + + Module::destroy_t* destroy = (Module::destroy_t*) dlsym(handle, "destroy"); + if(dlerror()) { + std::cout << "error finding destroy function in file: " << lib << std::endl; + } + + Module* m = create(handle); + + for(auto it = modules.begin(); it != modules.end(); it++) { + + if((*it)->getName() != "") { + + } + } } void App::handleArgs(const int& argc, char* argv[]) { @@ -56,3 +86,7 @@ void App::handleArgs(const int& argc, char* argv[]) { i++; } } + +void App::printHelp() { + std::cout << "archimedes [ -h | --help ] /path/to/some/library.so\n"; +} diff --git a/src/Module.h b/src/Module.h index c2a133e..80d8140 100644 --- a/src/Module.h +++ b/src/Module.h @@ -6,12 +6,17 @@ class Module { public: - typedef Module* create_t(); + typedef Module* create_t(void*); typedef void destroy_t(Module*); virtual ~Module() {} virtual void run() = 0; + std::string getName() const { return name; } + + protected: + std::string name; + void* handle; }; #endif