mirror of
https://github.com/ksherlock/mpw.git
synced 2024-11-25 19:30:50 +00:00
refnum ioctl
This commit is contained in:
parent
85f19644f3
commit
04114124ac
@ -109,10 +109,10 @@ namespace MPW
|
|||||||
}
|
}
|
||||||
|
|
||||||
memoryWriteWord(f.error, parm + 2);
|
memoryWriteWord(f.error, parm + 2);
|
||||||
return kEINVAL;
|
return d0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ftrap_iofname(uint32_t parm, uint32_t arg)
|
uint32_t ftrap_fname(uint32_t parm, uint32_t arg)
|
||||||
{
|
{
|
||||||
// return file name.
|
// return file name.
|
||||||
// AsmIIgs uses this...
|
// AsmIIgs uses this...
|
||||||
@ -120,13 +120,47 @@ namespace MPW
|
|||||||
return kEINVAL;
|
return kEINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t ftrap_refnum(uint32_t parm, uint32_t arg)
|
||||||
|
{
|
||||||
|
// returns the refnum in *arg
|
||||||
|
uint32_t d0;
|
||||||
|
|
||||||
|
MPWFile f;
|
||||||
|
|
||||||
|
f.flags = memoryReadWord(parm);
|
||||||
|
f.error = memoryReadWord(parm + 2);
|
||||||
|
f.device = memoryReadLong(parm + 4);
|
||||||
|
f.cookie = memoryReadLong(parm + 8);
|
||||||
|
f.count = memoryReadLong(parm + 12);
|
||||||
|
f.buffer = memoryReadLong(parm + 16);
|
||||||
|
|
||||||
|
f.error = 0;
|
||||||
|
|
||||||
|
int fd = f.cookie;
|
||||||
|
|
||||||
|
if (fd < 0 || fd >= FDTable.size() || !FDTable[fd])
|
||||||
|
{
|
||||||
|
d0 = kEINVAL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d0 = 0;
|
||||||
|
memoryWriteWord(fd, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
memoryWriteWord(f.error, parm + 2);
|
||||||
|
return d0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t ftrap_lseek(uint32_t parm, uint32_t arg)
|
uint32_t ftrap_lseek(uint32_t parm, uint32_t arg)
|
||||||
{
|
{
|
||||||
MPWFile f;
|
MPWFile f;
|
||||||
uint32_t d0;
|
uint32_t d0;
|
||||||
|
|
||||||
uint32_t whence = memoryReadLong(arg);
|
uint32_t whence = memoryReadLong(arg);
|
||||||
int32_t offset =memoryReadLong(arg + 4);
|
int32_t offset =memoryReadLong(arg + 4); // signed value.
|
||||||
int nativeWhence = 0;
|
int nativeWhence = 0;
|
||||||
|
|
||||||
f.flags = memoryReadWord(parm);
|
f.flags = memoryReadWord(parm);
|
||||||
@ -142,7 +176,6 @@ namespace MPW
|
|||||||
|
|
||||||
// TODO - MacOS returns eofERR and sets mark to eof
|
// TODO - MacOS returns eofERR and sets mark to eof
|
||||||
// if seeking past the eof.
|
// if seeking past the eof.
|
||||||
// TODO - MacOS treats offset as a signed value, unix is unsigned [?]
|
|
||||||
switch (whence)
|
switch (whence)
|
||||||
{
|
{
|
||||||
case kSEEK_CUR:
|
case kSEEK_CUR:
|
||||||
@ -213,10 +246,13 @@ namespace MPW
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case kFIOFNAME:
|
case kFIOFNAME:
|
||||||
d0 = ftrap_iofname(fd, arg);
|
d0 = ftrap_fname(fd, arg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kFIOREFNUM:
|
case kFIOREFNUM:
|
||||||
|
d0 = ftrap_refnum(fd, arg);
|
||||||
|
break;
|
||||||
|
|
||||||
case kFIOSETEOF:
|
case kFIOSETEOF:
|
||||||
fprintf(stderr, "ioctl - unsupported op %04x\n", cmd);
|
fprintf(stderr, "ioctl - unsupported op %04x\n", cmd);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
Loading…
Reference in New Issue
Block a user