summaryrefslogtreecommitdiff
path: root/setup/execute.c
diff options
context:
space:
mode:
authorSimon Howard2006-10-23 22:27:10 +0000
committerSimon Howard2006-10-23 22:27:10 +0000
commit8efab8a2b8d726e43544f5b12bef3f79df1a31af (patch)
treec7a9cb14c4e5fac8f65d4820bc92b858623ea4bf /setup/execute.c
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
Diffstat (limited to 'setup/execute.c')
-rw-r--r--setup/execute.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/setup/execute.c b/setup/execute.c
new file mode 100644
index 00000000..09d09489
--- /dev/null
+++ b/setup/execute.c
@@ -0,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;
+}
+