/***********************************************************
* Artsoft Retro-Game Library *
*----------------------------------------------------------*
-* (c) 1994-2001 Artsoft Entertainment *
+* (c) 1994-2002 Artsoft Entertainment *
* Holger Schemel *
* Detmolder Strasse 189 *
* 33604 Bielefeld *
#if !defined(PLATFORM_UNIX)
program.userdata_directory = "userdata";
+#endif
+
+#if defined(PLATFORM_MSDOS)
initErrorFile();
#endif
void ClosePlatformDependantStuff(void)
{
-#if !defined(PLATFORM_UNIX)
+#if defined(PLATFORM_MSDOS)
dumpErrorFile();
#endif
}
return new_bitmap;
}
-inline void FreeBitmap(Bitmap *bitmap)
+inline static void FreeBitmapPointers(Bitmap *bitmap)
{
if (bitmap == NULL)
return;
SDL_FreeSurface(bitmap->surface);
if (bitmap->surface_masked)
SDL_FreeSurface(bitmap->surface_masked);
+ bitmap->surface = NULL;
+ bitmap->surface_masked = NULL;
#else
+ /* The X11 version seems to have a memory leak here -- although
+ "XFreePixmap()" is called, the correspondig memory seems not
+ to be freed (according to "ps"). The SDL version apparently
+ does not have this problem. */
+
if (bitmap->drawable)
XFreePixmap(display, bitmap->drawable);
if (bitmap->clip_mask)
XFreePixmap(display, bitmap->clip_mask);
if (bitmap->stored_clip_gc)
XFreeGC(display, bitmap->stored_clip_gc);
+ /* the other GCs are only pointers to GCs used elsewhere */
+ bitmap->drawable = None;
+ bitmap->clip_mask = None;
+ bitmap->stored_clip_gc = None;
#endif
if (bitmap->source_filename)
free(bitmap->source_filename);
+ bitmap->source_filename = NULL;
+}
+
+inline static void TransferBitmapPointers(Bitmap *src_bitmap,
+ Bitmap *dst_bitmap)
+{
+ if (src_bitmap == NULL || dst_bitmap == NULL)
+ return;
+
+ FreeBitmapPointers(dst_bitmap);
+
+ *dst_bitmap = *src_bitmap;
+}
+
+inline void FreeBitmap(Bitmap *bitmap)
+{
+ if (bitmap == NULL)
+ return;
+
+ FreeBitmapPointers(bitmap);
free(bitmap);
}
if ((gfx.draw_deactivation_mask & REDRAW_FIELD) &&
x < gfx.sx + gfx.sxsize)
return TRUE;
+ else if ((gfx.draw_deactivation_mask & REDRAW_DOORS) &&
+ x > gfx.dx)
+ {
+ if ((gfx.draw_deactivation_mask & REDRAW_DOOR_1) &&
+ y < gfx.dy + gfx.dysize)
+ return TRUE;
+ else if ((gfx.draw_deactivation_mask & REDRAW_DOOR_2) &&
+ y > gfx.vy)
+ return TRUE;
+ }
}
return FALSE;
new_bitmap = X11LoadImage(filename);
#endif
- new_bitmap->source_filename = getStringCopy(filename);
+ if (new_bitmap)
+ new_bitmap->source_filename = getStringCopy(filename);
return new_bitmap;
}
return new_bitmap;
}
-void ReloadCustomImage(Bitmap **bitmap, char *basename)
+void ReloadCustomImage(Bitmap *bitmap, char *basename)
{
char *filename = getCustomImageFilename(basename);
- Bitmap *old_bitmap = *bitmap;
Bitmap *new_bitmap;
if (filename == NULL) /* (should never happen) */
return;
}
- if (strcmp(filename, old_bitmap->source_filename) == 0)
+ if (strcmp(filename, bitmap->source_filename) == 0)
{
/* The old and new image are the same (have the same filename and path).
This usually means that this image does not exist in this graphic set
return;
}
- if (old_bitmap->width != new_bitmap->width ||
- old_bitmap->height != new_bitmap->height)
+ if (bitmap->width != new_bitmap->width ||
+ bitmap->height != new_bitmap->height)
{
Error(ERR_WARN, "ReloadCustomImage: new image has wrong dimensions");
FreeBitmap(new_bitmap);
return;
}
- /* copy filename for new image */
- free(old_bitmap->source_filename);
- old_bitmap->source_filename = getStringCopy(filename);
-
- /* copy bitmap data for new image */
- BlitBitmap(new_bitmap, old_bitmap, 0,0,
- old_bitmap->width, old_bitmap->height, 0,0);
-
- FreeBitmap(new_bitmap);
+ TransferBitmapPointers(new_bitmap, bitmap);
+ free(new_bitmap);
}
audio.sound_available = FALSE;
audio.music_available = FALSE;
audio.loops_available = FALSE;
- audio.mods_available = FALSE;
+
audio.sound_enabled = FALSE;
+ audio.sound_deactivated = FALSE;
- audio.soundserver_pipe[0] = audio.soundserver_pipe[1] = 0;
- audio.soundserver_pid = 0;
+ audio.mixer_pipe[0] = audio.mixer_pipe[1] = 0;
+ audio.mixer_pid = -1;
audio.device_name = NULL;
- audio.device_fd = 0;
+ audio.device_fd = -1;
- audio.channels = 0;
+ audio.num_channels = 0;
audio.music_channel = 0;
- audio.music_nr = 0;
+ audio.first_sound_channel = 0;
#if defined(TARGET_SDL)
SDLOpenAudio();
(int)SDL_GetModState());
#endif
- if (with_modifiers && event->keysym.unicode != 0)
+ if (with_modifiers &&
+ event->keysym.unicode > 0x0000 &&
+ event->keysym.unicode < 0x2000)
return event->keysym.unicode;
else
return event->keysym.sym;