***********************************************************/
#include <string.h>
+#include <signal.h>
#include "platform.h"
int screen = 0;
Colormap cmap = None;
-DrawWindow window = NULL;
-DrawBuffer backbuffer = NULL;
-DrawBuffer drawto = NULL;
+DrawWindow *window = NULL;
+DrawBuffer *backbuffer = NULL;
+DrawBuffer *drawto = NULL;
int button_status = MB_NOT_PRESSED;
boolean motion_status = FALSE;
/* ========================================================================= */
-/* 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
+}
+
+void ClosePlatformDependantStuff(void)
+{
+#if !defined(PLATFORM_UNIX)
+ dumpErrorFile();
+#endif
}
void InitProgramInfo(char *unix_userdata_directory, char *program_title,
#endif
}
-inline void InitVideoBuffer(DrawBuffer *backbuffer, DrawWindow *window,
+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)
{
#endif
}
-inline Bitmap CreateBitmapStruct(void)
+inline Bitmap *CreateBitmapStruct(void)
{
#ifdef TARGET_SDL
return checked_calloc(sizeof(struct SDLSurfaceInfo));
#endif
}
-inline Bitmap CreateBitmap(int width, int height, int depth)
+inline Bitmap *CreateBitmap(int width, int height, int depth)
{
- Bitmap new_bitmap = CreateBitmapStruct();
+ Bitmap *new_bitmap = CreateBitmapStruct();
int real_depth = GetRealDepth(depth);
#ifdef TARGET_SDL
return new_bitmap;
}
-inline void FreeBitmap(Bitmap bitmap)
+inline void FreeBitmap(Bitmap *bitmap)
{
if (bitmap == NULL)
return;
free(bitmap);
}
-inline void CloseWindow(DrawWindow window)
+inline void CloseWindow(DrawWindow *window)
{
#ifdef TARGET_X11
if (window->drawable)
#endif
}
-inline void BlitBitmap(Bitmap src_bitmap, Bitmap dst_bitmap,
+inline void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap,
int src_x, int src_y,
int width, int height,
int dst_x, int dst_y)
#endif
}
-inline void ClearRectangle(Bitmap bitmap, int x, int y, int width, int height)
+inline void ClearRectangle(Bitmap *bitmap, int x, int y, int width, int height)
{
#ifdef TARGET_SDL
SDLFillRectangle(bitmap, x, y, width, height, 0x000000);
#endif
#endif
-inline void SetClipMask(Bitmap bitmap, GC clip_gc, Pixmap clip_pixmap)
+inline void SetClipMask(Bitmap *bitmap, GC clip_gc, Pixmap clip_pixmap)
{
#ifdef TARGET_X11
if (clip_gc)
#endif
}
-inline void SetClipOrigin(Bitmap bitmap, GC clip_gc, int clip_x, int clip_y)
+inline void SetClipOrigin(Bitmap *bitmap, GC clip_gc, int clip_x, int clip_y)
{
#ifdef TARGET_X11
if (clip_gc)
#endif
}
-inline void BlitBitmapMasked(Bitmap src_bitmap, Bitmap dst_bitmap,
+inline void BlitBitmapMasked(Bitmap *src_bitmap, Bitmap *dst_bitmap,
int src_x, int src_y,
int width, int height,
int dst_x, int dst_y)
#endif
}
-inline void DrawSimpleWhiteLine(Bitmap bitmap, int from_x, int from_y,
+inline void DrawSimpleWhiteLine(Bitmap *bitmap, int from_x, int from_y,
int to_x, int to_y)
{
#ifdef TARGET_SDL
}
#if !defined(TARGET_X11_NATIVE)
-inline void DrawLine(Bitmap bitmap, int from_x, int from_y,
+inline void DrawLine(Bitmap *bitmap, int from_x, int from_y,
int to_x, int to_y, Pixel pixel, int line_width)
{
int x, y;
}
#endif
-inline void DrawLines(Bitmap bitmap, struct XY *points, int num_points,
+inline void DrawLines(Bitmap *bitmap, struct XY *points, int num_points,
Pixel pixel)
{
#if !defined(TARGET_X11_NATIVE)
#endif
}
-inline Pixel GetPixelFromRGB(Bitmap bitmap, unsigned int color_r,
+inline Pixel GetPixelFromRGB(Bitmap *bitmap, unsigned int color_r,
unsigned int color_g, unsigned int color_b)
{
Pixel pixel;
return pixel;
}
-inline Pixel GetPixelFromRGBcompact(Bitmap bitmap, unsigned int color)
+inline Pixel GetPixelFromRGBcompact(Bitmap *bitmap, unsigned int color)
{
unsigned int color_r = (color >> 16) & 0xff;
unsigned int color_g = (color >> 8) & 0xff;
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
}
-inline boolean PointerInWindow(DrawWindow window)
+inline boolean PointerInWindow(DrawWindow *window)
{
#ifdef TARGET_SDL
return TRUE;
return fullscreen;
}
+Bitmap *LoadImage(char *basename)
+{
+ Bitmap *new_bitmap;
+ char filename[256];
+
+ sprintf(filename, "%s/%s/%s",
+ options.ro_base_directory, GRAPHICS_DIRECTORY, basename);
+
+#if defined(TARGET_SDL)
+ new_bitmap = SDLLoadImage(filename);
+#else
+ new_bitmap = X11LoadImage(filename);
+#endif
+
+ return new_bitmap;
+}
+
/* ========================================================================= */
/* audio functions */