rnd-20030403-2-src
[rocksndiamonds.git] / src / libgame / system.c
index cb27850b8cc34adc5732f8d13203949765d6fc64..7d25d4cd26962497585b0f605433fc2c609fc5ef 100644 (file)
@@ -36,8 +36,6 @@ struct OptionInfo     options;
 struct VideoSystemInfo video;
 struct AudioSystemInfo audio;
 struct GfxInfo         gfx;
-struct FontInfo                font;
-struct AnimInfo                anim;
 struct ArtworkInfo     artwork;
 struct JoystickInfo    joystick;
 struct SetupInfo       setup;
@@ -68,10 +66,31 @@ int                 FrameCounter = 0;
 /* init/close functions                                                      */
 /* ========================================================================= */
 
-void InitCommandName(char *argv0)
+void InitProgramInfo(char *argv0,
+                    char *userdata_directory, char *program_title,
+                    char *window_title, char *icon_title,
+                    char *x11_icon_filename, char *x11_iconmask_filename,
+                    char *msdos_pointer_filename,
+                    char *cookie_prefix, char *filename_prefix,
+                    int program_version)
 {
   program.command_basename =
     (strrchr(argv0, '/') ? strrchr(argv0, '/') + 1 : argv0);
+
+  program.userdata_directory = userdata_directory;
+  program.program_title = program_title;
+  program.window_title = window_title;
+  program.icon_title = icon_title;
+  program.x11_icon_filename = x11_icon_filename;
+  program.x11_iconmask_filename = x11_iconmask_filename;
+  program.msdos_pointer_filename = msdos_pointer_filename;
+
+  program.cookie_prefix = cookie_prefix;
+  program.filename_prefix = filename_prefix;
+
+  program.version_major = VERSION_MAJOR(program_version);
+  program.version_minor = VERSION_MINOR(program_version);
+  program.version_patch = VERSION_PATCH(program_version);
 }
 
 void InitExitFunction(void (*exit_function)(int))
@@ -92,13 +111,6 @@ void InitPlatformDependantStuff(void)
 {
 #if defined(PLATFORM_MSDOS)
   _fmode = O_BINARY;
-#endif
-
-#if !defined(PLATFORM_UNIX)
-  program.userdata_directory = "userdata";
-#endif
-
-#if defined(PLATFORM_MSDOS)
   initErrorFile();
 #endif
 
@@ -115,37 +127,10 @@ void ClosePlatformDependantStuff(void)
 #endif
 }
 
-void InitProgramInfo(char *unix_userdata_directory, char *program_title,
-                    char *window_title, char *icon_title,
-                    char *x11_icon_filename, char *x11_iconmask_filename,
-                    char *msdos_pointer_filename,
-                    char *cookie_prefix, char *filename_prefix,
-                    int program_version)
-{
-#if defined(PLATFORM_UNIX)
-  program.userdata_directory = unix_userdata_directory;
-#else
-  program.userdata_directory = "userdata";
-#endif
-
-  program.program_title = program_title;
-  program.window_title = window_title;
-  program.icon_title = icon_title;
-  program.x11_icon_filename = x11_icon_filename;
-  program.x11_iconmask_filename = x11_iconmask_filename;
-  program.msdos_pointer_filename = msdos_pointer_filename;
-
-  program.cookie_prefix = cookie_prefix;
-  program.filename_prefix = filename_prefix;
-
-  program.version_major = VERSION_MAJOR(program_version);
-  program.version_minor = VERSION_MINOR(program_version);
-  program.version_patch = VERSION_PATCH(program_version);
-}
-
 void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize,
                      int real_sx, int real_sy,
-                     int full_sxsize, int full_sysize)
+                     int full_sxsize, int full_sysize,
+                     Bitmap *field_save_buffer)
 {
   gfx.sx = sx;
   gfx.sy = sy;
@@ -156,6 +141,8 @@ void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize,
   gfx.full_sxsize = full_sxsize;
   gfx.full_sysize = full_sysize;
 
+  gfx.field_save_buffer = field_save_buffer;
+
   gfx.background_bitmap = NULL;
   gfx.background_bitmap_mask = REDRAW_NONE;
 
@@ -495,6 +482,31 @@ inline void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap,
 #endif
 }
 
+inline void DrawRectangle(Bitmap *bitmap, int x, int y, int width, int height,
+                         Pixel color)
+{
+  if (DrawingDeactivated(x, y, width, height))
+    return;
+
+#ifdef TARGET_SDL
+  SDLFillRectangle(bitmap, x, y, width, height, color);
+#else
+  XSetForeground(display, bitmap->gc, color);
+  XFillRectangle(display, bitmap->drawable, bitmap->gc, x, y, width, height);
+  XSetForeground(display, bitmap->gc, BlackPixel(display, screen));
+#endif
+}
+
+#if 1
+inline void ClearRectangle(Bitmap *bitmap, int x, int y, int width, int height)
+{
+#ifdef TARGET_SDL
+  DrawRectangle(bitmap, x, y, width, height, 0x000000);
+#else
+  DrawRectangle(bitmap, x, y, width, height, 0x000000);
+#endif
+}
+#else
 inline void ClearRectangle(Bitmap *bitmap, int x, int y, int width, int height)
 {
   if (DrawingDeactivated(x, y, width, height))
@@ -506,6 +518,7 @@ inline void ClearRectangle(Bitmap *bitmap, int x, int y, int width, int height)
   XFillRectangle(display, bitmap->drawable, bitmap->gc, x, y, width, height);
 #endif
 }
+#endif
 
 inline void ClearRectangleOnBackground(Bitmap *bitmap, int x, int y,
                                       int width, int height)
@@ -572,7 +585,7 @@ inline void BlitBitmapOnBackground(Bitmap *src_bitmap, Bitmap *dst_bitmap,
                                   int width, int height,
                                   int dst_x, int dst_y)
 {
-  if (DrawingOnBackground(src_x, src_y))
+  if (DrawingOnBackground(dst_x, dst_y))
   {
     /* draw background */
     BlitBitmap(gfx.background_bitmap, dst_bitmap, dst_x, dst_y, width, height,