src/music/extmidi.cpp
changeset 6247 7d81e3a5d803
parent 5584 1111b4d36e35
child 7170 923946ec324f
equal deleted inserted replaced
6246:75451000349d 6247:7d81e3a5d803
    19 static struct {
    19 static struct {
    20 	char song[MAX_PATH];
    20 	char song[MAX_PATH];
    21 	pid_t pid;
    21 	pid_t pid;
    22 } _midi;
    22 } _midi;
    23 
    23 
    24 static void DoPlay(void);
    24 static void DoPlay();
    25 static void DoStop(void);
    25 static void DoStop();
    26 
    26 
    27 static const char* ExtMidiStart(const char* const * parm)
    27 static const char* ExtMidiStart(const char* const * parm)
    28 {
    28 {
    29 	_midi.song[0] = '\0';
    29 	_midi.song[0] = '\0';
    30 	_midi.pid = -1;
    30 	_midi.pid = -1;
    31 	return NULL;
    31 	return NULL;
    32 }
    32 }
    33 
    33 
    34 static void ExtMidiStop(void)
    34 static void ExtMidiStop()
    35 {
    35 {
    36 	_midi.song[0] = '\0';
    36 	_midi.song[0] = '\0';
    37 	DoStop();
    37 	DoStop();
    38 }
    38 }
    39 
    39 
    41 {
    41 {
    42 	ttd_strlcpy(_midi.song, filename, lengthof(_midi.song));
    42 	ttd_strlcpy(_midi.song, filename, lengthof(_midi.song));
    43 	DoStop();
    43 	DoStop();
    44 }
    44 }
    45 
    45 
    46 static void ExtMidiStopSong(void)
    46 static void ExtMidiStopSong()
    47 {
    47 {
    48 	_midi.song[0] = '\0';
    48 	_midi.song[0] = '\0';
    49 	DoStop();
    49 	DoStop();
    50 }
    50 }
    51 
    51 
    52 static bool ExtMidiIsPlaying(void)
    52 static bool ExtMidiIsPlaying()
    53 {
    53 {
    54 	if (_midi.pid != -1 && waitpid(_midi.pid, NULL, WNOHANG) == _midi.pid)
    54 	if (_midi.pid != -1 && waitpid(_midi.pid, NULL, WNOHANG) == _midi.pid)
    55 		_midi.pid = -1;
    55 		_midi.pid = -1;
    56 	if (_midi.pid == -1 && _midi.song[0] != '\0') DoPlay();
    56 	if (_midi.pid == -1 && _midi.song[0] != '\0') DoPlay();
    57 	return _midi.pid != -1;
    57 	return _midi.pid != -1;
    60 static void ExtMidiSetVolume(byte vol)
    60 static void ExtMidiSetVolume(byte vol)
    61 {
    61 {
    62 	DEBUG(driver, 1, "extmidi: set volume not implemented");
    62 	DEBUG(driver, 1, "extmidi: set volume not implemented");
    63 }
    63 }
    64 
    64 
    65 static void DoPlay(void)
    65 static void DoPlay()
    66 {
    66 {
    67 	_midi.pid = fork();
    67 	_midi.pid = fork();
    68 	switch (_midi.pid) {
    68 	switch (_midi.pid) {
    69 		case 0: {
    69 		case 0: {
    70 			int d;
    70 			int d;
    89 			_midi.song[0] = '\0';
    89 			_midi.song[0] = '\0';
    90 			break;
    90 			break;
    91 	}
    91 	}
    92 }
    92 }
    93 
    93 
    94 static void DoStop(void)
    94 static void DoStop()
    95 {
    95 {
    96 	if (_midi.pid != -1) kill(_midi.pid, SIGTERM);
    96 	if (_midi.pid != -1) kill(_midi.pid, SIGTERM);
    97 }
    97 }
    98 
    98 
    99 const HalMusicDriver _extmidi_music_driver = {
    99 const HalMusicDriver _extmidi_music_driver = {