From c926d3309ace0ecb51582617fb45c6297f22f886 Mon Sep 17 00:00:00 2001 From: Michael Gernoth Date: Mon, 11 Feb 2008 22:23:19 +0100 Subject: [PATCH] use old forking player when SDL_mixer is not available --- res/micropolis.tcl | 4 ++++ src/sim/w_sound.c | 52 +++++++++++++++++++++++++++++++++++----------- 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/res/micropolis.tcl b/res/micropolis.tcl index 1d56b75..5704330 100644 --- a/res/micropolis.tcl +++ b/res/micropolis.tcl @@ -416,6 +416,10 @@ set FontPath "[pwd]/res/dejavu-lgc" system "xset -fp \"$FontPath\" >/dev/null 2>&1" system "xset +fp \"$FontPath\" >/dev/null 2>&1" +# Ignore SIGCHLD for spawned sound-player childs, this should lead to them +# being reaped by init +signal ignore SIGCHLD + ######################################################################## # Messages diff --git a/src/sim/w_sound.c b/src/sim/w_sound.c index 1c11202..a7dae78 100644 --- a/src/sim/w_sound.c +++ b/src/sim/w_sound.c @@ -237,15 +237,6 @@ MakeSound(char *channel, char *id) fprintf(stderr, "Mix_PlayChannel: %s\n", Mix_GetError()); } -MakeSoundOn(SimView *view, char *channel, char *id) -{ - if (!UserSoundOn) return; - if (!SoundInitialized) return; - - MakeSound(channel, id); -} - - StartBulldozer(void) { if (!UserSoundOn) return; @@ -269,22 +260,50 @@ StopBulldozer(void) #else /* WITH_SDL_MIXER */ InitializeSound() { + SoundInitialized = 1; } ShutDownSound() { + SoundInitialized = 0; } MakeSound(char *channel, char *id) { -} + char filename[256], player[256]; + int i; + pid_t pid; -MakeSoundOn(SimView *view, char *channel, char *id) -{ + if (!UserSoundOn) return; + if (!SoundInitialized) return; + + for (i = 0; i < SIM_NSOUNDS; i++) { + if (!strcmp(sounds[i].id, id)) + break; + } + + snprintf(filename, sizeof(filename), "%s/sounds/%s", ResourceDir, + sounds[i].file); + + snprintf(player, sizeof(player), "%s/sounds/player", ResourceDir); + + pid = fork(); + + switch(pid) { + case 0: + execl(player, player, filename, NULL); + break; + case -1: + perror("fork failed"); + break; + default: + break; + } } StartBulldozer(void) { + MakeSound(0, "Rumble"); } StopBulldozer(void) @@ -293,6 +312,15 @@ StopBulldozer(void) #endif +MakeSoundOn(SimView *view, char *channel, char *id) +{ + if (!UserSoundOn) return; + if (!SoundInitialized) return; + + MakeSound(channel, id); +} + + /* XXX comefrom: doKeyEvent */ SoundOff(void) { -- 2.39.5