X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/291a8f20b30f3344b376b61e504c27bd5849e2b1..2276c2959446be677a52f639d8f92e5a0e216c32:/src/mac/morefile/MoreFile.cpp?ds=inline diff --git a/src/mac/morefile/MoreFile.cpp b/src/mac/morefile/MoreFile.cpp new file mode 100644 index 0000000000..16795680b6 --- /dev/null +++ b/src/mac/morefile/MoreFile.cpp @@ -0,0 +1,628 @@ +/* +** Apple Macintosh Developer Technical Support +** +** The long lost high-level and FSSpec File Manager functions. +** +** by Jim Luther, Apple Developer Technical Support Emeritus +** +** File: MoreFiles.c +** +** Copyright © 1992-1998 Apple Computer, Inc. +** All rights reserved. +** +** You may incorporate this sample code into your applications without +** restriction, though the sample code has been provided "AS IS" and the +** responsibility for its operation is 100% yours. However, what you are +** not permitted to do is to redistribute the source as "DSC Sample Code" +** after having made changes. If you're going to re-distribute the source, +** we require that you make it clear in the source that the code was +** descended from Apple Sample Code, but that you've made changes. +*/ + +#include +#include +#include + +#define __COMPILINGMOREFILES + +#include "MoreFile.h" +#include "MoreExtr.h" + +/*****************************************************************************/ + +pascal OSErr HGetVolParms(ConstStr255Param volName, + short vRefNum, + GetVolParmsInfoBuffer *volParmsInfo, + long *infoSize) +{ + HParamBlockRec pb; + OSErr error; + + pb.ioParam.ioNamePtr = (StringPtr)volName; + pb.ioParam.ioVRefNum = vRefNum; + pb.ioParam.ioBuffer = (Ptr)volParmsInfo; + pb.ioParam.ioReqCount = *infoSize; + error = PBHGetVolParmsSync(&pb); + if ( error == noErr ) + { + *infoSize = pb.ioParam.ioActCount; + } + return ( error ); +} + +/*****************************************************************************/ + +pascal OSErr HCreateMinimum(short vRefNum, + long dirID, + ConstStr255Param fileName) +{ + HParamBlockRec pb; + + pb.fileParam.ioNamePtr = (StringPtr)fileName; + pb.fileParam.ioVRefNum = vRefNum; + pb.ioParam.ioVersNum = 0; + pb.fileParam.ioDirID = dirID; + return ( PBHCreateSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr FSpCreateMinimum(const FSSpec *spec) +{ + return ( HCreateMinimum(spec->vRefNum, spec->parID, spec->name) ); +} + +/*****************************************************************************/ + +pascal OSErr ExchangeFiles(short vRefNum, + long srcDirID, + ConstStr255Param srcName, + long dstDirID, + ConstStr255Param dstName) +{ + HParamBlockRec pb; + + pb.fidParam.ioVRefNum = vRefNum; + pb.fidParam.ioSrcDirID = srcDirID; + pb.fidParam.ioNamePtr = (StringPtr)srcName; + pb.fidParam.ioDestDirID = dstDirID; + pb.fidParam.ioDestNamePtr = (StringPtr)dstName; + return ( PBExchangeFilesSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr ResolveFileIDRef(ConstStr255Param volName, + short vRefNum, + long fileID, + long *parID, + StringPtr fileName) +{ + HParamBlockRec pb; + OSErr error; + Str255 tempStr; + + tempStr[0] = 0; + if ( volName != NULL ) + { + BlockMoveData(volName, tempStr, volName[0] + 1); + } + pb.fidParam.ioNamePtr = (StringPtr)tempStr; + pb.fidParam.ioVRefNum = vRefNum; + pb.fidParam.ioFileID = fileID; + error = PBResolveFileIDRefSync(&pb); + if ( error == noErr ) + { + *parID = pb.fidParam.ioSrcDirID; + if ( fileName != NULL ) + { + BlockMoveData(tempStr, fileName, tempStr[0] + 1); + } + } + return ( error ); +} + +/*****************************************************************************/ + +pascal OSErr FSpResolveFileIDRef(ConstStr255Param volName, + short vRefNum, + long fileID, + FSSpec *spec) +{ + OSErr error; + + error = DetermineVRefNum(volName, vRefNum, &(spec->vRefNum)); + if ( error == noErr ) + { + error = ResolveFileIDRef(volName, vRefNum, fileID, &(spec->parID), spec->name); + } + return ( error ); +} + +/*****************************************************************************/ + +pascal OSErr CreateFileIDRef(short vRefNum, + long parID, + ConstStr255Param fileName, + long *fileID) +{ + HParamBlockRec pb; + OSErr error; + + pb.fidParam.ioNamePtr = (StringPtr)fileName; + pb.fidParam.ioVRefNum = vRefNum; + pb.fidParam.ioSrcDirID = parID; + error = PBCreateFileIDRefSync(&pb); + if ( error == noErr ) + { + *fileID = pb.fidParam.ioFileID; + } + return ( error ); +} + +/*****************************************************************************/ + +pascal OSErr FSpCreateFileIDRef(const FSSpec *spec, + long *fileID) +{ + return ( CreateFileIDRef(spec->vRefNum, spec->parID, spec->name, fileID) ); +} + +/*****************************************************************************/ + +pascal OSErr DeleteFileIDRef(ConstStr255Param volName, + short vRefNum, + long fileID) +{ + HParamBlockRec pb; + + pb.fidParam.ioNamePtr = (StringPtr)volName; + pb.fidParam.ioVRefNum = vRefNum; + pb.fidParam.ioFileID = fileID; + return ( PBDeleteFileIDRefSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr FlushFile(short refNum) +{ + ParamBlockRec pb; + + pb.ioParam.ioRefNum = refNum; + return ( PBFlushFileSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr LockRange(short refNum, + long rangeLength, + long rangeStart) +{ + ParamBlockRec pb; + + pb.ioParam.ioRefNum = refNum; + pb.ioParam.ioReqCount = rangeLength; + pb.ioParam.ioPosMode = fsFromStart; + pb.ioParam.ioPosOffset = rangeStart; + return ( PBLockRangeSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr UnlockRange(short refNum, + long rangeLength, + long rangeStart) +{ + ParamBlockRec pb; + + pb.ioParam.ioRefNum = refNum; + pb.ioParam.ioReqCount = rangeLength; + pb.ioParam.ioPosMode = fsFromStart; + pb.ioParam.ioPosOffset = rangeStart; + return ( PBUnlockRangeSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr GetForeignPrivs(short vRefNum, + long dirID, + ConstStr255Param name, + void *foreignPrivBuffer, + long *foreignPrivSize, + long *foreignPrivInfo1, + long *foreignPrivInfo2, + long *foreignPrivInfo3, + long *foreignPrivInfo4) +{ + HParamBlockRec pb; + OSErr error; + + pb.foreignPrivParam.ioNamePtr = (StringPtr)name; + pb.foreignPrivParam.ioVRefNum = vRefNum; + pb.foreignPrivParam.ioForeignPrivDirID = dirID; + pb.foreignPrivParam.ioForeignPrivBuffer = (Ptr)foreignPrivBuffer; + pb.foreignPrivParam.ioForeignPrivReqCount = *foreignPrivSize; + error = PBGetForeignPrivsSync(&pb); + *foreignPrivSize = pb.foreignPrivParam.ioForeignPrivActCount; + *foreignPrivInfo1 = pb.foreignPrivParam.ioForeignPrivInfo1; + *foreignPrivInfo2 = pb.foreignPrivParam.ioForeignPrivInfo2; + *foreignPrivInfo3 = pb.foreignPrivParam.ioForeignPrivInfo3; + *foreignPrivInfo4 = pb.foreignPrivParam.ioForeignPrivInfo4; + return ( error ); +} + +/*****************************************************************************/ + +pascal OSErr FSpGetForeignPrivs(const FSSpec *spec, + void *foreignPrivBuffer, + long *foreignPrivSize, + long *foreignPrivInfo1, + long *foreignPrivInfo2, + long *foreignPrivInfo3, + long *foreignPrivInfo4) +{ + return ( GetForeignPrivs(spec->vRefNum, spec->parID, spec->name, + foreignPrivBuffer, foreignPrivSize, + foreignPrivInfo1, foreignPrivInfo2, + foreignPrivInfo3, foreignPrivInfo4) ); +} + +/*****************************************************************************/ + +pascal OSErr SetForeignPrivs(short vRefNum, + long dirID, + ConstStr255Param name, + const void *foreignPrivBuffer, + long *foreignPrivSize, + long foreignPrivInfo1, + long foreignPrivInfo2, + long foreignPrivInfo3, + long foreignPrivInfo4) +{ + HParamBlockRec pb; + OSErr error; + + pb.foreignPrivParam.ioNamePtr = (StringPtr)name; + pb.foreignPrivParam.ioVRefNum = vRefNum; + pb.foreignPrivParam.ioForeignPrivDirID = dirID; + pb.foreignPrivParam.ioForeignPrivBuffer = (Ptr)foreignPrivBuffer; + pb.foreignPrivParam.ioForeignPrivReqCount = *foreignPrivSize; + pb.foreignPrivParam.ioForeignPrivInfo1 = foreignPrivInfo1; + pb.foreignPrivParam.ioForeignPrivInfo2 = foreignPrivInfo2; + pb.foreignPrivParam.ioForeignPrivInfo3 = foreignPrivInfo3; + pb.foreignPrivParam.ioForeignPrivInfo4 = foreignPrivInfo4; + error = PBSetForeignPrivsSync(&pb); + if ( error == noErr ) + { + *foreignPrivSize = pb.foreignPrivParam.ioForeignPrivActCount; + } + return ( error ); +} + +/*****************************************************************************/ + +pascal OSErr FSpSetForeignPrivs(const FSSpec *spec, + const void *foreignPrivBuffer, + long *foreignPrivSize, + long foreignPrivInfo1, + long foreignPrivInfo2, + long foreignPrivInfo3, + long foreignPrivInfo4) +{ + return ( SetForeignPrivs(spec->vRefNum, spec->parID, spec->name, + foreignPrivBuffer, foreignPrivSize, + foreignPrivInfo1, foreignPrivInfo2, + foreignPrivInfo3, foreignPrivInfo4) ); +} + +/*****************************************************************************/ + +pascal OSErr HGetLogInInfo(ConstStr255Param volName, + short vRefNum, + short *loginMethod, + StringPtr userName) +{ + HParamBlockRec pb; + OSErr error; + + pb.objParam.ioNamePtr = (StringPtr)volName; + pb.objParam.ioVRefNum = vRefNum; + pb.objParam.ioObjNamePtr = userName; + error = PBHGetLogInInfoSync(&pb); + if ( error == noErr ) + { + *loginMethod = pb.objParam.ioObjType; + } + return ( error ); +} + +/*****************************************************************************/ + +pascal OSErr HGetDirAccess(short vRefNum, + long dirID, + ConstStr255Param name, + long *ownerID, + long *groupID, + long *accessRights) +{ + HParamBlockRec pb; + OSErr error; + + pb.accessParam.ioNamePtr = (StringPtr)name; + pb.accessParam.ioVRefNum = vRefNum; + pb.fileParam.ioDirID = dirID; + error = PBHGetDirAccessSync(&pb); + if ( error == noErr ) + { + *ownerID = pb.accessParam.ioACOwnerID; + *groupID = pb.accessParam.ioACGroupID; + *accessRights = pb.accessParam.ioACAccess; + } + return ( error ); +} + +/*****************************************************************************/ + +pascal OSErr FSpGetDirAccess(const FSSpec *spec, + long *ownerID, + long *groupID, + long *accessRights) +{ + return ( HGetDirAccess(spec->vRefNum, spec->parID, spec->name, + ownerID, groupID, accessRights) ); +} + +/*****************************************************************************/ + +pascal OSErr HSetDirAccess(short vRefNum, + long dirID, + ConstStr255Param name, + long ownerID, + long groupID, + long accessRights) +{ + HParamBlockRec pb; + + pb.accessParam.ioNamePtr = (StringPtr)name; + pb.accessParam.ioVRefNum = vRefNum; + pb.fileParam.ioDirID = dirID; + pb.accessParam.ioACOwnerID = ownerID; + pb.accessParam.ioACGroupID = groupID; + pb.accessParam.ioACAccess = accessRights; + return ( PBHSetDirAccessSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr FSpSetDirAccess(const FSSpec *spec, + long ownerID, + long groupID, + long accessRights) +{ + return ( HSetDirAccess(spec->vRefNum, spec->parID, spec->name, + ownerID, groupID, accessRights) ); +} + +/*****************************************************************************/ + +pascal OSErr HMapID(ConstStr255Param volName, + short vRefNum, + long ugID, + short objType, + StringPtr name) +{ + HParamBlockRec pb; + + pb.objParam.ioNamePtr = (StringPtr)volName; + pb.objParam.ioVRefNum = vRefNum; + pb.objParam.ioObjType = objType; + pb.objParam.ioObjNamePtr = name; + pb.objParam.ioObjID = ugID; + return ( PBHMapIDSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr HMapName(ConstStr255Param volName, + short vRefNum, + ConstStr255Param name, + short objType, + long *ugID) +{ + HParamBlockRec pb; + OSErr error; + + pb.objParam.ioNamePtr = (StringPtr)volName; + pb.objParam.ioVRefNum = vRefNum; + pb.objParam.ioObjType = objType; + pb.objParam.ioObjNamePtr = (StringPtr)name; + error = PBHMapNameSync(&pb); + if ( error == noErr ) + { + *ugID = pb.objParam.ioObjID; + } + return ( error ); +} + +/*****************************************************************************/ + +pascal OSErr HCopyFile(short srcVRefNum, + long srcDirID, + ConstStr255Param srcName, + short dstVRefNum, + long dstDirID, + ConstStr255Param dstPathname, + ConstStr255Param copyName) +{ + HParamBlockRec pb; + + pb.copyParam.ioVRefNum = srcVRefNum; + pb.copyParam.ioDirID = srcDirID; + pb.copyParam.ioNamePtr = (StringPtr)srcName; + pb.copyParam.ioDstVRefNum = dstVRefNum; + pb.copyParam.ioNewDirID = dstDirID; + pb.copyParam.ioNewName = (StringPtr)dstPathname; + pb.copyParam.ioCopyName = (StringPtr)copyName; + return ( PBHCopyFileSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr FSpCopyFile(const FSSpec *srcSpec, + const FSSpec *dstSpec, + ConstStr255Param copyName) +{ + return ( HCopyFile(srcSpec->vRefNum, srcSpec->parID, srcSpec->name, + dstSpec->vRefNum, dstSpec->parID, + dstSpec->name, copyName) ); +} + +/*****************************************************************************/ + +pascal OSErr HMoveRename(short vRefNum, + long srcDirID, + ConstStr255Param srcName, + long dstDirID, + ConstStr255Param dstpathName, + ConstStr255Param copyName) +{ + HParamBlockRec pb; + + pb.copyParam.ioVRefNum = vRefNum; + pb.copyParam.ioDirID = srcDirID; + pb.copyParam.ioNamePtr = (StringPtr)srcName; + pb.copyParam.ioNewDirID = dstDirID; + pb.copyParam.ioNewName = (StringPtr)dstpathName; + pb.copyParam.ioCopyName = (StringPtr)copyName; + return ( PBHMoveRenameSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr FSpMoveRename(const FSSpec *srcSpec, + const FSSpec *dstSpec, + ConstStr255Param copyName) +{ + OSErr error; + + /* make sure the FSSpecs refer to the same volume */ + if ( srcSpec->vRefNum != dstSpec->vRefNum ) + { + error = diffVolErr; + } + else + { + error = HMoveRename(srcSpec->vRefNum, srcSpec->parID, srcSpec->name, + dstSpec->parID, dstSpec->name, copyName); + } + return ( error ); +} + +/*****************************************************************************/ + +pascal OSErr GetVolMountInfoSize(ConstStr255Param volName, + short vRefNum, + short *size) +{ + ParamBlockRec pb; + + pb.ioParam.ioNamePtr = (StringPtr)volName; + pb.ioParam.ioVRefNum = vRefNum; + pb.ioParam.ioBuffer = (Ptr)size; + return ( PBGetVolMountInfoSize(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr GetVolMountInfo(ConstStr255Param volName, + short vRefNum, + void *volMountInfo) +{ + ParamBlockRec pb; + + pb.ioParam.ioNamePtr = (StringPtr)volName; + pb.ioParam.ioVRefNum = vRefNum; + pb.ioParam.ioBuffer = (Ptr)volMountInfo; + return ( PBGetVolMountInfo(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr VolumeMount(const void *volMountInfo, + short *vRefNum) +{ + ParamBlockRec pb; + OSErr error; + + pb.ioParam.ioBuffer = (Ptr)volMountInfo; + error = PBVolumeMount(&pb); + if ( error == noErr ) + { + *vRefNum = pb.ioParam.ioVRefNum; + } + return ( error ); +} + +/*****************************************************************************/ + +pascal OSErr Share(short vRefNum, + long dirID, + ConstStr255Param name) +{ + HParamBlockRec pb; + + pb.fileParam.ioNamePtr = (StringPtr)name; + pb.fileParam.ioVRefNum = vRefNum; + pb.fileParam.ioDirID = dirID; + return ( PBShareSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr FSpShare(const FSSpec *spec) +{ + return ( Share(spec->vRefNum, spec->parID, spec->name) ); +} + +/*****************************************************************************/ + +pascal OSErr Unshare(short vRefNum, + long dirID, + ConstStr255Param name) +{ + HParamBlockRec pb; + + pb.fileParam.ioNamePtr = (StringPtr)name; + pb.fileParam.ioVRefNum = vRefNum; + pb.fileParam.ioDirID = dirID; + return ( PBUnshareSync(&pb) ); +} + +/*****************************************************************************/ + +pascal OSErr FSpUnshare(const FSSpec *spec) +{ + return ( Unshare(spec->vRefNum, spec->parID, spec->name) ); +} + +/*****************************************************************************/ + +pascal OSErr GetUGEntry(short objType, + StringPtr objName, + long *objID) +{ + HParamBlockRec pb; + OSErr error; + + pb.objParam.ioObjType = objType; + pb.objParam.ioObjNamePtr = objName; + pb.objParam.ioObjID = *objID; + error = PBGetUGEntrySync(&pb); + if ( error == noErr ) + { + *objID = pb.objParam.ioObjID; + } + return ( error ); +} + +/*****************************************************************************/