summaryrefslogtreecommitdiffstats
path: root/audio/TiMidity++/patches/other.diff
blob: 7ca3e39645466dd696ca9209cf1f0fe9872c928e (plain)
diff --git a/ChangeLog b/ChangeLog
index d7d211d..ad57852 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,29 @@
+2004-10-21  Henrique de Moraes Holschuh <hmh@debian.org>
+
+	* timidity/mod2midi.c (Voice_Play,Voice_SetPeriod):
+	  improve the code path when period2note returns -1
+
+2004-10-21  Eric A. Welsh <ewelsh@ccb.wustl.edu>
+
+	* timidity/mod2midi.c (period2note):
+	  initialize *finetune when returning a bad period
+	* timidity/mod2midi.c (load_module_samples):
+	  samples without names were causing NULL pointer reads
+	* timidity/mod2midi.c (period2note):
+	  delete extra \n
+
+2004-10-18  Eric A. Welsh <ewelsh@ccb.wustl.edu>
+
+	* libunimod/mlutil.c (getAmigaPeriod): Avoid division by zero
+	* timidity/mod2midi.c: Change all VERB_NORMAL and VERB_VERBOSE
+	  messages to VERB_NOISY.
+
+2004-10-17  URABE Shyouhei  <shyouhei@ice.uec.ac.jp>
+
+	* libunimod/mloader.c (SL_LoadSamples): too many arguments to
+	  function `FreeSampleList'
+	* timidity/aq.c: fix wrong prototype (int -> void)
+
 2004-10-03  URABE Shyouhei  <shyouhei@ice.uec.ac.jp>
 
 	* NEWS: Add new entry for 2.13.2
diff --git a/interface/alsaseq_c.c b/interface/alsaseq_c.c
index ac7b918..8d608a7 100644
--- a/interface/alsaseq_c.c
+++ b/interface/alsaseq_c.c
@@ -500,6 +500,7 @@ static void stop_playing(void)
 
 static void doit(struct seq_context *ctxp)
 {
+	int err, timeout_val = 10;
 	for (;;) {
 		while (snd_seq_event_input_pending(ctxp->handle, 1)) {
 			if (do_sequencer(ctxp))
@@ -532,10 +533,20 @@ static void doit(struct seq_context *ctxp)
 			struct timeval timeout;
 			FD_ZERO(&rfds);
 			FD_SET(ctxp->fd, &rfds);
-			timeout.tv_sec = 0;
-			timeout.tv_usec = 10000; /* 10ms */
-			if (select(ctxp->fd + 1, &rfds, NULL, NULL, &timeout) < 0)
+			timeout.tv_sec = (timeout_val / 1000);
+			timeout.tv_usec = (timeout_val % 1000) * 1000;
+			err = select(ctxp->fd + 1, &rfds, NULL, NULL, timeout_val < 0 ? NULL : &timeout);
+			if (err < 0) {
 				goto __done;
+			} else if (err == 0) {
+				if (timeout_val < 1024) {
+					timeout_val+=timeout_val;
+				} else {
+					timeout_val = -1;
+				}
+			} else {
+				timeout_val = 10;
+			}
 		}
 	}
 
diff --git a/interface/xaw_i.c b/interface/xaw_i.c
index 7efd6dd..84b6885 100644
--- a/interface/xaw_i.c
+++ b/interface/xaw_i.c
@@ -261,7 +261,7 @@ int amplitude = DEFAULT_AMPLIFICATION;
 String bitmapdir = XAW_BITMAP_DIR;
 Boolean arrangetitle,savelist;
 static char **current_flist = NULL;
-static int voices = 0, last_voice = 0, voices_num_width;
+static last_voice = 0, voices_num_width;
 static int maxentry_on_a_menu = 0,submenu_n = 0;
 #define OPTIONS_WINDOW 1
 #define FLIST_WINDOW 2
diff --git a/libunimod/mloader.c b/libunimod/mloader.c
index 943b307..bea58df 100644
--- a/libunimod/mloader.c
+++ b/libunimod/mloader.c
@@ -636,14 +636,14 @@ SL_LoadSamples (void)
 	  s->sample->flags = (s->sample->flags & ~SF_FORMATMASK) | s->outfmt;
 	  if (s->sample->data == NULL)
 	    {
-	      FreeSampleList (musiclist);
+	      FreeSampleList ();
 	      return 1;
 	    }
 	}
       s = s->next;
     }
 
-  FreeSampleList (musiclist);
+  FreeSampleList ();
   return 0;
 }
 
diff --git a/libunimod/mlutil.c b/libunimod/mlutil.c
index 3008a53..e147e8a 100644
--- a/libunimod/mlutil.c
+++ b/libunimod/mlutil.c
@@ -321,6 +321,7 @@ ULONG getAmigaPeriod (UBYTE flags, ULONG period)
   if (flags & UF_LINEAR)
     {
       period = lintab[period % 768] >> (period / 768);
+      if (period < 1) period = 1;
       period = (8363L * 1712L) / period;
     }
 
diff --git a/timidity/aRts_a.c b/timidity/aRts_a.c
index 0140a47..6bacce3 100644
--- a/timidity/aRts_a.c
+++ b/timidity/aRts_a.c
@@ -56,6 +56,8 @@
 #include "playmidi.h"
 #include "miditrace.h"
 
+static int arts_init_state = 0; /* 0=no init, 1=arts_init, 2=arts_free */
+static int arts_atexit = 0;     /* 1=atexit handler has been installed */
 static arts_stream_t stream = 0;
 static int server_buffer = 0;
 static int output_count = 0;
@@ -64,9 +66,11 @@ static int open_output(void); /* 0=success, 1=warning, -1=fatal error */
 static void close_output(void);
 static int output_data(char *buf, int32 nbytes);
 static int acntl(int request, void *arg);
-static int detect(void);
 
-/* export the playback mode */
+/* export the playback mode. aRts cannot support auto-detection properly
+ * see TiMidity bug report #35 on Kagemai.  Do not add any functionality
+ * that would require TiMidity to call arts_init() again after an
+ * arts_free(), it will blow up */
 
 #define dpm arts_play_mode
 
@@ -82,17 +86,16 @@ PlayMode dpm = {
     open_output,
     close_output,
     output_data,
-    acntl,
-    detect
+    acntl
 };
 
-static int detect(void)
+static void arts_shutdown(void)
 {
-    if (arts_init() == 0) {
-	arts_free();
-	return 1; /* ok, found */
+    if(arts_init_state == 1) {
+	    close_output();
+	    arts_free();
+	    arts_init_state = 2; /* paranoia */
     }
-    return 0;
 }
 
 /*************************************************************************/
@@ -114,10 +117,23 @@ static int open_output(void)
     channels = (dpm.encoding & PE_MONO) ? 1 : 2;
 
     /* Open the audio device */
-    if((i = arts_init()) != 0)
-    {
-	ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: %s",
-		  dpm.name, arts_error_text(i));
+    switch (arts_init_state) {
+    case 0:
+	if((i = arts_init()) != 0)
+	{
+	    ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: %s",
+		      dpm.name, arts_error_text(i));
+	    return -1;
+	}
+	arts_init_state = 1;
+	if (!arts_atexit) {
+	    atexit(arts_shutdown);
+	    arts_atexit = 1;
+	}
+	break;
+    case 2:
+	ctl->cmsg(CMSG_ERROR, VERB_NORMAL,
+	    "TiMidity aRts bug: open_output() after close_output() not supported");
 	return -1;
     }
     stream = arts_play_stream(dpm.rate,
@@ -186,7 +202,6 @@ static void close_output(void)
     if(stream == 0)
 	return;
     arts_close_stream(stream);
-    arts_free();
     stream = 0;
 }
 
@@ -197,7 +212,6 @@ static int acntl(int request, void *arg)
     {
       case PM_REQ_DISCARD: /* Discard stream */
 	arts_close_stream(stream);
-	arts_free();
 	stream=NULL;
 	return 0;
       case PM_REQ_RATE: /* Change sample rate */
diff --git a/timidity/aq.c b/timidity/aq.c
index af2f603..bedd737 100644
--- a/timidity/aq.c
+++ b/timidity/aq.c
@@ -87,7 +87,7 @@ static int32 estimate_queue_size(void);
 
 /* effect.c */
 extern void init_effect(void);
-extern int do_effect(int32* buf, int32 count);
+extern void do_effect(int32* buf, int32 count);
 
 int aq_calc_fragsize(void)
 {
diff --git a/timidity/common.c b/timidity/common.c
index 2fd5ea1..1ff7445 100644
--- a/timidity/common.c
+++ b/timidity/common.c
@@ -27,10 +27,16 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#include <time.h>
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif /* HAVE_SYS_TIME_H */
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif  /* TIME_WITH_SYS_TIME */
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif /* HAVE_SYS_TYPES_H */
@@ -405,7 +411,8 @@ struct timidity_file *open_file(char *name, int decompress, int noise_mode)
     }
 
   /* First try the given name */
-  strncpy(current_filename, url_unexpand_home_dir(name), 1023);
+  /* strncpy(current_filename, url_unexpand_home_dir(name), 1023); */
+  strncpy(current_filename, name, 1023);
   current_filename[1023]='\0';
 
   if(noise_mode)
diff --git a/timidity/flac_a.c b/timidity/flac_a.c
index 698fd29..e28acd6 100644
--- a/timidity/flac_a.c
+++ b/timidity/flac_a.c
@@ -45,9 +45,6 @@
 #endif
 
 #include <FLAC/all.h>
-#ifdef AU_OGGFLAC
-#include <OggFLAC/stream_encoder.h>
-#endif
 
 #ifdef AU_FLAC_DLL
 #include "w32_libFLAC_dll_g.h"
@@ -78,11 +75,7 @@ PlayMode dpm = {
   DEFAULT_RATE, PE_SIGNED|PE_16BIT, PF_PCM_STREAM,
   -1,
   {0}, /* default: get all the buffer fragments you can */
-#ifndef AU_OGGFLAC
-  "FLAC", 'F',
-#else
   "FLAC / OggFLAC", 'F',
-#endif /* AU_OGGFLAC */
   NULL,
   open_output,
   close_output,
@@ -100,28 +93,22 @@ typedef struct {
   unsigned long out_bytes;
   union {
     FLAC__StreamEncoderState flac;
-    FLAC__SeekableStreamEncoderState s_flac;
-#ifdef AU_OGGFLAC
-    OggFLAC__StreamEncoderState ogg;
-#endif
+    FLAC__StreamEncoderState s_flac;
+    FLAC__StreamEncoderState ogg;
   } state;
   union {
     union {
       FLAC__StreamEncoder *stream;
-      FLAC__SeekableStreamEncoder *s_stream;
+      FLAC__StreamEncoder *s_stream;
     } flac;
-#ifdef AU_OGGFLAC
     union {
-      OggFLAC__StreamEncoder *stream;
+      FLAC__StreamEncoder *stream;
     } ogg;
-#endif
   } encoder;
 } FLAC_ctx;
 
 typedef struct {
-#ifdef AU_OGGFLAC
   int isogg;
-#endif
   int verify;
   int padding;
   int blocksize;
@@ -138,9 +125,7 @@ typedef struct {
 
 /* default compress level is 5 */
 FLAC_options flac_options = {
-#ifdef AU_OGGFLAC
   0,    /* isogg */
-#endif
   0,    /* verify */
   4096, /* padding */
   4608, /* blocksize */
@@ -158,13 +143,11 @@ FLAC_options flac_options = {
 static long serial_number = 0;
 FLAC_ctx *flac_ctx = NULL;
 
-#ifdef AU_OGGFLAC
 static FLAC__StreamEncoderWriteStatus
-ogg_stream_encoder_write_callback(const OggFLAC__StreamEncoder *encoder,
+ogg_stream_encoder_write_callback(const FLAC__StreamEncoder *encoder,
 				  const FLAC__byte buffer[],
 				  unsigned bytes, unsigned samples,
 				  unsigned current_frame, void *client_data);
-#endif
 static FLAC__StreamEncoderWriteStatus
 flac_stream_encoder_write_callback(const FLAC__StreamEncoder *encoder,
 				   const FLAC__byte buffer[],
@@ -174,13 +157,10 @@ static void flac_stream_encoder_metadata_callback(const FLAC__StreamEncoder *enc
 						  const FLAC__StreamMetadata *metadata,
 						  void *client_data);
 static FLAC__StreamEncoderWriteStatus
-flac_seekable_stream_encoder_write_callback(const FLAC__SeekableStreamEncoder *encoder,
+flac_stream_encoder_write_callback(const FLAC__StreamEncoder *encoder,
 				   const FLAC__byte buffer[],
 				   unsigned bytes, unsigned samples,
 				   unsigned current_frame, void *client_data);
-static void flac_seekable_stream_encoder_metadata_callback(const FLAC__SeekableStreamEncoder *encoder,
-						  const FLAC__StreamMetadata *metadata,
-						  void *client_data);
 
 /* preset */
 void flac_set_compression_level(int compression_level)
@@ -278,12 +258,10 @@ void flac_set_option_verify(int verify)
 {
   flac_options.verify = verify;
 }
-#ifdef AU_OGGFLAC
 void flac_set_option_oggflac(int isogg)
 {
   flac_options.isogg = isogg;
 }
-#endif
 
 static int flac_session_close()
 {
@@ -295,19 +273,17 @@ static int flac_session_close()
   dpm.fd = -1;
 
   if (ctx != NULL) {
-#ifdef AU_OGGFLAC
     if (flac_options.isogg) {
       if (ctx->encoder.ogg.stream) {
-	OggFLAC__stream_encoder_finish(ctx->encoder.ogg.stream);
-	OggFLAC__stream_encoder_delete(ctx->encoder.ogg.stream);
+	FLAC__stream_encoder_finish(ctx->encoder.ogg.stream);
+	FLAC__stream_encoder_delete(ctx->encoder.ogg.stream);
       }
     }
     else
-#endif /* AU_OGGFLAC */
     if (flac_options.seekable) {
       if (ctx->encoder.flac.s_stream) {
-	FLAC__seekable_stream_encoder_finish(ctx->encoder.flac.s_stream);
-	FLAC__seekable_stream_encoder_delete(ctx->encoder.flac.s_stream);
+	FLAC__stream_encoder_finish(ctx->encoder.flac.s_stream);
+	FLAC__stream_encoder_delete(ctx->encoder.flac.s_stream);
       }
     }
     else
@@ -371,17 +347,16 @@ static int flac_output_open(const char *fname, const char *comment)
     metadata[num_metadata++] = &padding;
   }
 
-#ifdef AU_OGGFLAC
   if (flac_options.isogg) {
-    if ((ctx->encoder.ogg.stream = OggFLAC__stream_encoder_new()) == NULL) {
+    if ((ctx->encoder.ogg.stream = FLAC__stream_encoder_new()) == NULL) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create OggFLAC stream");
       flac_session_close();
       return -1;
     }
 
-    OggFLAC__stream_encoder_set_channels(ctx->encoder.ogg.stream, nch);
+    FLAC__stream_encoder_set_channels(ctx->encoder.ogg.stream, nch);
     /* 16bps only */
-    OggFLAC__stream_encoder_set_bits_per_sample(ctx->encoder.ogg.stream, 16);
+    FLAC__stream_encoder_set_bits_per_sample(ctx->encoder.ogg.stream, 16);
 
     /* set sequential number for serial */
     serial_number++;
@@ -389,9 +364,9 @@ static int flac_output_open(const char *fname, const char *comment)
       srand(time(NULL));
       serial_number = rand();
     }
-    OggFLAC__stream_encoder_set_serial_number(ctx->encoder.ogg.stream, serial_number);
+    FLAC__stream_encoder_set_ogg_serial_number(ctx->encoder.ogg.stream, serial_number);
 
-    OggFLAC__stream_encoder_set_verify(ctx->encoder.ogg.stream, flac_options.verify);
+    FLAC__stream_encoder_set_verify(ctx->encoder.ogg.stream, flac_options.verify);
 
     if (!FLAC__format_sample_rate_is_valid(dpm.rate)) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "invalid sampling rate %d",
@@ -399,53 +374,52 @@ static int flac_output_open(const char *fname, const char *comment)
       flac_session_close();
       return -1;
     }
-    OggFLAC__stream_encoder_set_sample_rate(ctx->encoder.ogg.stream, dpm.rate);
+    FLAC__stream_encoder_set_sample_rate(ctx->encoder.ogg.stream, dpm.rate);
 
-    OggFLAC__stream_encoder_set_qlp_coeff_precision(ctx->encoder.ogg.stream, flac_options.qlp_coeff_precision);
+    FLAC__stream_encoder_set_qlp_coeff_precision(ctx->encoder.ogg.stream, flac_options.qlp_coeff_precision);
     /* expensive! */
-    OggFLAC__stream_encoder_set_do_qlp_coeff_prec_search(ctx->encoder.ogg.stream, flac_options.qlp_coeff_precision_search);
+    FLAC__stream_encoder_set_do_qlp_coeff_prec_search(ctx->encoder.ogg.stream, flac_options.qlp_coeff_precision_search);
 
     if (nch == 2) {
-      OggFLAC__stream_encoder_set_do_mid_side_stereo(ctx->encoder.ogg.stream, flac_options.mid_side);
-      OggFLAC__stream_encoder_set_loose_mid_side_stereo(ctx->encoder.ogg.stream, flac_options.adaptive_mid_side);
+      FLAC__stream_encoder_set_do_mid_side_stereo(ctx->encoder.ogg.stream, flac_options.mid_side);
+      FLAC__stream_encoder_set_loose_mid_side_stereo(ctx->encoder.ogg.stream, flac_options.adaptive_mid_side);
     }
 
-    OggFLAC__stream_encoder_set_max_lpc_order(ctx->encoder.ogg.stream, flac_options.max_lpc_order);
-    OggFLAC__stream_encoder_set_min_residual_partition_order(ctx->encoder.ogg.stream, flac_options.min_residual_partition_order);
-    OggFLAC__stream_encoder_set_max_residual_partition_order(ctx->encoder.ogg.stream, flac_options.max_residual_partition_order);
-
-    OggFLAC__stream_encoder_set_blocksize(ctx->encoder.ogg.stream, flac_options.blocksize);
+    FLAC__stream_encoder_set_max_lpc_order(ctx->encoder.ogg.stream, flac_options.max_lpc_order);
+    FLAC__stream_encoder_set_min_residual_partition_order(ctx->encoder.ogg.stream, flac_options.min_residual_partition_order);
+    FLAC__stream_encoder_set_max_residual_partition_order(ctx->encoder.ogg.stream, flac_options.max_residual_partition_order);
 
-    OggFLAC__stream_encoder_set_client_data(ctx->encoder.ogg.stream, ctx);
+    FLAC__stream_encoder_set_blocksize(ctx->encoder.ogg.stream, flac_options.blocksize);
 
     if (0 < num_metadata)
-      OggFLAC__stream_encoder_set_metadata(ctx->encoder.ogg.stream, metadata, num_metadata);
-
-    /* set callback */
-    OggFLAC__stream_encoder_set_write_callback(ctx->encoder.ogg.stream, ogg_stream_encoder_write_callback);
-
-    ctx->state.ogg = OggFLAC__stream_encoder_init(ctx->encoder.ogg.stream);
-    if (ctx->state.ogg != OggFLAC__STREAM_ENCODER_OK) {
+      FLAC__stream_encoder_set_metadata(ctx->encoder.ogg.stream, metadata, num_metadata);
+
+    ctx->state.ogg = FLAC__stream_encoder_init_ogg_stream(ctx->encoder.ogg.stream,
+		0,
+		ogg_stream_encoder_write_callback,
+		0, 0, 0,
+		ctx);
+    if (ctx->state.ogg != FLAC__STREAM_ENCODER_OK) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create OggFLAC state (%s)",
-		OggFLAC__StreamEncoderStateString[ctx->state.ogg]);
+		FLAC__StreamEncoderStateString[ctx->state.ogg]);
       flac_session_close();
       return -1;
     }
   }
   else
-#endif /* AU_OGGFLAC */
   if (flac_options.seekable) {
-    if ((ctx->encoder.flac.s_stream = FLAC__seekable_stream_encoder_new()) == NULL) {
+    /* FLAC SEEKABLE STREAM */
+    if ((ctx->encoder.flac.s_stream = FLAC__stream_encoder_new()) == NULL) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create FLAC stream");
       flac_session_close();
       return -1;
     }
 
-    FLAC__seekable_stream_encoder_set_channels(ctx->encoder.flac.s_stream, nch);
+    FLAC__stream_encoder_set_channels(ctx->encoder.flac.s_stream, nch);
     /* 16bps only */
-    FLAC__seekable_stream_encoder_set_bits_per_sample(ctx->encoder.flac.s_stream, 16);
+    FLAC__stream_encoder_set_bits_per_sample(ctx->encoder.flac.s_stream, 16);
 
-    FLAC__seekable_stream_encoder_set_verify(ctx->encoder.flac.s_stream, flac_options.verify);
+    FLAC__stream_encoder_set_verify(ctx->encoder.flac.s_stream, flac_options.verify);
 
     if (!FLAC__format_sample_rate_is_valid(dpm.rate)) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "invalid sampling rate %d",
@@ -453,44 +427,40 @@ static int flac_output_open(const char *fname, const char *comment)
       flac_session_close();
       return -1;
     }
-    FLAC__seekable_stream_encoder_set_sample_rate(ctx->encoder.flac.s_stream, dpm.rate);
+    FLAC__stream_encoder_set_sample_rate(ctx->encoder.flac.s_stream, dpm.rate);
 
-    FLAC__seekable_stream_encoder_set_qlp_coeff_precision(ctx->encoder.flac.s_stream, flac_options.qlp_coeff_precision);
+    FLAC__stream_encoder_set_qlp_coeff_precision(ctx->encoder.flac.s_stream, flac_options.qlp_coeff_precision);
     /* expensive! */
-    FLAC__seekable_stream_encoder_set_do_qlp_coeff_prec_search(ctx->encoder.flac.s_stream, flac_options.qlp_coeff_precision_search);
+    FLAC__stream_encoder_set_do_qlp_coeff_prec_search(ctx->encoder.flac.s_stream, flac_options.qlp_coeff_precision_search);
 
     if (nch == 2) {
-      FLAC__seekable_stream_encoder_set_do_mid_side_stereo(ctx->encoder.flac.s_stream, flac_options.mid_side);
-      FLAC__seekable_stream_encoder_set_loose_mid_side_stereo(ctx->encoder.flac.s_stream, flac_options.adaptive_mid_side);
+      FLAC__stream_encoder_set_do_mid_side_stereo(ctx->encoder.flac.s_stream, flac_options.mid_side);
+      FLAC__stream_encoder_set_loose_mid_side_stereo(ctx->encoder.flac.s_stream, flac_options.adaptive_mid_side);
     }
 
-    FLAC__seekable_stream_encoder_set_max_lpc_order(ctx->encoder.flac.s_stream, flac_options.max_lpc_order);
-    FLAC__seekable_stream_encoder_set_min_residual_partition_order(ctx->encoder.flac.s_stream, flac_options.min_residual_partition_order);
-    FLAC__seekable_stream_encoder_set_max_residual_partition_order(ctx->encoder.flac.s_stream, flac_options.max_residual_partition_order);
+    FLAC__stream_encoder_set_max_lpc_order(ctx->encoder.flac.s_stream, flac_options.max_lpc_order);
+    FLAC__stream_encoder_set_min_residual_partition_order(ctx->encoder.flac.s_stream, flac_options.min_residual_partition_order);
+    FLAC__stream_encoder_set_max_residual_partition_order(ctx->encoder.flac.s_stream, flac_options.max_residual_partition_order);
 
-    FLAC__seekable_stream_encoder_set_blocksize(ctx->encoder.flac.s_stream, flac_options.blocksize);
-    FLAC__seekable_stream_encoder_set_client_data(ctx->encoder.flac.s_stream, ctx);
+    FLAC__stream_encoder_set_blocksize(ctx->encoder.flac.s_stream, flac_options.blocksize);
 
     if (0 < num_metadata)
-      FLAC__seekable_stream_encoder_set_metadata(ctx->encoder.flac.s_stream, metadata, num_metadata);
+      FLAC__stream_encoder_set_metadata(ctx->encoder.flac.s_stream, metadata, num_metadata);
 
-    /* set callback */
-/*    FLAC__seekable_stream_encoder_set_metadata_callback(ctx->encoder.flac.s_stream, flac_seekable_stream_encoder_metadata_callback); /* */
-#ifndef __BORLANDC__
-    FLAC__stream_encoder_set_metadata_callback(ctx->encoder.flac.s_stream, flac_seekable_stream_encoder_metadata_callback); /* */
-#endif
-    FLAC__seekable_stream_encoder_set_write_callback(ctx->encoder.flac.s_stream, flac_seekable_stream_encoder_write_callback);
+    ctx->state.s_flac = FLAC__stream_encoder_init_stream(
+		ctx->encoder.flac.s_stream,
+		flac_stream_encoder_write_callback,
+		0, 0, 0,
+		ctx);
 
-    ctx->state.s_flac = FLAC__seekable_stream_encoder_init(ctx->encoder.flac.s_stream);
-    if (ctx->state.s_flac != FLAC__SEEKABLE_STREAM_ENCODER_OK) {
+    if (ctx->state.s_flac != FLAC__STREAM_ENCODER_OK) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create FLAC state (%s)",
-		FLAC__SeekableStreamEncoderStateString[ctx->state.s_flac]);
+		FLAC__StreamEncoderStateString[ctx->state.s_flac]);
       flac_session_close();
       return -1;
     }
-	}
-	else
-  {
+  } else {
+    /* NON SEEKABLE STREAM */
     if ((ctx->encoder.flac.stream = FLAC__stream_encoder_new()) == NULL) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create FLAC stream");
       flac_session_close();
@@ -525,16 +495,16 @@ static int flac_output_open(const char *fname, const char *comment)
     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);
-    FLAC__stream_encoder_set_client_data(ctx->encoder.flac.stream, ctx);
 
     if (0 < num_metadata)
       FLAC__stream_encoder_set_metadata(ctx->encoder.flac.stream, metadata, num_metadata);
 
-    /* set callback */
-    FLAC__stream_encoder_set_metadata_callback(ctx->encoder.flac.stream, flac_stream_encoder_metadata_callback);
-    FLAC__stream_encoder_set_write_callback(ctx->encoder.flac.stream, flac_stream_encoder_write_callback);
-
-    ctx->state.flac = FLAC__stream_encoder_init(ctx->encoder.flac.stream);
+    ctx->state.flac = FLAC__stream_encoder_init_stream(ctx->encoder.flac.stream,
+		flac_stream_encoder_write_callback,
+		0,
+		0,
+		flac_stream_encoder_metadata_callback,
+		ctx);
     if (ctx->state.flac != FLAC__STREAM_ENCODER_OK) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create FLAC state (%s)",
 		FLAC__StreamEncoderStateString[ctx->state.flac]);
@@ -550,7 +520,6 @@ static int auto_flac_output_open(const char *input_filename, const char *title)
 {
   char *output_filename;
 
-#ifdef AU_OGGFLAC
   if (flac_options.isogg) {
 #ifndef __W32G__
   output_filename = create_auto_output_name(input_filename, "ogg", NULL, 0);
@@ -559,7 +528,6 @@ static int auto_flac_output_open(const char *input_filename, const char *title)
 #endif
   }
   else
-#endif /* AU_OGGFLAC */
   {
 #ifndef __W32G__
     output_filename = create_auto_output_name(input_filename, "flac", NULL, 0);
@@ -608,12 +576,10 @@ static int open_output(void)
   exclude_enc |= PE_BYTESWAP | PE_24BIT;
   dpm.encoding = validate_encoding(dpm.encoding, include_enc, exclude_enc);
 
-#ifdef AU_OGGFLAC
   if (flac_options.isogg) {
     ctl->cmsg(CMSG_WARNING, VERB_NORMAL, "*** cannot write back seekpoints when encoding to Ogg yet ***");
     ctl->cmsg(CMSG_WARNING, VERB_NORMAL, "*** and stream end will not be written.                   ***");
   }
-#endif
 
 #ifndef __W32G__
   if(dpm.name == NULL) {
@@ -638,9 +604,8 @@ static int open_output(void)
   return 0;
 }
 
-#ifdef AU_OGGFLAC
 static FLAC__StreamEncoderWriteStatus
-ogg_stream_encoder_write_callback(const OggFLAC__StreamEncoder *encoder,
+ogg_stream_encoder_write_callback(const FLAC__StreamEncoder *encoder,
 				  const FLAC__byte buffer[],
 				  unsigned bytes, unsigned samples,
 				  unsigned current_frame, void *client_data)
@@ -654,7 +619,6 @@ ogg_stream_encoder_write_callback(const OggFLAC__StreamEncoder *encoder,
   else
     return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR;
 }
-#endif
 static FLAC__StreamEncoderWriteStatus
 flac_stream_encoder_write_callback(const FLAC__StreamEncoder *encoder,
 				   const FLAC__byte buffer[],
@@ -675,26 +639,6 @@ static void flac_stream_encoder_metadata_callback(const FLAC__StreamEncoder *enc
 						  void *client_data)
 {
 }
-static FLAC__StreamEncoderWriteStatus
-flac_seekable_stream_encoder_write_callback(const FLAC__SeekableStreamEncoder *encoder,
-				   const FLAC__byte buffer[],
-				   unsigned bytes, unsigned samples,
-				   unsigned current_frame, void *client_data)
-{
-  FLAC_ctx *ctx = (FLAC_ctx *)client_data;
-
-  ctx->out_bytes += bytes;
-
-  if (write(dpm.fd, buffer, bytes) == bytes)
-    return FLAC__STREAM_ENCODER_WRITE_STATUS_OK;
-  else
-    return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR;
-}
-static void flac_seekable_stream_encoder_metadata_callback(const FLAC__SeekableStreamEncoder *encoder,
-						  const FLAC__StreamMetadata *metadata,
-						  void *client_data)
-{
-}
 
 static int output_data(char *buf, int32 nbytes)
 {
@@ -723,21 +667,18 @@ static int output_data(char *buf, int32 nbytes)
     oggbuf[i] = *s++;
   }
 
-#ifdef AU_OGGFLAC
   if (flac_options.isogg) {
-    ctx->state.ogg = OggFLAC__stream_encoder_get_state(ctx->encoder.ogg.stream);
-    if (ctx->state.ogg != OggFLAC__STREAM_ENCODER_OK) {
-      if (ctx->state.ogg == OggFLAC__STREAM_ENCODER_FLAC_STREAM_ENCODER_ERROR) {
+    ctx->state.ogg = FLAC__stream_encoder_get_state(ctx->encoder.ogg.stream);
+    if (ctx->state.ogg != FLAC__STREAM_ENCODER_OK) {
 	ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "FLAC stream verify error (%s)",
-		  FLAC__StreamDecoderStateString[OggFLAC__stream_encoder_get_verify_decoder_state(ctx->encoder.ogg.stream)]);
-      }
+		  FLAC__StreamEncoderStateString[FLAC__stream_encoder_get_verify_decoder_state(ctx->encoder.ogg.stream)]);
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot encode OggFLAC stream (%s)",
-		OggFLAC__StreamEncoderStateString[ctx->state.ogg]);
+		FLAC__StreamEncoderStateString[ctx->state.ogg]);
       flac_session_close();
       return -1;
     }
 
-    if (!OggFLAC__stream_encoder_process_interleaved(ctx->encoder.ogg.stream, oggbuf,
+    if (!FLAC__stream_encoder_process_interleaved(ctx->encoder.ogg.stream, oggbuf,
 						     nbytes / nch / 2)) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot encode OggFLAC stream");
       flac_session_close();
@@ -745,24 +686,23 @@ static int output_data(char *buf, int32 nbytes)
     }
   }
   else
-#endif /* AU_OGGFLAC */
 	if (flac_options.seekable) {
-    ctx->state.s_flac = FLAC__seekable_stream_encoder_get_state(ctx->encoder.flac.s_stream);
+    ctx->state.s_flac = FLAC__stream_encoder_get_state(ctx->encoder.flac.s_stream);
     if (ctx->state.s_flac != FLAC__STREAM_ENCODER_OK) {
       if (ctx->state.s_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__SeekableStreamDecoderStateString[FLAC__seekable_stream_encoder_get_verify_decoder_state(ctx->encoder.flac.s_stream)]);
+		  FLAC__StreamDecoderStateString[FLAC__stream_encoder_get_verify_decoder_state(ctx->encoder.flac.s_stream)]);
       }
       else {
 	ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot encode FLAC stream (%s)",
-		  FLAC__SeekableStreamEncoderStateString[ctx->state.s_flac]);
+		  FLAC__StreamEncoderStateString[ctx->state.s_flac]);
       }
       flac_session_close();
       return -1;
     }
 
-    if (!FLAC__seekable_stream_encoder_process_interleaved(ctx->encoder.flac.s_stream, oggbuf,
+    if (!FLAC__stream_encoder_process_interleaved(ctx->encoder.flac.s_stream, oggbuf,
 						  nbytes / nch / 2 )) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot encode FLAC stream");
       flac_session_close();
@@ -814,19 +754,17 @@ static void close_output(void)
   }
 
   if (flac_options.isogg) {
-#ifdef AU_OGGFLAC
-    if ((ctx->state.ogg = OggFLAC__stream_encoder_get_state(ctx->encoder.ogg.stream)) != OggFLAC__STREAM_ENCODER_OK) {
+    if ((ctx->state.ogg = FLAC__stream_encoder_get_state(ctx->encoder.ogg.stream)) != FLAC__STREAM_ENCODER_OK) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "OggFLAC stream encoder is invalid (%s)",
-		OggFLAC__StreamEncoderStateString[ctx->state.ogg]);
+		FLAC__StreamEncoderStateString[ctx->state.ogg]);
       /* fall through */
     }
   }
   else
-#endif /* AU_OGGFLAC */
   if (flac_options.seekable) {
-    if ((ctx->state.s_flac = FLAC__seekable_stream_encoder_get_state(ctx->encoder.flac.s_stream)) != FLAC__SEEKABLE_STREAM_ENCODER_OK) {
+    if ((ctx->state.s_flac = FLAC__stream_encoder_get_state(ctx->encoder.flac.s_stream)) != FLAC__STREAM_ENCODER_OK) {
       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "FLAC stream encoder is invalid (%s)",
-		FLAC__SeekableStreamEncoderStateString[ctx->state.s_flac]);
+		FLAC__StreamEncoderStateString[ctx->state.s_flac]);
       /* fall through */
     }
 	}
diff --git a/timidity/mod2midi.c b/timidity/mod2midi.c
index 72c0293..2f86cf3 100644
--- a/timidity/mod2midi.c
+++ b/timidity/mod2midi.c
@@ -195,7 +195,8 @@ period2note (int period, int *finetune)
 
   if (period < 14 || period > 13696)
   {
-    ctl->cmsg(CMSG_WARNING, VERB_NORMAL, "BAD period %d\n", period);
+    ctl->cmsg(CMSG_WARNING, VERB_NOISY, "BAD period %d", period);
+    *finetune = 0;
     return -1;
   }
 
@@ -266,11 +267,13 @@ Voice_SetPeriod (UBYTE v, ULONG period)
     return;
 
   new_noteon = period2note (ModV[v].period, &bend);
+  if (new_noteon >= 0) {
 #ifndef TRACE_SLIDE_NOTES
-  bend += (new_noteon - ModV[v].noteon) << 13;
-  new_noteon = ModV[v].noteon;
+    bend += (new_noteon - ModV[v].noteon) << 13;
+    new_noteon = ModV[v].noteon;
 #endif
-  bend = WHEEL_VALUE(bend);
+    bend = WHEEL_VALUE(bend);
+  }
 
   if (ModV[v].noteon != new_noteon)
     {
@@ -278,7 +281,7 @@ Voice_SetPeriod (UBYTE v, ULONG period)
 
       if (new_noteon < 0)
         {
-	  ctl->cmsg(CMSG_WARNING, VERB_VERBOSE,
+	  ctl->cmsg(CMSG_WARNING, VERB_NOISY,
 			  "Strange period %d",
 			  ModV[v].period);
 	  return;
@@ -330,13 +333,13 @@ Voice_Play (UBYTE v, SAMPLE * s, ULONG start)
     Voice_Stop (v);
 
   new_noteon = period2note (ModV[v].period, &bend);
-  bend = WHEEL_VALUE(bend);
   if (new_noteon < 0) {
-    ctl->cmsg(CMSG_WARNING, VERB_VERBOSE,
+    ctl->cmsg(CMSG_WARNING, VERB_NOISY,
 			  "Strange period %d",
 			  ModV[v].period);
     return;
   }
+  bend = WHEEL_VALUE(bend);
 
   ModV[v].noteon = new_noteon;
   ModV[v].time = at;
@@ -590,9 +593,13 @@ void load_module_samples (SAMPLE * s, int numsamples, int ntsc)
 	special_patch[i]->sample = sp =
 	    (Sample *)safe_malloc(sizeof(Sample));
 	memset(sp, 0, sizeof(Sample));
-	strncpy(name, s->samplename, 22);
-	name[22] = '\0';
-	code_convert(name, NULL, 23, NULL, "ASCII");
+	memset(name, 0, 23 * sizeof(char));
+	if (s->samplename != NULL)
+	{
+	    strncpy(name, s->samplename, 22);
+	    name[22] = '\0';
+	    code_convert(name, NULL, 23, NULL, "ASCII");
+	}
 	if(name[0] == '\0')
 	    special_patch[i]->name = NULL;
 	else
diff --git a/timidity/reverb.c b/timidity/reverb.c
index 2bc8dea..a5b4c06 100644
--- a/timidity/reverb.c
+++ b/timidity/reverb.c
@@ -1624,8 +1624,8 @@ static void do_ch_reverb_panning_delay(int32 *buf, int32 count, InfoDelay3 *info
 		buf[i] += r;
 		buf[++i] += l;
 
-		if (++index0 == buf_size) {index0 = 0;}
-		if (++buf_index == buf_size) {buf_index = 0;}
+		if (index0++ == buf_size) {index0 = 0;}
+		if (buf_index++ == buf_size) {buf_index = 0;}
 	}
 	memset(reverb_effect_buffer, 0, sizeof(int32) * count);
 	info->index[0] = index0;
diff --git a/timidity/tables.c b/timidity/tables.c
index bb37994..9f55f54 100644
--- a/timidity/tables.c
+++ b/timidity/tables.c
@@ -1682,4 +1682,4 @@ float lofi_sampling_freq_table_xg[] =
 	420.0, 416.0, 412.0, 408.0, 405.0, 401.0, 397.0, 394.0,
 	390.0, 387.0, 383.0, 380.0, 377.0, 374.0, 371.0, 368.0,
 	364.0, 361.0, 359.0, 356.0, 353.0, 350.0, 347.0, 345.0,
-};
\ No newline at end of file
+};
diff --git a/timidity/timidity.c b/timidity/timidity.c
index a53a367..e443b4c 100644
--- a/timidity/timidity.c
+++ b/timidity/timidity.c
@@ -40,31 +40,21 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif /* HAVE_UNISTD_H */
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif  /* TIME_WITH_SYS_TIME */
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif /* NAVE_SYS_STAT_H */
 #include <fcntl.h> /* for open */
 
-#ifdef HAVE_STDBOOL_H
-#include <stdbool.h>
-#endif
-
-#ifndef __bool_true_false_are_defined
-# ifdef bool
-#  undef bool
-# endif
-# ifdef ture
-#  undef ture
-# endif
-# ifdef false
-#  undef false
-# endif
-# define bool int
-# define false ((bool)0)
-# define true (!false)
-# define __bool_true_false_are_defined true
-#endif /* C99 _Bool hack */
-
 #ifdef BORLANDC_EXCEPTION
 #include <excpt.h>
 #endif /* BORLANDC_EXCEPTION */
@@ -311,9 +301,7 @@ static const struct option longopts[] = {
 	{ "flac-verify",            no_argument,       NULL, TIM_OPT_FLAC_VERIFY },
 	{ "flac-padding",           required_argument, NULL, TIM_OPT_FLAC_PADDING },
 	{ "flac-complevel",         required_argument, NULL, TIM_OPT_FLAC_COMPLEVEL },
-#ifdef AU_OGGFLAC
 	{ "oggflac",                no_argument,       NULL, TIM_OPT_FLAC_OGGFLAC },
-#endif /* AU_OGGFLAC */
 #endif /* AU_FLAC */
 #ifdef AU_SPEEX
 	{ "speex-quality",          required_argument, NULL, TIM_OPT_SPEEX_QUALITY },
@@ -449,9 +437,7 @@ static inline int parse_opt_output_swab(const char *);
 static inline int parse_opt_flac_verify(const char *);
 static inline int parse_opt_flac_padding(const char *);
 static inline int parse_opt_flac_complevel(const char *);
-#ifdef AU_OGGFLAC
 static inline int parse_opt_flac_oggflac(const char *);
-#endif /* AU_OGGFLAC */
 #endif /* AU_FLAC */
 #ifdef AU_SPEEX
 static inline int parse_opt_speex_quality(const char *);
@@ -2789,10 +2775,8 @@ MAIN_INTERFACE int set_tim_opt_long(int c, char *optarg, int index)
 		return parse_opt_flac_padding(arg);
 	case TIM_OPT_FLAC_COMPLEVEL:
 		return parse_opt_flac_complevel(arg);
-#ifdef AU_OGGFLAC
 	case TIM_OPT_FLAC_OGGFLAC:
 		return parse_opt_flac_oggflac(arg);
-#endif /* AU_OGGFLAC */
 #endif /* AU_FLAC */
 #ifdef AU_SPEEX
 	case TIM_OPT_SPEEX_QUALITY:
@@ -3642,10 +3626,8 @@ static inline int parse_opt_h(const char *arg)
 "               Write a PADDING block of length n",
 "             --flac-complevel=n (for Ogg FLAC only)",
 "               Set compression level n:[0..8]",
-#ifdef AU_OGGFLAC
 "             --oggflac (for Ogg FLAC only)",
 "               Output OggFLAC stream (experimental)",
-#endif /* AU_OGGFLAC */
 #endif /* AU_FLAC */
 #ifdef AU_SPEEX
 "             --speex-quality=n (for Ogg Speex only)",
@@ -4381,7 +4363,6 @@ static inline int parse_opt_flac_complevel(const char *arg)
 	return 0;
 }
 
-#ifdef AU_OGGFLAC
 extern void flac_set_option_oggflac(int);
 
 static inline int parse_opt_flac_oggflac(const char *arg)
@@ -4389,7 +4370,6 @@ static inline int parse_opt_flac_oggflac(const char *arg)
 	flac_set_option_oggflac(1);
 	return 0;
 }
-#endif /* AU_OGGFLAC */
 #endif /* AU_FLAC */
 
 #ifdef AU_SPEEX
@@ -5466,14 +5446,14 @@ extern int volatile save_playlist_once_before_exit_flag;
 static int CoInitializeOK = 0;
 #endif
 
-static inline bool directory_p(const char* path)
+static inline int directory_p(const char* path)
 {
 #if defined ( IA_W32GUI ) || defined ( IA_W32G_SYN )
     return is_directory(path);
 #else
     struct stat st;
     if(stat(path, &st) != -1) return S_ISDIR(st.st_mode);
-    return false;
+    return 0;
 #endif
 }
 
@@ -5649,11 +5629,11 @@ int main(int argc, char **argv)
 	    }
 
 	    ctl->cmsg(CMSG_FATAL, VERB_NORMAL,
-		      "%s: Can't read any configuration file.\nPlease check "
+		      "%s: Error reading configuration file.\nPlease check "
 		      "%s or %s", program_name, config1, config2);
 #else
 	    ctl->cmsg(CMSG_FATAL, VERB_NORMAL,
-		      "%s: Can't read any configuration file.\nPlease check "
+		      "%s: Error reading configuration file.\nPlease check "
 		      CONFIG_FILE, program_name);
 #endif /* __W32__ */
 	}
diff --git a/timidity/wrd.h b/timidity/wrd.h
index 0815aa7..fd7fbb3 100644
--- a/timidity/wrd.h
+++ b/timidity/wrd.h
@@ -148,6 +148,7 @@ static inline void print_ecmd(char*, int*, int);
 #endif
 #include <limits.h>
 #include "mblock.h"
+#include "common.h"
 #include "controls.h"
 static inline void print_ecmd(char *cmd, int *args, int narg)
 {
diff --git a/timidity/wrd_read.c b/timidity/wrd_read.c
index e7ae7f8..c824f49 100644
--- a/timidity/wrd_read.c
+++ b/timidity/wrd_read.c
@@ -1765,7 +1765,10 @@ static char *wrd_name_string(int cmd)
 
 #ifdef ENABLE_SHERRY
 /*******************************************************************************/
+#if 0
+/* for mac only */
 #pragma mark -
+#endif
 
 static int sherry_started;	/* 0 - before start command 0x01*/
 				/* 1 - after start command 0x01*/