summaryrefslogtreecommitdiff
path: root/extra/timidity++
diff options
context:
space:
mode:
Diffstat (limited to 'extra/timidity++')
-rw-r--r--extra/timidity++/2.13.2-gcc4.patch30
-rw-r--r--extra/timidity++/PKGBUILD53
-rw-r--r--extra/timidity++/TiMidity++-2.13.2+flac-1.1.3.patch349
-rw-r--r--extra/timidity++/timidity++-2.13.2-exiterror.patch695
-rw-r--r--extra/timidity++/timidity++-2.13.2-gtk26.patch19
-rw-r--r--extra/timidity++/timidity++-2.13.2-polling.patch34
-rw-r--r--extra/timidity++/timidity++.sh38
-rw-r--r--extra/timidity++/timidity.cfg29
8 files changed, 1247 insertions, 0 deletions
diff --git a/extra/timidity++/2.13.2-gcc4.patch b/extra/timidity++/2.13.2-gcc4.patch
new file mode 100644
index 000000000..af0b5f8f7
--- /dev/null
+++ b/extra/timidity++/2.13.2-gcc4.patch
@@ -0,0 +1,30 @@
+diff -ur TiMidity++-2.13.2-orig/interface/xaw_i.c TiMidity++-2.13.2/interface/xaw_i.c
+--- TiMidity++-2.13.2-orig/interface/xaw_i.c 2005-06-25 21:55:19.000000000 -0400
++++ TiMidity++-2.13.2/interface/xaw_i.c 2005-06-25 21:56:01.000000000 -0400
+@@ -261,7 +261,7 @@
+ String bitmapdir = XAW_BITMAP_DIR;
+ Boolean arrangetitle,savelist;
+ static char **current_flist = NULL;
+-static int voices = 0, last_voice = 0, voices_num_width;
++static int xaw_i_voices = 0, last_voice = 0, voices_num_width;
+ static int maxentry_on_a_menu = 0,submenu_n = 0;
+ #define OPTIONS_WINDOW 1
+ #define FLIST_WINDOW 2
+@@ -1329,7 +1329,7 @@
+ c= *(local_buf+1);
+ n= atoi(local_buf+2);
+ if(c == 'L')
+- voices = n;
++ xaw_i_voices = n;
+ else
+ last_voice = n;
+ if(IsTracePlaying()) drawVoices();
+@@ -2070,7 +2070,7 @@
+ XSetForeground(disp, gct, tracecolor);
+ XFillRectangle(disp,XtWindow(trace),gct,voices_num_width +4,
+ MAX_XAW_MIDI_CHANNELS*BAR_SPACE+TRACEV_OFS+1,VOICENUM_WIDTH,TRACE_FOOT);
+- sprintf(local_buf, "%3d/%d", last_voice, voices);
++ sprintf(local_buf, "%3d/%d", last_voice, xaw_i_voices);
+ XSetForeground(disp, gct, capcolor);
+ XDrawString(disp, XtWindow(trace),gct,voices_num_width+6,
+ MAX_XAW_MIDI_CHANNELS*BAR_SPACE+TRACEV_OFS+16,local_buf,strlen(local_buf));
diff --git a/extra/timidity++/PKGBUILD b/extra/timidity++/PKGBUILD
new file mode 100644
index 000000000..82ced473c
--- /dev/null
+++ b/extra/timidity++/PKGBUILD
@@ -0,0 +1,53 @@
+# $Id: PKGBUILD 89194 2010-08-30 06:14:52Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=timidity++
+pkgver=2.13.2
+pkgrel=10
+pkgdesc="A MIDI to WAVE converter and player"
+arch=('i686' 'x86_64')
+url="http://timidity.sourceforge.net"
+license=('GPL')
+depends=('libao' 'libvorbis' 'jack' 'ncurses')
+makedepends=('xaw3d' 'gtk2' 'tk' 'libxaw')
+optdepends=('gtk2: for using the GTK+ interface' 'tk: for using the Tk interface' \
+ 'xaw3d: for using the Xaw interface')
+backup=('etc/timidity++/timidity.cfg')
+source=(http://downloads.sourceforge.net/timidity/TiMidity++-${pkgver}.tar.bz2 \
+ timidity.cfg timidity++.sh 2.13.2-gcc4.patch TiMidity++-2.13.2+flac-1.1.3.patch \
+ timidity++-2.13.2-exiterror.patch timidity++-2.13.2-gtk26.patch \
+ timidity++-2.13.2-polling.patch)
+md5sums=('a82ceeb2245e22f4de2b41da21eaee32' '3fcc8f065c959205113fa7e9ab2be3c6'\
+ '35606c12af9c6be9361d64fc536f046f' '0868926c5290817cacb9a1849bc043c2'\
+ 'fcbd27ff83066f69a3f8bd2442a3b3e2' '31bdaea612f18e2c3d45a8a73ab44c81'\
+ '16a4adec164836d4390dc6b0f9a69ce9' '3f0034ead451cdd1078868e9e9b0494c')
+sha1sums=('8e603146e1164335303a5ac5dff291f369241b4e' '660b3afbb720d26e8f008034cee66dd8da082d6e'\
+ '9f3e732a7ca1e97119a76df62ecf154df04d4f77' '8d50618a2379c078b07e8d0fc59457855c16106c'\
+ '59b0dbe3cde8f7b41d83676d8c37809255d3fb36' '7cd697b4f7cb1ce45cec46c2e0f6e5e8bf1d9d60'\
+ 'ce115e84d99708f0bdb5b57bd98b0c3514fa2bf4' '6abaedaecdecabf9dc76c062f7157571aed53984')
+
+build() {
+ cd "${srcdir}/TiMidity++-${pkgver}"
+ patch -p1 < ../2.13.2-gcc4.patch
+ patch -p1 < ../TiMidity++-2.13.2+flac-1.1.3.patch
+ patch -p1 < ../timidity++-2.13.2-exiterror.patch
+ patch -p0 < ../timidity++-2.13.2-gtk26.patch
+ patch -p0 < ../timidity++-2.13.2-polling.patch
+ sed -i 's/tcl8.4/tcl8.5/' configure
+ sed -i 's/tk8.4/tk8.5/' configure
+
+ ./configure --prefix=/usr --mandir=/usr/share/man --with-default-path=/etc/timidity++/ \
+ --enable-server --enable-alsaseq --enable-spectrogram \
+ --enable-audio=alsa,oss,ao,vorbis,flac,esd,jack \
+ --enable-dynamic=ncurses,tcltk,vt100,xaw,gtk \
+ --disable-gtktest
+ make
+}
+
+package() {
+ cd "${srcdir}/TiMidity++-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+ install -D -m644 ../timidity.cfg "${pkgdir}/etc/timidity++/timidity.cfg"
+ install -D -m755 ../timidity++.sh "${pkgdir}/etc/rc.d/timidity++"
+}
diff --git a/extra/timidity++/TiMidity++-2.13.2+flac-1.1.3.patch b/extra/timidity++/TiMidity++-2.13.2+flac-1.1.3.patch
new file mode 100644
index 000000000..200d011a3
--- /dev/null
+++ b/extra/timidity++/TiMidity++-2.13.2+flac-1.1.3.patch
@@ -0,0 +1,349 @@
+diff -urN TiMidity++-2.13.2.orig/configure.in TiMidity++-2.13.2/configure.in
+--- TiMidity++-2.13.2.orig/configure.in 2004-10-03 15:39:52 +0300
++++ TiMidity++-2.13.2/configure.in 2007-02-19 13:06:42 +0200
+@@ -1216,11 +1216,39 @@
+ EXTRACT_CPPFLAGS(CPPFLAGS,CFLAGS,$LIBFLAC_CFLAGS)
+ LIBS="$LIBS $LIBFLAC_LIBS"
+ ])
+- AM_PATH_LIBOGGFLAC([
+- EXTRADEFS="$EXTRADEFS -DAU_OGGFLAC"
+- EXTRACT_CPPFLAGS(CPPFLAGS,CFLAGS,$LIBOGGFLAC_CFLAGS)
+- LIBS="$LIBS $LIBOGGFLAC_LIBS"
+- ])
++ # in FLAC-1.1.3, libOggFLAC was merged into libFLAC
++ # FLAC_API_VERSION_CURRENT first appears in FLAC-1.1.3
++ AC_MSG_CHECKING(for legacy libFLAC (<1.1.13))
++ ac_save_LIBS="$LIBS"
++ LIBS=
++ AC_TRY_RUN([
++ #include <FLAC/export.h>
++ int main () { return FLAC_API_VERSION_CURRENT<8; }
++ ],legacy_flac=no,legacy_flac=yes,legacy_flac=no)
++ AC_MSG_RESULT($legacy_flac)
++ LIBS="$ac_save_LIBS"
++ if test "x$legacy_flac" = xyes; then
++ AM_PATH_LIBOGGFLAC([
++ EXTRADEFS="$EXTRADEFS -DAU_OGGFLAC"
++ EXTRACT_CPPFLAGS(CPPFLAGS,CFLAGS,$LIBOGGFLAC_CFLAGS)
++ LIBS="$LIBS $LIBOGGFLAC_LIBS"
++ ])
++ else
++
++ AC_MSG_CHECKING(for Ogg support in libFLAC )
++ ac_save_LIBS="$LIBS"
++ LIBS="-lFLAC -lm -logg"
++ AC_TRY_RUN([
++ #include <FLAC/export.h>
++ int main () { return !FLAC_API_SUPPORTS_OGG_FLAC; }
++ ],ogg_flac=yes,ogg_flac=yes,ogg_flac=no)
++ AC_MSG_RESULT($ogg_flac)
++ LIBS="$ac_save_LIBS"
++ if test "x$ogg_flac" = xyes; then
++ LIBS="$LIBS -logg"
++ CFLAGS="$CFLAGS -DAU_OGGFLAC"
++ fi
++ fi
+ else
+ AC_MSG_RESULT(no)
+ fi
+diff -urN TiMidity++-2.13.2.orig/timidity/flac_a.c TiMidity++-2.13.2/timidity/flac_a.c
+--- TiMidity++-2.13.2.orig/timidity/flac_a.c 2004-05-23 07:35:44 +0300
++++ TiMidity++-2.13.2/timidity/flac_a.c 2007-02-19 13:06:55 +0200
+@@ -38,14 +38,22 @@
+
+ #if defined(AU_FLAC_DLL) || defined(AU_OGGFLAC_DLL)
+ #include <windows.h>
+-#define FLAC__EXPORT_H /* don't include "OggFLAC/export.h" */
+-#define FLAC_API
+-#define OggFLAC__EXPORT_H /* don't include "FLAC/export.h" */
+-#define OggFLAC_API
++#include <FLAC/export.h> /* need export.h to figure out API version from FLAC_API_VERSION_CURRENT */
++#undef FLAC_API
++#undef OggFLAC_API
+ #endif
+
+ #include <FLAC/all.h>
+-#ifdef AU_OGGFLAC
++
++/* by LEGACY_FLAC we mean before FLAC 1.1.3 */
++/* in FLAC 1.1.3, libOggFLAC is merged into libFLAC and all encoding layers are merged into the stream encoder */
++#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT < 8
++#define LEGACY_FLAC
++#else
++#undef LEGACY_FLAC
++#endif
++
++#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC)
+ #include <OggFLAC/stream_encoder.h>
+ #endif
+
+@@ -100,17 +108,21 @@
+ unsigned long out_bytes;
+ union {
+ FLAC__StreamEncoderState flac;
++#ifdef LEGACY_FLAC
+ FLAC__SeekableStreamEncoderState s_flac;
+ #ifdef AU_OGGFLAC
+ OggFLAC__StreamEncoderState ogg;
+ #endif
++#endif
+ } state;
+ union {
+ union {
+ FLAC__StreamEncoder *stream;
++#ifdef LEGACY_FLAC
+ FLAC__SeekableStreamEncoder *s_stream;
++#endif
+ } flac;
+-#ifdef AU_OGGFLAC
++#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC)
+ union {
+ OggFLAC__StreamEncoder *stream;
+ } ogg;
+@@ -158,7 +170,7 @@
+ static long serial_number = 0;
+ FLAC_ctx *flac_ctx = NULL;
+
+-#ifdef AU_OGGFLAC
++#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC)
+ static FLAC__StreamEncoderWriteStatus
+ ogg_stream_encoder_write_callback(const OggFLAC__StreamEncoder *encoder,
+ const FLAC__byte buffer[],
+@@ -168,8 +180,13 @@
+ static FLAC__StreamEncoderWriteStatus
+ flac_stream_encoder_write_callback(const FLAC__StreamEncoder *encoder,
+ const FLAC__byte buffer[],
++#ifdef LEGACY_FLAC
+ unsigned bytes, unsigned samples,
++#else
++ size_t bytes, unsigned samples,
++#endif
+ unsigned current_frame, void *client_data);
++#ifdef LEGACY_FLAC
+ static void flac_stream_encoder_metadata_callback(const FLAC__StreamEncoder *encoder,
+ const FLAC__StreamMetadata *metadata,
+ void *client_data);
+@@ -181,6 +198,7 @@
+ static void flac_seekable_stream_encoder_metadata_callback(const FLAC__SeekableStreamEncoder *encoder,
+ const FLAC__StreamMetadata *metadata,
+ void *client_data);
++#endif
+
+ /* preset */
+ void flac_set_compression_level(int compression_level)
+@@ -281,7 +299,11 @@
+ #ifdef AU_OGGFLAC
+ void flac_set_option_oggflac(int isogg)
+ {
++#ifdef LEGACY_FLAC
+ flac_options.isogg = isogg;
++#else
++ flac_options.isogg = (FLAC_API_SUPPORTS_OGG_FLAC && isogg);
++#endif
+ }
+ #endif
+
+@@ -295,6 +317,7 @@
+ dpm.fd = -1;
+
+ if (ctx != NULL) {
++#ifdef LEGACY_FLAC
+ #ifdef AU_OGGFLAC
+ if (flac_options.isogg) {
+ if (ctx->encoder.ogg.stream) {
+@@ -317,6 +340,12 @@
+ FLAC__stream_encoder_delete(ctx->encoder.flac.stream);
+ }
+ }
++#else
++ if (ctx->encoder.flac.stream) {
++ FLAC__stream_encoder_finish(ctx->encoder.flac.stream);
++ FLAC__stream_encoder_delete(ctx->encoder.flac.stream);
++ }
++#endif
+ free(ctx);
+ flac_ctx = NULL;
+ }
+@@ -329,6 +358,9 @@
+ FLAC__StreamMetadata padding;
+ FLAC__StreamMetadata *metadata[4];
+ int num_metadata = 0;
++#ifndef LEGACY_FLAC
++ FLAC__StreamEncoderInitStatus init_status;
++#endif
+
+ FLAC_ctx *ctx;
+
+@@ -371,6 +403,7 @@
+ metadata[num_metadata++] = &padding;
+ }
+
++#ifdef LEGACY_FLAC
+ #ifdef AU_OGGFLAC
+ if (flac_options.isogg) {
+ if ((ctx->encoder.ogg.stream = OggFLAC__stream_encoder_new()) == NULL) {
+@@ -542,6 +575,67 @@
+ return -1;
+ }
+ }
++#else /* !LEGACY_FLAC */
++ if ((ctx->encoder.flac.stream = FLAC__stream_encoder_new()) == NULL) {
++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create FLAC stream");
++ flac_session_close();
++ return -1;
++ }
++
++#ifdef AU_OGGFLAC
++ if (flac_options.isogg) {
++ /* set sequential number for serial */
++ serial_number++;
++ if (serial_number == 1) {
++ srand(time(NULL));
++ serial_number = rand();
++ }
++ FLAC__stream_encoder_set_ogg_serial_number(ctx->encoder.flac.stream, serial_number);
++ }
++#endif /* AU_OGGFLAC */
++ FLAC__stream_encoder_set_channels(ctx->encoder.flac.stream, nch);
++ /* 16bps only */
++ FLAC__stream_encoder_set_bits_per_sample(ctx->encoder.flac.stream, 16);
++
++ FLAC__stream_encoder_set_verify(ctx->encoder.flac.stream, flac_options.verify);
++
++ if (!FLAC__format_sample_rate_is_valid(dpm.rate)) {
++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "invalid sampling rate %d", dpm.rate);
++ flac_session_close();
++ return -1;
++ }
++ FLAC__stream_encoder_set_sample_rate(ctx->encoder.flac.stream, dpm.rate);
++
++ FLAC__stream_encoder_set_qlp_coeff_precision(ctx->encoder.flac.stream, flac_options.qlp_coeff_precision);
++ /* expensive! */
++ FLAC__stream_encoder_set_do_qlp_coeff_prec_search(ctx->encoder.flac.stream, flac_options.qlp_coeff_precision_search);
++
++ if (nch == 2) {
++ FLAC__stream_encoder_set_do_mid_side_stereo(ctx->encoder.flac.stream, flac_options.mid_side);
++ FLAC__stream_encoder_set_loose_mid_side_stereo(ctx->encoder.flac.stream, flac_options.adaptive_mid_side);
++ }
++
++ FLAC__stream_encoder_set_max_lpc_order(ctx->encoder.flac.stream, flac_options.max_lpc_order);
++ FLAC__stream_encoder_set_min_residual_partition_order(ctx->encoder.flac.stream, flac_options.min_residual_partition_order);
++ FLAC__stream_encoder_set_max_residual_partition_order(ctx->encoder.flac.stream, flac_options.max_residual_partition_order);
++
++ FLAC__stream_encoder_set_blocksize(ctx->encoder.flac.stream, flac_options.blocksize);
++
++ if (0 < num_metadata)
++ FLAC__stream_encoder_set_metadata(ctx->encoder.flac.stream, metadata, num_metadata);
++
++#ifdef AU_OGGFLAC
++ if (flac_options.isogg)
++ init_status = FLAC__stream_encoder_init_ogg_stream(ctx->encoder.flac.stream, NULL, flac_stream_encoder_write_callback, NULL, NULL, NULL, ctx);
++ else
++#endif
++ init_status = FLAC__stream_encoder_init_stream(ctx->encoder.flac.stream, flac_stream_encoder_write_callback, NULL, NULL, NULL, ctx);
++ if (init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK) {
++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create FLAC encoder (init status: %s)", FLAC__StreamEncoderInitStatusString[init_status]);
++ flac_session_close();
++ return -1;
++ }
++#endif
+
+ return 0;
+ }
+@@ -638,7 +732,7 @@
+ return 0;
+ }
+
+-#ifdef AU_OGGFLAC
++#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC)
+ static FLAC__StreamEncoderWriteStatus
+ ogg_stream_encoder_write_callback(const OggFLAC__StreamEncoder *encoder,
+ const FLAC__byte buffer[],
+@@ -658,7 +752,11 @@
+ static FLAC__StreamEncoderWriteStatus
+ flac_stream_encoder_write_callback(const FLAC__StreamEncoder *encoder,
+ const FLAC__byte buffer[],
++#ifdef LEGACY_FLAC
+ unsigned bytes, unsigned samples,
++#else
++ size_t bytes, unsigned samples,
++#endif
+ unsigned current_frame, void *client_data)
+ {
+ FLAC_ctx *ctx = (FLAC_ctx *)client_data;
+@@ -670,6 +768,7 @@
+ else
+ return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR;
+ }
++#ifdef LEGACY_FLAC
+ static void flac_stream_encoder_metadata_callback(const FLAC__StreamEncoder *encoder,
+ const FLAC__StreamMetadata *metadata,
+ void *client_data)
+@@ -695,6 +794,7 @@
+ void *client_data)
+ {
+ }
++#endif
+
+ static int output_data(char *buf, int32 nbytes)
+ {
+@@ -723,6 +823,7 @@
+ oggbuf[i] = *s++;
+ }
+
++#ifdef LEGACY_FLAC
+ #ifdef AU_OGGFLAC
+ if (flac_options.isogg) {
+ ctx->state.ogg = OggFLAC__stream_encoder_get_state(ctx->encoder.ogg.stream);
+@@ -793,6 +894,29 @@
+ return -1;
+ }
+ }
++#else /* !LEGACY_FLAC */
++ ctx->state.flac = FLAC__stream_encoder_get_state(ctx->encoder.flac.stream);
++ if (ctx->state.flac != FLAC__STREAM_ENCODER_OK) {
++ if (ctx->state.flac == FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR |
++ FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA) {
++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "FLAC stream verify error (%s)",
++ FLAC__StreamDecoderStateString[FLAC__stream_encoder_get_verify_decoder_state(ctx->encoder.flac.stream)]);
++ }
++ else {
++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot encode FLAC stream (%s)",
++ FLAC__StreamEncoderStateString[ctx->state.flac]);
++ }
++ flac_session_close();
++ return -1;
++ }
++
++ if (!FLAC__stream_encoder_process_interleaved(ctx->encoder.flac.stream, oggbuf,
++ nbytes / nch / 2 )) {
++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot encode FLAC stream");
++ flac_session_close();
++ return -1;
++ }
++#endif
+ ctx->in_bytes += nbytes;
+
+ free(oggbuf);
+@@ -813,6 +937,7 @@
+ return;
+ }
+
++#ifdef LEGACY_FLAC
+ if (flac_options.isogg) {
+ #ifdef AU_OGGFLAC
+ if ((ctx->state.ogg = OggFLAC__stream_encoder_get_state(ctx->encoder.ogg.stream)) != OggFLAC__STREAM_ENCODER_OK) {
+@@ -838,6 +963,13 @@
+ /* fall through */
+ }
+ }
++#else /* !LEGACY_FLAC */
++ if ((ctx->state.flac = FLAC__stream_encoder_get_state(ctx->encoder.flac.stream)) != FLAC__STREAM_ENCODER_OK) {
++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "FLAC stream encoder is invalid (%s)",
++ FLAC__StreamEncoderStateString[ctx->state.flac]);
++ /* fall through */
++ }
++#endif
+
+ ctl->cmsg(CMSG_INFO, VERB_NORMAL, "Wrote %lu/%lu bytes(%g%% compressed)",
+ ctx->out_bytes, ctx->in_bytes, ((double)ctx->out_bytes / (double)ctx->in_bytes) * 100.);
diff --git a/extra/timidity++/timidity++-2.13.2-exiterror.patch b/extra/timidity++/timidity++-2.13.2-exiterror.patch
new file mode 100644
index 000000000..01a83fead
--- /dev/null
+++ b/extra/timidity++/timidity++-2.13.2-exiterror.patch
@@ -0,0 +1,695 @@
+diff -ur TiMidity++-2.13.2/interface/alsaseq_c.c TiMidity++-2.13.2-new/interface/alsaseq_c.c
+--- TiMidity++-2.13.2/interface/alsaseq_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/alsaseq_c.c 2005-01-02 03:39:15.968158520 +0100
+@@ -177,7 +177,7 @@
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+ static void ctl_event(CtlEvent *e);
+-static void ctl_pass_playing_list(int n, char *args[]);
++static int ctl_pass_playing_list(int n, char *args[]);
+
+ /**********************************/
+ /* export the interface functions */
+@@ -308,7 +308,7 @@
+ return 0;
+ }
+
+-static void ctl_pass_playing_list(int n, char *args[])
++static int ctl_pass_playing_list(int n, char *args[])
+ {
+ double btime;
+ int i, j;
+@@ -323,7 +323,7 @@
+
+ if (alsa_seq_open(&alsactx.handle) < 0) {
+ fprintf(stderr, "error in snd_seq_open\n");
+- return;
++ return 1;
+ }
+ alsactx.queue = -1;
+ alsactx.client = snd_seq_client_id(alsactx.handle);
+@@ -342,7 +342,7 @@
+ int port;
+ port = alsa_create_port(alsactx.handle, i);
+ if (port < 0)
+- return;
++ return 1;
+ alsactx.port[i] = port;
+ alsa_set_timestamping(&alsactx, port);
+ printf(" %d:%d", alsactx.client, alsactx.port[i]);
+@@ -411,6 +411,7 @@
+ server_reset();
+ doit(&alsactx);
+ }
++ return 0;
+ }
+
+ /*
+diff -ur TiMidity++-2.13.2/interface/emacs_c.c TiMidity++-2.13.2-new/interface/emacs_c.c
+--- TiMidity++-2.13.2/interface/emacs_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/emacs_c.c 2005-01-02 03:02:02.000000000 +0100
+@@ -78,7 +78,7 @@
+ static void ctl_close(void);
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+ static void ctl_event(CtlEvent *e);
+ static int read_ready(void);
+ static int emacs_type = 0; /* 0:emacs, 1:mule, 2:??
+@@ -249,7 +249,7 @@
+ return s;
+ }
+
+-static void ctl_pass_playing_list(int argc, char *argv[])
++static int ctl_pass_playing_list(int argc, char *argv[])
+ {
+ int i;
+ char cmd[BUFSIZ];
+@@ -274,7 +274,7 @@
+ {
+ for(i = 1; i < argc; i++)
+ play_midi_file(argv[i]);
+- return;
++ return 0;
+ }
+
+ /* Main Loop */
+@@ -296,11 +296,11 @@
+ ctl_refresh();
+ break;
+ case RC_QUIT:
+- return;
++ return 0;
+ } /* skipping others command */
+ }
+ else if(!strncmp(cmd, "QUIT", 4))
+- return;
++ return 0;
+ else
+ continue; /* skipping unknown command */
+ }
+diff -ur TiMidity++-2.13.2/interface/gtk_c.c TiMidity++-2.13.2-new/interface/gtk_c.c
+--- TiMidity++-2.13.2/interface/gtk_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/gtk_c.c 2005-01-02 03:35:53.447946272 +0100
+@@ -57,7 +57,7 @@
+
+ static int ctl_open(int using_stdin, int using_stdout);
+ static void ctl_close(void);
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+ static void ctl_event(CtlEvent *e);
+@@ -528,7 +528,7 @@
+ #endif
+ }
+
+-static void
++static int
+ ctl_pass_playing_list(int number_of_files, char *list_of_files[])
+ {
+ int i=0;
+@@ -558,7 +558,7 @@
+ }
+ else {
+ if (command==RC_QUIT)
+- return;
++ return 0;
+ if (command==RC_ERROR)
+ command=RC_TUNE_END; /* Launch next file */
+
+@@ -580,6 +580,7 @@
+ command = ctl_blocking_read(&val);
+ }
+ }
++ return 0;
+ }
+
+ /*
+diff -ur TiMidity++-2.13.2/interface/mac_c.c TiMidity++-2.13.2-new/interface/mac_c.c
+--- TiMidity++-2.13.2/interface/mac_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/mac_c.c 2005-01-02 03:04:13.000000000 +0100
+@@ -71,7 +71,7 @@
+ static void ctl_pitch_bend(int channel, int val);
+ static void ctl_reset(void);
+ static int ctl_open(int using_stdin, int using_stdout);
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+ static void ctl_close(void);
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+@@ -955,7 +955,7 @@
+ }
+
+
+-static void ctl_pass_playing_list(int init_number_of_files,
++static int ctl_pass_playing_list(int init_number_of_files,
+ char * /*init_list_of_files*/ [])
+ {
+ EventRecord event;
+@@ -983,6 +983,7 @@
+ mac_HandleEvent(&event);
+ }
+ Do_Quit();
++ return 0;
+ }
+
+ static Boolean UserWantsControl()
+diff -ur TiMidity++-2.13.2/interface/motif_c.c TiMidity++-2.13.2-new/interface/motif_c.c
+--- TiMidity++-2.13.2/interface/motif_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/motif_c.c 2005-01-02 03:05:04.000000000 +0100
+@@ -60,7 +60,7 @@
+ static void ctl_close(void);
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+ static void ctl_event(CtlEvent *e);
+
+ static int motif_ready = 0;
+@@ -346,12 +346,13 @@
+ return(ctl_blocking_read(valp));
+ }
+
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[])
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[])
+ {
+ int i=0;
+ char file_to_play[1000];
+ int command;
+ int32 val;
++ int retval;
+
+ motif_ready = 1;
+
+@@ -381,12 +382,13 @@
+ else
+ {
+ if (command==RC_QUIT)
+- return;
++ return 0;
+
+ switch(command)
+ {
+ case RC_ERROR:
+ m_pipe_int_write(ERROR_MESSAGE);
++ retval=1;
+ break;
+ case RC_NONE:
+ break;
+@@ -411,6 +413,7 @@
+ command = ctl_blocking_read(&val);
+ }
+ }
++ return retval;
+ }
+
+ /*
+diff -ur TiMidity++-2.13.2/interface/ncurs_c.c TiMidity++-2.13.2-new/interface/ncurs_c.c
+--- TiMidity++-2.13.2/interface/ncurs_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/ncurs_c.c 2005-01-02 03:05:48.000000000 +0100
+@@ -174,7 +174,7 @@
+
+ static int ctl_open(int using_stdin, int using_stdout);
+ static void ctl_close(void);
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+ static void ctl_event(CtlEvent *e);
+@@ -3100,7 +3100,7 @@
+ reuse_mblock(&tmpbuffer);
+ }
+
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[])
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[])
+ {
+ int i;
+ int act_number_of_files;
+@@ -3128,7 +3128,7 @@
+
+ if (file_list.number<0) {
+ cmsg(CMSG_FATAL, VERB_NORMAL, "No MIDI file to play!");
+- return;
++ return 1;
+ }
+
+ ctl_listmode_max=1;
+@@ -3169,7 +3169,7 @@
+ if(!(ctl.flags & CTLF_LIST_LOOP) || stdin_check)
+ {
+ aq_flush(0);
+- return;
++ return 0;
+ }
+ i = 0;
+ if(rc == RC_TUNE_END)
+@@ -3187,7 +3187,7 @@
+
+ /* else fall through */
+ case RC_QUIT:
+- return;
++ return 0;
+ }
+ ctl_reset();
+ }
+diff -ur TiMidity++-2.13.2/interface/portmidisyn_c.c TiMidity++-2.13.2-new/interface/portmidisyn_c.c
+--- TiMidity++-2.13.2/interface/portmidisyn_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/portmidisyn_c.c 2005-01-02 03:13:05.000000000 +0100
+@@ -96,7 +96,7 @@
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+ static void ctl_event(CtlEvent *e);
+-static void ctl_pass_playing_list(int n, char *args[]);
++static int ctl_pass_playing_list(int n, char *args[]);
+
+ #ifndef __W32__
+ static void init_keybord(void);
+@@ -215,17 +215,17 @@
+
+ #ifdef IA_W32G_SYN
+ extern void w32g_syn_doit(void);
+-extern void w32g_syn_ctl_pass_playing_list(int n_, char *args_[]);
++extern int w32g_syn_ctl_pass_playing_list(int n_, char *args_[]);
+
+
+-static void ctl_pass_playing_list(int n, char *args[])
++static int ctl_pass_playing_list(int n, char *args[])
+ {
+- w32g_syn_ctl_pass_playing_list ( n, args );
++ return w32g_syn_ctl_pass_playing_list ( n, args );
+ }
+ #endif
+
+ #ifndef IA_W32G_SYN
+-static void ctl_pass_playing_list(int n, char *args[])
++static int ctl_pass_playing_list(int n, char *args[])
+ #else
+ // 0: OK, 2: Require to reset.
+ int ctl_pass_playing_list2(int n, char *args[])
+@@ -241,7 +241,7 @@
+ #ifndef IA_W32G_SYN
+ if(n > MAX_PORT ){
+ printf( "Usage: timidity -iW [Midi interface No s]\n");
+- return;
++ return 1;
+ }
+ #endif
+
+@@ -347,11 +347,7 @@
+ #endif /* USE_GTK_GUI */
+ rtsyn_close();
+
+-#ifdef IA_W32G_SYN
+ return 0;
+-#else
+- return;
+-#endif
+ }
+
+
+diff -ur TiMidity++-2.13.2/interface/server_c.c TiMidity++-2.13.2-new/interface/server_c.c
+--- TiMidity++-2.13.2/interface/server_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/server_c.c 2005-01-02 03:07:38.000000000 +0100
+@@ -176,7 +176,7 @@
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+ static void ctl_event(CtlEvent *e);
+-static void ctl_pass_playing_list(int n, char *args[]);
++static int ctl_pass_playing_list(int n, char *args[]);
+
+ /**********************************/
+ /* export the interface functions */
+@@ -356,14 +356,14 @@
+ static void compute_sample_increment(void);
+ static void server_reset(void);
+
+-static void ctl_pass_playing_list(int n, char *args[])
++static int ctl_pass_playing_list(int n, char *args[])
+ {
+ int sock;
+
+ if(n != 2 && n != 1)
+ {
+ fprintf(stderr, "Usage: timidity -ir control-port [data-port]\n");
+- return;
++ return 1;
+ }
+
+ #ifdef SIGPIPE
+@@ -379,7 +379,7 @@
+ if (control_port) {
+ sock = pasv_open(&control_port);
+ if(sock == -1)
+- return;
++ return 1;
+ }
+ opt_realtime_playing = 1; /* Enable loading patch while playing */
+ allocate_cache_size = 0; /* Don't use pre-calclated samples */
+@@ -404,7 +404,7 @@
+ continue;
+ perror("accept");
+ close(sock);
+- return;
++ return 1;
+ }
+ }
+ else control_fd = 0;
+@@ -446,6 +446,7 @@
+ if (!control_port)
+ break;
+ }
++ return 0;
+ }
+
+ #define MAX_GETCMD_PARAMS 8
+diff -ur TiMidity++-2.13.2/interface/tk_c.c TiMidity++-2.13.2-new/interface/tk_c.c
+--- TiMidity++-2.13.2/interface/tk_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/tk_c.c 2005-01-02 03:08:48.000000000 +0100
+@@ -86,7 +86,7 @@
+ static void ctl_close(void);
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+ static int ctl_blocking_read(int32 *valp);
+ static void ctl_note(int status, int ch, int note, int vel);
+ static void ctl_event(CtlEvent *e);
+@@ -587,7 +587,7 @@
+ return(ctl_blocking_read(valp));
+ }
+
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[])
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[])
+ {
+ int i=0;
+ char local[1000];
+@@ -618,7 +618,7 @@
+ /* if really QUIT */
+ k_pipe_gets(local, sizeof(local)-1);
+ if (*local == 'Z')
+- return;
++ return 0;
+ /* only stop playing..*/
+ }
+ if (command==RC_CHANGE_VOLUME) /* init volume */
+@@ -646,6 +646,7 @@
+ command = ctl_blocking_read(&val);
+ }
+ }
++ return 0;
+ }
+
+
+diff -ur TiMidity++-2.13.2/interface/w32g_c.c TiMidity++-2.13.2-new/interface/w32g_c.c
+--- TiMidity++-2.13.2/interface/w32g_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/w32g_c.c 2005-01-02 03:10:03.000000000 +0100
+@@ -86,7 +86,7 @@
+
+ static int ctl_open(int using_stdin, int using_stdout);
+ static void ctl_close(void);
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+ static void ctl_event(CtlEvent *e);
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+@@ -662,7 +662,7 @@
+ }
+
+ extern BOOL SetWrdWndActive(void);
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[])
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[])
+ {
+ static int init_flag = 1;
+ int rc;
+@@ -779,7 +779,7 @@
+ if(ctl.flags & CTLF_AUTOEXIT) {
+ if(play_mode->fd != -1)
+ aq_flush(0);
+- return;
++ return 0;
+ }
+ break;
+ }
+@@ -803,7 +803,7 @@
+ if(ctl.flags & CTLF_AUTOEXIT){
+ if(play_mode->fd != -1)
+ aq_flush(0);
+- return;
++ return 0;
+ }
+ if((ctl.flags & CTLF_LIST_LOOP) && w32g_nvalid_playlist())
+ {
+@@ -839,7 +839,7 @@
+ case RC_QUIT:
+ if(play_mode->fd != -1)
+ aq_flush(1);
+- return;
++ return 0;
+
+ case RC_CHANGE_VOLUME:
+ amplification += value;
+@@ -868,6 +868,7 @@
+ PrefSettingApplyReally();
+ rc = RC_NONE;
+ }
++ return 0;
+ }
+
+ static void ctl_lcd_mark(int flag, int x, int y)
+diff -ur TiMidity++-2.13.2/interface/w32g_syn.c TiMidity++-2.13.2-new/interface/w32g_syn.c
+--- TiMidity++-2.13.2/interface/w32g_syn.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/w32g_syn.c 2005-01-02 03:10:49.000000000 +0100
+@@ -281,7 +281,7 @@
+ static int wait_for_termination_of_syn_thread ( void );
+ int w32g_message_set ( int cmd );
+ int w32g_message_get ( w32g_syn_message_t *msg );
+-void w32g_syn_ctl_pass_playing_list ( int n_, char *args_[] );
++int w32g_syn_ctl_pass_playing_list ( int n_, char *args_[] );
+ int w32g_syn_do_before_pref_apply ( void );
+ int w32g_syn_do_after_pref_apply ( void );
+
+@@ -1403,7 +1403,7 @@
+ }
+ }
+
+-void w32g_syn_ctl_pass_playing_list ( int n_, char *args_[] )
++int w32g_syn_ctl_pass_playing_list ( int n_, char *args_[] )
+ {
+ int i;
+ #ifndef TWSYNSRV
+@@ -1471,6 +1471,7 @@
+ }
+ #endif
+ if ( w32g_syn.quit_state < 2 ) w32g_syn.quit_state = 2;
++ return 0;
+ }
+
+ int w32g_syn_do_before_pref_apply ( void )
+diff -ur TiMidity++-2.13.2/interface/winsyn_c.c TiMidity++-2.13.2-new/interface/winsyn_c.c
+--- TiMidity++-2.13.2/interface/winsyn_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/winsyn_c.c 2005-01-02 03:11:36.000000000 +0100
+@@ -88,7 +88,7 @@
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+ static void ctl_event(CtlEvent *e);
+-static void ctl_pass_playing_list(int n, char *args[]);
++static int ctl_pass_playing_list(int n, char *args[]);
+
+ #ifndef __W32__
+ static void init_keybord(void);
+@@ -207,17 +207,17 @@
+
+ #ifdef IA_W32G_SYN
+ extern void w32g_syn_doit(void);
+-extern void w32g_syn_ctl_pass_playing_list(int n_, char *args_[]);
++extern int w32g_syn_ctl_pass_playing_list(int n_, char *args_[]);
+
+
+-static void ctl_pass_playing_list(int n, char *args[])
++static int ctl_pass_playing_list(int n, char *args[])
+ {
+- w32g_syn_ctl_pass_playing_list ( n, args );
++ return w32g_syn_ctl_pass_playing_list ( n, args );
+ }
+ #endif
+
+ #ifndef IA_W32G_SYN
+-static void ctl_pass_playing_list(int n, char *args[])
++static int ctl_pass_playing_list(int n, char *args[])
+ #else
+ // 0: OK, 2: Require to reset.
+ int ctl_pass_playing_list2(int n, char *args[])
+@@ -233,7 +233,7 @@
+ #ifndef IA_W32G_SYN
+ if(n > MAX_PORT ){
+ printf( "Usage: timidity -iW [Midi interface No s]\n");
+- return;
++ return 1;
+ }
+ #endif
+
+@@ -339,11 +339,7 @@
+ #endif /* USE_GTK_GUI */
+ rtsyn_close();
+
+-#ifdef IA_W32G_SYN
+ return 0;
+-#else
+- return;
+-#endif
+ }
+
+
+diff -ur TiMidity++-2.13.2/interface/xaw_c.c TiMidity++-2.13.2-new/interface/xaw_c.c
+--- TiMidity++-2.13.2/interface/xaw_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/xaw_c.c 2005-01-02 03:11:57.000000000 +0100
+@@ -55,7 +55,7 @@
+ static void ctl_close(void);
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+ static void ctl_event(CtlEvent *e);
+
+ static void a_pipe_open(void);
+@@ -463,7 +463,7 @@
+ }
+ }
+
+-static void ctl_pass_playing_list(int init_number_of_files,
++static int ctl_pass_playing_list(int init_number_of_files,
+ char *init_list_of_files[]) {
+ int current_no,command=RC_NONE,i,j;
+ int32 val;
+diff -ur TiMidity++-2.13.2/interface/xskin_c.c TiMidity++-2.13.2-new/interface/xskin_c.c
+--- TiMidity++-2.13.2/interface/xskin_c.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/interface/xskin_c.c 2005-01-02 03:12:31.000000000 +0100
+@@ -55,7 +55,7 @@
+ static void ctl_close(void);
+ static int ctl_read(int32 *valp);
+ static int cmsg(int type, int verbosity_level, char *fmt, ...);
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]);
+ static void ctl_event(CtlEvent *e);
+ static void ctl_speana_data(double *val, int size);
+ static void initialize_exp_hz_table( void );
+@@ -342,7 +342,7 @@
+ }
+ }
+
+-static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]) {
++static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]) {
+
+ int current_no,command,i;
+ int32 val;
+@@ -403,7 +403,7 @@
+ command=play_midi_file(list_of_files[file_table[current_no]]);
+ } else {
+ /* Quit timidity*/
+- if (exitflag) return;
++ if (exitflag) return 0;
+ /* Stop playing */
+ if (command==RC_QUIT) {
+ sprintf(local_buf,"T 00:00");
+@@ -461,6 +461,7 @@
+ command=ctl_blocking_read(&val);
+ }
+ }
++ return 0;
+ }
+
+ /* ------ Pipe handlers ----- */
+diff -ur TiMidity++-2.13.2/timidity/controls.h TiMidity++-2.13.2-new/timidity/controls.h
+--- TiMidity++-2.13.2/timidity/controls.h 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/timidity/controls.h 2005-01-02 02:59:37.000000000 +0100
+@@ -147,7 +147,7 @@
+
+ int (*open)(int using_stdin, int using_stdout);
+ void (*close)(void);
+- void (*pass_playing_list)(int number_of_files, char *list_of_files[]);
++ int (*pass_playing_list)(int number_of_files, char *list_of_files[]);
+ int (*read)(int32 *valp);
+ int (*cmsg)(int type, int verbosity_level, char *fmt, ...);
+ void (*event)(CtlEvent *ev); /* Control events */
+diff -ur TiMidity++-2.13.2/timidity/playmidi.c TiMidity++-2.13.2-new/timidity/playmidi.c
+--- TiMidity++-2.13.2/timidity/playmidi.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/timidity/playmidi.c 2005-01-02 03:15:55.000000000 +0100
+@@ -8562,7 +8562,7 @@
+ return rc;
+ }
+
+-void dumb_pass_playing_list(int number_of_files, char *list_of_files[])
++int dumb_pass_playing_list(int number_of_files, char *list_of_files[])
+ {
+ #ifndef CFG_FOR_SF
+ int i = 0;
+@@ -8586,12 +8586,12 @@
+ aq_flush(0);
+
+ if(!(ctl->flags & CTLF_LIST_LOOP))
+- return;
++ return 0;
+ i = 0;
+ break;
+
+ case RC_QUIT:
+- return;
++ return 0;
+ }
+ }
+ #endif
+diff -ur TiMidity++-2.13.2/timidity/playmidi.h TiMidity++-2.13.2-new/timidity/playmidi.h
+--- TiMidity++-2.13.2/timidity/playmidi.h 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/timidity/playmidi.h 2005-01-02 03:16:07.000000000 +0100
+@@ -577,7 +577,7 @@
+ extern int opt_pan_delay;
+
+ extern int play_midi_file(char *fn);
+-extern void dumb_pass_playing_list(int number_of_files, char *list_of_files[]);
++extern int dumb_pass_playing_list(int number_of_files, char *list_of_files[]);
+ extern void default_ctl_lyric(int lyricid);
+ extern int check_apply_control(void);
+ extern void recompute_freq(int v);
+diff -ur TiMidity++-2.13.2/timidity/sndfont.c TiMidity++-2.13.2-new/timidity/sndfont.c
+--- TiMidity++-2.13.2/timidity/sndfont.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/timidity/sndfont.c 2005-01-02 03:15:27.000000000 +0100
+@@ -1893,7 +1893,7 @@
+
+ #if CFG_FOR_SF_SUPPORT_FFT
+ int check_apply_control(void) { return 0; } // not pass
+-void dumb_pass_playing_list(int number_of_files, char *list_of_files[]) {}
++int dumb_pass_playing_list(int number_of_files, char *list_of_files[]) {return 0;}
+ void recompute_freq(int v) {} // not pass
+ int32 control_ratio = 0;
+ int reduce_quality_flag = 0;
+diff -ur TiMidity++-2.13.2/timidity/timidity.c TiMidity++-2.13.2-new/timidity/timidity.c
+--- TiMidity++-2.13.2/timidity/timidity.c 2005-01-02 02:53:01.000000000 +0100
++++ TiMidity++-2.13.2-new/timidity/timidity.c 2005-01-02 02:59:29.000000000 +0100
+@@ -5291,6 +5291,7 @@
+ int need_stdin = 0, need_stdout = 0;
+ int i;
+ int output_fail = 0;
++ int retval;
+
+ if(nfiles == 0 && !strchr(INTERACTIVE_INTERFACE_IDS, ctl->id_character))
+ return 0;
+@@ -5410,7 +5411,7 @@
+ ctl->cmsg(CMSG_INFO, VERB_DEBUG_SILLY,
+ "pass_playing_list() nfiles=%d", nfiles);
+
+- ctl->pass_playing_list(nfiles, files);
++ retval=ctl->pass_playing_list(nfiles, files);
+
+ if(intr)
+ aq_flush(1);
+@@ -5451,7 +5452,7 @@
+ url_news_connection_cache(URL_NEWS_CLOSE_CACHE);
+ #endif /* SUPPORT_SOCKET */
+
+- return 0;
++ return retval;
+ }
+
+ #ifdef IA_W32GUI
diff --git a/extra/timidity++/timidity++-2.13.2-gtk26.patch b/extra/timidity++/timidity++-2.13.2-gtk26.patch
new file mode 100644
index 000000000..73dc8de6c
--- /dev/null
+++ b/extra/timidity++/timidity++-2.13.2-gtk26.patch
@@ -0,0 +1,19 @@
+--- interface/gtk_i.c 2004/12/21 16:59:33 1.1
++++ interface/gtk_i.c 2004/12/21 16:59:41
+@@ -365,6 +365,7 @@ void
+ Launch_Gtk_Process(int pipe_number)
+ {
+ int argc = 0;
++ gchar **argv = NULL;
+ GtkWidget *button, *mbar, *swin;
+ GtkWidget *table, *align, *handlebox;
+ GtkWidget *vbox, *hbox, *vbox2, *scrolled_win;
+@@ -373,7 +374,7 @@ Launch_Gtk_Process(int pipe_number)
+ /* enable locale */
+ gtk_set_locale ();
+
+- gtk_init (&argc, NULL);
++ gtk_init (&argc, &argv);
+
+ ttip = create_yellow_tooltips();
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
diff --git a/extra/timidity++/timidity++-2.13.2-polling.patch b/extra/timidity++/timidity++-2.13.2-polling.patch
new file mode 100644
index 000000000..a9638dba1
--- /dev/null
+++ b/extra/timidity++/timidity++-2.13.2-polling.patch
@@ -0,0 +1,34 @@
+--- interface/alsaseq_c.c 2006/12/13 23:22:53 1.28
++++ interface/alsaseq_c.c 2008/04/16 00:14:45 1.29
+@@ -501,6 +501,8 @@
+
+ static void doit(struct seq_context *ctxp)
+ {
++ fd_set rfds;
++ struct timeval timeout;
+ for (;;) {
+ while (snd_seq_event_input_pending(ctxp->handle, 1)) {
+ if (do_sequencer(ctxp))
+@@ -528,15 +530,17 @@
+ play_event(&ev);
+ aq_fill_nonblocking();
+ }
+- if (! ctxp->active || ! IS_STREAM_TRACE) {
+- fd_set rfds;
+- struct timeval timeout;
+- FD_ZERO(&rfds);
+- FD_SET(ctxp->fd, &rfds);
++
++ FD_ZERO(&rfds);
++ FD_SET(ctxp->fd, &rfds);
++ if (ctxp->active) {
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 10000; /* 10ms */
+ if (select(ctxp->fd + 1, &rfds, NULL, NULL, &timeout) < 0)
+ goto __done;
++ } else {
++ if (select(ctxp->fd + 1, &rfds, NULL, NULL, NULL) < 0)
++ goto __done;
+ }
+ }
+
diff --git a/extra/timidity++/timidity++.sh b/extra/timidity++/timidity++.sh
new file mode 100644
index 000000000..3fa13cea9
--- /dev/null
+++ b/extra/timidity++/timidity++.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/bin/timidity`
+case "$1" in
+ start)
+ stat_busy "Starting Timidity++ ALSA Daemon"
+ [ -z "$PID" ] && /usr/bin/timidity -iAD > /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ echo $PID > /var/run/timidity.pid
+ add_daemon timidity++
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Timidity++ ALSA Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm /var/run/timidity.pid
+ rm_daemon timidity++
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/extra/timidity++/timidity.cfg b/extra/timidity++/timidity.cfg
new file mode 100644
index 000000000..59bbfa935
--- /dev/null
+++ b/extra/timidity++/timidity.cfg
@@ -0,0 +1,29 @@
+# details on this file and other examples see here:
+# http://www.onicos.com/staff/iz/timidity/dist/cfg/sndfont.cfg
+# http://www.onicos.com/staff/iz/timidity/dist/cfg/
+#----------------------------------------------------------------
+# SoundFont extension configuration
+#
+# soundfont <filename> [order={0|1}] [remove]
+# <filename> is the path of SoundFont file.
+# order: 0(preload) or 1(load after GUS).
+# remove: disable specified soundfont.
+#
+# font exclude <tonebank> [<preset> [<keynote>]]
+# font order {0|1} <tonebank> [<preset> [<keynote>]]
+# <tonebank>: 0-127
+#
+# font exclude 128 [<drumset> [<key>]]
+# font order {0|1} 128 [<drumset> [<key>]]
+#----------------------------------------------------------------
+
+# change the next line to point to a soundfont you have
+# soundfonts can be found e.g. here: http://www.hammersound.net/
+# soundfont /usr/share/soundfonts/DX7Piano.SF2
+
+# you can do manipulations of the soundfont you load like this:
+# e.g. removing drumset 99
+# font exclude 128 99
+
+# load drum samples after GUS patches
+# font order 1 128