From 467fb3a191a20318590ac5681e21bcfefb0eb2ad Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Wed, 4 Sep 2002 00:51:41 +0200 Subject: [PATCH] rnd-20020904-1-src --- src/conftime.h | 2 +- src/libgame/misc.c | 36 ++++++-- src/libgame/misc.h | 6 +- src/libgame/sound.c | 206 ++++---------------------------------------- 4 files changed, 47 insertions(+), 203 deletions(-) diff --git a/src/conftime.h b/src/conftime.h index 45532d5f..d5ca4139 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2002-09-03 21:23]" +#define COMPILE_DATE_STRING "[2002-09-04 00:47]" diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 6db94000..f222f31e 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -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; inum_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 */ diff --git a/src/libgame/misc.h b/src/libgame/misc.h index 7f8c2fd6..521ba1b1 100644 --- a/src/libgame/misc.h +++ b/src/libgame/misc.h @@ -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) diff --git a/src/libgame/sound.c b/src/libgame/sound.c index d31bc586..e44d2dcd 100644 --- a/src/libgame/sound.c +++ b/src/libgame/sound.c @@ -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