macemu/BasiliskII/src/include/extfs_defs.h
2008-01-01 09:40:36 +00:00

560 lines
11 KiB
C

/*
* extfs_defs.h - MacOS types and structures for external file system
*
* Basilisk II (C) 1997-2008 Christian Bauer
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef EXTFS_DEFS_H
#define EXTFS_DEFS_H
#include "macos_util.h"
// Gestalt selectors
enum {
gestaltFSAttr = FOURCC('f','s',' ',' '),
gestaltFullExtFSDispatching = 0,
gestaltHasFSSpecCalls = 1,
gestaltHasFileSystemManager = 2,
gestaltFSMDoesDynamicLoad = 3,
gestaltFSSupports4GBVols = 4,
gestaltFSSupports2TBVols = 5,
gestaltHasExtendedDiskInit = 6,
gestaltDTMgrSupportsFSM = 7
};
enum {
gestaltFSMVersion = FOURCC('f','s','m',' ')
};
// File attributes
enum {
faLocked = 0x01,
faRFOpen = 0x04,
faDFOpen = 0x08,
faIsDir = 0x10,
faOpen = 0x80
};
// Volume attributes
enum {
vaBusy = 0x40,
vaHardLock = 0x80,
vaSoftLock = 0x8000
};
// vMAttrib (GetVolParms) constants
enum {
kLimitFCBs = 1 << 31,
kLocalWList = 1 << 30,
kNoMiniFndr = 1 << 29,
kNoVNEdit = 1 << 28,
kNoLclSync = 1 << 27,
kTrshOffLine = 1 << 26,
kNoSwitchTo = 1 << 25,
kNoDeskItems = 1 << 20,
kNoBootBlks = 1 << 19,
kAccessCntl = 1 << 18,
kNoSysDir = 1 << 17,
kHasExtFSVol = 1 << 16,
kHasOpenDeny = 1 << 15,
kHasCopyFile = 1 << 14,
kHasMoveRename = 1 << 13,
kHasDesktopMgr = 1 << 12,
kHasShortName = 1 << 11,
kHasFolderLock = 1 << 10,
kHasPersonalAccessPrivileges = 1 << 9,
kHasUserGroupList = 1 << 8,
kHasCatSearch = 1 << 7,
kHasFileIDs = 1 << 6,
kHasBTreeMgr = 1 << 5,
kHasBlankAccessPrivileges = 1 << 4,
kSupportsAsyncRequests = 1 << 3
};
enum {
fsUsrCNID = 16,
kHFSBit = 9,
kHFSMask = 0x0200,
kAsyncBit = 10,
kAsyncMask = 0x0400
};
// HFSCIProc selectCode values
enum {
kFSMOpen = 0xA000,
kFSMClose = 0xA001,
kFSMRead = 0xA002,
kFSMWrite = 0xA003,
kFSMGetVolInfo = 0xA007,
kFSMCreate = 0xA008,
kFSMDelete = 0xA009,
kFSMOpenRF = 0xA00A,
kFSMRename = 0xA00B,
kFSMGetFileInfo = 0xA00C,
kFSMSetFileInfo = 0xA00D,
kFSMUnmountVol = 0xA00E,
kFSMMountVol = 0xA00F,
kFSMAllocate = 0xA010,
kFSMGetEOF = 0xA011,
kFSMSetEOF = 0xA012,
kFSMFlushVol = 0xA013,
kFSMGetVol = 0xA014,
kFSMSetVol = 0xA015,
kFSMEject = 0xA017,
kFSMGetFPos = 0xA018,
kFSMOffline = 0xA035,
kFSMSetFilLock = 0xA041,
kFSMRstFilLock = 0xA042,
kFSMSetFilType = 0xA043,
kFSMSetFPos = 0xA044,
kFSMFlushFile = 0xA045,
kFSMOpenWD = 0x0001,
kFSMCloseWD = 0x0002,
kFSMCatMove = 0x0005,
kFSMDirCreate = 0x0006,
kFSMGetWDInfo = 0x0007,
kFSMGetFCBInfo = 0x0008,
kFSMGetCatInfo = 0x0009,
kFSMSetCatInfo = 0x000A,
kFSMSetVolInfo = 0x000B,
kFSMLockRng = 0x0010,
kFSMUnlockRng = 0x0011,
kFSMXGetVolInfo = 0x0012,
kFSMCreateFileIDRef = 0x0014,
kFSMDeleteFileIDRef = 0x0015,
kFSMResolveFileIDRef = 0x0016,
kFSMExchangeFiles = 0x0017,
kFSMCatSearch = 0x0018,
kFSMOpenDF = 0x001A,
kFSMMakeFSSpec = 0x001B,
kFSMDTGetPath = 0x0020,
kFSMDTCloseDown = 0x0021,
kFSMDTAddIcon = 0x0022,
kFSMDTGetIcon = 0x0023,
kFSMDTGetIconInfo = 0x0024,
kFSMDTAddAPPL = 0x0025,
kFSMDTRemoveAPPL = 0x0026,
kFSMDTGetAPPL = 0x0027,
kFSMDTSetComment = 0x0028,
kFSMDTRemoveComment = 0x0029,
kFSMDTGetComment = 0x002A,
kFSMDTFlush = 0x002B,
kFSMDTReset = 0x002C,
kFSMDTGetInfo = 0x002D,
kFSMDTOpenInform = 0x002E,
kFSMDTDelete = 0x002F,
kFSMGetVolParms = 0x0030,
kFSMGetLogInInfo = 0x0031,
kFSMGetDirAccess = 0x0032,
kFSMSetDirAccess = 0x0033,
kFSMMapID = 0x0034,
kFSMMapName = 0x0035,
kFSMCopyFile = 0x0036,
kFSMMoveRename = 0x0037,
kFSMOpenDeny = 0x0038,
kFSMOpenRFDeny = 0x0039,
kFSMGetXCatInfo = 0x003A,
kFSMGetVolMountInfoSize = 0x003F,
kFSMGetVolMountInfo = 0x0040,
kFSMVolumeMount = 0x0041,
kFSMShare = 0x0042,
kFSMUnShare = 0x0043,
kFSMGetUGEntry = 0x0044,
kFSMGetForeignPrivs = 0x0060,
kFSMSetForeignPrivs = 0x0061
};
// UTDetermineVol status values
enum {
dtmvError = 0,
dtmvFullPathname = 1,
dtmvVRefNum = 2,
dtmvWDRefNum = 3,
dtmvDriveNum = 4,
dtmvDefault = 5
};
// Miscellaneous constants used by FSM
enum {
fsdVersion1 = 1,
fsmIgnoreFSID = 0xFFFE,
fsmGenericFSID = 0xFFFF
};
// compInterfMask bits common to all FSM components
enum {
fsmComponentEnableBit = 31,
fsmComponentEnableMask = (long)0x80000000,
fsmComponentBusyBit = 30,
fsmComponentBusyMask = 0x40000000
};
// compInterfMask bits specific to HFS component
enum {
hfsCIDoesHFSBit = 23,
hfsCIDoesHFSMask = 0x00800000,
hfsCIDoesAppleShareBit = 22,
hfsCIDoesAppleShareMask = 0x00400000,
hfsCIDoesDeskTopBit = 21,
hfsCIDoesDeskTopMask = 0x00200000,
hfsCIDoesDynamicLoadBit = 20,
hfsCIDoesDynamicLoadMask = 0x00100000,
hfsCIResourceLoadedBit = 19,
hfsCIResourceLoadedMask = 0x00080000,
hfsCIHasHLL2PProcBit = 18,
hfsCIHasHLL2PProcMask = 0x00040000,
hfsCIWantsDTSupportBit = 17,
hfsCIWantsDTSupportMask = 0x00020000
};
// FCBRec.fcbFlags bits
enum {
fcbWriteBit = 0,
fcbWriteMask = 0x01,
fcbResourceBit = 1,
fcbResourceMask = 0x02,
fcbWriteLockedBit = 2,
fcbWriteLockedMask = 0x04,
fcbSharedWriteBit = 4,
fcbSharedWriteMask = 0x10,
fcbFileLockedBit = 5,
fcbFileLockedMask = 0x20,
fcbOwnClumpBit = 6,
fcbOwnClumpMask = 0x40,
fcbModifiedBit = 7,
fcbModifiedMask = 0x80
};
// InformFSM messages
enum {
fsmNopMessage = 0,
fsmDrvQElChangedMessage = 1,
fsmGetFSIconMessage = 2
};
// Messages passed to the fileSystemCommProc
enum {
ffsNopMessage = 0,
ffsGetIconMessage = 1,
ffsIDDiskMessage = 2,
ffsLoadMessage = 3,
ffsUnloadMessage = 4,
ffsIDVolMountMessage = 5,
ffsInformMessage = 6,
ffsGetIconInfoMessage = 7
};
// Error codes from FSM functions
enum {
fsmFFSNotFoundErr = -431,
fsmBusyFFSErr = -432,
fsmBadFFSNameErr = -433,
fsmBadFSDLenErr = -434,
fsmDuplicateFSIDErr = -435,
fsmBadFSDVersionErr = -436,
fsmNoAlternateStackErr = -437,
fsmUnknownFSMMessageErr = -438
};
// paramBlock for ffsGetIconMessage and fsmGetFSIconMessage
enum {
kLargeIcon = 1
};
enum { // FSMGetIconRec struct
iconBufferPtr = 2,
requestSize = 6,
actualSize = 10,
iconType = 14,
isEjectable = 15,
driveQElemPtr = 16,
fileSystemSpecPtr = 20
};
enum { // VolumeMountInfoHeader struct
vmiLength = 0,
vmiMedia = 2,
vmiFlags = 6,
SIZEOF_VolumeMountInfoHeader = 8
};
enum { // GetVolParmsInfoBuffer struct
vMVersion = 0,
vMAttrib = 2,
vMLocalHand = 6,
vMServerAdr = 10,
vMVolumeGrade = 14,
vMForeignPrivID = 18,
SIZEOF_GetVolParmsInfoBuffer = 20
};
// Finder Flags
enum {
kIsOnDesk = 0x0001,
kColor = 0x000E,
kIsShared = 0x0040,
kHasBeenInited = 0x0100,
kHasCustomIcon = 0x0400,
kIsStationery = 0x0800,
kNameLocked = 0x1000,
kHasBundle = 0x2000,
kIsInvisible = 0x4000,
kIsAlias = 0x8000
};
enum { // FInfo struct
fdType = 0,
fdCreator = 4,
fdFlags = 8,
fdLocation = 10,
fdFldr = 14,
SIZEOF_FInfo = 16
};
enum { // FXInfo struct
fdIconID = 0,
fdUnused = 2,
fdScript = 8,
fdXFlags = 9,
fdComment = 10,
fdPutAway = 12,
SIZEOF_FXInfo = 16
};
enum { // HFileParam/HFileInfo struct
ioFRefNum = 24,
ioFVersNum = 26,
ioFDirIndex = 28,
ioFlAttrib = 30,
ioACUser = 31,
ioFlFndrInfo = 32,
ioDirID = 48,
ioFlStBlk = 52,
ioFlLgLen = 54,
ioFlPyLen = 58,
ioFlRStBlk = 62,
ioFlRLgLen = 64,
ioFlRPyLen = 68,
ioFlCrDat = 72,
ioFlMdDat = 76,
ioFlBkDat = 80,
ioFlXFndrInfo = 84,
ioFlParID = 100,
ioFlClpSiz = 104
};
enum { // DInfo struct
frRect = 0,
frFlags = 8,
frLocation = 10,
frView = 14,
SIZEOF_DInfo = 16
};
enum { // DXInfo struct
frScroll = 0,
frOpenChain = 4,
frScript = 8,
frXFlags = 9,
frComment = 10,
frPutAway = 12,
SIZEOF_DXInfo = 16
};
enum { // HDirParam/DirInfo struct
ioDrUsrWds = 32,
ioDrDirID = 48,
ioDrNmFls = 52,
ioDrCrDat = 72,
ioDrMdDat = 76,
ioDrBkDat = 80,
ioDrFndrInfo = 84,
ioDrParID = 100
};
enum { // WDParam struct
ioWDIndex = 26,
ioWDProcID = 28,
ioWDVRefNum = 32,
ioWDDirID = 48,
SIZEOF_WDParam = 52
};
enum { // HVolumeParam struct
ioVolIndex = 28,
ioVCrDate = 30,
ioVLsMod = 34,
ioVAtrb = 38,
ioVNmFls = 40,
ioVBitMap = 42,
ioAllocPtr = 44,
ioVNmAlBlks = 46,
ioVAlBlkSiz = 48,
ioVClpSiz = 52,
ioAlBlSt = 56,
ioVNxtCNID = 58,
ioVFrBlk = 62,
ioVSigWord = 64,
ioVDrvInfo = 66,
ioVDRefNum = 68,
ioVFSID = 70,
ioVBkUp = 72,
ioVSeqNum = 76,
ioVWrCnt = 78,
ioVFilCnt = 82,
ioVDirCnt = 86,
ioVFndrInfo = 90
};
enum { // CMovePBRec struct
ioNewName = 28,
ioNewDirID = 36
};
enum { // FCBPBRec struct
ioFCBIndx = 28,
ioFCBFlNm = 32,
ioFCBFlags = 36,
ioFCBStBlk = 38,
ioFCBEOF = 40,
ioFCBPLen = 44,
ioFCBCrPs = 48,
ioFCBVRefNum = 52,
ioFCBClpSiz = 54,
ioFCBParID = 58
};
// Volume control block
enum { // VCB struct
vcbFlags = 6,
vcbSigWord = 8,
vcbCrDate = 10,
vcbLsMod = 14,
vcbAtrb = 18,
vcbNmFls = 20,
vcbVBMSt = 22,
vcbAllocPtr = 24,
vcbNmAlBlks = 26,
vcbAlBlkSiz = 28,
vcbClpSiz = 32,
vcbAlBlSt = 36,
vcbNxtCNID = 38,
vcbFreeBks = 42,
vcbVN = 44,
vcbDrvNum = 72,
vcbDRefNum = 74,
vcbFSID = 76,
vcbVRefNum = 78,
vcbMAdr = 80,
vcbBufAdr = 84,
vcbMLen = 88,
vcbDirIndex = 90,
vcbDirBlk = 92,
vcbVolBkUp = 94,
vcbVSeqNum = 98,
vcbWrCnt = 100,
vcbXTClpSiz = 104,
vcbCTClpSiz = 108,
vcbNmRtDirs = 112,
vcbFilCnt = 114,
vcbDirCnt = 118,
vcbFndrInfo = 122,
vcbVCSize = 154,
vcbVBMCSiz = 156,
vcbCtlCSiz = 158,
vcbXTAlBlks = 160,
vcbCTAlBlks = 162,
vcbXTRef = 164,
vcbCTRef = 166,
vcbCtlBuf = 168,
vcbDirIDM = 172,
vcbOffsM = 176,
SIZEOF_VCB = 178
};
// Working directory control block
enum { // WDCBRec struct
wdVCBPtr = 0,
wdDirID = 4,
wdCatHint = 8,
wdProcID = 12,
SIZEOF_WDCBRec = 16
};
// File control block
enum { // FCBRec struct
fcbFlNm = 0,
fcbFlags = 4,
fcbTypByt = 5,
fcbSBlk = 6,
fcbEOF = 8,
fcbPLen = 12,
fcbCrPs = 16,
fcbVPtr = 20,
fcbBfAdr = 24,
fcbFlPos = 28,
fcbClmpSize = 30,
fcbBTCBPtr = 34,
fcbExtRec = 38,
fcbFType = 50,
fcbCatPos = 54,
fcbDirID = 58,
fcbCName = 62
};
enum { // ParsePathRec struct
ppNamePtr = 0,
ppStartOffset = 4,
ppComponentLength = 6,
ppMoreName = 8,
ppFoundDelimiter = 9,
SIZEOF_ParsePathRec = 10
};
enum { // HFSCIRec struct
compInterfMask = 0,
compInterfProc = 4,
log2PhyProc = 8,
stackTop = 12,
stackSize = 16,
stackPtr = 20,
idSector = 28,
SIZEOF_HFSCIRec = 40
};
enum { // DICIRec struct
maxVolNameLength = 8,
blockSize = 10,
SIZEOF_DICIRec = 24
};
enum { // FSDRec struct
fsdLink = 0,
fsdLength = 4,
fsdVersion = 6,
fileSystemFSID = 8,
fileSystemName = 10,
fileSystemSpec = 42,
fileSystemGlobalsPtr = 112,
fileSystemCommProc = 116,
fsdHFSCI = 132,
fsdDICI = 172,
SIZEOF_FSDRec = 196
};
#endif