rnd-20001205-3-src
[rocksndiamonds.git] / src / libgame / system.c
index 7ee3e857872d332b18b2a5083c8d1028f11fdc99..07d4de7986f2d164aef559a12e4bda7c2893f68a 100644 (file)
@@ -12,6 +12,7 @@
 ***********************************************************/
 
 #include <string.h>
+#include <signal.h>
 
 #include "platform.h"
 
@@ -56,7 +57,7 @@ int           FrameCounter = 0;
 
 
 /* ========================================================================= */
-/* init functions                                                            */
+/* init/close functions                                                      */
 /* ========================================================================= */
 
 void InitCommandName(char *argv0)
@@ -68,6 +69,15 @@ void InitCommandName(char *argv0)
 void InitExitFunction(void (*exit_function)(int))
 {
   program.exit_function = exit_function;
+
+  /* set signal handlers to custom exit function */
+  signal(SIGINT, exit_function);
+  signal(SIGTERM, exit_function);
+
+#if defined(TARGET_SDL)
+  /* set exit function to automatically cleanup SDL stuff after exit() */
+  atexit(SDL_Quit);
+#endif
 }
 
 void InitPlatformDependantStuff(void)
@@ -75,6 +85,17 @@ void InitPlatformDependantStuff(void)
 #if defined(PLATFORM_MSDOS)
   _fmode = O_BINARY;
 #endif
+
+#if !defined(PLATFORM_UNIX)
+  initErrorFile();
+#endif
+}
+
+void ClosePlatformDependantStuff(void)
+{
+#if !defined(PLATFORM_UNIX)
+  dumpErrorFile();
+#endif
 }
 
 void InitProgramInfo(char *unix_userdata_directory, char *program_title,
@@ -159,6 +180,14 @@ inline void InitVideoDisplay(void)
 #endif
 }
 
+inline void CloseVideoDisplay(void)
+{
+#if defined(TARGET_X11)
+  if (display)
+    XCloseDisplay(display);
+#endif
+}
+
 inline void InitVideoBuffer(DrawBuffer **backbuffer, DrawWindow **window,
                            int width, int height, int depth,
                            boolean fullscreen)
@@ -452,7 +481,8 @@ inline void KeyboardAutoRepeatOn(void)
                      SDL_DEFAULT_REPEAT_INTERVAL / 2);
   SDL_EnableUNICODE(1);
 #else
-  XAutoRepeatOn(display);
+  if (display)
+    XAutoRepeatOn(display);
 #endif
 }
 
@@ -462,7 +492,8 @@ inline void KeyboardAutoRepeatOff(void)
   SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
   SDL_EnableUNICODE(0);
 #else
-  XAutoRepeatOff(display);
+  if (display)
+    XAutoRepeatOff(display);
 #endif
 }