From dadb21a275275dc2e5f3dfa24f12577e7e198402 Mon Sep 17 00:00:00 2001 From: elasota Date: Sun, 29 Dec 2019 21:31:49 -0500 Subject: [PATCH] FS refactoring, 64-bit timestamps --- FTagData/FTagData.cpp | 36 +++---- GpApp/About.cpp | 9 +- GpApp/HighScores.cpp | 8 +- GpApp/House.cpp | 2 +- GpApp/HouseIO.cpp | 3 +- GpApp/Prefs.cpp | 21 ++-- GpApp/SoundSync_Win32.cpp | 2 +- GpD3D/GpSystemServices_Win32.cpp | 36 ++++++- GpD3D/GpSystemServices_Win32.h | 5 +- PortabilityLayer/ByteSwap.cpp | 49 ++++++--- PortabilityLayer/ByteSwap.h | 2 + PortabilityLayer/FileManager.cpp | 28 +++-- PortabilityLayer/FileManager.h | 9 +- PortabilityLayer/HostSystemServices.h | 3 +- PortabilityLayer/MacFileInfo.cpp | 8 +- PortabilityLayer/MacFileInfo.h | 8 +- PortabilityLayer/PLCore.cpp | 73 ------------- PortabilityLayer/PLCore.h | 9 -- PortabilityLayer/PLResourceManager.cpp | 2 +- PortabilityLayer/ResTypeID.h | 143 +++++++++++++------------ 20 files changed, 224 insertions(+), 232 deletions(-) diff --git a/FTagData/FTagData.cpp b/FTagData/FTagData.cpp index 1e58408..e584aa2 100644 --- a/FTagData/FTagData.cpp +++ b/FTagData/FTagData.cpp @@ -19,7 +19,7 @@ int main(int argc, const char **argv) fprintf(stderr, "File type ID must be 4 characters"); return -2; } - + if (strlen(argv[4]) != 4) { fprintf(stderr, "File creator ID must be 4 characters"); @@ -29,14 +29,14 @@ int main(int argc, const char **argv) FILETIME currentTime; GetSystemTimeAsFileTime(¤tTime); - SYSTEMTIME epochStart; - epochStart.wYear = 1904; - epochStart.wMonth = 1; - epochStart.wDayOfWeek = 5; - epochStart.wDay = 1; - epochStart.wHour = 0; - epochStart.wMinute = 0; - epochStart.wSecond = 0; + SYSTEMTIME epochStart; + epochStart.wYear = 1904; + epochStart.wMonth = 1; + epochStart.wDayOfWeek = 5; + epochStart.wDay = 1; + epochStart.wHour = 0; + epochStart.wMinute = 0; + epochStart.wSecond = 0; epochStart.wMilliseconds = 0; FILETIME epochStartFT; @@ -61,19 +61,19 @@ int main(int argc, const char **argv) const char *arg = argv[i]; if (!strcmp(arg, "locked")) mfp.m_finderFlags |= PortabilityLayer::FINDER_FILE_FLAG_LOCKED; - else if (!strcmp(arg, "invisible")) + else if (!strcmp(arg, "invisible")) mfp.m_finderFlags |= PortabilityLayer::FINDER_FILE_FLAG_INVISIBLE; - else if (!strcmp(arg, "bundle")) + else if (!strcmp(arg, "bundle")) mfp.m_finderFlags |= PortabilityLayer::FINDER_FILE_FLAG_BUNDLE; - else if (!strcmp(arg, "system")) + else if (!strcmp(arg, "system")) mfp.m_finderFlags |= PortabilityLayer::FINDER_FILE_FLAG_SYSTEM; - else if (!strcmp(arg, "copyprotected")) + else if (!strcmp(arg, "copyprotected")) mfp.m_finderFlags |= PortabilityLayer::FINDER_FILE_FLAG_COPY_PROTECTED; - else if (!strcmp(arg, "busy")) + else if (!strcmp(arg, "busy")) mfp.m_finderFlags |= PortabilityLayer::FINDER_FILE_FLAG_BUSY; - else if (!strcmp(arg, "changed")) + else if (!strcmp(arg, "changed")) mfp.m_finderFlags |= PortabilityLayer::FINDER_FILE_FLAG_CHANGED; - else if (!strcmp(arg, "inited")) + else if (!strcmp(arg, "inited")) mfp.m_finderFlags |= PortabilityLayer::FINDER_FILE_FLAG_INITED; } @@ -91,6 +91,6 @@ int main(int argc, const char **argv) fwrite(mps.m_data, PortabilityLayer::MacFilePropertiesSerialized::kSize, 1, file); fclose(file); } - - return 0; + + return 0; } diff --git a/GpApp/About.cpp b/GpApp/About.cpp index cb3eab1..d8bd1f1 100644 --- a/GpApp/About.cpp +++ b/GpApp/About.cpp @@ -13,6 +13,7 @@ #include "DialogUtils.h" #include "Environ.h" #include "Externs.h" +#include "HostSystemServices.h" #include "ScanlineMask.h" @@ -143,13 +144,15 @@ static void UnHiLiteOkayButton (void) static void UpdateMainPict (DialogPtr theDial) { Str255 theStr, theStr2; - long totalSize, contigSize; + uint64_t freeMemory; DrawDialog(theDial); + + freeMemory = PortabilityLayer::HostSystemServices::GetInstance()->GetFreeMemoryCosmetic(); PasStringCopy(PSTR("Memory: "), theStr); // display free memory - PurgeSpace(&totalSize, &contigSize); - totalSize /= 1024; + + long totalSize = static_cast(freeMemory / 1024); NumToString(totalSize, theStr2); PasStringConcat(theStr, theStr2); PasStringConcat(theStr, PSTR("K")); diff --git a/GpApp/HighScores.cpp b/GpApp/HighScores.cpp index cab7a54..362b6f5 100644 --- a/GpApp/HighScores.cpp +++ b/GpApp/HighScores.cpp @@ -631,14 +631,16 @@ void GetHighScoreBanner (void) Boolean OpenHighScoresFile (const VFileSpec &scoreSpec, PortabilityLayer::IOStream *&scoresStream) { PLError_t theErr; + + PortabilityLayer::FileManager *fm = PortabilityLayer::FileManager::GetInstance(); - theErr = PortabilityLayer::FileManager::GetInstance()->OpenFileDF(scoreSpec.m_dir, scoreSpec.m_name, PortabilityLayer::EFilePermission_Any, scoresStream); + theErr = fm->OpenFileData(scoreSpec.m_dir, scoreSpec.m_name, PortabilityLayer::EFilePermission_Any, scoresStream); if (theErr == PLErrors::kFileNotFound) { - theErr = FSpCreate(scoreSpec, 'ozm5', 'gliS'); + theErr = fm->CreateFileAtCurrentTime(scoreSpec.m_dir, scoreSpec.m_name, 'ozm5', 'gliS'); if (!CheckFileError(theErr, PSTR("New High Scores File"))) return (false); - theErr = FSpOpenDF(scoreSpec, fsCurPerm, scoresStream); + theErr = fm->OpenFileData(scoreSpec.m_dir, scoreSpec.m_name, PortabilityLayer::EFilePermission_Any, scoresStream); if (!CheckFileError(theErr, PSTR("High Score"))) return (false); } diff --git a/GpApp/House.cpp b/GpApp/House.cpp index 5281289..a458bb0 100644 --- a/GpApp/House.cpp +++ b/GpApp/House.cpp @@ -90,7 +90,7 @@ Boolean CreateNewHouse (void) return (false); } - theErr = FSpCreate(theSpec, 'ozm5', 'gliH'); + theErr = fm->CreateFileAtCurrentTime(theSpec.m_dir, theSpec.m_name, 'ozm5', 'gliH'); if (!CheckFileError(theErr, PSTR("New House"))) return (false); HCreateResFile(theSpec.m_dir, theSpec.m_name); diff --git a/GpApp/HouseIO.cpp b/GpApp/HouseIO.cpp index 2966d65..83f6b59 100644 --- a/GpApp/HouseIO.cpp +++ b/GpApp/HouseIO.cpp @@ -13,6 +13,7 @@ #include "PLPasStr.h" #include "Externs.h" #include "Environ.h" +#include "FileManager.h" #include "House.h" #include "IOStream.h" #include "ObjectEdit.h" @@ -182,7 +183,7 @@ Boolean OpenHouse (void) houseIsReadOnly = IsFileReadOnly(theHousesSpecs[thisHouseIndex]); - theErr = FSpOpenDF(theHousesSpecs[thisHouseIndex], fsCurPerm, houseStream); + theErr = PortabilityLayer::FileManager::GetInstance()->OpenFileData(theHousesSpecs[thisHouseIndex].m_dir, theHousesSpecs[thisHouseIndex].m_name, PortabilityLayer::EFilePermission_Any, houseStream); if (!CheckFileError(theErr, thisHouseName)) return (false); diff --git a/GpApp/Prefs.cpp b/GpApp/Prefs.cpp index 615bf3d..491a69a 100644 --- a/GpApp/Prefs.cpp +++ b/GpApp/Prefs.cpp @@ -44,20 +44,22 @@ Boolean WritePrefs (const prefsInfo *thePrefs) PortabilityLayer::IOStream *fileStream; long byteCount; Str255 fileName; - + + PortabilityLayer::FileManager *fm = PortabilityLayer::FileManager::GetInstance(); + PasStringCopy(kPrefFileName, fileName); VFileSpec theSpecs = MakeVFileSpec(PortabilityLayer::VirtualDirectories::kPrefs, fileName); - if (!PortabilityLayer::FileManager::GetInstance()->FileExists(PortabilityLayer::VirtualDirectories::kPrefs, fileName)) + if (!fm->FileExists(PortabilityLayer::VirtualDirectories::kPrefs, fileName)) { - theErr = FSpCreate(theSpecs, kPrefCreatorType, kPrefFileType); + theErr = fm->CreateFileAtCurrentTime(theSpecs.m_dir, theSpecs.m_name, kPrefCreatorType, kPrefFileType); if (theErr != PLErrors::kNone) { CheckFileError(theErr, PSTR("Preferences")); return(false); } } - theErr = FSpOpenDF(theSpecs, fsRdWrPerm, fileStream); + theErr = fm->OpenFileData(theSpecs.m_dir, theSpecs.m_name, PortabilityLayer::EFilePermission_Write, fileStream); if (theErr != PLErrors::kNone) { CheckFileError(theErr, PSTR("Preferences")); @@ -98,6 +100,8 @@ PLError_t ReadPrefs (prefsInfo *thePrefs) long byteCount; VFileSpec theSpecs; Str255 fileName; + + PortabilityLayer::FileManager *fm = PortabilityLayer::FileManager::GetInstance(); PasStringCopy(kPrefFileName, fileName); @@ -106,7 +110,7 @@ PLError_t ReadPrefs (prefsInfo *thePrefs) if (!PortabilityLayer::FileManager::GetInstance()->FileExists(theSpecs.m_dir, theSpecs.m_name)) return PLErrors::kFileNotFound; - theErr = FSpOpenDF(theSpecs, fsRdWrPerm, fileStream); + theErr = fm->OpenFileData(theSpecs.m_dir, theSpecs.m_name, PortabilityLayer::EFilePermission_Read, fileStream); if (theErr != PLErrors::kNone) { CheckFileError(theErr, PSTR("Preferences")); @@ -139,12 +143,7 @@ Boolean DeletePrefs () theSpecs = MakeVFileSpec(PortabilityLayer::VirtualDirectories::kPrefs, fileName); - theErr = FSpDelete(theSpecs); - - if (theErr != PLErrors::kNone) - return(false); - - return(true); + return PortabilityLayer::FileManager::GetInstance()->DeleteFile(theSpecs.m_dir, theSpecs.m_name); } //-------------------------------------------------------------- LoadPrefs diff --git a/GpApp/SoundSync_Win32.cpp b/GpApp/SoundSync_Win32.cpp index c3db567..5786250 100644 --- a/GpApp/SoundSync_Win32.cpp +++ b/GpApp/SoundSync_Win32.cpp @@ -7,7 +7,7 @@ static volatile uint64_t gs_prioritiesBlob = 0; SoundSyncState SoundSync_ReadAll() { - const uint16_t priorities = gs_prioritiesBlob; + const uint64_t priorities = gs_prioritiesBlob; SoundSyncState state; state.priority0 = static_cast((priorities >> 0) & 0xffff); diff --git a/GpD3D/GpSystemServices_Win32.cpp b/GpD3D/GpSystemServices_Win32.cpp index 4fb4dea..6ae2182 100644 --- a/GpD3D/GpSystemServices_Win32.cpp +++ b/GpD3D/GpSystemServices_Win32.cpp @@ -13,10 +13,29 @@ GpSystemServices_Win32::GpSystemServices_Win32() { } -uint32_t GpSystemServices_Win32::GetTime() const +int64_t GpSystemServices_Win32::GetTime() const { - //PL_NotYetImplemented_TODO("Time"); - return 0; + SYSTEMTIME epochStart; + epochStart.wYear = 1904; + epochStart.wMonth = 1; + epochStart.wDayOfWeek = 5; + epochStart.wDay = 1; + epochStart.wHour = 0; + epochStart.wMinute = 0; + epochStart.wSecond = 0; + epochStart.wMilliseconds = 0; + + FILETIME epochStartFT; + if (!SystemTimeToFileTime(&epochStart, &epochStartFT)) + return 0; + + FILETIME currentTime; + GetSystemTimeAsFileTime(¤tTime); + + int64_t epochStart64 = (static_cast(epochStartFT.dwLowDateTime) & 0xffffffff) | (static_cast(epochStartFT.dwHighDateTime) << 32); + int64_t currentTime64 = (static_cast(currentTime.dwLowDateTime) & 0xffffffff) | (static_cast(currentTime.dwHighDateTime) << 32); + + return currentTime64 - epochStart64; } void GpSystemServices_Win32::GetLocalDateTime(unsigned int &year, unsigned int &month, unsigned int &day, unsigned int &hour, unsigned int &minute, unsigned int &second) const @@ -36,12 +55,21 @@ PortabilityLayer::HostMutex *GpSystemServices_Win32::CreateMutex() { return GpMutex_Win32::Create(); } - + PortabilityLayer::HostThreadEvent *GpSystemServices_Win32::CreateThreadEvent(bool autoReset, bool startSignaled) { return GpThreadEvent_Win32::Create(autoReset, startSignaled); } +uint64_t GpSystemServices_Win32::GetFreeMemoryCosmetic() const +{ + MEMORYSTATUSEX memStatus; + if (!GlobalMemoryStatusEx(&memStatus)) + return 0; + + return memStatus.ullAvailPhys; +} + GpSystemServices_Win32 *GpSystemServices_Win32::GetInstance() { return &ms_instance; diff --git a/GpD3D/GpSystemServices_Win32.h b/GpD3D/GpSystemServices_Win32.h index cb52809..00c521d 100644 --- a/GpD3D/GpSystemServices_Win32.h +++ b/GpD3D/GpSystemServices_Win32.h @@ -15,10 +15,11 @@ class GpSystemServices_Win32 final : public PortabilityLayer::HostSystemServices public: GpSystemServices_Win32(); - uint32_t GetTime() const override; + int64_t GetTime() const override; void GetLocalDateTime(unsigned int &year, unsigned int &month, unsigned int &day, unsigned int &hour, unsigned int &minute, unsigned int &second) const override; - PortabilityLayer::HostMutex *CreateMutex() override; + PortabilityLayer::HostMutex *CreateMutex() override; PortabilityLayer::HostThreadEvent *CreateThreadEvent(bool autoReset, bool startSignaled) override; + uint64_t GetFreeMemoryCosmetic() const override; static GpSystemServices_Win32 *GetInstance(); diff --git a/PortabilityLayer/ByteSwap.cpp b/PortabilityLayer/ByteSwap.cpp index 92836e8..1fc559e 100644 --- a/PortabilityLayer/ByteSwap.cpp +++ b/PortabilityLayer/ByteSwap.cpp @@ -1,37 +1,54 @@ -#include "ByteSwap.h" +#include "ByteSwap.h" +#include "CoreDefs.h" namespace PortabilityLayer { namespace ByteSwap - { - void BigInt16(int16_t &v) - { - const uint8_t *asU8 = reinterpret_cast(&v); - const int8_t *asS8 = reinterpret_cast(&v); + { + template + void SwapArbitrary(TNumberType &v) + { + PL_STATIC_ASSERT(sizeof(TNumberType) == sizeof(TUnsignedType)); + + uint8_t bytes[sizeof(TNumberType)]; + for (size_t i = 0; i < sizeof(TNumberType); i++) + bytes[i] = reinterpret_cast(&v)[i]; + + TUnsignedType result = 0; + for (size_t i = 0; i < sizeof(TNumberType); i++) + result |= static_cast(bytes[i]) << (sizeof(TUnsignedType) * 8 - 8 - (i * 8)); - v = static_cast((asS8[0] << 8) | asU8[1]); + v = static_cast(result); + } + + void BigInt16(int16_t &v) + { + SwapArbitrary(v); } void BigInt32(int32_t &v) { - const uint8_t *asU8 = reinterpret_cast(&v); - const int8_t *asS8 = reinterpret_cast(&v); - - v = static_cast((asS8[0] << 24) | (asU8[1] << 16) | (asU8[2] << 8) | asU8[3]); + SwapArbitrary(v); } - void BigUInt16(uint16_t &v) + void BigInt64(int64_t &v) { - const uint8_t *asU8 = reinterpret_cast(&v); + SwapArbitrary(v); + } - v = static_cast((asU8[0] << 8) | asU8[1]); + void BigUInt16(uint16_t &v) + { + SwapArbitrary(v); } void BigUInt32(uint32_t &v) { - const uint8_t *asU8 = reinterpret_cast(&v); + SwapArbitrary(v); + } - v = static_cast((asU8[0] << 24) | (asU8[1] << 16) | (asU8[2] << 8) | asU8[3]); + void BigUInt64(uint64_t &v) + { + SwapArbitrary(v); } } } diff --git a/PortabilityLayer/ByteSwap.h b/PortabilityLayer/ByteSwap.h index ca132db..c99aa5c 100644 --- a/PortabilityLayer/ByteSwap.h +++ b/PortabilityLayer/ByteSwap.h @@ -10,8 +10,10 @@ namespace PortabilityLayer { void BigInt16(int16_t &v); void BigInt32(int32_t &v); + void BigInt64(int64_t &v); void BigUInt16(uint16_t &v); void BigUInt32(uint32_t &v); + void BigUInt64(uint64_t &v); } } diff --git a/PortabilityLayer/FileManager.cpp b/PortabilityLayer/FileManager.cpp index fda024b..1ed8476 100644 --- a/PortabilityLayer/FileManager.cpp +++ b/PortabilityLayer/FileManager.cpp @@ -7,6 +7,7 @@ #include "PLPasStr.h" #include "PLErrorCodes.h" #include "ResTypeID.h" +#include "HostSystemServices.h" #include @@ -21,13 +22,14 @@ namespace PortabilityLayer bool DeleteFile(VirtualDirectory_t dirID, const PLPasStr &filename) override; PLError_t CreateFile(VirtualDirectory_t dirID, const PLPasStr &filename, const MacFileProperties &mfp) override; + PLError_t CreateFileAtCurrentTime(VirtualDirectory_t dirID, const PLPasStr &filename, const ResTypeID &fileCreator, const ResTypeID &fileType) override; - PLError_t OpenFileDF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, IOStream *&outRefNum) override; - PLError_t OpenFileRF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, IOStream *&outRefNum) override; + PLError_t OpenFileData(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, IOStream *&outRefNum) override; + PLError_t OpenFileResources(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, IOStream *&outRefNum) override; bool ReadFileProperties(VirtualDirectory_t dirID, const PLPasStr &filename, MacFileProperties &properties) override; - PLError_t RawOpenFileDF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream *&outStream) override; - PLError_t RawOpenFileRF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream *&outStream) override; + PLError_t RawOpenFileData(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream *&outStream) override; + PLError_t RawOpenFileResources(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream *&outStream) override; static FileManagerImpl *GetInstance(); @@ -86,12 +88,22 @@ namespace PortabilityLayer return PLErrors::kNone; } - PLError_t FileManagerImpl::OpenFileDF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission permission, IOStream *&outStream) + PLError_t FileManagerImpl::CreateFileAtCurrentTime(VirtualDirectory_t dirID, const PLPasStr &filename, const ResTypeID &fileCreator, const ResTypeID &fileType) + { + MacFileProperties mfp; + fileCreator.ExportAsChars(mfp.m_fileCreator); + fileType.ExportAsChars(mfp.m_fileType); + mfp.m_creationDate = mfp.m_modifiedDate = PortabilityLayer::HostSystemServices::GetInstance()->GetTime(); + + return CreateFile(dirID, filename, mfp); + } + + PLError_t FileManagerImpl::OpenFileData(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission permission, IOStream *&outStream) { return OpenFileFork(dirID, filename, ".gpd", permission, outStream); } - PLError_t FileManagerImpl::OpenFileRF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission permission, IOStream *&outStream) + PLError_t FileManagerImpl::OpenFileResources(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission permission, IOStream *&outStream) { return OpenFileFork(dirID, filename, ".gpr", permission, outStream); } @@ -113,12 +125,12 @@ namespace PortabilityLayer return readOk; } - PLError_t FileManagerImpl::RawOpenFileDF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission permission, bool ignoreMeta, IOStream *&outStream) + PLError_t FileManagerImpl::RawOpenFileData(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission permission, bool ignoreMeta, IOStream *&outStream) { return RawOpenFileFork(dirID, filename, ".gpd", permission, ignoreMeta, false, outStream); } - PLError_t FileManagerImpl::RawOpenFileRF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission permission, bool ignoreMeta, IOStream *&outStream) + PLError_t FileManagerImpl::RawOpenFileResources(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission permission, bool ignoreMeta, IOStream *&outStream) { return RawOpenFileFork(dirID, filename, ".gpr", permission, ignoreMeta, false, outStream); } diff --git a/PortabilityLayer/FileManager.h b/PortabilityLayer/FileManager.h index 7e11219..db4e866 100644 --- a/PortabilityLayer/FileManager.h +++ b/PortabilityLayer/FileManager.h @@ -25,13 +25,14 @@ namespace PortabilityLayer virtual bool DeleteFile(VirtualDirectory_t dirID, const PLPasStr &filename) = 0; virtual PLError_t CreateFile(VirtualDirectory_t dirID, const PLPasStr &filename, const MacFileProperties &mfp) = 0; + virtual PLError_t CreateFileAtCurrentTime(VirtualDirectory_t dirID, const PLPasStr &filename, const ResTypeID &fileCreator, const ResTypeID &fileType) = 0; - virtual PLError_t OpenFileDF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, IOStream *&outStream) = 0; - virtual PLError_t OpenFileRF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, IOStream *&outStream) = 0; + virtual PLError_t OpenFileData(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, IOStream *&outStream) = 0; + virtual PLError_t OpenFileResources(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, IOStream *&outStream) = 0; virtual bool ReadFileProperties(VirtualDirectory_t dirID, const PLPasStr &filename, MacFileProperties &properties) = 0; - virtual PLError_t RawOpenFileDF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream *&outStream) = 0; - virtual PLError_t RawOpenFileRF(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream *&outStream) = 0; + virtual PLError_t RawOpenFileData(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream *&outStream) = 0; + virtual PLError_t RawOpenFileResources(VirtualDirectory_t dirID, const PLPasStr &filename, EFilePermission filePermission, bool ignoreMeta, IOStream *&outStream) = 0; static FileManager *GetInstance(); }; diff --git a/PortabilityLayer/HostSystemServices.h b/PortabilityLayer/HostSystemServices.h index df779c0..b9f19d2 100644 --- a/PortabilityLayer/HostSystemServices.h +++ b/PortabilityLayer/HostSystemServices.h @@ -16,10 +16,11 @@ namespace PortabilityLayer class HostSystemServices { public: - virtual uint32_t GetTime() const = 0; + virtual int64_t GetTime() const = 0; virtual void GetLocalDateTime(unsigned int &year, unsigned int &month, unsigned int &day, unsigned int &hour, unsigned int &minute, unsigned int &second) const = 0; virtual HostMutex *CreateMutex() = 0; virtual HostThreadEvent *CreateThreadEvent(bool autoReset, bool startSignaled) = 0; + virtual size_t GetFreeMemoryCosmetic() const = 0; // Returns free memory in bytes, does not have to be accurate static void SetInstance(HostSystemServices *instance); static HostSystemServices *GetInstance(); diff --git a/PortabilityLayer/MacFileInfo.cpp b/PortabilityLayer/MacFileInfo.cpp index 0fc700a..3ec04e0 100644 --- a/PortabilityLayer/MacFileInfo.cpp +++ b/PortabilityLayer/MacFileInfo.cpp @@ -33,8 +33,8 @@ namespace PortabilityLayer PortabilityLayer::ByteSwap::BigInt16(props.m_xPos); PortabilityLayer::ByteSwap::BigInt16(props.m_yPos); PortabilityLayer::ByteSwap::BigUInt16(props.m_finderFlags); - PortabilityLayer::ByteSwap::BigUInt32(props.m_creationDate); - PortabilityLayer::ByteSwap::BigUInt32(props.m_modifiedDate); + PortabilityLayer::ByteSwap::BigInt64(props.m_creationDate); + PortabilityLayer::ByteSwap::BigInt64(props.m_modifiedDate); } void MacFilePropertiesSerialized::Serialize(const MacFileProperties &props) @@ -57,7 +57,7 @@ namespace PortabilityLayer memcpy(m_data + kOffsetYPos, &yPos, 2); memcpy(m_data + kOffsetFinderFlags, &finderFlags, 2); memcpy(m_data + kProtected, &props.m_protected, 1); - memcpy(m_data + kCreationDate, &creationDate, 4); - memcpy(m_data + kModifiedDate, &modifiedDate, 4); + memcpy(m_data + kCreationDate, &creationDate, 8); + memcpy(m_data + kModifiedDate, &modifiedDate, 8); } } diff --git a/PortabilityLayer/MacFileInfo.h b/PortabilityLayer/MacFileInfo.h index 0b3dca7..69fe00b 100644 --- a/PortabilityLayer/MacFileInfo.h +++ b/PortabilityLayer/MacFileInfo.h @@ -27,8 +27,8 @@ namespace PortabilityLayer int16_t m_yPos; uint16_t m_finderFlags; uint8_t m_protected; - uint32_t m_creationDate; - uint32_t m_modifiedDate; + int64_t m_creationDate; + int64_t m_modifiedDate; void Serialize(void *buffer) const; void Deserialize(const void *buffer); @@ -43,9 +43,9 @@ namespace PortabilityLayer static const unsigned int kOffsetFinderFlags = 12; static const unsigned int kProtected = 14; static const unsigned int kCreationDate = 15; - static const unsigned int kModifiedDate = 19; + static const unsigned int kModifiedDate = 23; - static const unsigned int kSize = 23; + static const unsigned int kSize = 31; uint8_t m_data[kSize]; diff --git a/PortabilityLayer/PLCore.cpp b/PortabilityLayer/PLCore.cpp index 49784dc..9a326cc 100644 --- a/PortabilityLayer/PLCore.cpp +++ b/PortabilityLayer/PLCore.cpp @@ -677,53 +677,6 @@ VFileSpec MakeVFileSpec(PortabilityLayer::VirtualDirectory_t dir, const PLPasStr return spec; } -PLError_t FSpCreate(const VFileSpec &spec, UInt32 creator, UInt32 fileType) -{ - PortabilityLayer::FileManager *fm = PortabilityLayer::FileManager::GetInstance(); - - PortabilityLayer::MacFileProperties props; - PortabilityLayer::ResTypeIDCodec::Encode(creator, props.m_fileCreator); - PortabilityLayer::ResTypeIDCodec::Encode(fileType, props.m_fileType); - - PL_NotYetImplemented_TODO("DateTime"); - - return fm->CreateFile(spec.m_dir, spec.m_name, props); -} - -PLError_t FSpDirCreate(const VFileSpec &spec, long *outDirID) -{ - PL_NotYetImplemented(); - return PLErrors::kNone; -} - -PLError_t FSpOpenDF(const VFileSpec &spec, int permission, PortabilityLayer::IOStream *&stream) -{ - PortabilityLayer::EFilePermission perm = PortabilityLayer::EFilePermission_Any; - switch (permission) - { - case fsRdPerm: - perm = PortabilityLayer::EFilePermission_Read; - break; - case fsWrPerm: - case fsRdWrPerm: - perm = PortabilityLayer::EFilePermission_ReadWrite; - break; - case fsCurPerm: - perm = PortabilityLayer::EFilePermission_Any; - break; - default: - return PLErrors::kAccessDenied; - } - - return PortabilityLayer::FileManager::GetInstance()->OpenFileDF(spec.m_dir, spec.m_name, perm, stream); -} - -PLError_t FSpDelete(const VFileSpec &spec) -{ - PL_NotYetImplemented(); - return PLErrors::kNone; -} - PLError_t FSpGetFInfo(const VFileSpec &spec, VFileInfo &finfo) { PortabilityLayer::MacFileProperties mfp; @@ -736,18 +689,6 @@ PLError_t FSpGetFInfo(const VFileSpec &spec, VFileInfo &finfo) return PLErrors::kNone; } -PLError_t SetEOF(short refNum, long byteCount) -{ - PL_NotYetImplemented(); - return PLErrors::kNone; -} - -PLError_t PBGetCatInfo(CInfoPBPtr paramBlock, Boolean async) -{ - PL_NotYetImplemented(); - return PLErrors::kNone; -} - DirectoryFileListEntry *GetDirectoryFiles(PortabilityLayer::VirtualDirectory_t dirID) { PortabilityLayer::MemoryManager *mm = PortabilityLayer::MemoryManager::GetInstance(); @@ -1029,20 +970,6 @@ void DisposePtr(void *ptr) PL_NotYetImplemented(); } -void PurgeSpace(long *totalFree, long *contiguousFree) -{ - PL_NotYetImplemented(); -} - -void HSetState(Handle handle, char state) -{ -} - -char HGetState(Handle handle) -{ - return 0; -} - void BlockMove(const void *src, void *dest, Size size) { memcpy(dest, src, size); diff --git a/PortabilityLayer/PLCore.h b/PortabilityLayer/PLCore.h index 12cc6ac..451177b 100644 --- a/PortabilityLayer/PLCore.h +++ b/PortabilityLayer/PLCore.h @@ -300,17 +300,11 @@ UInt32 FreeMem(); PLError_t AEProcessAppleEvent(EventRecord *evt); -PLError_t FindFolder(int refNum, int posType, bool createFolder, short *volumeRef, long *dirID); void GetIndString(unsigned char *str, int stringsID, int fnameIndex); // Fetches a string resource of some sort PLError_t PBDirCreate(HFileParam *fileParam, bool asynchronous); VFileSpec MakeVFileSpec(PortabilityLayer::VirtualDirectory_t dir, const PLPasStr &fileName); -PLError_t FSpCreate(const VFileSpec &spec, UInt32 creator, UInt32 fileType); -PLError_t FSpDirCreate(const VFileSpec &spec, long *outDirID); -PLError_t FSpOpenDF(const VFileSpec &spec, int permission, PortabilityLayer::IOStream *&stream); -PLError_t FSpOpenRF(const VFileSpec &spec, int permission, PortabilityLayer::IOStream *&stream); -PLError_t FSpDelete(const VFileSpec &spec); PLError_t FSpGetFInfo(const VFileSpec &spec, VFileInfo &finfoOut); PLError_t PBGetCatInfo(CInfoPBPtr paramBlock, Boolean async); @@ -348,11 +342,8 @@ void *NewPtr(Size size); void *NewPtrClear(Size size); void DisposePtr(void *ptr); -Size MaxMem(Size *growBytes); void PurgeSpace(long *totalFree, long *contiguousFree); -PLError_t MemError(); - void BlockMove(const void *src, void *dest, Size size); Boolean WaitNextEvent(int eventMask, EventRecord *eventOut, long sleep, void *unknown); diff --git a/PortabilityLayer/PLResourceManager.cpp b/PortabilityLayer/PLResourceManager.cpp index 3d07b24..805612c 100644 --- a/PortabilityLayer/PLResourceManager.cpp +++ b/PortabilityLayer/PLResourceManager.cpp @@ -109,7 +109,7 @@ namespace PortabilityLayer return -1; IOStream *fStream = nullptr; - if (FileManager::GetInstance()->RawOpenFileRF(virtualDir, filename, EFilePermission_Read, true, fStream) != PLErrors::kNone) + if (FileManager::GetInstance()->RawOpenFileResources(virtualDir, filename, EFilePermission_Read, true, fStream) != PLErrors::kNone) return -1; ResourceFile *resFile = new ResourceFile(); diff --git a/PortabilityLayer/ResTypeID.h b/PortabilityLayer/ResTypeID.h index 36a1492..67c71bf 100644 --- a/PortabilityLayer/ResTypeID.h +++ b/PortabilityLayer/ResTypeID.h @@ -1,68 +1,75 @@ -#pragma once -#ifndef __PL_RES_TYPE_ID_H__ -#define __PL_RES_TYPE_ID_H__ - -#include - -namespace PortabilityLayer -{ - class ResTypeID - { - public: - ResTypeID(); - ResTypeID(int32_t i); - ResTypeID(const ResTypeID &other); - explicit ResTypeID(const char *chars); - - ResTypeID &operator=(const ResTypeID &other); - bool operator==(const ResTypeID &other) const; - bool operator!=(const ResTypeID &other) const; - - private: - char m_id[4]; - }; -} - -#include "ResTypeIDCodec.h" -#include - -namespace PortabilityLayer -{ - inline ResTypeID::ResTypeID() - { - m_id[0] = m_id[1] = m_id[2] = m_id[3] = 0; - } - - inline ResTypeID::ResTypeID(int32_t i) - { - ResTypeIDCodec::Encode(i, m_id); - } - - inline ResTypeID::ResTypeID(const ResTypeID &other) - { - memcpy(m_id, other.m_id, 4); - } - - inline ResTypeID::ResTypeID(const char *chars) - { - memcpy(m_id, chars, 4); - } - - inline ResTypeID &ResTypeID::operator=(const ResTypeID &other) - { - memcpy(m_id, other.m_id, 4); - return *this; - } - - inline bool ResTypeID::operator==(const ResTypeID &other) const - { - return memcmp(m_id, other.m_id, 4) == 0; - } - - inline bool ResTypeID::operator!=(const ResTypeID &other) const - { - return memcmp(m_id, other.m_id, 4) != 0; - } -} - -#endif +#pragma once +#ifndef __PL_RES_TYPE_ID_H__ +#define __PL_RES_TYPE_ID_H__ + +#include + +namespace PortabilityLayer +{ + class ResTypeID + { + public: + ResTypeID(); + ResTypeID(int32_t i); + ResTypeID(const ResTypeID &other); + explicit ResTypeID(const char *chars); + + ResTypeID &operator=(const ResTypeID &other); + bool operator==(const ResTypeID &other) const; + bool operator!=(const ResTypeID &other) const; + + void ExportAsChars(char *chars) const; + + private: + char m_id[4]; + }; +} + +#include "ResTypeIDCodec.h" +#include + +namespace PortabilityLayer +{ + inline ResTypeID::ResTypeID() + { + m_id[0] = m_id[1] = m_id[2] = m_id[3] = 0; + } + + inline ResTypeID::ResTypeID(int32_t i) + { + ResTypeIDCodec::Encode(i, m_id); + } + + inline ResTypeID::ResTypeID(const ResTypeID &other) + { + memcpy(m_id, other.m_id, 4); + } + + inline ResTypeID::ResTypeID(const char *chars) + { + memcpy(m_id, chars, 4); + } + + inline ResTypeID &ResTypeID::operator=(const ResTypeID &other) + { + memcpy(m_id, other.m_id, 4); + return *this; + } + + inline bool ResTypeID::operator==(const ResTypeID &other) const + { + return memcmp(m_id, other.m_id, 4) == 0; + } + + inline bool ResTypeID::operator!=(const ResTypeID &other) const + { + return memcmp(m_id, other.m_id, 4) != 0; + } + + inline void ResTypeID::ExportAsChars(char *chars) const + { + memcpy(chars, m_id, 4); + } +} + +#endif