]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/morefile/MoreFile.cpp
latest CW additions
[wxWidgets.git] / src / mac / morefile / MoreFile.cpp
diff --git a/src/mac/morefile/MoreFile.cpp b/src/mac/morefile/MoreFile.cpp
new file mode 100644 (file)
index 0000000..1679568
--- /dev/null
@@ -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 <Types.h>
+#include <Errors.h>
+#include <Files.h>
+
+#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 );
+}
+
+/*****************************************************************************/