- std::set<std::string> paths = get_dm_paths();
- for (const std::string &path : paths) {
- std::cout << path << std::endl;
- }
-
- scm_init_guile();
- scm_init_dungeon_master_module();
- scm_primitive_load(scm_from_locale_string("mods/default/main.scm"));
+ // Add path to %load-path variable, needed for modules created in mods
+ std::string exp = "(add-to-load-path \"" + path + "\")";
+ scm_c_eval_string (exp.c_str ());
+}
+
+void load_dmaster_mods ()
+{
+ scm_init_guile ();
+ scm_init_dungeon_master_module ();
+
+ std::set<std::string> paths = get_dmaster_paths ();
+ DIR* mods_dir;
+ struct dirent* mod;
+ std::string
+ mods_path,
+ mod_main;
+
+ for (const std::string &path : paths)
+ {
+ mods_path = path + PATH_DELIM + "mods";
+ add_to_load_path (mods_path);
+ mods_dir = opendir (mods_path.c_str ());
+ if (mods_dir != NULL)
+ {
+ while (mod = readdir (mods_dir))
+ {
+ if (strstr (mod->d_name, ".scm") != NULL) {
+ mod_main = mods_path + PATH_DELIM + mod->d_name;
+ scm_primitive_load (scm_from_locale_string (mod_main.c_str ()));
+ }
+ }
+ }
+ closedir (mods_dir);
+ }