mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-06-09 22:29:40 +00:00
Refactor: polymorphically call CImageHelperBase Open() & Close()
This commit is contained in:
parent
31483b33b9
commit
3edb78203e
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user