From owner-freebsd-bugs Fri Nov 7 08:10:04 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.7/8.8.7) id IAA07063 for bugs-outgoing; Fri, 7 Nov 1997 08:10:04 -0800 (PST) (envelope-from owner-freebsd-bugs) Received: (from gnats@localhost) by hub.freebsd.org (8.8.7/8.8.7) id IAA07053; Fri, 7 Nov 1997 08:10:01 -0800 (PST) (envelope-from gnats) Resent-Date: Fri, 7 Nov 1997 08:10:01 -0800 (PST) Resent-Message-Id: <199711071610.IAA07053@hub.freebsd.org> Resent-From: gnats (GNATS Management) Resent-To: freebsd-bugs Resent-Reply-To: FreeBSD-gnats@FreeBSD.ORG, max@iclub.nsu.ru Received: (from nobody@localhost) by hub.freebsd.org (8.8.7/8.8.7) id IAA06726; Fri, 7 Nov 1997 08:04:45 -0800 (PST) (envelope-from nobody) Message-Id: <199711071604.IAA06726@hub.freebsd.org> Date: Fri, 7 Nov 1997 08:04:45 -0800 (PST) From: max@iclub.nsu.ru To: freebsd-gnats-submit@FreeBSD.ORG X-Send-Pr-Version: www-1.0 Subject: bin/4969: cdcontrol plays incorrect audio tracks in 'MSF relative to track' mode Sender: owner-freebsd-bugs@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk >Number: 4969 >Category: bin >Synopsis: cdcontrol plays incorrect audio tracks in 'MSF relative to track' mode >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Nov 7 08:10:01 PST 1997 >Last-Modified: >Originator: Max Khon >Organization: MCA Software Group >Release: 2.2.5-STABLE >Environment: FreeBSD iclub.nsu.ru 2.2.5-STABLE FreeBSD 2.2.5-STABLE #0: Sat Nov 1 15:42:33 NS 1997 max@iclub.nsu.ru:/usr/src/sys/compile/iclub i386 >Description: cdcontrol play track (n+1) instead of n when using 'MSF relative to track' mode >How-To-Repeat: husky:~$cdcontrol -f wcd0 Compact Disc Control utility, version 2.0 Type `?' for command list cdcontrol> play 5 0:0 (actually track 6 is played) >Fix: apply the following patch === cut here === --- cdcontrol.c.orig Fri Nov 7 19:32:56 1997 +++ cdcontrol.c Fri Nov 7 21:44:58 1997 @@ -16,6 +16,11 @@ * 11-Oct-1995: Serge V.Vakulenko * New eject algorithm. * Some code style reformatting. + * + * 07-Nov-1997: Max Khon + * 'play MSF relative to track' some fixes + * (cdcontrol played incorrect track). + * */ #ifndef lint @@ -425,7 +430,7 @@ /* * Play MSF m1:s1 [ .f1 ] [ m2:s2 [ .f2 ] ] * - * Will now also undestand timed addresses relative + * Will now also understand timed addresses relative * to the beginning of a track in the form... * * tr1 m1:s1[.f1] [[tr2] [m2:s2[.f2]]] @@ -499,10 +504,9 @@ goto Try_Absolute_Timed_Addresses; Play_Relative_Addresses: - if (! tr1) - tr1 = 1; - else if (tr1 > n) - tr1 = n; + if (tr1 == 0 || tr1 > n) + goto Clean_up; + tr1--; if (msf) { tm = toc_buffer[tr1].addr.msf.minute; @@ -511,16 +515,6 @@ } else lba2msf(ntohl(toc_buffer[tr1].addr.lba), &tm, &ts, &tf); - if ((m1 > tm) - || ((m1 == tm) - && ((s1 > ts) - || ((s1 == ts) - && (f1 > tf))))) { - printf ("Track %d is not that long.\n", tr1); - return (0); - } - - tr1--; f1 += tf; if (f1 >= 75) { @@ -536,42 +530,16 @@ m1 += tm; - if (! tr2) { - if (m2 || s2 || f2) { - tr2 = tr1; - f2 += f1; - if (f2 >= 75) { - s2 += f2 / 75; - f2 %= 75; - } - - s2 += s1; - if (s2 > 60) { - m2 += s2 / 60; - s2 %= 60; - } - - m2 += m1; - } else { - tr2 = n; - if (msf) { - m2 = toc_buffer[n].addr.msf.minute; - s2 = toc_buffer[n].addr.msf.second; - f2 = toc_buffer[n].addr.msf.frame; - } else { - lba2msf(ntohl(toc_buffer[n].addr.lba), - &tm, &ts, &tf); - m2 = tm; - s2 = ts; - f2 = tf; - } - } - } else if (tr2 > n) { - tr2 = n; - m2 = s2 = f2 = 0; + if (tr2 == 0 && (m2 || s2 || f2)) { + tm = m1; + ts = s1; + tf = f1; } else { - if (m2 || s2 || f2) + if (tr2 == 0 || tr2 > n) + tr2 = n; + else tr2--; + if (msf) { tm = toc_buffer[tr2].addr.msf.minute; ts = toc_buffer[tr2].addr.msf.second; @@ -579,6 +547,13 @@ } else lba2msf(ntohl(toc_buffer[tr2].addr.lba), &tm, &ts, &tf); + } + + if (tr2 == n) { + m2 = tm; + s2 = ts; + f2 = tf; + } else { f2 += tf; if (f2 >= 75) { s2 += f2 / 75; @@ -594,22 +569,6 @@ m2 += tm; } - if (msf) { - tm = toc_buffer[n].addr.msf.minute; - ts = toc_buffer[n].addr.msf.second; - tf = toc_buffer[n].addr.msf.frame; - } else - lba2msf(ntohl(toc_buffer[n].addr.lba), - &tm, &ts, &tf); - if ((tr2 < n) - && ((m2 > tm) - || ((m2 == tm) - && ((s2 > ts) - || ((s2 == ts) - && (f2 > tf)))))) { - printf ("The playing time of the disc is not that long.\n"); - return (0); - } return (play_msf (m1, s1, f1, m2, s2, f2)); Try_Absolute_Timed_Addresses: === cut here === the patch does not resolve all the problems, because args parsing in 'play MSF relative to track' is broken >Audit-Trail: >Unformatted: