return FALSE;
}
+#if 0
+ printf("PID: %d [%s]\n", getpid(),
+ (IS_CHILD_PROCESS(audio.mixer_pid) ? "child" : "parent"));
+ Delay(10000 * 0);
+#endif
+
if (IS_CHILD_PROCESS(audio.mixer_pid))
Mixer_Main(); /* this function never returns */
else
Error(ERR_EXIT_SOUND_SERVER, "broken pipe -- no sounds");
}
-static void WriteReloadInfoToPipe(char *set_name, int type)
+static void WriteReloadInfoToPipe(char *set_identifier, int type)
{
SoundControl snd_ctrl;
TreeInfo *ti = (type == SND_CTRL_RELOAD_SOUNDS ? artwork.snd_current :
artwork.mus_current);
unsigned long str_size1 = strlen(leveldir_current->fullpath) + 1;
- unsigned long str_size2 = strlen(ti->basepath) + 1;
- unsigned long str_size3 = strlen(ti->fullpath) + 1;
+ unsigned long str_size2 = strlen(leveldir_current->sounds_path) + 1;
+ unsigned long str_size3 = strlen(leveldir_current->music_path) + 1;
+ unsigned long str_size4 = strlen(ti->basepath) + 1;
+ unsigned long str_size5 = strlen(ti->fullpath) + 1;
boolean override_level_artwork = (type == SND_CTRL_RELOAD_SOUNDS ?
setup.override_level_sounds :
setup.override_level_music);
snd_ctrl.active = FALSE;
snd_ctrl.state = type;
- snd_ctrl.data_len = strlen(set_name) + 1;
+ snd_ctrl.data_len = strlen(set_identifier) + 1;
if (write(audio.mixer_pipe[1], &snd_ctrl,
sizeof(snd_ctrl)) < 0 ||
- write(audio.mixer_pipe[1], set_name,
+ write(audio.mixer_pipe[1], set_identifier,
snd_ctrl.data_len) < 0 ||
write(audio.mixer_pipe[1], &override_level_artwork,
sizeof(boolean)) < 0 ||
sizeof(unsigned long)) < 0 ||
write(audio.mixer_pipe[1], &str_size3,
sizeof(unsigned long)) < 0 ||
+ write(audio.mixer_pipe[1], &str_size4,
+ sizeof(unsigned long)) < 0 ||
+ write(audio.mixer_pipe[1], &str_size5,
+ sizeof(unsigned long)) < 0 ||
write(audio.mixer_pipe[1], leveldir_current->fullpath,
str_size1) < 0 ||
- write(audio.mixer_pipe[1], ti->basepath,
+ write(audio.mixer_pipe[1], leveldir_current->sounds_path,
str_size2) < 0 ||
+ write(audio.mixer_pipe[1], leveldir_current->music_path,
+ str_size3) < 0 ||
+ write(audio.mixer_pipe[1], ti->basepath,
+ str_size4) < 0 ||
write(audio.mixer_pipe[1], ti->fullpath,
- str_size3) < 0)
+ str_size5) < 0)
{
Error(ERR_WARN, "cannot pipe to child process -- no sounds");
audio.sound_available = audio.sound_enabled = FALSE;
TreeInfo **ti_ptr = ((snd_ctrl->state & SND_CTRL_RELOAD_SOUNDS) ?
&artwork.snd_current : &artwork.mus_current);
TreeInfo *ti = *ti_ptr;
- unsigned long str_size1, str_size2, str_size3;
- static char *set_name = NULL;
+ unsigned long str_size1, str_size2, str_size3, str_size4, str_size5;
+ static char *set_identifier = NULL;
boolean *override_level_artwork = (snd_ctrl->state & SND_CTRL_RELOAD_SOUNDS ?
&setup.override_level_sounds :
&setup.override_level_music);
- if (set_name)
- free(set_name);
+ if (set_identifier)
+ free(set_identifier);
- set_name = checked_malloc(snd_ctrl->data_len);
+ set_identifier = checked_malloc(snd_ctrl->data_len);
if (leveldir_current == NULL)
leveldir_current = checked_calloc(sizeof(TreeInfo));
+
if (ti == NULL)
ti = *ti_ptr = checked_calloc(sizeof(TreeInfo));
if (leveldir_current->fullpath != NULL)
free(leveldir_current->fullpath);
+ if (leveldir_current->sounds_path != NULL)
+ free(leveldir_current->sounds_path);
+ if (leveldir_current->music_path != NULL)
+ free(leveldir_current->music_path);
if (ti->basepath != NULL)
free(ti->basepath);
if (ti->fullpath != NULL)
free(ti->fullpath);
- if (read(audio.mixer_pipe[0], set_name,
+ if (read(audio.mixer_pipe[0], set_identifier,
snd_ctrl->data_len) != snd_ctrl->data_len ||
read(audio.mixer_pipe[0], override_level_artwork,
sizeof(boolean)) != sizeof(boolean) ||
read(audio.mixer_pipe[0], &str_size2,
sizeof(unsigned long)) != sizeof(unsigned long) ||
read(audio.mixer_pipe[0], &str_size3,
+ sizeof(unsigned long)) != sizeof(unsigned long) ||
+ read(audio.mixer_pipe[0], &str_size4,
+ sizeof(unsigned long)) != sizeof(unsigned long) ||
+ read(audio.mixer_pipe[0], &str_size5,
sizeof(unsigned long)) != sizeof(unsigned long))
Error(ERR_EXIT_SOUND_SERVER, "broken pipe -- no sounds");
leveldir_current->fullpath = checked_calloc(str_size1);
- ti->basepath = checked_calloc(str_size2);
- ti->fullpath = checked_calloc(str_size3);
+ leveldir_current->sounds_path = checked_calloc(str_size2);
+ leveldir_current->music_path = checked_calloc(str_size3);
+ ti->basepath = checked_calloc(str_size4);
+ ti->fullpath = checked_calloc(str_size5);
if (read(audio.mixer_pipe[0], leveldir_current->fullpath,
str_size1) != str_size1 ||
- read(audio.mixer_pipe[0], ti->basepath,
+ read(audio.mixer_pipe[0], leveldir_current->sounds_path,
str_size2) != str_size2 ||
+ read(audio.mixer_pipe[0], leveldir_current->music_path,
+ str_size3) != str_size3 ||
+ read(audio.mixer_pipe[0], ti->basepath,
+ str_size4) != str_size4 ||
read(audio.mixer_pipe[0], ti->fullpath,
- str_size3) != str_size3)
+ str_size5) != str_size5)
Error(ERR_EXIT_SOUND_SERVER, "broken pipe -- no sounds");
if (snd_ctrl->state & SND_CTRL_RELOAD_SOUNDS)
- artwork.sounds_set_current_name = set_name;
+ artwork.snd_current_identifier = set_identifier;
else
- artwork.music_set_current_name = set_name;
+ artwork.mus_current_identifier = set_identifier;
}
#endif /* AUDIO_UNIX_NATIVE */
strcmp(last_music_directory, music_directory) == 0)
return; /* old and new music directory are the same */
- last_music_directory = music_directory;
+ if (last_music_directory != NULL)
+ free(last_music_directory);
+ last_music_directory = getStringCopy(music_directory);
FreeAllMusic();
char *filename = getPath2(music_directory, basename);
MusicInfo *mus_info = NULL;
+#if 0
+ printf("DEBUG: loading music '%s' ...\n", basename);
+#endif
+
if (draw_init_text)
DrawInitText(basename, 150, FC_YELLOW);
int i;
#if 0
- printf("DEBUG: reloading sounds '%s' ...\n",artwork.sounds_set_current_name);
+ printf("DEBUG: reloading sounds '%s' ...\n",artwork.snd_current_identifier);
#endif
LoadSoundsInfo();
static void ReloadCustomMusic()
{
#if 0
- printf("DEBUG: reloading music '%s' ...\n", artwork.music_set_current_name);
+ printf("DEBUG: reloading music '%s' ...\n", artwork.mus_current_identifier);
#endif
#if 0
LoadCustomMusic();
}
-void InitReloadSounds(char *set_name)
+void InitReloadSounds(char *set_identifier)
{
if (!audio.sound_available)
return;
#if defined(AUDIO_UNIX_NATIVE)
- WriteReloadInfoToPipe(set_name, SND_CTRL_RELOAD_SOUNDS);
+ WriteReloadInfoToPipe(set_identifier, SND_CTRL_RELOAD_SOUNDS);
#else
ReloadCustomSounds();
#endif
}
-void InitReloadMusic(char *set_name)
+void InitReloadMusic(char *set_identifier)
{
if (!audio.music_available)
return;
#if defined(AUDIO_UNIX_NATIVE)
- WriteReloadInfoToPipe(set_name, SND_CTRL_RELOAD_MUSIC);
+ WriteReloadInfoToPipe(set_identifier, SND_CTRL_RELOAD_MUSIC);
#else
ReloadCustomMusic();
#endif