palm-os-sdk/sdk-5r3/include/Extensions/ExpansionMgr/VFSMgr.h
2016-04-06 13:22:15 -07:00

467 lines
19 KiB
C

/******************************************************************************
*
* Copyright (c) 2000-2003 PalmSource, Inc. All rights reserved.
*
* File: VFSMgr.h
*
* Release: Palm OS 5 SDK (68K) R3.
*
* Description:
* Header file for VFS Manager.
*
*****************************************************************************/
#ifndef __VFSMGR_H__
#define __VFSMGR_H__
#include <PalmTypes.h>
#include <CoreTraps.h>
#include <SystemMgr.h>
#include "ExpansionMgr.h"
#ifdef BUILDING_AGAINST_PALMOS35
#define sysTrapVFSMgr sysTrapSysReserved3
#define sysFileCVFSMgr 'vfsm' // Creator type for VFSMgr...
#define vfsErrorClass 0x2A00 // Post-3.5 this is defined in ErrorBase.h
#else
#define sysTrapVFSMgr sysTrapFileSystemDispatch
#endif
#ifdef BUILDING_VFSMGR_DISPATCH
#define VFSMGR_TRAP(VFSMgrSelectorNum)
#else
#define VFSMGR_TRAP(sel) \
_SYSTEM_API(_CALL_WITH_SELECTOR)(_SYSTEM_TABLE, sysTrapVFSMgr, sel)
#endif
#define vfsFtrIDVersion 0 // ID of feature containing version of VFSMgr.
// Check existence of this feature to see if VFSMgr is installed.
#define vfsFtrIDDefaultFS 1 // ID of feature containing the creator ID of the default filesystem library
// this is the default choice when choosing a library for formatting/mounting
#define vfsMgrVersionNum ((UInt16)200) // version of the VFSMgr, obtained from the feature
// MountClass constants:
#define vfsMountClass_SlotDriver sysFileTSlotDriver
#define vfsMountClass_Simulator sysFileTSimulator
#define vfsMountClass_POSE 'pose'
// Base MountParamType; others such as SlotMountParamType are extensions of this base type,
// switched on value of "mountClass" parameter. It will make more sense someday when there
// are other kinds of FileSystems... (Trust us. :-)
typedef struct VFSAnyMountParamTag
{
UInt16 volRefNum; // The volRefNum of the volume.
UInt16 reserved;
UInt32 mountClass; // 'libs' for slotDriver-based filesystems
// Other fields here, depending on value of 'mountClass'
} VFSAnyMountParamType;
typedef VFSAnyMountParamType *VFSAnyMountParamPtr ;
typedef struct VFSSlotMountParamTag
{
VFSAnyMountParamType vfsMountParam; // mountClass = VFSMountClass_SlotDriver = 'libs'
UInt16 slotLibRefNum;
UInt16 slotRefNum;
} VFSSlotMountParamType;
typedef struct VFSPOSEMountParamTag
{
VFSAnyMountParamType vfsMountParam; // mountClass = VFSMountClass_POSE = 'pose'
UInt8 poseSlotNum;
} VFSPOSEMountParamType;
/* For Example...
typedef struct VFSOtherMountParamTag {
VFSAnyMountParamType vfsMountParam; // mountClass = 'othr' (for example)
UInt16 otherValue;
} VFSOtherMountParamType;
*/
typedef struct FileInfoTag
{
UInt32 attributes;
Char *nameP; // buffer to receive full name; pass NULL to avoid getting name
UInt16 nameBufLen; // size of nameP buffer, in bytes
} FileInfoType, *FileInfoPtr;
typedef struct VolumeInfoTag
{
UInt32 attributes; // read-only etc.
UInt32 fsType; // Filesystem type for this volume (defined below)
UInt32 fsCreator; // Creator code of filesystem driver for this volume. For use with VFSCustomControl().
UInt32 mountClass; // mount class that mounted this volume
// For slot based filesystems: (mountClass = vfsMountClass_SlotDriver)
UInt16 slotLibRefNum; // Library on which the volume is mounted
UInt16 slotRefNum; // ExpMgr slot number of card containing volume
UInt32 mediaType; // Type of card media (mediaMemoryStick, mediaCompactFlash, etc...)
UInt32 reserved; // reserved for future use (other mountclasses may need more space)
} VolumeInfoType, *VolumeInfoPtr;
typedef UInt32 FileRef;
#define vfsInvalidVolRef 0 // constant for an invalid volume reference, guaranteed not to represent a valid one. Use it like you would use NULL for a FILE*.
#define vfsInvalidFileRef 0L // constant for an invalid file reference, guaranteed not to represent a valid one. Use it like you would use NULL for a FILE*.
/************************************************************
* File Origin constants: (for the origins of relative offsets passed to 'seek' type routines).
*************************************************************/
#define vfsOriginBeginning 0 // from the beginning (first data byte of file)
#define vfsOriginCurrent 1 // from the current position
#define vfsOriginEnd 2 // from the end of file (one position beyond last data byte, only negative offsets are legal)
typedef UInt16 FileOrigin;
/************************************************************
* openMode flags passed to VFSFileOpen
*************************************************************/
#define vfsModeExclusive (0x0001U) // don't let anyone else open it
#define vfsModeRead (0x0002U) // open for read access
#define vfsModeWrite (0x0004U | vfsModeExclusive) // open for write access, implies exclusive
#define vfsModeCreate (0x0008U) // create the file if it doesn't already exist. Implemented in VFS layer, no FS lib call will ever have to handle this.
#define vfsModeTruncate (0x0010U) // Truncate file to 0 bytes after opening, removing all existing data. Implemented in VFS layer, no FS lib call will ever have to handle this.
#define vfsModeReadWrite (vfsModeWrite | vfsModeRead) // open for read/write access
#define vfsModeLeaveOpen (0x0020U) // Leave the file open even if when the foreground task closes
// Combination flag constants, for error checking purposes:
#define vfsModeAll (vfsModeExclusive | vfsModeRead | vfsModeWrite | vfsModeCreate | vfsModeTruncate | vfsModeReadWrite | vfsModeLeaveOpen)
#define vfsModeVFSLayerOnly (vfsModeCreate | vfsModeTruncate) // flags only used apps & the VFS layer, FS libraries will never see these.
/************************************************************
* File Attributes
*************************************************************/
#define vfsFileAttrReadOnly (0x00000001UL)
#define vfsFileAttrHidden (0x00000002UL)
#define vfsFileAttrSystem (0x00000004UL)
#define vfsFileAttrVolumeLabel (0x00000008UL)
#define vfsFileAttrDirectory (0x00000010UL)
#define vfsFileAttrArchive (0x00000020UL)
#define vfsFileAttrLink (0x00000040UL)
#define vfsFileAttrAll (0x0000007fUL)
/************************************************************
* Volume Attributes
*************************************************************/
#define vfsVolumeAttrSlotBased (0x00000001UL) // reserved
#define vfsVolumeAttrReadOnly (0x00000002UL) // volume is read only
#define vfsVolumeAttrHidden (0x00000004UL) // volume should not be user-visible.
/************************************************************
* Date constants (for use with VFSFileGet/SetDate)
*************************************************************/
#define vfsFileDateCreated 1
#define vfsFileDateModified 2
#define vfsFileDateAccessed 3
/************************************************************
* Iterator start and stop constants.
* Used by VFSVolumeEnumerate, VFSDirEntryEnumerate, VFSDirEntryEnumerate
*************************************************************/
#define vfsIteratorStart 0L
#define vfsIteratorStop 0xffffffffL
/************************************************************
* 'handled' field bit constants
* (for use with Volume Mounted/Unmounted notifications)
*************************************************************/
#define vfsHandledUIAppSwitch 0x01 // Any UI app switching has already been handled.
// The VFSMgr will not UIAppSwitch to the start.prc app
// (but it will loaded & sent the AutoStart launchcode),
// and the Launcher will not switch to itself.
#define vfsHandledStartPrc 0x02 // And automatic running of start.prc has already been handled.
// VFSMgr will not load it, send it the AutoStart launchcode,
// or UIAppSwitch to it.
/************************************************************
* Format/Mount flags (for use with VFSVolumeFormat/Mount)
*************************************************************/
#define vfsMountFlagsUseThisFileSystem 0x01 // Mount/Format the volume with the filesystem specified
//#define vfsMountFlagsPrivate1 0x02 // for system use only
//#define vfsMountFlagsPrivate2 0x04 // for system use only
#define vfsMountFlagsReserved1 0x08 // reserved
#define vfsMountFlagsReserved2 0x10 // reserved
#define vfsMountFlagsReserved3 0x20 // reserved
#define vfsMountFlagsReserved4 0x40 // reserved
#define vfsMountFlagsReserved5 0x80 // reserved
/************************************************************
* Common filesystem types. Used by FSFilesystemType and SlotCardIsFilesystemSupported.
*************************************************************/
#define vfsFilesystemType_VFAT 'vfat' // FAT12 and FAT16 extended to handle long file names
#define vfsFilesystemType_FAT 'fats' // FAT12 and FAT16 which only handles 8.3 file names
#define vfsFilesystemType_NTFS 'ntfs' // Windows NT filesystem
#define vfsFilesystemType_HFSPlus 'hfse' // The Macintosh extended hierarchical filesystem
#define vfsFilesystemType_HFS 'hfss' // The Macintosh standard hierarchical filesystem
#define vfsFilesystemType_MFS 'mfso' // The Macintosh original filesystem
#define vfsFilesystemType_EXT2 'ext2' // Linux filesystem
#define vfsFilesystemType_FFS 'ffsb' // Unix Berkeley block based filesystem
#define vfsFilesystemType_NFS 'nfsu' // Unix Networked filesystem
#define vfsFilesystemType_AFS 'afsu' // Unix Andrew filesystem
#define vfsFilesystemType_Novell 'novl' // Novell filesystem
#define vfsFilesystemType_HPFS 'hpfs' // OS2 High Performance filesystem
/************************************************************
* Error codes
*************************************************************/
#define vfsErrBufferOverflow (vfsErrorClass | 1) // passed in buffer is too small
#define vfsErrFileGeneric (vfsErrorClass | 2) // Generic file error.
#define vfsErrFileBadRef (vfsErrorClass | 3) // the fileref is invalid (has been closed, or was not obtained from VFSFileOpen())
#define vfsErrFileStillOpen (vfsErrorClass | 4) // returned from FSFileDelete if the file is still open
#define vfsErrFilePermissionDenied (vfsErrorClass | 5) // The file is read only
#define vfsErrFileAlreadyExists (vfsErrorClass | 6) // a file of this name exists already in this location
#define vfsErrFileEOF (vfsErrorClass | 7) // file pointer is at end of file
#define vfsErrFileNotFound (vfsErrorClass | 8) // file was not found at the path specified
#define vfsErrVolumeBadRef (vfsErrorClass | 9) // the volume refnum is invalid.
#define vfsErrVolumeStillMounted (vfsErrorClass | 10) // returned from FSVolumeFormat if the volume is still mounted
#define vfsErrNoFileSystem (vfsErrorClass | 11) // no installed filesystem supports this operation
#define vfsErrBadData (vfsErrorClass | 12) // operation could not be completed because of invalid data (i.e., import DB from .PRC file)
#define vfsErrDirNotEmpty (vfsErrorClass | 13) // can't delete a non-empty directory
#define vfsErrBadName (vfsErrorClass | 14) // invalid filename, or path, or volume label or something...
#define vfsErrVolumeFull (vfsErrorClass | 15) // not enough space left on volume
#define vfsErrUnimplemented (vfsErrorClass | 16) // this call is not implemented
#define vfsErrNotADirectory (vfsErrorClass | 17) // This operation requires a directory
#define vfsErrIsADirectory (vfsErrorClass | 18) // This operation requires a regular file, not a directory
#define vfsErrDirectoryNotFound (vfsErrorClass | 19) // Returned from VFSFileCreate when the path leading up to the new file does not exist
#define vfsErrNameShortened (vfsErrorClass | 20) // A volume name or filename was automatically shortened to conform to filesystem spec
/************************************************************
* Selectors for routines found in the VFS manager. The order
* of these selectors MUST match the jump table in VFSMgr.c.
*************************************************************/
#define vfsTrapInit 0
#define vfsTrapCustomControl 1
#define vfsTrapFileCreate 2
#define vfsTrapFileOpen 3
#define vfsTrapFileClose 4
#define vfsTrapFileReadData 5
#define vfsTrapFileRead 6
#define vfsTrapFileWrite 7
#define vfsTrapFileDelete 8
#define vfsTrapFileRename 9
#define vfsTrapFileSeek 10
#define vfsTrapFileEOF 11
#define vfsTrapFileTell 12
#define vfsTrapFileResize 13
#define vfsTrapFileGetAttributes 14
#define vfsTrapFileSetAttributes 15
#define vfsTrapFileGetDate 16
#define vfsTrapFileSetDate 17
#define vfsTrapFileSize 18
#define vfsTrapDirCreate 19
#define vfsTrapDirEntryEnumerate 20
#define vfsTrapGetDefaultDirectory 21
#define vfsTrapRegisterDefaultDirectory 22
#define vfsTrapUnregisterDefaultDirectory 23
#define vfsTrapVolumeFormat 24
#define vfsTrapVolumeMount 25
#define vfsTrapVolumeUnmount 26
#define vfsTrapVolumeEnumerate 27
#define vfsTrapVolumeInfo 28
#define vfsTrapVolumeGetLabel 29
#define vfsTrapVolumeSetLabel 30
#define vfsTrapVolumeSize 31
#define vfsTrapInstallFSLib 32
#define vfsTrapRemoveFSLib 33
#define vfsTrapImportDatabaseFromFile 34
#define vfsTrapExportDatabaseToFile 35
#define vfsTrapFileDBGetResource 36
#define vfsTrapFileDBInfo 37
#define vfsTrapFileDBGetRecord 38
#define vfsTrapImportDatabaseFromFileCustom 39
#define vfsTrapExportDatabaseToFileCustom 40
// System use only
#define vfsTrapPrivate1 41
#define vfsMaxSelector vfsTrapPrivate1
typedef Err (*VFSImportProcPtr)
(UInt32 totalBytes, UInt32 offset, void *userDataP);
typedef Err (*VFSExportProcPtr)
(UInt32 totalBytes, UInt32 offset, void *userDataP);
Err VFSInit(void)
VFSMGR_TRAP(vfsTrapInit);
// if you pass NULL for fsCreator, VFS will iterate through
// all installed filesystems until it finds one that does not return an error.
Err VFSCustomControl(UInt32 fsCreator, UInt32 apiCreator, UInt16 apiSelector,
void *valueP, UInt16 *valueLenP)
VFSMGR_TRAP(vfsTrapCustomControl);
Err VFSFileCreate(UInt16 volRefNum, const Char *pathNameP)
VFSMGR_TRAP(vfsTrapFileCreate);
Err VFSFileOpen(UInt16 volRefNum, const Char *pathNameP,
UInt16 openMode, FileRef *fileRefP)
VFSMGR_TRAP(vfsTrapFileOpen);
Err VFSFileClose(FileRef fileRef)
VFSMGR_TRAP(vfsTrapFileClose);
Err VFSFileReadData(FileRef fileRef, UInt32 numBytes, void *bufBaseP,
UInt32 offset, UInt32 *numBytesReadP)
VFSMGR_TRAP(vfsTrapFileReadData);
Err VFSFileRead(FileRef fileRef, UInt32 numBytes, void *bufP, UInt32 *numBytesReadP)
VFSMGR_TRAP(vfsTrapFileRead);
Err VFSFileWrite(FileRef fileRef, UInt32 numBytes, const void *dataP, UInt32 *numBytesWrittenP)
VFSMGR_TRAP(vfsTrapFileWrite);
// some file routines work on directories
Err VFSFileDelete(UInt16 volRefNum, const Char *pathNameP)
VFSMGR_TRAP(vfsTrapFileDelete);
Err VFSFileRename(UInt16 volRefNum, const Char *pathNameP, const Char *newNameP)
VFSMGR_TRAP(vfsTrapFileRename);
Err VFSFileSeek(FileRef fileRef, FileOrigin origin, Int32 offset)
VFSMGR_TRAP(vfsTrapFileSeek);
Err VFSFileEOF(FileRef fileRef)
VFSMGR_TRAP(vfsTrapFileEOF);
Err VFSFileTell(FileRef fileRef, UInt32 *filePosP)
VFSMGR_TRAP(vfsTrapFileTell);
Err VFSFileSize(FileRef fileRef, UInt32 *fileSizeP)
VFSMGR_TRAP(vfsTrapFileSize);
Err VFSFileResize(FileRef fileRef, UInt32 newSize)
VFSMGR_TRAP(vfsTrapFileResize);
Err VFSFileGetAttributes(FileRef fileRef, UInt32 *attributesP)
VFSMGR_TRAP(vfsTrapFileGetAttributes);
Err VFSFileSetAttributes(FileRef fileRef, UInt32 attributes)
VFSMGR_TRAP(vfsTrapFileSetAttributes);
Err VFSFileGetDate(FileRef fileRef, UInt16 whichDate, UInt32 *dateP)
VFSMGR_TRAP(vfsTrapFileGetDate);
Err VFSFileSetDate(FileRef fileRef, UInt16 whichDate, UInt32 date)
VFSMGR_TRAP(vfsTrapFileSetDate);
Err VFSDirCreate(UInt16 volRefNum, const Char *dirNameP)
VFSMGR_TRAP(vfsTrapDirCreate);
Err VFSDirEntryEnumerate(FileRef dirRef, UInt32 *dirEntryIteratorP, FileInfoType *infoP)
VFSMGR_TRAP(vfsTrapDirEntryEnumerate);
Err VFSGetDefaultDirectory(UInt16 volRefNum, const Char *fileTypeStr,
Char *pathStr, UInt16 *bufLenP)
VFSMGR_TRAP(vfsTrapGetDefaultDirectory);
Err VFSRegisterDefaultDirectory(const Char *fileTypeStr, UInt32 mediaType,
const Char *pathStr)
VFSMGR_TRAP(vfsTrapRegisterDefaultDirectory);
Err VFSUnregisterDefaultDirectory(const Char *fileTypeStr, UInt32 mediaType)
VFSMGR_TRAP(vfsTrapUnregisterDefaultDirectory);
Err VFSVolumeFormat(UInt8 flags, UInt16 fsLibRefNum, VFSAnyMountParamPtr vfsMountParamP)
VFSMGR_TRAP(vfsTrapVolumeFormat);
Err VFSVolumeMount(UInt8 flags, UInt16 fsLibRefNum, VFSAnyMountParamPtr vfsMountParamP)
VFSMGR_TRAP(vfsTrapVolumeMount);
Err VFSVolumeUnmount(UInt16 volRefNum)
VFSMGR_TRAP(vfsTrapVolumeUnmount);
Err VFSVolumeEnumerate(UInt16 *volRefNumP, UInt32 *volIteratorP)
VFSMGR_TRAP(vfsTrapVolumeEnumerate);
Err VFSVolumeInfo(UInt16 volRefNum, VolumeInfoType *volInfoP)
VFSMGR_TRAP(vfsTrapVolumeInfo);
Err VFSVolumeGetLabel(UInt16 volRefNum, Char *labelP, UInt16 bufLen)
VFSMGR_TRAP(vfsTrapVolumeGetLabel);
Err VFSVolumeSetLabel(UInt16 volRefNum, const Char *labelP)
VFSMGR_TRAP(vfsTrapVolumeSetLabel);
Err VFSVolumeSize(UInt16 volRefNum, UInt32 *volumeUsedP, UInt32 *volumeTotalP)
VFSMGR_TRAP(vfsTrapVolumeSize);
Err VFSInstallFSLib(UInt32 creator, UInt16 *fsLibRefNumP)
VFSMGR_TRAP(vfsTrapInstallFSLib);
Err VFSRemoveFSLib(UInt16 fsLibRefNum)
VFSMGR_TRAP(vfsTrapRemoveFSLib);
Err VFSImportDatabaseFromFile(UInt16 volRefNum, const Char *pathNameP,
UInt16 *cardNoP, LocalID *dbIDP)
VFSMGR_TRAP(vfsTrapImportDatabaseFromFile);
Err VFSImportDatabaseFromFileCustom(UInt16 volRefNum, const Char *pathNameP,
UInt16 *cardNoP, LocalID *dbIDP, VFSImportProcPtr importProcP,
void *userDataP)
VFSMGR_TRAP(vfsTrapImportDatabaseFromFileCustom);
Err VFSExportDatabaseToFile(UInt16 volRefNum, const Char *pathNameP,
UInt16 cardNo, LocalID dbID)
VFSMGR_TRAP(vfsTrapExportDatabaseToFile);
Err VFSExportDatabaseToFileCustom(UInt16 volRefNum, const Char *pathNameP,
UInt16 cardNo, LocalID dbID, VFSExportProcPtr exportProcP,
void *userDataP)
VFSMGR_TRAP(vfsTrapExportDatabaseToFileCustom);
Err VFSFileDBGetResource(FileRef ref, DmResType type, DmResID resID, MemHandle *resHP)
VFSMGR_TRAP(vfsTrapFileDBGetResource);
Err VFSFileDBInfo(FileRef ref, Char *nameP,
UInt16 *attributesP, UInt16 *versionP, UInt32 *crDateP,
UInt32 *modDateP, UInt32 *bckUpDateP,
UInt32 *modNumP, MemHandle *appInfoHP,
MemHandle *sortInfoHP, UInt32 *typeP,
UInt32 *creatorP, UInt16 *numRecordsP)
VFSMGR_TRAP(vfsTrapFileDBInfo);
Err VFSFileDBGetRecord(FileRef ref, UInt16 recIndex, MemHandle *recHP,
UInt8 *recAttrP, UInt32 *uniqueIDP)
VFSMGR_TRAP(vfsTrapFileDBGetRecord);
#endif // __VFSMGR_H__