rnd-20001210-2-src
[rocksndiamonds.git] / src / libgame / system.c
index 07d4de7986f2d164aef559a12e4bda7c2893f68a..5217460d47f80ed11a9dc3dcb4b14b7de09790cf 100644 (file)
@@ -87,8 +87,14 @@ void InitPlatformDependantStuff(void)
 #endif
 
 #if !defined(PLATFORM_UNIX)
+  program.userdata_directory = "userdata";
   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)
@@ -549,10 +555,8 @@ inline boolean ChangeVideoModeIfNeeded(boolean fullscreen)
 Bitmap *LoadImage(char *basename)
 {
   Bitmap *new_bitmap;
-  char filename[256];
-
-  sprintf(filename, "%s/%s/%s",
-         options.ro_base_directory, GRAPHICS_DIRECTORY, basename);
+  char *filename = getPath3(options.ro_base_directory, GRAPHICS_DIRECTORY,
+                           basename);
 
 #if defined(TARGET_SDL)
   new_bitmap = SDLLoadImage(filename);
@@ -560,6 +564,8 @@ Bitmap *LoadImage(char *basename)
   new_bitmap = X11LoadImage(filename);
 #endif
 
+  free(filename);
+
   return new_bitmap;
 }
 
@@ -568,50 +574,44 @@ Bitmap *LoadImage(char *basename)
 /* audio functions                                                           */
 /* ========================================================================= */
 
-inline boolean OpenAudio(struct AudioSystemInfo *audio)
+inline void OpenAudio(void)
 {
-  audio->sound_available = FALSE;
-  audio->loops_available = FALSE;
-  audio->sound_enabled = FALSE;
-  audio->soundserver_pipe[0] = audio->soundserver_pipe[1] = 0;
-  audio->soundserver_pid = 0;
-  audio->device_name = NULL;
-  audio->device_fd = 0;
+  /* always start with reliable default values */
+  audio.sound_available = FALSE;
+  audio.music_available = FALSE;
+  audio.loops_available = FALSE;
+  audio.mods_available = FALSE;
+  audio.sound_enabled = FALSE;
+
+  audio.soundserver_pipe[0] = audio.soundserver_pipe[1] = 0;
+  audio.soundserver_pid = 0;
+  audio.device_name = NULL;
+  audio.device_fd = 0;
+
+  audio.channels = 0;
+  audio.music_channel = 0;
+  audio.music_nr = 0;
 
 #if defined(TARGET_SDL)
-  if (SDLOpenAudio())
-  {
-    audio->sound_available = TRUE;
-    audio->loops_available = TRUE;
-    audio->sound_enabled = TRUE;
-  }
+  SDLOpenAudio();
 #elif defined(PLATFORM_MSDOS)
-  if (MSDOSOpenAudio())
-  {
-    audio->sound_available = TRUE;
-    audio->loops_available = TRUE;
-    audio->sound_enabled = TRUE;
-  }
+  MSDOSOpenAudio();
 #elif defined(PLATFORM_UNIX)
-  UnixOpenAudio(audio);
+  UnixOpenAudio();
 #endif
-
-  return audio->sound_available;
 }
 
-inline void CloseAudio(struct AudioSystemInfo *audio)
+inline void CloseAudio(void)
 {
 #if defined(TARGET_SDL)
   SDLCloseAudio();
 #elif defined(PLATFORM_MSDOS)
   MSDOSCloseAudio();
 #elif defined(PLATFORM_UNIX)
-  UnixCloseAudio(audio);
+  UnixCloseAudio();
 #endif
 
-  audio->sound_available = FALSE;
-  audio->loops_available = FALSE;
-  audio->sound_enabled = FALSE;
+  audio.sound_enabled = FALSE;
 }
 
 inline void SetAudioMode(boolean enabled)