static int dt_imageio_load_module_storage (dt_imageio_module_storage_t *module, const char *libname, const char *plugin_name) { module->widget = NULL; g_strlcpy(module->plugin_name, plugin_name, 20); module->module = g_module_open(libname, G_MODULE_BIND_LAZY); if(!module->module) goto error; int (*version)(); if(!g_module_symbol(module->module, "dt_module_dt_version", (gpointer)&(version))) goto error; if(version() != dt_version()) { fprintf(stderr, "[imageio_load_module] `%s' is compiled for another version of dt (module %d (%s) != dt %d (%s)) !\n", libname, abs(version()), version() < 0 ? "debug" : "opt", abs(dt_version()), dt_version() < 0 ? "debug" : "opt"); goto error; } if(!g_module_symbol(module->module, "name", (gpointer)&(module->name))) goto error; if(!g_module_symbol(module->module, "gui_reset", (gpointer)&(module->gui_reset))) goto error; if(!g_module_symbol(module->module, "gui_init", (gpointer)&(module->gui_init))) goto error; if(!g_module_symbol(module->module, "gui_cleanup", (gpointer)&(module->gui_cleanup))) goto error; if(!g_module_symbol(module->module, "store", (gpointer)&(module->store))) goto error; if(!g_module_symbol(module->module, "get_params", (gpointer)&(module->get_params))) goto error; if(!g_module_symbol(module->module, "free_params", (gpointer)&(module->free_params))) goto error; if(!g_module_symbol(module->module, "finalize_store", (gpointer)&(module->finalize_store))) module->finalize_store = NULL; if(!g_module_symbol(module->module, "set_params", (gpointer)&(module->set_params))) goto error; if(!g_module_symbol(module->module, "supported", (gpointer)&(module->supported))) module->supported = _default_supported; if(!g_module_symbol(module->module, "dimension", (gpointer)&(module->dimension))) module->dimension = _default_storage_dimension; if(!g_module_symbol(module->module, "recommended_dimension", (gpointer)&(module->recommended_dimension))) module->recommended_dimension = _default_storage_dimension; return 0; error: fprintf(stderr, "[imageio_load_module] failed to open storage `%s': %s\n", plugin_name, g_module_error()); if(module->module) g_module_close(module->module); return 1; }
static int dt_imageio_load_module_format (dt_imageio_module_format_t *module, const char *libname, const char *plugin_name) { module->widget = NULL; module->parameter_lua_type = LUAA_INVALID_TYPE; g_strlcpy(module->plugin_name, plugin_name, sizeof(module->plugin_name)); module->module = g_module_open(libname, G_MODULE_BIND_LAZY); if(!module->module) goto error; int (*version)(); if(!g_module_symbol(module->module, "dt_module_dt_version", (gpointer)&(version))) goto error; if(version() != dt_version()) { fprintf(stderr, "[imageio_load_module] `%s' is compiled for another version of dt (module %d (%s) != dt %d (%s)) !\n", libname, abs(version()), version() < 0 ? "debug" : "opt", abs(dt_version()), dt_version() < 0 ? "debug" : "opt"); goto error; } if(!g_module_symbol(module->module, "name", (gpointer)&(module->name))) goto error; if(!g_module_symbol(module->module, "init", (gpointer)&(module->init))) goto error; if(!g_module_symbol(module->module, "cleanup", (gpointer)&(module->cleanup))) goto error; if(!g_module_symbol(module->module, "gui_reset", (gpointer)&(module->gui_reset))) goto error; if(!g_module_symbol(module->module, "gui_init", (gpointer)&(module->gui_init))) goto error; if(!g_module_symbol(module->module, "gui_cleanup", (gpointer)&(module->gui_cleanup))) goto error; if(!g_module_symbol(module->module, "mime", (gpointer)&(module->mime))) goto error; if(!g_module_symbol(module->module, "extension", (gpointer)&(module->extension))) goto error; if(!g_module_symbol(module->module, "dimension", (gpointer)&(module->dimension))) module->dimension = _default_format_dimension; if(!g_module_symbol(module->module, "params_size", (gpointer)&(module->params_size))) goto error; if(!g_module_symbol(module->module, "get_params", (gpointer)&(module->get_params))) goto error; if(!g_module_symbol(module->module, "free_params", (gpointer)&(module->free_params))) goto error; if(!g_module_symbol(module->module, "set_params", (gpointer)&(module->set_params))) goto error; if(!g_module_symbol(module->module, "write_image", (gpointer)&(module->write_image))) goto error; if(!g_module_symbol(module->module, "bpp", (gpointer)&(module->bpp))) goto error; if(!g_module_symbol(module->module, "flags", (gpointer)&(module->flags))) module->flags = _default_format_flags; if(!g_module_symbol(module->module, "levels", (gpointer)&(module->levels))) module->levels = _default_format_levels; if(!g_module_symbol(module->module, "read_image", (gpointer)&(module->read_image))) module->read_image = NULL; #ifdef USE_LUA { char pseudo_type_name[1024]; snprintf(pseudo_type_name,sizeof(pseudo_type_name),"dt_imageio_module_format_data_%s",module->plugin_name); luaA_Type my_type = luaA_type_add(pseudo_type_name,module->params_size(module)); module->parameter_lua_type = dt_lua_init_type_typeid(darktable.lua_state.state,my_type); luaA_struct_typeid(darktable.lua_state.state,my_type); dt_lua_register_format_typeid(darktable.lua_state.state,module,my_type); #endif module->init(module); #ifdef USE_LUA dt_lua_register_type_callback_type_typeid(darktable.lua_state.state,my_type,NULL,NULL,my_type); } #endif return 0; error: fprintf(stderr, "[imageio_load_module] failed to open format `%s': %s\n", plugin_name, g_module_error()); if(module->module) g_module_close(module->module); return 1; }
static int dt_imageio_load_module_format (dt_imageio_module_format_t *module, const char *libname, const char *plugin_name) { module->widget = NULL; g_strlcpy(module->plugin_name, plugin_name, 20); module->module = g_module_open(libname, G_MODULE_BIND_LAZY); if(!module->module) goto error; int (*version)(); if(!g_module_symbol(module->module, "dt_module_dt_version", (gpointer)&(version))) goto error; if(version() != dt_version()) { fprintf(stderr, "[imageio_load_module] `%s' is compiled for another version of dt (module %d (%s) != dt %d (%s)) !\n", libname, abs(version()), version() < 0 ? "debug" : "opt", abs(dt_version()), dt_version() < 0 ? "debug" : "opt"); goto error; } if(!g_module_symbol(module->module, "name", (gpointer)&(module->name))) goto error; if(!g_module_symbol(module->module, "init", (gpointer)&(module->init))) goto error; if(!g_module_symbol(module->module, "cleanup", (gpointer)&(module->cleanup))) goto error; if(!g_module_symbol(module->module, "gui_reset", (gpointer)&(module->gui_reset))) goto error; if(!g_module_symbol(module->module, "gui_init", (gpointer)&(module->gui_init))) goto error; if(!g_module_symbol(module->module, "gui_cleanup", (gpointer)&(module->gui_cleanup))) goto error; if(!g_module_symbol(module->module, "mime", (gpointer)&(module->mime))) goto error; if(!g_module_symbol(module->module, "extension", (gpointer)&(module->extension))) goto error; if(!g_module_symbol(module->module, "dimension", (gpointer)&(module->dimension))) module->dimension = _default_format_dimension; if(!g_module_symbol(module->module, "get_params", (gpointer)&(module->get_params))) goto error; if(!g_module_symbol(module->module, "free_params", (gpointer)&(module->free_params))) goto error; if(!g_module_symbol(module->module, "set_params", (gpointer)&(module->set_params))) goto error; if(!g_module_symbol(module->module, "write_image", (gpointer)&(module->write_image))) goto error; if(!g_module_symbol(module->module, "bpp", (gpointer)&(module->bpp))) goto error; if(!g_module_symbol(module->module, "flags", (gpointer)&(module->flags))) module->flags = _default_format_flags; if(!g_module_symbol(module->module, "decompress_header", (gpointer)&(module->decompress_header))) module->decompress_header = NULL; if(!g_module_symbol(module->module, "decompress", (gpointer)&(module->decompress))) module->decompress = NULL; if(!g_module_symbol(module->module, "compress", (gpointer)&(module->compress))) module->compress = NULL; if(!g_module_symbol(module->module, "read_header", (gpointer)&(module->read_header))) module->read_header = NULL; if(!g_module_symbol(module->module, "read_image", (gpointer)&(module->read_image))) module->read_image = NULL; module->init(module); return 0; error: fprintf(stderr, "[imageio_load_module] failed to open format `%s': %s\n", plugin_name, g_module_error()); if(module->module) g_module_close(module->module); return 1; }
static int dt_imageio_load_module_storage(dt_imageio_module_storage_t *module, const char *libname, const char *plugin_name) { module->widget = NULL; module->parameter_lua_type = LUAA_INVALID_TYPE; g_strlcpy(module->plugin_name, plugin_name, sizeof(module->plugin_name)); dt_print(DT_DEBUG_CONTROL, "[imageio_load_module] loading storage module `%s' from %s\n", plugin_name, libname); module->module = g_module_open(libname, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL); if(!module->module) goto error; int (*version)(); if(!g_module_symbol(module->module, "dt_module_dt_version", (gpointer) & (version))) goto error; if(version() != dt_version()) { fprintf( stderr, "[imageio_load_module] `%s' is compiled for another version of dt (module %d (%s) != dt %d (%s)) !\n", libname, abs(version()), version() < 0 ? "debug" : "opt", abs(dt_version()), dt_version() < 0 ? "debug" : "opt"); goto error; } if(!g_module_symbol(module->module, "dt_module_mod_version", (gpointer) & (module->version))) goto error; if(!g_module_symbol(module->module, "name", (gpointer) & (module->name))) goto error; if(!g_module_symbol(module->module, "gui_reset", (gpointer) & (module->gui_reset))) goto error; if(darktable.gui) { if(!g_module_symbol(module->module, "gui_init", (gpointer) & (module->gui_init))) goto error; } else { module->gui_init = _default_storage_nop; } if(!g_module_symbol(module->module, "gui_cleanup", (gpointer) & (module->gui_cleanup))) goto error; if(!g_module_symbol(module->module, "init", (gpointer) & (module->init))) goto error; if(!g_module_symbol(module->module, "store", (gpointer) & (module->store))) goto error; if(!g_module_symbol(module->module, "legacy_params", (gpointer) & (module->legacy_params))) module->legacy_params = NULL; if(!g_module_symbol(module->module, "params_size", (gpointer) & (module->params_size))) goto error; if(!g_module_symbol(module->module, "get_params", (gpointer) & (module->get_params))) goto error; if(!g_module_symbol(module->module, "free_params", (gpointer) & (module->free_params))) goto error; if(!g_module_symbol(module->module, "initialize_store", (gpointer) & (module->initialize_store))) module->initialize_store = NULL; if(!g_module_symbol(module->module, "finalize_store", (gpointer) & (module->finalize_store))) module->finalize_store = NULL; if(!g_module_symbol(module->module, "set_params", (gpointer) & (module->set_params))) goto error; if(!g_module_symbol(module->module, "supported", (gpointer) & (module->supported))) module->supported = _default_supported; if(!g_module_symbol(module->module, "dimension", (gpointer) & (module->dimension))) module->dimension = _default_storage_dimension; if(!g_module_symbol(module->module, "recommended_dimension", (gpointer) & (module->recommended_dimension))) module->recommended_dimension = _default_storage_dimension; if(!g_module_symbol(module->module, "export_dispatched", (gpointer) & (module->export_dispatched))) module->export_dispatched = _default_storage_nop; #ifdef USE_LUA { char pseudo_type_name[1024]; snprintf(pseudo_type_name, sizeof(pseudo_type_name), "dt_imageio_module_storage_data_%s", module->plugin_name); luaA_Type my_type = luaA_type_add(darktable.lua_state.state, pseudo_type_name, module->params_size(module)); module->parameter_lua_type = dt_lua_init_type_type(darktable.lua_state.state, my_type); luaA_struct_type(darktable.lua_state.state, my_type); dt_lua_register_storage_type(darktable.lua_state.state, module, my_type); #endif module->init(module); #ifdef USE_LUA lua_pushcfunction(darktable.lua_state.state, dt_lua_type_member_luaautoc); dt_lua_type_register_struct_type(darktable.lua_state.state, my_type); } #endif return 0; error: fprintf(stderr, "[imageio_load_module] failed to open storage `%s': %s\n", plugin_name, g_module_error()); if(module->module) g_module_close(module->module); return 1; }
static int dt_lib_load_module (dt_lib_module_t *module, const char *libname, const char *plugin_name) { // char name[1024]; module->dt = &darktable; module->widget = NULL; g_strlcpy(module->plugin_name, plugin_name, 20); module->module = g_module_open(libname, G_MODULE_BIND_LAZY); if(!module->module) goto error; int (*version)(); if(!g_module_symbol(module->module, "dt_module_dt_version", (gpointer)&(version))) goto error; if(version() != dt_version()) { fprintf(stderr, "[lib_load_module] `%s' is compiled for another version of dt (module %d (%s) != dt %d (%s)) !\n", libname, abs(version()), version() < 0 ? "debug" : "opt", abs(dt_version()), dt_version() < 0 ? "debug" : "opt"); goto error; } if(!g_module_symbol(module->module, "dt_module_mod_version", (gpointer)&(module->version))) goto error; if(!g_module_symbol(module->module, "name", (gpointer)&(module->name))) goto error; if(!g_module_symbol(module->module, "views", (gpointer)&(module->views))) goto error; if(!g_module_symbol(module->module, "container", (gpointer)&(module->container))) goto error; if(!g_module_symbol(module->module, "expandable", (gpointer)&(module->expandable))) module->expandable = _lib_default_expandable; if(!g_module_symbol(module->module, "gui_reset", (gpointer)&(module->gui_reset))) module->gui_reset = NULL; if(!g_module_symbol(module->module, "gui_init", (gpointer)&(module->gui_init))) goto error; if(!g_module_symbol(module->module, "gui_cleanup", (gpointer)&(module->gui_cleanup))) goto error; if(!g_module_symbol(module->module, "gui_post_expose", (gpointer)&(module->gui_post_expose))) module->gui_post_expose = NULL; if(!g_module_symbol(module->module, "mouse_leave", (gpointer)&(module->mouse_leave))) module->mouse_leave = NULL; if(!g_module_symbol(module->module, "mouse_moved", (gpointer)&(module->mouse_moved))) module->mouse_moved = NULL; if(!g_module_symbol(module->module, "button_released", (gpointer)&(module->button_released))) module->button_released = NULL; if(!g_module_symbol(module->module, "button_pressed", (gpointer)&(module->button_pressed))) module->button_pressed = NULL; if(!g_module_symbol(module->module, "configure", (gpointer)&(module->configure))) module->configure = NULL; if(!g_module_symbol(module->module, "scrolled", (gpointer)&(module->scrolled))) module->scrolled = NULL; if(!g_module_symbol(module->module, "position", (gpointer)&(module->position))) module->position = NULL; if((!g_module_symbol(module->module, "get_params", (gpointer)&(module->get_params))) || (!g_module_symbol(module->module, "set_params", (gpointer)&(module->set_params))) || (!g_module_symbol(module->module, "init_presets", (gpointer)&(module->init_presets)))) { // need both at the same time, or none. module->set_params = NULL; module->get_params = NULL; module->init_presets = NULL; } if(!g_module_symbol(module->module, "init_key_accels", (gpointer)&(module->init_key_accels))) module->init_key_accels = NULL; if(!g_module_symbol(module->module, "connect_key_accels", (gpointer)&(module->connect_key_accels))) module->connect_key_accels = NULL; module->accel_closures = NULL; module->reset_button = NULL; module->presets_button = NULL; if (module->gui_reset) { dt_accel_register_lib(module, NC_("accel", "reset module parameters"), 0, 0); } if(module->get_params) { dt_accel_register_lib(module, NC_("accel", "show preset menu"), 0, 0); } return 0; error: fprintf(stderr, "[lib_load_module] failed to open operation `%s': %s\n", plugin_name, g_module_error()); if(module->module) g_module_close(module->module); return 1; }
/** load a view module */ int dt_view_load_module(dt_view_t *view, const char *module) { int retval = -1; memset(view, 0, sizeof(dt_view_t)); view->data = NULL; view->vscroll_size = view->vscroll_viewport_size = 1.0; view->hscroll_size = view->hscroll_viewport_size = 1.0; view->vscroll_pos = view->hscroll_pos = 0.0; view->height = view->width = 100; // set to non-insane defaults before first expose/configure. g_strlcpy(view->module_name, module, 64); char plugindir[1024]; dt_util_get_plugindir(plugindir, 1024); g_strlcat(plugindir, "/views", 1024); gchar *libname = g_module_build_path(plugindir, (const gchar *)module); view->module = g_module_open(libname, G_MODULE_BIND_LAZY); if(!view->module) { fprintf(stderr, "[view_load_module] could not open %s (%s)!\n", libname, g_module_error()); retval = -1; goto out; } int (*version)(); if(!g_module_symbol(view->module, "dt_module_dt_version", (gpointer)&(version))) goto out; if(version() != dt_version()) { fprintf(stderr, "[view_load_module] `%s' is compiled for another version of dt (module %d != dt %d) !\n", libname, version(), dt_version()); goto out; } if(!g_module_symbol(view->module, "name", (gpointer)&(view->name))) view->name = NULL; if(!g_module_symbol(view->module, "view", (gpointer)&(view->view))) view->view = NULL; if(!g_module_symbol(view->module, "init", (gpointer)&(view->init))) view->init = NULL; if(!g_module_symbol(view->module, "cleanup", (gpointer)&(view->cleanup))) view->cleanup = NULL; if(!g_module_symbol(view->module, "expose", (gpointer)&(view->expose))) view->expose = NULL; if(!g_module_symbol(view->module, "try_enter", (gpointer)&(view->try_enter))) view->try_enter = NULL; if(!g_module_symbol(view->module, "enter", (gpointer)&(view->enter))) view->enter = NULL; if(!g_module_symbol(view->module, "leave", (gpointer)&(view->leave))) view->leave = NULL; if(!g_module_symbol(view->module, "reset", (gpointer)&(view->reset))) view->reset = NULL; if(!g_module_symbol(view->module, "mouse_enter", (gpointer)&(view->mouse_enter))) view->mouse_enter= NULL; if(!g_module_symbol(view->module, "mouse_leave", (gpointer)&(view->mouse_leave))) view->mouse_leave = NULL; if(!g_module_symbol(view->module, "mouse_moved", (gpointer)&(view->mouse_moved))) view->mouse_moved = NULL; if(!g_module_symbol(view->module, "button_released", (gpointer)&(view->button_released))) view->button_released = NULL; if(!g_module_symbol(view->module, "button_pressed", (gpointer)&(view->button_pressed))) view->button_pressed = NULL; if(!g_module_symbol(view->module, "key_pressed", (gpointer)&(view->key_pressed))) view->key_pressed = NULL; if(!g_module_symbol(view->module, "key_released", (gpointer)&(view->key_released))) view->key_released = NULL; if(!g_module_symbol(view->module, "configure", (gpointer)&(view->configure))) view->configure = NULL; if(!g_module_symbol(view->module, "scrolled", (gpointer)&(view->scrolled))) view->scrolled = NULL; if(!g_module_symbol(view->module, "border_scrolled", (gpointer)&(view->border_scrolled))) view->border_scrolled = NULL; if(!g_module_symbol(view->module, "init_key_accels", (gpointer)&(view->init_key_accels))) view->init_key_accels = NULL; if(!g_module_symbol(view->module, "connect_key_accels", (gpointer)&(view->connect_key_accels))) view->connect_key_accels = NULL; view->accel_closures = NULL; if(view->init) view->init(view); if(view->init_key_accels) view->init_key_accels(view); /* success */ retval = 0; out: g_free(libname); return retval; }