tPlugins are now selectable at runtime with the -u, --plugin command line option. - 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 064d97cc35949782635605a9d9caf3b648ed8f52
(DIR) parent 4a84c637bacdf71335f0040279538efc8a403ad8
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Tue, 14 May 2002 13:03:43 +0000
Plugins are now selectable at runtime with the -u, --plugin
command line option.
Diffstat:
M src/curses_client/curses_client.c | 2 +-
M src/dopewars.c | 22 ++++++++++------------
M src/dopewars.h | 3 ++-
M src/gui_client/gtk_client.c | 2 +-
M src/sound.c | 81 ++++++++++++++++++++++---------
M src/sound.h | 2 +-
6 files changed, 73 insertions(+), 39 deletions(-)
---
(DIR) diff --git a/src/curses_client/curses_client.c b/src/curses_client/curses_client.c
t@@ -2410,7 +2410,7 @@ void CursesLoop(void)
LogMask() | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_WARNING,
LogMessage, NULL);
- SoundOpen(NULL);
+ SoundOpen(WantedPlugin);
display_intro();
(DIR) diff --git a/src/dopewars.c b/src/dopewars.c
t@@ -78,7 +78,7 @@ gboolean Network, Client, Server, NotifyMetaServer, AIPlayer;
unsigned Port = 7902;
gboolean Sanitized, ConfigVerbose, DrugValue;
gchar *HiScoreFile = NULL, *ServerName = NULL, *ConvertFile = NULL;
-gchar *ServerMOTD = NULL;
+gchar *ServerMOTD = NULL, *WantedPlugin = NULL;
gboolean WantHelp, WantVersion, WantAntique, WantColour, WantNetwork;
gboolean WantConvert, WantAdmin;
t@@ -2515,8 +2515,7 @@ void SetupParameters(void)
static void PluginHelp(void)
{
- GSList *listpt = NULL;
- const gchar *plugname;
+ gchar *plugins;
#ifdef HAVE_GETOPT_LONG
g_print(_(" -u, --plugin=FILE use sound plugin \"FILE\"\n"
" "));
t@@ -2524,14 +2523,9 @@ static void PluginHelp(void)
g_print(_(" -u file use sound plugin \"file\"\n"
" "));
#endif
- g_print("(\"none\"");
- do {
- plugname = GetPluginName(&listpt);
- if (plugname) {
- g_print(", \"%s\"", plugname);
- }
- } while(plugname);
- g_print(_(" available)\n"));
+ plugins = GetPluginList();
+ g_print(_("(%s available)\n"), plugins);
+ g_free(plugins);
}
void HandleHelpTexts(void)
t@@ -2616,7 +2610,7 @@ Report bugs to the author at ben@bellatrix.pcl.ox.ac.uk\n"), DATADIR);
void HandleCmdLine(int argc, char *argv[])
{
int c;
- static const gchar *options = "anbchvf:o:sSp:g:r:wtC:l:NA";
+ static const gchar *options = "anbchvf:o:sSp:g:r:wtC:l:NAu:";
#ifdef HAVE_GETOPT_LONG
static const struct option long_options[] = {
t@@ -2637,6 +2631,7 @@ void HandleCmdLine(int argc, char *argv[])
{"convert", required_argument, NULL, 'C'},
{"logfile", required_argument, NULL, 'l'},
{"admin", no_argument, NULL, 'A'},
+ {"plugin", required_argument, NULL, 'u'},
{"help", no_argument, NULL, 'h'},
{"version", no_argument, NULL, 'v'},
{0, 0, 0, 0}
t@@ -2697,6 +2692,9 @@ void HandleCmdLine(int argc, char *argv[])
case 'l':
AssignName(&Log.File, optarg);
break;
+ case 'u':
+ AssignName(&WantedPlugin, optarg);
+ break;
case 'w':
WantedClient = CLIENT_WINDOW;
break;
(DIR) diff --git a/src/dopewars.h b/src/dopewars.h
t@@ -167,7 +167,8 @@ extern unsigned Port;
extern gboolean Sanitized, ConfigVerbose, DrugValue;
extern int NumLocation, NumGun, NumCop, NumDrug, NumSubway, NumPlaying,
NumStoppedTo;
-extern gchar *HiScoreFile, *ServerName, *ConvertFile, *ServerMOTD;
+extern gchar *HiScoreFile, *ServerName, *ConvertFile, *ServerMOTD,
+ *WantedPlugin;
extern gboolean WantHelp, WantVersion, WantAntique, WantColour,
WantNetwork, WantConvert, WantAdmin;
#ifdef CYGWIN
(DIR) diff --git a/src/gui_client/gtk_client.c b/src/gui_client/gtk_client.c
t@@ -2220,7 +2220,7 @@ gboolean GtkLoop(int *argc, char **argv[], gboolean ReturnOnFail)
if (!CheckHighScoreFileConfig())
return TRUE;
- SoundOpen(NULL);
+ SoundOpen(WantedPlugin);
/* Create the main player */
ClientData.Play = g_new(Player, 1);
(DIR) diff --git a/src/sound.c b/src/sound.c
t@@ -37,37 +37,42 @@
#include "plugins/sound_winmm.h"
#endif
+#include "nls.h"
#include "sound.h"
+#define NOPLUGIN "none"
+
static SoundDriver *driver = NULL;
static GSList *driverlist = NULL;
typedef SoundDriver *(*InitFunc)(void);
-static gboolean module_open = FALSE;
-const gchar *GetPluginName(GSList **listpt)
+gchar *GetPluginList(void)
{
- if (!*listpt) {
- *listpt = driverlist;
- } else {
- *listpt = g_slist_next(*listpt);
- }
- if (*listpt) {
- SoundDriver *drivpt = (SoundDriver *)(*listpt)->data;
+ GSList *listpt;
+ GString *plugins;
+ gchar *retstr;
+
+ plugins = g_string_new("\""NOPLUGIN"\"");
+ for (listpt = driverlist; listpt; listpt = g_slist_next(listpt)) {
+ SoundDriver *drivpt = (SoundDriver *)listpt->data;
- if (drivpt) {
- return drivpt->name;
+ if (drivpt && drivpt->name) {
+ g_string_sprintfa(plugins, ", \"%s\"", drivpt->name);
}
}
- return NULL;
+ retstr = plugins->str;
+ g_string_free(plugins, FALSE);
+ return retstr;
}
static void AddPlugin(InitFunc ifunc, void *module)
{
- driver = (*ifunc)();
- if (driver) {
- g_print("%s sound plugin init OK\n", driver->name);
- driver->module = module;
- driverlist = g_slist_append(driverlist, driver);
+ SoundDriver *newdriver = (*ifunc)();
+
+ if (newdriver) {
+ g_print("%s sound plugin init OK\n", newdriver->name);
+ newdriver->module = module;
+ driverlist = g_slist_append(driverlist, newdriver);
}
}
t@@ -148,14 +153,44 @@ void SoundInit(void)
AddPlugin(sound_winmm_init, NULL);
#endif
#endif
- module_open = FALSE;
+ driver = NULL;
+}
+
+static SoundDriver *GetPlugin(gchar *drivername)
+{
+ GSList *listpt;
+
+ for (listpt = driverlist; listpt; listpt = g_slist_next(listpt)) {
+ SoundDriver *drivpt = (SoundDriver *)listpt->data;
+
+ if (drivpt && drivpt->name
+ && (!drivername || strcmp(drivpt->name, drivername) == 0)) {
+ return drivpt;
+ }
+ }
+ return NULL;
}
void SoundOpen(gchar *drivername)
{
- if (driver && driver->open && !module_open) {
- driver->open();
- module_open = TRUE;
+ if (!drivername || strcmp(drivername, NOPLUGIN) != 0) {
+ driver = GetPlugin(drivername);
+ if (driver) {
+ if (driver->open) {
+ g_print("Using plugin %s\n", driver->name);
+ driver->open();
+ }
+ } else if (drivername) {
+ gchar *plugins, *err;
+
+ plugins = GetPluginList();
+ err = g_strdup_printf(_("Invalid plugin \"%s\" selected.\n"
+ "(%s available; now using \"%s\".)"),
+ drivername, plugins, NOPLUGIN);
+ g_log(NULL, G_LOG_LEVEL_CRITICAL, err);
+ g_free(plugins);
+ g_free(err);
+ }
}
}
t@@ -166,9 +201,9 @@ void SoundClose(void)
SoundDriver *listdriv;
#endif
- if (driver && driver->close && module_open) {
+ if (driver && driver->close) {
driver->close();
- module_open = FALSE;
+ driver = NULL;
}
#ifdef PLUGINS
for (listpt = driverlist; listpt; listpt = g_slist_next(listpt)) {
(DIR) diff --git a/src/sound.h b/src/sound.h
t@@ -37,7 +37,7 @@ struct _SoundDriver {
};
typedef struct _SoundDriver SoundDriver;
-const gchar *GetPluginName(GSList **listpt);
+gchar *GetPluginList(void);
void SoundInit(void);
void SoundOpen(gchar *drivername);
void SoundClose(void);