From fda2e0a378775983d34f4497e66daaf3da1c7c4c Mon Sep 17 00:00:00 2001 From: Charles Lehner Date: Fri, 26 Sep 2014 00:47:12 -0400 Subject: [PATCH] Add some Files Manager glue functions (#4) --- libretro/glue.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/libretro/glue.c b/libretro/glue.c index 91bc1a836b..f5d1ac9a24 100644 --- a/libretro/glue.c +++ b/libretro/glue.c @@ -20,6 +20,8 @@ #include #include #include +#include +#include pascal Size GetPtrSize(Ptr ptr) { @@ -61,3 +63,60 @@ pascal OSErr Eject (ConstStr63Param volName, short vRefNum) pb.volumeParam.ioVRefNum = vRefNum; return PBEject(&pb); } + +pascal OSErr FSOpen (ConstStr255Param fileName, short vRefNum, short *refNum) +{ + OSErr err; + ParamBlockRec pb; + memset(&pb, 0, sizeof(pb)); + pb.ioParam.ioNamePtr = (StringPtr)fileName; + pb.ioParam.ioVRefNum = vRefNum; + + // Try newer OpenDF first, because it does not open drivers + err = PBOpenDFSync(&pb); + if (err == paramErr) { + // OpenDF not implemented, so use regular Open. + err = PBOpenSync(&pb); + } + + *refNum = pb.ioParam.ioRefNum; + return err; +} + +pascal OSErr OpenDF (ConstStr255Param fileName, short vRefNum, short *refNum) +{ + return FSOpen(fileName, vRefNum, refNum); +} + +pascal OSErr FSClose (short refNum) +{ + ParamBlockRec pb; + memset(&pb, 0, sizeof(pb)); + pb.ioParam.ioRefNum = refNum; + return PBCloseSync(&pb); +} + +pascal OSErr FSRead (short refNum, long *count, void *buffPtr) +{ + OSErr err; + ParamBlockRec pb; + memset(&pb, 0, sizeof(pb)); + pb.ioParam.ioRefNum = refNum; + pb.ioParam.ioBuffer = buffPtr; + pb.ioParam.ioReqCount = *count; + + err = PBReadSync(&pb); + *count = pb.ioParam.ioActCount; + return err; +} + +pascal OSErr GetEOF (short refNum, long *logEOF) +{ + OSErr err; + ParamBlockRec pb; + memset(&pb, 0, sizeof(pb)); + pb.ioParam.ioRefNum = refNum; + err = PBGetEOFSync(&pb); + *logEOF = (long)pb.ioParam.ioMisc; + return err; +}