extmidi.c
author bjarni
Sun, 23 Jan 2005 22:01:51 +0000
changeset 1128 d3ffc98b92ad
parent 342 a97783c4a357
child 1301 313804601383
permissions -rw-r--r--
(svn r1629) added a counter to tell how many engines you have of each type to the autoreplace vehicle windows and made them show only the vehicles you actually have in the left list.
this also fixes some window updates issues when autoreplacing
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     1
#ifndef __BEOS__
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     2
#ifndef __MORPHOS__
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     3
#include "stdafx.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     4
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "ttd.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     6
#include "hal.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     7
#include <sys/types.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     8
#include <sys/wait.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     9
#include <unistd.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    10
#include <signal.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    11
#include <sys/stat.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    12
#include <errno.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    13
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    14
#ifndef EXTERNAL_PLAYER
342
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    15
#define EXTERNAL_PLAYER "timidity"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    16
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    17
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    18
static pid_t _pid;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    19
342
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    20
static void extmidi_kill(void)
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    21
{
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    22
	if (_pid > 0) {
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    23
		kill(_pid, SIGKILL);
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    24
		while (waitpid(_pid, NULL, WNOHANG) != _pid);
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    25
	}
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    26
	_pid = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    27
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    28
342
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    29
static char *extmidi_start(char **parm)
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    30
{
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    31
	_pid = 0;
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    32
	return NULL;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    33
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    34
342
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    35
static void extmidi_stop(void)
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    36
{
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    37
	extmidi_kill();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    38
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    39
342
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    40
static void extmidi_play_song(const char *filename)
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    41
{
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    42
	extmidi_kill();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    43
342
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    44
	_pid = fork();
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    45
	if (_pid < 0) {
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    46
		fprintf(stderr, "extmidi: couldn't fork: %s\n", strerror(errno));
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    47
		_pid = 0;
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    48
		return;
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    49
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    50
342
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    51
	if (_pid == 0) {
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    52
		#if defined(MIDI_ARG)
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    53
			execlp(EXTERNAL_PLAYER, "extmidi", MIDI_ARG, filename, NULL);
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    54
		#else
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    55
			execlp(EXTERNAL_PLAYER, "extmidi", filename, NULL);
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    56
		#endif
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    57
		fprintf(stderr, "extmidi: couldn't execl: %s\n", strerror(errno));
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    58
		exit(0);
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    59
	}
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    60
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    61
	usleep(500);
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    62
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    63
	if (_pid == waitpid(_pid, NULL, WNOHANG)) {
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    64
		fprintf(stderr, "extmidi: play song failed\n");
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    65
		_pid = 0;
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    66
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    67
		usleep(5000);
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    68
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    69
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    70
342
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    71
static void extmidi_stop_song(void)
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    72
{
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    73
	extmidi_kill();
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    74
}
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    75
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    76
static bool extmidi_is_playing(void)
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    77
{
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    78
	if (_pid == 0)
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    79
		return 0;
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    80
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    81
	if (waitpid(_pid, NULL, WNOHANG) == _pid) {
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    82
		_pid = 0;
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    83
		return 0;
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    84
	}
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    85
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    86
	return 1;
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    87
}
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    88
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    89
static void extmidi_set_volume(byte vol)
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    90
{
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
    91
	fprintf(stderr, "extmidi: set volume not implemented\n");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    92
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    93
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    94
const HalMusicDriver _extmidi_music_driver = {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    95
	extmidi_start,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    96
	extmidi_stop,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    97
	extmidi_play_song,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    98
	extmidi_stop_song,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    99
	extmidi_is_playing,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   100
	extmidi_set_volume,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   101
};
342
a97783c4a357 (svn r518) Merge extmidi.c r441 to trunk:
tron
parents: 0
diff changeset
   102
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   103
#endif /* __MORPHOS__ */
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   104
#endif /* __BEOS__ */