summaryrefslogtreecommitdiff
path: root/mbone/rat
diff options
context:
space:
mode:
authormycroft <mycroft@pkgsrc.org>1998-03-05 22:26:24 +0000
committermycroft <mycroft@pkgsrc.org>1998-03-05 22:26:24 +0000
commit1ec9d08d63ef3f4e654a81b4b0e5cd4e318fff6c (patch)
tree5f909dedf07493238ccca81df8ffb35ed6c16f9d /mbone/rat
parentdabcaf54fb2869b90f4e7c0142618988f18a6080 (diff)
downloadpkgsrc-1ec9d08d63ef3f4e654a81b4b0e5cd4e318fff6c.tar.gz
New packages for the Robust Audio Tool.
Not thoroughly tested yet.
Diffstat (limited to 'mbone/rat')
-rw-r--r--mbone/rat/Makefile32
-rw-r--r--mbone/rat/files/md51
-rw-r--r--mbone/rat/patches/patch-aa575
-rw-r--r--mbone/rat/pkg/COMMENT1
-rw-r--r--mbone/rat/pkg/DESCR2
-rw-r--r--mbone/rat/pkg/PLIST3
6 files changed, 614 insertions, 0 deletions
diff --git a/mbone/rat/Makefile b/mbone/rat/Makefile
new file mode 100644
index 00000000000..8163b843cdf
--- /dev/null
+++ b/mbone/rat/Makefile
@@ -0,0 +1,32 @@
+# New ports collection makefile for: rat
+# Version required: 3.0.23
+# Date created: 5 March 1998
+# Whom: mycroft
+#
+# $NetBSD: Makefile,v 1.1 1998/03/05 22:26:24 mycroft Exp $
+#
+
+DISTNAME= rat-3.0
+CATEGORIES= mbone tk80
+MASTER_SITES= ftp://cs.ucl.ac.uk/mice/rat/src/
+DISTFILES= rat-3.0.23.tar.gz
+
+MAINTAINER= mycroft@NetBSD.ORG
+
+LIB_DEPENDS= tk80:${PORTSDIR}/x11/tk80
+
+USE_GMAKE= yes
+MAN1= rat.1
+
+do-build:
+ cd ${WRKSRC} && PREFIX=${PREFIX} MAKE=${MAKE_PROGRAM} ./Build rat
+
+do-install:
+ cd ${WRKSRC} && ( \
+ install -c -s -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
+ bin/$${USER:=`whoami`}/rat-`uname -s`-`uname -r` \
+ ${LOCALBASE}/bin/rat; \
+ install -c -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
+ man/man1/rat.1 ${LOCALBASE}/man/man1/rat.1 )
+
+.include <bsd.port.mk>
diff --git a/mbone/rat/files/md5 b/mbone/rat/files/md5
new file mode 100644
index 00000000000..463623c1ea6
--- /dev/null
+++ b/mbone/rat/files/md5
@@ -0,0 +1 @@
+MD5 (rat-3.0.23.tar.gz) = 2789ebad64b4ddc819f30de9d53113b0
diff --git a/mbone/rat/patches/patch-aa b/mbone/rat/patches/patch-aa
new file mode 100644
index 00000000000..ec61d4900ef
--- /dev/null
+++ b/mbone/rat/patches/patch-aa
@@ -0,0 +1,575 @@
+*** Build~ Tue May 13 04:38:56 1997
+--- Build Thu Mar 5 16:35:38 1998
+***************
+*** 55,59 ****
+ Linux ) OSMVER=`echo $OSVERS | awk -F. '{printf("%d_%d", $1, $2)}'`
+ ;;
+! SunOS | IRIX | FreeBSD ) OSMVER=`echo $OSVERS | awk -F. '{print $1}'`
+ ;;
+ HP-UX ) OSTYPE=HPUX
+--- 55,59 ----
+ Linux ) OSMVER=`echo $OSVERS | awk -F. '{printf("%d_%d", $1, $2)}'`
+ ;;
+! SunOS | IRIX | FreeBSD | NetBSD ) OSMVER=`echo $OSVERS | awk -F. '{print $1}'`
+ ;;
+ HP-UX ) OSTYPE=HPUX
+***************
+*** 69,74 ****
+ echo "OSMVER=$OSMVER"
+
+ # Create a directory for the .o files, if it doesn't exist...
+! if [ ! -d objs/${USER:=`whoami`}/${OSTYPE}_${OSVERS} ]; then
+ echo "Creating object directory objs/${USER}/${OSTYPE}_${OSVERS}..."
+ mkdir bin/${USER}
+--- 69,76 ----
+ echo "OSMVER=$OSMVER"
+
++ USER=${USER:=`whoami`}
++
+ # Create a directory for the .o files, if it doesn't exist...
+! if [ ! -d objs/${USER}/${OSTYPE}_${OSVERS} ]; then
+ echo "Creating object directory objs/${USER}/${OSTYPE}_${OSVERS}..."
+ mkdir bin/${USER}
+***************
+*** 80,84 ****
+ fi
+
+! cmd="${MAKE:=make} OSTYPE=$OSTYPE OSMVER=$OSMVER OSVERS=$OSVERS USER=`whoami`"
+ case $1 in
+ rat ) echo "Running: $cmd bin/${USER}/rat-${OSTYPE}-${OSVERS}"
+--- 82,86 ----
+ fi
+
+! cmd="${MAKE:=make} OSTYPE=$OSTYPE OSMVER=$OSMVER OSVERS=$OSVERS USER=$USER"
+ case $1 in
+ rat ) echo "Running: $cmd bin/${USER}/rat-${OSTYPE}-${OSVERS}"
+*** Makefile~ Tue May 27 06:29:15 1997
+--- Makefile Thu Mar 5 16:37:53 1998
+***************
+*** 10,14 ****
+ # -DDEBUG_RTP -DREPEAT
+
+! DEFS += -D$(OSTYPE) -D$(OSTYPE)_$(OSMVER) -D$(USER)
+ CC = gcc
+ CFLAGS = -Wall -Werror $(INCS) $(DEFS) -g -O -fsigned-char
+--- 10,14 ----
+ # -DDEBUG_RTP -DREPEAT
+
+! #DEFS += -D$(OSTYPE) -D$(OSTYPE)_$(OSMVER) -D$(USER)
+ CC = gcc
+ CFLAGS = -Wall -Werror $(INCS) $(DEFS) -g -O -fsigned-char
+***************
+*** 53,56 ****
+--- 53,57 ----
+ $(OBJDIR)/auddev_linux.o \
+ $(OBJDIR)/auddev_freebsd.o \
++ $(OBJDIR)/auddev_netbsd.o \
+ $(OBJDIR)/init_net.o \
+ $(OBJDIR)/init_session.o \
+*** src/bat_include.h~ Tue May 27 06:27:48 1997
+--- src/bat_include.h Thu Mar 5 16:22:59 1998
+***************
+*** 71,75 ****
+ #include <arpa/inet.h>
+ extern int h_errno;
+! #if !defined(HPUX) && !defined(Linux) && !defined(__FreeBSD__)
+ #include <stropts.h>
+ #include <sys/filio.h>
+--- 71,75 ----
+ #include <arpa/inet.h>
+ extern int h_errno;
+! #if !defined(HPUX) && !defined(Linux) && !defined(__FreeBSD__) && !defined(__NetBSD__)
+ #include <stropts.h>
+ #include <sys/filio.h>
+*** src/config.h~ Fri May 23 08:44:14 1997
+--- src/config.h Thu Mar 5 16:39:40 1998
+***************
+*** 57,60 ****
+--- 57,71 ----
+ #endif /* FreeBSD */
+
++ #ifdef __NetBSD__
++ #define OSNAME "NetBSD"
++ #define DEFINED_ERRLIST
++ #include <sys/stat.h>
++ #include <sys/time.h>
++ #include <errno.h>
++ #include <fcntl.h>
++ #include <unistd.h>
++ #include <sys/audioio.h>
++ #endif
++
+ #ifdef SunOS_5
+ #define OSNAME "Solaris"
+*** tcl/init.tcl~ Wed Mar 5 07:39:39 1997
+--- tcl/init.tcl Thu Mar 5 16:44:45 1998
+***************
+*** 16,20 ****
+ error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]"
+ }
+! package require -exact Tcl 7.6
+ if [catch {set auto_path $env(TCLLIBPATH)}] {
+ set auto_path ""
+--- 16,20 ----
+ error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]"
+ }
+! package require -exact Tcl 8.0
+ if [catch {set auto_path $env(TCLLIBPATH)}] {
+ set auto_path ""
+*** tk/aatk.tcl~ Wed Mar 5 07:41:01 1997
+--- tk/aatk.tcl Thu Mar 5 16:44:54 1998
+***************
+*** 14,19 ****
+ # Insist on running with compatible versions of Tcl and Tk.
+
+! package require -exact Tk 4.2
+! package require -exact Tcl 7.6
+
+ # Add Tk's directory to the end of the auto-load search path, if it
+--- 14,19 ----
+ # Insist on running with compatible versions of Tcl and Tk.
+
+! package require -exact Tk 8.0
+! package require -exact Tcl 8.0
+
+ # Add Tk's directory to the end of the auto-load search path, if it
+*** /dev/null Thu Mar 5 16:59:30 1998
+--- Makefile_NetBSD_1 Thu Mar 5 16:41:44 1998
+***************
+*** 0 ****
+--- 1,7 ----
++ INCS = -I/usr/X11R6/include \
++ -I${PREFIX}/include/tcl8.0 \
++ -I${PREFIX}/include/tk8.0
++ LDLIBS = -L${PREFIX}/lib -ltk80 -ltcl80 \
++ -L/usr/X11R6/lib -lXext -lX11 \
++ -lm
++
+*** /dev/null Thu Mar 5 16:59:30 1998
+--- src/auddev_netbsd.c Thu Mar 5 16:40:41 1998
+***************
+*** 0 ****
+--- 1,423 ----
++ /*
++ * FILE: netbsd.c
++ * PROGRAM: RAT
++ * AUTHOR: Isidor Kouvelas
++ * MODIFIED: Colin Perkins
++ *
++ * $Revision: 1.1 $
++ * $Date: 1998/03/05 22:26:25 $
++ *
++ * Copyright (c) 1995,1996 University College London
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, is permitted, for non-commercial use only, provided
++ * that the following conditions are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * 3. All advertising materials mentioning features or use of this software
++ * must display the following acknowledgement:
++ * This product includes software developed by the Computer Science
++ * Department at University College London
++ * 4. Neither the name of the University nor of the Department may be used
++ * to endorse or promote products derived from this software without
++ * specific prior written permission.
++ * Use of this software for commercial purposes is explicitly forbidden
++ * unless prior written permission is obtained from the authors.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++
++
++ #include "assert.h"
++ #include "bat_include.h"
++ #ifdef __NetBSD__
++
++ static audio_info_t dev_info;
++ static int mulaw_device = FALSE; /* TRUE if the hardware can only do 8bit mulaw sampling */
++
++ #define bat_to_device(x) ((x) * AUDIO_MAX_GAIN / MAX_AMP)
++ #define device_to_bat(x) ((x) * MAX_AMP / AUDIO_MAX_GAIN)
++
++ /* Try to open the audio device. */
++ /* Returns a valid file descriptor if ok, -1 otherwise. */
++ int
++ audio_open(audio_format format)
++ {
++ audio_info_t tmp_info;
++
++ int audio_fd = open("/dev/audio", O_RDWR | O_NDELAY);
++
++ if (audio_fd > 0) {
++ AUDIO_INITINFO(&dev_info);
++ dev_info.monitor_gain = 0;
++ dev_info.play.sample_rate = format.sample_rate;
++ dev_info.record.sample_rate = format.sample_rate;
++ dev_info.play.channels = format.num_channels;
++ dev_info.record.channels = format.num_channels;
++ dev_info.play.precision = format.bits_per_sample;
++ dev_info.record.precision = format.bits_per_sample;
++ dev_info.play.gain = (AUDIO_MAX_GAIN - AUDIO_MIN_GAIN) * 0.75;
++ dev_info.record.gain = (AUDIO_MAX_GAIN - AUDIO_MIN_GAIN) * 0.75;
++ dev_info.play.port = AUDIO_HEADPHONE;
++ dev_info.record.port = AUDIO_MICROPHONE;
++ dev_info.play.balance = AUDIO_MID_BALANCE;
++ dev_info.record.balance = AUDIO_MID_BALANCE;
++ #ifdef SunOS_5
++ dev_info.play.buffer_size = DEVICE_BUF_UNIT;
++ dev_info.record.buffer_size = DEVICE_BUF_UNIT;
++ #endif
++ switch (format.encoding) {
++ case DEV_PCMU:
++ dev_info.record.encoding = AUDIO_ENCODING_ULAW;
++ dev_info.play.encoding = AUDIO_ENCODING_ULAW;
++ break;
++ case DEV_L8:
++ assert(format.bits_per_sample == 8);
++ dev_info.record.encoding = AUDIO_ENCODING_LINEAR;
++ dev_info.play.encoding = AUDIO_ENCODING_LINEAR;
++ break;
++ case DEV_L16:
++ assert(format.bits_per_sample == 16);
++ dev_info.record.encoding = AUDIO_ENCODING_LINEAR;
++ dev_info.play.encoding = AUDIO_ENCODING_LINEAR;
++ break;
++ default:
++ printf("ERROR: Unknown audio encoding in audio_open!\n");
++ abort();
++ }
++
++ memcpy(&tmp_info, &dev_info, sizeof(audio_info_t));
++ if (ioctl(audio_fd, AUDIO_SETINFO, (caddr_t)&tmp_info) < 0) {
++ if (format.encoding == DEV_L16) {
++ #ifdef DEBUG
++ printf("Old hardware detected: can't do 16 bit audio, trying 8 bit...\n");
++ #endif
++ dev_info.play.precision = 8;
++ dev_info.record.precision = 8;
++ dev_info.record.encoding = AUDIO_ENCODING_ULAW;
++ dev_info.play.encoding = AUDIO_ENCODING_ULAW;
++ if (ioctl(audio_fd, AUDIO_SETINFO, (caddr_t)&dev_info) < 0) {
++ perror("Setting MULAW audio paramterts");
++ return -1;
++ }
++ mulaw_device = TRUE;
++ } else {
++ perror("Setting audio paramterts");
++ return -1;
++ }
++ }
++ return audio_fd;
++ } else {
++ /* Because we opened the device with O_NDELAY
++ * the waiting flag was not updated so update
++ * it manually using the audioctl device...
++ */
++ audio_fd = open("/dev/audioctl", O_RDWR);
++ AUDIO_INITINFO(&dev_info);
++ dev_info.play.waiting = 1;
++ if (ioctl(audio_fd, AUDIO_SETINFO, (caddr_t)&dev_info) < 0) {
++ #ifdef DEBUG
++ perror("Setting requests");
++ #endif
++ }
++ close(audio_fd);
++ return -1;
++ }
++ }
++
++ /* Close the audio device */
++ void
++ audio_close(int audio_fd)
++ {
++ close(audio_fd);
++ audio_fd = -1;
++ }
++
++ /* Flush input buffer */
++ void
++ audio_drain(int audio_fd)
++ {
++ ioctl(audio_fd, AUDIO_FLUSH, 0);
++ }
++
++ /* Gain and volume values are in the range 0 - MAX_AMP */
++
++ void
++ audio_set_gain(int audio_fd, int gain)
++ {
++ if (audio_fd <= 0)
++ return;
++
++ AUDIO_INITINFO(&dev_info);
++ dev_info.record.gain = bat_to_device(gain);
++ if (ioctl(audio_fd, AUDIO_SETINFO, (caddr_t)&dev_info) < 0)
++ perror("Setting gain");
++ }
++
++ int
++ audio_get_gain(int audio_fd)
++ {
++ if (audio_fd <= 0)
++ return (0);
++
++ AUDIO_INITINFO(&dev_info);
++ if (ioctl(audio_fd, AUDIO_GETINFO, (caddr_t)&dev_info) < 0)
++ perror("Getting gain");
++ return (device_to_bat(dev_info.record.gain));
++ }
++
++ void
++ audio_set_volume(int audio_fd, int vol)
++ {
++ if (audio_fd <= 0)
++ return;
++
++ AUDIO_INITINFO(&dev_info);
++ dev_info.play.gain = bat_to_device(vol);
++ if (ioctl(audio_fd, AUDIO_SETINFO, (caddr_t)&dev_info) < 0)
++ perror("Setting volume");
++ }
++
++ int
++ audio_get_volume(int audio_fd)
++ {
++ if (audio_fd <= 0)
++ return (0);
++
++ AUDIO_INITINFO(&dev_info);
++ if (ioctl(audio_fd, AUDIO_GETINFO, (caddr_t)&dev_info) < 0)
++ perror("Getting gain");
++ return (device_to_bat(dev_info.play.gain));
++ }
++
++ int
++ audio_read(int audio_fd, sample *buf, int samples)
++ {
++ int i, len;
++ static u_char mulaw_buf[DEVICE_REC_BUF];
++ u_char *p;
++
++ if (mulaw_device) {
++ if ((len = read(audio_fd, mulaw_buf, samples)) < 0) {
++ return 0;
++ } else {
++ p = mulaw_buf;
++ for (i = 0; i < len; i++) {
++ *buf++ = u2s((unsigned)*p);
++ p++;
++ }
++ return (len);
++ }
++ } else {
++ if ((len = read(audio_fd, (char *)buf, samples * BYTES_PER_SAMPLE)) < 0) {
++ return 0;
++ } else {
++ return (len / BYTES_PER_SAMPLE);
++ }
++ }
++ }
++
++ int
++ audio_write(int audio_fd, sample *buf, int samples)
++ {
++ int i, done, len, bps;
++ unsigned char *p, *q;
++ static u_char mulaw_buf[DEVICE_REC_BUF];
++
++ if (mulaw_device) {
++ p = mulaw_buf;
++ for (i = 0; i < samples; i++)
++ *p++ = lintomulaw[(unsigned short)*buf++];
++ p = mulaw_buf;
++ len = samples;
++ bps = 1;
++ } else {
++ p = (char *)buf;
++ len = samples * BYTES_PER_SAMPLE;
++ bps = BYTES_PER_SAMPLE;
++ }
++
++ q = p;
++ while (1) {
++ if ((done = write(audio_fd, p, len)) == len)
++ break;
++ if (errno != EINTR)
++ return (samples - ((len - done) / bps));
++ len -= done;
++ p += done;
++ }
++
++ return (samples);
++ }
++
++ /* Set ops on audio device to be non-blocking */
++ void
++ audio_non_block(int audio_fd)
++ {
++ int on = 1;
++
++ if (audio_fd <= 0)
++ return;
++
++ if (ioctl(audio_fd, FIONBIO, (char *)&on) < 0)
++ fprintf(stderr, "Failed to set non blocking mode on audio device!\n");
++ }
++
++ /* Set ops on audio device to block */
++ void
++ audio_block(int audio_fd)
++ {
++ int on = 0;
++
++ if (audio_fd <= 0)
++ return;
++
++ if (ioctl(audio_fd, FIONBIO, (char *)&on) < 0)
++ fprintf(stderr, "Failed to set blocking mode on audio device!\n");
++ }
++
++ void
++ audio_set_oport(int audio_fd, int port)
++ {
++ if (audio_fd <= 0)
++ return;
++
++ AUDIO_INITINFO(&dev_info);
++ /* AUDIO_SPEAKER or AUDIO_HEADPHONE */
++ dev_info.play.port = port;
++ if (ioctl(audio_fd, AUDIO_SETINFO, (caddr_t)&dev_info) < 0)
++ perror("Setting port");
++ }
++
++ int
++ audio_get_oport(int audio_fd)
++ {
++ if (audio_fd <= 0)
++ return (AUDIO_SPEAKER);
++
++ AUDIO_INITINFO(&dev_info);
++ if (ioctl(audio_fd, AUDIO_GETINFO, (caddr_t)&dev_info) < 0)
++ perror("Getting port");
++ return (dev_info.play.port);
++ }
++
++ int
++ audio_next_oport(int audio_fd)
++ {
++ int port;
++
++ if (audio_fd <= 0)
++ return (AUDIO_SPEAKER);
++
++ AUDIO_INITINFO(&dev_info);
++ if (ioctl(audio_fd, AUDIO_GETINFO, (caddr_t)&dev_info) < 0)
++ perror("Getting port");
++
++
++ port = dev_info.play.port;
++ port <<= 1;
++
++ /* It is either wrong on some machines or i got something wrong! */
++ if (dev_info.play.avail_ports < 3)
++ dev_info.play.avail_ports = 3;
++
++ if ((port & dev_info.play.avail_ports) == 0)
++ port = 1;
++
++ AUDIO_INITINFO(&dev_info);
++ dev_info.play.port = port;
++ if (ioctl(audio_fd, AUDIO_SETINFO, (caddr_t)&dev_info) < 0)
++ perror("Setting port");
++
++ return (port);
++ }
++
++ void
++ audio_set_iport(int audio_fd, int port)
++ {
++ if (audio_fd <= 0)
++ return;
++
++ AUDIO_INITINFO(&dev_info);
++ dev_info.record.port = port;
++ if (ioctl(audio_fd, AUDIO_SETINFO, (caddr_t)&dev_info) < 0)
++ perror("Setting port");
++ }
++
++ int
++ audio_get_iport(int audio_fd)
++ {
++ if (audio_fd <= 0)
++ return (AUDIO_SPEAKER);
++
++ AUDIO_INITINFO(&dev_info);
++ if (ioctl(audio_fd, AUDIO_GETINFO, (caddr_t)&dev_info) < 0)
++ perror("Getting port");
++ return (dev_info.record.port);
++ }
++
++ int
++ audio_next_iport(int audio_fd)
++ {
++ int port;
++
++ if (audio_fd <= 0)
++ return (AUDIO_SPEAKER);
++
++ AUDIO_INITINFO(&dev_info);
++ if (ioctl(audio_fd, AUDIO_GETINFO, (caddr_t)&dev_info) < 0)
++ perror("Getting port");
++
++ port = dev_info.record.port;
++ port <<= 1;
++
++ if (dev_info.record.avail_ports > 3)
++ dev_info.record.avail_ports = 3;
++
++ /* Hack to fix Sparc 5 SOLARIS bug */
++ if ((port & dev_info.record.avail_ports) == 0)
++ port = 1;
++
++ AUDIO_INITINFO(&dev_info);
++ dev_info.record.port = port;
++ if (ioctl(audio_fd, AUDIO_SETINFO, (caddr_t)&dev_info) < 0)
++ perror("Setting port");
++
++ return (port);
++ }
++
++ void
++ audio_switch_out(int audio_fd, cushion_struct *ap)
++ {
++ /* Full duplex device: do nothing! */
++ }
++
++ void
++ audio_switch_in(int audio_fd)
++ {
++ /* Full duplex device: do nothing! */
++ }
++
++ int
++ audio_duplex(int audio_fd)
++ {
++ return 1;
++ }
++
++ #endif /* __NetBSD__ */
++
diff --git a/mbone/rat/pkg/COMMENT b/mbone/rat/pkg/COMMENT
new file mode 100644
index 00000000000..a997bb19cb6
--- /dev/null
+++ b/mbone/rat/pkg/COMMENT
@@ -0,0 +1 @@
+Robust Audio Tool - multicast audioconferencing
diff --git a/mbone/rat/pkg/DESCR b/mbone/rat/pkg/DESCR
new file mode 100644
index 00000000000..aafda540bc7
--- /dev/null
+++ b/mbone/rat/pkg/DESCR
@@ -0,0 +1,2 @@
+Rat allows users to conduct host-to-host or multihost audio
+teleconferences over an internet.
diff --git a/mbone/rat/pkg/PLIST b/mbone/rat/pkg/PLIST
new file mode 100644
index 00000000000..11bf9415840
--- /dev/null
+++ b/mbone/rat/pkg/PLIST
@@ -0,0 +1,3 @@
+@comment $NetBSD: PLIST,v 1.1 1998/03/05 22:26:26 mycroft Exp $
+bin/rat
+man/man1/rat.1.gz