LBA addition to new commands

This commit is contained in:
Andrey A. Chernov 1996-02-09 01:16:23 +00:00
parent 50ab12d9c0
commit 8fd5ebe3b0

View File

@ -17,7 +17,7 @@
* New eject algorithm.
* Some code style reformatting.
*
* $Id: cdcontrol.c,v 1.10 1996/02/03 15:21:30 ache Exp $
* $Id: cdcontrol.c,v 1.11 1996/02/09 00:22:17 ache Exp $
*/
#include <ctype.h>
@ -398,11 +398,15 @@ int play (char *arg)
if (rc < 0)
return (rc);
if (! arg || ! *arg)
if (! arg || ! *arg) {
/* Play the whole disc */
return play_blocks (0, msf2lba (toc_buffer[n].addr.msf.minute,
toc_buffer[n].addr.msf.second,
toc_buffer[n].addr.msf.frame));
if (msf)
return play_blocks (0, msf2lba (toc_buffer[n].addr.msf.minute,
toc_buffer[n].addr.msf.second,
toc_buffer[n].addr.msf.frame));
else
return play_blocks (0, ntohl(toc_buffer[n].addr.lba));
}
if (strchr (arg, '#')) {
/* Play block #blk [ len ] */
@ -412,10 +416,14 @@ int play (char *arg)
1 != sscanf (arg, "#%d", &blk))
goto Clean_up;
if (len == 0)
len = msf2lba (toc_buffer[n].addr.msf.minute,
toc_buffer[n].addr.msf.second,
toc_buffer[n].addr.msf.frame) - blk;
if (len == 0) {
if (msf)
len = msf2lba (toc_buffer[n].addr.msf.minute,
toc_buffer[n].addr.msf.second,
toc_buffer[n].addr.msf.frame) - blk;
else
len = ntohl(toc_buffer[n].addr.lba) - blk;
}
return play_blocks (blk, len);
}
@ -430,6 +438,7 @@ int play (char *arg)
*/
unsigned tr1, tr2;
unsigned m1, m2, s1, s2, f1, f2;
unsigned char tm, ts, tf;
tr2 = m2 = s2 = f2 = f1 = 0;
if (8 == sscanf (arg, "%d %d:%d.%d %d %d:%d.%d",
@ -501,30 +510,37 @@ int play (char *arg)
else if (tr1 > n)
tr1 = n;
if ((m1 > toc_buffer[tr1].addr.msf.minute)
|| ((m1 == toc_buffer[tr1].addr.msf.minute)
&& ((s1 > toc_buffer[tr1].addr.msf.second)
|| ((s1 == toc_buffer[tr1].addr.msf.second)
&& (f1 > toc_buffer[tr1].addr.msf.frame))))) {
if (msf) {
tm = toc_buffer[tr1].addr.msf.minute;
ts = toc_buffer[tr1].addr.msf.second;
tf = toc_buffer[tr1].addr.msf.frame;
} 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 += toc_buffer[tr1].addr.msf.frame;
f1 += tf;
if (f1 >= 75) {
s1 += f1 / 75;
f1 %= 75;
}
s1 += toc_buffer[tr1].addr.msf.second;
s1 += ts;
if (s1 >= 60) {
m1 += s1 / 60;
s1 %= 60;
}
m1 += toc_buffer[tr1].addr.msf.minute;
m1 += tm;
if (! tr2) {
if (m2 || s2 || f2) {
@ -544,9 +560,17 @@ int play (char *arg)
m2 += m1;
} else {
tr2 = n;
m2 = toc_buffer[n].addr.msf.minute;
s2 = toc_buffer[n].addr.msf.second;
f2 = toc_buffer[n].addr.msf.frame;
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;
@ -554,27 +578,41 @@ int play (char *arg)
} else {
if (m2 || s2 || f2)
tr2--;
f2 += toc_buffer[tr2].addr.msf.frame;
if (msf) {
tm = toc_buffer[tr2].addr.msf.minute;
ts = toc_buffer[tr2].addr.msf.second;
tf = toc_buffer[tr2].addr.msf.frame;
} else
lba2msf(ntohl(toc_buffer[tr2].addr.lba),
&tm, &ts, &tf);
f2 += tf;
if (f2 >= 75) {
s2 += f2 / 75;
f2 %= 75;
}
s2 += toc_buffer[tr2].addr.msf.second;
s2 += ts;
if (s2 > 60) {
m2 += s2 / 60;
s2 %= 60;
}
m2 += toc_buffer[tr2].addr.msf.minute;
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 > toc_buffer[n].addr.msf.minute)
|| ((m2 == toc_buffer[n].addr.msf.minute)
&& ((s2 > toc_buffer[n].addr.msf.second)
|| ((s2 == toc_buffer[n].addr.msf.second)
&& (f2 > toc_buffer[n].addr.msf.frame)))))) {
&& ((m2 > tm)
|| ((m2 == tm)
&& ((s2 > ts)
|| ((s2 == ts)
&& (f2 > tf)))))) {
printf ("The playing time of the disc is not that long.\n");
return (0);
}
@ -591,9 +629,17 @@ int play (char *arg)
goto Clean_up;
if (m2 == 0) {
m2 = toc_buffer[n].addr.msf.minute;
s2 = toc_buffer[n].addr.msf.second;
f2 = toc_buffer[n].addr.msf.frame;
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;
}
}
return play_msf (m1, s1, f1, m2, s2, f2);
}