+/**
+ * GisPluginConstructor:
+ * @viewer: the viewer the plugin is associated with
+ * @prefs: preferences the plugin can use for storing informtion
+ *
+ * Create a new instance of a plugin. Each plugin should supply a constructor named
+ * gis_plugin_NAME_new in it's shared object.
+ *
+ * Returns: the new plugin
+ */
+typedef GisPlugin *(*GisPluginConstructor)(GisViewer *viewer, GisPrefs *prefs);
+
+struct _GisPlugins {
+ gchar *dir;
+ GList *plugins;
+ GisPrefs *prefs;
+};
+
+GisPlugins *gis_plugins_new(const gchar *dir, GisPrefs *prefs);
+
+void gis_plugins_free();
+
+GList *gis_plugins_available(GisPlugins *plugins);
+
+GisPlugin *gis_plugins_load(GisPlugins *plugins, const char *name,
+ GisViewer *viewer, GisPrefs *prefs);
+
+GisPlugin *gis_plugins_enable(GisPlugins *plugins, const char *name,
+ GisViewer *viewer, GisPrefs *prefs);
+
+GList *gis_plugins_load_enabled(GisPlugins *plugins,
+ GisViewer *viewer, GisPrefs *prefs);
+
+gboolean gis_plugins_disable(GisPlugins *plugins, const char *name);
+
+gboolean gis_plugins_unload(GisPlugins *plugins, const char *name);