summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Howard2006-10-23 22:27:10 +0000
committerSimon Howard2006-10-23 22:27:10 +0000
commit8efab8a2b8d726e43544f5b12bef3f79df1a31af (patch)
treec7a9cb14c4e5fac8f65d4820bc92b858623ea4bf
parent5c456761451e2002a5ae43f5acf7210ee92f00fa (diff)
downloadchocolate-doom-8efab8a2b8d726e43544f5b12bef3f79df1a31af.tar.gz
chocolate-doom-8efab8a2b8d726e43544f5b12bef3f79df1a31af.tar.bz2
chocolate-doom-8efab8a2b8d726e43544f5b12bef3f79df1a31af.zip
Rename testconfig.[ch] to execute.[ch], add generalised framework for
launching Doom. Make the "Save parameters and launch Doom" option on the main menu work. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 724
-rw-r--r--setup/Makefile.am2
-rw-r--r--setup/execute.c (renamed from setup/testconfig.c)86
-rw-r--r--setup/execute.h (renamed from setup/testconfig.h)6
-rw-r--r--setup/keyboard.c2
-rw-r--r--setup/mainmenu.c28
-rw-r--r--setup/mouse.c2
6 files changed, 111 insertions, 15 deletions
diff --git a/setup/Makefile.am b/setup/Makefile.am
index cb3f2e45..b0f2a276 100644
--- a/setup/Makefile.am
+++ b/setup/Makefile.am
@@ -16,7 +16,7 @@ chocolate_setup_SOURCES = \
mouse.c mouse.h \
multiplayer.c multiplayer.h \
sound.c sound.h \
- testconfig.c testconfig.h \
+ execute.c execute.h \
txt_keyinput.c txt_keyinput.h \
txt_mouseinput.c txt_mouseinput.h
diff --git a/setup/testconfig.c b/setup/execute.c
index 19e1ca2c..09d09489 100644
--- a/setup/testconfig.c
+++ b/setup/execute.c
@@ -19,14 +19,85 @@
// 02111-1307, USA.
//
-// Code for invoking Doom to test the current configuration.
+// Code for invoking Doom
+#include <stdarg.h>
+#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "textscreen.h"
+#include "execute.h"
+
+struct execute_context_s
+{
+ char *response_file;
+ FILE *stream;
+};
+
+execute_context_t *NewExecuteContext(void)
+{
+ execute_context_t *result;
+
+ result = malloc(sizeof(execute_context_t));
+
+#ifdef _WIN32
+ result->response_file = "chocolat.rsp";
+#else
+ result->response_file = "/tmp/chocolate.rsp";
+#endif
+
+ result->stream = fopen(result->response_file, "w");
+
+ if (result->stream == NULL)
+ {
+ fprintf(stderr, "Error opening response file\n");
+ exit(-1);
+ }
+
+ return result;
+}
+
+void AddCmdLineParameter(execute_context_t *context, char *s, ...)
+{
+ va_list args;
+
+ va_start(args, s);
+
+ vfprintf(context->stream, s, args);
+}
+
+void ExecuteDoom(execute_context_t *context)
+{
+ char *cmdline;
+
+ fclose(context->stream);
+
+ // Build the command line
+
+ cmdline = malloc(strlen(INSTALL_DIR)
+ + strlen(context->response_file) + 20);
+
+#ifdef _WIN32
+ sprintf(cmdline, "chocolate-doom @%s", context->response_file);
+#else
+ sprintf(cmdline, INSTALL_DIR "/chocolate-doom @%s", context->response_file);
+#endif
+
+ // Run the command
+ system(cmdline);
+
+ free(cmdline);
+
+ // Destroy context
+ remove(context->response_file);
+ free(context);
+}
+
static void TestCallback(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(data))
{
+ execute_context_t *exec;
txt_window_t *testwindow;
txt_label_t *label;
@@ -38,14 +109,11 @@ static void TestCallback(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(data))
TXT_AddWidget(testwindow, label);
TXT_DrawDesktop();
-#ifdef _WIN32
- // On windows, just run the command - we aren't installed anywhere
- // special.
- system("chocolate-doom -testcontrols");
-#else
- // Use the location where we are installed
- system(INSTALL_DIR "/chocolate-doom -testcontrols");
-#endif
+ // Run with the -testcontrols parameter
+
+ exec = NewExecuteContext();
+ AddCmdLineParameter(exec, "-testcontrols");
+ ExecuteDoom(exec);
TXT_CloseWindow(testwindow);
}
diff --git a/setup/testconfig.h b/setup/execute.h
index 3806e26f..d7d7e6a8 100644
--- a/setup/testconfig.h
+++ b/setup/execute.h
@@ -24,6 +24,12 @@
#include "textscreen.h"
+typedef struct execute_context_s execute_context_t;
+
+execute_context_t *NewExecuteContext(void);
+void AddCmdLineParameter(execute_context_t *context, char *s, ...);
+void ExecuteDoom(execute_context_t *context);
+
txt_window_action_t *TestConfigAction(void);
#endif /* #ifndef TESTCONFIG_H */
diff --git a/setup/keyboard.c b/setup/keyboard.c
index 0485decb..0b434859 100644
--- a/setup/keyboard.c
+++ b/setup/keyboard.c
@@ -20,7 +20,7 @@
//
#include "textscreen.h"
-#include "testconfig.h"
+#include "execute.h"
#include "txt_keyinput.h"
#include "keyboard.h"
diff --git a/setup/mainmenu.c b/setup/mainmenu.c
index ca29e9cf..2b484418 100644
--- a/setup/mainmenu.c
+++ b/setup/mainmenu.c
@@ -23,6 +23,8 @@
#include "config.h"
#include "textscreen.h"
+#include "execute.h"
+
#include "configfile.h"
#include "m_argv.h"
@@ -33,7 +35,7 @@
#include "multiplayer.h"
#include "sound.h"
-void DoQuit(void *widget, void *dosave)
+static void DoQuit(void *widget, void *dosave)
{
if (dosave != NULL)
{
@@ -43,7 +45,7 @@ void DoQuit(void *widget, void *dosave)
exit(0);
}
-void QuitConfirm(void *unused1, void *unused2)
+static void QuitConfirm(void *unused1, void *unused2)
{
txt_window_t *window;
txt_label_t *label;
@@ -71,6 +73,26 @@ void QuitConfirm(void *unused1, void *unused2)
TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, NULL);
}
+static void LaunchDoom(void *unused1, void *unused2)
+{
+ execute_context_t *exec;
+
+ // Save configuration first
+
+ M_SaveDefaults();
+
+ // Shut down textscreen GUI
+
+ TXT_Shutdown();
+
+ // Launch Doom
+
+ exec = NewExecuteContext();
+ ExecuteDoom(exec);
+
+ exit(0);
+}
+
void MainMenu(void)
{
txt_window_t *window;
@@ -89,7 +111,7 @@ void MainMenu(void)
(TxtWidgetSignalFunc) ConfigSound, NULL),
TXT_NewButton2("Compatibility",
(TxtWidgetSignalFunc) CompatibilitySettings, NULL),
- TXT_NewButton("Save parameters and launch DOOM"),
+ TXT_NewButton2("Save parameters and launch DOOM", LaunchDoom, NULL),
TXT_NewStrut(0, 1),
TXT_NewButton2("Start a Network game",
(TxtWidgetSignalFunc) StartMultiGame, NULL),
diff --git a/setup/mouse.c b/setup/mouse.c
index 2dbec612..c2d7e155 100644
--- a/setup/mouse.c
+++ b/setup/mouse.c
@@ -23,7 +23,7 @@
#include "textscreen.h"
-#include "testconfig.h"
+#include "execute.h"
#include "txt_mouseinput.h"
#include "mouse.h"