--- /dev/null
+/*
+** 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.h
+**
+** 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.
+*/
+
+#ifndef __MOREFILES__
+#define __MOREFILES__
+
+#include <Types.h>
+#include <Files.h>
+
+#ifndef true
+#define true 1
+#define false 0
+#endif
+
+#include "Optim.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************/
+
+pascal OSErr HGetVolParms(ConstStr255Param volName,
+ short vRefNum,
+ GetVolParmsInfoBuffer *volParmsInfo,
+ long *infoSize);
+/* ¦ Determine the characteristics of a volume.
+ The HGetVolParms function returns information about the characteristics
+ of a volume. A result of paramErr usually just means the volume doesn't
+ support PBHGetVolParms and the feature you were going to check
+ for isn't available.
+
+ volName input: A pointer to the name of a mounted volume
+ or nil.
+ vRefNum input: Volume specification.
+ volParmsInfo input: Pointer to GetVolParmsInfoBuffer where the
+ volume attributes information is returned.
+ output: Atributes information.
+ infoSize input: Size of buffer pointed to by volParmsInfo.
+ output: Size of data actually returned.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ paramErr -50 Volume doesn't support this function
+
+ __________
+
+ Also see the macros for checking attribute bits in MoreFilesExtras.h
+*/
+
+/*****************************************************************************/
+
+pascal OSErr HCreateMinimum(short vRefNum,
+ long dirID,
+ ConstStr255Param fileName);
+/* ¦ Create a new file with no creator or file type.
+ The HCreateMinimum function creates a new file without attempting to set
+ the creator and file type of the new file. This function is needed to
+ create a file in an AppleShare "drop box" where the user can make
+ changes, but cannot see folder or files.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ fileName input: The name of the new file.
+
+ Result Codes
+ noErr 0 No error
+ dirFulErr -33 File directory full
+ dskFulErr -34 Disk is full
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 Directory not found or incomplete pathname
+ wPrErr -44 Hardware volume lock
+ vLckdErr -46 Software volume lock
+ dupFNErr -48 Duplicate filename and version
+ dirNFErrdirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 A directory exists with that name
+
+ __________
+
+ Also see: FSpCreateMinimum
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FSpCreateMinimum(const FSSpec *spec);
+/* ¦ Create a new file with no creator or file type.
+ The FSpCreateMinimum function creates a new file without attempting to set
+ the the creator and file type of the new file. This function is needed to
+ create a file in an AppleShare "dropbox" where the user can make
+ changes, but cannot see folder or files.
+
+ spec input: An FSSpec record specifying the file to create.
+
+ Result Codes
+ noErr 0 No error
+ dirFulErr -33 File directory full
+ dskFulErr -34 Disk is full
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 Directory not found or incomplete pathname
+ wPrErr -44 Hardware volume lock
+ vLckdErr -46 Software volume lock
+ dupFNErr -48 Duplicate filename and version
+ dirNFErrdirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 A directory exists with that name
+
+ __________
+
+ Also see: HCreateMinimum
+*/
+
+/*****************************************************************************/
+
+pascal OSErr ExchangeFiles(short vRefNum,
+ long srcDirID,
+ ConstStr255Param srcName,
+ long dstDirID,
+ ConstStr255Param dstName);
+/* ¦ Exchange the data stored in two files on the same volume.
+ The ExchangeFiles function swaps the data in two files on the same
+ volume by changing some of the information in the volume catalog and,
+ if the files are open, in the file control blocks.
+
+ vRefNum input: Volume specification.
+ srcDirID input: Source directory ID.
+ srcName input: Source file name.
+ dstDirID input: Destination directory ID.
+ dstName input: Destination file name.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ ioErr -36 I/O error
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 Function not supported by volume
+ volOfflinErr -53 Volume is offline
+ wrgVolTypErr -123 Not an HFS volume
+ diffVolErr -1303 Files on different volumes
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Object is a directory, not a file
+ afpSameObjectErr -5038 Source and destination are the same
+
+ __________
+
+ Also see: FSpExchangeFilesCompat
+*/
+
+/*****************************************************************************/
+
+pascal OSErr ResolveFileIDRef(ConstStr255Param volName,
+ short vRefNum,
+ long fileID,
+ long *parID,
+ StringPtr fileName);
+/* ¦ Retrieve the location of the file with the specified file ID reference.
+ The ResolveFileIDRef function returns the filename and parent directory ID
+ of the file with the specified file ID reference.
+
+ volName input: A pointer to the name of a mounted volume
+ or nil.
+ vRefNum input: Volume specification.
+ fileID input: The file ID reference.
+ parID output: The parent directory ID of the file.
+ name input: Points to a buffer (minimum Str63) where the filename
+ is to be returned or must be nil.
+ output: The filename.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ ioErr -36 I/O error
+ fnfErr -43 File not found
+ paramErr -50 Function not supported by volume
+ volOfflinErr -53 Volume is offline
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+ wrgVolTypErr -123 Not an HFS volume
+ fidNotFoundErr -1300 File ID reference not found
+ notAFileErr -1302 Specified file is a directory
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Specified file is a directory
+ afpIDNotFound -5034 File ID reference not found
+ afpBadIDErr -5039 File ID reference not found
+
+ __________
+
+ Also see: FSpResolveFileIDRef, CreateFileIDRef, FSpCreateFileIDRef,
+ DeleteFileIDRef
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FSpResolveFileIDRef(ConstStr255Param volName,
+ short vRefNum,
+ long fileID,
+ FSSpecPtr spec);
+/* ¦ Retrieve the location of the file with the specified file ID reference.
+ The FSpResolveFileIDRef function fills in an FSSpec with the location
+ of the file with the specified file ID reference.
+
+ volName input: A pointer to the name of a mounted volume
+ or nil.
+ vRefNum input: Volume specification.
+ fileID input: The file ID reference.
+ spec input: A pointer to a FSSpec record.
+ output: A file system specification to be filled in by
+ FSpResolveFileIDRef.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ ioErr -36 I/O error
+ fnfErr -43 File not found
+ paramErr -50 Function not supported by volume or
+ no default volume
+ volOfflinErr -53 Volume is offline
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+ wrgVolTypErr -123 Not an HFS volume
+ fidNotFoundErr -1300 File ID reference not found
+ notAFileErr -1302 Specified file is a directory
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Specified file is a directory
+ afpIDNotFound -5034 File ID reference not found
+ afpBadIDErr -5039 File ID reference not found
+
+ __________
+
+ Also see: ResolveFileIDRef, CreateFileIDRef, FSpCreateFileIDRef,
+ DeleteFileIDRef
+*/
+
+/*****************************************************************************/
+
+pascal OSErr CreateFileIDRef(short vRefNum,
+ long parID,
+ ConstStr255Param fileName,
+ long *fileID);
+/* ¦ Establish a file ID reference for a file.
+ The CreateFileIDRef function creates a file ID reference for the
+ specified file, or if a file ID reference already exists, supplies
+ the file ID reference and returns the result code fidExists.
+
+ vRefNum input: Volume specification.
+ parID input: Directory ID.
+ fileName input: The name of the file.
+ fileID output: The file ID reference.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ ioErr -36 I/O error
+ fnfErr -43 File not found
+ wPrErr -44 Hardware volume lock
+ vLckdErr -46 Software volume lock
+ paramErr -50 Function not supported by volume
+ volOfflinErr -53 Volume is offline
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+ wrgVolTypErr -123 Not an HFS volume
+ fidExists -1301 File ID reference already exists
+ notAFileErrn -1302 Specified file is a directory
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Specified file is a directory
+ afpIDExists -5035 File ID reference already exists
+
+ __________
+
+ Also see: FSpResolveFileIDRef, ResolveFileIDRef, FSpCreateFileIDRef,
+ DeleteFileIDRef
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FSpCreateFileIDRef(const FSSpec *spec,
+ long *fileID);
+/* ¦ Establish a file ID reference for a file.
+ The FSpCreateFileIDRef function creates a file ID reference for the
+ specified file, or if a file ID reference already exists, supplies
+ the file ID reference and returns the result code fidExists.
+
+ spec input: An FSSpec record specifying the file.
+ fileID output: The file ID reference.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ ioErr -36 I/O error
+ fnfErr -43 File not found
+ wPrErr -44 Hardware volume lock
+ vLckdErr -46 Software volume lock
+ paramErr -50 Function not supported by volume
+ volOfflinErr -53 Volume is offline
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+ wrgVolTypErr -123 Not an HFS volume
+ fidExists -1301 File ID reference already exists
+ notAFileErrn -1302 Specified file is a directory
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Specified file is a directory
+ afpIDExists -5035 File ID reference already exists
+
+ __________
+
+ Also see: FSpResolveFileIDRef, ResolveFileIDRef, CreateFileIDRef,
+ DeleteFileIDRef
+*/
+
+/*****************************************************************************/
+
+pascal OSErr DeleteFileIDRef(ConstStr255Param volName,
+ short vRefNum,
+ long fileID);
+/* ¦ Delete a file ID reference.
+ The DeleteFileIDRef function deletes a file ID reference.
+
+ volName input: A pointer to the name of a mounted volume
+ or nil.
+ vRefNum input: Volume specification.
+ fileID input: The file ID reference.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ ioErr -36 I/O error
+ fnfErr -43 File not found
+ wPrErr -44 Hardware volume lock
+ vLckdErr -46 Software volume lock
+ paramErr -50 Function not supported by volume
+ volOfflinErr -53 Volume is offline
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+ wrgVolTypErr -123 Function is not supported by volume
+ fidNotFoundErr -1300 File ID reference not found
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Specified file is a directory
+ afpIDNotFound -5034 File ID reference not found
+
+ __________
+
+ Also see: FSpResolveFileIDRef, ResolveFileIDRef, CreateFileIDRef,
+ FSpCreateFileIDRef
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FlushFile(short refNum);
+/* ¦ Write the contents of a file's access path buffer (the fork data).
+ The FlushFile function writes the contents of a file's access path
+ buffer (the fork data) to the volume. Note: some of the file's catalog
+ information stored on the volume may not be correct until FlushVol
+ is called.
+
+ refNum input: The file reference number of an open file.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ ioErr -36 I/O error
+ fnOpnErr -38 File not open
+ fnfErr -43 File not found
+ rfNumErr -51 Bad reference number
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+*/
+
+/*****************************************************************************/
+
+pascal OSErr LockRange(short refNum,
+ long rangeLength,
+ long rangeStart);
+/* ¦ Lock a portion of a file.
+ The LockRange function locks (denies access to) a portion of a file
+ that was opened with shared read/write permission.
+
+ refNum input: The file reference number of an open file.
+ rangeLength input: The number of bytes in the range.
+ rangeStart input: The starting byte in the range to lock.
+
+ Result Codes
+ noErr 0 No error
+ ioErr -36 I/O error
+ fnOpnErr -38 File not open
+ eofErr -39 Logical end-of-file reached
+ fLckdErr -45 File is locked by another user
+ paramErr -50 Negative ioReqCount
+ rfNumErr -51 Bad reference number
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+ volGoneErr -124 Server volume has been disconnected
+ afpNoMoreLocks -5015 No more ranges can be locked
+ afpRangeOverlap -5021 Part of range is already locked
+
+ __________
+
+ Also see: UnlockRange
+*/
+
+/*****************************************************************************/
+
+pascal OSErr UnlockRange(short refNum,
+ long rangeLength,
+ long rangeStart);
+/* ¦ Unlock a previously locked range.
+ The UnlockRange function unlocks (allows access to) a previously locked
+ portion of a file that was opened with shared read/write permission.
+
+ refNum input: The file reference number of an open file.
+ rangeLength input: The number of bytes in the range.
+ rangeStart input: The starting byte in the range to unlock.
+
+ Result Codes
+ noErr 0 No error
+ ioErr -36 I/O error
+ fnOpnErr -38 File not open
+ eofErr -39 Logical end-of-file reached
+ paramErr -50 Negative ioReqCount
+ rfNumErr -51 Bad reference number
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+ volGoneErr -124 Server volume has been disconnected
+ afpRangeNotLocked -5020 Specified range was not locked
+
+ __________
+
+ Also see: LockRange
+*/
+
+/*****************************************************************************/
+
+pascal OSErr GetForeignPrivs(short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ void *foreignPrivBuffer,
+ long *foreignPrivSize,
+ long *foreignPrivInfo1,
+ long *foreignPrivInfo2,
+ long *foreignPrivInfo3,
+ long *foreignPrivInfo4);
+/* ¦ Retrieve the native access-control information.
+ The GetForeignPrivs function retrieves the native access-control
+ information for a file or directory stored on a volume managed by
+ a foreign file system.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ name input: Pointer to object name, or nil when dirID
+ specifies a directory that's the object.
+ foreignPrivBuffer input: Pointer to buffer where the privilege
+ information is returned.
+ output: Privilege information.
+ foreignPrivSize input: Size of buffer pointed to by
+ foreignPrivBuffer.
+ output: Amount of buffer actually used.
+ foreignPrivInfo1 output: Information specific to privilege model.
+ foreignPrivInfo2 output: Information specific to privilege model.
+ foreignPrivInfo3 output: Information specific to privilege model.
+ foreignPrivInfo4 output: Information specific to privilege model.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ paramErr -50 Volume is HFS or MFS (that is, it has
+ no foreign privilege model), or foreign
+ volume does not support these calls
+
+ __________
+
+ Also see: FSpGetForeignPrivs, SetForeignPrivs, FSpSetForeignPrivs
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FSpGetForeignPrivs(const FSSpec *spec,
+ void *foreignPrivBuffer,
+ long *foreignPrivSize,
+ long *foreignPrivInfo1,
+ long *foreignPrivInfo2,
+ long *foreignPrivInfo3,
+ long *foreignPrivInfo4);
+/* ¦ Retrieve the native access-control information.
+ The FSpGetForeignPrivs function retrieves the native access-control
+ information for a file or directory stored on a volume managed by
+ a foreign file system.
+
+ spec input: An FSSpec record specifying the object.
+ foreignPrivBuffer input: Pointer to buffer where the privilege
+ information is returned.
+ output: Privilege information.
+ foreignPrivSize input: Size of buffer pointed to by
+ foreignPrivBuffer.
+ output: Amount of buffer actually used.
+ foreignPrivInfo1 output: Information specific to privilege model.
+ foreignPrivInfo2 output: Information specific to privilege model.
+ foreignPrivInfo3 output: Information specific to privilege model.
+ foreignPrivInfo4 output: Information specific to privilege model.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ paramErr -50 Volume is HFS or MFS (that is, it has
+ no foreign privilege model), or foreign
+ volume does not support these calls
+
+ __________
+
+ Also see: GetForeignPrivs, SetForeignPrivs, FSpSetForeignPrivs
+*/
+
+/*****************************************************************************/
+
+pascal OSErr SetForeignPrivs(short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ const void *foreignPrivBuffer,
+ long *foreignPrivSize,
+ long foreignPrivInfo1,
+ long foreignPrivInfo2,
+ long foreignPrivInfo3,
+ long foreignPrivInfo4);
+/* ¦ Change the native access-control information.
+ The SetForeignPrivs function changes the native access-control
+ information for a file or directory stored on a volume managed by
+ a foreign file system.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ name input: Pointer to object name, or nil when dirID
+ specifies a directory that's the object.
+ foreignPrivBuffer input: Pointer to privilege information buffer.
+ foreignPrivSize input: Size of buffer pointed to by
+ foreignPrivBuffer.
+ output: Amount of buffer actually used.
+ foreignPrivInfo1 input: Information specific to privilege model.
+ foreignPrivInfo2 input: Information specific to privilege model.
+ foreignPrivInfo3 input: Information specific to privilege model.
+ foreignPrivInfo4 input: Information specific to privilege model.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ paramErr -50 Volume is HFS or MFS (that is, it has
+ no foreign privilege model), or foreign
+ volume does not support these calls
+
+ __________
+
+ Also see: GetForeignPrivs, FSpGetForeignPrivs, FSpSetForeignPrivs
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FSpSetForeignPrivs(const FSSpec *spec,
+ const void *foreignPrivBuffer,
+ long *foreignPrivSize,
+ long foreignPrivInfo1,
+ long foreignPrivInfo2,
+ long foreignPrivInfo3,
+ long foreignPrivInfo4);
+/* ¦ Change the native access-control information.
+ The FSpSetForeignPrivs function changes the native access-control
+ information for a file or directory stored on a volume managed by
+ a foreign file system.
+
+ spec input: An FSSpec record specifying the object.
+ foreignPrivBuffer input: Pointer to privilege information buffer.
+ foreignPrivSize input: Size of buffer pointed to by
+ foreignPrivBuffer.
+ output: Amount of buffer actually used.
+ foreignPrivInfo1 input: Information specific to privilege model.
+ foreignPrivInfo2 input: Information specific to privilege model.
+ foreignPrivInfo3 input: Information specific to privilege model.
+ foreignPrivInfo4 input: Information specific to privilege model.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ paramErr -50 Volume is HFS or MFS (that is, it has
+ no foreign privilege model), or foreign
+ volume does not support these calls
+
+ __________
+
+ Also see: GetForeignPrivs, FSpGetForeignPrivs, SetForeignPrivs
+*/
+
+/*****************************************************************************/
+
+pascal OSErr HGetLogInInfo(ConstStr255Param volName,
+ short vRefNum,
+ short *loginMethod,
+ StringPtr userName);
+/* ¦ Get the login method and user name used to log on to a shared volume.
+ The HGetLogInInfo function retrieves the login method and user name
+ used to log on to a particular shared volume.
+
+ volName input: A pointer to the name of a mounted volume
+ or nil.
+ vRefNum input: The volume reference number.
+ loginMethod output: The login method used (kNoUserAuthentication,
+ kPassword, kEncryptPassword, or
+ kTwoWayEncryptPassword).
+ userName input: Points to a buffer (minimum Str31) where the user
+ name is to be returned or must be nil.
+ output: The user name.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Specified volume doesnÕt exist
+ paramErr -50 Function not supported by volume
+
+ __________
+
+ Also see: HGetDirAccess, FSpGetDirAccess, HSetDirAccess,
+ FSpSetDirAccess, HMapName, HMapID
+*/
+
+/*****************************************************************************/
+
+pascal OSErr HGetDirAccess(short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ long *ownerID,
+ long *groupID,
+ long *accessRights);
+/* ¦ Get a directory's access control information on a shared volume.
+ The HGetDirAccess function retrieves the directory access control
+ information for a directory on a shared volume.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ name input: Pointer to directory name, or nil if dirID
+ specifies the directory.
+ ownerID output: The directory's owner ID.
+ groupID output: The directory's group ID or
+ 0 if no group affiliation.
+ accessRights output: The directory's access rights.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 Directory not found
+ paramErr -50 Function not supported by volume
+ afpAccessDenied -5000 User does not have the correct access
+ to the directory
+
+ __________
+
+ Also see: HGetLogInInfo, FSpGetDirAccess, HSetDirAccess,
+ FSpSetDirAccess, HMapName, HMapID
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FSpGetDirAccess(const FSSpec *spec,
+ long *ownerID,
+ long *groupID,
+ long *accessRights);
+/* ¦ Get a directory's access control information on a shared volume.
+ The FSpGetDirAccess function retrieves the directory access control
+ information for a directory on a shared volume.
+
+ spec input: An FSSpec record specifying the directory.
+ ownerID output: The directory's owner ID.
+ groupID output: The directory's group ID or
+ 0 if no group affiliation.
+ accessRights output: The directory's access rights.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 Directory not found
+ paramErr -50 Function not supported by volume
+ afpAccessDenied -5000 User does not have the correct access
+ to the directory
+
+ __________
+
+ Also see: HGetLogInInfo, HGetDirAccess, HSetDirAccess,
+ FSpSetDirAccess, HMapName, HMapID
+*/
+
+/*****************************************************************************/
+
+pascal OSErr HSetDirAccess(short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ long ownerID,
+ long groupID,
+ long accessRights);
+/* ¦ Set a directory's access control information on a shared volume.
+ The HSetDirAccess function changes the directory access control
+ information for a directory on a shared volume. You must own a directory
+ to change its access control information.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ name input: Pointer to directory name, or nil if dirID
+ specifies the directory.
+ ownerID input: The directory's owner ID.
+ groupID input: The directory's group ID or
+ 0 if no group affiliation.
+ accessRights input: The directory's access rights.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 Directory not found
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 Parameter error
+ afpAccessDenied -5000 User does not have the correct access
+ to the directory
+ afpObjectTypeErr -5025 Object is a file, not a directory
+
+ __________
+
+ Also see: HGetLogInInfo, HGetDirAccess, FSpGetDirAccess,
+ FSpSetDirAccess, HMapName, HMapID
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FSpSetDirAccess(const FSSpec *spec,
+ long ownerID,
+ long groupID,
+ long accessRights);
+/* ¦ Set a directory's access control information on a shared volume.
+ The FSpSetDirAccess function changes the directory access control
+ information for a directory on a shared volume. You must own a directory
+ to change its access control information.
+
+ spec input: An FSSpec record specifying the directory.
+ ownerID input: The directory's owner ID.
+ groupID input: The directory's group ID or
+ 0 if no group affiliation.
+ accessRights input: The directory's access rights.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 Directory not found
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 Parameter error
+ afpAccessDenied -5000 User does not have the correct access
+ to the directory
+ afpObjectTypeErr -5025 Object is a file, not a directory
+
+ __________
+
+ Also see: HGetLogInInfo, HGetDirAccess, FSpGetDirAccess, HSetDirAccess,
+ HMapName, HMapID
+*/
+
+/*****************************************************************************/
+
+pascal OSErr HMapID(ConstStr255Param volName,
+ short vRefNum,
+ long ugID,
+ short objType,
+ StringPtr name);
+/* ¦ Map a user or group ID to a user or group name.
+ The HMapID function determines the name of a user or group if you know
+ the user or group ID.
+
+ volName input: A pointer to the name of a mounted volume
+ or nil.
+ vRefNum input: Volume specification.
+ objType input: The mapping function code: 1 if you're mapping a
+ user ID to a user name or 2 if you're mapping a
+ group ID to a group name.
+ name input: Points to a buffer (minimum Str31) where the user
+ or group name is to be returned or must be nil.
+ output: The user or group name.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 Unrecognizable owner or group name
+ paramErr -50 Function not supported by volume
+
+ __________
+
+ Also see: HGetLogInInfo, HGetDirAccess, FSpGetDirAccess, HSetDirAccess,
+ FSpSetDirAccess, HMapName
+*/
+
+/*****************************************************************************/
+
+pascal OSErr HMapName(ConstStr255Param volName,
+ short vRefNum,
+ ConstStr255Param name,
+ short objType,
+ long *ugID);
+/* ¦ Map a user or group name to a user or group ID.
+ The HMapName function determines the user or group ID if you know the
+ user or group name.
+
+ volName input: A pointer to the name of a mounted volume
+ or nil.
+ vRefNum input: Volume specification.
+ name input: The user or group name.
+ objType input: The mapping function code: 3 if you're mapping a
+ user name to a user ID or 4 if you're mapping a
+ group name to a group ID.
+ ugID output: The user or group ID.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 Unrecognizable owner or group name
+ paramErr -50 Function not supported by volume
+
+ __________
+
+ Also see: HGetLogInInfo, HGetDirAccess, FSpGetDirAccess, HSetDirAccess,
+ FSpSetDirAccess, HMapID
+*/
+
+/*****************************************************************************/
+
+pascal OSErr HCopyFile(short srcVRefNum,
+ long srcDirID,
+ ConstStr255Param srcName,
+ short dstVRefNum,
+ long dstDirID,
+ ConstStr255Param dstPathname,
+ ConstStr255Param copyName);
+/* ¦ Duplicate a file on a file server and optionally to rename it.
+ The HCopyFile function duplicates a file and optionally to renames it.
+ The source and destination volumes must be on the same file server.
+ This function instructs the server to copy the file.
+
+ srcVRefNum input: Source volume specification.
+ srcDirID input: Source directory ID.
+ srcName input: Source file name.
+ dstVRefNum input: Destination volume specification.
+ dstDirID input: Destination directory ID.
+ dstPathname input: Pointer to destination directory name, or
+ nil when dstDirID specifies a directory.
+ copyName input: Points to the new file name if the file is to be
+ renamed or nil if the file isn't to be renamed.
+
+ Result Codes
+ noErr 0 No error
+ dskFulErr -34 Destination volume is full
+ fnfErr -43 Source file not found, or destination
+ directory does not exist
+ vLckdErr -46 Destination volume is read-only
+ fBsyErr -47 The source or destination file could
+ not be opened with the correct access
+ modes
+ dupFNErr -48 Destination file already exists
+ paramErr -50 Function not supported by volume
+ wrgVolTypErr -123 Function not supported by volume
+ afpAccessDenied -5000 The user does not have the right to
+ read the source or write to the
+ destination
+ afpDenyConflict -5006 The source or destination file could
+ not be opened with the correct access
+ modes
+ afpObjectTypeErr -5025 Source is a directory
+
+ __________
+
+ Also see: FSpCopyFile, FileCopy, FSpFileCopy
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FSpCopyFile(const FSSpec *srcSpec,
+ const FSSpec *dstSpec,
+ ConstStr255Param copyName);
+/* ¦ Duplicate a file on a file server and optionally to rename it.
+ The FSpCopyFile function duplicates a file and optionally to renames it.
+ The source and destination volumes must be on the same file server.
+ This function instructs the server to copy the file.
+
+ srcSpec input: An FSSpec record specifying the source file.
+ dstSpec input: An FSSpec record specifying the destination
+ directory.
+ copyName input: Points to the new file name if the file is to be
+ renamed or nil if the file isn't to be renamed.
+
+ Result Codes
+ noErr 0 No error
+ dskFulErr -34 Destination volume is full
+ fnfErr -43 Source file not found, or destination
+ directory does not exist
+ vLckdErr -46 Destination volume is read-only
+ fBsyErr -47 The source or destination file could
+ not be opened with the correct access
+ modes
+ dupFNErr -48 Destination file already exists
+ paramErr -50 Function not supported by volume
+ wrgVolTypErr -123 Function not supported by volume
+ afpAccessDenied -5000 The user does not have the right to
+ read the source or write to the
+ destination
+ afpDenyConflict -5006 The source or destination file could
+ not be opened with the correct access
+ modes
+ afpObjectTypeErr -5025 Source is a directory
+
+ __________
+
+ Also see: HCopyFile, FileCopy, FSpFileCopy
+*/
+
+/*****************************************************************************/
+
+pascal OSErr HMoveRename(short vRefNum,
+ long srcDirID,
+ ConstStr255Param srcName,
+ long dstDirID,
+ ConstStr255Param dstpathName,
+ ConstStr255Param copyName);
+/* ¦ Move a file or directory on a file server and optionally to rename it.
+ The HMoveRename function moves a file or directory and optionally
+ renames it. The source and destination locations must be on the same
+ shared volume.
+
+ vRefNum input: Volume specification.
+ srcDirID input: Source directory ID.
+ srcName input: The source object name.
+ dstDirID input: Destination directory ID.
+ dstName input: Pointer to destination directory name, or
+ nil when dstDirID specifies a directory.
+ copyName input: Points to the new name if the object is to be
+ renamed or nil if the object isn't to be renamed.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 Source file or directory not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Destination volume is read-only
+ dupFNErr -48 Destination already exists
+ paramErr -50 Function not supported by volume
+ badMovErr -122 Attempted to move directory into
+ offspring
+ afpAccessDenied -5000 The user does not have the right to
+ move the file or directory
+
+ __________
+
+ Also see: FSpMoveRename, HMoveRenameCompat, FSpMoveRenameCompat
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FSpMoveRename(const FSSpec *srcSpec,
+ const FSSpec *dstSpec,
+ ConstStr255Param copyName);
+/* ¦ Move a file or directory on a file server and optionally to rename it.
+ The FSpMoveRename function moves a file or directory and optionally
+ renames it. The source and destination locations must be on the same
+ shared volume.
+
+ srcSpec input: An FSSpec record specifying the source object.
+ dstSpec input: An FSSpec record specifying the destination
+ directory.
+ copyName input: Points to the new name if the object is to be
+ renamed or nil if the object isn't to be renamed.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 Source file or directory not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Destination volume is read-only
+ dupFNErr -48 Destination already exists
+ paramErr -50 Function not supported by volume
+ badMovErr -122 Attempted to move directory into
+ offspring
+ afpAccessDenied -5000 The user does not have the right to
+ move the file or directory
+
+ __________
+
+ Also see: HMoveRename, HMoveRenameCompat, FSpMoveRenameCompat
+*/
+
+/*****************************************************************************/
+
+pascal OSErr GetVolMountInfoSize(ConstStr255Param volName,
+ short vRefNum,
+ short *size);
+/* ¦ Get the size of a volume mounting information record.
+ The GetVolMountInfoSize function determines the how much space the
+ program needs to allocate for a volume mounting information record.
+
+ volName input: A pointer to the name of a mounted volume
+ or nil.
+ vRefNum input: Volume specification.
+ size output: The space needed (in bytes) of the volume mounting
+ information record.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ paramErr -50 Parameter error
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+
+ __________
+
+ Also see: GetVolMountInfo, VolumeMount BuildAFPVolMountInfo,
+ RetrieveAFPVolMountInfo
+*/
+
+/*****************************************************************************/
+
+pascal OSErr GetVolMountInfo(ConstStr255Param volName,
+ short vRefNum,
+ void *volMountInfo);
+/* ¦ Retrieve a volume mounting information record.
+ The GetVolMountInfo function retrieves a volume mounting information
+ record containing all the information needed to mount the volume,
+ except for passwords.
+
+ volName input: A pointer to the name of a mounted volume
+ or nil.
+ vRefNum input: Volume specification.
+ volMountInfo output: Points to a volume mounting information
+ record where the mounting information is to
+ be returned.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ paramErr -50 Parameter error
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+
+ __________
+
+ Also see: GetVolMountInfoSize, VolumeMount, BuildAFPVolMountInfo,
+ RetrieveAFPVolMountInfo
+*/
+
+/*****************************************************************************/
+
+pascal OSErr VolumeMount(const void *volMountInfo,
+ short *vRefNum);
+/* ¦ Mount a volume using a volume mounting information record.
+ The VolumeMount function mounts a volume using a volume mounting
+ information record.
+
+ volMountInfo input: Points to a volume mounting information record.
+ vRefNum output: A volume reference number.
+
+ Result Codes
+ noErr 0 No error
+ notOpenErr -28 AppleTalk is not open
+ nsvErr -35 Volume not found
+ paramErr -50 Parameter error; typically, zone, server,
+ and volume name combination is not valid
+ or not complete, or the user name is not
+ recognized
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+ memFullErr -108 Not enough memory to create a new volume
+ control block for mounting the volume
+ afpBadUAM -5002 User authentication method is unknown
+ afpBadVersNum -5003 Workstation is using an AFP version that
+ the server doesnÕt recognize
+ afpNoServer -5016 Server is not responding
+ afpUserNotAuth -5023 User authentication failed (usually,
+ password is not correct)
+ afpPwdExpired -5042 Password has expired on server
+ afpBadDirIDType -5060 Not a fixed directory ID volume
+ afpCantMountMoreSrvrs -5061 Maximum number of volumes has been
+ mounted
+ afpAlreadyMounted -5062 Volume already mounted
+ afpSameNodeErr -5063 Attempt to log on to a server running
+ on the same machine
+
+ __________
+
+ Also see: GetVolMountInfoSize, GetVolMountInfo, BuildAFPVolMountInfo,
+ RetrieveAFPVolMountInfo
+*/
+
+/*****************************************************************************/
+
+pascal OSErr Share(short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+/* ¦ Establish a local volume or directory as a share point.
+ The Share function establishes a local volume or directory as a
+ share point.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ name input: Pointer to directory name, or nil if dirID
+ specifies the directory.
+
+ Result Codes
+ noErr 0 No error
+ tmfoErr -42 Too many share points
+ fnfErr -43 File not found
+ dupFNErr -48 Already a share point with this name
+ paramErr -50 Function not supported by volume
+ dirNFErrdirNFErr -120 Directory not found
+ afpAccessDenied -5000 This directory cannot be shared
+ afpObjectTypeErr -5025 Object was a file, not a directory
+ afpContainsSharedErr -5033 The directory contains a share point
+ afpInsideSharedErr -5043 The directory is inside a shared directory
+
+ __________
+
+ Also see: FSpShare, Unshare, FSpUnshare
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FSpShare(const FSSpec *spec);
+/* ¦ Establish a local volume or directory as a share point.
+ The FSpShare function establishes a local volume or directory as a
+ share point.
+
+ spec input: An FSSpec record specifying the share point.
+
+ Result Codes
+ noErr 0 No error
+ tmfoErr -42 Too many share points
+ fnfErr -43 File not found
+ dupFNErr -48 Already a share point with this name
+ paramErr -50 Function not supported by volume
+ dirNFErrdirNFErr -120 Directory not found
+ afpAccessDenied -5000 This directory cannot be shared
+ afpObjectTypeErr -5025 Object was a file, not a directory
+ afpContainsSharedErr -5033 The directory contains a share point
+ afpInsideSharedErr -5043 The directory is inside a shared directory
+
+ __________
+
+ Also see: Share, Unshare, FSpUnshare
+*/
+
+/*****************************************************************************/
+
+pascal OSErr Unshare(short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+/* ¦ Remove a share point.
+ The Unshare function removes a share point.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ name input: Pointer to directory name, or nil if dirID
+ specifies the directory.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 File not found
+ paramErr -50 Function not supported by volume
+ dirNFErrdirNFErr -120 Directory not found
+ afpObjectTypeErr -5025 Object was a file, not a directory; or,
+ this directory is not a share point
+
+ __________
+
+ Also see: Share, FSpShare, FSpUnshare
+*/
+
+/*****************************************************************************/
+
+pascal OSErr FSpUnshare(const FSSpec *spec);
+/* ¦ Remove a share point.
+ The FSpUnshare function removes a share point.
+
+ spec input: An FSSpec record specifying the share point.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 File not found
+ paramErr -50 Function not supported by volume
+ dirNFErrdirNFErr -120 Directory not found
+ afpObjectTypeErr -5025 Object was a file, not a directory; or,
+ this directory is not a share point
+
+ __________
+
+ Also see: Share, FSpShare, Unshare
+*/
+
+/*****************************************************************************/
+
+pascal OSErr GetUGEntry(short objType,
+ StringPtr objName,
+ long *objID);
+/* ¦ Retrieve a user or group entry from the local file server.
+ The GetUGEntry function retrieves user or group entries from the
+ local file server.
+
+ objType input: The object type: -1 = group; 0 = user
+ objName input: Points to a buffer (minimum Str31) where the user
+ or group name is to be returned or must be nil.
+ output: The user or group name.
+ objID input: O to get the first user or group. If the entry objID
+ last returned by GetUGEntry is passed, then user or
+ group whose alphabetically next in the list of entries
+ is returned.
+ output: The user or group ID.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 No more users or groups
+ paramErr -50 Function not supported; or, ioObjID is
+ negative
+
+ __________
+
+ Also see: GetUGEntries
+*/
+
+/*****************************************************************************/
+
+#ifdef __cplusplus
+}
+#endif
+
+#include "OptimEnd.h"
+
+#endif /* __MOREFILES__ */