- Applied patch from icculus.org CVS for supporting shuffle

on CDs with 100+ tracks
This commit is contained in:
Jamie Wilkinson 2002-10-13 03:40:10 +00:00
parent db5b1a5164
commit 27349bfd44
3 changed files with 39 additions and 13 deletions

View file

@ -258,7 +258,7 @@ void CDAudio_RandomPlay(void)
{ {
int track, i = 0, free_tracks = 0, remap_track; int track, i = 0, free_tracks = 0, remap_track;
float f; float f;
unsigned char track_bools[100]; unsigned char * track_bools;
struct cdrom_tocentry entry; struct cdrom_tocentry entry;
struct cdrom_ti ti; struct cdrom_ti ti;
@ -267,6 +267,11 @@ void CDAudio_RandomPlay(void)
// create array of available audio tracknumbers // create array of available audio tracknumbers
track_bools = (unsigned char *) malloc(maxTrack * sizeof(unsigned char));
if (track_bools == 0)
return;
for (; i < maxTrack; i++) for (; i < maxTrack; i++)
{ {
entry.cdte_track = remap[i]; entry.cdte_track = remap[i];
@ -284,7 +289,7 @@ void CDAudio_RandomPlay(void)
if (!free_tracks) if (!free_tracks)
{ {
Com_DPrintf("CDAudio_RandomPlay: Unable to find and play a random audio track, insert an audio cd please"); Com_DPrintf("CDAudio_RandomPlay: Unable to find and play a random audio track, insert an audio cd please");
return; goto free_end;
} }
// choose random audio track // choose random audio track
@ -302,7 +307,7 @@ void CDAudio_RandomPlay(void)
if (playing) if (playing)
{ {
if (playTrack == remap_track) if (playTrack == remap_track)
return; goto free_end;
CDAudio_Stop(); CDAudio_Stop();
} }
@ -321,10 +326,13 @@ void CDAudio_RandomPlay(void)
playLooping = true; playLooping = true;
playTrack = remap_track; playTrack = remap_track;
playing = true; playing = true;
return; break;
} }
} }
while (free_tracks > 0); while (free_tracks > 0);
free_end:
free(track_bools);
} }
#else /* let the others compile at least */ #else /* let the others compile at least */
void CDAudio_RandomPlay(void) { void CDAudio_RandomPlay(void) {

View file

@ -94,13 +94,18 @@ void CDAudio_RandomPlay(void)
int track, i = 0, free_tracks = 0; int track, i = 0, free_tracks = 0;
float f; float f;
CDstatus cd_stat; CDstatus cd_stat;
unsigned char track_bools[100]; unsigned char * track_bools;
if (!cd_id || !enabled) if (!cd_id || !enabled)
return; return;
//create array of available audio tracknumbers //create array of available audio tracknumbers
track_bools = (unsigned char *) malloc(cd_id->numtracks * sizeof(byte));
if (track_bools == 0)
return;
for (; i < cd_id->numtracks; i++) for (; i < cd_id->numtracks; i++)
{ {
track_bools[i] = cd_id->track[i].type == SDL_AUDIO_TRACK; track_bools[i] = cd_id->track[i].type == SDL_AUDIO_TRACK;
@ -110,7 +115,7 @@ void CDAudio_RandomPlay(void)
if (!free_tracks) if (!free_tracks)
{ {
Com_DPrintf("CDAudio_RandomPlay: Unable to find and play a random audio track, insert an audio cd please"); Com_DPrintf("CDAudio_RandomPlay: Unable to find and play a random audio track, insert an audio cd please");
return; goto free_end;
} }
//choose random audio track //choose random audio track
@ -130,14 +135,14 @@ void CDAudio_RandomPlay(void)
if(!cdValid) if(!cdValid)
{ {
if(!CD_INDRIVE(cd_stat) ||(!cd_id->numtracks)) if(!CD_INDRIVE(cd_stat) ||(!cd_id->numtracks))
return; goto free_end;
cdValid = true; cdValid = true;
} }
if(cd_stat == CD_PLAYING) if(cd_stat == CD_PLAYING)
{ {
if(cd_id->cur_track == track + 1) if(cd_id->cur_track == track + 1)
return; goto free_end;
CDAudio_Stop(); CDAudio_Stop();
} }
@ -150,10 +155,13 @@ void CDAudio_RandomPlay(void)
else else
{ {
playLooping = true; playLooping = true;
return; break;
} }
} }
while (free_tracks > 0); while (free_tracks > 0);
free_end:
free(track_bools);
} }
void CDAudio_Stop() void CDAudio_Stop()

View file

@ -190,7 +190,7 @@ void CDAudio_RandomPlay(void)
{ {
int track, i = 0, free_tracks = 0, remap_track; int track, i = 0, free_tracks = 0, remap_track;
float f; float f;
unsigned char track_bools[100]; unsigned char * track_bools;
DWORD dwReturn; DWORD dwReturn;
MCI_PLAY_PARMS mciPlayParms; MCI_PLAY_PARMS mciPlayParms;
MCI_STATUS_PARMS mciStatusParms; MCI_STATUS_PARMS mciStatusParms;
@ -199,6 +199,12 @@ void CDAudio_RandomPlay(void)
return; return;
//create array of available audio tracknumbers //create array of available audio tracknumbers
track_bools = (unsigned char *) malloc(maxTrack * sizeof(unsigned char));
if (track_bools == 0)
return;
for (; i < maxTrack; i++) for (; i < maxTrack; i++)
{ {
// don't try to play a non-audio track // don't try to play a non-audio track
@ -218,7 +224,7 @@ void CDAudio_RandomPlay(void)
if (!free_tracks) if (!free_tracks)
{ {
Com_DPrintf("CDAudio_RandomPlay: Unable to find and play a random audio track, insert an audio cd please"); Com_DPrintf("CDAudio_RandomPlay: Unable to find and play a random audio track, insert an audio cd please");
return; goto free_end;
} }
//choose random audio track //choose random audio track
@ -240,13 +246,13 @@ void CDAudio_RandomPlay(void)
if (dwReturn) if (dwReturn)
{ {
Com_DPrintf("MCI_STATUS failed (%i)\n", dwReturn); Com_DPrintf("MCI_STATUS failed (%i)\n", dwReturn);
return; goto free_end;
} }
if (playing) if (playing)
{ {
if (playTrack == remap_track) if (playTrack == remap_track)
return; goto free_end;
CDAudio_Stop(); CDAudio_Stop();
} }
@ -264,9 +270,13 @@ void CDAudio_RandomPlay(void)
playLooping = true; playLooping = true;
playTrack = remap_track; playTrack = remap_track;
playing = true; playing = true;
break;
} }
} }
while (free_tracks > 0); while (free_tracks > 0);
free_end:
free(track_bools);
} }
void CDAudio_Stop(void) void CDAudio_Stop(void)