mirror of
https://github.com/kanjitalk755/macemu.git
synced 2024-06-27 01:29:29 +00:00
560 lines
11 KiB
C
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
|