diff --git a/src/dos/Makefile.am b/src/dos/Makefile.am index bacefb7f..aec73c4f 100644 --- a/src/dos/Makefile.am +++ b/src/dos/Makefile.am @@ -6,5 +6,5 @@ libdos_a_SOURCES = dos.cpp dos_devices.cpp dos_execute.cpp dos_files.cpp dos_ioc dos_misc.cpp dos_classes.cpp dos_programs.cpp dos_tables.cpp \ drives.cpp drives.h drive_virtual.cpp drive_local.cpp drive_cache.cpp drive_fat.cpp \ drive_iso.cpp dev_con.h dos_mscdex.cpp dos_keyboard_layout.cpp \ - cdrom.h cdrom.cpp cdrom_ioctl_linux.cpp cdrom_image.cpp \ + cdrom.h cdrom.cpp cdrom_image.cpp \ drive_overlay.cpp diff --git a/src/dos/cdrom.cpp b/src/dos/cdrom.cpp index 826bbadd..bbfc21e1 100644 --- a/src/dos/cdrom.cpp +++ b/src/dos/cdrom.cpp @@ -26,150 +26,14 @@ #include #include "dosbox.h" -#include "SDL.h" #include "support.h" #include "cdrom.h" -CDROM_Interface_SDL::CDROM_Interface_SDL(void) { - driveID = 0; - oldLeadOut = 0; - cd = 0; -} -CDROM_Interface_SDL::~CDROM_Interface_SDL(void) { - StopAudio(); - SDL_CDClose(cd); - cd = 0; -} - -bool CDROM_Interface_SDL::SetDevice(char* path, int forceCD) { - char buffer[512]; - strcpy(buffer,path); - upcase(buffer); - - int num = SDL_CDNumDrives(); - if ((forceCD>=0) && (forceCDnumtracks; - frames_to_msf(cd->track[cd->numtracks].offset, &leadOut.min, &leadOut.sec, &leadOut.fr); - } - return CD_INDRIVE(SDL_CDStatus(cd)); -} - -bool CDROM_Interface_SDL::GetAudioTrackInfo(int track, TMSF& start, unsigned char& attr) { - if (CD_INDRIVE(SDL_CDStatus(cd))) { - frames_to_msf(cd->track[track-1].offset, &start.min, &start.sec, &start.fr); - attr = cd->track[track-1].type<<4;//sdl uses 0 for audio and 4 for data. instead of 0x00 and 0x40 - } - return CD_INDRIVE(SDL_CDStatus(cd)); -} - -bool CDROM_Interface_SDL::GetAudioSub(unsigned char& attr, unsigned char& track, unsigned char& index, TMSF& relPos, TMSF& absPos) { - if (CD_INDRIVE(SDL_CDStatus(cd))) { - track = cd->cur_track; - index = cd->cur_track; - attr = cd->track[track].type<<4; - frames_to_msf(cd->cur_frame, &relPos.min, &relPos.sec, &relPos.fr); - frames_to_msf(cd->cur_frame+cd->track[track].offset, &absPos.min, &absPos.sec, &absPos.fr); - } - return CD_INDRIVE(SDL_CDStatus(cd)); -} - -bool CDROM_Interface_SDL::GetAudioStatus(bool& playing, bool& pause){ - if (CD_INDRIVE(SDL_CDStatus(cd))) { - playing = (cd->status==CD_PLAYING); - pause = (cd->status==CD_PAUSED); - } - return CD_INDRIVE(SDL_CDStatus(cd)); -} - -bool CDROM_Interface_SDL::GetMediaTrayStatus(bool& mediaPresent, bool& mediaChanged, bool& trayOpen) { - SDL_CDStatus(cd); - mediaPresent = (cd->status!=CD_TRAYEMPTY) && (cd->status!=CD_ERROR); - mediaChanged = (oldLeadOut!=cd->track[cd->numtracks].offset); - trayOpen = !mediaPresent; - oldLeadOut = cd->track[cd->numtracks].offset; - if (mediaChanged) SDL_CDStatus(cd); - return true; -} - -bool CDROM_Interface_SDL::PlayAudioSector(unsigned long start,unsigned long len) { - // Has to be there, otherwise wrong cd status report (dunno why, sdl bug ?) - SDL_CDClose(cd); - cd = SDL_CDOpen(driveID); - bool success = (SDL_CDPlay(cd,start+150,len)==0); - return success; -} - -bool CDROM_Interface_SDL::PauseAudio(bool resume) { - bool success; - if (resume) success = (SDL_CDResume(cd)==0); - else success = (SDL_CDPause (cd)==0); - return success; -} - -bool CDROM_Interface_SDL::StopAudio(void) { - // Has to be there, otherwise wrong cd status report (dunno why, sdl bug ?) - SDL_CDClose(cd); - cd = SDL_CDOpen(driveID); - bool success = (SDL_CDStop(cd)==0); - return success; -} - -bool CDROM_Interface_SDL::LoadUnloadMedia(bool unload) { - bool success = (SDL_CDEject(cd)==0); - return success; -} - -int CDROM_GetMountType(char* path, int forceCD) { -// 0 - physical CDROM +int CDROM_GetMountType(char* path, int) { // 1 - Iso file // 2 - subdirectory - // 1. Smells like a real cdrom - // if ((strlen(path)<=3) && (path[2]=='\\') && (strchr(path,'\\')==strrchr(path,'\\')) && (GetDriveType(path)==DRIVE_CDROM)) return 0; - const char* cdName; - char buffer[512]; - strcpy(buffer,path); -#if defined (WIN32) - upcase(buffer); -#endif - - int num = SDL_CDNumDrives(); - // If cd drive is forced then check if its in range and return 0 - if ((forceCD>=0) && (forceCD -#include "cdrom.h" -#include "support.h" - -#if defined (LINUX) -#include -#include -#include -#include -#include -#include - -CDROM_Interface_Ioctl::CDROM_Interface_Ioctl(void) : CDROM_Interface_SDL() -{ - strcpy(device_name, ""); -} - -bool CDROM_Interface_Ioctl::GetUPC(unsigned char& attr, char* upc) -{ - int cdrom_fd = open(device_name, O_RDONLY | O_NONBLOCK); - if (cdrom_fd == -1) return false; - - struct cdrom_mcn cdrom_mcn; - int ret = ioctl(cdrom_fd, CDROM_GET_MCN, &cdrom_mcn); - - close(cdrom_fd); - - if (ret > 0) { - attr = 0; - safe_strncpy(upc, (char*)cdrom_mcn.medium_catalog_number, 14); - } - - return (ret > 0); -} - -bool CDROM_Interface_Ioctl::ReadSectors(PhysPt buffer, bool raw, unsigned long sector, unsigned long num) -{ - int cdrom_fd = open(device_name, O_RDONLY | O_NONBLOCK); - if (cdrom_fd == -1) return false; - - Bits buflen = raw ? num * CD_FRAMESIZE_RAW : num * CD_FRAMESIZE; - Bit8u* buf = new Bit8u[buflen]; - int ret; - - if (raw) { - struct cdrom_read cdrom_read; - cdrom_read.cdread_lba = sector; - cdrom_read.cdread_bufaddr = (char*)buf; - cdrom_read.cdread_buflen = buflen; - - ret = ioctl(cdrom_fd, CDROMREADRAW, &cdrom_read); - } else { - ret = lseek(cdrom_fd, sector * CD_FRAMESIZE, SEEK_SET); - if (ret >= 0) ret = read(cdrom_fd, buf, buflen); - if (ret != buflen) ret = -1; - } - close(cdrom_fd); - - MEM_BlockWrite(buffer, buf, buflen); - delete[] buf; - - return (ret > 0); -} - -bool CDROM_Interface_Ioctl::SetDevice(char* path, int forceCD) -{ - bool success = CDROM_Interface_SDL::SetDevice(path, forceCD); - - if (success) { - const char* tmp = SDL_CDName(forceCD); - if (tmp) safe_strncpy(device_name, tmp, 512); - else success = false; - } - - return success; -} - -#endif diff --git a/src/dos/dos_mscdex.cpp b/src/dos/dos_mscdex.cpp index 931dc867..172c55e7 100644 --- a/src/dos/dos_mscdex.cpp +++ b/src/dos/dos_mscdex.cpp @@ -253,18 +253,11 @@ int CMscdex::AddDrive(Bit16u _drive, char* physicalPath, Bit8u& subUnit) int result = 0; // Get Mounttype and init needed cdrom interface switch (CDROM_GetMountType(physicalPath,forceCD)) { - case 0x00: { + case 0x00: LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: Mounting physical cdrom: %s" ,physicalPath); -#if defined (LINUX) - // Always use IOCTL in Linux - cdrom[numDrives] = new CDROM_Interface_Ioctl(); - LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: IOCTL Interface."); -#else - // Default case windows and other oses - cdrom[numDrives] = new CDROM_Interface_SDL(); - LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: SDL Interface."); -#endif - } break; + // TODO: support for mounting physical CD-ROMs removed, provide + // warnings/explanations for users + return 2; case 0x01: // iso cdrom interface LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: Mounting iso file as cdrom: %s", physicalPath); cdrom[numDrives] = new CDROM_Interface_Image((Bit8u)numDrives); diff --git a/src/dos/dos_programs.cpp b/src/dos/dos_programs.cpp index 3167878b..31054e37 100644 --- a/src/dos/dos_programs.cpp +++ b/src/dos/dos_programs.cpp @@ -199,11 +199,8 @@ public: /* Show list of cdroms */ if (cmd->FindExist("-cd",false)) { - int num = SDL_CDNumDrives(); - WriteOut(MSG_Get("PROGRAM_MOUNT_CDROMS_FOUND"),num); - for (int i=0; i