/*
**	Apple Macintosh Developer Technical Support
**
**	The long lost high-level and FSSpec File Manager functions.
**
**	by Jim Luther, Apple Developer Technical Support Emeritus
**
**	File:		MoreFiles.h
**
**	Copyright © 1992-1999 Apple Computer, Inc.
**	All rights reserved.
**
**	You may incorporate this sample code into your applications without
**	restriction, though the sample code has been provided "AS IS" and the
**	responsibility for its operation is 100% yours.  However, what you are
**	not permitted to do is to redistribute the source as "DSC Sample Code"
**	after having made changes. If you're going to re-distribute the source,
**	we require that you make it clear in the source that the code was
**	descended from Apple Sample Code, but that you've made changes.
*/

#ifndef __MOREFILES__
#define __MOREFILES__

#include <Types.h>
#include <Files.h>

#include "Optimization.h"

#ifdef __cplusplus
extern "C" {
#endif

/*****************************************************************************/

pascal	OSErr	HGetVolParms(ConstStr255Param volName,
							 short vRefNum,
							 GetVolParmsInfoBuffer *volParmsInfo,
							 long *infoSize);
/*	¦ Determine the characteristics of a volume.
	The HGetVolParms function returns information about the characteristics
	of a volume. A result of paramErr usually just means the volume doesn't
	support PBHGetVolParms and the feature you were going to check
	for isn't available.

	volName			input:	A pointer to the name of a mounted volume
							or nil.
	vRefNum			input:	Volume specification.
	volParmsInfo	input:	Pointer to GetVolParmsInfoBuffer where the
							volume attributes information is returned.
					output:	Atributes information.
	infoSize		input:	Size of buffer pointed to by volParmsInfo.
					output: Size of data actually returned.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		paramErr			-50		Volume doesn't support this function
	
	__________
	
	Also see the macros for checking attribute bits in MoreFilesExtras.h
*/

/*****************************************************************************/

pascal	OSErr	HCreateMinimum(short vRefNum,
							   long dirID,
							   ConstStr255Param fileName);
/*	¦ Create a new file with no creator or file type.
	The HCreateMinimum function creates a new file without attempting to set
	the creator and file type of the new file.  This function is needed to
	create a file in an AppleShare "drop box" where the user can make
	changes, but cannot see folder or files.
	
	vRefNum		input:	Volume specification.
	dirID		input:	Directory ID.
	fileName	input:	The name of the new file.
	
	Result Codes
		noErr				0		No error
		dirFulErr			-33		File directory full
		dskFulErr			-34		Disk is full
		nsvErr				-35		No such volume
		ioErr				-36		I/O error
		bdNamErr			-37		Bad filename
		fnfErr				-43		Directory not found or incomplete pathname
		wPrErr				-44		Hardware volume lock
		vLckdErr			-46		Software volume lock
		dupFNErr			-48		Duplicate filename and version
		dirNFErrdirNFErr	-120	Directory not found or incomplete pathname
		afpAccessDenied		-5000	User does not have the correct access
		afpObjectTypeErr	-5025	A directory exists with that name
	
	__________
	
	Also see:	FSpCreateMinimum
*/

/*****************************************************************************/

pascal	OSErr	FSpCreateMinimum(const FSSpec *spec);
/*	¦ Create a new file with no creator or file type.
	The FSpCreateMinimum function creates a new file without attempting to set 
	the the creator and file type of the new file.  This function is needed to
	create a file in an AppleShare "dropbox" where the user can make
	changes, but cannot see folder or files. 
	
	spec		input:	An FSSpec record specifying the file to create.
	
	Result Codes
		noErr				0		No error
		dirFulErr			-33		File directory full
		dskFulErr			-34		Disk is full
		nsvErr				-35		No such volume
		ioErr				-36		I/O error
		bdNamErr			-37		Bad filename
		fnfErr				-43		Directory not found or incomplete pathname
		wPrErr				-44		Hardware volume lock
		vLckdErr			-46		Software volume lock
		dupFNErr			-48		Duplicate filename and version
		dirNFErrdirNFErr	-120	Directory not found or incomplete pathname
		afpAccessDenied		-5000	User does not have the correct access
		afpObjectTypeErr	-5025	A directory exists with that name
	
	__________
	
	Also see:	HCreateMinimum
*/

/*****************************************************************************/

pascal	OSErr	ExchangeFiles(short vRefNum,
							  long srcDirID,
							  ConstStr255Param srcName,
							  long dstDirID,
							  ConstStr255Param dstName);
/*	¦ Exchange the data stored in two files on the same volume.
	The ExchangeFiles function swaps the data in two files on the same
	volume by changing some of the information in the volume catalog and,
	if the files are open, in the file control blocks.

	vRefNum		input:	Volume specification.
	srcDirID	input:	Source directory ID.
	srcName		input:	Source file name.
	dstDirID	input:	Destination directory ID.
	dstName		input:	Destination file name.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		ioErr				-36		I/O error
		fnfErr				-43		File not found
		fLckdErr			-45		File is locked
		vLckdErr			-46		Volume is locked or read-only
		paramErr			-50		Function not supported by volume
		volOfflinErr		-53		Volume is offline
		wrgVolTypErr		-123	Not an HFS volume
		diffVolErr			-1303	Files on different volumes
		afpAccessDenied		-5000	User does not have the correct access
		afpObjectTypeErr	-5025	Object is a directory, not a file
		afpSameObjectErr	-5038	Source and destination are the same

	__________
	
	Also see:	FSpExchangeFilesCompat
*/

/*****************************************************************************/

pascal	OSErr	ResolveFileIDRef(ConstStr255Param volName,
								 short vRefNum,
								 long fileID,
								 long *parID,
								 StringPtr fileName);
/*	¦ Retrieve the location of the file with the specified file ID reference.
	The ResolveFileIDRef function returns the filename and parent directory ID
	of the file with the specified file ID reference.
	
	volName	input:	A pointer to the name of a mounted volume
					or nil.
	vRefNum	input:	Volume specification.
	fileID	input:	The file ID reference.
	parID	output:	The parent directory ID of the file.
	name	input:	Points to a buffer (minimum Str63) where the filename
					is to be returned or must be nil.
			output:	The filename.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		ioErr				-36		I/O error
		fnfErr				-43		File not found
		paramErr			-50		Function not supported by volume
		volOfflinErr		-53		Volume is offline
		extFSErr			-58		External file system error - no file
									system claimed this call.
		wrgVolTypErr		-123	Not an HFS volume
		fidNotFoundErr		-1300	File ID reference not found
		notAFileErr			-1302	Specified file is a directory
		afpAccessDenied		-5000	User does not have the correct access
		afpObjectTypeErr	-5025	Specified file is a directory
		afpIDNotFound		-5034	File ID reference not found
		afpBadIDErr			-5039	File ID reference not found
	
	__________
	
	Also see:	FSpResolveFileIDRef, CreateFileIDRef, FSpCreateFileIDRef,
				DeleteFileIDRef
*/

/*****************************************************************************/

pascal	OSErr	FSpResolveFileIDRef(ConstStr255Param volName,
									short vRefNum,
									long fileID,
									FSSpecPtr spec);
/*	¦ Retrieve the location of the file with the specified file ID reference.
	The FSpResolveFileIDRef function fills in an FSSpec with the location
	of the file with the specified file ID reference.
	
	volName	input:	A pointer to the name of a mounted volume
					or nil.
	vRefNum	input:	Volume specification.
	fileID	input:	The file ID reference.
	spec	input:	A pointer to a FSSpec record.
			output:	A file system specification to be filled in by
					FSpResolveFileIDRef.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		ioErr				-36		I/O error
		fnfErr				-43		File not found
		paramErr			-50		Function not supported by volume or
									no default volume
		volOfflinErr		-53		Volume is offline
		extFSErr			-58		External file system error - no file
									system claimed this call.
		wrgVolTypErr		-123	Not an HFS volume
		fidNotFoundErr		-1300	File ID reference not found
		notAFileErr			-1302	Specified file is a directory
		afpAccessDenied		-5000	User does not have the correct access
		afpObjectTypeErr	-5025	Specified file is a directory
		afpIDNotFound		-5034	File ID reference not found
		afpBadIDErr			-5039	File ID reference not found
	
	__________
	
	Also see:	ResolveFileIDRef, CreateFileIDRef, FSpCreateFileIDRef,
				DeleteFileIDRef
*/

/*****************************************************************************/

pascal	OSErr	CreateFileIDRef(short vRefNum,
								long parID,
								ConstStr255Param fileName,
								long *fileID);
/*	¦ Establish a file ID reference for a file.
	The CreateFileIDRef function creates a file ID reference for the
	specified file, or if a file ID reference already exists, supplies
	the file ID reference and returns the result code fidExists or afpIDExists.

	vRefNum		input:	Volume specification.
	parID		input:	Directory ID.
	fileName	input:	The name of the file.
	fileID		output:	The file ID reference (if result is noErr,
						fidExists, or afpIDExists).
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		ioErr				-36		I/O error
		fnfErr				-43		File not found
		wPrErr				-44		Hardware volume lock
		vLckdErr			-46		Software volume lock
		paramErr			-50		Function not supported by volume
		volOfflinErr		-53		Volume is offline
		extFSErr			-58		External file system error - no file
									system claimed this call.
		wrgVolTypErr		-123	Not an HFS volume
		fidExists			-1301	File ID reference already exists
		notAFileErrn		-1302	Specified file is a directory
		afpAccessDenied		-5000	User does not have the correct access
		afpObjectTypeErr	-5025	Specified file is a directory
		afpIDExists			-5035	File ID reference already exists
	
	__________
	
	Also see:	FSpResolveFileIDRef, ResolveFileIDRef, FSpCreateFileIDRef,
				DeleteFileIDRef
*/

/*****************************************************************************/

pascal	OSErr	FSpCreateFileIDRef(const FSSpec *spec,
								   long *fileID);
/*	¦ Establish a file ID reference for a file.
	The FSpCreateFileIDRef function creates a file ID reference for the
	specified file, or if a file ID reference already exists, supplies
	the file ID reference and returns the result code fidExists or afpIDExists.

	spec		input:	An FSSpec record specifying the file.
	fileID		output:	The file ID reference (if result is noErr,
						fidExists, or afpIDExists).
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		ioErr				-36		I/O error
		fnfErr				-43		File not found
		wPrErr				-44		Hardware volume lock
		vLckdErr			-46		Software volume lock
		paramErr			-50		Function not supported by volume
		volOfflinErr		-53		Volume is offline
		extFSErr			-58		External file system error - no file
									system claimed this call.
		wrgVolTypErr		-123	Not an HFS volume
		fidExists			-1301	File ID reference already exists
		notAFileErrn		-1302	Specified file is a directory
		afpAccessDenied		-5000	User does not have the correct access
		afpObjectTypeErr	-5025	Specified file is a directory
		afpIDExists			-5035	File ID reference already exists
	
	__________
	
	Also see:	FSpResolveFileIDRef, ResolveFileIDRef, CreateFileIDRef,
				DeleteFileIDRef
*/

/*****************************************************************************/

pascal	OSErr	DeleteFileIDRef(ConstStr255Param volName,
								short vRefNum,
								long fileID);
/*	¦ Delete a file ID reference.
	The DeleteFileIDRef function deletes a file ID reference.

	volName	input:	A pointer to the name of a mounted volume
					or nil.
	vRefNum	input:	Volume specification.
	fileID	input:	The file ID reference.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		ioErr				-36		I/O error
		fnfErr				-43		File not found
		wPrErr				-44		Hardware volume lock
		vLckdErr			-46		Software volume lock
		paramErr			-50		Function not supported by volume
		volOfflinErr		-53		Volume is offline
		extFSErr			-58		External file system error - no file
									system claimed this call.
		wrgVolTypErr		-123	Function is not supported by volume
		fidNotFoundErr		-1300	File ID reference not found
		afpAccessDenied		-5000	User does not have the correct access
		afpObjectTypeErr	-5025	Specified file is a directory
		afpIDNotFound		-5034	File ID reference not found
	
	__________
	
	Also see:	FSpResolveFileIDRef, ResolveFileIDRef, CreateFileIDRef,
				FSpCreateFileIDRef
*/

/*****************************************************************************/

pascal	OSErr	FlushFile(short refNum);
/*	¦ Write the contents of a file's access path buffer (the fork data).
	The FlushFile function writes the contents of a file's access path
	buffer (the fork data) to the volume. Note: some of the file's catalog
	information stored on the volume may not be correct until FlushVol
	is called.

	refNum	input:	The file reference number of an open file.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		ioErr 				-36		I/O error
		fnOpnErr			-38		File not open
		fnfErr				-43		File not found
		rfNumErr			-51		Bad reference number
		extFSErr			-58		External file system error - no file
									system claimed this call.
*/

/*****************************************************************************/

pascal	OSErr	LockRange(short refNum,
						  long rangeLength,
						  long rangeStart);
/*	¦ Lock a portion of a file.
	The LockRange function locks (denies access to) a portion of a file
	that was opened with shared read/write permission.

	refNum		input:	The file reference number of an open file.
	rangeLength	input:	The number of bytes in the range.
	rangeStart	input:	The starting byte in the range to lock.
	
	Result Codes
		noErr				0		No error
		ioErr				-36		I/O error
		fnOpnErr			-38		File not open
		eofErr				-39		Logical end-of-file reached
		fLckdErr			-45		File is locked by another user
		paramErr			-50		Negative ioReqCount
		rfNumErr			-51		Bad reference number
		extFSErr			-58		External file system error - no file
									system claimed this call.
		volGoneErr			-124	Server volume has been disconnected
		afpNoMoreLocks		-5015	No more ranges can be locked
		afpRangeOverlap		-5021	Part of range is already locked

	__________
	
	Also see:	UnlockRange
*/

/*****************************************************************************/

pascal	OSErr	UnlockRange(short refNum,
							long rangeLength,
							long rangeStart);
/*	¦ Unlock a previously locked range.
	The UnlockRange function unlocks (allows access to) a previously locked
	portion of a file that was opened with shared read/write permission.

	refNum		input:	The file reference number of an open file.
	rangeLength	input:	The number of bytes in the range.
	rangeStart	input:	The starting byte in the range to unlock.
	
	Result Codes
		noErr				0		No error
		ioErr				-36		I/O error
		fnOpnErr			-38		File not open
		eofErr				-39		Logical end-of-file reached
		paramErr			-50		Negative ioReqCount
		rfNumErr			-51		Bad reference number
		extFSErr			-58		External file system error - no file
									system claimed this call.
		volGoneErr			-124	Server volume has been disconnected
		afpRangeNotLocked	-5020	Specified range was not locked

	__________
	
	Also see:	LockRange
*/

/*****************************************************************************/

pascal	OSErr	GetForeignPrivs(short vRefNum,
								long dirID,
								ConstStr255Param name,
								void *foreignPrivBuffer,
								long *foreignPrivSize,
								long *foreignPrivInfo1,
								long *foreignPrivInfo2,
								long *foreignPrivInfo3,
								long *foreignPrivInfo4);
/*	¦ Retrieve the native access-control information.
	The GetForeignPrivs function retrieves the native access-control
	information for a file or directory stored on a volume managed by
	a foreign file system.
	
	vRefNum				input:	Volume specification.
	dirID				input:	Directory ID.
	name				input:	Pointer to object name, or nil when dirID
								specifies a directory that's the object.
	foreignPrivBuffer	input:	Pointer to buffer where the privilege
								information is returned.
						output:	Privilege information.
	foreignPrivSize		input:	Size of buffer pointed to by
								foreignPrivBuffer.
						output: Amount of buffer actually used.
	foreignPrivInfo1	output:	Information specific to privilege model.
	foreignPrivInfo2	output:	Information specific to privilege model.
	foreignPrivInfo3	output:	Information specific to privilege model.
	foreignPrivInfo4	output:	Information specific to privilege model.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		paramErr			-50		Volume is HFS or MFS (that is, it has
									no foreign privilege model), or foreign
									volume does not support these calls
	
	__________
	
	Also see:	FSpGetForeignPrivs, SetForeignPrivs, FSpSetForeignPrivs
*/

/*****************************************************************************/

pascal	OSErr	FSpGetForeignPrivs(const FSSpec *spec,
								   void *foreignPrivBuffer,
								   long *foreignPrivSize,
								   long *foreignPrivInfo1,
								   long *foreignPrivInfo2,
								   long *foreignPrivInfo3,
								   long *foreignPrivInfo4);
/*	¦ Retrieve the native access-control information.
	The FSpGetForeignPrivs function retrieves the native access-control
	information for a file or directory stored on a volume managed by
	a foreign file system.
	
	spec				input:	An FSSpec record specifying the object.
	foreignPrivBuffer	input:	Pointer to buffer where the privilege
								information is returned.
						output:	Privilege information.
	foreignPrivSize		input:	Size of buffer pointed to by
								foreignPrivBuffer.
						output: Amount of buffer actually used.
	foreignPrivInfo1	output:	Information specific to privilege model.
	foreignPrivInfo2	output:	Information specific to privilege model.
	foreignPrivInfo3	output:	Information specific to privilege model.
	foreignPrivInfo4	output:	Information specific to privilege model.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		paramErr			-50		Volume is HFS or MFS (that is, it has
									no foreign privilege model), or foreign
									volume does not support these calls
	
	__________
	
	Also see:	GetForeignPrivs, SetForeignPrivs, FSpSetForeignPrivs
*/

/*****************************************************************************/

pascal	OSErr	SetForeignPrivs(short vRefNum,
								long dirID,
								ConstStr255Param name,
								const void *foreignPrivBuffer,
								long *foreignPrivSize,
								long foreignPrivInfo1,
								long foreignPrivInfo2,
								long foreignPrivInfo3,
								long foreignPrivInfo4);
/*	¦ Change the native access-control information.
	The SetForeignPrivs function changes the native access-control
	information for a file or directory stored on a volume managed by
	a foreign file system.
	
	vRefNum				input:	Volume specification.
	dirID				input:	Directory ID.
	name				input:	Pointer to object name, or nil when dirID
								specifies a directory that's the object.
	foreignPrivBuffer	input:	Pointer to privilege information buffer.
	foreignPrivSize		input:	Size of buffer pointed to by
								foreignPrivBuffer.
						output: Amount of buffer actually used.
	foreignPrivInfo1	input:	Information specific to privilege model.
	foreignPrivInfo2	input:	Information specific to privilege model.
	foreignPrivInfo3	input:	Information specific to privilege model.
	foreignPrivInfo4	input:	Information specific to privilege model.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		paramErr			-50		Volume is HFS or MFS (that is, it has
									no foreign privilege model), or foreign
									volume does not support these calls
	
	__________
	
	Also see:	GetForeignPrivs, FSpGetForeignPrivs, FSpSetForeignPrivs
*/

/*****************************************************************************/

pascal	OSErr	FSpSetForeignPrivs(const FSSpec *spec,
								   const void *foreignPrivBuffer,
								   long *foreignPrivSize,
								   long foreignPrivInfo1,
								   long foreignPrivInfo2,
								   long foreignPrivInfo3,
								   long foreignPrivInfo4);
/*	¦ Change the native access-control information.
	The FSpSetForeignPrivs function changes the native access-control
	information for a file or directory stored on a volume managed by
	a foreign file system.
	
	spec				input:	An FSSpec record specifying the object.
	foreignPrivBuffer	input:	Pointer to privilege information buffer.
	foreignPrivSize		input:	Size of buffer pointed to by
								foreignPrivBuffer.
						output: Amount of buffer actually used.
	foreignPrivInfo1	input:	Information specific to privilege model.
	foreignPrivInfo2	input:	Information specific to privilege model.
	foreignPrivInfo3	input:	Information specific to privilege model.
	foreignPrivInfo4	input:	Information specific to privilege model.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		paramErr			-50		Volume is HFS or MFS (that is, it has
									no foreign privilege model), or foreign
									volume does not support these calls
	
	__________
	
	Also see:	GetForeignPrivs, FSpGetForeignPrivs, SetForeignPrivs
*/

/*****************************************************************************/

pascal	OSErr	HGetLogInInfo(ConstStr255Param volName,
							  short vRefNum,
							  short *loginMethod,
							  StringPtr userName);
/*	¦ Get the login method and user name used to log on to a shared volume.
	The HGetLogInInfo function retrieves the login method and user name
	used to log on to a particular shared volume.
	
	volName		input:	A pointer to the name of a mounted volume
						or nil.
	vRefNum		input:	The volume reference number.
	loginMethod	output:	The login method used (kNoUserAuthentication,
						kPassword, kEncryptPassword, or
						kTwoWayEncryptPassword).
	userName	input:	Points to a buffer (minimum Str31) where the user
						name is to be returned or must be nil.
				output:	The user name.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Specified volume doesnŐt exist
		paramErr			-50		Function not supported by volume
	
	__________
	
	Also see:	HGetDirAccess, FSpGetDirAccess, HSetDirAccess,
				FSpSetDirAccess, HMapName, HMapID
*/

/*****************************************************************************/

pascal	OSErr	HGetDirAccess(short vRefNum,
							  long dirID,
							  ConstStr255Param name,
							  long *ownerID,
							  long *groupID,
							  long *accessRights);
/*	¦ Get a directory's access control information on a shared volume.
	The HGetDirAccess function retrieves the directory access control
	information for a directory on a shared volume.
	
	vRefNum			input:	Volume specification.
	dirID			input:	Directory ID.
	name			input:	Pointer to directory name, or nil if dirID
							specifies the directory.
	ownerID			output:	The directory's owner ID.
	groupID			output:	The directory's group ID or
							0 if no group affiliation.
	accessRights	output:	The directory's access rights.
	
	Result Codes
		noErr				0		No error
		fnfErr				-43		Directory not found
		paramErr			-50		Function not supported by volume
		afpAccessDenied		-5000	User does not have the correct access
									to the directory
	
	__________
	
	Also see:	HGetLogInInfo, FSpGetDirAccess, HSetDirAccess,
				FSpSetDirAccess, HMapName, HMapID
*/

/*****************************************************************************/

pascal	OSErr	FSpGetDirAccess(const FSSpec *spec,
								long *ownerID,
								long *groupID,
								long *accessRights);
/*	¦ Get a directory's access control information on a shared volume.
	The FSpGetDirAccess function retrieves the directory access control
	information for a directory on a shared volume.
	
	spec			input:	An FSSpec record specifying the directory.
	ownerID			output:	The directory's owner ID.
	groupID			output:	The directory's group ID or
							0 if no group affiliation.
	accessRights	output:	The directory's access rights.
	
	Result Codes
		noErr				0		No error
		fnfErr				-43		Directory not found
		paramErr			-50		Function not supported by volume
		afpAccessDenied		-5000	User does not have the correct access
									to the directory
	
	__________
	
	Also see:	HGetLogInInfo, HGetDirAccess, HSetDirAccess,
				FSpSetDirAccess, HMapName, HMapID
*/

/*****************************************************************************/

pascal	OSErr	HSetDirAccess(short vRefNum,
							  long dirID,
							  ConstStr255Param name,
							  long ownerID,
							  long groupID,
							  long accessRights);
/*	¦ Set a directory's access control information on a shared volume.
	The HSetDirAccess function changes the directory access control
	information for a directory on a shared volume. You must own a directory
	to change its access control information.
	
	vRefNum			input:	Volume specification.
	dirID			input:	Directory ID.
	name			input:	Pointer to directory name, or nil if dirID
							specifies the directory.
	ownerID			input:	The directory's owner ID.
	groupID			input:	The directory's group ID or
							0 if no group affiliation.
	accessRights	input:	The directory's access rights.
	
	Result Codes
		noErr				0		No error
		fnfErr				-43		Directory not found
		vLckdErr			-46		Volume is locked or read-only
		paramErr			-50		Parameter error
		afpAccessDenied		-5000	User does not have the correct access
									to the directory
		afpObjectTypeErr	-5025	Object is a file, not a directory
	
	__________
	
	Also see:	HGetLogInInfo, HGetDirAccess, FSpGetDirAccess,
				FSpSetDirAccess, HMapName, HMapID
*/

/*****************************************************************************/

pascal	OSErr	FSpSetDirAccess(const FSSpec *spec,
								long ownerID,
								long groupID,
								long accessRights);
/*	¦ Set a directory's access control information on a shared volume.
	The FSpSetDirAccess function changes the directory access control
	information for a directory on a shared volume. You must own a directory
	to change its access control information.
	
	spec			input:	An FSSpec record specifying the directory.
	ownerID			input:	The directory's owner ID.
	groupID			input:	The directory's group ID or
							0 if no group affiliation.
	accessRights	input:	The directory's access rights.
	
	Result Codes
		noErr				0		No error
		fnfErr				-43		Directory not found
		vLckdErr			-46		Volume is locked or read-only
		paramErr			-50		Parameter error
		afpAccessDenied		-5000	User does not have the correct access
									to the directory
		afpObjectTypeErr	-5025	Object is a file, not a directory
	
	__________
	
	Also see:	HGetLogInInfo, HGetDirAccess, FSpGetDirAccess, HSetDirAccess,
				HMapName, HMapID
*/

/*****************************************************************************/

pascal	OSErr	HMapID(ConstStr255Param volName,
					   short vRefNum,
					   long ugID,
					   short objType,
					   StringPtr name);
/*	¦ Map a user or group ID to a user or group name.
	The HMapID function determines the name of a user or group if you know
	the user or group ID.
	
	volName		input:	A pointer to the name of a mounted volume
						or nil.
	vRefNum		input:	Volume specification.
	objType		input:	The mapping function code: 1 if you're mapping a
						user ID to a user name or 2 if you're mapping a
						group ID to a group name.
	name		input:	Points to a buffer (minimum Str31) where the user
						or group name is to be returned or must be nil.
				output:	The user or group name.
	
	Result Codes
		noErr				0		No error
		fnfErr				-43		Unrecognizable owner or group name
		paramErr			-50		Function not supported by volume
	
	__________
	
	Also see:	HGetLogInInfo, HGetDirAccess, FSpGetDirAccess, HSetDirAccess,
				FSpSetDirAccess, HMapName
*/

/*****************************************************************************/

pascal	OSErr	HMapName(ConstStr255Param volName,
						 short vRefNum,
						 ConstStr255Param name,
						 short objType,
						 long *ugID);
/*	¦ Map a user or group name to a user or group ID.
	The HMapName function determines the user or group ID if you know the
	user or group name.
	
	volName		input:	A pointer to the name of a mounted volume
						or nil.
	vRefNum		input:	Volume specification.
	name		input:	The user or group name.
	objType		input:	The mapping function code: 3 if you're mapping a
						user name to a user ID or 4 if you're mapping a
						group name to a group ID.
	ugID		output:	The user or group ID.

	Result Codes
		noErr				0		No error
		fnfErr				-43		Unrecognizable owner or group name
		paramErr			-50		Function not supported by volume
	
	__________
	
	Also see:	HGetLogInInfo, HGetDirAccess, FSpGetDirAccess, HSetDirAccess,
				FSpSetDirAccess, HMapID
*/

/*****************************************************************************/

pascal	OSErr	HCopyFile(short srcVRefNum,
						  long srcDirID,
						  ConstStr255Param srcName,
						  short dstVRefNum,
						  long dstDirID,
						  ConstStr255Param dstPathname,
						  ConstStr255Param copyName);
/*	¦ Duplicate a file on a file server and optionally to rename it.
	The HCopyFile function duplicates a file and optionally to renames it.
	The source and destination volumes must be on the same file server.
	This function instructs the server to copy the file.
	
	srcVRefNum	input:	Source volume specification.
	srcDirID	input:	Source directory ID.
	srcName		input:	Source file name.
	dstVRefNum	input:	Destination volume specification.
	dstDirID	input:	Destination directory ID.
	dstPathname	input:	Pointer to destination directory name, or
						nil when dstDirID specifies a directory.
	copyName	input:	Points to the new file name if the file is to be
						renamed or nil if the file isn't to be renamed.
	
	Result Codes
		noErr				0		No error
		dskFulErr			-34		Destination volume is full
		fnfErr				-43		Source file not found, or destination
									directory does not exist
		vLckdErr	 		-46		Destination volume is read-only
		fBsyErr	 			-47		The source or destination file could
									not be opened with the correct access
									modes
		dupFNErr			-48		Destination file already exists
		paramErr			-50		Function not supported by volume
		wrgVolTypErr		-123	Function not supported by volume
		afpAccessDenied		-5000	The user does not have the right to
									read the source or write to the
									destination
		afpDenyConflict		-5006	The source or destination file could
									not be opened with the correct access
									modes
		afpObjectTypeErr	-5025	Source is a directory
	
	__________
	
	Also see:	FSpCopyFile, FileCopy, FSpFileCopy
*/

/*****************************************************************************/

pascal	OSErr	FSpCopyFile(const FSSpec *srcSpec,
							const FSSpec *dstSpec,
							ConstStr255Param copyName);
/*	¦ Duplicate a file on a file server and optionally to rename it.
	The FSpCopyFile function duplicates a file and optionally to renames it.
	The source and destination volumes must be on the same file server.
	This function instructs the server to copy the file.
	
	srcSpec		input:	An FSSpec record specifying the source file.
	dstSpec		input:	An FSSpec record specifying the destination
						directory.
	copyName	input:	Points to the new file name if the file is to be
						renamed or nil if the file isn't to be renamed.
	
	Result Codes
		noErr				0		No error
		dskFulErr			-34		Destination volume is full
		fnfErr				-43		Source file not found, or destination
									directory does not exist
		vLckdErr	 		-46		Destination volume is read-only
		fBsyErr	 			-47		The source or destination file could
									not be opened with the correct access
									modes
		dupFNErr			-48		Destination file already exists
		paramErr			-50		Function not supported by volume
		wrgVolTypErr		-123	Function not supported by volume
		afpAccessDenied		-5000	The user does not have the right to
									read the source or write to the
									destination
		afpDenyConflict		-5006	The source or destination file could
									not be opened with the correct access
									modes
		afpObjectTypeErr	-5025	Source is a directory
	
	__________
	
	Also see:	HCopyFile, FileCopy, FSpFileCopy
*/

/*****************************************************************************/

pascal	OSErr	HMoveRename(short vRefNum,
							long srcDirID,
							ConstStr255Param srcName,
							long dstDirID,
							ConstStr255Param dstpathName,
							ConstStr255Param copyName);
/*	¦ Move a file or directory on a file server and optionally to rename it.
	The HMoveRename function moves a file or directory and optionally
	renames it. The source and destination locations must be on the same
	shared volume.
	
	vRefNum		input:	Volume specification.
	srcDirID	input:	Source directory ID.
	srcName		input:	The source object name.
	dstDirID	input:	Destination directory ID.
	dstName		input:	Pointer to destination directory name, or
						nil when dstDirID specifies a directory.
	copyName	input:	Points to the new name if the object is to be
						renamed or nil if the object isn't to be renamed.
	
	Result Codes
		noErr				0		No error
		fnfErr				-43		Source file or directory not found
		fLckdErr			-45		File is locked
		vLckdErr			-46		Destination volume is read-only
		dupFNErr			-48		Destination already exists
		paramErr			-50		Function not supported by volume
		badMovErr			-122	Attempted to move directory into
									offspring
		afpAccessDenied		-5000	The user does not have the right to
									move the file  or directory
	
	__________
	
	Also see:	FSpMoveRename, HMoveRenameCompat, FSpMoveRenameCompat
*/

/*****************************************************************************/

pascal	OSErr	FSpMoveRename(const FSSpec *srcSpec,
							  const FSSpec *dstSpec,
							  ConstStr255Param copyName);
/*	¦ Move a file or directory on a file server and optionally to rename it.
	The FSpMoveRename function moves a file or directory and optionally
	renames it. The source and destination locations must be on the same
	shared volume.
	
	srcSpec		input:	An FSSpec record specifying the source object.
	dstSpec		input:	An FSSpec record specifying the destination
						directory.
	copyName	input:	Points to the new name if the object is to be
						renamed or nil if the object isn't to be renamed.
	
	Result Codes
		noErr				0		No error
		fnfErr				-43		Source file or directory not found
		fLckdErr			-45		File is locked
		vLckdErr			-46		Destination volume is read-only
		dupFNErr			-48		Destination already exists
		paramErr			-50		Function not supported by volume
		badMovErr			-122	Attempted to move directory into
									offspring
		afpAccessDenied		-5000	The user does not have the right to
									move the file  or directory
	
	__________
	
	Also see:	HMoveRename, HMoveRenameCompat, FSpMoveRenameCompat
*/

/*****************************************************************************/

pascal	OSErr	GetVolMountInfoSize(ConstStr255Param volName,
									short vRefNum,
									short *size);
/*	¦ Get the size of a volume mounting information record.
	The GetVolMountInfoSize function determines the how much space the
	program needs to allocate for a volume mounting information record.
	
	volName		input:	A pointer to the name of a mounted volume
						or nil.
	vRefNum		input:	Volume specification.
	size		output:	The space needed (in bytes) of the volume mounting
						information record.
	
	Result Codes
		noErr				0		No error
		nsvErr				-35		Volume not found
		paramErr			-50		Parameter error
		extFSErr			-58		External file system error - no file
									system claimed this call.

	__________
	
	Also see:	GetVolMountInfo, VolumeMount BuildAFPVolMountInfo,
				RetrieveAFPVolMountInfo
*/

/*****************************************************************************/

pascal	OSErr	GetVolMountInfo(ConstStr255Param volName,
								short vRefNum,
								void *volMountInfo);
/*	¦ Retrieve a volume mounting information record.
	The GetVolMountInfo function retrieves a volume mounting information
	record containing all the information needed to mount the volume,
	except for passwords.
	
	volName			input:	A pointer to the name of a mounted volume
							or nil.
	vRefNum			input:	Volume specification.
	volMountInfo	output:	Points to a volume mounting information
							record where the mounting information is to
							be returned.
	
	Result Codes
		noErr				0		No error	
		nsvErr				-35		Volume not found	
		paramErr			-50		Parameter error	
		extFSErr			-58		External file system error - no file
									system claimed this call.

	__________
	
	Also see:	GetVolMountInfoSize, VolumeMount, BuildAFPVolMountInfo,
				RetrieveAFPVolMountInfo
*/

/*****************************************************************************/

pascal	OSErr	VolumeMount(const void *volMountInfo,
							short *vRefNum);
/*	¦ Mount a volume using a volume mounting information record.
	The VolumeMount function mounts a volume using a volume mounting
	information record.
	
	volMountInfo	input:	Points to a volume mounting information record.
	vRefNum			output:	A volume reference number.
	
	Result Codes
		noErr				0		No error
		notOpenErr			-28		AppleTalk is not open
		nsvErr				-35		Volume not found
		paramErr			-50		Parameter error; typically, zone, server,
									and volume name combination is not valid
									or not complete, or the user name is not
									recognized
		extFSErr			-58		External file system error - no file
									system claimed this call.
		memFullErr			-108	Not enough memory to create a new volume
									control block for mounting the volume
		afpBadUAM			-5002	User authentication method is unknown
		afpBadVersNum		-5003	Workstation is using an AFP version that
									the server doesnŐt recognize
		afpNoServer			-5016	Server is not responding
		afpUserNotAuth		-5023	User authentication failed (usually,
									password  is not correct)
		afpPwdExpired		-5042	Password has expired on server
		afpBadDirIDType		-5060	Not a fixed directory ID volume
		afpCantMountMoreSrvrs -5061	Maximum number of volumes has been
									mounted
		afpAlreadyMounted	-5062	Volume already mounted
		afpSameNodeErr		-5063	Attempt to log on to a server running
									on the same machine

	__________
	
	Also see:	GetVolMountInfoSize, GetVolMountInfo, BuildAFPVolMountInfo,
				RetrieveAFPVolMountInfo
*/

/*****************************************************************************/

pascal	OSErr	Share(short vRefNum,
					  long dirID,
					  ConstStr255Param name);
/*	¦ Establish a local volume or directory as a share point.
	The Share function establishes a local volume or directory as a
	share point.

	vRefNum			input:	Volume specification.
	dirID			input:	Directory ID.
	name			input:	Pointer to directory name, or nil if dirID
							specifies the directory.
	
	Result Codes
		noErr				0		No error	
		tmfoErr				-42		Too many share points	
		fnfErr				-43		File not found	
		dupFNErr			-48		Already a share point with this name	
		paramErr			-50		Function not supported by volume	
		dirNFErrdirNFErr	-120	Directory not found	
		afpAccessDenied		-5000	This directory cannot be shared	
		afpObjectTypeErr	-5025	Object was a file, not a directory	
		afpContainsSharedErr -5033	The directory contains a share point	
		afpInsideSharedErr	-5043	The directory is inside a shared directory	

	__________
	
	Also see:	FSpShare, Unshare, FSpUnshare
*/

/*****************************************************************************/

pascal	OSErr	FSpShare(const FSSpec *spec);
/*	¦ Establish a local volume or directory as a share point.
	The FSpShare function establishes a local volume or directory as a
	share point.

	spec	input:	An FSSpec record specifying the share point.
	
	Result Codes
		noErr				0		No error	
		tmfoErr				-42		Too many share points	
		fnfErr				-43		File not found	
		dupFNErr			-48		Already a share point with this name	
		paramErr			-50		Function not supported by volume	
		dirNFErrdirNFErr	-120	Directory not found	
		afpAccessDenied		-5000	This directory cannot be shared	
		afpObjectTypeErr	-5025	Object was a file, not a directory	
		afpContainsSharedErr -5033	The directory contains a share point	
		afpInsideSharedErr	-5043	The directory is inside a shared directory	

	__________
	
	Also see:	Share, Unshare, FSpUnshare
*/

/*****************************************************************************/

pascal	OSErr	Unshare(short vRefNum,
						long dirID,
						ConstStr255Param name);
/*	¦ Remove a share point.
	The Unshare function removes a share point.

	vRefNum			input:	Volume specification.
	dirID			input:	Directory ID.
	name			input:	Pointer to directory name, or nil if dirID
							specifies the directory.
	
	Result Codes
		noErr				0		No error	
		fnfErr				-43		File not found	
		paramErr			-50		Function not supported by volume	
		dirNFErrdirNFErr	-120	Directory not found	
		afpObjectTypeErr	-5025	Object was a file, not a directory; or,
									this directory is not a share point	

	__________
	
	Also see:	Share, FSpShare, FSpUnshare
*/

/*****************************************************************************/

pascal	OSErr	FSpUnshare(const FSSpec *spec);
/*	¦ Remove a share point.
	The FSpUnshare function removes a share point.

	spec	input:	An FSSpec record specifying the share point.
	
	Result Codes
		noErr				0		No error	
		fnfErr				-43		File not found	
		paramErr			-50		Function not supported by volume	
		dirNFErrdirNFErr	-120	Directory not found	
		afpObjectTypeErr	-5025	Object was a file, not a directory; or,
									this directory is not a share point	

	__________
	
	Also see:	Share, FSpShare, Unshare
*/

/*****************************************************************************/

pascal	OSErr	GetUGEntry(short objType,
						   StringPtr objName,
						   long *objID);
/*	¦ Retrieve a user or group entry from the local file server.
	The GetUGEntry function retrieves user or group entries from the
	local file server.

	objType		input:	The object type: -1 = group; 0 = user
	objName		input:	Points to a buffer (minimum Str31) where the user
						or group name is to be returned or must be nil.
				output:	The user or group name.
	objID		input:	O to get the first user or group. If the entry objID
						last returned by GetUGEntry is passed, then user or
						group whose alphabetically next in the list of entries
						is returned.
				output:	The user or group ID.
	
	Result Codes
		noErr				0		No error	
		fnfErr				-43		No more users or groups	
		paramErr			-50		Function not supported; or, ioObjID is
									negative	

	__________
	
	Also see:	GetUGEntries
*/

/*****************************************************************************/

#ifdef __cplusplus
}
#endif

#include "OptimizationEnd.h"

#endif	/* __MOREFILES__ */
