rnd-20050627-1-src
[rocksndiamonds.git] / src / libgame / system.c
index 78fd020039b03ff13ba6895e349387b51c2b8133..e3fbe001184e63468954f372cf5e14d380d8c771 100644 (file)
@@ -75,8 +75,23 @@ void InitProgramInfo(char *argv0,
                     char *cookie_prefix, char *filename_prefix,
                     int program_version)
 {
-  program.command_basename =
-    (strrchr(argv0, '/') ? strrchr(argv0, '/') + 1 : argv0);
+  char *argv0_copy = getStringCopy(argv0);
+  char *argv0_copy_last_slash = strrchr(argv0_copy, '/');
+
+  if (argv0_copy_last_slash != NULL)
+  {
+    program.command_basename = argv0_copy_last_slash + 1;
+    program.command_basepath = argv0_copy;
+    *argv0_copy_last_slash = '\0';
+  }
+  else
+  {
+    program.command_basename = argv0_copy;
+    program.command_basepath = ".";
+  }
+
+  printf("::: command_basepath == '%s'\n", program.command_basepath);
+  printf("::: command_basename == '%s'\n", program.command_basename);
 
   program.userdata_directory = userdata_directory;
   program.program_title = program_title;
@@ -213,6 +228,8 @@ static void DrawBitmapFromTile(Bitmap *bitmap, Bitmap *tile,
 
 void SetBackgroundBitmap(Bitmap *background_bitmap_tile, int mask)
 {
+  /* !!! THIS DOES NOT WORK !!! REPLACED BITMAPS MAY HAVE SAME ADDRESS !!! */
+#if 0
   static Bitmap *main_bitmap_tile = NULL;
   static Bitmap *door_bitmap_tile = NULL;
 
@@ -226,14 +243,15 @@ void SetBackgroundBitmap(Bitmap *background_bitmap_tile, int mask)
   else if (mask == REDRAW_DOOR_1)
   {
     if (background_bitmap_tile == door_bitmap_tile)
-      return;  /* main background tile has not changed */
+      return;          /* main background tile has not changed */
 
     door_bitmap_tile = background_bitmap_tile;
   }
-  else         /* should not happen */
+  else                 /* should not happen */
     return;
+#endif
 
-  if (background_bitmap_tile)
+  if (background_bitmap_tile != NULL)
     gfx.background_bitmap_mask |= mask;
   else
     gfx.background_bitmap_mask &= ~mask;
@@ -249,10 +267,12 @@ void SetBackgroundBitmap(Bitmap *background_bitmap_tile, int mask)
     DrawBitmapFromTile(gfx.background_bitmap, background_bitmap_tile,
                       gfx.real_sx, gfx.real_sy,
                       gfx.full_sxsize, gfx.full_sysize);
-  else
+  else if (mask == REDRAW_DOOR_1)
+  {
     DrawBitmapFromTile(gfx.background_bitmap, background_bitmap_tile,
                       gfx.dx, gfx.dy,
                       gfx.dxsize, gfx.dysize);
+  }
 }
 
 void SetMainBackgroundBitmap(Bitmap *background_bitmap_tile)
@@ -439,8 +459,13 @@ inline boolean DrawingDeactivated(int x, int y, int width, int height)
 
 inline boolean DrawingOnBackground(int x, int y)
 {
+#if 1
+  return (CheckDrawingArea(x, y, 1, 1, gfx.background_bitmap_mask) &&
+         CheckDrawingArea(x, y, 1, 1, gfx.draw_background_mask));
+#else
   return ((gfx.draw_background_mask & gfx.background_bitmap_mask) &&
          CheckDrawingArea(x, y, 1, 1, gfx.draw_background_mask));
+#endif
 }
 
 inline void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap,