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: