mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-06-26 01:29:30 +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,
|
bool* pWriteProtected,
|
||||||
const bool bCreateIfNecessary,
|
const bool bCreateIfNecessary,
|
||||||
std::string& strFilenameInZip,
|
std::string& strFilenameInZip,
|
||||||
const bool bExpectFloppy /*=true*/,
|
const bool bExpectFloppy /*=true*/)
|
||||||
const bool bIsHarddisk /*=false*/)
|
|
||||||
{
|
{
|
||||||
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;
|
return eIMAGE_ERROR_BAD_POINTER;
|
||||||
|
|
||||||
// CREATE A RECORD FOR THE FILE
|
// CREATE A RECORD FOR THE FILE
|
||||||
|
@ -57,11 +59,10 @@ ImageError_e ImageOpen( LPCTSTR pszImageFilename,
|
||||||
ZeroMemory(*ppImageInfo, sizeof(ImageInfo));
|
ZeroMemory(*ppImageInfo, sizeof(ImageInfo));
|
||||||
ImageInfo* pImageInfo = *ppImageInfo;
|
ImageInfo* pImageInfo = *ppImageInfo;
|
||||||
pImageInfo->bWriteProtected = *pWriteProtected;
|
pImageInfo->bWriteProtected = *pWriteProtected;
|
||||||
|
if (bExpectFloppy) pImageInfo->pImageHelper = &sg_DiskImageHelper;
|
||||||
|
else pImageInfo->pImageHelper = &sg_HardDiskImageHelper;
|
||||||
|
|
||||||
ImageError_e Err = (!bIsHarddisk)
|
ImageError_e Err = pImageInfo->pImageHelper->Open(pszImageFilename, pImageInfo, bCreateIfNecessary, strFilenameInZip);
|
||||||
? sg_DiskImageHelper.Open(pszImageFilename, pImageInfo, bCreateIfNecessary, strFilenameInZip)
|
|
||||||
: sg_HardDiskImageHelper.Open(pszImageFilename, pImageInfo, bCreateIfNecessary, strFilenameInZip);
|
|
||||||
|
|
||||||
if (Err != eIMAGE_ERROR_NONE)
|
if (Err != eIMAGE_ERROR_NONE)
|
||||||
{
|
{
|
||||||
ImageClose(*ppImageInfo, true);
|
ImageClose(*ppImageInfo, true);
|
||||||
|
@ -78,6 +79,10 @@ ImageError_e ImageOpen( LPCTSTR pszImageFilename,
|
||||||
|
|
||||||
// THE FILE MATCHES A KNOWN FORMAT
|
// THE FILE MATCHES A KNOWN FORMAT
|
||||||
|
|
||||||
|
_ASSERT(bExpectFloppy);
|
||||||
|
if (!bExpectFloppy)
|
||||||
|
return eIMAGE_ERROR_UNSUPPORTED;
|
||||||
|
|
||||||
pImageInfo->uNumTracks = sg_DiskImageHelper.GetNumTracksInImage(pImageInfo->pImageType);
|
pImageInfo->uNumTracks = sg_DiskImageHelper.GetNumTracksInImage(pImageInfo->pImageType);
|
||||||
|
|
||||||
for (UINT uTrack = 0; uTrack < pImageInfo->uNumTracks; uTrack++)
|
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);
|
VirtualFree(pImageInfo, 0, MEM_RELEASE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
struct ImageInfo;
|
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);
|
void ImageClose(ImageInfo* const pImageInfo, const bool bOpenError=false);
|
||||||
BOOL ImageBoot(ImageInfo* const pImageInfo);
|
BOOL ImageBoot(ImageInfo* const pImageInfo);
|
||||||
void ImageDestroy(void);
|
void ImageDestroy(void);
|
||||||
|
|
|
@ -13,12 +13,15 @@ enum eImageType {eImageUNKNOWN, eImageDO, eImagePO, eImageNIB1, eImageNIB2, eIma
|
||||||
enum eDetectResult {eMismatch, ePossibleMatch, eMatch};
|
enum eDetectResult {eMismatch, ePossibleMatch, eMatch};
|
||||||
|
|
||||||
class CImageBase;
|
class CImageBase;
|
||||||
|
class CImageHelperBase;
|
||||||
|
|
||||||
enum FileType_e {eFileNormal, eFileGZip, eFileZip};
|
enum FileType_e {eFileNormal, eFileGZip, eFileZip};
|
||||||
|
|
||||||
struct ImageInfo
|
struct ImageInfo
|
||||||
{
|
{
|
||||||
TCHAR szFilename[MAX_PATH];
|
TCHAR szFilename[MAX_PATH];
|
||||||
CImageBase* pImageType;
|
CImageBase* pImageType;
|
||||||
|
CImageHelperBase* pImageHelper;
|
||||||
FileType_e FileType;
|
FileType_e FileType;
|
||||||
HANDLE hFile;
|
HANDLE hFile;
|
||||||
DWORD uOffset;
|
DWORD uOffset;
|
||||||
|
|
|
@ -363,8 +363,7 @@ static BOOL HD_Insert(const int iDrive, LPCTSTR pszImageFilename)
|
||||||
&g_HardDisk[iDrive].bWriteProtected,
|
&g_HardDisk[iDrive].bWriteProtected,
|
||||||
bCreateIfNecessary,
|
bCreateIfNecessary,
|
||||||
g_HardDisk[iDrive].strFilenameInZip, // TODO: Use this
|
g_HardDisk[iDrive].strFilenameInZip, // TODO: Use this
|
||||||
bExpectFloppy,
|
bExpectFloppy);
|
||||||
bIsHarddisk);
|
|
||||||
|
|
||||||
g_HardDisk[iDrive].hd_imageloaded = (Error == eIMAGE_ERROR_NONE);
|
g_HardDisk[iDrive].hd_imageloaded = (Error == eIMAGE_ERROR_NONE);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user