int add_to_list_of_loaded_modules(Var* v) { if (loaded_modules == NULL) { loaded_modules = Narray_create(10); } if (Narray_add(loaded_modules, v->name, v) == -1) { /* this element may already exist */ if (Narray_find(loaded_modules, v->name, NULL) != -1) { parse_error("Module %s is already loaded. Unload+Reload to refresh.", v->name); return 0; } else { parse_error("Probably a mem allocation error while loading module %s.", v->name); return 0; } } if (debug > DEBUG_THRESHOLD) { parse_error("Added module %s to the list of loaded modules.", v->name); } return 1; /* success */ }
Narray* gui_getFramePublicResources() { return Narray_create(0); #if 0 Narray *resList; int i, num; num = sizeof(framePublicResources) / sizeof(framePublicResources[0]); resList = Narray_create(num); for (i = 0; i < num; i++) { Narray_add(resList, (char *) framePublicResources[i], NULL); } return resList; #endif }
Narray* gui_getFileSelectionBoxPublicResources() { Narray* resList; int i, num; num = sizeof(fileSelectionBoxPublicResources) / sizeof(fileSelectionBoxPublicResources[0]); resList = Narray_create(num); for (i = 0; i < num; i++) { Narray_add(resList, (char*)fileSelectionBoxPublicResources[i], NULL); } return resList; }
Var* new_module(char* module_name) { Var* v; if (module_name == NULL) { if (debug > DEBUG_THRESHOLD) { parse_error("Cannot create a module with (null) name."); } return NULL; } if (search_in_list_of_loaded_modules(module_name) != NULL) { /* If module already loaded, don't load it again */ parse_error("Module %s already loaded.", module_name); return NULL; } v = newVar(); memset(&V_MODULE(v), 0, sizeof(dvModule)); /* make scope not clean this variable */ mem_claim(v); V_TYPE(v) = ID_MODULE; V_NAME(v) = strdup(module_name); if (V_NAME(v) == NULL) { parse_error("Mem allocation error in new_module()."); free_var(v); return NULL; } V_MODULE(v).functions = Narray_create(10); V_MODULE(v).name = V_NAME(v); /* keep track of available modules */ if (!add_to_list_of_loaded_modules(v)) { /* Addition into the list of loaded modules failed. Abort. */ free_var(v); return NULL; } V_MODULE(v).stage = MOD_LST_ADDED; return v; }