version 1.44, 2006/01/09 05:48:35 |
version 1.45, 2006/01/10 19:59:11 |
|
|
goto Try_Absolute_Timed_Addresses; |
goto Try_Absolute_Timed_Addresses; |
|
|
Play_Relative_Addresses: |
Play_Relative_Addresses: |
if (tr1 <= 0) |
if (tr1 < 1 || tr1 > n) { |
tr1 = 1; |
printf("Track %d not found\n", tr1); |
else if (tr1 > n) |
return (0); |
tr1 = n; |
} else if (tr2 < 0 || tr2 > n) { |
|
printf("Track %d not found\n", tr2); |
|
return (0); |
|
} |
|
|
toc2msf(tr1+1, &tm, &ts, &tf); |
/* Change (m1,s1,f1) from tr1 to disc relative. */ |
|
toc2msf(tr1, &tm, &ts, &tf); |
|
addmsf(&m1, &s1, &f1, tm, ts, tf); |
|
|
|
/* Compare (m1,s1,f1) to start time of next track. */ |
|
toc2msf(tr1+1, &tm, &ts, &tf); |
if (cmpmsf(m1, s1, f1, tm, ts, tf) == 1) { |
if (cmpmsf(m1, s1, f1, tm, ts, tf) == 1) { |
printf("Track %d is not that long.\n", tr1); |
printf("Track %d is not that long.\n", tr1); |
return (0); |
return (0); |
} |
} |
|
|
tr1--; |
if (!(tr2 || m2 || s2 || f2)) { |
|
/* No end time specified. Play to end of disc. */ |
addmsf(&m1, &s1, &f1, tm, ts, tf); |
toc2msf(n+1, &tm, &ts, &tf); |
|
m2 = tm; |
if (tr2 <= 0) { |
s2 = ts; |
if (m2 || s2 || f2) { |
f2 = tf; |
tr2 = tr1; |
} else if (tr2 != 0) { |
addmsf(&m2, &s2, &f2, m1, s1, f1); |
/* |
} else { |
* End time specified relative to tr2. Change |
tr2 = n; |
* (m2,s2,f2) from tr2 to disc relative. |
toc2msf(tr2+1, &tm, &ts, &tf); |
*/ |
m2 = tm; |
toc2msf(tr2, &tm, &ts, &tf); |
s2 = ts; |
addmsf(&m2, &s2, &f2, tm, ts, tf); |
f2 = tf; |
/* Compare (m2,s2,f2) to start time of next track. */ |
|
toc2msf(tr2+1, &tm, &ts, &tf); |
|
if (cmpmsf(m2, s2, f2, tm, ts, tf) == 1) { |
|
printf("Track %d is not that long.\n", tr2); |
|
return (0); |
} |
} |
} else if (tr2 > n) { |
|
tr2 = n; |
|
m2 = s2 = f2 = 0; |
|
} else { |
} else { |
if (m2 || s2 || f2) |
/* |
tr2--; |
* Duration rather than end time specified. Change |
|
* (m2,s2,f2) from (m1,s1,f1) to disc relative. |
|
*/ |
|
addmsf(&m2, &s2, &f2, m1, s1, f1); |
|
/* Compare (m2,s2,f2) to end of disc. */ |
toc2msf(tr2+1, &tm, &ts, &tf); |
toc2msf(tr2+1, &tm, &ts, &tf); |
addmsf(&m2, &s2, &f2, tm, ts, tf); |
if (cmpmsf(m2, s2, f2, tm, ts, tf) == 1) { |
|
printf("Disc is not that long.\n"); |
|
return (0); |
|
} |
} |
} |
|
|
toc2msf(n+1, &tm, &ts, &tf); |
|
|
|
if (tr2 < n && cmpmsf(m2, s2, f2, tm, ts, tf) == 1) { |
|
printf("The playing time of the disc is not that long.\n"); |
|
return (0); |
|
} |
|
return (play_msf(m1, s1, f1, m2, s2, f2)); |
return (play_msf(m1, s1, f1, m2, s2, f2)); |
|
|
Try_Absolute_Timed_Addresses: |
Try_Absolute_Timed_Addresses: |