1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-19 08:13:21 +00:00
freebsd-ports/audio/cdplay/files/patch-ab
Tim Vanderhoek c4cb43a7d3 Patches for:
1) Avoid becoming confused about the current state of "pause" when
   rewinding/forwarding to the prev/next track.
2) Use capital 'E' instead of lower 'e' for Eject.  The 'e' button
   is too close to the 'r' button and accidentally ejecting when you're
   trying to rewind is really annoying.
3) When multiple subsequent r)ewind or f)orward operations are used
   before the ioctl() from an earlier r)ewind or f)orward has returned,
   perform the delayed 'r' and 'f' operations all at once rather than
   individually (and serially).  This avoids a buffer overflow crash
   that could occur and also makes the 'r' and 'f' controls much more
   usable

Update PORTREVISION for these improvements.
2003-05-19 20:13:03 +00:00

144 lines
3.5 KiB
Plaintext

$FreeBSD$
--- cd.c.orig Mon May 19 15:44:40 2003
+++ cd.c Mon May 19 15:53:44 2003
@@ -98,8 +98,16 @@
cd_play.end_s=cdinfo.s_sec[cdinfo.l_track-1];
cd_play.end_f=cdinfo.s_frame[cdinfo.l_track-1];
- if(ioctl (cd_fd, CDIOCPLAYMSF, (char *) &cd_play)<0)
- per();
+ if(ioctl (cd_fd, CDIOCPLAYMSF, (char *) &cd_play)<0) {
+ /* Hack for IDE CD-ROMs */
+ if (cd_play.start_s < 2) {
+ cd_play.start_s=2;
+ if(ioctl (cd_fd, CDIOCPLAYMSF, (char *) &cd_play)<0)
+ per();
+ } else
+ per();
+ }
+ cdinfo.pause=0;
}
/* Skips one track forward */
@@ -111,7 +119,7 @@
/* Quess */
void prev(void)
{
- if(cdinfo.c_sec<1)
+ if(cdinfo.c_sec<4)
play_track(cdinfo.c_track-1);
else play_track(cdinfo.c_track);
}
@@ -141,17 +149,59 @@
}
}
+/* Softly pauses the cd, or unpauses, as appropriate */
+void cdsoftpause(void)
+{
+ struct ioc_vol real_vol, cur_vol;
+ int i;
+
+ if(ioctl(cd_fd,CDIOCGETVOL,(char *) &real_vol)) per();
+ cur_vol = real_vol;
+
+ if(cdinfo.pause){
+ message="continue";
+ memset (cur_vol.vol, 0, sizeof(cur_vol.vol));
+ if(ioctl(cd_fd,CDIOCSETVOL,(char *) &cur_vol)) per();
+ if(ioctl(cd_fd,CDIOCRESUME)<0) per(); else cdinfo.pause=0;
+ for (i=0; i<20; usleep(21), i++) {
+ cur_vol.vol[0] += (real_vol.vol[0] / 20);
+ cur_vol.vol[1] += (real_vol.vol[1] / 20);
+ cur_vol.vol[2] += (real_vol.vol[2] / 20);
+ cur_vol.vol[3] += (real_vol.vol[3] / 20);
+ if(ioctl(cd_fd,CDIOCSETVOL,(char *) &cur_vol)) per();
+ }
+ if(ioctl(cd_fd,CDIOCSETVOL,(char *) &real_vol)) per();
+ }
+ else {
+ message="pause";
+ for (i=0; i<20; usleep(21), i++) {
+ cur_vol.vol[0] -= (real_vol.vol[0] / 20);
+ cur_vol.vol[1] -= (real_vol.vol[1] / 20);
+ cur_vol.vol[2] -= (real_vol.vol[2] / 20);
+ cur_vol.vol[3] -= (real_vol.vol[3] / 20);
+ if(ioctl(cd_fd,CDIOCSETVOL,(char *) &cur_vol)) per();
+ }
+ if(ioctl (cd_fd, CDIOCPAUSE)<0) per(); else cdinfo.pause=1;
+ if(ioctl (cd_fd, CDIOCSETVOL,(char *) &real_vol)) per();
+ }
+}
+
/* Huge kludge */
-void ff(void)
+void ff(int n_times)
{
+ int secs;
struct ioc_play_msf cd_play;
- if(cdinfo.c_seca%60+5>=60){
- cd_play.start_s=((cdinfo.c_seca%60)+5)%60;
+ secs=4*n_times;
+
+ if (secs > 59) secs=59;
+
+ if(cdinfo.c_seca%60+secs>=60){
+ cd_play.start_s=((cdinfo.c_seca%60)+secs)%60;
cd_play.start_m=cdinfo.c_seca/60+1;
}
else {
- cd_play.start_s=(cdinfo.c_seca%60)+5;
+ cd_play.start_s=(cdinfo.c_seca%60)+secs;
cd_play.start_m=cdinfo.c_seca/60;
}
cd_play.start_f=1;
@@ -160,19 +210,25 @@
cd_play.end_f=cdinfo.s_frame[cdinfo.l_track-1];
if(ioctl(cd_fd,CDIOCPLAYMSF,(char *) &cd_play)<0) per();
+ cdinfo.pause=0;
}
/* Hi mom!! */
-void rew(void)
+void rew(int n_times)
{
+ int secs;
struct ioc_play_msf cd_play;
- if(cdinfo.c_seca%60-5<0){
- cd_play.start_s=((cdinfo.c_seca%60)-5)+60;
+ secs=4*n_times;
+
+ if (secs > 59) secs=59;
+
+ if(cdinfo.c_seca%60-secs<0){
+ cd_play.start_s=((cdinfo.c_seca%60)-secs)+60;
cd_play.start_m=cdinfo.c_seca/60-1;
}
else {
- cd_play.start_s=(cdinfo.c_seca%60)-5;
+ cd_play.start_s=(cdinfo.c_seca%60)-secs;
cd_play.start_m=cdinfo.c_seca/60;
}
cd_play.start_f=1;
@@ -181,6 +237,7 @@
cd_play.end_f=cdinfo.s_frame[cdinfo.l_track-1];
if(ioctl(cd_fd,CDIOCPLAYMSF,(char *) &cd_play)<0) per();
+ cdinfo.pause=0;
}
/* Spit cd out */
@@ -192,6 +249,7 @@
per();
close(cd_fd);
cdinfo.eject=1;
+ cdinfo.pause=1;
}