+/*
+ File: MoreFilesExtras.h
+
+ Contains: A collection of useful high-level File Manager routines.
+
+ Version: Technology: MoreFiles
+ Release: 1.5.2
+
+ Copyright: © 1992-2001 by Apple Computer, Inc., all rights reserved.
+
+ Bugs?: For bug reports, consult the following page on
+ the World Wide Web:
+
+ http://developer.apple.com/bugreporter/
+
+*/
+
+/*
+ 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 __MOREFILESEXTRAS__
+#define __MOREFILESEXTRAS__
+
+#ifndef __MACTYPES__
+#include <MacTypes.h>
+#endif
+
+#ifndef __FILES__
+#include <Files.h>
+#endif
+
+#include "Optimization.h"
+
+
+#if PRAGMA_ONCE
+#pragma once
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if PRAGMA_IMPORT
+#pragma import on
+#endif
+
+#if PRAGMA_STRUCT_ALIGN
+ #pragma options align=mac68k
+#elif PRAGMA_STRUCT_PACKPUSH
+ #pragma pack(push, 2)
+#elif PRAGMA_STRUCT_PACK
+ #pragma pack(2)
+#endif
+
+/*****************************************************************************/
+
+/*
+** Bit masks and macros to get common information out of ioACUser returned
+** by PBGetCatInfo (remember to clear ioACUser before calling PBGetCatInfo
+** since some file systems don't bother to set this field).
+**
+** Use the GetDirAccessRestrictions or FSpGetDirAccessRestrictions
+** functions to retrieve the ioACUser access restrictions byte for
+** a folder.
+**
+** Note: The access restriction byte returned by PBGetCatInfo is the
+** 2's complement of the user's privileges byte returned in
+** ioACAccess by PBHGetDirAccess.
+*/
+
+enum {
+ /* mask for just the access restriction bits */
+ acUserAccessMask = (kioACUserNoSeeFolderMask + kioACUserNoSeeFilesMask + kioACUserNoMakeChangesMask), /* common access privilege settings */
+ acUserFull = 0x00, /* no access restiction bits on */
+ acUserNone = acUserAccessMask, /* all access restiction bits on */
+ acUserDropBox = kioACUserNoSeeFolderMask + kioACUserNoSeeFilesMask, /* make changes, but not see files or folders */
+ acUserBulletinBoard = kioACUserNoMakeChangesMask /* see files and folders, but not make changes */
+};
+
+
+/*****************************************************************************/
+
+/*
+** Deny mode permissions for use with the HOpenAware, HOpenRFAware,
+** FSpOpenAware, and FSpOpenRFAware functions.
+** Note: Common settings are the ones with comments.
+*/
+
+enum {
+ dmNone = 0x0000,
+ dmNoneDenyRd = fsRdDenyPerm,
+ dmNoneDenyWr = fsWrDenyPerm,
+ dmNoneDenyRdWr = (fsRdDenyPerm + fsWrDenyPerm),
+ dmRd = fsRdPerm, /* Single writer, multiple readers; the readers */
+ dmRdDenyRd = (fsRdPerm + fsRdDenyPerm),
+ dmRdDenyWr = (fsRdPerm + fsWrDenyPerm), /* Browsing - equivalent to fsRdPerm */
+ dmRdDenyRdWr = (fsRdPerm + fsRdDenyPerm + fsWrDenyPerm),
+ dmWr = fsWrPerm,
+ dmWrDenyRd = (fsWrPerm + fsRdDenyPerm),
+ dmWrDenyWr = (fsWrPerm + fsWrDenyPerm),
+ dmWrDenyRdWr = (fsWrPerm + fsRdDenyPerm + fsWrDenyPerm),
+ dmRdWr = fsRdWrPerm, /* Shared access - equivalent to fsRdWrShPerm */
+ dmRdWrDenyRd = (fsRdWrPerm + fsRdDenyPerm),
+ dmRdWrDenyWr = (fsRdWrPerm + fsWrDenyPerm), /* Single writer, multiple readers; the writer */
+ dmRdWrDenyRdWr = (fsRdWrPerm + fsRdDenyPerm + fsWrDenyPerm) /* Exclusive access - equivalent to fsRdWrPerm */
+};
+
+
+/*****************************************************************************/
+
+/*
+** For those times where you need to use more than one kind of File Manager parameter
+** block but don't feel like wasting stack space, here's a parameter block you can reuse.
+*/
+
+
+union UniversalFMPB {
+ ParamBlockRec PB;
+ CInfoPBRec ciPB;
+ DTPBRec dtPB;
+ HParamBlockRec hPB;
+ CMovePBRec cmPB;
+ WDPBRec wdPB;
+ FCBPBRec fcbPB;
+ XVolumeParam xPB;
+};
+typedef union UniversalFMPB UniversalFMPB;
+typedef UniversalFMPB * UniversalFMPBPtr;
+typedef UniversalFMPBPtr * UniversalFMPBHandle;
+
+/*
+** Used by GetUGEntries to return user or group lists
+*/
+
+struct UGEntry {
+ short objType; /* object type: -1 = group; 0 = user */
+ long objID; /* the user or group ID */
+ Str31 name; /* the user or group name */
+};
+typedef struct UGEntry UGEntry;
+typedef UGEntry * UGEntryPtr;
+typedef UGEntryPtr * UGEntryHandle;
+
+/*
+** I use the following records instead of the AFPVolMountInfo and AFPXVolMountInfo structures in Files.h
+*/
+typedef unsigned char Str8[9];
+
+struct MyAFPVolMountInfo {
+ short length; /* length of this record */
+ VolumeType media; /* type of media, always AppleShareMediaType */
+ short flags; /* 0 = normal mount; set bit 0 to inhibit greeting messages */
+ char nbpInterval; /* NBP interval parameter; 7 is a good choice */
+ char nbpCount; /* NBP count parameter; 5 is a good choice */
+ short uamType; /* User Authentication Method */
+ short zoneNameOffset; /* offset from start of record to zoneName */
+ short serverNameOffset; /* offset from start of record to serverName */
+ short volNameOffset; /* offset from start of record to volName */
+ short userNameOffset; /* offset from start of record to userName */
+ short userPasswordOffset; /* offset from start of record to userPassword */
+ short volPasswordOffset; /* offset from start of record to volPassword */
+ Str32 zoneName; /* server's AppleTalk zone name */
+ char filler1; /* to word align volPassword */
+ Str32 serverName; /* server name */
+ char filler2; /* to word align volPassword */
+ Str27 volName; /* volume name */
+ Str31 userName; /* user name (zero length Pascal string for guest) */
+ Str8 userPassword; /* user password (zero length Pascal string if no user password) */
+ char filler3; /* to word align volPassword */
+ Str8 volPassword; /* volume password (zero length Pascal string if no volume password) */
+ char filler4; /* to end record on word boundry */
+};
+typedef struct MyAFPVolMountInfo MyAFPVolMountInfo;
+typedef MyAFPVolMountInfo * MyAFPVolMountInfoPtr;
+typedef MyAFPVolMountInfoPtr * MyAFPVolMountInfoHandle;
+
+struct MyAFPXVolMountInfo {
+ short length; /* length of this record */
+ VolumeType media; /* type of media, always AppleShareMediaType */
+ short flags; /* bits for no messages, no reconnect, etc */
+ char nbpInterval; /* NBP interval parameter; 7 is a good choice */
+ char nbpCount; /* NBP count parameter; 5 is a good choice */
+ short uamType; /* User Authentication Method */
+ short zoneNameOffset; /* offset from start of record to zoneName */
+ short serverNameOffset; /* offset from start of record to serverName */
+ short volNameOffset; /* offset from start of record to volName */
+ short userNameOffset; /* offset from start of record to userName */
+ short userPasswordOffset; /* offset from start of record to userPassword */
+ short volPasswordOffset; /* offset from start of record to volPassword */
+ short extendedFlags; /* extended flags word */
+ short uamNameOffset; /* offset to a pascal UAM name string */
+ short alternateAddressOffset; /* offset to Alternate Addresses in tagged format */
+ Str32 zoneName; /* server's AppleTalk zone name */
+ char filler1; /* to word align volPassword */
+ Str32 serverName; /* server name */
+ char filler2; /* to word align volPassword */
+ Str27 volName; /* volume name */
+ Str31 userName; /* user name (zero length Pascal string for guest) */
+ Str8 userPassword; /* user password (zero length Pascal string if no user password) */
+ char filler3; /* to word align volPassword */
+ Str8 volPassword; /* volume password (zero length Pascal string if no volume password) */
+ char filler4; /* to word align uamNameOffset */
+ Str32 uamName; /* UAM name */
+ char filler5; /* to word align alternateAddress */
+ char alternateAddress[1]; /* AFPAlternateAddress */
+};
+typedef struct MyAFPXVolMountInfo MyAFPXVolMountInfo;
+typedef MyAFPXVolMountInfo * MyAFPXVolMountInfoPtr;
+typedef MyAFPXVolMountInfoPtr * MyAFPXVolMountInfoHandle;
+
+/*****************************************************************************/
+
+/* Functions to get information out of GetVolParmsInfoBuffer. */
+
+/* version 1 field getters */
+
+EXTERN_API( short )
+GetVolParmsInfoVersion(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( long )
+GetVolParmsInfoAttrib(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Handle )
+GetVolParmsInfoLocalHand(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( long )
+GetVolParmsInfoServerAdr(const GetVolParmsInfoBuffer * volParms);
+
+
+
+/* version 2 field getters (assume zero result if version < 2) */
+
+EXTERN_API( long )
+GetVolParmsInfoVolumeGrade(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( long )
+GetVolParmsInfoForeignPrivID(const GetVolParmsInfoBuffer * volParms);
+
+
+
+/* version 3 field getters (assume zero result if version < 3) */
+
+EXTERN_API( long )
+GetVolParmsInfoExtendedAttributes(const GetVolParmsInfoBuffer * volParms);
+
+
+
+/* attribute bits supported by all versions of GetVolParmsInfoBuffer */
+
+EXTERN_API( Boolean )
+isNetworkVolume(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasLimitFCBs(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasLocalWList(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasNoMiniFndr(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasNoVNEdit(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasNoLclSync(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasTrshOffLine(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasNoSwitchTo(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasNoDeskItems(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasNoBootBlks(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasAccessCntl(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasNoSysDir(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasExtFSVol(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasOpenDeny(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasCopyFile(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasMoveRename(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasDesktopMgr(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasShortName(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasFolderLock(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasPersonalAccessPrivileges(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasUserGroupList(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasCatSearch(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasFileIDs(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasBTreeMgr(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+hasBlankAccessPrivileges(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+supportsAsyncRequests(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+supportsTrashVolumeCache(const GetVolParmsInfoBuffer * volParms);
+
+
+
+/* attribute bits supported by version 3 and greater versions of GetVolParmsInfoBuffer */
+
+EXTERN_API( Boolean )
+volIsEjectable(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+volSupportsHFSPlusAPIs(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+volSupportsFSCatalogSearch(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+volSupportsFSExchangeObjects(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+volSupports2TBFiles(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+volSupportsLongNames(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+volSupportsMultiScriptNames(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+volSupportsNamedForks(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+volSupportsSubtreeIterators(const GetVolParmsInfoBuffer * volParms);
+
+
+EXTERN_API( Boolean )
+volL2PCanMapFileBlocks(const GetVolParmsInfoBuffer * volParms);
+
+
+
+/*****************************************************************************/
+
+/* Functions for testing ioACUser bits. */
+
+EXTERN_API( Boolean )
+userIsOwner(SInt8 ioACUser);
+
+
+EXTERN_API( Boolean )
+userHasFullAccess(SInt8 ioACUser);
+
+
+EXTERN_API( Boolean )
+userHasDropBoxAccess(SInt8 ioACUser);
+
+
+EXTERN_API( Boolean )
+userHasBulletinBoard(SInt8 ioACUser);
+
+
+EXTERN_API( Boolean )
+userHasNoAccess(SInt8 ioACUser);
+
+
+
+/*****************************************************************************/
+
+EXTERN_API( void )
+TruncPString(
+ StringPtr destination,
+ ConstStr255Param source,
+ short maxLength);
+
+
+/*
+ The TruncPString function copies up to maxLength characters from
+ the source Pascal string to the destination Pascal string. TruncPString
+ ensures that the truncated string ends on a single-byte character, or on
+ the last byte of a multi-byte character.
+
+ destination output: destination Pascal string.
+ source input: source Pascal string.
+ maxLength output: The maximum allowable length of the destination
+ string.
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( Ptr )
+GetTempBuffer(
+ long buffReqSize,
+ long * buffActSize);
+
+
+/*
+ The GetTempBuffer function allocates a temporary buffer for file system
+ operations which is at least 1024 bytes (1K) and a multiple of
+ 1024 bytes.
+
+ buffReqSize input: Size you'd like the buffer to be.
+ buffActSize output: Size of buffer allocated.
+ function result output: Pointer to memory allocated or nil if no memory
+ was available. The caller is responsible for
+ disposing of this buffer with DisposePtr.
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetVolumeInfoNoName(
+ ConstStr255Param pathname,
+ short vRefNum,
+ HParmBlkPtr pb);
+
+
+/*
+ GetVolumeInfoNoName uses pathname and vRefNum to call PBHGetVInfoSync
+ in cases where the returned volume name is not needed by the caller.
+ The pathname and vRefNum parameters are not touched, and the pb
+ parameter is initialized by PBHGetVInfoSync except that ioNamePtr in
+ the parameter block is always returned as NULL (since it might point
+ to GetVolumeInfoNoName's local variable tempPathname).
+
+ I noticed using this code in several places, so here it is once.
+ This reduces the code size of MoreFiles.
+
+ pathName input: Pointer to a full pathname or nil. If you pass in a
+ partial pathname, it is ignored. A full pathname to a
+ volume must end with a colon character (:).
+ vRefNum input: Volume specification (volume reference number, working
+ directory number, drive number, or 0).
+ pb input: A pointer to HParamBlockRec.
+ output: The parameter block as filled in by PBHGetVInfoSync
+ except that ioNamePtr will always be NULL.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ paramErr -50 No default volume, or pb was NULL
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+XGetVolumeInfoNoName(
+ ConstStr255Param pathname,
+ short vRefNum,
+ XVolumeParamPtr pb);
+
+
+/*
+ XGetVolumeInfoNoName uses pathname and vRefNum to call PBXGetVolInfoSync
+ in cases where the returned volume name is not needed by the caller.
+ The pathname and vRefNum parameters are not touched, and the pb
+ parameter is initialized by PBXGetVolInfoSync except that ioNamePtr in
+ the parameter block is always returned as NULL (since it might point
+ to XGetVolumeInfoNoName's local variable tempPathname).
+
+ pathName input: Pointer to a full pathname or nil. If you pass in a
+ partial pathname, it is ignored. A full pathname to a
+ volume must end with a colon character (:).
+ vRefNum input: Volume specification (volume reference number, working
+ directory number, drive number, or 0).
+ pb input: A pointer to HParamBlockRec.
+ output: The parameter block as filled in by PBXGetVolInfoSync
+ except that ioNamePtr will always be NULL.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ paramErr -50 No default volume, or pb was NULL
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetCatInfoNoName(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ CInfoPBPtr pb);
+
+
+/*
+ GetCatInfoNoName uses vRefNum, dirID and name to call PBGetCatInfoSync
+ in cases where the returned object is not needed by the caller.
+ The vRefNum, dirID and name parameters are not touched, and the pb
+ parameter is initialized by PBGetCatInfoSync except that ioNamePtr in
+ the parameter block is always returned as NULL (since it might point
+ to GetCatInfoNoName's local variable tempName).
+
+ I noticed using this code in several places, so here it is once.
+ This reduces the code size of MoreFiles.
+
+ 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.
+ pb input: A pointer to CInfoPBRec.
+ output: The parameter block as filled in by
+ PBGetCatInfoSync except that ioNamePtr will
+ always be NULL.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+DetermineVRefNum(
+ ConstStr255Param pathname,
+ short vRefNum,
+ short * realVRefNum);
+
+
+/*
+ The DetermineVRefNum function determines the volume reference number of
+ a volume from a pathname, a volume specification, or a combination
+ of the two.
+ WARNING: Volume names on the Macintosh are *not* unique -- Multiple
+ mounted volumes can have the same name. For this reason, the use of a
+ volume name or full pathname to identify a specific volume may not
+ produce the results you expect. If more than one volume has the same
+ name and a volume name or full pathname is used, the File Manager
+ currently uses the first volume it finds with a matching name in the
+ volume queue.
+
+ pathName input: Pointer to a full pathname or nil. If you pass in a
+ partial pathname, it is ignored. A full pathname to a
+ volume must end with a colon character (:).
+ vRefNum input: Volume specification (volume reference number, working
+ directory number, drive number, or 0).
+ realVRefNum output: The real volume reference number.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ paramErr -50 No default volume
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+HGetVInfo(
+ short volReference,
+ StringPtr volName,
+ short * vRefNum,
+ unsigned long * freeBytes,
+ unsigned long * totalBytes);
+
+
+/*
+ The HGetVInfo function returns the name, volume reference number,
+ available space (in bytes), and total space (in bytes) for the
+ specified volume. You can specify the volume by providing its drive
+ number, volume reference number, or 0 for the default volume.
+ This routine is compatible with volumes up to 4 gigabytes.
+
+ volReference input: The drive number, volume reference number,
+ or 0 for the default volume.
+ volName input: A pointer to a buffer (minimum Str27) where
+ the volume name is to be returned or must
+ be nil.
+ output: The volume name.
+ vRefNum output: The volume reference number.
+ freeBytes output: The number of free bytes on the volume.
+ freeBytes is an unsigned long value.
+ totalBytes output: The total number of bytes on the volume.
+ totalBytes is an unsigned long value.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ paramErr -50 No default volume
+
+ __________
+
+ Also see: XGetVInfo
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+XGetVInfo(
+ short volReference,
+ StringPtr volName,
+ short * vRefNum,
+ UInt64 * freeBytes,
+ UInt64 * totalBytes);
+
+
+/*
+ The XGetVInfo function returns the name, volume reference number,
+ available space (in bytes), and total space (in bytes) for the
+ specified volume. You can specify the volume by providing its drive
+ number, volume reference number, or 0 for the default volume.
+ This routine is compatible with volumes up to 2 terabytes.
+
+ volReference input: The drive number, volume reference number,
+ or 0 for the default volume.
+ volName input: A pointer to a buffer (minimum Str27) where
+ the volume name is to be returned or must
+ be nil.
+ output: The volume name.
+ vRefNum output: The volume reference number.
+ freeBytes output: The number of free bytes on the volume.
+ freeBytes is an UnsignedWide value.
+ totalBytes output: The total number of bytes on the volume.
+ totalBytes is an UnsignedWide value.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ paramErr -50 No default volume
+
+ __________
+
+ Also see: HGetVInfo
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+CheckVolLock(
+ ConstStr255Param pathname,
+ short vRefNum);
+
+
+/*
+ The CheckVolLock function determines if a volume is locked - either by
+ hardware or by software. If CheckVolLock returns noErr, then the volume
+ is not locked.
+
+ pathName input: Pointer to a full pathname or nil. If you pass in a
+ partial pathname, it is ignored. A full pathname to a
+ volume must end with a colon character (:).
+ vRefNum input: Volume specification (volume reference number, working
+ directory number, drive number, or 0).
+
+ Result Codes
+ noErr 0 No error - volume not locked
+ nsvErr -35 No such volume
+ wPrErr -44 Volume locked by hardware
+ vLckdErr -46 Volume locked by software
+ paramErr -50 No default volume
+*/
+
+/*****************************************************************************/
+/*
+** The following routines call Mac OS routines that are not supported by
+** Carbon:
+**
+** GetDriverName
+** FindDrive
+** GetDiskBlocks
+** GetVolState
+*/
+
+#if !TARGET_API_MAC_CARBON // {
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetDriverName(
+ short driverRefNum,
+ Str255 driverName);
+
+
+/*
+ The GetDriverName function returns a device driver's name.
+
+ driverRefNum input: The driver reference number.
+ driverName output: The driver's name.
+
+ Result Codes
+ noErr 0 No error
+ badUnitErr -21 Bad driver reference number
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FindDrive(
+ ConstStr255Param pathname,
+ short vRefNum,
+ DrvQElPtr * driveQElementPtr);
+
+
+/*
+ The FindDrive function returns a pointer to a mounted volume's
+ drive queue element.
+
+ pathName input: Pointer to a full pathname or nil. If you
+ pass in a partial pathname, it is ignored.
+ A full pathname to a volume must end with
+ a colon character (:).
+ vRefNum input: Volume specification (volume reference
+ number, working directory number, drive
+ number, or 0).
+ driveQElementPtr output: Pointer to a volume's drive queue element
+ in the drive queue. DO NOT change the
+ DrvQEl.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ paramErr -50 No default volume
+ nsDrvErr -56 No such drive
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetDiskBlocks(
+ ConstStr255Param pathname,
+ short vRefNum,
+ unsigned long * numBlocks);
+
+
+/*
+ The GetDiskBlocks function returns the number of physical disk
+ blocks on a disk drive. NOTE: This is not the same as volume
+ allocation blocks!
+
+ pathName input: Pointer to a full pathname or nil. If you
+ pass in a partial pathname, it is ignored.
+ A full pathname to a volume must end with
+ a colon character (:).
+ vRefNum input: Volume specification (volume reference
+ number, working directory number, drive
+ number, or 0).
+ numBlocks output: The number of physical disk blocks on the disk drive.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ paramErr -50 No default volume, driver reference
+ number is zero, ReturnFormatList
+ returned zero blocks, DriveStatus
+ returned an unknown value, or
+ driveQElementPtr->qType is unknown
+ nsDrvErr -56 No such drive
+ statusErr Ð18 Driver does not respond to this
+ status request
+ badUnitErr Ð21 Driver reference number does not
+ match unit table
+ unitEmptyErr Ð22 Driver reference number specifies
+ a nil handle in unit table
+ abortErr Ð27 Request aborted by KillIO
+ notOpenErr Ð28 Driver not open
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetVolState(
+ ConstStr255Param pathname,
+ short vRefNum,
+ Boolean * volumeOnline,
+ Boolean * volumeEjected,
+ Boolean * driveEjectable,
+ Boolean * driverWantsEject);
+
+
+/*
+ The GetVolState function determines if a volume is online or offline,
+ if an offline volume is ejected, and if the volume's driver is
+ ejectable or wants eject calls.
+
+ pathName input: Pointer to a full pathname or nil.
+ vRefNum input: Volume specification (volume reference number,
+ working directory number, drive number, or 0).
+ volumeOnline output: True if the volume is online;
+ False if the volume is offline.
+ volumeEjected output: True if the volume is ejected (ejected
+ volumes are always offline); False if the
+ volume is not ejected.
+ driveEjectable output: True if the volume's drive is ejectable;
+ False if the volume's drive is not ejectable.
+ driverWantsEject output: True if the volume's driver wants an Eject
+ request after unmount (even if the drive
+ is not ejectable); False if the volume's
+ driver does not need an eject request.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ paramErr -50 No default volume, or pb was NULL
+*/
+
+/*****************************************************************************/
+
+#endif // } !TARGET_API_MAC_CARBON
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetVolFileSystemID(
+ ConstStr255Param pathname,
+ short vRefNum,
+ short * fileSystemID);
+
+
+/*
+ The GetVolFileSystemID function returned the file system ID of
+ a mounted volume. The file system ID identifies the file system
+ that handles requests to a particular volume. Here's a partial list
+ of file system ID numbers (only Apple's file systems are listed):
+ FSID File System
+ ----- -----------------------------------------------------
+ $0000 Macintosh HFS or MFS
+ $0100 ProDOS File System
+ $0101 PowerTalk Mail Enclosures
+ $4147 ISO 9660 File Access (through Foreign File Access)
+ $4242 High Sierra File Access (through Foreign File Access)
+ $464D QuickTake File System (through Foreign File Access)
+ $4953 Macintosh PC Exchange (MS-DOS)
+ $4A48 Audio CD Access (through Foreign File Access)
+ $4D4B Apple Photo Access (through Foreign File Access)
+
+ See the Technical Note "FL 35 - Determining Which File System
+ Is Active" and the "Guide to the File System Manager" for more
+ information.
+
+ pathName input: Pointer to a full pathname or nil. If you pass
+ in a partial pathname, it is ignored. A full
+ pathname to a volume must contain at least
+ one colon character (:) and must not start with
+ a colon character.
+ vRefNum input: Volume specification (volume reference number,
+ working directory number, drive number, or 0).
+ fileSystemID output: The volume's file system ID.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ paramErr -50 No default volume, or pb was NULL
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+UnmountAndEject(
+ ConstStr255Param pathname,
+ short vRefNum);
+
+
+/*
+ The UnmountAndEject function unmounts and ejects a volume. The volume
+ is ejected only if it is ejectable and not already ejected.
+
+ pathName input: Pointer to a full pathname or nil. If you pass in a
+ partial pathname, it is ignored. A full pathname to a
+ volume must end with a colon character (:).
+ vRefNum input: Volume specification (volume reference number, working
+ directory number, drive number, or 0).
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad volume name
+ fBsyErr -47 One or more files are open
+ paramErr -50 No default volume
+ nsDrvErr -56 No such drive
+ extFSErr -58 External file system error - no file
+ system claimed this call.
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+OnLine(
+ FSSpecPtr volumes,
+ short reqVolCount,
+ short * actVolCount,
+ short * volIndex);
+
+
+/*
+ The OnLine function returns the list of volumes currently mounted in
+ an array of FSSpec records.
+
+ A noErr result indicates that the volumes array was filled
+ (actVolCount == reqVolCount) and there may be additional volumes
+ mounted. A nsvErr result indicates that the end of the volume list
+ was found and actVolCount volumes were actually found this time.
+
+ volumes input: Pointer to array of FSSpec where the volume list
+ is returned.
+ reqVolCount input: Maximum number of volumes to return (the number of
+ elements in the volumes array).
+ actVolCount output: The number of volumes actually returned.
+ volIndex input: The current volume index position. Set to 1 to
+ start with the first volume.
+ output: The volume index position to get the next volume.
+ Pass this value the next time you call OnLine to
+ start where you left off.
+
+ Result Codes
+ noErr 0 No error, but there are more volumes
+ to list
+ nsvErr -35 No more volumes to be listed
+ paramErr -50 volIndex was <= 0
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+SetDefault(
+ short newVRefNum,
+ long newDirID,
+ short * oldVRefNum,
+ long * oldDirID);
+
+
+/*
+ The SetDefault function sets the default volume and directory to the
+ volume specified by newVRefNum and the directory specified by newDirID.
+ The current default volume reference number and directory ID are
+ returned in oldVRefNum and oldDir and must be used to restore the
+ default volume and directory to their previous state *as soon as
+ possible* with the RestoreDefault function. These two functions are
+ designed to be used as a wrapper around Standard I/O routines where
+ the location of the file is implied to be the default volume and
+ directory. In other words, this is how you should use these functions:
+
+ error = SetDefault(newVRefNum, newDirID, &oldVRefNum, &oldDirID);
+ if ( error == noErr )
+ {
+ // call the Stdio functions like remove, rename, tmpfile,
+ // fopen, freopen, etc. or non-ANSI extensions like
+ // fdopen,fsetfileinfo, -- create, open, unlink, etc. here!
+
+ error = RestoreDefault(oldVRefNum, oldDirID);
+ }
+
+ By using these functions as a wrapper, you won't need to open a working
+ directory (because SetDefault and RestoreDefault use HSetVol) and you
+ won't have to worry about the effects of using HSetVol (documented in
+ Technical Note "FL 11 - PBHSetVol is Dangerous" and in the
+ Inside Macintosh: Files book in the description of the HSetVol and
+ PBHSetVol functions) because the default volume/directory is restored
+ before giving up control to code that might be affected by HSetVol.
+
+ newVRefNum input: Volume specification (volume reference number,
+ working directory number, drive number, or 0) of
+ the new default volume.
+ newDirID input: Directory ID of the new default directory.
+ oldVRefNum output: The volume specification to save for use with
+ RestoreDefault.
+ oldDirID output: The directory ID to save for use with
+ RestoreDefault.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ bdNamErr -37 Bad volume name
+ fnfErr -43 Directory not found
+ paramErr -50 No default volume
+ afpAccessDenied -5000 User does not have access to the directory
+
+ __________
+
+ Also see: RestoreDefault
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+RestoreDefault(
+ short oldVRefNum,
+ long oldDirID);
+
+
+/*
+ The RestoreDefault function restores the default volume and directory
+ to the volume specified by oldVRefNum and the directory specified by
+ oldDirID. The oldVRefNum and oldDirID parameters were previously
+ obtained from the SetDefault function. These two functions are designed
+ to be used as a wrapper around Standard C I/O routines where the
+ location of the file is implied to be the default volume and directory.
+ In other words, this is how you should use these functions:
+
+ error = SetDefault(newVRefNum, newDirID, &oldVRefNum, &oldDirID);
+ if ( error == noErr )
+ {
+ // call the Stdio functions like remove, rename, tmpfile,
+ // fopen, freopen, etc. or non-ANSI extensions like
+ // fdopen,fsetfileinfo, -- create, open, unlink, etc. here!
+
+ error = RestoreDefault(oldVRefNum, oldDirID);
+ }
+
+ By using these functions as a wrapper, you won't need to open a working
+ directory (because SetDefault and RestoreDefault use HSetVol) and you
+ won't have to worry about the effects of using HSetVol (documented in
+ Technical Note "FL 11 - PBHSetVol is Dangerous" and in the
+ Inside Macintosh: Files book in the description of the HSetVol and
+ PBHSetVol functions) because the default volume/directory is restored
+ before giving up control to code that might be affected by HSetVol.
+
+ oldVRefNum input: The volume specification to restore.
+ oldDirID input: The directory ID to restore.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ bdNamErr -37 Bad volume name
+ fnfErr -43 Directory not found
+ paramErr -50 No default volume
+ rfNumErr -51 Bad working directory reference number
+ afpAccessDenied -5000 User does not have access to the directory
+
+ __________
+
+ Also see: SetDefault
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetDInfo(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ DInfo * fndrInfo);
+
+
+/*
+ The GetDInfo function gets the finder information for a directory.
+
+ 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.
+ fndrInfo output: If the object is a directory, then its DInfo.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ Also see: FSpGetDInfo, FSpGetFInfoCompat
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpGetDInfo(
+ const FSSpec * spec,
+ DInfo * fndrInfo);
+
+
+/*
+ The FSpGetDInfo function gets the finder information for a directory.
+
+ spec input: An FSSpec record specifying the directory.
+ fndrInfo output: If the object is a directory, then its DInfo.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ Also see: FSpGetFInfoCompat, GetDInfo
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+SetDInfo(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ const DInfo * fndrInfo);
+
+
+/*
+ The SetDInfo function sets the finder information for a directory.
+
+ 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.
+ fndrInfo input: The DInfo.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ Also see: FSpSetDInfo, FSpSetFInfoCompat
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpSetDInfo(
+ const FSSpec * spec,
+ const DInfo * fndrInfo);
+
+
+/*
+ The FSpSetDInfo function sets the finder information for a directory.
+
+ spec input: An FSSpec record specifying the directory.
+ fndrInfo input: The DInfo.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ Also see: FSpSetFInfoCompat, SetDInfo
+*/
+
+/*****************************************************************************/
+
+#if OLDROUTINENAMES
+ #define GetDirID(vRefNum, dirID, name, theDirID, isDirectory) GetDirectoryID(vRefNum, dirID, name, theDirID, isDirectory)
+#endif
+EXTERN_API( OSErr )
+GetDirectoryID(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ long * theDirID,
+ Boolean * isDirectory);
+
+
+/*
+ The GetDirectoryID function gets the directory ID number of the
+ directory specified. If a file is specified, then the parent
+ directory of the file is returned and isDirectory is false. If
+ a directory is specified, then that directory's ID number is
+ returned and isDirectory is true.
+ WARNING: Volume names on the Macintosh are *not* unique -- Multiple
+ mounted volumes can have the same name. For this reason, the use of a
+ volume name or full pathname to identify a specific volume may not
+ produce the results you expect. If more than one volume has the same
+ name and a volume name or full pathname is used, the File Manager
+ currently uses the first volume it finds with a matching name in the
+ volume queue.
+
+ 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.
+ theDirID output: If the object is a file, then its parent directory
+ ID. If the object is a directory, then its ID.
+ isDirectory output: True if object is a directory; false if
+ object is a file.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+*/
+
+/*****************************************************************************/
+
+#if OLDROUTINENAMES
+ #define DirIDFromFSSpec(spec, theDirID, isDirectory) FSpGetDirectoryID(spec, theDirID, isDirectory)
+#endif
+EXTERN_API( OSErr )
+FSpGetDirectoryID(
+ const FSSpec * spec,
+ long * theDirID,
+ Boolean * isDirectory);
+
+
+/*
+ The FSpGetDirectoryID function gets the directory ID number of the
+ directory specified by spec. If spec is to a file, then the parent
+ directory of the file is returned and isDirectory is false. If
+ spec is to a directory, then that directory's ID number is
+ returned and isDirectory is true.
+
+ spec input: An FSSpec record specifying the directory.
+ theDirID output: The directory ID.
+ isDirectory output: True if object is a directory; false if
+ object is a file.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetDirName(
+ short vRefNum,
+ long dirID,
+ Str31 name);
+
+
+/*
+ The GetDirName function gets the name of a directory from its
+ directory ID.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ name output: Points to a Str31 where the directory name is to be
+ returned.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume or
+ name parameter was NULL
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetIOACUser(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ SInt8 * ioACUser);
+
+
+/*
+ GetIOACUser returns a directory's access restrictions byte.
+ Use the masks and macro defined in MoreFilesExtras to check for
+ specific access priviledges.
+
+ 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.
+ ioACUser output: The access restriction byte
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpGetIOACUser(
+ const FSSpec * spec,
+ SInt8 * ioACUser);
+
+
+/*
+ FSpGetIOACUser returns a directory's access restrictions byte.
+ Use the masks and macro defined in MoreFilesExtras to check for
+ specific access priviledges.
+
+ spec input: An FSSpec record specifying the directory.
+ ioACUser output: The access restriction byte
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetParentID(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ long * parID);
+
+
+/*
+ The GetParentID function gets the parent directory ID number of the
+ specified object.
+
+ 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.
+ parID output: The parent directory ID of the specified object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetFilenameFromPathname(
+ ConstStr255Param pathname,
+ Str255 filename);
+
+
+/*
+ The GetFilenameFromPathname function gets the file (or directory) name
+ from the end of a full or partial pathname. Returns notAFileErr if the
+ pathname is nil, the pathname is empty, or the pathname cannot refer to
+ a filename (with a noErr result, the pathname could still refer to a
+ directory).
+
+ pathname input: A full or partial pathname.
+ filename output: The file (or directory) name.
+
+ Result Codes
+ noErr 0 No error
+ notAFileErr -1302 The pathname is nil, the pathname
+ is empty, or the pathname cannot refer
+ to a filename
+
+ __________
+
+ See also: GetObjectLocation.
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetObjectLocation(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param pathname,
+ short * realVRefNum,
+ long * realParID,
+ Str255 realName,
+ Boolean * isDirectory);
+
+
+/*
+ The GetObjectLocation function gets a file system object's location -
+ that is, its real volume reference number, real parent directory ID,
+ and name. While we're at it, determine if the object is a file or directory.
+ If GetObjectLocation returns fnfErr, then the location information
+ returned is valid, but it describes an object that doesn't exist.
+ You can use the location information for another operation, such as
+ creating a file or directory.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ pathname input: Pointer to object name, or nil when dirID specifies
+ a directory that's the object.
+ realVRefNum output: The real volume reference number.
+ realParID output: The parent directory ID of the specified object.
+ realName output: The name of the specified object (the case of the
+ object name may not be the same as the object's
+ catalog entry on disk - since the Macintosh file
+ system is not case sensitive, it shouldn't matter).
+ isDirectory output: True if object is a directory; false if object
+ is a file.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ notAFileErr -1302 The pathname is nil, the pathname
+ is empty, or the pathname cannot refer
+ to a filename
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: FSMakeFSSpecCompat
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetDirItems(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ Boolean getFiles,
+ Boolean getDirectories,
+ FSSpecPtr items,
+ short reqItemCount,
+ short * actItemCount,
+ short * itemIndex);
+
+
+/*
+ The GetDirItems function returns a list of items in the specified
+ directory in an array of FSSpec records. File, subdirectories, or
+ both can be returned in the list.
+
+ A noErr result indicates that the items array was filled
+ (actItemCount == reqItemCount) and there may be additional items
+ left in the directory. A fnfErr result indicates that the end of
+ the directory list was found and actItemCount items were actually
+ found this time.
+
+ 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.
+ getFiles input: Pass true to have files added to the items list.
+ getDirectories input: Pass true to have directories added to the
+ items list.
+ items input: Pointer to array of FSSpec where the item list
+ is returned.
+ reqItemCount input: Maximum number of items to return (the number
+ of elements in the items array).
+ actItemCount output: The number of items actually returned.
+ itemIndex input: The current item index position. Set to 1 to
+ start with the first item in the directory.
+ output: The item index position to get the next item.
+ Pass this value the next time you call
+ GetDirItems to start where you left off.
+
+ Result Codes
+ noErr 0 No error, but there are more items
+ to list
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found, there are no more items
+ to be listed.
+ paramErr -50 No default volume or itemIndex was <= 0
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+DeleteDirectoryContents(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The DeleteDirectoryContents function deletes the contents of a directory.
+ All files and subdirectories in the specified directory are deleted.
+ If a locked file or directory is encountered, it is unlocked and then
+ deleted. If any unexpected errors are encountered,
+ DeleteDirectoryContents quits and returns to the caller.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ name input: Pointer to directory name, or nil when dirID specifies
+ a directory that's the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ wPrErr -44 Hardware volume lock
+ fLckdErr -45 File is locked
+ vLckdErr -46 Software volume lock
+ fBsyErr -47 File busy, directory not empty, or working directory control block open
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ Also see: DeleteDirectory
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+DeleteDirectory(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The DeleteDirectory function deletes a directory and its contents.
+ All files and subdirectories in the specified directory are deleted.
+ If a locked file or directory is encountered, it is unlocked and then
+ deleted. After deleting the directories contents, the directory is
+ deleted. If any unexpected errors are encountered, DeleteDirectory
+ quits and returns to the caller.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ name input: Pointer to directory name, or nil when dirID specifies
+ a directory that's the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ wPrErr -44 Hardware volume lock
+ fLckdErr -45 File is locked
+ vLckdErr -46 Software volume lock
+ fBsyErr -47 File busy, directory not empty, or working directory control block open
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ Also see: DeleteDirectoryContents
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+CheckObjectLock(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The CheckObjectLock function determines if a file or directory is locked.
+ If CheckObjectLock returns noErr, then the file or directory
+ is not locked. If CheckObjectLock returns fLckdErr, the it is locked.
+
+ 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.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ Also see: FSpCheckObjectLock
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpCheckObjectLock(const FSSpec * spec);
+
+
+/*
+ The FSpCheckObjectLock function determines if a file or directory is locked.
+ If FSpCheckObjectLock returns noErr, then the file or directory
+ is not locked.
+
+ spec input: An FSSpec record specifying the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ Also see: CheckObjectLock
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetFileSize(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param fileName,
+ long * dataSize,
+ long * rsrcSize);
+
+
+/*
+ The GetFileSize function returns the logical size of a file's
+ data and resource fork.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ name input: The name of the file.
+ dataSize output: The number of bytes in the file's data fork.
+ rsrcSize output: The number of bytes in the file's resource fork.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume
+ dirNFErrdirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: FSpGetFileSize
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpGetFileSize(
+ const FSSpec * spec,
+ long * dataSize,
+ long * rsrcSize);
+
+
+/*
+ The FSpGetFileSize function returns the logical size of a file's
+ data and resource fork.
+
+ spec input: An FSSpec record specifying the file.
+ dataSize output: The number of bytes in the file's data fork.
+ rsrcSize output: The number of bytes in the file's resource fork.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ paramErr -50 No default volume
+ dirNFErrdirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: GetFileSize
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+BumpDate(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The BumpDate function changes the modification date of a file or
+ directory to the current date/time. If the modification date is already
+ equal to the current date/time, then add one second to the
+ modification date.
+
+ 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.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: FSpBumpDate
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpBumpDate(const FSSpec * spec);
+
+
+/*
+ The FSpBumpDate function changes the modification date of a file or
+ directory to the current date/time. If the modification date is already
+ equal to the current date/time, then add one second to the
+ modification date.
+
+ spec input: An FSSpec record specifying the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: BumpDate
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+ChangeCreatorType(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ OSType creator,
+ OSType fileType);
+
+
+/*
+ The ChangeCreatorType function changes the creator or file type of a file.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ name input: The name of the file.
+ creator input: The new creator type or 0x00000000 to leave
+ the creator type alone.
+ fileType input: The new file type or 0x00000000 to leave the
+ file type alone.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ notAFileErr -1302 Name was not a file
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: FSpChangeCreatorType
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpChangeCreatorType(
+ const FSSpec * spec,
+ OSType creator,
+ OSType fileType);
+
+
+/*
+ The FSpChangeCreatorType function changes the creator or file type of a file.
+
+ spec input: An FSSpec record specifying the file.
+ creator input: The new creator type or 0x00000000 to leave
+ the creator type alone.
+ fileType input: The new file type or 0x00000000 to leave the
+ file type alone.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ notAFileErr -1302 Name was not a file
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: ChangeCreatorType
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+ChangeFDFlags(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name,
+ Boolean setBits,
+ unsigned short flagBits);
+
+
+/*
+ The ChangeFDFlags function sets or clears Finder Flag bits in the
+ fdFlags field of a file or directory's FInfo record.
+
+ 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.
+ setBits input: If true, then set the bits specified in flagBits.
+ If false, then clear the bits specified in flagBits.
+ flagBits input: The flagBits parameter specifies which Finder Flag
+ bits to set or clear. If a bit in flagBits is set,
+ then the same bit in fdFlags is either set or
+ cleared depending on the state of the setBits
+ parameter.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: FSpChangeFDFlags
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpChangeFDFlags(
+ const FSSpec * spec,
+ Boolean setBits,
+ unsigned short flagBits);
+
+
+/*
+ The FSpChangeFDFlags function sets or clears Finder Flag bits in the
+ fdFlags field of a file or directory's FInfo record.
+
+ spec input: An FSSpec record specifying the object.
+ setBits input: If true, then set the bits specified in flagBits.
+ If false, then clear the bits specified in flagBits.
+ flagBits input: The flagBits parameter specifies which Finder Flag
+ bits to set or clear. If a bit in flagBits is set,
+ then the same bit in fdFlags is either set or
+ cleared depending on the state of the setBits
+ parameter.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: ChangeFDFlags
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+SetIsInvisible(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The SetIsInvisible function sets the invisible bit in the fdFlags
+ word of the specified file or directory's finder information.
+
+ 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.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: FSpSetIsInvisible, ClearIsInvisible, FSpClearIsInvisible
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpSetIsInvisible(const FSSpec * spec);
+
+
+/*
+ The FSpSetIsInvisible function sets the invisible bit in the fdFlags
+ word of the specified file or directory's finder information.
+
+ spec input: An FSSpec record specifying the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetIsInvisible, ClearIsInvisible, FSpClearIsInvisible
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+ClearIsInvisible(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The ClearIsInvisible function clears the invisible bit in the fdFlags
+ word of the specified file or directory's finder information.
+
+ 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.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetIsInvisible, FSpSetIsInvisible, FSpClearIsInvisible
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpClearIsInvisible(const FSSpec * spec);
+
+
+/*
+ The FSpClearIsInvisible function clears the invisible bit in the fdFlags
+ word of the specified file or directory's finder information.
+
+ spec input: An FSSpec record specifying the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetIsInvisible, FSpSetIsInvisible, ClearIsInvisible
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+SetNameLocked(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The SetNameLocked function sets the nameLocked bit in the fdFlags word
+ of the specified file or directory's finder information.
+
+ 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.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: FSpSetNameLocked, ClearNameLocked, FSpClearNameLocked
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpSetNameLocked(const FSSpec * spec);
+
+
+/*
+ The FSpSetNameLocked function sets the nameLocked bit in the fdFlags word
+ of the specified file or directory's finder information.
+
+ spec input: An FSSpec record specifying the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetNameLocked, ClearNameLocked, FSpClearNameLocked
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+ClearNameLocked(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The ClearNameLocked function clears the nameLocked bit in the fdFlags
+ word of the specified file or directory's finder information.
+
+ 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.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetNameLocked, FSpSetNameLocked, FSpClearNameLocked
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpClearNameLocked(const FSSpec * spec);
+
+
+/*
+ The FSpClearNameLocked function clears the nameLocked bit in the fdFlags
+ word of the specified file or directory's finder information.
+
+ spec input: An FSSpec record specifying the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetNameLocked, FSpSetNameLocked, ClearNameLocked
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+SetIsStationery(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The SetIsStationery function sets the isStationery bit in the
+ fdFlags word of the specified file or directory's finder information.
+
+ 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.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: FSpSetIsStationery, ClearIsStationery, FSpClearIsStationery
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpSetIsStationery(const FSSpec * spec);
+
+
+/*
+ The FSpSetIsStationery function sets the isStationery bit in the
+ fdFlags word of the specified file or directory's finder information.
+
+ spec input: An FSSpec record specifying the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetIsStationery, ClearIsStationery, FSpClearIsStationery
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+ClearIsStationery(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The ClearIsStationery function clears the isStationery bit in the
+ fdFlags word of the specified file or directory's finder information.
+
+ 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.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetIsStationery, FSpSetIsStationery, FSpClearIsStationery
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpClearIsStationery(const FSSpec * spec);
+
+
+/*
+ The FSpClearIsStationery function clears the isStationery bit in the
+ fdFlags word of the specified file or directory's finder information.
+
+ spec input: An FSSpec record specifying the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetIsStationery, FSpSetIsStationery, ClearIsStationery
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+SetHasCustomIcon(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The SetHasCustomIcon function sets the hasCustomIcon bit in the
+ fdFlags word of the specified file or directory's finder information.
+
+ 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.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: FSpSetHasCustomIcon, ClearHasCustomIcon, FSpClearHasCustomIcon
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpSetHasCustomIcon(const FSSpec * spec);
+
+
+/*
+ The FSpSetHasCustomIcon function sets the hasCustomIcon bit in the
+ fdFlags word of the specified file or directory's finder information.
+
+ spec input: An FSSpec record specifying the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetHasCustomIcon, ClearHasCustomIcon, FSpClearHasCustomIcon
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+ClearHasCustomIcon(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The ClearHasCustomIcon function clears the hasCustomIcon bit in the
+ fdFlags word of the specified file or directory's finder information.
+
+ 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.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetHasCustomIcon, FSpSetHasCustomIcon, FSpClearHasCustomIcon
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpClearHasCustomIcon(const FSSpec * spec);
+
+
+/*
+ The FSpClearHasCustomIcon function clears the hasCustomIcon bit in the
+ fdFlags word of the specified file or directory's finder information.
+
+ spec input: An FSSpec record specifying the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: SetHasCustomIcon, FSpSetHasCustomIcon, ClearHasCustomIcon
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+ClearHasBeenInited(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param name);
+
+
+/*
+ The ClearHasBeenInited function clears the hasBeenInited bit in the
+ fdFlags word of the specified file or directory's finder information.
+
+ 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.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: FSpClearHasBeenInited
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpClearHasBeenInited(const FSSpec * spec);
+
+
+/*
+ The FSpClearHasBeenInited function clears the hasBeenInited bit in the
+ fdFlags word of the specified file or directory's finder information.
+
+ spec input: An FSSpec record specifying the object.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: ClearHasBeenInited
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+CopyFileMgrAttributes(
+ short srcVRefNum,
+ long srcDirID,
+ ConstStr255Param srcName,
+ short dstVRefNum,
+ long dstDirID,
+ ConstStr255Param dstName,
+ Boolean copyLockBit);
+
+
+/*
+ The CopyFileMgrAttributes function copies all File Manager attributes
+ from the source file or directory to the destination file or directory.
+ If copyLockBit is true, then set the locked state of the destination
+ to match the source.
+
+ srcVRefNum input: Source volume specification.
+ srcDirID input: Source directory ID.
+ srcName input: Pointer to source object name, or nil when
+ srcDirID specifies a directory that's the object.
+ dstVRefNum input: Destination volume specification.
+ dstDirID input: Destination directory ID.
+ dstName input: Pointer to destination object name, or nil when
+ dstDirID specifies a directory that's the object.
+ copyLockBit input: If true, set the locked state of the destination
+ to match the source.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: FSpCopyFileMgrAttributes
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpCopyFileMgrAttributes(
+ const FSSpec * srcSpec,
+ const FSSpec * dstSpec,
+ Boolean copyLockBit);
+
+
+/*
+ The FSpCopyFileMgrAttributes function copies all File Manager attributes
+ from the source file or directory to the destination file or directory.
+ If copyLockBit is true, then set the locked state of the destination
+ to match the source.
+
+ srcSpec input: An FSSpec record specifying the source object.
+ dstSpec input: An FSSpec record specifying the destination object.
+ copyLockBit input: If true, set the locked state of the destination
+ to match the source.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename
+ fnfErr -43 File not found
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 No default volume
+ dirNFErr -120 Directory not found or incomplete pathname
+ afpAccessDenied -5000 User does not have the correct access
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+
+ __________
+
+ See also: CopyFileMgrAttributes
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+HOpenAware(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param fileName,
+ short denyModes,
+ short * refNum);
+
+
+/*
+ The HOpenAware function opens the data fork of a file using deny mode
+ permissions instead the normal File Manager permissions. If OpenDeny
+ is not available, then HOpenAware translates the deny modes to the
+ closest File Manager permissions and tries to open the file with
+ OpenDF first, and then Open if OpenDF isn't available. By using
+ HOpenAware with deny mode permissions, a program can be "AppleShare
+ aware" and fall back on the standard File Manager open calls
+ automatically.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ fileName input: The name of the file.
+ denyModes input: The deny modes access under which to open the file.
+ refNum output: The file reference number of the opened file.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ tmfoErr -42 Too many files open
+ fnfErr -43 File not found
+ wPrErr -44 Volume locked by hardware
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ opWrErr -49 File already open for writing
+ paramErr -50 No default volume
+ permErr -54 File is already open and cannot be opened using specified deny modes
+ afpAccessDenied -5000 User does not have the correct access to the file
+ afpDenyConflict -5006 Requested access permission not possible
+
+ __________
+
+ See also: FSpOpenAware, HOpenRFAware, FSpOpenRFAware
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpOpenAware(
+ const FSSpec * spec,
+ short denyModes,
+ short * refNum);
+
+
+/*
+ The FSpOpenAware function opens the data fork of a file using deny mode
+ permissions instead the normal File Manager permissions. If OpenDeny
+ is not available, then FSpOpenAware translates the deny modes to the
+ closest File Manager permissions and tries to open the file with
+ OpenDF first, and then Open if OpenDF isn't available. By using
+ FSpOpenAware with deny mode permissions, a program can be "AppleShare
+ aware" and fall back on the standard File Manager open calls
+ automatically.
+
+ spec input: An FSSpec record specifying the file.
+ denyModes input: The deny modes access under which to open the file.
+ refNum output: The file reference number of the opened file.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ tmfoErr -42 Too many files open
+ fnfErr -43 File not found
+ wPrErr -44 Volume locked by hardware
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ opWrErr -49 File already open for writing
+ paramErr -50 No default volume
+ permErr -54 File is already open and cannot be opened using specified deny modes
+ afpAccessDenied -5000 User does not have the correct access to the file
+ afpDenyConflict -5006 Requested access permission not possible
+
+ __________
+
+ See also: HOpenAware, HOpenRFAware, FSpOpenRFAware
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+HOpenRFAware(
+ short vRefNum,
+ long dirID,
+ ConstStr255Param fileName,
+ short denyModes,
+ short * refNum);
+
+
+/*
+ The HOpenRFAware function opens the resource fork of a file using deny
+ mode permissions instead the normal File Manager permissions. If
+ OpenRFDeny is not available, then HOpenRFAware translates the deny
+ modes to the closest File Manager permissions and tries to open the
+ file with OpenRF. By using HOpenRFAware with deny mode permissions,
+ a program can be "AppleShare aware" and fall back on the standard
+ File Manager open calls automatically.
+
+ vRefNum input: Volume specification.
+ dirID input: Directory ID.
+ fileName input: The name of the file.
+ denyModes input: The deny modes access under which to open the file.
+ refNum output: The file reference number of the opened file.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ tmfoErr -42 Too many files open
+ fnfErr -43 File not found
+ wPrErr -44 Volume locked by hardware
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ opWrErr -49 File already open for writing
+ paramErr -50 No default volume
+ permErr -54 File is already open and cannot be opened using specified deny modes
+ afpAccessDenied -5000 User does not have the correct access to the file
+ afpDenyConflict -5006 Requested access permission not possible
+
+ __________
+
+ See also: HOpenAware, FSpOpenAware, FSpOpenRFAware
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpOpenRFAware(
+ const FSSpec * spec,
+ short denyModes,
+ short * refNum);
+
+
+/*
+ The FSpOpenRFAware function opens the resource fork of a file using deny
+ mode permissions instead the normal File Manager permissions. If
+ OpenRFDeny is not available, then FSpOpenRFAware translates the deny
+ modes to the closest File Manager permissions and tries to open the
+ file with OpenRF. By using FSpOpenRFAware with deny mode permissions,
+ a program can be "AppleShare aware" and fall back on the standard
+ File Manager open calls automatically.
+
+ spec input: An FSSpec record specifying the file.
+ denyModes input: The deny modes access under which to open the file.
+ refNum output: The file reference number of the opened file.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 No such volume
+ tmfoErr -42 Too many files open
+ fnfErr -43 File not found
+ wPrErr -44 Volume locked by hardware
+ fLckdErr -45 File is locked
+ vLckdErr -46 Volume is locked or read-only
+ opWrErr -49 File already open for writing
+ paramErr -50 No default volume
+ permErr -54 File is already open and cannot be opened using specified deny modes
+ afpAccessDenied -5000 User does not have the correct access to the file
+ afpDenyConflict -5006 Requested access permission not possible
+
+ __________
+
+ See also: HOpenAware, FSpOpenAware, HOpenRFAware
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSReadNoCache(
+ short refNum,
+ long * count,
+ void * buffPtr);
+
+
+/*
+ The FSReadNoCache function reads any number of bytes from an open file
+ while asking the file system to bypass its cache mechanism.
+
+ refNum input: The file reference number of an open file.
+ count input: The number of bytes to read.
+ output: The number of bytes actually read.
+ buffPtr input: A pointer to the data buffer into which the bytes are
+ to be read.
+
+ Result Codes
+ noErr 0 No error
+ readErr Ð19 Driver does not respond to read requests
+ badUnitErr Ð21 Driver reference number does not
+ match unit table
+ unitEmptyErr Ð22 Driver reference number specifies a
+ nil handle in unit table
+ abortErr Ð27 Request aborted by KillIO
+ notOpenErr Ð28 Driver not open
+ ioErr Ð36 Data does not match in read-verify mode
+ fnOpnErr -38 File not open
+ rfNumErr -51 Bad reference number
+ afpAccessDenied -5000 User does not have the correct access to
+ the file
+
+ __________
+
+ See also: FSWriteNoCache
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSWriteNoCache(
+ short refNum,
+ long * count,
+ const void * buffPtr);
+
+
+/*
+ The FSReadNoCache function writes any number of bytes to an open file
+ while asking the file system to bypass its cache mechanism.
+
+ refNum input: The file reference number of an open file.
+ count input: The number of bytes to write to the file.
+ output: The number of bytes actually written.
+ buffPtr input: A pointer to the data buffer from which the bytes are
+ to be written.
+
+ Result Codes
+ noErr 0 No error
+ writErr Ð20 Driver does not respond to write requests
+ badUnitErr Ð21 Driver reference number does not
+ match unit table
+ unitEmptyErr Ð22 Driver reference number specifies a
+ nil handle in unit table
+ abortErr Ð27 Request aborted by KillIO
+ notOpenErr Ð28 Driver not open
+ dskFulErr -34 Disk full
+ ioErr Ð36 Data does not match in read-verify mode
+ fnOpnErr -38 File not open
+ wPrErr -44 Hardware volume lock
+ fLckdErr -45 File is locked
+ vLckdErr -46 Software volume lock
+ rfNumErr -51 Bad reference number
+ wrPermErr -61 Read/write permission doesnÕt
+ allow writing
+ afpAccessDenied -5000 User does not have the correct access to
+ the file
+
+ __________
+
+ See also: FSReadNoCache
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSWriteVerify(
+ short refNum,
+ long * count,
+ const void * buffPtr);
+
+
+/*
+ The FSWriteVerify function writes any number of bytes to an open file
+ and then verifies that the data was actually written to the device.
+
+ refNum input: The file reference number of an open file.
+ count input: The number of bytes to write to the file.
+ output: The number of bytes actually written and verified.
+ buffPtr input: A pointer to the data buffer from which the bytes are
+ to be written.
+
+ Result Codes
+ noErr 0 No error
+ readErr Ð19 Driver does not respond to read requests
+ writErr Ð20 Driver does not respond to write requests
+ badUnitErr Ð21 Driver reference number does not
+ match unit table
+ unitEmptyErr Ð22 Driver reference number specifies a
+ nil handle in unit table
+ abortErr Ð27 Request aborted by KillIO
+ notOpenErr Ð28 Driver not open
+ dskFulErr -34 Disk full
+ ioErr Ð36 Data does not match in read-verify mode
+ fnOpnErr -38 File not open
+ eofErr -39 Logical end-of-file reached
+ posErr -40 Attempt to position mark before start
+ of file
+ wPrErr -44 Hardware volume lock
+ fLckdErr -45 File is locked
+ vLckdErr -46 Software volume lock
+ rfNumErr -51 Bad reference number
+ gfpErr -52 Error during GetFPos
+ wrPermErr -61 Read/write permission doesnÕt
+ allow writing
+ memFullErr -108 Not enough room in heap zone to allocate
+ verify buffer
+ afpAccessDenied -5000 User does not have the correct access to
+ the file
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+CopyFork(
+ short srcRefNum,
+ short dstRefNum,
+ void * copyBufferPtr,
+ long copyBufferSize);
+
+
+/*
+ The CopyFork function copies all data from the source fork to the
+ destination fork of open file forks and makes sure the destination EOF
+ is equal to the source EOF.
+
+ srcRefNum input: The source file reference number.
+ dstRefNum input: The destination file reference number.
+ copyBufferPtr input: Pointer to buffer to use during copy. The
+ buffer should be at least 512-bytes minimum.
+ The larger the buffer, the faster the copy.
+ copyBufferSize input: The size of the copy buffer.
+
+ Result Codes
+ noErr 0 No error
+ readErr Ð19 Driver does not respond to read requests
+ writErr Ð20 Driver does not respond to write requests
+ badUnitErr Ð21 Driver reference number does not
+ match unit table
+ unitEmptyErr Ð22 Driver reference number specifies a
+ nil handle in unit table
+ abortErr Ð27 Request aborted by KillIO
+ notOpenErr Ð28 Driver not open
+ dskFulErr -34 Disk full
+ ioErr Ð36 Data does not match in read-verify mode
+ fnOpnErr -38 File not open
+ wPrErr -44 Hardware volume lock
+ fLckdErr -45 File is locked
+ vLckdErr -46 Software volume lock
+ rfNumErr -51 Bad reference number
+ wrPermErr -61 Read/write permission doesnÕt
+ allow writing
+ afpAccessDenied -5000 User does not have the correct access to
+ the file
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetFileLocation(
+ short refNum,
+ short * vRefNum,
+ long * dirID,
+ StringPtr fileName);
+
+
+/*
+ The GetFileLocation function gets the location (volume reference number,
+ directory ID, and fileName) of an open file.
+
+ refNum input: The file reference number of an open file.
+ vRefNum output: The volume reference number.
+ dirID output: The parent directory ID.
+ fileName 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 Specified volume doesnÕt exist
+ fnOpnErr -38 File not open
+ rfNumErr -51 Reference number specifies nonexistent
+ access path
+
+ __________
+
+ See also: FSpGetFileLocation
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpGetFileLocation(
+ short refNum,
+ FSSpec * spec);
+
+
+/*
+ The FSpGetFileLocation function gets the location of an open file in
+ an FSSpec record.
+
+ refNum input: The file reference number of an open file.
+ spec output: FSSpec record containing the file name and location.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Specified volume doesnÕt exist
+ fnOpnErr -38 File not open
+ rfNumErr -51 Reference number specifies nonexistent
+ access path
+
+ __________
+
+ See also: GetFileLocation
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+CopyDirectoryAccess(
+ short srcVRefNum,
+ long srcDirID,
+ ConstStr255Param srcName,
+ short dstVRefNum,
+ long dstDirID,
+ ConstStr255Param dstName);
+
+
+/*
+ The CopyDirectoryAccess function copies the AFP directory access
+ privileges from one directory to another. Both directories must be on
+ the same file server, but not necessarily on the same server volume.
+
+ srcVRefNum input: Source volume specification.
+ srcDirID input: Source directory ID.
+ srcName input: Pointer to source directory name, or nil when
+ srcDirID specifies the directory.
+ dstVRefNum input: Destination volume specification.
+ dstDirID input: Destination directory ID.
+ dstName input: Pointer to destination directory name, or nil when
+ dstDirID specifies the directory.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ fnfErr -43 Directory not found
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 Volume doesn't support this function
+ afpAccessDenied -5000 User does not have the correct access
+ to the directory
+ afpObjectTypeErr -5025 Object is a file, not a directory
+
+ __________
+
+ See also: FSpCopyDirectoryAccess
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpCopyDirectoryAccess(
+ const FSSpec * srcSpec,
+ const FSSpec * dstSpec);
+
+
+/*
+ The FSpCopyDirectoryAccess function copies the AFP directory access
+ privileges from one directory to another. Both directories must be on
+ the same file server, but not necessarily on the same server volume.
+
+ srcSpec input: An FSSpec record specifying the source directory.
+ dstSpec input: An FSSpec record specifying the destination directory.
+
+ Result Codes
+ noErr 0 No error
+ nsvErr -35 Volume not found
+ fnfErr -43 Directory not found
+ vLckdErr -46 Volume is locked or read-only
+ paramErr -50 Volume doesn't support this function
+ afpAccessDenied -5000 User does not have the correct access
+ to the directory
+ afpObjectTypeErr -5025 Object is a file, not a directory
+
+ __________
+
+ See also: CopyDirectoryAccess
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+HMoveRenameCompat(
+ short vRefNum,
+ long srcDirID,
+ ConstStr255Param srcName,
+ long dstDirID,
+ ConstStr255Param dstpathName,
+ ConstStr255Param copyName);
+
+
+/*
+ The HMoveRenameCompat function moves a file or directory and optionally
+ renames it. The source and destination locations must be on the same
+ volume. This routine works even if the volume doesn't support MoveRename.
+
+ 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
+ dirFulErr -33 File directory full
+ dskFulErr -34 Disk is full
+ nsvErr -35 Volume not found
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename or attempt to move into
+ a file
+ fnfErr -43 Source file or directory not found
+ wPrErr -44 Hardware volume lock
+ fLckdErr -45 File is locked
+ vLckdErr -46 Destination volume is read-only
+ fBsyErr -47 File busy, directory not empty, or
+ working directory control block open
+ dupFNErr -48 Destination already exists
+ paramErr -50 Volume doesn't support this function,
+ no default volume, or source and
+ volOfflinErr -53 Volume is offline
+ fsRnErr -59 Problem during rename
+ dirNFErr -120 Directory not found or incomplete pathname
+ badMovErr -122 Attempted to move directory into
+ offspring
+ wrgVolTypErr -123 Not an HFS volume (it's a MFS volume)
+ notAFileErr -1302 The pathname is nil, the pathname
+ is empty, or the pathname cannot refer
+ to a filename
+ diffVolErr -1303 Files on different volumes
+ afpAccessDenied -5000 The user does not have the right to
+ move the file or directory
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+ afpSameObjectErr -5038 Source and destination files are the same
+
+ __________
+
+ See also: FSpMoveRenameCompat
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+FSpMoveRenameCompat(
+ const FSSpec * srcSpec,
+ const FSSpec * dstSpec,
+ ConstStr255Param copyName);
+
+
+/*
+ The FSpMoveRenameCompat function moves a file or directory and optionally
+ renames it. The source and destination locations must be on the same
+ volume. This routine works even if the volume doesn't support MoveRename.
+
+ 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
+ dirFulErr -33 File directory full
+ dskFulErr -34 Disk is full
+ nsvErr -35 Volume not found
+ ioErr -36 I/O error
+ bdNamErr -37 Bad filename or attempt to move into
+ a file
+ fnfErr -43 Source file or directory not found
+ wPrErr -44 Hardware volume lock
+ fLckdErr -45 File is locked
+ vLckdErr -46 Destination volume is read-only
+ fBsyErr -47 File busy, directory not empty, or
+ working directory control block open
+ dupFNErr -48 Destination already exists
+ paramErr -50 Volume doesn't support this function,
+ no default volume, or source and
+ volOfflinErr -53 Volume is offline
+ fsRnErr -59 Problem during rename
+ dirNFErr -120 Directory not found or incomplete pathname
+ badMovErr -122 Attempted to move directory into
+ offspring
+ wrgVolTypErr -123 Not an HFS volume (it's a MFS volume)
+ notAFileErr -1302 The pathname is nil, the pathname
+ is empty, or the pathname cannot refer
+ to a filename
+ diffVolErr -1303 Files on different volumes
+ afpAccessDenied -5000 The user does not have the right to
+ move the file or directory
+ afpObjectTypeErr -5025 Directory not found or incomplete pathname
+ afpSameObjectErr -5038 Source and destination files are the same
+
+ __________
+
+ See also: HMoveRenameCompat
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+BuildAFPVolMountInfo(
+ short flags,
+ char nbpInterval,
+ char nbpCount,
+ short uamType,
+ Str32 zoneName,
+ Str31 serverName,
+ Str27 volName,
+ Str31 userName,
+ Str8 userPassword,
+ Str8 volPassword,
+ AFPVolMountInfoPtr * afpInfoPtr);
+
+
+/*
+ The BuildAFPVolMountInfo function allocates and initializes the fields
+ of an AFPVolMountInfo record before using that record to call
+ the VolumeMount function.
+
+ flags input: The AFP mounting flags. 0 = normal mount;
+ set bit 0 to inhibit greeting messages.
+ nbpInterval input: The interval used for VolumeMount's
+ NBP Lookup call. 7 is a good choice.
+ nbpCount input: The retry count used for VolumeMount's
+ NBP Lookup call. 5 is a good choice.
+ uamType input: The user authentication method to use.
+ zoneName input: The AppleTalk zone name of the server.
+ serverName input: The AFP server name.
+ volName input: The AFP volume name.
+ userName input: The user name (zero length Pascal string for
+ guest).
+ userPassWord input: The user password (zero length Pascal string
+ if no user password)
+ volPassWord input: The volume password (zero length Pascal string
+ if no volume password)
+ afpInfoPtr output: A pointer to the newly created and initialized
+ AFPVolMountInfo record. If the function fails to
+ create an AFPVolMountInfo record, it sets
+ afpInfoPtr to NULL and the function result is
+ memFullErr. Your program is responsible
+ for disposing of this pointer when it is finished
+ with it.
+
+ Result Codes
+ noErr 0 No error
+ memFullErr -108 memory full error
+
+ __________
+
+ Also see: GetVolMountInfoSize, GetVolMountInfo, VolumeMount,
+ RetrieveAFPVolMountInfo, BuildAFPXVolMountInfo,
+ RetrieveAFPXVolMountInfo
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+RetrieveAFPVolMountInfo(
+ AFPVolMountInfoPtr afpInfoPtr,
+ short * flags,
+ short * uamType,
+ StringPtr zoneName,
+ StringPtr serverName,
+ StringPtr volName,
+ StringPtr userName);
+
+
+/*
+ The RetrieveAFPVolMountInfo function retrieves the AFP mounting
+ information returned in an AFPVolMountInfo record by the
+ GetVolMountInfo function.
+
+ afpInfoPtr input: Pointer to AFPVolMountInfo record that contains
+ the AFP mounting information.
+ flags output: The AFP mounting flags.
+ uamType output: The user authentication method used.
+ zoneName output: The AppleTalk zone name of the server.
+ serverName output: The AFP server name.
+ volName output: The AFP volume name.
+ userName output: The user name (zero length Pascal string for
+ guest).
+
+ Result Codes
+ noErr 0 No error
+ paramErr -50 media field in AFP mounting information
+ was not AppleShareMediaType
+
+ __________
+
+ Also see: GetVolMountInfoSize, GetVolMountInfo, VolumeMount,
+ BuildAFPVolMountInfo, BuildAFPXVolMountInfo,
+ RetrieveAFPXVolMountInfo
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+BuildAFPXVolMountInfo(
+ short flags,
+ char nbpInterval,
+ char nbpCount,
+ short uamType,
+ Str32 zoneName,
+ Str31 serverName,
+ Str27 volName,
+ Str31 userName,
+ Str8 userPassword,
+ Str8 volPassword,
+ Str32 uamName,
+ unsigned long alternateAddressLength,
+ void * alternateAddress,
+ AFPXVolMountInfoPtr * afpXInfoPtr);
+
+
+/*
+ The BuildAFPXVolMountInfo function allocates and initializes the fields
+ of an AFPXVolMountInfo record before using that record to call
+ the VolumeMount function.
+
+ flags input: The AFP mounting flags.
+ nbpInterval input: The interval used for VolumeMount's
+ NBP Lookup call. 7 is a good choice.
+ nbpCount input: The retry count used for VolumeMount's
+ NBP Lookup call. 5 is a good choice.
+ uamType input: The user authentication method to use.
+ zoneName input: The AppleTalk zone name of the server.
+ serverName input: The AFP server name.
+ volName input: The AFP volume name.
+ userName input: The user name (zero length Pascal string
+ for guest).
+ userPassWord input: The user password (zero length Pascal
+ string if no user password)
+ volPassWord input: The volume password (zero length Pascal
+ string if no volume password)
+ uamName input: The User Authentication Method name.
+ alternateAddressLength input: Length of alternateAddress data.
+ alternateAddress input The AFPAlternateAddress (variable length)
+ afpXInfoPtr output: A pointer to the newly created and
+ initialized AFPVolMountInfo record.
+ If the function fails to create an
+ AFPVolMountInfo record, it sets
+ afpInfoPtr to NULL and the function
+ result is memFullErr. Your program is
+ responsible for disposing of this pointer
+ when it is finished with it.
+
+ Result Codes
+ noErr 0 No error
+ memFullErr -108 memory full error
+
+ __________
+
+ Also see: GetVolMountInfoSize, GetVolMountInfo, VolumeMount,
+ BuildAFPVolMountInfo, RetrieveAFPVolMountInfo,
+ RetrieveAFPXVolMountInfo
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+RetrieveAFPXVolMountInfo(
+ AFPXVolMountInfoPtr afpXInfoPtr,
+ short * flags,
+ short * uamType,
+ StringPtr zoneName,
+ StringPtr serverName,
+ StringPtr volName,
+ StringPtr userName,
+ StringPtr uamName,
+ unsigned long * alternateAddressLength,
+ AFPAlternateAddress ** alternateAddress);
+
+
+/*
+ The RetrieveAFPXVolMountInfo function retrieves the AFP mounting
+ information returned in an AFPXVolMountInfo record by the
+ GetVolMountInfo function.
+
+ afpXInfoPtr input: Pointer to AFPXVolMountInfo record that
+ contains the AFP mounting information.
+ flags output: The AFP mounting flags.
+ uamType output: The user authentication method used.
+ zoneName output: The AppleTalk zone name of the server.
+ serverName output: The AFP server name.
+ volName output: The AFP volume name.
+ userName output: The user name (zero length Pascal
+ string for guest).
+ uamName output: The User Authentication Method name.
+ alternateAddressLength output: Length of alternateAddress data returned.
+ alternateAddress: output: A pointer to the newly created and
+ AFPAlternateAddress record (a variable
+ length record). If the function fails to
+ create an AFPAlternateAddress record,
+ it sets alternateAddress to NULL and the
+ function result is memFullErr. Your
+ program is responsible for disposing of
+ this pointer when it is finished with it.
+
+ Result Codes
+ noErr 0 No error
+ paramErr -50 media field in AFP mounting information
+ was not AppleShareMediaType
+ memFullErr -108 memory full error
+
+ __________
+
+ Also see: GetVolMountInfoSize, GetVolMountInfo, VolumeMount,
+ BuildAFPVolMountInfo, RetrieveAFXVolMountInfo,
+ BuildAFPXVolMountInfo
+*/
+
+/*****************************************************************************/
+
+EXTERN_API( OSErr )
+GetUGEntries(
+ short objType,
+ UGEntryPtr entries,
+ long reqEntryCount,
+ long * actEntryCount,
+ long * objID);
+
+
+/*
+ The GetUGEntries functions retrieves a list of user or group entries
+ from the local file server.
+
+ objType input: The object type: -1 = group; 0 = user
+ UGEntries input: Pointer to array of UGEntry records where the list
+ is returned.
+ reqEntryCount input: The number of elements in the UGEntries array.
+ actEntryCount output: The number of entries returned.
+ objID input: The current index position. Set to 0 to start with
+ the first entry.
+ output: The index position to get the next entry. Pass this
+ value the next time you call GetUGEntries to start
+ where you left off.
+
+ Result Codes
+ noErr 0 No error
+ fnfErr -43 No more users or groups
+ paramErr -50 Function not supported; or, ioObjID is
+ negative
+
+ __________
+
+ Also see: GetUGEntry
+*/
+
+/*****************************************************************************/
+
+
+
+#include "OptimizationEnd.h"
+
+#if PRAGMA_STRUCT_ALIGN
+ #pragma options align=reset
+#elif PRAGMA_STRUCT_PACKPUSH
+ #pragma pack(pop)
+#elif PRAGMA_STRUCT_PACK
+ #pragma pack()
+#endif
+
+#ifdef PRAGMA_IMPORT_OFF
+#pragma import off
+#elif PRAGMA_IMPORT
+#pragma import reset
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MOREFILESEXTRAS__ */
+