X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmods.cpp;h=fb65da3b071902bb0ac3664d29fd19148dbe0d38;hb=10d6d3bc9bdee3371a2f4dd98701ba77696a0c6d;hp=a1dccfa74b437863e2d9e34b08e6e70acfa1eb93;hpb=1f856dd6077fa25c8236146cf15d95e759b96b5e;p=dungeon-master.git diff --git a/src/mods.cpp b/src/mods.cpp index a1dccfa..fb65da3 100644 --- a/src/mods.cpp +++ b/src/mods.cpp @@ -1,5 +1,8 @@ +#include +#include #include #include "mods.h" +#include "paths.h" SCM register_generator(SCM name, SCM proc) { @@ -23,5 +26,25 @@ void load_mods() { scm_init_guile(); scm_init_dungeon_master_module(); - scm_primitive_load(scm_from_locale_string("mods/default/main.scm")); + + std::set paths = get_dm_paths(); + DIR* mods_dir; + struct dirent* mod; + std::string + mods_path, + mod_main; + + for (const std::string &path : paths) { + mods_path = path + DIR_DELIM + "mods"; + mods_dir = opendir(mods_path.c_str()); + if (mods_dir != NULL) { + while (mod = readdir(mods_dir)) { + if (strcmp(mod->d_name, ".") != 0 && strcmp(mod->d_name, "..") != 0) { + mod_main = mods_path + DIR_DELIM + mod->d_name + DIR_DELIM + "main.scm"; + scm_primitive_load(scm_from_locale_string(mod_main.c_str())); + } + } + } + closedir(mods_dir); + } }