rnd-20020904-1-src
authorHolger Schemel <info@artsoft.org>
Tue, 3 Sep 2002 22:51:41 +0000 (00:51 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:38:14 +0000 (10:38 +0200)
src/conftime.h
src/libgame/misc.c
src/libgame/misc.h
src/libgame/sound.c

index 45532d5fc0ae5259c560b7d4373f74292a55db82..d5ca41392a79b47b08f10264b2c5ded539ea63c6 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2002-09-03 21:23]"
+#define COMPILE_DATE_STRING "[2002-09-04 00:47]"
index 6db94000c6a955dc0c053639f310fef91b8e0c70..f222f31ea3bc4fdb0672245e12bdb50dee6556a7 100644 (file)
@@ -1500,7 +1500,7 @@ void LoadArtworkToList(struct ArtworkListInfo *artwork_info,
 #endif
 }
 
-void ReloadCustomArtworkFiles(struct ArtworkListInfo *artwork_info)
+void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info)
 {
   static struct
   {
@@ -1519,14 +1519,6 @@ void ReloadCustomArtworkFiles(struct ArtworkListInfo *artwork_info)
   struct ArtworkConfigInfo *config_list = artwork_info->config_list;
   int i;
 
-#if 0
-  Delay(5000);
-#endif
-
-#if 0
-  printf("DEBUG: reloading sounds '%s' ...\n",artwork.snd_current_identifier);
-#endif
-
   LoadArtworkConfig(artwork_info);
 
   if (draw_init[artwork_info->type].do_it)
@@ -1558,6 +1550,32 @@ void ReloadCustomArtworkFiles(struct ArtworkListInfo *artwork_info)
 #endif
 }
 
+void FreeCustomArtworkList(struct ArtworkListInfo *artwork_info)
+{
+  int i;
+
+  if (artwork_info->artwork_list == NULL)
+    return;
+
+#if 0
+  printf("%s: FREEING ARTWORK ...\n",
+        IS_CHILD_PROCESS(audio.mixer_pid) ? "CHILD" : "PARENT");
+#endif
+
+  for(i=0; i<artwork_info->num_list_entries; i++)
+    deleteArtworkListEntry(artwork_info, &artwork_info->artwork_list[i]);
+
+#if 0
+  printf("%s: FREEING ARTWORK -- DONE\n",
+        IS_CHILD_PROCESS(audio.mixer_pid) ? "CHILD" : "PARENT");
+#endif
+
+  free(artwork_info->artwork_list);
+
+  artwork_info->artwork_list = NULL;
+  artwork_info->num_list_entries = 0;
+}
+
 
 /* ========================================================================= */
 /* functions only needed for non-Unix (non-command-line) systems             */
index 7f8c2fd6bc868651ed3955a7c5e91983198e720a..521ba1b16e0a375e66c4249fd5c7bc26f6391fc3 100644 (file)
@@ -126,10 +126,8 @@ boolean FileIsSound(char *);
 boolean FileIsMusic(char *);
 boolean FileIsArtworkType(char *, int);
 
-/*
-void LoadArtworkConfig(struct ArtworkListInfo *);
-*/
-void ReloadCustomArtworkFiles(struct ArtworkListInfo *);
+void ReloadCustomArtworkList(struct ArtworkListInfo *);
+void FreeCustomArtworkList(struct ArtworkListInfo *);
 
 
 #if !defined(PLATFORM_UNIX)
index d31bc586cb5c9c8a46622eb6aca0f219ecaa4d9b..e44d2dcd14c2471667367191b6b89401d33dc42a 100644 (file)
@@ -152,10 +152,7 @@ struct SoundControl
 };
 typedef struct SoundControl SoundControl;
 
-static struct ArtworkListInfo sound_info;
-
-static struct ArtworkConfigInfo *sound_config = NULL;
-static ListNode *SoundFileList = NULL;
+static struct ArtworkListInfo *sound_info = NULL;
 static SoundInfo **Sound = NULL;
 static MusicInfo **Music = NULL;
 static int num_sounds = 0, num_music = 0;
@@ -1724,126 +1721,24 @@ static void *Load_WAV(char *filename)
   return snd_info;
 }
 
-static void deleteSoundEntry(SoundInfo **snd_info)
-{
-  if (*snd_info)
-  {
-    char *filename = (*snd_info)->source_filename;
-
-#if 0
-    printf("[decrementing reference counter of sound '%s']\n", filename);
-#endif
-
-    if (--(*snd_info)->num_references <= 0)
-    {
-#if 0
-      printf("[deleting sound '%s']\n", filename);
-#endif
-
-      /*
-      FreeSound(*snd_info);
-      */
-      deleteNodeFromList(&SoundFileList, filename, FreeSound);
-    }
-
-    *snd_info = NULL;
-  }
-}
-
-static void replaceSoundEntry(SoundInfo **snd_info, char *filename)
-{
-  ListNode *node;
-
-  /* check if the old and the new sound file are the same */
-  if (*snd_info && strcmp((*snd_info)->source_filename, filename) == 0)
-  {
-    /* The old and new sound are the same (have the same filename and path).
-       This usually means that this sound does not exist in this sound set
-       and a fallback to the existing sound is done. */
-
-#if 0
-    printf("[sound '%s' already exists (same list entry)]\n", filename);
-#endif
-
-    return;
-  }
-
-  /* delete existing sound file entry */
-  deleteSoundEntry(snd_info);
-
-  /* check if the new sound file already exists in the list of sounds */
-  if ((node = getNodeFromKey(SoundFileList, filename)) != NULL)
-  {
-#if 0
-      printf("[sound '%s' already exists (other list entry)]\n", filename);
-#endif
-
-      *snd_info = (SoundInfo *)node->content;
-      (*snd_info)->num_references++;
-  }
-  else if ((*snd_info = Load_WAV(filename)) != NULL)   /* load new sound */
-  {
-    (*snd_info)->num_references = 1;
-    addNodeToList(&SoundFileList, (*snd_info)->source_filename, *snd_info);
-  }
-}
-
-static void LoadCustomSound(SoundInfo **snd_info, char *basename)
-{
-  char *filename = getCustomSoundFilename(basename);
-
-#if 0
-  printf("GOT CUSTOM SOUND FILE '%s'\n", filename);
-#endif
-
-  if (strcmp(basename, SND_FILE_UNDEFINED) == 0)
-  {
-    deleteSoundEntry(snd_info);
-    return;
-  }
-
-  if (filename == NULL)
-  {
-    Error(ERR_WARN, "cannot find sound file '%s'", basename);
-    return;
-  }
-
-  replaceSoundEntry(snd_info, filename);
-}
-
 void InitSoundList(struct ArtworkConfigInfo *config_list, int num_list_entries)
 {
-  if (Sound == NULL)
-    Sound = checked_calloc(num_list_entries * sizeof(SoundInfo *));
+  if (sound_info == NULL)
+    sound_info = checked_calloc(sizeof(struct ArtworkListInfo));
 
-  sound_config = config_list;
-  num_sounds = num_list_entries;
+  if (sound_info->artwork_list == NULL)
+    sound_info->artwork_list =
+      checked_calloc(num_list_entries * sizeof(SoundInfo *));
 
-  sound_info.type = ARTWORK_TYPE_SOUNDS;
-  sound_info.num_list_entries = num_list_entries;
-  sound_info.config_list = config_list;
-  sound_info.artwork_list = (struct ArtworkListNodeInfo **)Sound;
-  sound_info.file_list = NULL;
-  sound_info.load_artwork = Load_WAV;
-  sound_info.free_artwork = FreeSound;
-}
+  sound_info->type = ARTWORK_TYPE_SOUNDS;
+  sound_info->num_list_entries = num_list_entries;
+  sound_info->config_list = config_list;
+  sound_info->file_list = NULL;
+  sound_info->load_artwork = Load_WAV;
+  sound_info->free_artwork = FreeSound;
 
-void LoadSoundToList(char *basename, int list_pos)
-{
-  if (Sound == NULL || list_pos >= num_sounds)
-    return;
-
-#if 0
-  printf("loading sound '%s' ...  [%d]\n",
-        basename, getNumNodes(SoundFileList));
-#endif
-
-  LoadCustomSound(&Sound[list_pos], basename);
-
-#if 0
-  printf("loading sound '%s' done [%d]\n",
-        basename, getNumNodes(SoundFileList));
-#endif
+  num_sounds = sound_info->num_list_entries;
+  Sound = (SoundInfo **)sound_info->artwork_list;
 }
 
 static MusicInfo *Load_MOD(char *filename)
@@ -2048,52 +1943,14 @@ void StopSoundExt(int nr, int state)
   HandleSoundRequest(snd_ctrl);
 }
 
-#if 1
-static void ReloadCustomSounds()
-{
-  ReloadCustomArtworkFiles(&sound_info);
-}
-#else
 static void ReloadCustomSounds()
 {
-  static boolean draw_init_text = TRUE;                /* only draw at startup */
-  int i;
-
 #if 0
-  printf("DEBUG: reloading sounds '%s' ...\n",artwork.snd_current_identifier);
+  printf("DEBUG: reloading sounds '%s' ...\n", artwork.snd_current_identifier);
 #endif
 
-  LoadArtworkConfig(&sound_info);
-
-  if (draw_init_text)
-    DrawInitText("Loading sounds:", 120, FC_GREEN);
-
-#if 0
-  printf("DEBUG: reloading %d sounds ...\n", num_sounds);
-#endif
-
-  for(i=0; i<num_sounds; i++)
-  {
-    if (draw_init_text)
-      DrawInitText(sound_config[i].token, 150, FC_YELLOW);
-
-    if (sound_config[i].filename)
-      LoadSoundToList(sound_config[i].filename, i);
-    else
-      LoadSoundToList(sound_config[i].default_filename, i);
-  }
-
-  draw_init_text = FALSE;
-
-  /*
-  printf("list size == %d\n", getNumNodes(SoundFileList));
-  */
-
-#if 0
-  dumpList(SoundFileList);
-#endif
+  ReloadCustomArtworkList(sound_info);
 }
-#endif
 
 static void ReloadCustomMusic()
 {
@@ -2101,11 +1958,6 @@ static void ReloadCustomMusic()
   printf("DEBUG: reloading music '%s' ...\n", artwork.mus_current_identifier);
 #endif
 
-#if 0
-  /* this is done directly in LoadCustomMusic() now */
-  FreeAllMusic();
-#endif
-
   LoadCustomMusic();
 }
 
@@ -2181,31 +2033,7 @@ void FreeMusic(MusicInfo *music)
 
 void FreeAllSounds()
 {
-  int i;
-
-  if (Sound == NULL)
-    return;
-
-#if 0
-  printf("%s: FREEING SOUNDS ...\n",
-        IS_CHILD_PROCESS(audio.mixer_pid) ? "CHILD" : "PARENT");
-#endif
-
-  for(i=0; i<num_sounds; i++)
-    deleteSoundEntry(&Sound[i]);
-  /*
-    FreeSound(Sound[i]);
-  */
-
-#if 0
-  printf("%s: FREEING SOUNDS -- DONE\n",
-        IS_CHILD_PROCESS(audio.mixer_pid) ? "CHILD" : "PARENT");
-#endif
-
-  free(Sound);
-
-  Sound = NULL;
-  num_sounds = 0;
+  FreeCustomArtworkList(sound_info);
 }
 
 void FreeAllMusic()