***********************************************************/
#include <string.h>
+#include <signal.h>
#include "platform.h"
/* ========================================================================= */
-/* init functions */
+/* init/close functions */
/* ========================================================================= */
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)
#if defined(PLATFORM_MSDOS)
_fmode = O_BINARY;
#endif
+
+#if !defined(PLATFORM_UNIX)
+ initErrorFile();
+#endif
+
+#if defined(TARGET_SDL)
+ if (SDL_Init(SDL_INIT_EVENTTHREAD | SDL_INIT_NOPARACHUTE) < 0)
+ Error(ERR_EXIT, "SDL_Init() failed: %s", SDL_GetError());
+#endif
+}
+
+void ClosePlatformDependantStuff(void)
+{
+#if !defined(PLATFORM_UNIX)
+ dumpErrorFile();
+#endif
}
void InitProgramInfo(char *unix_userdata_directory, char *program_title,
#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)
SDL_DEFAULT_REPEAT_INTERVAL / 2);
SDL_EnableUNICODE(1);
#else
- XAutoRepeatOn(display);
+ if (display)
+ XAutoRepeatOn(display);
#endif
}
SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
SDL_EnableUNICODE(0);
#else
- XAutoRepeatOff(display);
+ if (display)
+ XAutoRepeatOff(display);
#endif
}