diff --git a/toolbox/mm.cpp b/toolbox/mm.cpp index e7a7acb..f1778e3 100644 --- a/toolbox/mm.cpp +++ b/toolbox/mm.cpp @@ -1474,4 +1474,73 @@ namespace MM return SetMemError(0); } + + uint16_t TempNewHandle(void) + { + // FUNCTION TempNewHandle (logicalSize: Size; + // VAR resultCode: OSErr): Handle; + uint16_t rv; + uint32_t logicalSize; + uint32_t resultCode; + uint32_t theHandle; + + uint32_t sp = StackFrame<8>(logicalSize, resultCode); + + Log(" TempNewHandle(%08x, %08x)\n", logicalSize, resultCode); + + rv = Native::NewHandle(logicalSize, true, theHandle); + + if (resultCode) memoryWriteWord(rv, resultCode); + ToolReturn<4>(sp, theHandle); + return rv; + } + + uint16_t TempHLock(void) + { + // PROCEDURE TempHLock (theHandle: Handle; VAR resultCode: OSErr); + uint32_t theHandle; + uint32_t resultCode; + + StackFrame<8>(theHandle, resultCode); + + Log(" TempHLock(%08x, %08x)\n", theHandle, resultCode); + + uint16_t rv = Native::HLock(theHandle); + + if (resultCode) memoryWriteWord(rv, resultCode); + return rv; + } + + uint16_t TempHUnlock(void) + { + // PROCEDURE TempHUnlock (theHandle: Handle; VAR resultCode: OSErr); + uint32_t theHandle; + uint32_t resultCode; + + StackFrame<8>(theHandle, resultCode); + + Log(" TempHUnlock(%08x, %08x)\n", theHandle, resultCode); + + uint16_t rv = Native::HUnlock(theHandle); + + if (resultCode) memoryWriteWord(rv, resultCode); + return rv; + } + + + uint16_t TempDisposeHandle(void) + { + // PROCEDURE TempDisposeHandle (theHandle: Handle; VAR resultCode: OSErr); + uint32_t theHandle; + uint32_t resultCode; + + StackFrame<8>(theHandle, resultCode); + + Log(" TempDisposeHandle(%08x, %08x)\n", theHandle, resultCode); + + uint16_t rv = Native::DisposeHandle(theHandle); + + if (resultCode) memoryWriteWord(rv, resultCode); + return rv; + } } diff --git a/toolbox/mm.h b/toolbox/mm.h index ecb78be..9602f71 100644 --- a/toolbox/mm.h +++ b/toolbox/mm.h @@ -91,6 +91,11 @@ namespace MM uint16_t TempMaxMem(void); uint16_t TempFreeMem(void); + uint16_t TempNewHandle(void); + + uint16_t TempHLock(void); + uint16_t TempHUnlock(void); + uint16_t TempDisposeHandle(void); } diff --git a/toolbox/toolbox.cpp b/toolbox/toolbox.cpp index 8208e37..ca2f0c1 100644 --- a/toolbox/toolbox.cpp +++ b/toolbox/toolbox.cpp @@ -68,6 +68,19 @@ namespace ToolBox { case 0x0018: return MM::TempFreeMem(); + case 0x001d: + return MM::TempNewHandle(); + + case 0x001e: + return MM::TempHLock(); + + case 0x001f: + return MM::TempHUnlock(); + + case 0x0020: + return MM::TempDisposeHandle(); + + default: fprintf(stderr, "OSDispatch: selector %04x not implemented\n", selector);