Software Package:
        xanim

Release/Version:
        2.70.0 (beta)

Retrieved from:
	http://www.portal.com/~podlipec/home.html
	ftp://ftp.shell.portal.com/pub/podlipec/

Bug reports:
        podlipec@wellfleet.com *OR* podlipec@shell.portal.com

Comments:

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Modifications to this version made by BSDI:

===================================================================
RCS file: /master/X11/contrib/programs/xanim/Imakefile,v
retrieving revision 1.1.1.1
diff -r1.1.1.1 Imakefile
101,103c101,103
< XCOMM XA_REMOTE_DEFS = -DXA_ATHENA
< XCOMM XA_REMOTE_LIBS = $(XAWLIB) $(XMULIB)
< XCOMM XA_REMOTE_DEP_LIBS = $(DEPXAWLIB) $(DEPXMULIB)
---
> XA_REMOTE_DEFS = -DXA_ATHENA
> XA_REMOTE_LIBS = $(XAWLIB) $(XMULIB)
> XA_REMOTE_DEP_LIBS = $(DEPXAWLIB) $(DEPXMULIB)
108,110c108,110
< XA_REMOTE_DEFS = -DXA_ATHENA
< XA_REMOTE_LIBS = $(XAW3DLIB) $(XMULIB)
< XA_REMOTE_DEP_LIBS = $(DEPXAW3DLIB) $(DEPXMULIB)
---
> XCOMM XA_REMOTE_DEFS = -DXA_ATHENA
> XCOMM XA_REMOTE_LIBS = $(XAW3DLIB) $(XMULIB)
> XCOMM XA_REMOTE_DEP_LIBS = $(DEPXAW3DLIB) $(DEPXMULIB)
139a140,142
> XCOMM -- Voxware --------------------------------------------------------------
> XA_AUDIO_DEFS = -DXA_VOXWARE_AUDIO -DXA_FORK -DXA_CINEPAK
> XCOMM
141c144
< XA_AUDIO_DEFS = -DXA_SPARC_AUDIO -DXA_FORK
---
> XCOMM XA_AUDIO_DEFS = -DXA_SPARC_AUDIO -DXA_FORK
271c274
< XA_SHARED = -DXSHM
---
> XCOMM XA_SHARED = -DXSHM
===================================================================
RCS file: /master/X11/contrib/programs/xanim/xanim.c,v
retrieving revision 1.1.1.1
diff -r1.1.1.1 xanim.c
0a1
> /*	BSDI BSDI_CONTRIB,v 1.1 1995/11/16 22:43:04 sanders Exp */
230a232
> #define XA_AUDIO_EXIT()
870c872
< fprintf(stderr,"childing\n");
---
> /* BSDI: fprintf(stderr,"childing\n"); */
===================================================================
RCS file: /master/X11/contrib/programs/xanim/xanim.h,v
retrieving revision 1.1.1.1
diff -r1.1.1.1 xanim.h
0a1
> /*	BSDI BSDI_CONTRIB,v 1.1 1995/11/16 22:43:04 sanders Exp */
268a270,273
> #ifdef XA_VOXWARE_AUDIO
> #define XA_AUDIO 1
> #define XA_AUD_OUT_MERGED 1
> #endif
===================================================================
RCS file: /master/X11/contrib/programs/xanim/xanim_audio.c,v
retrieving revision 1.1.1.1
diff -r1.1.1.1 xanim_audio.c
0a1
> /*	BSDI BSDI_CONTRIB,v 1.1 1995/11/16 22:43:04 sanders Exp */
440a442,708
> /***************** VOXWARE SPECIFIC ROUTINES ********************************/
> /****************************************************************************/
> #ifdef XA_VOXWARE_AUDIO
> 
> void Voxware_Audio_Init();
> void Voxware_Audio_Kill();
> void Voxware_Audio_Off();
> void Voxware_Audio_On();
> xaULONG Voxware_Closest_Freq();
> void Voxware_Speaker_Toggle();
> void Voxware_Headphone_Toggle();
> void Voxware_Adjust_Volume();
> 
> int voxware_vol_chan;
> 
> #define VOXWARE_MAX_VOL (100)
> #define VOXWARE_MIN_VOL (0)
> 
> int devAudio;
> int devMixer;
> 
> /********** XA_Audio_Setup **********************
>  * Sets up Voxware specific Routines
>  *****/
> void XA_Audio_Setup()
> {
>   XA_Audio_Init		= Voxware_Audio_Init;
>   XA_Audio_Kill		= Voxware_Audio_Kill;
>   XA_Audio_Off		= Voxware_Audio_Off;
>   XA_Audio_On		= Voxware_Audio_On;
>   XA_Closest_Freq	= Voxware_Closest_Freq;
>   XA_Set_Output_Port	= (void *)(0);
>   XA_Speaker_Tog	= Voxware_Speaker_Toggle;
>   XA_Headphone_Tog	= Voxware_Headphone_Toggle;
>   XA_LineOut_Tog	= Voxware_Headphone_Toggle;
>   XA_Adjust_Volume	= Voxware_Adjust_Volume;
> 
>   xa_snd_cur = 0;
>   xa_audio_present = XA_AUDIO_UNK;
>   xa_audio_status  = XA_AUDIO_STOPPED;
>   xa_audio_ring_size  = 8;
>   voxware_vol_chan = SOUND_MIXER_VOLUME;  /* default */
> }
> 
> /********** Voxware_Audio_Init **********************
>  * Init Voxware Audio, init variables, open Audio Devices.
>  *****/
> void Voxware_Audio_Init()
> { int ret,tmp;
>   DEBUG_LEVEL2 fprintf(stderr,"Voxware_Audio_Init\n");
> 
>   if (xa_audio_present != XA_AUDIO_UNK) return;
> 
>   devAudio = open("/dev/dsp", O_WRONLY | O_NDELAY, 0);
>   if (devAudio == -1)
>   { fprintf(stderr,"Can't Open Voxware Audio device\n");
>     xa_audio_present = XA_AUDIO_ERR;
>     return;
>   }
>   ioctl(devAudio, SNDCTL_DSP_SYNC, NULL);	/* BSDI: XXX */
>   /* SETUP SAMPLE SIZE */
>   tmp = 16;
> 
>   ret = ioctl(devAudio, SNDCTL_DSP_SAMPLESIZE, &tmp);
> 
>   if ((ret == -1) || (tmp == 8)) xa_audio_hard_bps = 1;
>   else xa_audio_hard_bps = 2;
> 
>   /* SETUP Mono/Stereo */
>   tmp = 0;  /* mono(0) stereo(1) */ 
> 
>   ret = ioctl(devAudio, SNDCTL_DSP_STEREO, &tmp);
> 
>   if (ret == -1) fprintf(stderr,"Voxware Audio: Error setting mono\n");
>   xa_audio_hard_chans = 1;
> 
>   xa_audio_hard_freq  = 11025;  /* 22050 and sometimes 44100 */
>   xa_audio_hard_buff  = XA_HARD_BUFF_1K;
> 
>   ret = ioctl(devAudio, SNDCTL_DSP_GETBLKSIZE, &tmp);
> 
>   if (ret == -1) fprintf(stderr,"Voxware Audio: Error getting buf size\n");
>   /* POD NOTE: should probably do something with this value. :^) */
>   /* Maybe XA_AUDIO_MAX_RING_BUFF should be a variable */
>   
>   ioctl(devAudio, SNDCTL_DSP_SYNC, NULL);
> 
>   devMixer = open("/dev/mixer",  O_RDONLY | O_NDELAY, 0);
>   /* Mixer only present on SB Pro's and above */
>   /* if not present then it's set to -1 and ignored later */
>   /* THOUGHT: what about doing mixer ioctl to the /dev/dsp device??? */
>   if (devMixer < 0) devMixer = devAudio;
>    /* determine what volume settings exist */
>   { int devices;
> 
>     ret = ioctl(devMixer, SOUND_MIXER_READ_DEVMASK, &devices);
>     if (ret == -1) devices = 0;
> 
>     if (devices & (1 << SOUND_MIXER_PCM)) 
> 		voxware_vol_chan = SOUND_MIXER_PCM;
>     else	voxware_vol_chan = SOUND_MIXER_VOLUME;
>   }
>  
>   if (xa_audio_hard_bps == 1) xa_audio_hard_type  = XA_AUDIO_LINEAR_1M;
>   else		xa_audio_hard_type  = XA_AUDIO_SIGNED_2ML;
> 
>   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) );
> }
> 
> /********** Voxware_Audio_Kill *************************************************
>  * Stop Voxware Audio and Close Voxware Audio Devices. Free up memory.
>  *
>  *****************************************************************************/
> void Voxware_Audio_Kill()
> {
>   Voxware_Audio_Off(0);
>   xa_audio_present = XA_AUDIO_UNK;
>   if ( (devMixer != -1) && (devMixer != devAudio)) close(devMixer);
>   close(devAudio);
>   Kill_Audio_Ring();
> }
> 
> /********** Voxware_Audio_Off *************************************************
>  * Stop Voxware Audio
>  *
>  *****************************************************************************/
> void Voxware_Audio_Off(flag)
> xaULONG flag;
> {
>   if (xa_audio_status != XA_AUDIO_STARTED) return;
>   /* SET FLAG TO STOP OUTPUT ROUTINE */
>   xa_audio_status = XA_AUDIO_STOPPED;
>   Voxware_Adjust_Volume(XA_AUDIO_MINVOL);
>   ioctl(devAudio, SNDCTL_DSP_SYNC, NULL);
>   xa_time_audio = -1;
>   xa_audio_flushed = 0;
>   ioctl(devAudio, SNDCTL_DSP_SYNC, NULL);
>   Voxware_Adjust_Volume(XAAUD->volume);
> }
> 
> /********** Voxware_Audio_On ***************************************************
>  * Startup Voxware Audio
>  *
>  *****************************************************************************/
> void Voxware_Audio_On()
> {
>   DEBUG_LEVEL2 fprintf(stderr,"Voxware_Audio_On \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,tmp;
> 
>     Voxware_Adjust_Volume(XA_AUDIO_MINVOL);
>     ioctl(devAudio, SNDCTL_DSP_SYNC, NULL);
> 
>     /* CHANGE FREQUENCY */
>     if (xa_audio_hard_freq != xa_snd_cur->hfreq)
>     {
>       tmp = xa_snd_cur->hfreq;
> 
>       ret = ioctl(devAudio, SNDCTL_DSP_SPEED, &tmp);
> 
>       if ((ret == -1) || (tmp != xa_snd_cur->hfreq))
> 	fprintf(stderr,"Voxware_Audio: err setting freq %lx\n"
> 						,xa_snd_cur->hfreq);
>       xa_audio_hard_freq = xa_snd_cur->hfreq;
>     }
>     ioctl(devAudio, SNDCTL_DSP_SYNC, NULL);
>     Voxware_Adjust_Volume(XAAUD->volume);
> 
>     /* xa_snd_cur gets changes in Update_Ring() */
>     xa_out_time = 250;  /* keep audio 250 ms ahead of video. could be 500ms */
>     xa_out_init = xa_audio_ring_size - 1;
>     xa_interval_time = xa_snd_cur->ch_time / XAAUD->divtest;
> 
>     xa_audio_status = XA_AUDIO_STARTED;
>     XA_Flush_Ring();
>     XA_Update_Ring(1000);
> 
>     if (xa_interval_time == 0) xa_interval_time = 1;
>     xa_time_now = XA_Read_AV_Time();  /* get new time */
> #ifdef XA_FORK
>     New_Merged_Audio_Output();
> #else
>     Merged_Audio_Output();
> #endif
>   }
> }
> 
> /********** Voxware_Closest_Freq **********************************************
>  * Return closest support frequeny and set hard_buff.
>  *
>  *****************************************************************************/
> xaULONG Voxware_Closest_Freq(ifreq)
> xaLONG ifreq;	/* incoming frequency */
> { static int valid[] = {11025, 22050, 44100, 0};
>   xaLONG i = 0;
>   xaLONG tmp_freq,ofreq = ifreq;
>   xaLONG ret;
> 
>    /* search up for closest frequency */
>   while(valid[i])
>   {
>     if (XA_ABS(valid[i] - ifreq) < XA_ABS(ofreq - ifreq)) ofreq = valid[i];
>     i++;
>   }
> 
>   tmp_freq = ofreq;
> 
>   ret = ioctl(devAudio, SNDCTL_DSP_SPEED, &tmp_freq);
>   if (ret == -1) tmp_freq = 0;
> 
>   if (tmp_freq) ofreq = tmp_freq;
> 
>   if (ofreq >= 25000) xa_audio_hard_buff = XA_HARD_BUFF_2K;
>   else xa_audio_hard_buff = XA_HARD_BUFF_1K;
>   return(ofreq);
> }
> 
> /********** Voxware_Speaker_Toggle **********************************************
>  * Turn off/on/toggle Voxware's Speaker(if possible)
>  * flag= 0   1   2 
>  *****************************************************************************/
> void Voxware_Speaker_Toggle(flag)
> xaULONG flag;
> {
>   return;
> }
> 
> /********** Voxware_Headphone_Toggle ********************************************
>  * Turn off/on/toggle Voxware's Headphone(if possible)
>  * flag= 0   1   2 
>  *****************************************************************************/
> void Voxware_Headphone_Toggle(flag)
> xaULONG flag;
> {
>   return;
> }
> 
> /********** Voxware_Adjust_Volume ***********************************************
>  * Routine for Adjusting Volume on Voxware
>  *
>  *****************************************************************************/
> void Voxware_Adjust_Volume(volume)
> xaULONG volume;
> { xaULONG adj_volume;
> 
>   if (devMixer < 0) return;
>   adj_volume = VOXWARE_MIN_VOL +
>         ((volume * (VOXWARE_MAX_VOL - VOXWARE_MIN_VOL)) / XA_AUDIO_MAXVOL);
>   if (adj_volume > VOXWARE_MAX_VOL) adj_volume = VOXWARE_MAX_VOL;
>   adj_volume |= adj_volume << 8;	/* left channel | right channel */
> 
>   ioctl(devMixer, MIXER_WRITE(voxware_vol_chan), &adj_volume);
> }
> 
> #endif
> /****************************************************************************/
> /******************** END OF VOXWARE SPECIFIC ROUTINES **********************/
> /****************************************************************************/
> 
> 
> /****************************************************************************/
4841a5110,5113
> #ifdef XA_VOXWARE_AUDIO
>       write(devAudio,xa_audio_ring->buf,xa_audio_ring->len);
> #endif
> 
7120a7393,7396
> 
> #ifdef XA_VOXWARE_AUDIO
>       write(devAudio,xa_audio_ring->buf,xa_audio_ring->len);
> #endif
===================================================================
RCS file: /master/X11/contrib/programs/xanim/xanim_audio.h,v
retrieving revision 1.1.1.1
diff -r1.1.1.1 xanim_audio.h
0a1
> /*	BSDI BSDI_CONTRIB,v 1.1 1995/11/16 22:43:04 sanders Exp */
35a37,50
> 
> /*********************** VOXWARE INCLUDES ********************************/
> #ifdef XA_VOXWARE_AUDIO
> #include <errno.h>
> #include <fcntl.h>
> #include <sys/time.h>
> 
> #ifdef __FreeBSD__
> #include <machine/soundcard.h>
> #else
> #include <sys/soundcard.h>
> #endif
> 
> #endif /* XA_VOXWARE_AUDIO */
