From 9d0029f51b80d2882d71d152e1653d783da19f9a Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Sat, 8 Nov 2003 18:00:47 +0000 Subject: [PATCH] Add method for checking a remote drive. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1417 --- include/dos_system.h | 3 ++- src/dos/dos_ioctl.cpp | 5 +++-- src/dos/drive_local.cpp | 8 ++++++++ src/dos/drive_virtual.cpp | 3 +++ src/dos/drives.h | 4 +++- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/include/dos_system.h b/include/dos_system.h index 5c4cddf8..d93b19be 100644 --- a/include/dos_system.h +++ b/include/dos_system.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_system.h,v 1.17 2003-10-29 19:42:19 finsterr Exp $ */ +/* $Id: dos_system.h,v 1.18 2003-11-08 17:59:30 harekiet Exp $ */ #ifndef DOSSYSTEM_H_ #define DOSSYSTEM_H_ @@ -222,6 +222,7 @@ public: virtual Bit8u GetMediaByte(void)=0; virtual void SetDir(const char* path) { strcpy(curdir,path); }; virtual void EmptyCache(void) { dirCache.EmptyCache(); }; + virtual bool isRemote(void)=0; char * GetInfo(void); char curdir[DOS_PATHLENGTH]; char info[256]; diff --git a/src/dos/dos_ioctl.cpp b/src/dos/dos_ioctl.cpp index e6cd9fb0..a5d14c00 100644 --- a/src/dos/dos_ioctl.cpp +++ b/src/dos/dos_ioctl.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_ioctl.cpp,v 1.16 2003-10-14 08:38:35 qbix79 Exp $ */ +/* $Id: dos_ioctl.cpp,v 1.17 2003-11-08 18:00:46 harekiet Exp $ */ #include #include "dosbox.h" @@ -78,8 +78,9 @@ bool DOS_IOCTL(void) { drive=reg_bl;if (!drive) drive=dos.current_drive;else drive--; if (Drives[drive]) { reg_dx=0; - //TODO Cdrom drives are remote + if (Drives[drive]->isRemote()) reg_dx|=(1 << 12); //TODO Set bit 9 on drives that don't support direct I/O + reg_al=0; return true; } else { DOS_SetError(DOSERR_INVALID_DRIVE); diff --git a/src/dos/drive_local.cpp b/src/dos/drive_local.cpp index 509d083f..b2c14279 100644 --- a/src/dos/drive_local.cpp +++ b/src/dos/drive_local.cpp @@ -311,6 +311,10 @@ Bit8u localDrive::GetMediaByte(void) { return allocation.mediaid; } +bool localDrive::isRemote(void) { + return false; +} + localDrive::localDrive(const char * startdir,Bit16u _bytes_sector,Bit8u _sectors_cluster,Bit16u _total_clusters,Bit16u _free_clusters,Bit8u _mediaid) { strcpy(basedir,startdir); sprintf(info,"local directory %s",startdir); @@ -499,3 +503,7 @@ void cdromDrive::SetDir(const char* path) } localDrive::SetDir(path); }; + +bool cdromDrive::isRemote(void) { + return true; +} diff --git a/src/dos/drive_virtual.cpp b/src/dos/drive_virtual.cpp index 64663fde..9dff9f21 100644 --- a/src/dos/drive_virtual.cpp +++ b/src/dos/drive_virtual.cpp @@ -227,3 +227,6 @@ Bit8u Virtual_Drive::GetMediaByte(void) { return 0xF8; } +bool Virtual_Drive::isRemote(void) { + return false; +} diff --git a/src/dos/drives.h b/src/dos/drives.h index 52ddad8f..37158423 100644 --- a/src/dos/drives.h +++ b/src/dos/drives.h @@ -41,7 +41,7 @@ public: virtual bool FileExists(const char* name); virtual bool FileStat(const char* name, FileStat_Block * const stat_block); virtual Bit8u GetMediaByte(void); - + virtual bool isRemote(void); private: char basedir[CROSS_LEN]; @@ -71,6 +71,7 @@ public: virtual bool GetFileAttr(char * name,Bit16u * attr); virtual bool FindFirst(char * _dir,DOS_DTA & dta); virtual void SetDir(const char* path); + virtual bool isRemote(void); private: Bit8u subUnit; }; @@ -95,6 +96,7 @@ public: bool FileStat(const char* name, FileStat_Block* const stat_block); Bit8u GetMediaByte(void); void EmptyCache(void){} + bool isRemote(void); private: VFILE_Block * search_file; };