t"Real" plugin support via. gmodule (still very very experimental). - vaccinewa… | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit ed2c06e2d0e4bce066bf8fff4788b014509665fd | |
parent 137f2f5d8c2ca095c2db249b5c82d44f9d3089f4 | |
Author: Ben Webb <[email protected]> | |
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(-) | |
--- | |
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) |