Temp Handle functions

This commit is contained in:
Kelvin Sherlock 2014-12-28 18:15:27 -05:00
parent f9508bbfda
commit 490519b0d1
3 changed files with 87 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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);