On 2015/06/26 17:50, Alexandre Ratchov wrote:
> Tested with various .wav files: 8-bit, 16-bit, stereo, mono,
> 11.025kHz, and 48kH. BTW without this it didn't work at all on my
> setup.
> 
> (I had to rename the patches because I couldn't make "make
> update-patches" work well on them)
> 
> OK?

i386-patch should stay as-is, otherwise I think this is OK, but I would
prefer to commit in two parts, first "regen patches" to get the usual
filenames, then the actual change..

> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/graphics/xanim/Makefile,v
> retrieving revision 1.33
> diff -u -p -u -p -r1.33 Makefile
> --- Makefile  16 Feb 2015 22:57:08 -0000      1.33
> +++ Makefile  26 Jun 2015 15:37:46 -0000
> @@ -3,7 +3,7 @@
>  COMMENT=     X11 animation player with support for lots of formats
>  
>  DISTNAME=xanim-2.80.1
> -REVISION =   4
> +REVISION =   5
>  WRKDIST=${WRKDIR}/xanim2801
>  CATEGORIES= graphics x11
>  
> Index: patches/i386-patch
> ===================================================================
> RCS file: patches/i386-patch
> diff -N patches/i386-patch
> --- patches/i386-patch        23 Apr 2003 08:30:05 -0000      1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,22 +0,0 @@
> ---- Imakefile.orig2  Thu Mar 18 22:45:51 1999
> -+++ Imakefile        Thu Mar 18 22:46:40 1999
> -@@ -165,13 +165,13 @@
> - XCOMM  
> - XCOMM  Again don't use these if you are using the dynamically loadable 
> modules.
> - XCOMM 
> --XCOMM XA_IV32_DEF = -DXA_IV32 
> --XCOMM XA_CVID_DEF = -DXA_CVID
> --XCOMM XA_CYUV_DEF = -DXA_CYUV
> -+XA_IV32_DEF = -DXA_IV32 
> -+XA_CVID_DEF = -DXA_CVID
> -+XA_CYUV_DEF = -DXA_CYUV
> - XCOMM 
> --XCOMM XA_IV32_LIB = mods/xa2.1_iv32_linuxELF.o
> --XCOMM XA_CVID_LIB = mods/xa2.0_cvid_linuxELF.o
> --XCOMM XA_CYUV_LIB = mods/xa1.0_cyuv_linuxELF.o
> -+XA_IV32_LIB = xa2.0_iv32_linuxELF.o
> -+XA_CVID_LIB = xa2.0_cvid_linuxELF.o
> -+XA_CYUV_LIB = xa1.0_cyuv_linuxELF.o
> - XCOMM 
> - XCOMM ##########################
> - XCOMM  NOTE: SGI Machines Only: 
> Index: patches/patch-Imakefile
> ===================================================================
> RCS file: patches/patch-Imakefile
> diff -N patches/patch-Imakefile
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-Imakefile   26 Jun 2015 15:37:46 -0000
> @@ -0,0 +1,117 @@
> +$OpenBSD$
> +--- Imakefile.orig   Sun Mar 21 23:36:26 1999
> ++++ Imakefile        Fri Jun 26 12:29:50 2015
> +@@ -96,7 +96,7 @@ XCOMM   Specify any Linker flags needed to allow dynam
> + XCOMM   to link against symbols inside xanim.
> + XCOMM 
> + XCOMM ## Linux
> +-LD_FLAGS = -rdynamic
> ++XCOMM LD_FLAGS = -rdynamic
> + XCOMM ## SunOS/Solaris use:
> + XCOMM  LD_FLAGS =
> + 
> +@@ -111,17 +111,17 @@ XCOMM
> + XCOMM NOTE: not all machines need the XA_DLL_LIB define.
> + XCOMM 
> #########################################################################
> + XCOMM 
> +-XA_DLL_DEF = -DXA_DLL -DXA_PRINT
> ++XCOMM XA_DLL_DEF = -DXA_DLL -DXA_PRINT
> + XCOMM ### Use this only if the above doesn't work
> + XCOMM XA_DLL_DEF = -DXA_DLL
> + XCOMM
> + XCOMM ### You may need this library.
> +-XA_DLL_LIB = -ldl
> ++XCOMM XA_DLL_LIB = -ldl
> + XCOMM
> + XCOMM If you'd like to change the default directory that XAnim searches 
> while
> + XCOMM looking for dlls, then change the directory below.
> + XCOMM
> +-XA_DLL_PATH = /usr/local/xanim/mods
> ++XCOMM XA_DLL_PATH = /usr/local/xanim/mods
> + 
> + 
> + 
> +@@ -267,8 +267,8 @@ XCOMM  -- NOTE_9 Since xanim doesn't yet support Win32
> + XCOMM  XA_AUDIO_DEFS =
> + XCOMM 
> + XCOMM ## -- Linux PCs 
> ---------------------------------------------------------
> +-XA_AUDIO_DEFS = -DXA_LINUX_AUDIO
> +-XA_AUDIO_LIBS = -lc
> ++XCOMM XA_AUDIO_DEFS = -DXA_LINUX_AUDIO
> ++XCOMM XA_AUDIO_LIBS = -lc
> + XCOMM 
> + XCOMM  -- Linux PC's with OLD Rev sound drivers 
> -------------------------------
> + XCOMM  XA_AUDIO_DEFS = -DXA_LINUX_AUDIO -DXA_LINUX_OLDER_SND
> +@@ -309,6 +309,10 @@ XCOMM 
> + XCOMM  -- NetBSD-current (as of 30/April 
> 1995)---------------------------------
> + XCOMM  XA_AUDIO_DEFS = -DXA_NetBSD_AUDIO
> + XCOMM 
> ++XCOMM  -- OpenBSD, from at least 2.4 to now
> ++XA_AUDIO_DEFS = -DXA_OpenBSD_AUDIO
> ++XA_AUDIO_LIBS = -lsndio
> ++XCOMM 
> + XCOMM  -- QNX 4.2 PC's 
> --------------------------------------------------------
> + XCOMM  XA_AUDIO_DEFS = -DXA_LINUX_AUDIO -DXA_SELECT
> + XCOMM  XA_AUDIO_LIBS = -lc
> +@@ -442,7 +446,7 @@ XCOMM    -- about not finding multibuf.h or the
> + XCOMM    -- following symbols(XmbufDisplayBuffers, XmbufQueryExtension,
> + XCOMM    --  XmbufCreateBuffers).
> + XCOMM    -- NOTE_8: HP-UX machines need to comment this out.
> +-XCOMM  XA_MULTIBUF = -DXMBUF
> ++XA_MULTIBUF = -DXMBUF
> + XCOMM 
> + XCOMM ###########
> + XCOMM 
> +@@ -465,7 +469,7 @@ DEFINES  = $(XA_DEFS)
> + 
> + PROGRAMS = $(XANIM)
> + 
> +-INCLUDES = -I$(INCDIR) $(XA_INCS)
> ++INCLUDES = -I/usr/X11R6/include/X11 $(XA_INCS)
> + 
> +    LIBS1 = $(XA_LIBS) $(EXTENSIONLIB) $(XTOOLLIB) $(XLIB) -lm
> + DEPLIBS1 = $(DEPEXTENSIONLIB) $(DEPXTOOLLIB) $(DEPXLIB)
> +@@ -504,43 +508,3 @@ ComplexProgramTarget_1(xanim, $(LIBS1), $(OTHER_LIBS) 
> + xaclean::
> +     $(RM) $(OBJS1)
> + 
> +-
> +-XCOMM  DO NOT DELETE THIS LINE
> +-xanim.o: Imakefile xanim.h xa_config.h xa_x11.h xanim.c
> +-xa1.0_kpcd.o: xa1.0_kpcd.c
> +-unpacker.o: unpacker.c
> +-xa_acodec.o: Imakefile xanim.h xa_acodec.c
> +-xa_act.o: xanim.h xa_config.h xa_act.c
> +-xa_au.o: xanim.h xa_config.h xa_au.c
> +-xa_audio.o: Imakefile xanim.h xa_config.h xa_audio.h xa_audio.c
> +-xa_avi.o: Imakefile xanim.h xa_config.h xa_avi.h xa_codecs.h xa_xmpg.h 
> xa_avi.c
> +-xa_cmap.o: xanim.h xa_config.h xa_cmap.c
> +-xa_color.o: xanim.h xa_color.c
> +-xa_dl.o: xanim.h xa_config.h xa_dl.h xa_dl.c
> +-xa_dumfx.o: xanim.h xa_dumfx.c
> +-xa_fli.o: xanim.h xa_config.h xa_fli.h xa_fli.c
> +-xa_formats.o: xanim.h xa_formats.c
> +-xa_gif.o: xanim.h xa_config.h xa_gif.h xa_gif.c
> +-xa_iff.o: xanim.h xa_config.h xa_iff.h xa_iff.c
> +-xa_input.o: xanim.h xa_input.c
> +-xa_ipc.o: Imakefile xanim.h xa_config.h xa_ipc.h xa_ipc.c
> +-xa_jmov.o: xanim.h xa_config.h xa_jmov.h xa_jmov.c
> +-xa_jpg.o: xanim.h xa_config.h xa_jpg.h xa_jpg.c
> +-xa_j6i.o: xanim.h xa_j6i.h xa_j6i.c
> +-xa_movi.o: xanim.h xa_config.h xa_movi.h xa_movi.c
> +-xa_mpg.o: xanim.h xa_config.h xa_mpg.h xa_xmpg.h xa_mpg.c xa_jpg.c
> +-xa_qt.o: Imakefile xanim.h xa_config.h xa_qt.h xa_codecs.h xa_qt.c
> +-xa_qt_decs.o: Imakefile xanim.h xa_config.h xa_qt.h xa_qt_decs.c
> +-xa_vid_codec.o: Imakefile xa_avi.h xa_qt.h xa_codecs.h xavid.h xavid_mod.h
> +-xa_vid_codec.o: xa_vid_codec.c
> +-xa_replay.o: xanim.h xa_config.h xa_replay.h xa_replay.c
> +-xa_rle.o: xanim.h xa_config.h xa_rle.h xa_rle.c
> +-xa_set.o: xanim.h xa_config.h xa_iff.h xa_iff.c xa_set.h xa_set.c
> +-xa_raw.o: xanim.h xa_raw.h xa_raw.c
> +-xa_show.o: Imakefile xanim.h xa_show.c
> +-xa_txt.o: xanim.h xa_config.h xa_txt.c
> +-xa_utils.o: xanim.h xa_config.h xa_utils.c
> +-xa_wav.o: xanim.h xa_config.h xa_avi.h xa_wav.c
> +-xa_8svx.o: xanim.h xa_8svx.h xa_8svx.c
> +-xa_x11.o: Imakefile xanim.h xa_config.h xa_x11.h xa_x11.c
> +-xa_gsm.o: xanim.h xa_gsm_state.h xa_gsm.h xa_gsm.c
> Index: patches/patch-a
> ===================================================================
> RCS file: patches/patch-a
> diff -N patches/patch-a
> --- patches/patch-a   1 May 2015 16:51:25 -0000       1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,20 +0,0 @@
> ---- xa_audio.h.orig  Thu Mar 18 21:51:23 1999
> -+++ xa_audio.h       Thu Mar 18 21:52:46 1999
> -@@ -114,6 +114,17 @@
> - #include <sys/ioccom.h>
> - #endif
> - 
> -+/*********************** OpenBSD INCLUDES *******************************/
> -+#ifdef XA_OpenBSD_AUDIO
> -+#include <errno.h>
> -+#include <fcntl.h>
> -+#include <sys/audioio.h>
> -+#include <sys/file.h>
> -+#include <sys/stat.h>
> -+#include <sys/ioctl.h>
> -+#include <sys/ioccom.h>
> -+#include <endian.h>
> -+#endif
> - 
> - /*********************** LINUX INCLUDES ********************************/
> - #ifdef XA_LINUX_AUDIO
> Index: patches/patch-b
> ===================================================================
> RCS file: patches/patch-b
> diff -N patches/patch-b
> --- patches/patch-b   19 Mar 1999 01:20:48 -0000      1.2
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,477 +0,0 @@
> ---- xa_audio.c.orig  Tue Mar 16 00:58:48 1999
> -+++ xa_audio.c       Fri Mar 19 01:15:03 1999
> -@@ -114,6 +114,7 @@
> -  * 21Feb99 - Added routine *_Audio_Prep  to hide initialization delays
> -  *       when starting audio.
> -  * 02Mar99 - Linux: Change XA_LINUX_NEWER_SND TO OLDER_SND to avoid 
> confusion.
> -+ * 18Mar99 - OpenBSD: newer configuration, solves a few problems.
> -  *
> -  
> ****************************************************************************/
> - 
> -@@ -4936,6 +4937,402 @@
> - /******************* END OF NetBSD SPECIFIC ROUTINES 
> ************************/
> - 
> /****************************************************************************/
> - 
> -+/****************************************************************************/
> -+/**************** OpenBSD SPECIFIC ROUTINES 
> *********************************/
> -+/****************************************************************************/
> -+
> -+/*
> -+ * Based on the NetBSD port initially, 
> -+ * contributed by Marc Espie <[email protected]>
> -+ * This code may actually work on NetBSD, but this is not my place to
> -+ * change this.
> -+ *
> -+ * This code tries not to abuse AUDIO_SETINFO, as this can be an expensive
> -+ * ioctl on some arches. Also, it is able to deal with weirder audio
> -+ * devices, such as those found on amiga or sparcs.
> -+ */
> -+
> -+#ifdef XA_OpenBSD_AUDIO
> -+
> -+void  OpenBSD_Audio_Init();
> -+void  OpenBSD_Audio_Kill();
> -+void  OpenBSD_Audio_Off();
> -+void  OpenBSD_Audio_Prep();
> -+void  OpenBSD_Audio_On();
> -+void  OpenBSD_Adjust_Volume();
> -+xaULONG OpenBSD_Closest_Freq();
> -+void OpenBSD_Set_Output_Port();
> -+void OpenBSD_Speaker_Toggle();
> -+void OpenBSD_Headphone_Toggle();
> -+
> -+#define OpenBSD_MAX_VOL AUDIO_MAX_GAIN
> -+#define OpenBSD_MIN_VOL AUDIO_MIN_GAIN
> -+
> -+static int devAudio;
> -+
> -+/********** XA_Audio_Setup **********************
> -+ * 
> -+ * Also defines OpenBSD Specific variables.
> -+ *
> -+ *****/
> -+void XA_Audio_Setup()
> -+{
> -+  XA_Audio_Init             = OpenBSD_Audio_Init;
> -+  XA_Audio_Kill             = OpenBSD_Audio_Kill;
> -+  XA_Audio_Off              = OpenBSD_Audio_Off;
> -+  XA_Audio_Prep             = OpenBSD_Audio_Prep;
> -+  XA_Audio_On               = OpenBSD_Audio_On;
> -+  XA_Closest_Freq   = OpenBSD_Closest_Freq;
> -+  XA_Set_Output_Port        = OpenBSD_Set_Output_Port;
> -+  XA_Speaker_Tog    = OpenBSD_Speaker_Toggle;
> -+  XA_Headphone_Tog  = OpenBSD_Headphone_Toggle;
> -+  XA_LineOut_Tog    = OpenBSD_Headphone_Toggle;
> -+  XA_Adjust_Volume  = OpenBSD_Adjust_Volume;
> -+
> -+  xa_snd_cur = 0;
> -+  xa_audio_present = XA_AUDIO_UNK;
> -+  xa_audio_status  = XA_AUDIO_STOPPED;
> -+  xa_audio_ring_size  = 8;
> -+}
> -+
> -+/********** OpenBSD_Audio_Init **********************
> -+ * Open /dev/audio and OpenBSD.
> -+ *
> -+ *****/
> -+void OpenBSD_Audio_Init()
> -+{ int ret;
> -+  int type;
> -+  audio_info_t a_info;
> -+  struct audio_encoding query;
> -+  DEBUG_LEVEL2 fprintf(stderr,"OpenBSD_Audio_Init\n");
> -+  if (xa_audio_present != XA_AUDIO_UNK) return;
> -+  devAudio = open("/dev/audio", O_WRONLY | O_NDELAY);
> -+  if (devAudio == -1)
> -+  {
> -+    if (errno == EBUSY) fprintf(stderr,"Audio_Init: Audio device is busy. - 
> ");
> -+    else fprintf(stderr,"Audio_Init: Error opening audio device. - ");
> -+    fprintf(stderr,"Will continue without audio\n");
> -+    xa_audio_present = XA_AUDIO_ERR;
> -+    return;
> -+  }
> -+
> -+  DEBUG_LEVEL1 fprintf(stderr,"OpenBSD AUDIO\n");
> -+
> -+  AUDIO_INITINFO(&a_info);
> -+  a_info.blocksize = 1024;
> -+  a_info.mode = AUMODE_PLAY | AUMODE_PLAY_ALL;
> -+  a_info.play.sample_rate = 11025;   /* this is changed later */
> -+
> -+  /* find true native formats */
> -+  for (query.index = 0;
> -+    ioctl(devAudio, AUDIO_GETENC, &query) != -1;
> -+    query.index++)
> -+    {
> -+    if (query.flags & AUDIO_ENCODINGFLAG_EMULATED)
> -+            continue;
> -+    if (query.precision == 16)
> -+            {
> -+            a_info.play.encoding = query.encoding;
> -+            a_info.play.precision = query.precision;
> -+            break;
> -+            }
> -+    if ((query.precision == 8) && (
> -+            (query.encoding == AUDIO_ENCODING_SLINEAR) || 
> -+            (query.encoding == AUDIO_ENCODING_ULINEAR)) )
> -+            {
> -+            a_info.play.encoding = query.encoding;
> -+            a_info.play.precision = query.precision;
> -+            }
> -+            /* no linear format -> resort to log formats */
> -+    if (a_info.play.precision != 8)
> -+            {
> -+            if ( query.encoding == AUDIO_ENCODING_ULAW) 
> -+                    a_info.play.encoding = query.encoding;
> -+            }
> -+    }
> -+  /* set format, then retrieve what the device actually says */
> -+  ioctl(devAudio, AUDIO_SETINFO, &a_info);
> -+  ioctl(devAudio, AUDIO_GETINFO, &a_info);
> -+
> -+  switch(a_info.play.encoding)
> -+    {
> -+  case AUDIO_ENCODING_SLINEAR:
> -+    xa_audio_hard_type = a_info.play.precision == 8 ? XA_AUDIO_SIGNED_1M :
> -+#if BYTE_ORDER == BIG_ENDIAN
> -+    XA_AUDIO_SIGNED_2MB;
> -+#else
> -+    XA_AUDIO_SIGNED_2ML;
> -+#endif
> -+    break;
> -+  case AUDIO_ENCODING_ULINEAR:
> -+    xa_audio_hard_type = a_info.play.precision == 8 ? XA_AUDIO_LINEAR_1M :
> -+#if BYTE_ORDER == BIG_ENDIAN
> -+    XA_AUDIO_LINEAR_2MB;
> -+#else
> -+    XA_AUDIO_LINEAR_2ML;
> -+#endif
> -+    break;
> -+  case AUDIO_ENCODING_ULAW:
> -+   xa_audio_hard_type = XA_AUDIO_SUN_AU;
> -+    break;
> -+  case AUDIO_ENCODING_ULINEAR_LE:
> -+    xa_audio_hard_type = a_info.play.precision == 8 ? XA_AUDIO_LINEAR_1M :
> -+            XA_AUDIO_LINEAR_2ML;
> -+    break;
> -+  case AUDIO_ENCODING_ULINEAR_BE:
> -+    xa_audio_hard_type = a_info.play.precision == 8 ? XA_AUDIO_LINEAR_1M :
> -+            XA_AUDIO_LINEAR_2MB;
> -+    break;
> -+  case AUDIO_ENCODING_SLINEAR_LE:
> -+    xa_audio_hard_type = a_info.play.precision == 8 ? XA_AUDIO_SIGNED_1M :
> -+            XA_AUDIO_SIGNED_2ML;
> -+    break;
> -+  case AUDIO_ENCODING_SLINEAR_BE:
> -+    xa_audio_hard_type = a_info.play.precision == 8 ? XA_AUDIO_SIGNED_1M :
> -+            XA_AUDIO_SIGNED_2MB;
> -+    break;
> -+  default:
> -+    fprintf(stderr,"Audio_Init: Weird audio format %d\n",
> -+     a_info.play.encoding);
> -+    fprintf(stderr,"Will continue without audio\n");
> -+    xa_audio_present = XA_AUDIO_ERR;
> -+     close(devAudio);
> -+     return;
> -+   }
> -+
> -+  xa_audio_hard_freq  = a_info.play.sample_rate;
> -+  xa_audio_hard_buff  = a_info.blocksize;
> -+
> -+    /* only precision 8 and 16 are supported. Fail if otherwise?? */
> -+  xa_audio_hard_bps   = (a_info.play.precision==8)?1:2;
> -+  xa_audio_hard_chans = a_info.play.channels;
> -+  Gen_uLaw_2_Signed();
> -+  Gen_Signed_2_uLaw();
> -+
> -+  xa_interval_id = 0;
> -+  xa_audio_present = XA_AUDIO_OK;
> -+  DEBUG_LEVEL2 fprintf(stderr,"   success \n");
> -+  Init_Audio_Ring(xa_audio_ring_size,
> -+                    (XA_AUDIO_MAX_RING_BUFF * xa_audio_hard_bps) );
> -+}
> -+
> -+/********** OpenBSD_Audio_Kill **********************
> -+ * Close /dev/audio.
> -+ *
> -+ *****/
> -+void OpenBSD_Audio_Kill()
> -+{ 
> -+  /* TURN AUDIO OFF */
> -+  OpenBSD_Audio_Off(0);
> -+  xa_audio_present = XA_AUDIO_UNK;
> -+  /* SHUT THINGS DOWN  */
> -+  close(devAudio);
> -+  Kill_Audio_Ring();
> -+}
> -+
> -+/********** OpenBSD_Audio_Off **********************
> -+ * Stop Audio Stream
> -+ *
> -+ *****/
> -+void OpenBSD_Audio_Off(flag)
> -+xaULONG flag;
> -+{ /* long ret; */
> -+
> -+  DEBUG_LEVEL1 fprintf(stderr,"OpenBSD_Audio_Off\n");
> -+  if (xa_audio_status != XA_AUDIO_STARTED) return;
> -+
> -+  /* SET FLAG TO STOP OUTPUT ROUTINE */
> -+  xa_audio_status = XA_AUDIO_STOPPED;
> -+
> -+  /* TURN OFF SOUND ??? */
> -+  OpenBSD_Adjust_Volume(XA_AUDIO_MINVOL);
> -+
> -+  /* FLUSH AUDIO DEVICE */ /* NOT! */
> -+/*
> -+  ret = ioctl(devAudio, AUDIO_FLUSH, NULL);
> -+  if (ret == -1) fprintf(stderr,"OpenBSD Audio: off flush err %d\n",errno);
> -+*/
> -+
> -+  xa_time_audio = -1;
> -+  xa_audio_flushed = 0;
> -+
> -+  /* FLUSH AUDIO DEVICE AGAIN */ /* NOT! */
> -+/*
> -+  ret = ioctl(devAudio, AUDIO_FLUSH, NULL);
> -+  if (ret == -1) fprintf(stderr,"OpenBSD Audio: off flush err %d\n",errno);
> -+*/
> -+
> -+  /* RESTORE ORIGINAL VOLUME */
> -+  if (XAAUD->mute != xaTRUE) OpenBSD_Adjust_Volume(XAAUD->volume);
> -+}
> -+
> -+/********** OpenBSD_Audio_Prep **********************
> -+ * Turn On Audio Stream.
> -+ *
> -+ *****/
> -+void OpenBSD_Audio_Prep()
> -+{
> -+  DEBUG_LEVEL2 
> -+  {
> -+    fprintf(stderr,"OpenBSD_Audio_Prep \n");
> -+  }
> -+  if (xa_audio_status == XA_AUDIO_STARTED) return;
> -+  else if (xa_audio_present != XA_AUDIO_OK) return;
> -+
> -+  else if (xa_snd_cur)
> -+  { int ret;
> -+
> -+    /* CHANGE FREQUENCY IF NEEDED */
> -+    if (xa_audio_hard_freq != xa_snd_cur->hfreq)
> -+    { audio_info_t a_info;
> -+      AUDIO_INITINFO(&a_info); 
> -+      a_info.play.sample_rate = xa_snd_cur->hfreq;
> -+      ret = ioctl(devAudio, AUDIO_SETINFO, &a_info);
> -+      if (ret == -1) fprintf(stderr,"audio setfreq: freq %x errno %d\n",
> -+                                            xa_snd_cur->hfreq, errno);
> -+      xa_audio_hard_freq = xa_snd_cur->hfreq;
> -+    }
> -+
> -+    /* xa_snd_cur gets changes in Update_Ring() */
> -+    xa_out_time = 100;  /* keep audio fed 500ms ahead of video */  /* was 
> 500, changed it to 100 - rcd */
> -+    xa_out_init = xa_audio_ring_size - 1;
> -+    xa_interval_time = xa_snd_cur->ch_time / XAAUD->divtest;
> -+    if (xa_interval_time == 0) xa_interval_time = 1;
> -+
> -+    XA_Flush_Ring();
> -+    XA_Update_Ring(1000);
> -+    xa_audio_status = XA_AUDIO_PREPPED;
> -+  }
> -+}
> -+
> -+/****-------------------------------------------------------------------****
> -+ *
> -+ 
> ****-------------------------------------------------------------------****/
> -+void OpenBSD_Audio_On()
> -+{
> -+  if (   (xa_snd_cur)
> -+      && (xa_audio_present == XA_AUDIO_OK)
> -+      && (xa_audio_status == XA_AUDIO_PREPPED) )
> -+  { 
> -+    xa_audio_status = XA_AUDIO_STARTED;
> -+    xa_time_now = XA_Read_AV_Time();  /* get new time */
> -+    New_Merged_Audio_Output();
> -+  }
> -+}
> -+
> -+
> -+/********** OpenBSD_Closest_Freq 
> **********************************************
> -+ *
> -+ * Global Variable Affect:
> -+ *   xaULONG xa_audio_hard_buff             must set but not larger than
> -+ *                                  XA_AUDIO_MAX_RING_BUF size
> -+ 
> ****************************************************************************/
> -+xaULONG OpenBSD_Closest_Freq(ifreq)
> -+xaLONG ifreq;
> -+{ 
> -+static int cache_ifreq =0, cache_ofreq = 0;
> -+  if (cache_ifreq == ifreq || cache_ofreq == ifreq)
> -+    return cache_ofreq;
> -+  else
> -+    { audio_info_t a_info;
> -+
> -+    AUDIO_INITINFO(&a_info);
> -+    a_info.play.sample_rate = ifreq;
> -+    ioctl(devAudio, AUDIO_SETINFO, &a_info);
> -+
> -+    ioctl(devAudio, AUDIO_GETINFO, &a_info);
> -+
> -+    xa_audio_hard_buff  = a_info.blocksize;
> -+    cache_ifreq = ifreq;
> -+    cache_ofreq = a_info.play.sample_rate;
> -+    return (a_info.play.sample_rate);
> -+    }
> -+}
> -+
> -+
> -+/* Eventually merge everything to one */
> -+void OpenBSD_Set_Output_Port(aud_ports)
> -+xaULONG aud_ports;
> -+{
> -+/* Commented out for now ;-) */
> -+/*
> -+audio_info_t a_info;
> -+  xaLONG ret;
> -+  xaULONG OpenBSD_ports = 0;
> -+  if (aud_ports & XA_AUDIO_PORT_INT)  OpenBSD_ports |= AUDIO_SPEAKER;
> -+  if (aud_ports & XA_AUDIO_PORT_HEAD) OpenBSD_ports |= AUDIO_HEADPHONE;
> -+  if (aud_ports & XA_AUDIO_PORT_EXT)  OpenBSD_ports |= AUDIO_LINE_OUT;
> -+  AUDIO_INITINFO(&a_info);
> -+  a_info.play.port = OpenBSD_ports;
> -+  ret = ioctl(devAudio, AUDIO_SETINFO, &a_info);
> -+  if (ret < 0) fprintf(stderr,"Audio: couldn't set speaker port 
> %d\n",errno);
> -+*/
> -+}
> -+
> -+/************* OpenBSD_Speaker_Toggle 
> *****************************************
> -+ *
> -+ * flag = 0  turn speaker off
> -+ * flag = 1  turn speaker on
> -+ * flag = 2  toggle speaker
> -+ 
> ****************************************************************************/
> -+void OpenBSD_Speaker_Toggle(flag)
> -+xaULONG flag;
> -+{ 
> -+  switch(flag)
> -+  {
> -+    case  0: XAAUD->port &= ~XA_AUDIO_PORT_INT; break;
> -+    case  1: XAAUD->port |=  XA_AUDIO_PORT_INT; break;
> -+    default:  /* mutually exclusive set for now - never turn off */
> -+    { if ( !(XAAUD->port & XA_AUDIO_PORT_INT)) 
> -+            XAAUD->port = XA_AUDIO_PORT_INT;
> -+    }
> -+  }
> -+  OpenBSD_Set_Output_Port(XAAUD->port);
> -+}
> -+
> -+/************* OpenBSD_Headphone_Toggle 
> *****************************************
> -+ *
> -+ * flag = 0  turn headphones off
> -+ * flag = 1  turn headphones on
> -+ * flag = 2  toggle headphones
> -+ 
> ****************************************************************************/
> -+void OpenBSD_Headphone_Toggle(flag)
> -+xaULONG flag;
> -+{ 
> -+  switch(flag)
> -+  {
> -+    case  0: XAAUD->port &= ~XA_AUDIO_PORT_HEAD; break;
> -+    case  1: XAAUD->port |=  XA_AUDIO_PORT_HEAD; break;
> -+    default:  /* mutually exclusive set for now - never turn off */
> -+    { if ( !(XAAUD->port & XA_AUDIO_PORT_HEAD)) 
> -+            XAAUD->port = XA_AUDIO_PORT_HEAD;
> -+    }
> -+  }
> -+  OpenBSD_Set_Output_Port(XAAUD->port);
> -+}
> -+
> -+
> -+/********** OpenBSD_Adjust_Volume **********************
> -+ * Routine for Adjusting Volume on OpenBSD
> -+ *
> -+ * Volume is in the range [0,XA_AUDIO_MAXVOL]
> -+ 
> ****************************************************************************/
> -+void OpenBSD_Adjust_Volume(volume)
> -+xaULONG volume;
> -+{ audio_info_t a_info;
> -+
> -+  AUDIO_INITINFO(&a_info);
> -+  a_info.play.gain = OpenBSD_MIN_VOL +
> -+    ((volume * (OpenBSD_MAX_VOL - OpenBSD_MIN_VOL)) / XA_AUDIO_MAXVOL);
> -+  if (a_info.play.gain > OpenBSD_MAX_VOL) a_info.play.gain = 
> OpenBSD_MAX_VOL;
> -+  ioctl(devAudio, AUDIO_SETINFO, &a_info);
> -+
> -+}
> -+#endif
> -+/****************************************************************************/
> -+/******************* END OF OpenBSD SPECIFIC ROUTINES 
> ************************/
> -+/****************************************************************************/
> -+
> -  
> /****************************************************************************/
> - /**************** TOWNS SPECIFIC ROUTINES 
> ***********************************/
> - 
> /****************************************************************************/
> -@@ -5828,29 +6225,15 @@
> - 
> - /*---------------- Now for the Write Segments 
> -------------------------------*/
> - 
> --#ifdef XA_SPARC_AUDIO
> -+#ifdef XA_NORMAL_AUDIO_WRITES
> -       write(devAudio,xa_audio_ring->buf,xa_audio_ring->len); 
> - #endif
> - 
> --#ifdef XA_NetBSD_AUDIO
> --      write(devAudio,xa_audio_ring->buf,xa_audio_ring->len);
> --#endif
> --
> --#ifdef XA_AIX_AUDIO
> --      { int rc;
> --        rc = write ( devAudio, xa_audio_ring->buf, xa_audio_ring->len );
> --      }
> --#endif
> --
> - #ifdef XA_SGI_AUDIO
> -       /* # of Samples, not Bytes. Note: assume 16 bit samples. */
> -       ALwritesamps(port,xa_audio_ring->buf, (xa_audio_ring->len >> 1) );
> - #endif
> - 
> --#ifdef XA_LINUX_AUDIO
> --      write(devAudio,xa_audio_ring->buf,xa_audio_ring->len);
> --#endif
> --
> - #ifdef XA_NAS_AUDIO
> -       NAS_Write_Data(xa_audio_ring->buf, xa_audio_ring->len);
> - #endif
> -@@ -5864,10 +6247,6 @@
> -       }
> - #endif
> - 
> --#ifdef XA_EWS_AUDIO
> --      write(devAudio,xa_audio_ring->buf,xa_audio_ring->len);
> --#endif
> --
> - #ifdef XA_AF_AUDIO
> -       { ATime act, atd = AFtime0;
> -     if (XAAUD->mute != xaTRUE)
> -@@ -5883,10 +6262,6 @@
> - /* Some way to flush streamsocket???? */
> - #endif
> - 
> --#ifdef XA_HPDEV_AUDIO
> --      write (devAudio, xa_audio_ring->buf, xa_audio_ring->len);
> --#endif
> --
> - #ifdef XA_MMS_AUDIO
> -       /* As currently implemented, this copies the audio data into a 
> separate
> -          shared memory buffer for communication with the multimedia server. 
> We
> -@@ -5921,10 +6296,6 @@
> -       else { mms_buffers_outstanding++; }
> -     }
> -       }
> --#endif
> --
> --#ifdef XA_TOWNS_AUDIO
> --      write(devAudio,xa_audio_ring->buf,xa_audio_ring->len);
> - #endif
> - 
> - #ifdef XA_TOWNS8_AUDIO
> Index: patches/patch-c
> ===================================================================
> RCS file: patches/patch-c
> diff -N patches/patch-c
> --- patches/patch-c   19 Mar 1999 01:20:48 -0000      1.2
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,82 +0,0 @@
> ---- xanim.h.orig     Thu Mar 18 22:09:00 1999
> -+++ xanim.h  Thu Mar 18 22:29:48 1999
> -@@ -32,10 +32,12 @@
> - #else
> - #ifndef __CYGWIN32__
> - #ifndef __FreeBSD__
> -+#ifndef __OpenBSD__
> - #include <malloc.h>
> - #endif
> - #endif
> - #endif
> -+#endif
> - 
> - 
> - #include <unistd.h>
> -@@ -289,6 +291,7 @@
> -   xaULONG fromfile;
> -   xaULONG bufferit;
> -   double scale;
> -+  double amp_scale;
> -   char *device;
> - } XA_AUD_FLAGS;
> - 
> -@@ -298,30 +301,42 @@
> - 
> - #ifdef XA_SPARC_AUDIO
> - #define XA_AUDIO 1
> -+#define XA_NORMAL_AUDIO_WRITES 1
> - #endif
> - #ifdef XA_MMS_AUDIO
> - #define XA_AUDIO 1
> - #endif
> - #ifdef XA_AIX_AUDIO
> - #define XA_AUDIO 1
> -+#define XA_NORMAL_AUDIO_WRITES 1
> - #endif
> - #ifdef XA_NetBSD_AUDIO
> - #define XA_AUDIO 1
> -+#define XA_BSD_AUDIO 1
> -+#define XA_NORMAL_AUDIO_WRITES 1
> -+#endif
> -+#ifdef XA_OpenBSD_AUDIO
> -+#define XA_AUDIO 1
> -+#define XA_BSD_AUDIO 1
> -+#define XA_NORMAL_AUDIO_WRITES 1
> - #endif
> - #ifdef XA_LINUX_AUDIO
> - #define XA_AUDIO 1
> -+#define XA_NORMAL_AUDIO_WRITES 1
> - #endif
> - #ifdef XA_SGI_AUDIO
> - #define XA_AUDIO 1
> - #endif
> - #ifdef XA_HPDEV_AUDIO
> - #define XA_AUDIO 1
> -+#define XA_NORMAL_AUDIO_WRITES 1
> - #endif
> - #ifdef XA_HP_AUDIO
> - #define XA_AUDIO 1
> - #endif
> - #ifdef XA_EWS_AUDIO
> - #define XA_AUDIO 1
> -+#define XA_NORMAL_AUDIO_WRITES 1
> - #endif
> - #ifdef XA_SONY_AUDIO
> - #define XA_AUDIO 1
> -@@ -334,6 +349,7 @@
> - #endif
> - #ifdef XA_TOWNS_AUDIO
> - #define XA_AUDIO 1
> -+#define XA_NORMAL_AUDIO_WRITES 1
> - #endif
> - #ifdef XA_TOWNS8_AUDIO
> - #define XA_AUDIO 1
> -@@ -433,6 +449,7 @@
> -   xaUBYTE *snd;             /* sound if present */
> -   struct XA_SND_STRUCT *prev;
> -   struct XA_SND_STRUCT *next;
> -+  xaUBYTE volume_boost;
> - } XA_SND;
> - 
> - #define XA_SND_CHUNK_SIZE 65536
> Index: patches/patch-d
> ===================================================================
> RCS file: patches/patch-d
> diff -N patches/patch-d
> --- patches/patch-d   22 Mar 1999 17:34:45 -0000      1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,153 +0,0 @@
> ---- xa_acodec.c.orig Sun Mar 21 23:36:25 1999
> -+++ xa_acodec.c      Mon Mar 22 18:03:48 1999
> -@@ -198,7 +198,17 @@
> -   {
> -     if (inc_cnt < (1<<24))
> -     {       /*** Decode Sample ***/
> --      dataL = (spec & 4)?(ibuf[1]):(*ibuf); 
> -+       if (snd_hdr->volume_boost)
> -+                    {
> -+                    unsigned c = snd_hdr->volume_boost;
> -+                    unsigned d = 8 - c;
> -+                    if (spec & 4)
> -+                            dataL = (ibuf[1]<<c) | (ibuf[0]>>d);
> -+                    else
> -+                            dataL = (ibuf[0]<<c) | (ibuf[1]>>d);
> -+                    }
> -+            else
> -+                    dataL = (spec & 4)?(ibuf[1]):(*ibuf);   
> -       ibuf += bps;  byte_cnt += bps;        samp_cnt--;
> -       inc_cnt += inc;
> -     }
> -@@ -1884,6 +1894,19 @@
> -   new_snd->inc = inc = (xaULONG)( finc * (double)(1<<24) );
> -   new_snd->inc_cnt = 0;
> - 
> -+  if (vaudiof->amp_scale < 2.0)
> -+    new_snd->volume_boost = 0;
> -+  else if (vaudiof->amp_scale < 4.0)
> -+    new_snd->volume_boost = 1;
> -+  else if (vaudiof->amp_scale < 8.0)
> -+    new_snd->volume_boost = 2;
> -+  else if (vaudiof->amp_scale < 16.0)
> -+    new_snd->volume_boost = 3;
> -+  else if (vaudiof->amp_scale < 32.0)
> -+    new_snd->volume_boost = 4;
> -+  else 
> -+    new_snd->volume_boost = 5;
> -+
> -   /* Determine Chunk Time */
> -   ftime = ((double)(xa_vaudio_hard_buff) * 1000.0) / (double)(hfreq);
> -   new_snd->ch_time = (xaLONG)ftime;
> -@@ -2167,6 +2190,7 @@
> -       break;
> - 
> -     case XA_AUDIO_LINEAR_1M:
> -+    case XA_AUDIO_SIGNED_1M:
> -       {
> -     switch(itype)
> -     {
> -@@ -2183,7 +2207,8 @@
> -       case XA_AUDIO_LINEAR_2SL:
> -       case XA_AUDIO_LINEAR_2SB:
> -             new_snd->spec = 
> --                ((itype & XA_AUDIO_TYPE_MASK)==XA_AUDIO_LINEAR)?(0):(1);
> -+                ((itype & XA_AUDIO_TYPE_MASK)==
> -+                            (xa_audio_hard_type & 
> XA_AUDIO_TYPE_MASK))?(0):(1);
> -             if (itype & XA_AUDIO_BPS_2_MSK)
> -               new_snd->spec |= (itype & XA_AUDIO_BIGEND_MSK)?(2):(4);
> -             if (itype & XA_AUDIO_STEREO_MSK)
> -@@ -2195,12 +2220,16 @@
> -             if (xa_audio_hard_type & XA_AUDIO_BIGEND_MSK)
> -                     new_snd->spec = 0 | 4 | 8;
> -             else    new_snd->spec = 1 | 4 | 8;
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             new_snd->delta = XA_ADecode_ULAWx_PCMxM;
> -             break;
> -       case XA_AUDIO_ULAW:
> -             if (xa_audio_hard_type & XA_AUDIO_BIGEND_MSK)
> -                     new_snd->spec = 0 | 4;
> -             else    new_snd->spec = 1 | 4;
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             new_snd->delta = XA_ADecode_ULAWx_PCMxM;
> -             break;
> -       case XA_AUDIO_ALAWS:
> -@@ -2218,6 +2247,8 @@
> -       case XA_AUDIO_ARMLAWS:
> -             if (xa_audio_hard_type & XA_AUDIO_BIGEND_MSK)
> -                     new_snd->spec = 0 | 4 | 8;
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             else    new_snd->spec = 1 | 4 | 8;
> -             new_snd->delta = XA_ADecode_ARMLAWx_PCMxM;
> -             break;
> -@@ -2226,41 +2257,59 @@
> -                     new_snd->spec = 0 | 4;
> -             else    new_snd->spec = 1 | 4;
> -             new_snd->delta = XA_ADecode_ARMLAWx_PCMxM;
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             break;
> -       case XA_AUDIO_ADPCM_M:
> --            new_snd->spec = 2 | 4;  /* 1 byte output */
> -+            new_snd->spec = 4;  /* 1 byte output */
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             new_snd->delta = XA_ADecode_ADPCMM_PCM2M;
> -             break;
> -       case XA_AUDIO_ADPCM_S:
> --            new_snd->spec = 2 | 4;  /* 1 byte output */
> -+            new_snd->spec = 4;  /* 1 byte output */
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             new_snd->delta = XA_ADecode_ADPCMS_PCM2M;
> -             break;
> -       case XA_AUDIO_DVI_M:
> --            new_snd->spec = 2 | 4;  /* 1 byte output */
> -+            new_snd->spec = 4;  /* 1 byte output */
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             new_snd->delta = XA_ADecode_DVIM_PCMxM;
> -             break;
> -       case XA_AUDIO_DVI_S:
> --            new_snd->spec = 2 | 4;  /* 1 byte output */
> -+            new_snd->spec = 4;  /* 1 byte output */
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             new_snd->delta = XA_ADecode_DVIS_PCMxM;
> -             break;
> -       case XA_AUDIO_IMA4_M:
> --            new_snd->spec = 2 | 4;  /* 1 byte output */
> -+            new_snd->spec = 4;  /* 1 byte output */
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             new_snd->delta = XA_ADecode_IMA4M_PCMxM;
> -             break;
> -       case XA_AUDIO_IMA4_S:
> --            new_snd->spec = 2 | 4;  /* 1 byte output */
> -+            new_snd->spec = 4;  /* 1 byte output */
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             new_snd->delta = XA_ADecode_IMA4S_PCMxM;
> -             break;
> - #ifdef XA_GSM
> -       case XA_AUDIO_GSM:
> -       case XA_AUDIO_MSGSM:
> --            new_snd->spec = 2 | 4;  /* 1 byte output */
> -+            new_snd->spec = 4;  /* 1 byte output */
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             if (itype == XA_AUDIO_MSGSM_M) new_snd->spec |= 0x80;
> -             new_snd->delta = XA_ADecode_GSMM_PCMxM;
> -             break;
> - #endif
> -       case XA_AUDIO_NOP:
> --            new_snd->spec = 2 | 4;  /* 1 byte output */
> -+            new_snd->spec = 4;  /* 1 byte output */
> -+            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> -+                    new_snd->spec |= 2;
> -             new_snd->delta = XA_ADecode_NOP_PCMXM;
> -             break;
> -       default:
> Index: patches/patch-e
> ===================================================================
> RCS file: patches/patch-e
> diff -N patches/patch-e
> --- patches/patch-e   19 Mar 1999 01:20:48 -0000      1.2
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,28 +0,0 @@
> ---- xanim.c.orig     Thu Mar 18 22:11:25 1999
> -+++ xanim.c  Thu Mar 18 22:12:52 1999
> -@@ -628,6 +628,7 @@
> -  fprintf(stdout,"      Ak    Enables video frame skipping to keep in sync 
> with audio.\n");
> -  fprintf(stdout,"      Ap#   Play Audio from output port #(Sparc only).\n");
> - /* fprintf(stdout,"      As#   Scale Audio playback speed by #.\n"); */
> -+ fprintf(stdout,"      AS#   Scale Audio playback amplitude by #.\n");
> -  fprintf(stdout,"      Av#   Set Audio volume to #. range 0 to 100.\n");
> -  fprintf(stdout,"\n  C[copts]  Color SubMenu\n");
> -  fprintf(stdout,"      C1    Create cmap from 1st TrueColor frame. Map\n");
> -@@ -861,6 +862,7 @@
> - 
> -  vaudiof->device            = DEFAULT_AUDIO_DEVICE_NAME;
> -  vaudiof->scale             = 1.0;
> -+ vaudiof->amp_scale = 0.0;
> -  vaudiof->mute              = xaFALSE;
> -  vaudiof->volume            = DEFAULT_XA_AUDIO_VOLUME;
> -  if (vaudiof->volume > XA_AUDIO_MAXVOL) vaudiof->volume = XA_AUDIO_MAXVOL;
> -@@ -1168,6 +1170,9 @@
> -             fprintf(stdout,"XAnim: +As# temporarily disabled.\n");
> -             if (vaudiof->scale < 0.125) vaudiof->scale = 0.125;
> -             if (vaudiof->scale > 8.000) vaudiof->scale = 8.000;
> -+            break;
> -+          case 'S':   /* snd amplitude */
> -+            j++; vaudiof->amp_scale = XA_Read_Float(in, &j);
> -             break;
> -           case 'v':
> -             j++; vaudiof->volume = XA_Read_Int(in,&j);
> Index: patches/patch-f
> ===================================================================
> RCS file: patches/patch-f
> diff -N patches/patch-f
> --- patches/patch-f   4 Mar 2000 19:00:07 -0000       1.5
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,115 +0,0 @@
> ---- Imakefile.orig   Sun Mar 21 23:36:26 1999
> -+++ Imakefile        Mon Mar 22 18:13:13 1999
> -@@ -96,7 +96,7 @@
> - XCOMM   to link against symbols inside xanim.
> - XCOMM 
> - XCOMM ## Linux
> --LD_FLAGS = -rdynamic
> -+XCOMM LD_FLAGS = -rdynamic
> - XCOMM ## SunOS/Solaris use:
> - XCOMM  LD_FLAGS =
> - 
> -@@ -111,17 +111,17 @@
> - XCOMM NOTE: not all machines need the XA_DLL_LIB define.
> - XCOMM 
> #########################################################################
> - XCOMM 
> --XA_DLL_DEF = -DXA_DLL -DXA_PRINT
> -+XCOMM XA_DLL_DEF = -DXA_DLL -DXA_PRINT
> - XCOMM ### Use this only if the above doesn't work
> - XCOMM XA_DLL_DEF = -DXA_DLL
> - XCOMM
> - XCOMM ### You may need this library.
> --XA_DLL_LIB = -ldl
> -+XCOMM XA_DLL_LIB = -ldl
> - XCOMM
> - XCOMM If you'd like to change the default directory that XAnim searches 
> while
> - XCOMM looking for dlls, then change the directory below.
> - XCOMM
> --XA_DLL_PATH = /usr/local/xanim/mods
> -+XCOMM XA_DLL_PATH = /usr/local/xanim/mods
> - 
> - 
> - 
> -@@ -267,8 +267,8 @@
> - XCOMM  XA_AUDIO_DEFS =
> - XCOMM 
> - XCOMM ## -- Linux PCs 
> ---------------------------------------------------------
> --XA_AUDIO_DEFS = -DXA_LINUX_AUDIO
> --XA_AUDIO_LIBS = -lc
> -+XCOMM XA_AUDIO_DEFS = -DXA_LINUX_AUDIO
> -+XCOMM XA_AUDIO_LIBS = -lc
> - XCOMM 
> - XCOMM  -- Linux PC's with OLD Rev sound drivers 
> -------------------------------
> - XCOMM  XA_AUDIO_DEFS = -DXA_LINUX_AUDIO -DXA_LINUX_OLDER_SND
> -@@ -309,6 +309,9 @@
> - XCOMM  -- NetBSD-current (as of 30/April 
> 1995)---------------------------------
> - XCOMM  XA_AUDIO_DEFS = -DXA_NetBSD_AUDIO
> - XCOMM 
> -+XCOMM  -- OpenBSD, from at least 2.4 to now
> -+XA_AUDIO_DEFS = -DXA_OpenBSD_AUDIO
> -+XCOMM 
> - XCOMM  -- QNX 4.2 PC's 
> --------------------------------------------------------
> - XCOMM  XA_AUDIO_DEFS = -DXA_LINUX_AUDIO -DXA_SELECT
> - XCOMM  XA_AUDIO_LIBS = -lc
> -@@ -442,7 +445,7 @@
> - XCOMM    -- following symbols(XmbufDisplayBuffers, XmbufQueryExtension,
> - XCOMM    --  XmbufCreateBuffers).
> - XCOMM    -- NOTE_8: HP-UX machines need to comment this out.
> --XCOMM  XA_MULTIBUF = -DXMBUF
> -+XA_MULTIBUF = -DXMBUF
> - XCOMM 
> - XCOMM ###########
> - XCOMM 
> -@@ -465,7 +468,7 @@
> - 
> - PROGRAMS = $(XANIM)
> - 
> --INCLUDES = -I$(INCDIR) $(XA_INCS)
> -+INCLUDES = -I/usr/X11R6/include/X11 $(XA_INCS)
> - 
> -    LIBS1 = $(XA_LIBS) $(EXTENSIONLIB) $(XTOOLLIB) $(XLIB) -lm
> - DEPLIBS1 = $(DEPEXTENSIONLIB) $(DEPXTOOLLIB) $(DEPXLIB)
> -@@ -504,43 +507,3 @@
> - xaclean::
> -     $(RM) $(OBJS1)
> - 
> --
> --XCOMM  DO NOT DELETE THIS LINE
> --xanim.o: Imakefile xanim.h xa_config.h xa_x11.h xanim.c
> --xa1.0_kpcd.o: xa1.0_kpcd.c
> --unpacker.o: unpacker.c
> --xa_acodec.o: Imakefile xanim.h xa_acodec.c
> --xa_act.o: xanim.h xa_config.h xa_act.c
> --xa_au.o: xanim.h xa_config.h xa_au.c
> --xa_audio.o: Imakefile xanim.h xa_config.h xa_audio.h xa_audio.c
> --xa_avi.o: Imakefile xanim.h xa_config.h xa_avi.h xa_codecs.h xa_xmpg.h 
> xa_avi.c
> --xa_cmap.o: xanim.h xa_config.h xa_cmap.c
> --xa_color.o: xanim.h xa_color.c
> --xa_dl.o: xanim.h xa_config.h xa_dl.h xa_dl.c
> --xa_dumfx.o: xanim.h xa_dumfx.c
> --xa_fli.o: xanim.h xa_config.h xa_fli.h xa_fli.c
> --xa_formats.o: xanim.h xa_formats.c
> --xa_gif.o: xanim.h xa_config.h xa_gif.h xa_gif.c
> --xa_iff.o: xanim.h xa_config.h xa_iff.h xa_iff.c
> --xa_input.o: xanim.h xa_input.c
> --xa_ipc.o: Imakefile xanim.h xa_config.h xa_ipc.h xa_ipc.c
> --xa_jmov.o: xanim.h xa_config.h xa_jmov.h xa_jmov.c
> --xa_jpg.o: xanim.h xa_config.h xa_jpg.h xa_jpg.c
> --xa_j6i.o: xanim.h xa_j6i.h xa_j6i.c
> --xa_movi.o: xanim.h xa_config.h xa_movi.h xa_movi.c
> --xa_mpg.o: xanim.h xa_config.h xa_mpg.h xa_xmpg.h xa_mpg.c xa_jpg.c
> --xa_qt.o: Imakefile xanim.h xa_config.h xa_qt.h xa_codecs.h xa_qt.c
> --xa_qt_decs.o: Imakefile xanim.h xa_config.h xa_qt.h xa_qt_decs.c
> --xa_vid_codec.o: Imakefile xa_avi.h xa_qt.h xa_codecs.h xavid.h xavid_mod.h
> --xa_vid_codec.o: xa_vid_codec.c
> --xa_replay.o: xanim.h xa_config.h xa_replay.h xa_replay.c
> --xa_rle.o: xanim.h xa_config.h xa_rle.h xa_rle.c
> --xa_set.o: xanim.h xa_config.h xa_iff.h xa_iff.c xa_set.h xa_set.c
> --xa_raw.o: xanim.h xa_raw.h xa_raw.c
> --xa_show.o: Imakefile xanim.h xa_show.c
> --xa_txt.o: xanim.h xa_config.h xa_txt.c
> --xa_utils.o: xanim.h xa_config.h xa_utils.c
> --xa_wav.o: xanim.h xa_config.h xa_avi.h xa_wav.c
> --xa_8svx.o: xanim.h xa_8svx.h xa_8svx.c
> --xa_x11.o: Imakefile xanim.h xa_config.h xa_x11.h xa_x11.c
> --xa_gsm.o: xanim.h xa_gsm_state.h xa_gsm.h xa_gsm.c
> Index: patches/patch-xa_acodec_c
> ===================================================================
> RCS file: patches/patch-xa_acodec_c
> diff -N patches/patch-xa_acodec_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-xa_acodec_c 26 Jun 2015 15:37:46 -0000
> @@ -0,0 +1,154 @@
> +$OpenBSD$
> +--- xa_acodec.c.orig Sun Mar 21 23:36:25 1999
> ++++ xa_acodec.c      Fri Jun 26 12:27:44 2015
> +@@ -198,7 +198,17 @@ xaULONG ocnt,buff_size;
> +   {
> +     if (inc_cnt < (1<<24))
> +     {       /*** Decode Sample ***/
> +-      dataL = (spec & 4)?(ibuf[1]):(*ibuf); 
> ++       if (snd_hdr->volume_boost)
> ++                    {
> ++                    unsigned c = snd_hdr->volume_boost;
> ++                    unsigned d = 8 - c;
> ++                    if (spec & 4)
> ++                            dataL = (ibuf[1]<<c) | (ibuf[0]>>d);
> ++                    else
> ++                            dataL = (ibuf[0]<<c) | (ibuf[1]>>d);
> ++                    }
> ++            else
> ++                    dataL = (spec & 4)?(ibuf[1]):(*ibuf);   
> +       ibuf += bps;  byte_cnt += bps;        samp_cnt--;
> +       inc_cnt += inc;
> +     }
> +@@ -1884,6 +1894,19 @@ DEBUG_LEVEL1
> +   new_snd->inc = inc = (xaULONG)( finc * (double)(1<<24) );
> +   new_snd->inc_cnt = 0;
> + 
> ++  if (vaudiof->amp_scale < 2.0)
> ++    new_snd->volume_boost = 0;
> ++  else if (vaudiof->amp_scale < 4.0)
> ++    new_snd->volume_boost = 1;
> ++  else if (vaudiof->amp_scale < 8.0)
> ++    new_snd->volume_boost = 2;
> ++  else if (vaudiof->amp_scale < 16.0)
> ++    new_snd->volume_boost = 3;
> ++  else if (vaudiof->amp_scale < 32.0)
> ++    new_snd->volume_boost = 4;
> ++  else 
> ++    new_snd->volume_boost = 5;
> ++
> +   /* Determine Chunk Time */
> +   ftime = ((double)(xa_vaudio_hard_buff) * 1000.0) / (double)(hfreq);
> +   new_snd->ch_time = (xaLONG)ftime;
> +@@ -2167,6 +2190,7 @@ fprintf(stderr,"XA_IPC_Sound itype %x\n",itype);
> +       break;
> + 
> +     case XA_AUDIO_LINEAR_1M:
> ++    case XA_AUDIO_SIGNED_1M:
> +       {
> +     switch(itype)
> +     {
> +@@ -2183,7 +2207,8 @@ fprintf(stderr,"XA_IPC_Sound itype %x\n",itype);
> +       case XA_AUDIO_LINEAR_2SL:
> +       case XA_AUDIO_LINEAR_2SB:
> +             new_snd->spec = 
> +-                ((itype & XA_AUDIO_TYPE_MASK)==XA_AUDIO_LINEAR)?(0):(1);
> ++                ((itype & XA_AUDIO_TYPE_MASK)==
> ++                            (xa_audio_hard_type & 
> XA_AUDIO_TYPE_MASK))?(0):(1);
> +             if (itype & XA_AUDIO_BPS_2_MSK)
> +               new_snd->spec |= (itype & XA_AUDIO_BIGEND_MSK)?(2):(4);
> +             if (itype & XA_AUDIO_STEREO_MSK)
> +@@ -2195,12 +2220,16 @@ fprintf(stderr,"XA_IPC_Sound itype %x\n",itype);
> +             if (xa_audio_hard_type & XA_AUDIO_BIGEND_MSK)
> +                     new_snd->spec = 0 | 4 | 8;
> +             else    new_snd->spec = 1 | 4 | 8;
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             new_snd->delta = XA_ADecode_ULAWx_PCMxM;
> +             break;
> +       case XA_AUDIO_ULAW:
> +             if (xa_audio_hard_type & XA_AUDIO_BIGEND_MSK)
> +                     new_snd->spec = 0 | 4;
> +             else    new_snd->spec = 1 | 4;
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             new_snd->delta = XA_ADecode_ULAWx_PCMxM;
> +             break;
> +       case XA_AUDIO_ALAWS:
> +@@ -2218,6 +2247,8 @@ fprintf(stderr,"XA_IPC_Sound itype %x\n",itype);
> +       case XA_AUDIO_ARMLAWS:
> +             if (xa_audio_hard_type & XA_AUDIO_BIGEND_MSK)
> +                     new_snd->spec = 0 | 4 | 8;
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             else    new_snd->spec = 1 | 4 | 8;
> +             new_snd->delta = XA_ADecode_ARMLAWx_PCMxM;
> +             break;
> +@@ -2226,41 +2257,59 @@ fprintf(stderr,"XA_IPC_Sound itype %x\n",itype);
> +                     new_snd->spec = 0 | 4;
> +             else    new_snd->spec = 1 | 4;
> +             new_snd->delta = XA_ADecode_ARMLAWx_PCMxM;
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             break;
> +       case XA_AUDIO_ADPCM_M:
> +-            new_snd->spec = 2 | 4;  /* 1 byte output */
> ++            new_snd->spec = 4;  /* 1 byte output */
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             new_snd->delta = XA_ADecode_ADPCMM_PCM2M;
> +             break;
> +       case XA_AUDIO_ADPCM_S:
> +-            new_snd->spec = 2 | 4;  /* 1 byte output */
> ++            new_snd->spec = 4;  /* 1 byte output */
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             new_snd->delta = XA_ADecode_ADPCMS_PCM2M;
> +             break;
> +       case XA_AUDIO_DVI_M:
> +-            new_snd->spec = 2 | 4;  /* 1 byte output */
> ++            new_snd->spec = 4;  /* 1 byte output */
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             new_snd->delta = XA_ADecode_DVIM_PCMxM;
> +             break;
> +       case XA_AUDIO_DVI_S:
> +-            new_snd->spec = 2 | 4;  /* 1 byte output */
> ++            new_snd->spec = 4;  /* 1 byte output */
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             new_snd->delta = XA_ADecode_DVIS_PCMxM;
> +             break;
> +       case XA_AUDIO_IMA4_M:
> +-            new_snd->spec = 2 | 4;  /* 1 byte output */
> ++            new_snd->spec = 4;  /* 1 byte output */
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             new_snd->delta = XA_ADecode_IMA4M_PCMxM;
> +             break;
> +       case XA_AUDIO_IMA4_S:
> +-            new_snd->spec = 2 | 4;  /* 1 byte output */
> ++            new_snd->spec = 4;  /* 1 byte output */
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             new_snd->delta = XA_ADecode_IMA4S_PCMxM;
> +             break;
> + #ifdef XA_GSM
> +       case XA_AUDIO_GSM:
> +       case XA_AUDIO_MSGSM:
> +-            new_snd->spec = 2 | 4;  /* 1 byte output */
> ++            new_snd->spec = 4;  /* 1 byte output */
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             if (itype == XA_AUDIO_MSGSM_M) new_snd->spec |= 0x80;
> +             new_snd->delta = XA_ADecode_GSMM_PCMxM;
> +             break;
> + #endif
> +       case XA_AUDIO_NOP:
> +-            new_snd->spec = 2 | 4;  /* 1 byte output */
> ++            new_snd->spec = 4;  /* 1 byte output */
> ++            if (xa_audio_hard_type == XA_AUDIO_LINEAR_1M)
> ++                    new_snd->spec |= 2;
> +             new_snd->delta = XA_ADecode_NOP_PCMXM;
> +             break;
> +       default:
> Index: patches/patch-xa_audio_c
> ===================================================================
> RCS file: patches/patch-xa_audio_c
> diff -N patches/patch-xa_audio_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-xa_audio_c  26 Jun 2015 15:37:46 -0000
> @@ -0,0 +1,372 @@
> +$OpenBSD$
> +--- xa_audio.c.orig  Sun Mar 21 23:36:25 1999
> ++++ xa_audio.c       Fri Jun 26 13:03:03 2015
> +@@ -114,6 +114,7 @@
> +  * 21Feb99 - Added routine *_Audio_Prep  to hide initialization delays
> +  *       when starting audio.
> +  * 02Mar99 - Linux: Change XA_LINUX_NEWER_SND TO OLDER_SND to avoid 
> confusion.
> ++ * 18Mar99 - OpenBSD: newer configuration, solves a few problems.
> +  *
> +  
> ****************************************************************************/
> + 
> +@@ -4936,6 +4937,294 @@ xaULONG volume;
> + /******************* END OF NetBSD SPECIFIC ROUTINES 
> ************************/
> + 
> /****************************************************************************/
> + 
> ++/****************************************************************************/
> ++/**************** OpenBSD SPECIFIC ROUTINES 
> *********************************/
> ++/****************************************************************************/
> ++
> ++/*
> ++ * Based on the NetBSD port initially, 
> ++ * contributed by Marc Espie <[email protected]>
> ++ * This code may actually work on NetBSD, but this is not my place to
> ++ * change this.
> ++ *
> ++ * This code tries not to abuse AUDIO_SETINFO, as this can be an expensive
> ++ * ioctl on some arches. Also, it is able to deal with weirder audio
> ++ * devices, such as those found on amiga or sparcs.
> ++ */
> ++
> ++#ifdef XA_OpenBSD_AUDIO
> ++
> ++void  OpenBSD_Audio_Init();
> ++void  OpenBSD_Audio_Kill();
> ++void  OpenBSD_Audio_Off();
> ++void  OpenBSD_Audio_Prep();
> ++void  OpenBSD_Audio_On();
> ++void  OpenBSD_Adjust_Volume();
> ++xaULONG OpenBSD_Closest_Freq();
> ++void OpenBSD_Set_Output_Port();
> ++void OpenBSD_Speaker_Toggle();
> ++void OpenBSD_Headphone_Toggle();
> ++
> ++#define OpenBSD_MAX_VOL AUDIO_MAX_GAIN
> ++#define OpenBSD_MIN_VOL AUDIO_MIN_GAIN
> ++
> ++static int devAudio;
> ++
> ++/********** XA_Audio_Setup **********************
> ++ * 
> ++ * Also defines OpenBSD Specific variables.
> ++ *
> ++ *****/
> ++void XA_Audio_Setup()
> ++{
> ++  XA_Audio_Init             = OpenBSD_Audio_Init;
> ++  XA_Audio_Kill             = OpenBSD_Audio_Kill;
> ++  XA_Audio_Off              = OpenBSD_Audio_Off;
> ++  XA_Audio_Prep             = OpenBSD_Audio_Prep;
> ++  XA_Audio_On               = OpenBSD_Audio_On;
> ++  XA_Closest_Freq   = OpenBSD_Closest_Freq;
> ++  XA_Set_Output_Port        = OpenBSD_Set_Output_Port;
> ++  XA_Speaker_Tog    = OpenBSD_Speaker_Toggle;
> ++  XA_Headphone_Tog  = OpenBSD_Headphone_Toggle;
> ++  XA_LineOut_Tog    = OpenBSD_Headphone_Toggle;
> ++  XA_Adjust_Volume  = OpenBSD_Adjust_Volume;
> ++
> ++  xa_snd_cur = 0;
> ++  xa_audio_present = XA_AUDIO_UNK;
> ++  xa_audio_status  = XA_AUDIO_STOPPED;
> ++  xa_audio_ring_size  = 8;
> ++}
> ++
> ++/********** OpenBSD_Audio_Init **********************
> ++ * Open /dev/audio and OpenBSD.
> ++ *
> ++ *****/
> ++
> ++static struct sio_hdl *hdl = NULL;
> ++
> ++void OpenBSD_Audio_Init()
> ++{
> ++  struct sio_par par;
> ++
> ++  if (xa_audio_present != XA_AUDIO_UNK) return;
> ++  hdl = sio_open(SIO_DEVANY, SIO_PLAY, 0);
> ++  if (hdl == NULL)
> ++  {
> ++    fprintf(stderr,"Audio_Init: Error opening audio device. - ");
> ++    fprintf(stderr,"Will continue without audio\n");
> ++    xa_audio_present = XA_AUDIO_ERR;
> ++    return;
> ++  }
> ++
> ++  DEBUG_LEVEL1 fprintf(stderr,"OpenBSD AUDIO\n");
> ++
> ++  sio_initpar(&par);
> ++  par.appbufsz = 1024;
> ++  par.rate = 11025;   /* this is changed later */
> ++  par.pchan = 1;
> ++  par.bits = 16;
> ++  par.le = SIO_LE_NATIVE;
> ++  par.sig = 1;
> ++  if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) {
> ++    fprintf(stderr,"Audio_Init: Error setting audio parameters\n");
> ++    xa_audio_present = XA_AUDIO_ERR;
> ++    return;
> ++  }
> ++  if ((par.pchan != 1 && par.pchan != 2) ||
> ++      (par.bits != 8 && par.bits != 16)) {
> ++    fprintf(stderr,"Audio_Init: Unsupported audio parameters\n");
> ++    xa_audio_present = XA_AUDIO_ERR;
> ++    return;
> ++  }
> ++  if (par.pchan == 1) {
> ++    if (par.bits == 8) {
> ++      xa_audio_hard_type = par.sig ? XA_AUDIO_SIGNED_1M : 
> XA_AUDIO_LINEAR_1M;
> ++    } else {
> ++      if (par.le)
> ++        xa_audio_hard_type = par.sig ? XA_AUDIO_SIGNED_2ML : 
> XA_AUDIO_LINEAR_2ML;
> ++      else
> ++        xa_audio_hard_type = par.sig ? XA_AUDIO_SIGNED_2MB : 
> XA_AUDIO_LINEAR_2MB;
> ++    }
> ++  } else {
> ++    if (par.bits == 8) {
> ++      xa_audio_hard_type = par.sig ? XA_AUDIO_SIGNED_1S : 
> XA_AUDIO_LINEAR_1S;
> ++    } else {
> ++      if (par.le)
> ++        xa_audio_hard_type = par.sig ? XA_AUDIO_SIGNED_2SL : 
> XA_AUDIO_LINEAR_2SL;
> ++      else
> ++        xa_audio_hard_type = par.sig ? XA_AUDIO_SIGNED_2SB : 
> XA_AUDIO_LINEAR_2SB;
> ++    }
> ++  }
> ++  xa_audio_hard_freq  = par.rate;
> ++  xa_audio_hard_buff  = par.appbufsz;
> ++  xa_audio_hard_bps   = par.bps;
> ++  xa_audio_hard_chans = par.pchan;
> ++  xa_interval_id = 0;
> ++  xa_audio_present = XA_AUDIO_OK;
> ++  DEBUG_LEVEL2 fprintf(stderr,"   success \n");
> ++  Init_Audio_Ring(xa_audio_ring_size,
> ++                    (XA_AUDIO_MAX_RING_BUFF * xa_audio_hard_bps) );
> ++}
> ++
> ++/********** OpenBSD_Audio_Kill **********************
> ++ * Close /dev/audio.
> ++ *
> ++ *****/
> ++void OpenBSD_Audio_Kill()
> ++{ 
> ++  OpenBSD_Audio_Off(0);
> ++  xa_audio_present = XA_AUDIO_UNK;
> ++  sio_close(hdl);
> ++  Kill_Audio_Ring();
> ++}
> ++
> ++/********** OpenBSD_Audio_Off **********************
> ++ * Stop Audio Stream
> ++ *
> ++ *****/
> ++void OpenBSD_Audio_Off(flag)
> ++xaULONG flag;
> ++{ /* long ret; */
> ++
> ++  DEBUG_LEVEL1
> ++    fprintf(stderr,"OpenBSD_Audio_Off\n");
> ++  if (xa_audio_status != XA_AUDIO_STARTED) return;
> ++
> ++  /* SET FLAG TO STOP OUTPUT ROUTINE */
> ++  xa_audio_status = XA_AUDIO_STOPPED;
> ++
> ++  if (!sio_stop(hdl)) {
> ++    fprintf(stderr,"Audio_Off: Error stopping device\n");
> ++    xa_audio_present = XA_AUDIO_ERR;
> ++    return;
> ++  }
> ++
> ++  xa_time_audio = -1;
> ++  xa_audio_flushed = 0;
> ++}
> ++
> ++/********** OpenBSD_Audio_Prep **********************
> ++ * Turn On Audio Stream.
> ++ *
> ++ *****/
> ++void OpenBSD_Audio_Prep()
> ++{
> ++  struct sio_par par;
> ++
> ++  DEBUG_LEVEL2 
> ++    fprintf(stderr,"OpenBSD_Audio_Prep \n");
> ++  if (xa_audio_status == XA_AUDIO_STARTED) return;
> ++  else if (xa_audio_present != XA_AUDIO_OK) return;
> ++
> ++  else if (xa_snd_cur)
> ++  {
> ++    sio_initpar(&par);
> ++    par.rate = xa_snd_cur->hfreq;
> ++    if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) {
> ++      fprintf(stderr,"Audio_Init: Error setting audio parameters\n");
> ++      xa_audio_present = XA_AUDIO_ERR;
> ++      return;
> ++    }
> ++    xa_audio_hard_freq = par.rate;
> ++
> ++    /* xa_snd_cur gets changes in Update_Ring() */
> ++    xa_out_time = 100;  /* keep audio fed 500ms ahead of video */  /* was 
> 500, changed it to 100 - rcd */
> ++    xa_out_init = xa_audio_ring_size - 1;
> ++    xa_interval_time = xa_snd_cur->ch_time / XAAUD->divtest;
> ++    if (xa_interval_time == 0) xa_interval_time = 1;
> ++
> ++    XA_Flush_Ring();
> ++    XA_Update_Ring(1000);
> ++    xa_audio_status = XA_AUDIO_PREPPED;
> ++  }
> ++}
> ++
> ++/****-------------------------------------------------------------------****
> ++ *
> ++ 
> ****-------------------------------------------------------------------****/
> ++void OpenBSD_Audio_On()
> ++{
> ++  DEBUG_LEVEL1
> ++    fprintf(stderr,"OpenBSD_Audio_On\n");
> ++  if (   (xa_snd_cur)
> ++      && (xa_audio_present == XA_AUDIO_OK)
> ++      && (xa_audio_status == XA_AUDIO_PREPPED) )
> ++  { 
> ++    DEBUG_LEVEL1
> ++      fprintf(stderr,"OpenBSD_Audio_On: starting\n");
> ++    xa_audio_status = XA_AUDIO_STARTED;
> ++    if (!sio_start(hdl)) {
> ++      fprintf(stderr,"Audio_Init: Error starting audio device\n");
> ++      xa_audio_present = XA_AUDIO_ERR;
> ++      return;
> ++    }
> ++    xa_time_now = XA_Read_AV_Time();  /* get new time */
> ++    New_Merged_Audio_Output();
> ++  }
> ++}
> ++
> ++/********** OpenBSD_Closest_Freq 
> **********************************************
> ++ *
> ++ * Global Variable Affect:
> ++ *   xaULONG xa_audio_hard_buff             must set but not larger than
> ++ *                                  XA_AUDIO_MAX_RING_BUF size
> ++ 
> ****************************************************************************/
> ++xaULONG OpenBSD_Closest_Freq(ifreq)
> ++xaLONG ifreq;
> ++{ 
> ++  return ifreq;
> ++}
> ++
> ++/* Eventually merge everything to one */
> ++void OpenBSD_Set_Output_Port(aud_ports)
> ++xaULONG aud_ports;
> ++{
> ++}
> ++
> ++/************* OpenBSD_Speaker_Toggle 
> *****************************************
> ++ *
> ++ * flag = 0  turn speaker off
> ++ * flag = 1  turn speaker on
> ++ * flag = 2  toggle speaker
> ++ 
> ****************************************************************************/
> ++void OpenBSD_Speaker_Toggle(flag)
> ++xaULONG flag;
> ++{ 
> ++}
> ++
> ++/************* OpenBSD_Headphone_Toggle 
> *****************************************
> ++ *
> ++ * flag = 0  turn headphones off
> ++ * flag = 1  turn headphones on
> ++ * flag = 2  toggle headphones
> ++ 
> ****************************************************************************/
> ++void OpenBSD_Headphone_Toggle(flag)
> ++xaULONG flag;
> ++{ 
> ++}
> ++
> ++
> ++/********** OpenBSD_Adjust_Volume **********************
> ++ * Routine for Adjusting Volume on OpenBSD
> ++ *
> ++ * Volume is in the range [0,XA_AUDIO_MAXVOL]
> ++ 
> ****************************************************************************/
> ++void OpenBSD_Adjust_Volume(volume)
> ++xaULONG volume;
> ++{
> ++  DEBUG_LEVEL1
> ++    printf(stderr,"OpenBSD_Setvo: %d\n", volume);
> ++#if 0 /* not_yet, xanim sets initial volume too low */
> ++  if (hdl)
> ++    sio_setvol(hdl, volume * SIO_MAXVOL / XA_AUDIO_MAXVOL);
> ++#endif
> ++}
> ++#endif
> ++
> ++/****************************************************************************/
> ++/******************* END OF OpenBSD SPECIFIC ROUTINES 
> ************************/
> ++/****************************************************************************/
> ++
> +  
> /****************************************************************************/
> + /**************** TOWNS SPECIFIC ROUTINES 
> ***********************************/
> + 
> /****************************************************************************/
> +@@ -5828,29 +6117,19 @@ void New_Merged_Audio_Output()
> + 
> + /*---------------- Now for the Write Segments 
> -------------------------------*/
> + 
> +-#ifdef XA_SPARC_AUDIO
> ++#ifdef XA_NORMAL_AUDIO_WRITES
> +       write(devAudio,xa_audio_ring->buf,xa_audio_ring->len); 
> + #endif
> + 
> +-#ifdef XA_NetBSD_AUDIO
> +-      write(devAudio,xa_audio_ring->buf,xa_audio_ring->len);
> ++#ifdef XA_OpenBSD_AUDIO
> ++      sio_write(hdl, xa_audio_ring->buf, xa_audio_ring->len);
> + #endif
> + 
> +-#ifdef XA_AIX_AUDIO
> +-      { int rc;
> +-        rc = write ( devAudio, xa_audio_ring->buf, xa_audio_ring->len );
> +-      }
> +-#endif
> +-
> + #ifdef XA_SGI_AUDIO
> +       /* # of Samples, not Bytes. Note: assume 16 bit samples. */
> +       ALwritesamps(port,xa_audio_ring->buf, (xa_audio_ring->len >> 1) );
> + #endif
> + 
> +-#ifdef XA_LINUX_AUDIO
> +-      write(devAudio,xa_audio_ring->buf,xa_audio_ring->len);
> +-#endif
> +-
> + #ifdef XA_NAS_AUDIO
> +       NAS_Write_Data(xa_audio_ring->buf, xa_audio_ring->len);
> + #endif
> +@@ -5864,10 +6143,6 @@ void New_Merged_Audio_Output()
> +       }
> + #endif
> + 
> +-#ifdef XA_EWS_AUDIO
> +-      write(devAudio,xa_audio_ring->buf,xa_audio_ring->len);
> +-#endif
> +-
> + #ifdef XA_AF_AUDIO
> +       { ATime act, atd = AFtime0;
> +     if (XAAUD->mute != xaTRUE)
> +@@ -5883,10 +6158,6 @@ void New_Merged_Audio_Output()
> + /* Some way to flush streamsocket???? */
> + #endif
> + 
> +-#ifdef XA_HPDEV_AUDIO
> +-      write (devAudio, xa_audio_ring->buf, xa_audio_ring->len);
> +-#endif
> +-
> + #ifdef XA_MMS_AUDIO
> +       /* As currently implemented, this copies the audio data into a 
> separate
> +          shared memory buffer for communication with the multimedia server. 
> We
> +@@ -5921,10 +6192,6 @@ void New_Merged_Audio_Output()
> +       else { mms_buffers_outstanding++; }
> +     }
> +       }
> +-#endif
> +-
> +-#ifdef XA_TOWNS_AUDIO
> +-      write(devAudio,xa_audio_ring->buf,xa_audio_ring->len);
> + #endif
> + 
> + #ifdef XA_TOWNS8_AUDIO
> Index: patches/patch-xa_audio_h
> ===================================================================
> RCS file: patches/patch-xa_audio_h
> diff -N patches/patch-xa_audio_h
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-xa_audio_h  26 Jun 2015 15:37:46 -0000
> @@ -0,0 +1,14 @@
> +$OpenBSD$
> +--- xa_audio.h.orig  Sun Mar 21 23:36:25 1999
> ++++ xa_audio.h       Fri Jun 26 12:29:20 2015
> +@@ -114,6 +114,10 @@ extern xaULONG xa_forkit;
> + #include <sys/ioccom.h>
> + #endif
> + 
> ++/*********************** OpenBSD INCLUDES *******************************/
> ++#ifdef XA_OpenBSD_AUDIO
> ++#include <sndio.h>
> ++#endif
> + 
> + /*********************** LINUX INCLUDES ********************************/
> + #ifdef XA_LINUX_AUDIO
> Index: patches/patch-xanim_c
> ===================================================================
> RCS file: patches/patch-xanim_c
> diff -N patches/patch-xanim_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-xanim_c     26 Jun 2015 15:37:46 -0000
> @@ -0,0 +1,29 @@
> +$OpenBSD$
> +--- xanim.c.orig     Sun Mar 21 23:36:25 1999
> ++++ xanim.c  Fri Jun 26 12:27:44 2015
> +@@ -628,6 +628,7 @@ void Usage()
> +  fprintf(stdout,"      Ak    Enables video frame skipping to keep in sync 
> with audio.\n");
> +  fprintf(stdout,"      Ap#   Play Audio from output port #(Sparc only).\n");
> + /* fprintf(stdout,"      As#   Scale Audio playback speed by #.\n"); */
> ++ fprintf(stdout,"      AS#   Scale Audio playback amplitude by #.\n");
> +  fprintf(stdout,"      Av#   Set Audio volume to #. range 0 to 100.\n");
> +  fprintf(stdout,"\n  C[copts]  Color SubMenu\n");
> +  fprintf(stdout,"      C1    Create cmap from 1st TrueColor frame. Map\n");
> +@@ -861,6 +862,7 @@ char *argv[];
> + 
> +  vaudiof->device            = DEFAULT_AUDIO_DEVICE_NAME;
> +  vaudiof->scale             = 1.0;
> ++ vaudiof->amp_scale = 0.0;
> +  vaudiof->mute              = xaFALSE;
> +  vaudiof->volume            = DEFAULT_XA_AUDIO_VOLUME;
> +  if (vaudiof->volume > XA_AUDIO_MAXVOL) vaudiof->volume = XA_AUDIO_MAXVOL;
> +@@ -1168,6 +1170,9 @@ char *argv[];
> +             fprintf(stdout,"XAnim: +As# temporarily disabled.\n");
> +             if (vaudiof->scale < 0.125) vaudiof->scale = 0.125;
> +             if (vaudiof->scale > 8.000) vaudiof->scale = 8.000;
> ++            break;
> ++          case 'S':   /* snd amplitude */
> ++            j++; vaudiof->amp_scale = XA_Read_Float(in, &j);
> +             break;
> +           case 'v':
> +             j++; vaudiof->volume = XA_Read_Int(in,&j);
> Index: patches/patch-xanim_h
> ===================================================================
> RCS file: patches/patch-xanim_h
> diff -N patches/patch-xanim_h
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-xanim_h     26 Jun 2015 15:37:46 -0000
> @@ -0,0 +1,83 @@
> +$OpenBSD$
> +--- xanim.h.orig     Sun Mar 21 23:36:26 1999
> ++++ xanim.h  Fri Jun 26 12:45:23 2015
> +@@ -32,10 +32,12 @@
> + #else
> + #ifndef __CYGWIN32__
> + #ifndef __FreeBSD__
> ++#ifndef __OpenBSD__
> + #include <malloc.h>
> + #endif
> + #endif
> + #endif
> ++#endif
> + 
> + 
> + #include <unistd.h>
> +@@ -289,6 +291,7 @@ typedef struct
> +   xaULONG fromfile;
> +   xaULONG bufferit;
> +   double scale;
> ++  double amp_scale;
> +   char *device;
> + } XA_AUD_FLAGS;
> + 
> +@@ -298,30 +301,42 @@ typedef struct
> + 
> + #ifdef XA_SPARC_AUDIO
> + #define XA_AUDIO 1
> ++#define XA_NORMAL_AUDIO_WRITES 1
> + #endif
> + #ifdef XA_MMS_AUDIO
> + #define XA_AUDIO 1
> + #endif
> + #ifdef XA_AIX_AUDIO
> + #define XA_AUDIO 1
> ++#define XA_NORMAL_AUDIO_WRITES 1
> + #endif
> + #ifdef XA_NetBSD_AUDIO
> + #define XA_AUDIO 1
> ++#define XA_BSD_AUDIO 1
> ++#define XA_NORMAL_AUDIO_WRITES 1
> + #endif
> ++#ifdef XA_OpenBSD_AUDIO
> ++#define XA_AUDIO 1
> ++#define XA_BSD_AUDIO 1
> ++//#define XA_NORMAL_AUDIO_WRITES 1
> ++#endif
> + #ifdef XA_LINUX_AUDIO
> + #define XA_AUDIO 1
> ++#define XA_NORMAL_AUDIO_WRITES 1
> + #endif
> + #ifdef XA_SGI_AUDIO
> + #define XA_AUDIO 1
> + #endif
> + #ifdef XA_HPDEV_AUDIO
> + #define XA_AUDIO 1
> ++#define XA_NORMAL_AUDIO_WRITES 1
> + #endif
> + #ifdef XA_HP_AUDIO
> + #define XA_AUDIO 1
> + #endif
> + #ifdef XA_EWS_AUDIO
> + #define XA_AUDIO 1
> ++#define XA_NORMAL_AUDIO_WRITES 1
> + #endif
> + #ifdef XA_SONY_AUDIO
> + #define XA_AUDIO 1
> +@@ -334,6 +349,7 @@ typedef struct
> + #endif
> + #ifdef XA_TOWNS_AUDIO
> + #define XA_AUDIO 1
> ++#define XA_NORMAL_AUDIO_WRITES 1
> + #endif
> + #ifdef XA_TOWNS8_AUDIO
> + #define XA_AUDIO 1
> +@@ -433,6 +449,7 @@ typedef struct XA_SND_STRUCT
> +   xaUBYTE *snd;             /* sound if present */
> +   struct XA_SND_STRUCT *prev;
> +   struct XA_SND_STRUCT *next;
> ++  xaUBYTE volume_boost;
> + } XA_SND;
> + 
> + #define XA_SND_CHUNK_SIZE 65536
> 

Reply via email to