From 3edb78203ee8e8266a777b93e17a05284e0a3532 Mon Sep 17 00:00:00 2001 From: tomcw Date: Tue, 25 Oct 2016 22:26:28 +0100 Subject: [PATCH] Refactor: polymorphically call CImageHelperBase Open() & Close() --- source/DiskImage.cpp | 21 +++++++++++++-------- source/DiskImage.h | 2 +- source/DiskImageHelper.h | 3 +++ source/Harddisk.cpp | 3 +-- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/source/DiskImage.cpp b/source/DiskImage.cpp index a6462f24..3db7b727 100644 --- a/source/DiskImage.cpp +++ b/source/DiskImage.cpp @@ -43,10 +43,12 @@ ImageError_e ImageOpen( LPCTSTR pszImageFilename, bool* pWriteProtected, const bool bCreateIfNecessary, std::string& strFilenameInZip, - const bool bExpectFloppy /*=true*/, - const bool bIsHarddisk /*=false*/) + const bool bExpectFloppy /*=true*/) { - if (! (pszImageFilename && ppImageInfo && pWriteProtected && sg_DiskImageHelper.GetWorkBuffer())) + if (bExpectFloppy && sg_DiskImageHelper.GetWorkBuffer() == NULL) + return eIMAGE_ERROR_BAD_POINTER; + + if (! (pszImageFilename && ppImageInfo && pWriteProtected)) return eIMAGE_ERROR_BAD_POINTER; // CREATE A RECORD FOR THE FILE @@ -57,11 +59,10 @@ ImageError_e ImageOpen( LPCTSTR pszImageFilename, ZeroMemory(*ppImageInfo, sizeof(ImageInfo)); ImageInfo* pImageInfo = *ppImageInfo; pImageInfo->bWriteProtected = *pWriteProtected; + if (bExpectFloppy) pImageInfo->pImageHelper = &sg_DiskImageHelper; + else pImageInfo->pImageHelper = &sg_HardDiskImageHelper; - ImageError_e Err = (!bIsHarddisk) - ? sg_DiskImageHelper.Open(pszImageFilename, pImageInfo, bCreateIfNecessary, strFilenameInZip) - : sg_HardDiskImageHelper.Open(pszImageFilename, pImageInfo, bCreateIfNecessary, strFilenameInZip); - + ImageError_e Err = pImageInfo->pImageHelper->Open(pszImageFilename, pImageInfo, bCreateIfNecessary, strFilenameInZip); if (Err != eIMAGE_ERROR_NONE) { ImageClose(*ppImageInfo, true); @@ -78,6 +79,10 @@ ImageError_e ImageOpen( LPCTSTR pszImageFilename, // THE FILE MATCHES A KNOWN FORMAT + _ASSERT(bExpectFloppy); + if (!bExpectFloppy) + return eIMAGE_ERROR_UNSUPPORTED; + pImageInfo->uNumTracks = sg_DiskImageHelper.GetNumTracksInImage(pImageInfo->pImageType); for (UINT uTrack = 0; uTrack < pImageInfo->uNumTracks; uTrack++) @@ -108,7 +113,7 @@ void ImageClose(ImageInfo* const pImageInfo, const bool bOpenError /*=false*/) } } - sg_DiskImageHelper.Close(pImageInfo, bDeleteFile); + pImageInfo->pImageHelper->Close(pImageInfo, bDeleteFile); VirtualFree(pImageInfo, 0, MEM_RELEASE); } diff --git a/source/DiskImage.h b/source/DiskImage.h index 83f81391..1bf6ceef 100644 --- a/source/DiskImage.h +++ b/source/DiskImage.h @@ -63,7 +63,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA struct ImageInfo; -ImageError_e ImageOpen(LPCTSTR pszImageFilename, ImageInfo** ppImageInfo, bool* pWriteProtected, const bool bCreateIfNecessary, std::string& strFilenameInZip, const bool bExpectFloppy=true, const bool bIsHarddisk=false); +ImageError_e ImageOpen(LPCTSTR pszImageFilename, ImageInfo** ppImageInfo, bool* pWriteProtected, const bool bCreateIfNecessary, std::string& strFilenameInZip, const bool bExpectFloppy=true); void ImageClose(ImageInfo* const pImageInfo, const bool bOpenError=false); BOOL ImageBoot(ImageInfo* const pImageInfo); void ImageDestroy(void); diff --git a/source/DiskImageHelper.h b/source/DiskImageHelper.h index e80015bc..01a07b49 100644 --- a/source/DiskImageHelper.h +++ b/source/DiskImageHelper.h @@ -13,12 +13,15 @@ enum eImageType {eImageUNKNOWN, eImageDO, eImagePO, eImageNIB1, eImageNIB2, eIma enum eDetectResult {eMismatch, ePossibleMatch, eMatch}; class CImageBase; +class CImageHelperBase; + enum FileType_e {eFileNormal, eFileGZip, eFileZip}; struct ImageInfo { TCHAR szFilename[MAX_PATH]; CImageBase* pImageType; + CImageHelperBase* pImageHelper; FileType_e FileType; HANDLE hFile; DWORD uOffset; diff --git a/source/Harddisk.cpp b/source/Harddisk.cpp index 37b64bbf..844220df 100644 --- a/source/Harddisk.cpp +++ b/source/Harddisk.cpp @@ -363,8 +363,7 @@ static BOOL HD_Insert(const int iDrive, LPCTSTR pszImageFilename) &g_HardDisk[iDrive].bWriteProtected, bCreateIfNecessary, g_HardDisk[iDrive].strFilenameInZip, // TODO: Use this - bExpectFloppy, - bIsHarddisk); + bExpectFloppy); g_HardDisk[iDrive].hd_imageloaded = (Error == eIMAGE_ERROR_NONE);