// // Claim // // Claim a redbook driver // Bool Claim() { if (initialized) { int drive; // Release any current driver Release(); // First, try and find the specified volume if (*volumeLabel && Drive::FindDriveByVolume(Drive::CDROM, volumeLabel, drive)) { if ((driver = AIL_redbook_open_drive(char(drive + 'A'))) != NULL) { LOG_DIAG(("Redbook::Claim - Success by volume [%s]", volumeLabel)); } } // Second, try and find an audio cd (for custom cd in second drive) if (!driver && Drive::FindDriveByVolume(Drive::CDROM, "Audio CD", drive)) { if ((driver = AIL_redbook_open_drive(char(drive + 'A'))) != NULL) { LOG_DIAG(("Redbook::Claim - Success on Audio CD")); } } // Third, just grab the first device if (!driver) { for (S32 i = 0; i < MAX_DEVICES; i++) { if ((driver = AIL_redbook_open(i)) != NULL) { LOG_DIAG(("Redbook::Claim - Success on first available [%d]", i)); break; } } } if (driver) { // Stop the cd playing anything Stop(); return (TRUE); } LOG_DIAG(("Redbook::Claim - Failed")); } return (FALSE); }
void SoundManager::InitRedbook() { #if defined(USE_SDL) if (!m_cdrom) { int errcode = SDL_Init(SDL_INIT_CDROM | m_SDLInitFlags); Assert(0 == errcode); if (errcode < 0) { return; } int numDrives = SDL_CDNumDrives(); Assert(numDrives >= 0); int drive = -1; int i = 0; // Hack: We don't have the num of the SDL drive stored, // so we search for the drive with the drive letter stored MBCHAR driveLetter = toupper(c3files_GetCtpCdId()); while ((i < numDrives) && (-1 == drive)) { const char *cd_name = SDL_CDName(i); if (cd_name) { if (toupper(cd_name[0]) == driveLetter) { drive = i; } } i++; } // No drive match?! if (drive < 0) { return; } m_cdrom = SDL_CDOpen(drive); Assert(m_cdrom != 0); // No control structur? if (m_cdrom) { CDstatus status = SDL_CDStatus(m_cdrom); } } #else // !USE_SDL if (!m_redbook) { m_redbook = AIL_redbook_open_drive(c3files_GetCtpCdId()); } #endif // USE_SDL }