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 truelight@0: #define EXTERNAL_PLAYER "/usr/bin/timidity" truelight@0: #endif truelight@0: truelight@0: static pid_t _pid; truelight@0: truelight@0: static void extmidi_kill(void) { truelight@0: if(_pid > 0) { truelight@0: kill(_pid, SIGKILL); truelight@0: while(waitpid(_pid, NULL, WNOHANG) != _pid); truelight@0: } truelight@0: _pid = 0; truelight@0: } truelight@0: truelight@0: static char *extmidi_start(char **parm) { truelight@0: _pid = 0; truelight@0: truelight@0: return NULL; truelight@0: } truelight@0: truelight@0: static void extmidi_stop(void) { truelight@0: extmidi_kill(); truelight@0: } truelight@0: truelight@0: static void extmidi_play_song(const char *filename) { truelight@0: extmidi_kill(); truelight@0: truelight@0: _pid = fork(); truelight@0: if(_pid < 0) { truelight@0: fprintf(stderr, "extmidi: couldn't fork: %s\n", strerror(errno)); truelight@0: _pid = 0; truelight@0: return; truelight@0: } truelight@0: truelight@0: if(_pid == 0) { truelight@0: #if defined(MIDI_ARG) truelight@0: execl(EXTERNAL_PLAYER, "extmidi", MIDI_ARG, filename, NULL); truelight@0: #else truelight@0: execl(EXTERNAL_PLAYER, "extmidi", filename, NULL); truelight@0: #endif truelight@0: truelight@0: fprintf(stderr, "extmidi: couldn't execl: %s\n", strerror(errno)); truelight@0: truelight@0: exit(0); truelight@0: } truelight@0: truelight@0: truelight@0: truelight@0: usleep(500); truelight@0: truelight@0: truelight@0: if(_pid == waitpid(_pid, NULL, WNOHANG)) { truelight@0: fprintf(stderr, "extmidi: play song failed\n"); truelight@0: _pid = 0; truelight@0: truelight@0: usleep(5000); truelight@0: truelight@0: } truelight@0: } truelight@0: truelight@0: static void extmidi_stop_song(void) { truelight@0: extmidi_kill(); truelight@0: } truelight@0: truelight@0: static bool extmidi_is_playing(void) { truelight@0: if(_pid == 0) truelight@0: return 0; truelight@0: truelight@0: if(waitpid(_pid, NULL, WNOHANG) == _pid) { truelight@0: _pid = 0; truelight@0: return 0; truelight@0: } truelight@0: truelight@0: return 1; truelight@0: } truelight@0: truelight@0: static void extmidi_set_volume(byte vol) { truelight@0: 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: }; truelight@0: #endif /* __MORPHOS__ */ truelight@0: #endif /* __BEOS__ */