t"Real" plugin support via. gmodule (still very very experimental). - vaccinewars - be a doctor and try to vaccinate the world (HTM) git clone git://src.adamsgaard.dk/vaccinewars (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit ed2c06e2d0e4bce066bf8fff4788b014509665fd (DIR) parent 137f2f5d8c2ca095c2db249b5c82d44f9d3089f4 (HTM) Author: Ben Webb <ben@salilab.org> Date: Mon, 13 May 2002 15:35:20 +0000 "Real" plugin support via. gmodule (still very very experimental). Diffstat: M src/sound.c | 38 +++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 12 deletions(-) --- (DIR) diff --git a/src/sound.c b/src/sound.c t@@ -24,23 +24,34 @@ #include <config.h> #endif -#include "sound_esd.h" -#include "sound_sdl.h" -#include "sound_winmm.h" +#include <glib.h> +#include <gmodule.h> + +#include "sound.h" static SoundDriver *driver = NULL; +typedef SoundDriver *(*InitFunc)(void); +GModule *soundmodule = NULL; void SoundInit(void) { -#ifdef HAVE_SDL_MIXER - driver = SoundInit_SDL(); -#endif -//#ifdef HAVE_ESD -// driver = SoundInit_ESD(); -//#endif -#ifdef HAVE_WINMM - driver = SoundInit_WinMM(); -#endif + InitFunc ifunc; + gchar *err; + + soundmodule = g_module_open("sound.so", G_MODULE_BIND_LAZY); + if (!soundmodule) { + g_print("g_module_open failed: %s\n", g_module_error()); + return; + } + if (g_module_symbol(soundmodule, "init", (gpointer *)&ifunc)) { + g_print("module symbol = %p\n", ifunc); + driver = (*ifunc)(); + if (driver) { + g_print("Plugin %s init OK\n", driver->name); + } + } else { + g_print("g_module_symbol failed: %s\n", g_module_error()); + } } void SoundOpen(gchar *drivername) t@@ -55,6 +66,9 @@ void SoundClose(void) if (driver && driver->close) { driver->close(); } + if (soundmodule) { + g_module_close(soundmodule); + } } void SoundPlay(const gchar *snd)