truelight@0: #ifndef __BEOS__ truelight@0: #ifndef __MORPHOS__ truelight@0: #include "stdafx.h" truelight@0: truelight@0: #include "ttd.h" truelight@0: #include "hal.h" truelight@0: #include truelight@0: #include truelight@0: #include truelight@0: #include truelight@0: #include truelight@0: #include truelight@0: truelight@0: #ifndef EXTERNAL_PLAYER tron@342: #define EXTERNAL_PLAYER "timidity" truelight@0: #endif truelight@0: truelight@0: static pid_t _pid; truelight@0: tron@342: static void extmidi_kill(void) tron@342: { tron@342: if (_pid > 0) { tron@342: kill(_pid, SIGKILL); tron@342: while (waitpid(_pid, NULL, WNOHANG) != _pid); tron@342: } tron@342: _pid = 0; truelight@0: } truelight@0: tron@342: static char *extmidi_start(char **parm) tron@342: { tron@342: _pid = 0; tron@342: return NULL; truelight@0: } truelight@0: tron@342: static void extmidi_stop(void) tron@342: { tron@342: extmidi_kill(); truelight@0: } truelight@0: tron@342: static void extmidi_play_song(const char *filename) tron@342: { tron@342: extmidi_kill(); truelight@0: tron@342: _pid = fork(); tron@342: if (_pid < 0) { tron@342: fprintf(stderr, "extmidi: couldn't fork: %s\n", strerror(errno)); tron@342: _pid = 0; tron@342: return; tron@342: } truelight@0: tron@342: if (_pid == 0) { tron@342: #if defined(MIDI_ARG) tron@342: execlp(EXTERNAL_PLAYER, "extmidi", MIDI_ARG, filename, NULL); tron@342: #else tron@342: execlp(EXTERNAL_PLAYER, "extmidi", filename, NULL); tron@342: #endif tron@342: fprintf(stderr, "extmidi: couldn't execl: %s\n", strerror(errno)); tron@342: exit(0); tron@342: } tron@342: tron@342: usleep(500); tron@342: tron@342: if (_pid == waitpid(_pid, NULL, WNOHANG)) { tron@342: fprintf(stderr, "extmidi: play song failed\n"); tron@342: _pid = 0; tron@342: tron@342: usleep(5000); tron@342: } truelight@0: } truelight@0: tron@342: static void extmidi_stop_song(void) tron@342: { tron@342: extmidi_kill(); tron@342: } tron@342: tron@342: static bool extmidi_is_playing(void) tron@342: { tron@342: if (_pid == 0) tron@342: return 0; tron@342: tron@342: if (waitpid(_pid, NULL, WNOHANG) == _pid) { tron@342: _pid = 0; tron@342: return 0; tron@342: } tron@342: tron@342: return 1; tron@342: } tron@342: tron@342: static void extmidi_set_volume(byte vol) tron@342: { tron@342: fprintf(stderr, "extmidi: set volume not implemented\n"); truelight@0: } truelight@0: truelight@0: const HalMusicDriver _extmidi_music_driver = { truelight@0: extmidi_start, truelight@0: extmidi_stop, truelight@0: extmidi_play_song, truelight@0: extmidi_stop_song, truelight@0: extmidi_is_playing, truelight@0: extmidi_set_volume, truelight@0: }; tron@342: truelight@0: #endif /* __MORPHOS__ */ truelight@0: #endif /* __BEOS__ */