[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Last Chance to Save: bplay



On 14 Sep 1999, Peter Makholm wrote:

> Now I can't even get it to work on my computer, which is pretty bad
> when I'm the maintainer.

It works here now. I fixed a horrible hack (using a libc internal), made
main return int, and removed -DDEBUG from the makefile. It now plays fine
here (I can't test recording)
 
(diff attached - some of the changes are yours though)

> Buffered audio playing and reading could be a good idea, but I don't
> need it and can use wavtools instead. I think trying to fix this
> package is to much work for to little gain. It has 3 merged release
> critical bugs and some normal bugs. 

The other RC bugs are marked FIXED?
 
> There has never been a working glibc-2.1 version. And if nobody

Complies here fine without any warnings...

HTH,

Matthew
--- bplay-0.96.orig/Makefile
+++ bplay-0.96/Makefile
@@ -3,7 +3,7 @@
 SRCS = bplay.c sndfunc.o shmbuf.c
 
 CC = gcc
-CFLAGS = -Wall -O2 -m486 -DUSEBUFFLOCK -DDEBUG
+CFLAGS = -Wall -O2 -DUSEBUFFLOCK
 LDFLAGS = 
 LIBS =
 
--- bplay-0.96.orig/bplay.c
+++ bplay-0.96/bplay.c
@@ -16,6 +16,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <sys/wait.h>
+#include <signal.h>
 
 #include <sys/time.h>
 #include <sys/resource.h>
@@ -34,11 +35,25 @@
 /* Globals */
 char *progname;
 int forked;
+pid_t pid;
+int recorder;
+
+char *device = "/dev/dsp";
+unsigned long bigbuffsize = 0x040000;
 
 /* Prototypes */
 
+/*The next commented out bit was wrong. */
+/*So I wrote a real function that did the */
+/*same thing, without libc internals :) */
+/* Matthew Vernon<matthew@debian.org> 14.9.1999*/
+
+char *mcv_basename(char *name);
+
 /* This is in libc, but not in the header files. */
-extern char *basename(char *name);
+/*  #ifndef __GLIBC__ */
+/*  extern char *basename(char *name); */
+/*  #endif */
 
 void Usage(void);
 void ErrDie(char *err);
@@ -64,11 +79,32 @@
 extern void initsems(int disks, int snds);
 extern void cleanupsems(void);
 
+char *mcv_basename(char *name)
+{
+  int i; /*String length*/
+  char *p;
+  int a; /*loop control*/
+
+if((strchr(name,'/'))==NULL)
+  return name;
+
+  i=strlen(name);
+  p=&(name[i-1]);
+  for(a=0;a<(i-1);a++){
+	if('/'==*p){
+	  p++;
+	  return p;
+	}
+	p--;
+  }
+  printf("Failed to find anything. oops.\n");
+  exit(1);
+}
+
 
-void main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
 	
-	int recorder = 0;		/* 1 if recording, 0 else */
 	int thefd;			/* The file descriptor */
 	int speed, bits, stereo;	/* Audio parameters */
 	int timelim;			/* Recording time in secs */
@@ -81,8 +117,9 @@
 	sndf_t filetype;		/* The file type */
 	int mods;			/* So user can override */
 	int optc;			/* For getopt */
+	recorder = 0;		        /* 1 if recording, 0 else */
 
-	progname = basename(argv[0]);	/* For errors */
+	progname = mcv_basename(argv[0]);	/* For errors */
 
 	/* Ok, find out if we record or play */
 	if (strcmp(progname, "brec") == 0)
@@ -101,10 +138,14 @@
 	filetype = F_UNKNOWN;
 	mods = 0;
 	/* Parse the options */
-	while ((optc = getopt(argc, argv, "Ss:b:t:T:j:J:rvw")) != -1)
+	while ((optc = getopt(argc, argv, "Ss:b:t:T:j:J:rvwd:B:")) != -1)
 	{
 		switch(optc)
 		{
+		case 'B': bigbuffsize = atoi(optarg);
+			break;
+		case 'd': device = optarg;
+			break;
 		case 's':
 			speed = atoi(optarg);
 			if (speed < 300)
@@ -149,9 +190,11 @@
 
 #if 1
 	/* This program is either set-uid or run by root (I hope...) */
-	if (setpriority(PRIO_PROCESS, 0, -20) == -1)
-		fprintf(stderr, "%s: setpriority: %s: continuing anyway\n",
-			progname, strerror(errno));
+
+	if (!getuid())	/* WTA: check if we are root */
+		if (setpriority(PRIO_PROCESS, 0, -20) == -1)
+			fprintf(stderr, "%s: setpriority: %s: continuing anyway\n",
+				progname, strerror(errno));
 	
 #endif
 	/* Drop out of suid mode before we open any files */
@@ -239,7 +282,7 @@
 				header.modus = stereo + 1;
 				header.sample_fq = speed;
 				header.byte_p_sec = ((bits > 8)? 2:1)*(stereo+1)*speed;
-				header.byte_p_spl = (bits > 8)? 2:1;
+				header.byte_p_spl = ((bits > 8)? 2:1)*(stereo+1);
 				header.bit_p_spl = bits;
 
 				memcpy(&(header.data_chunk), data, 4);
@@ -297,7 +340,6 @@
 	else
 	{
 		int count;
-		pid_t pid;
 		char hd_buf[20];	/* Holds first 20 bytes */
 
 		count = read(thefd, hd_buf, 20);
@@ -322,13 +364,13 @@
 		wait(NULL);
 		cleanupsems();
 	}
-
+	return 0;
 }
 
 void Usage(void)
 {
 	fprintf(stderr,
-		"Usage: %s [-S] [-s Hz] [-b 8|16] [-t secs] [-r|-v|-w] [filename]\n",
+		"Usage: %s [-S] [-s Hz] [-b 8|16] [-t secs] [-r|-v|-w] [-B bufsize] [-d device] [filename]\n",
 		progname);
 	exit(1);
 }
@@ -342,6 +384,7 @@
 void Die(char * err)
 {
 	fprintf(stderr, "%s: %s\n", progname, err);
+	if (forked) { kill(pid,9); }
 	exit(-1);
 }
 
@@ -350,22 +393,22 @@
 {
 	if(timelim)
 	{
-		*bcount = speed*timelim*bits/8;
+		*bcount = speed*timelim*(bits/8);
 		if (stereo) *bcount <<= 1;
 	}
 	if(samplim)
 	{
-		*bcount = samplim*bits/8;
+		*bcount = samplim*(bits/8);
 		if (stereo) *bcount <<= 1;
 	}
 	if(timejmp)
 	{
-		*bjump = speed*timejmp*bits/8;
+		*bjump = speed*timejmp*(bits/8);
 		if (stereo) *bjump <<= 1;
 	}
 	if(sampjmp)
 	{
-		*bjump = sampjmp*bits/8;
+		*bjump = sampjmp*(bits/8);
 		if (stereo) *bjump <<= 1;
 	}
 }
--- bplay-0.96.orig/bplay.c~
+++ bplay-0.96/bplay.c~
@@ -0,0 +1,584 @@
+/*
+** brec/bplay.c (C) David Monro 1996
+**
+** Copyright under the GPL - see the file COPYING in this directory
+**
+**
+*/
+
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <signal.h>
+
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#include <sys/soundcard.h>
+
+#include "fmtheaders.h"
+
+/* Types and constants */
+typedef enum sndf_t {F_UNKNOWN, F_WAV, F_VOC, F_RAW} sndf_t;
+
+#define MSPEED	1
+#define MBITS	2
+#define MSTEREO	4
+
+/* Globals */
+char *progname;
+int forked;
+pid_t pid;
+int recorder;
+
+char *device = "/dev/dsp";
+unsigned long bigbuffsize = 0x040000;
+
+/* Prototypes */
+
+/*The next commented out bit was wrong. */
+/*So I wrote a real function that did the */
+/*same thing, without libc internals :) */
+/* Matthew Vernon<matthew@debian.org> 14.9.1999*/
+
+char *mcv_basename(char *name);
+
+/* This is in libc, but not in the header files. */
+/*  #ifndef __GLIBC__ */
+/*  extern char *basename(char *name); */
+/*  #endif */
+
+void Usage(void);
+void ErrDie(char *err);
+void Die(char *err);
+
+void getbcount(int speed, int bits, int stereo, int *bcount,
+	int timelim, int samplim, int timejmp, int sampjmp, int *bjump);
+void playraw(int thefd, char hd_buf[20], int speed, int bits, int stereo);
+void playwav(int thefd, char hd_buf[20], int mods, int speed, int bits, int stereo);
+void playvoc(int thefd, char hd_buf[20]);
+
+/* extern globals */
+extern int audio, abuf_size, fmt_mask;
+
+/* extern prototypes */
+extern void init_sound(int recorder);
+extern void snd_parm(int speed, int bits, int stereo);
+extern void init_shm(void);
+extern void shmrec(int outfd, int bcount, int terminate);
+extern void diskread(int outfd, int bcount, char hd_buf[20], int terminate,
+    int speed, int bits, int stereo);
+extern volatile void audiowrite(void);
+extern void initsems(int disks, int snds);
+extern void cleanupsems(void);
+
+char *mcv_basename(char *name)
+{
+  int i; /*String length*/
+  char *p;
+  int a; /*loop control*/
+
+  i=strlen(name);
+  p=&(name[i-1]);
+  for(a=0;a<(i-1);a++){
+	if('/'==*p){
+	  p++;
+	  return p;
+	}
+	p--;
+  }
+  printf("Failed to find anything. oops.\n");
+  exit(1);
+}
+
+
+int main(int argc, char *argv[])
+{
+	
+	int thefd;			/* The file descriptor */
+	int speed, bits, stereo;	/* Audio parameters */
+	int timelim;			/* Recording time in secs */
+	int samplim;			/* Recording time in samples */
+	int timejmp;			/* Skip time in secs */
+	int sampjmp;			/* Skip time in samples */
+	int bcount;			/* Number of bytes to record */
+	int bjump;			/* Number of bytes to skip */
+	int themask;			/* Permission mask for file */
+	sndf_t filetype;		/* The file type */
+	int mods;			/* So user can override */
+	int optc;			/* For getopt */
+	recorder = 0;		        /* 1 if recording, 0 else */
+
+	progname = mcv_basename(argv[0]);	/* For errors */
+
+	/* Ok, find out if we record or play */
+	if (strcmp(progname, "brec") == 0)
+	    recorder = 1;
+	else
+	{
+	    if (!(strcmp(progname, "bplay") == 0))
+		Die("must be called as bplay or brec");
+	    else
+		recorder = 0;
+	}
+	/* Default values */
+	speed = 8000; bits = 8; stereo = 0;
+	timelim = 0; samplim = 0; bcount = 0;
+	timejmp = 0; sampjmp = 0; bjump = 0;
+	filetype = F_UNKNOWN;
+	mods = 0;
+	/* Parse the options */
+	while ((optc = getopt(argc, argv, "Ss:b:t:T:j:J:rvwd:B:")) != -1)
+	{
+		switch(optc)
+		{
+		case 'B': bigbuffsize = atoi(optarg);
+			break;
+		case 'd': device = optarg;
+			break;
+		case 's':
+			speed = atoi(optarg);
+			if (speed < 300)
+				speed *= 1000;
+			mods |= MSPEED;
+			break;
+		case 'b':
+			bits = atoi(optarg);
+			if ((bits != 8) && (bits != 16))
+				Usage();
+			mods |= MBITS;
+			break;
+		case  'S':
+			stereo = 1;
+			mods |= MSTEREO;
+			break;
+		case 't':
+			timelim = atoi(optarg);
+			break;
+		case 'T':
+			samplim = atoi(optarg);
+			break;
+		case 'j':
+			timejmp = atoi(optarg);
+			break;
+		case 'J':
+			sampjmp = atoi(optarg);
+			break;
+		case 'r':
+			filetype = F_RAW;
+			break;
+		case 'v':
+			filetype = F_VOC;
+			break;
+		case 'w':
+			filetype = F_WAV;
+			break;
+		default:
+			Usage();
+		}
+	}
+
+#if 1
+	/* This program is either set-uid or run by root (I hope...) */
+
+	if (!getuid())	/* WTA: check if we are root */
+		if (setpriority(PRIO_PROCESS, 0, -20) == -1)
+			fprintf(stderr, "%s: setpriority: %s: continuing anyway\n",
+				progname, strerror(errno));
+	
+#endif
+	/* Drop out of suid mode before we open any files */
+	if(setreuid(geteuid(), getuid()) == -1)
+	{
+		fprintf(stderr, "%s: setreuid: %s: continuing anyway\n",
+			progname, strerror(errno));
+		fprintf(stderr, "real uid = %d, effective uid = %d\n",
+			getuid(), geteuid());
+	}
+
+	/* Calculate the time limit in samples if need be */
+	if (optind > argc - 1)
+	{
+	    if(recorder)	/* No file, so stdin or stdout */
+		thefd = 1;
+	    else
+		thefd = 0;
+	}
+	else
+	{
+	    /* Open a file */
+	    if(recorder)
+	    {
+		/* Ok, get the mask for the opening the file */
+		themask = umask(0);
+		umask(themask);
+		if ((thefd = open(argv[optind], O_CREAT | O_TRUNC | O_WRONLY,
+		    (~themask) & 0666)) == -1)
+		    ErrDie(argv[optind]);
+	    }
+	    else
+		if ((thefd = open(argv[optind], O_RDONLY)) == -1)
+		    ErrDie(argv[optind]);
+	}
+
+	/* Open and set up the audio device */
+	init_sound(recorder);
+
+	/* Check if the card is capable of the requested operation */
+	/*
+	** Can't check for stereo yet, just number of bits. Also,
+	** can't check for 12 bit operations yet.
+	*/
+
+#if 0
+	if ((bits == 8) & !(fmt_mask & AFMT_U8)) Die("Format not supported by audio device");
+	if ((bits == 16) & !(fmt_mask & AFMT_S16_BE)) Die("Format not supported by audio device");
+#endif
+
+	/* Set up the shared buffers and semaphore blocks */
+	init_shm();
+
+	/* Call the appropriate routine */
+	if (recorder)
+	{
+		getbcount(speed, bits, stereo, &bcount,
+			 timelim, samplim, timejmp, sampjmp, &bjump);
+#ifdef DEBUG
+		fprintf(stderr, "bcount: %d\n", bcount);
+#endif
+
+		if (filetype == F_UNKNOWN)
+			filetype = F_RAW;	/* Change to change default */
+		switch(filetype)
+		{
+		case F_WAV:
+			/* Spit out header here... */
+			fprintf(stderr, "Writing MS WAV sound file");
+			{
+				wavhead header;
+
+				char *riff = "RIFF";
+				char *wave = "WAVE";
+				char *fmt = "fmt ";
+				char *data = "data";
+
+				memcpy(&(header.main_chunk), riff, 4);
+				header.length = sizeof(wavhead) - 8 + bcount;
+				memcpy(&(header.chunk_type), wave, 4);
+
+				memcpy(&(header.sub_chunk), fmt, 4);
+				header.sc_len = 16;
+				header.format = 1;
+				header.modus = stereo + 1;
+				header.sample_fq = speed;
+				header.byte_p_sec = ((bits > 8)? 2:1)*(stereo+1)*speed;
+				header.byte_p_spl = ((bits > 8)? 2:1)*(stereo+1);
+				header.bit_p_spl = bits;
+
+				memcpy(&(header.data_chunk), data, 4);
+				header.data_length = bcount;
+				write(thefd, &header, sizeof(header));
+			}
+		case F_RAW:
+			if (filetype == F_RAW)
+				fprintf(stderr, "Writing raw sound file");
+			fprintf(stderr, ", %dHz, %dbit, %s\n", speed, bits, (stereo)? "stereo":"");
+			snd_parm(speed, bits, stereo);
+			initsems(0, 1);
+			shmrec(thefd, bcount, 1);
+			break;
+		case F_VOC:
+			/* Spit out header here... */
+			fprintf(stderr, "Writing CL VOC sound file");
+			fprintf(stderr, ", %dHz, %dbit, %s\n", speed, bits, (stereo)? "stereo":"");
+			{
+				vochead header;
+				blockTC ablk;
+				blockT9 bblk;
+				int i;
+				char fill = 0;
+
+				for (i=0;i<20;i++)
+					header.Magic[i] = VOC_MAGIC[i];
+				header.BlockOffset = 0x1a;
+				header.Version = 0x0114;
+				header.IDCode = 0x111F;
+				write(thefd, &header, sizeof(vochead));
+
+				snd_parm(speed, bits, stereo);
+				initsems(0, 1);
+
+				i = (bcount >= 0xFFFFF2)? 0xFFFFF2 + 12 : bcount;
+				ablk.BlockID = 9;
+				ablk.BlockLen[0] = (i + 12) & 0xFF;
+				ablk.BlockLen[1] = ((i + 12) >> 8) & 0xFF;
+				ablk.BlockLen[2] = ((i + 12) >> 16) & 0xFF;
+				bblk.SamplesPerSec = speed;
+				bblk.BitsPerSample = bits;
+				bblk.Channels = stereo + 1;
+				bblk.Format = (bits == 8)? 0 : 4;
+				write(thefd, &ablk, sizeof(ablk));
+				write(thefd, &bblk, sizeof(bblk));
+				shmrec(thefd, i, 1);
+				write(thefd, &fill, 1);
+			}
+			break;
+		default:
+			Die("internal error - fell out of switch");
+		}
+	}
+	else
+	{
+		int count;
+		char hd_buf[20];	/* Holds first 20 bytes */
+
+		count = read(thefd, hd_buf, 20);
+		if (count < 0) ErrDie("read");
+		if (count < 20) Die("input file less than 20 bytes long.");
+
+		initsems(1, 0);
+
+		pid = fork();
+		if(!pid)
+			audiowrite();	/* Doesn't return */
+		forked = 1;
+
+		/* Pick the write output routine */
+		if(strstr(hd_buf, VOC_MAGIC) != NULL)
+			playvoc(thefd, hd_buf);
+		else if(strstr(hd_buf, "RIFF") != NULL)
+			playwav(thefd, hd_buf, mods, speed, bits, stereo);
+		else /* Assume raw data */
+			playraw(thefd, hd_buf, speed, bits, stereo);
+
+		wait(NULL);
+		cleanupsems();
+	}
+	return 0;
+}
+
+void Usage(void)
+{
+	fprintf(stderr,
+		"Usage: %s [-S] [-s Hz] [-b 8|16] [-t secs] [-r|-v|-w] [-B bufsize] [-d device] [filename]\n",
+		progname);
+	exit(1);
+}
+
+void ErrDie(char * err)
+{
+	fprintf(stderr, "%s: %s: %s\n", progname, err, strerror(errno));
+	exit(-1);
+}
+
+void Die(char * err)
+{
+	fprintf(stderr, "%s: %s\n", progname, err);
+	if (forked) { kill(pid,9); }
+	exit(-1);
+}
+
+void getbcount(int speed, int bits, int stereo, int *bcount,
+	int timelim, int samplim, int timejmp, int sampjmp, int *bjump)
+{
+	if(timelim)
+	{
+		*bcount = speed*timelim*(bits/8);
+		if (stereo) *bcount <<= 1;
+	}
+	if(samplim)
+	{
+		*bcount = samplim*(bits/8);
+		if (stereo) *bcount <<= 1;
+	}
+	if(timejmp)
+	{
+		*bjump = speed*timejmp*(bits/8);
+		if (stereo) *bjump <<= 1;
+	}
+	if(sampjmp)
+	{
+		*bjump = sampjmp*(bits/8);
+		if (stereo) *bjump <<= 1;
+	}
+}
+
+void playraw(int thefd, char hd_buf[20], int speed, int bits, int stereo)
+{
+    fprintf(stderr, "Playing raw data : %d bit, Speed %d %s ...\n",
+	bits, speed, (stereo)? "Stereo" : "Mono");
+    diskread(thefd, 0, hd_buf, 1, speed, bits, stereo);
+}
+
+void playwav(int thefd, char hd_buf[20], int mods, int speed, int bits, int stereo)
+{
+    wavhead wavhd;
+    int count;
+
+    memcpy((void*)&wavhd, (void*)hd_buf, 20);
+    count = read(thefd, ((char*)&wavhd)+20, sizeof(wavhd) - 20);
+    if(wavhd.format != 1) Die("input is not a PCM WAV file");
+    if (! (mods&MSPEED))
+	speed = wavhd.sample_fq;
+    if (! (mods&MBITS))
+	bits = wavhd.bit_p_spl;
+    if (! (mods&MSTEREO))
+	stereo = wavhd.modus - 1;
+    fprintf(stderr, "Playing WAVE : %d bit, Speed %d %s ...\n",
+	bits, speed, (stereo)? "Stereo" : "Mono");
+    diskread(thefd, 0, NULL, 1, speed, bits, stereo);
+}
+
+void playvoc(int thefd, char hd_buf[20])
+{
+    int count;
+    int speed=0, bits=0, stereo=0;
+    int inloop=0, loop_times;
+    long bytecount, loop_pos=0;
+    vochead vochd;
+    blockTC ccblock;
+    int lastblocktype = -1;
+    int quit = 0;
+
+    fprintf(stderr, "Playing Creative Labs Voice file ...\n");
+    memcpy((void*)&vochd, (void*)hd_buf, 20);
+    count = read(thefd, ((char*)&vochd)+20, sizeof(vochd) - 20);
+    fprintf(stderr, "Format version %d.%d\n", vochd.Version>>8,
+	vochd.Version&0xFF);
+    if (vochd.IDCode != (~vochd.Version+0x1234))
+	fprintf(stderr, "Odd - version mismatch - %d != %d\n",
+	    vochd.IDCode, ~vochd.Version+0x1234);
+    if(sizeof(vochd) < vochd.BlockOffset)
+    {
+	int off = vochd.BlockOffset - sizeof(vochd);
+	char *junk;
+	junk = (char*) malloc(off);    
+	read(thefd, junk, off);
+    }
+    while(!quit)
+    {
+    if ((read(thefd, (char*)&ccblock, sizeof(ccblock))) == -1)
+    {
+#ifdef DEBUG
+	fprintf(stderr, "Terminating\n");
+#endif
+	diskread(thefd, -1, NULL, 1, speed, bits, stereo);
+	quit = 1;
+	continue;
+    }
+#ifdef DEBUG
+    fprintf(stderr, "Block of type %d found\n", ccblock.BlockID);
+#endif
+    switch(ccblock.BlockID)
+    {
+    case 1:
+	{
+	blockT1 tblock;
+	read(thefd, (char*)&tblock, sizeof(tblock));
+	if(tblock.PackMethod != 0) Die("Non PCM VOC block");
+	if (lastblocktype != 8)
+	{
+	    speed = 256000000/(65536 - (tblock.TimeConstant << 8));
+	    bits = 8;
+	    stereo = 0;
+	}
+	bytecount = DATALEN(ccblock) -2;
+	diskread(thefd, bytecount, NULL, 0, speed, bits, stereo);
+	lastblocktype = 1;
+	}
+	break;
+    case 8:
+	{
+	blockT8 tblock;
+	read(thefd, (char*)&tblock, sizeof(tblock));
+	if(tblock.PackMethod != 0) Die("Non PCM VOC block");
+	speed = 256000000/(65536 - tblock.TimeConstant);
+	bits = 8;
+	stereo = tblock.VoiceMode;
+	if (stereo) speed >>=1;
+	lastblocktype = 8;
+	}
+	break;
+    case 9:
+	{
+	blockT9 tblock;
+	read(thefd, (char*)&tblock, sizeof(tblock));
+	if(tblock.Format != 0 && tblock.Format != 4)
+	    Die("Non PCM VOC block");
+	speed = tblock.SamplesPerSec;
+	bits = tblock.BitsPerSample;
+	stereo = tblock.Channels - 1;
+	bytecount = DATALEN(ccblock) - 12;
+	diskread(thefd, bytecount, NULL, 0, speed, bits, stereo);
+	lastblocktype = 9;
+	}
+	break;
+    case 0:
+#ifdef DEBUG
+	fprintf(stderr, "Terminating\n");
+#endif
+	diskread(thefd, -1, NULL, 1, speed, bits, stereo);
+	quit = 1;
+	break;
+    case 6:
+	inloop = 1;
+	read(thefd, (char*)&loop_times, 2);
+	loop_times++;
+#ifdef DEBUG
+fprintf(stderr, "Beginning loop %d\n", loop_times);
+#endif
+	loop_pos = lseek(thefd, 0, SEEK_CUR);
+	if(loop_pos == -1)
+	{
+	    fprintf(stderr, "Input not seekable - loop will only be played once\n");
+	    loop_times = 1;
+	}
+	lastblocktype = ccblock.BlockID;
+	break;
+    case 7:
+	if(!inloop)
+	{
+	    fprintf(stderr, "Loop end with no loop start - ignoring\n");
+	    break;
+	}
+	if(loop_times != 0xFFFF) --loop_times;
+	if(loop_times)
+	{
+#ifdef DEBUG
+	    fprintf(stderr, "Looping...\n");
+#endif
+	    lseek(thefd, loop_pos, SEEK_SET);
+	}
+	else
+	    inloop = 0;
+	lastblocktype = ccblock.BlockID;
+	break;
+    default:
+	{
+	int rd = 0, trgt = BUFSIZ;
+	char junkbuf[BUFSIZ];
+    
+	fprintf(stderr, "Ignored\n");
+	bytecount = DATALEN(ccblock);
+	while(rd < bytecount)
+	{
+	    if (rd + trgt > bytecount)
+		trgt = bytecount - rd;
+	    count = read(thefd, junkbuf, trgt);
+	    if (count < 0) ErrDie("read");
+	    if (count == 0) Die("premature eof in input");
+	    rd += count;
+	}
+	lastblocktype = ccblock.BlockID;
+	}
+	break;
+    }
+    }
+}
--- bplay-0.96.orig/patch
+++ bplay-0.96/patch
@@ -0,0 +1,168 @@
+diff -ur bplay-0.95/Makefile bplay-0.96/Makefile
+--- bplay-0.95/Makefile Tue Apr  2 21:58:25 1996
++++ bplay-0.96/Makefile Fri Jan  3 18:44:52 1997
+@@ -3,7 +3,7 @@
+ SRCS = bplay.c sndfunc.o shmbuf.c
+ 
+ CC = gcc
+-CFLAGS = -Wall -O2 -m486 # -DDEBUG # -DUSEBUFFLOCK
++CFLAGS = -Wall -O2 -m486 -DUSEBUFFLOCK -DDEBUG
+ LDFLAGS = 
+ LIBS =
+ 
+diff -ur bplay-0.95/README bplay-0.96/README
+--- bplay-0.95/README   Tue Apr  2 22:10:12 1996
++++ bplay-0.96/README   Sun Feb  9 21:22:43 1997
+@@ -1,4 +1,4 @@
+-This is version 0.95 of my buffered audio play/record program for Linux.
++This is version 0.96 of my buffered audio play/record program for Linux.
+ Note that this is BETA software and may not work for you.
+ Please mail me with any bugs/feature enhancements etc.
+ 
+@@ -26,7 +26,7 @@
+ also runs at the highest possible priority. Using this method it is
+ possible to record at full speed (44.1kHz 16 bit stero, or about
+ 176Kb/s) without overruns on 486DX/33 using 8bit DMA with a slow IDE
+-disk in multiuser mode untill the disk gets very close to full (ie the
++disk in multiuser mode until the disk gets very close to full (ie the
+ head is seeking all over the disk to find free blocks and can't keep
+ up).
+ 
+@@ -70,4 +70,4 @@
+ Provide a Tk front end.
+ 
+ David Monro
+-davidm@gh.cs.usyd.edu.au
++davidm@cs.usyd.edu.au
+diff -ur bplay-0.95/bplay.1 bplay-0.96/bplay.1
+--- bplay-0.95/bplay.1  Tue Apr  2 21:30:10 1996
++++ bplay-0.96/bplay.1  Thu Jan  2 18:26:48 1997
+@@ -54,24 +54,22 @@
+ The \-t, \-T, \-j and \-J options may do strange things when playing VOC
+ files.
+ .PP
+-There are limitations on recording WAV and VOC format files - in
+-particular, WAV files may not be more than 16Mb long. VOC files are only
++There are limitations on recording VOC format files - specifically
++VOC files are only
+ recorded in the newer 1.20 version of the format, which older player
+ programs may choke on. These limitations should be fixed in v1.0.
+ .PP
+ 12 bit samples are not currently supported. This may be fixed if someone
+ tells me the format used for 12 bit samples - my sound card doesn't
+-support 12 bit mode.
++support 12 bit mode. I'm not sure that the sound driver supports them
++either though.
+ .PP
+ This program runs setuid root. This is required because it uses
+ setpriority() to run at the highest possible priority, and also locks
+ down the buffers it uses to avoid them being swapped out.
+-.PP
+-Currently, the buffers are not locked down, as this appears to be a
+-surefire way to bring down the machine.
+ .SH AUTHOR
+ David Monro
+-davem@gh.cs.usyd.edu.au
++davidm@cs.usyd.edu.au
+ .PP
+ The option parsing code was originally taken from
+ .B vplay
+diff -ur bplay-0.95/bplay.lsm bplay-0.96/bplay.lsm
+--- bplay-0.95/bplay.lsm    Tue Apr  2 22:13:14 1996
++++ bplay-0.96/bplay.lsm    Sun Feb  9 21:46:38 1997
+@@ -1,17 +1,19 @@
+ Begin3
+ Title:          bplay
+-Version:        0.95
+-Entered-date:   Tue Apr  2
+-Description:    A buffered audio play/record program
++Version:        0.96
++Entered-date:   Sun Feb 9, 1997
++Description:    A buffered audio play/record program. Handles WAV, VOC
++                and raw sound files. Should allow glith-free recording
++                at 44100kHz/16 bit stereo on most hardware.
+ Keywords:       audio play record
+-Author:         davidm@gh.cs.usyd.edu.au (David Monro)
+-Maintained-by:  davidm@gh.cs.usyd.edu.au (David Monro)
+-Primary-site:   milawa.gh.cs.usyd.edu.au /pub/davidm
+-       18kB    bplay-0.95.tar.gz
+-       542 bplay.lsm
++Author:         davidm@cs.usyd.edu.au (David Monro)
++Maintained-by:  davidm@cs.usyd.edu.au (David Monro)
++Primary-site:   milawa.psrg.cs.usyd.edu.au /pub/davidm
++       18kB    bplay-0.96.tar.gz
++       1kB bplay.lsm
+ Alternate-site: sunsite.unc.edu /pub/linux/apps/sound/players
+-       18kB    bplay-0.95.tar.gz
+-       542 bplay.lsm
++       18kB    bplay-0.96.tar.gz
++       1kB bplay.lsm
+ Platform:       Linux and supported sound card
+ Copying-policy: GPL
+ End
+diff -ur bplay-0.95/fmtheaders.h bplay-0.96/fmtheaders.h
+--- bplay-0.95/fmtheaders.h Tue Apr  2 20:04:29 1996
++++ bplay-0.96/fmtheaders.h Fri Jan  3 15:53:12 1997
+@@ -5,7 +5,7 @@
+ 
+ /* Definitions for .VOC files */
+ 
+-#define VOC_MAGIC  "Creative Voice File\0x1A"
++#define VOC_MAGIC  "Creative Voice File\032"
+ 
+ #define DATALEN(bp)    ((u_long)(bp.BlockLen[0]) | \
+                          ((u_long)(bp.BlockLen[1]) << 8) | \
+diff -ur bplay-0.95/shmbuf.c bplay-0.96/shmbuf.c
+--- bplay-0.95/shmbuf.c Tue Apr  2 20:34:12 1996
++++ bplay-0.96/shmbuf.c Sat Nov 23 17:57:40 1996
+@@ -102,7 +102,7 @@
+    ErrDie("shmctl");
+ 
+ #if USEBUFFLOCK
+-   /* Ok, go su to lock the buffers down */
++   /* Ok, go root to lock the buffers down */
+     if(setreuid(geteuid(), getuid()) == -1)
+     {
+    fprintf(stderr, "%s: setreuid: %s: continuing anyway\n",
+diff -ur bplay-0.95/sndfunc.c bplay-0.96/sndfunc.c
+--- bplay-0.95/sndfunc.c    Tue Apr  2 20:44:09 1996
++++ bplay-0.96/sndfunc.c    Sun Dec 22 18:38:37 1996
+@@ -59,11 +59,11 @@
+    sync_audio();
+ 
+    /* Set the sample speed, size and stereoness */
+-   if (ioctl(audio, SNDCTL_DSP_SPEED, &speed) < 0)
+-       ErrDie(AUDIO);
+    if (ioctl(audio, SNDCTL_DSP_SAMPLESIZE, &bits) < 0)
+        ErrDie(AUDIO);
+    if (ioctl(audio, SNDCTL_DSP_STEREO, &stereo) < 0)
++       ErrDie(AUDIO);
++   if (ioctl(audio, SNDCTL_DSP_SPEED, &speed) < 0)
+        ErrDie(AUDIO);
+     }
+     oldspeed = speed; oldbits = bits; oldstereo = stereo;
+
+--1317126497-1710661401-855486428=:9124--
+
+(END) Command ('i' to return to index):  void init_modules(void)
+ {
++       struct module_symbol *start;
++
+        kernel_module.nsyms = __stop___ksymtab - __start___ksymtab;
++
++       /* Work around a bug in binutils < 2.7.0.4 ish that doesn't match
++          up magic section symbols with the section they belong with.  */
++
++       start = __stop___ksymtab - kernel_module.nsyms;
++       if (start != __start___ksymtab) {
++               printk(KERN_WARNING "Binutils broken -- "
++                      "ksymtab start symbol not aligned\n");
++
++               kernel_module.syms = start;
++               kernel_module.ex_table_start = __stop___ex_table -
++                       (__stop___ex_table - __start___ex_table);
++       }
+
+ #ifdef __alpha__
+        {
+
--- bplay-0.96.orig/debian/changelog
+++ bplay-0.96/debian/changelog
@@ -0,0 +1,115 @@
+bplay (0.96-9) unstable; urgency=low
+
+  * Fixes bug with long records (#21623, #21642, #37478)
+      patch by Riku Saikkonen (rjs@isil.lloke.dna.fi)
+  * Fixes wrong RIFF header (#11562)
+      patch in bug report by lebrun@hermes.kawo1.rwth-aarchen.de
+  * Kill a second process on error (#15779, #16180, #35007)
+  * We don't play AU and have never done it. (#32540)
+  * Standard-Version: 3.0.1
+
+ -- Peter Makholm <peter@makholm.net>  Mon,  2 Aug 1999 21:43:12 +0200
+
+bplay (0.96-8) unstable; urgency=low
+
+  * New maintainer
+  * Uses update-mime (close #26741)
+  * Include diffs from Paul Slootman (close #28010)
+    - 4th arg for semctl() is a union, not an int
+  * Fixed layout in man page (part of #21623)
+
+ -- Peter Makholm <peter@makholm.net>  Wed, 26 May 1999 22:31:08 +0200
+
+bplay (0.96-7) frozen unstable; urgency=high
+
+  * New maintainer
+  * Removed suid from the binary.  This is not needed, and is a possible
+    security risk.  Furthermore, it allowed any user on the system to play
+    sound, and maybe even spy on you by recording from the microphone!
+    Instead people allowed to this should be in group sound.
+
+ -- Norbert Veber <nveber@debian.org>  Sat, 13 Jun 1998 22:21:00 -0500
+
+bplay (0.96-6) frozen unstable; urgency=low
+
+  * mime-support call: we are bplay, not playmidi
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Tue, 17 Mar 1998 18:36:25 +0100
+
+bplay (0.96-5) unstable; urgency=low
+
+  * call dh_suidregister
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Sun, 15 Mar 1998 23:15:07 +0100
+
+bplay (0.96-4) unstable; urgency=low
+
+  * Allow other audio devices (Bug# 19650)
+  * Allow user to specify buffer sizes (Bug# 19650)
+  * Switched to debhelpher (Bug#  18693)
+  * Fixed copyright (lintian)
+  * Fixed type in manualpage (Bug# 19080)
+  * Register with mime-support (Bug# 18692)
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Sun, 15 Mar 1998 22:48:17 +0100
+
+bplay (0.96-3) unstable; urgency=low
+
+  * Removed -m486 from compile options (Bug# 13664)
+  * Removed debugging code 
+  * Pristine sources
+  * libc6 / glibc build
+  * Check if we are root before trying to lock a buffer or set priority
+  * No longer use debmake
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Tue,  7 Oct 1997 13:55:58 +0200
+
+bplay (0.96-2) unstable; urgency=LOW
+
+  * Added dependencies to control file for libc
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Mon, 14 Jul 1997 01:13:00 +0200
+
+bplay (0.96-1) unstable; urgency=LOW
+
+  * New upstream version
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Mon, 10 Feb 1997 21:29:41 +0100
+
+bplay (0.95-5) unstable; urgency=LOW
+
+  * Moved to debmake
+  * Fixed double-speed playing bug. Patch by author.
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sun, 19 Jan 1997 23:45:55 +0100
+
+bplay (0.95-4) unstable; urgency=LOW
+
+  * Made copyright a symlink to /usr/doc/copyright/GPL
+  * Renamed debian changelog to changelog.Debian
+  * Compress manpages
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sat, 26 Oct 1996 18:36:12 +0200
+
+bplay (0.95-3) unstable; urgency=low
+
+  * Moved to new packaging format
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sun, 22 Sep 1996 01:05:44 +0200
+
+bplay (0.95-2); priority=LOW
+
+  * New maintainer: Wichert Akkerman <wakkerma@wi.leidenuniv.nl>
+  * Added extra include to prevent a compiler warning
+
+ -- Wichert Akkerman Thu Jul 11 21:44:06 MET DST 1996
+
+bplay (0.95-1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sun, 19 Jan 1997 23:43:46 +0100
+
+Local variables:
+mode: debian-changelog
+End:
--- bplay-0.96.orig/debian/postinst.debhelper
+++ bplay-0.96/debian/postinst.debhelper
@@ -0,0 +1,56 @@
+# Automatically added by dh_installdocs
+if [ "$1" = "configure" ]; then
+	if [ -d /usr/doc -a ! -e /usr/doc/bplay -a -d /usr/share/doc/bplay ]; then
+		ln -sf ../share/doc/bplay /usr/doc/bplay
+	fi
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ "$1" = "configure" ]; then
+	if [ -d /usr/doc -a ! -e /usr/doc/bplay -a -d /usr/share/doc/bplay ]; then
+		ln -sf ../share/doc/bplay /usr/doc/bplay
+	fi
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ "$1" = "configure" ]; then
+	if [ -d /usr/doc -a ! -e /usr/doc/bplay -a -d /usr/share/doc/bplay ]; then
+		ln -sf ../share/doc/bplay /usr/doc/bplay
+	fi
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ "$1" = "configure" ]; then
+	if [ -d /usr/doc -a ! -e /usr/doc/bplay -a -d /usr/share/doc/bplay ]; then
+		ln -sf ../share/doc/bplay /usr/doc/bplay
+	fi
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ "$1" = "configure" ]; then
+	if [ -d /usr/doc -a ! -e /usr/doc/bplay -a -d /usr/share/doc/bplay ]; then
+		ln -sf ../share/doc/bplay /usr/doc/bplay
+	fi
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ "$1" = "configure" ]; then
+	if [ -d /usr/doc -a ! -e /usr/doc/bplay -a -d /usr/share/doc/bplay ]; then
+		ln -sf ../share/doc/bplay /usr/doc/bplay
+	fi
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ "$1" = "configure" ]; then
+	if [ -d /usr/doc -a ! -e /usr/doc/bplay -a -d /usr/share/doc/bplay ]; then
+		ln -sf ../share/doc/bplay /usr/doc/bplay
+	fi
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ "$1" = "configure" ]; then
+	if [ -d /usr/doc -a ! -e /usr/doc/bplay -a -d /usr/share/doc/bplay ]; then
+		ln -sf ../share/doc/bplay /usr/doc/bplay
+	fi
+fi
+# End automatically added section
--- bplay-0.96.orig/debian/control
+++ bplay-0.96/debian/control
@@ -0,0 +1,20 @@
+Source: bplay
+Section: sound
+Priority: extra
+Maintainer: Peter Makholm <peter@makholm.net>
+Standards-Version: 3.0.1
+
+Package: bplay
+Architecture: any
+Depends: ${shlibs:Depends}
+Description: Buffered audio file player/recorder
+ The bplay package provides a simple command-line utility for playing
+ and recording audio files in raw sample, VOC and WAV formats.
+ .
+ To use this program you need a soundcard of some kind and the
+ appropriate driver configured into your kernel.
+ .
+ When run the program creates two processes which share a memory
+ buffer.  It does reading/writing on the disk and the sound device
+ simultaneously, in order to be less liable to `pause' because the
+ disk is too slow or too busy.
--- bplay-0.96.orig/debian/prerm.debhelper
+++ bplay-0.96/debian/prerm.debhelper
@@ -0,0 +1,40 @@
+# Automatically added by dh_installdocs
+if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/bplay ]; then
+	rm -f /usr/doc/bplay
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/bplay ]; then
+	rm -f /usr/doc/bplay
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/bplay ]; then
+	rm -f /usr/doc/bplay
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/bplay ]; then
+	rm -f /usr/doc/bplay
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/bplay ]; then
+	rm -f /usr/doc/bplay
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/bplay ]; then
+	rm -f /usr/doc/bplay
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/bplay ]; then
+	rm -f /usr/doc/bplay
+fi
+# End automatically added section
+# Automatically added by dh_installdocs
+if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/bplay ]; then
+	rm -f /usr/doc/bplay
+fi
+# End automatically added section
--- bplay-0.96.orig/debian/rules
+++ bplay-0.96/debian/rules
@@ -0,0 +1,70 @@
+#!/usr/bin/make -f
+# Based on the sample debian.rules by Ian Jackson
+# Modified to be a prototype for debmake by Christoph Lameter <clameter@debian.org>
+
+package=bplay
+
+build: 
+	$(checkdir)
+	make
+
+clean:
+	$(checkdir)
+	-rm -f build
+	-make clean
+	-rm -rf debian/tmp debian/files* core
+
+binary-indep:	checkroot build
+	$(checkdir)
+# There are no architecture-independent files to be uploaded
+# generated by this package.  If there were any they would be
+# made here.
+
+binary-arch:	checkroot build
+	$(checkdir)
+	-rm -rf debian/tmp
+	-rm -f debian/tmp/{postinst,prerm}.debhelpber
+
+# Install documentation
+	install -d debian/tmp/usr/doc/$(package)
+	install -o root -g root -m 644 README debian/tmp/usr/doc/$(package)
+
+# Install manpages
+	install -d debian/tmp/usr/share/man/man1
+	install -o root -g root -m 644 bplay.1 debian/tmp/usr/share/man/man1
+	ln -s bplay.1 debian/tmp/usr/share/man/man1/brec.1
+
+# Install executables
+	install -d debian/tmp/usr/bin
+	install -s -o root -g root -m 755 bplay debian/tmp/usr/bin
+	ln -s bplay debian/tmp/usr/bin/brec
+
+# Install MIME stuff
+	install -d debian/tmp/usr/lib/mime/packages/
+	install -o root -g root -m 644 debian/mime debian/tmp/usr/lib/mime/packages/bplay
+
+# Install everything
+	dh_installdocs README
+	dh_installchangelogs
+	strip debian/tmp/usr/bin/bplay
+	dh_compress
+	dh_fixperms
+	dh_installdeb
+	dh_shlibdeps
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+define checkdir
+	test -f debian/rules
+endef
+
+# Below here is fairly generic really
+
+binary:		binary-indep binary-arch
+
+checkroot:
+	$(checkdir)
+	test root = "`whoami`"
+
+.PHONY: build binary binary-arch binary-indep clean checkroot
--- bplay-0.96.orig/debian/dirs
+++ bplay-0.96/debian/dirs
@@ -0,0 +1,3 @@
+usr/doc
+usr/man/man1
+usr/bin
--- bplay-0.96.orig/debian/substvars
+++ bplay-0.96/debian/substvars
@@ -0,0 +1 @@
+shlibs:Depends=libc6 (>= 2.1)
--- bplay-0.96.orig/debian/copyright
+++ bplay-0.96/debian/copyright
@@ -0,0 +1,22 @@
+This package was debianized by Ian Jackson <ijackson@gnu.ai.mit.edu>
+
+It was downloaded from ftp site sunsite.unc.edu.
+
+Copyright:
+
+Program Copyright (C)1996 David Monro.
+Modifications for Debian GNU/Linux Copyright (C)1996 Ian Jackson.
+Enhancements for Debian GNU/Linux by W.Akkerman
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+On Debian/GNU Linux system you can find a copy of this license in
+`/usr/doc/copyright/GPL
--- bplay-0.96.orig/debian/postinst
+++ bplay-0.96/debian/postinst
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+set -e
+
+if test -x /usr/sbin/update-mime; then update-mime; fi
+
+#DEBHELPER#
--- bplay-0.96.orig/debian/mime
+++ bplay-0.96/debian/mime
@@ -0,0 +1,3 @@
+audio/basic; bplay %s; description="RAW audio format" ; priority=5
+audio/x-wav; bplay %s; description="WAV audio format" ; priority=5
+audio/x-voc; bplay %s; description="VOC audio format" ; priority=5
--- bplay-0.96.orig/debian/postrm
+++ bplay-0.96/debian/postrm
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+set -e
+
+if test -x /usr/sbin/update-mime; then update-mime; fi
+
+#DEBHELPER#
--- bplay-0.96.orig/debian/changelog~
+++ bplay-0.96/debian/changelog~
@@ -0,0 +1,115 @@
+bplay (0.96-9) unstable; urgency=low
+
+  * Fixes bug with long records (#21623, #21642, #37478)
+      patch by Riki (I've just deleted his name and adress)
+  * Fixes wrong RIFF header (#11562)
+      patch in bug report by lebrun@hermes.kawo1.rwth-aarchen.de
+  * Kill a second process on error (#15779, #16180, #35007)
+  * We don't play AU and have never done it. (#32540)
+  * Standard-Version: 3.0.1
+
+ -- Peter Makholm <peter@makholm.net>  Mon,  2 Aug 1999 21:43:12 +0200
+
+bplay (0.96-8) unstable; urgency=low
+
+  * New maintainer
+  * Uses update-mime (close #26741)
+  * Include diffs from Paul Slootman (close #28010)
+    - 4th arg for semctl() is a union, not an int
+  * Fixed layout in man page (part of #21623)
+
+ -- Peter Makholm <peter@makholm.net>  Wed, 26 May 1999 22:31:08 +0200
+
+bplay (0.96-7) frozen unstable; urgency=high
+
+  * New maintainer
+  * Removed suid from the binary.  This is not needed, and is a possible
+    security risk.  Furthermore, it allowed any user on the system to play
+    sound, and maybe even spy on you by recording from the microphone!
+    Instead people allowed to this should be in group sound.
+
+ -- Norbert Veber <nveber@debian.org>  Sat, 13 Jun 1998 22:21:00 -0500
+
+bplay (0.96-6) frozen unstable; urgency=low
+
+  * mime-support call: we are bplay, not playmidi
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Tue, 17 Mar 1998 18:36:25 +0100
+
+bplay (0.96-5) unstable; urgency=low
+
+  * call dh_suidregister
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Sun, 15 Mar 1998 23:15:07 +0100
+
+bplay (0.96-4) unstable; urgency=low
+
+  * Allow other audio devices (Bug# 19650)
+  * Allow user to specify buffer sizes (Bug# 19650)
+  * Switched to debhelpher (Bug#  18693)
+  * Fixed copyright (lintian)
+  * Fixed type in manualpage (Bug# 19080)
+  * Register with mime-support (Bug# 18692)
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Sun, 15 Mar 1998 22:48:17 +0100
+
+bplay (0.96-3) unstable; urgency=low
+
+  * Removed -m486 from compile options (Bug# 13664)
+  * Removed debugging code 
+  * Pristine sources
+  * libc6 / glibc build
+  * Check if we are root before trying to lock a buffer or set priority
+  * No longer use debmake
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Tue,  7 Oct 1997 13:55:58 +0200
+
+bplay (0.96-2) unstable; urgency=LOW
+
+  * Added dependencies to control file for libc
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Mon, 14 Jul 1997 01:13:00 +0200
+
+bplay (0.96-1) unstable; urgency=LOW
+
+  * New upstream version
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Mon, 10 Feb 1997 21:29:41 +0100
+
+bplay (0.95-5) unstable; urgency=LOW
+
+  * Moved to debmake
+  * Fixed double-speed playing bug. Patch by author.
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sun, 19 Jan 1997 23:45:55 +0100
+
+bplay (0.95-4) unstable; urgency=LOW
+
+  * Made copyright a symlink to /usr/doc/copyright/GPL
+  * Renamed debian changelog to changelog.Debian
+  * Compress manpages
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sat, 26 Oct 1996 18:36:12 +0200
+
+bplay (0.95-3) unstable; urgency=low
+
+  * Moved to new packaging format
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sun, 22 Sep 1996 01:05:44 +0200
+
+bplay (0.95-2); priority=LOW
+
+  * New maintainer: Wichert Akkerman <wakkerma@wi.leidenuniv.nl>
+  * Added extra include to prevent a compiler warning
+
+ -- Wichert Akkerman Thu Jul 11 21:44:06 MET DST 1996
+
+bplay (0.95-1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sun, 19 Jan 1997 23:43:46 +0100
+
+Local variables:
+mode: debian-changelog
+End:

Reply to: