ref: 8efab8a2b8d726e43544f5b12bef3f79df1a31af
parent: 5c456761451e2002a5ae43f5acf7210ee92f00fa
author: Simon Howard <[email protected]>
date: Mon Oct 23 18:27:10 EDT 2006
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
--- a/setup/Makefile.am
+++ b/setup/Makefile.am
@@ -16,7 +16,7 @@
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
--- /dev/null
+++ b/setup/execute.c
@@ -1,0 +1,130 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 2006 Simon Howard
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+
+// 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;
+
+ testwindow = TXT_NewWindow("Starting Doom");
+
+ label = TXT_NewLabel("Starting Doom to test the\n"
+ "settings. Please wait.");
+ TXT_SetWidgetAlign(label, TXT_HORIZ_CENTER);
+ TXT_AddWidget(testwindow, label);
+ TXT_DrawDesktop();
+
+ // Run with the -testcontrols parameter
+
+ exec = NewExecuteContext();
+ AddCmdLineParameter(exec, "-testcontrols");
+ ExecuteDoom(exec);
+
+ TXT_CloseWindow(testwindow);
+}
+
+txt_window_action_t *TestConfigAction(void)
+{
+ txt_window_action_t *test_action;
+
+ test_action = TXT_NewWindowAction('t', "Test");
+ TXT_SignalConnect(test_action, "pressed", TestCallback, NULL);
+
+ return test_action;
+}
+
--- /dev/null
+++ b/setup/execute.h
@@ -1,0 +1,36 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 2006 Simon Howard
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+
+#ifndef TESTCONFIG_H
+#define TESTCONFIG_H
+
+#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 */
+
--- 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"
--- 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 @@
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 @@
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 @@
(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),
--- 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"
--- a/setup/testconfig.c
+++ /dev/null
@@ -1,62 +1,0 @@
-// Emacs style mode select -*- C++ -*-
-//-----------------------------------------------------------------------------
-//
-// Copyright(C) 2006 Simon Howard
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-// 02111-1307, USA.
-//
-
-// Code for invoking Doom to test the current configuration.
-
-#include <stdlib.h>
-
-#include "textscreen.h"
-
-static void TestCallback(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(data))
-{
- txt_window_t *testwindow;
- txt_label_t *label;
-
- testwindow = TXT_NewWindow("Starting Doom");
-
- label = TXT_NewLabel("Starting Doom to test the\n"
- "settings. Please wait.");
- TXT_SetWidgetAlign(label, TXT_HORIZ_CENTER);
- 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
-
- TXT_CloseWindow(testwindow);
-}
-
-txt_window_action_t *TestConfigAction(void)
-{
- txt_window_action_t *test_action;
-
- test_action = TXT_NewWindowAction('t', "Test");
- TXT_SignalConnect(test_action, "pressed", TestCallback, NULL);
-
- return test_action;
-}
-
--- a/setup/testconfig.h
+++ /dev/null
@@ -1,30 +1,0 @@
-// Emacs style mode select -*- C++ -*-
-//-----------------------------------------------------------------------------
-//
-// Copyright(C) 2006 Simon Howard
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-// 02111-1307, USA.
-//
-
-#ifndef TESTCONFIG_H
-#define TESTCONFIG_H
-
-#include "textscreen.h"
-
-txt_window_action_t *TestConfigAction(void);
-
-#endif /* #ifndef TESTCONFIG_H */
-