home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 25 / AACD 25.iso / AACD / Utilities / BasiliskII / src / include / extfs_defs.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-02-02  |  11.3 KB  |  560 lines

  1. /*
  2.  *  extfs_defs.h - MacOS types and structures for external file system
  3.  *
  4.  *  Basilisk II (C) 1997-2001 Christian Bauer
  5.  *
  6.  *  This program is free software; you can redistribute it and/or modify
  7.  *  it under the terms of the GNU General Public License as published by
  8.  *  the Free Software Foundation; either version 2 of the License, or
  9.  *  (at your option) any later version.
  10.  *
  11.  *  This program is distributed in the hope that it will be useful,
  12.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  *  GNU General Public License for more details.
  15.  *
  16.  *  You should have received a copy of the GNU General Public License
  17.  *  along with this program; if not, write to the Free Software
  18.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19.  */
  20.  
  21. #ifndef EXTFS_DEFS_H
  22. #define EXTFS_DEFS_H
  23.  
  24. #include "macos_util.h"
  25.  
  26. // Gestalt selectors
  27. enum {
  28.     gestaltFSAttr                = FOURCC('f','s',' ',' '),
  29.     gestaltFullExtFSDispatching    = 0,
  30.     gestaltHasFSSpecCalls        = 1,
  31.     gestaltHasFileSystemManager    = 2,
  32.     gestaltFSMDoesDynamicLoad    = 3,
  33.     gestaltFSSupports4GBVols    = 4,
  34.     gestaltFSSupports2TBVols    = 5,
  35.     gestaltHasExtendedDiskInit    = 6,
  36.     gestaltDTMgrSupportsFSM        = 7
  37. };
  38.  
  39. enum {
  40.     gestaltFSMVersion            = FOURCC('f','s','m',' ')
  41. };
  42.  
  43. // File attributes
  44. enum {
  45.     faLocked    = 0x01,
  46.     faRFOpen    = 0x04,
  47.     faDFOpen    = 0x08,
  48.     faIsDir        = 0x10,
  49.     faOpen        = 0x80
  50. };
  51.  
  52. // Volume attributes
  53. enum {
  54.     vaBusy = 0x40,
  55.     vaHardLock = 0x80,
  56.     vaSoftLock = 0x8000
  57. };
  58.  
  59. // vMAttrib (GetVolParms) constants
  60. enum {
  61.     kLimitFCBs                    = 1 << 31,
  62.     kLocalWList                    = 1 << 30,
  63.     kNoMiniFndr                    = 1 << 29,
  64.     kNoVNEdit                    = 1 << 28,
  65.     kNoLclSync                    = 1 << 27,
  66.     kTrshOffLine                = 1 << 26,
  67.     kNoSwitchTo                    = 1 << 25,
  68.     kNoDeskItems                = 1 << 20,
  69.     kNoBootBlks                    = 1 << 19,
  70.     kAccessCntl                    = 1 << 18,
  71.     kNoSysDir                    = 1 << 17,
  72.     kHasExtFSVol                = 1 << 16,
  73.     kHasOpenDeny                = 1 << 15,
  74.     kHasCopyFile                = 1 << 14,
  75.     kHasMoveRename                = 1 << 13,
  76.     kHasDesktopMgr                = 1 << 12,
  77.     kHasShortName                = 1 << 11,
  78.     kHasFolderLock                = 1 << 10,
  79.     kHasPersonalAccessPrivileges = 1 << 9,
  80.     kHasUserGroupList            = 1 << 8,
  81.     kHasCatSearch                = 1 << 7,
  82.     kHasFileIDs                    = 1 << 6,
  83.     kHasBTreeMgr                = 1 << 5,
  84.     kHasBlankAccessPrivileges    = 1 << 4,
  85.     kSupportsAsyncRequests        = 1 << 3
  86. };
  87.  
  88. enum {
  89.     fsUsrCNID                    = 16,
  90.     kHFSBit                        = 9,
  91.     kHFSMask                    = 0x0200,
  92.     kAsyncBit                    = 10,
  93.     kAsyncMask                    = 0x0400
  94. };
  95.  
  96. // HFSCIProc selectCode values
  97. enum {
  98.     kFSMOpen                    = 0xA000,
  99.     kFSMClose                    = 0xA001,
  100.     kFSMRead                    = 0xA002,
  101.     kFSMWrite                    = 0xA003,
  102.     kFSMGetVolInfo                = 0xA007,
  103.     kFSMCreate                    = 0xA008,
  104.     kFSMDelete                    = 0xA009,
  105.     kFSMOpenRF                    = 0xA00A,
  106.     kFSMRename                    = 0xA00B,
  107.     kFSMGetFileInfo                = 0xA00C,
  108.     kFSMSetFileInfo                = 0xA00D,
  109.     kFSMUnmountVol                = 0xA00E,
  110.     kFSMMountVol                = 0xA00F,
  111.     kFSMAllocate                = 0xA010,
  112.     kFSMGetEOF                    = 0xA011,
  113.     kFSMSetEOF                    = 0xA012,
  114.     kFSMFlushVol                = 0xA013,
  115.     kFSMGetVol                    = 0xA014,
  116.     kFSMSetVol                    = 0xA015,
  117.     kFSMEject                    = 0xA017,
  118.     kFSMGetFPos                    = 0xA018,
  119.     kFSMOffline                    = 0xA035,
  120.     kFSMSetFilLock                = 0xA041,
  121.     kFSMRstFilLock                = 0xA042,
  122.     kFSMSetFilType                = 0xA043,
  123.     kFSMSetFPos                    = 0xA044,
  124.     kFSMFlushFile                = 0xA045,
  125.     kFSMOpenWD                    = 0x0001,
  126.     kFSMCloseWD                    = 0x0002,
  127.     kFSMCatMove                    = 0x0005,
  128.     kFSMDirCreate                = 0x0006,
  129.     kFSMGetWDInfo                = 0x0007,
  130.     kFSMGetFCBInfo                = 0x0008,
  131.     kFSMGetCatInfo                = 0x0009,
  132.     kFSMSetCatInfo                = 0x000A,
  133.     kFSMSetVolInfo                = 0x000B,
  134.     kFSMLockRng                    = 0x0010,
  135.     kFSMUnlockRng                = 0x0011,
  136.     kFSMXGetVolInfo                = 0x0012,
  137.     kFSMCreateFileIDRef            = 0x0014,
  138.     kFSMDeleteFileIDRef            = 0x0015,
  139.     kFSMResolveFileIDRef        = 0x0016,
  140.     kFSMExchangeFiles            = 0x0017,
  141.     kFSMCatSearch                = 0x0018,
  142.     kFSMOpenDF                    = 0x001A,
  143.     kFSMMakeFSSpec                = 0x001B,
  144.     kFSMDTGetPath                = 0x0020,
  145.     kFSMDTCloseDown                = 0x0021,
  146.     kFSMDTAddIcon                = 0x0022,
  147.     kFSMDTGetIcon                = 0x0023,
  148.     kFSMDTGetIconInfo            = 0x0024,
  149.     kFSMDTAddAPPL                = 0x0025,
  150.     kFSMDTRemoveAPPL            = 0x0026,
  151.     kFSMDTGetAPPL                = 0x0027,
  152.     kFSMDTSetComment            = 0x0028,
  153.     kFSMDTRemoveComment            = 0x0029,
  154.     kFSMDTGetComment            = 0x002A,
  155.     kFSMDTFlush                    = 0x002B,
  156.     kFSMDTReset                    = 0x002C,
  157.     kFSMDTGetInfo                = 0x002D,
  158.     kFSMDTOpenInform            = 0x002E,
  159.     kFSMDTDelete                = 0x002F,
  160.     kFSMGetVolParms                = 0x0030,
  161.     kFSMGetLogInInfo            = 0x0031,
  162.     kFSMGetDirAccess            = 0x0032,
  163.     kFSMSetDirAccess            = 0x0033,
  164.     kFSMMapID                    = 0x0034,
  165.     kFSMMapName                    = 0x0035,
  166.     kFSMCopyFile                = 0x0036,
  167.     kFSMMoveRename                = 0x0037,
  168.     kFSMOpenDeny                = 0x0038,
  169.     kFSMOpenRFDeny                = 0x0039,
  170.     kFSMGetXCatInfo                = 0x003A,
  171.     kFSMGetVolMountInfoSize        = 0x003F,
  172.     kFSMGetVolMountInfo            = 0x0040,
  173.     kFSMVolumeMount                = 0x0041,
  174.     kFSMShare                    = 0x0042,
  175.     kFSMUnShare                    = 0x0043,
  176.     kFSMGetUGEntry                = 0x0044,
  177.     kFSMGetForeignPrivs            = 0x0060,
  178.     kFSMSetForeignPrivs            = 0x0061
  179. };
  180.  
  181. // UTDetermineVol status values
  182. enum {
  183.     dtmvError                    = 0,
  184.     dtmvFullPathname            = 1,
  185.     dtmvVRefNum                    = 2,
  186.     dtmvWDRefNum                = 3,
  187.     dtmvDriveNum                = 4,
  188.     dtmvDefault                    = 5    
  189. };
  190.  
  191. // Miscellaneous constants used by FSM
  192. enum {
  193.     fsdVersion1                    = 1,
  194.     fsmIgnoreFSID                = 0xFFFE,
  195.     fsmGenericFSID                = 0xFFFF
  196. };
  197.  
  198. // compInterfMask bits common to all FSM components
  199. enum {
  200.     fsmComponentEnableBit        = 31,
  201.     fsmComponentEnableMask        = (long)0x80000000,
  202.     fsmComponentBusyBit            = 30,
  203.     fsmComponentBusyMask        = 0x40000000
  204. };
  205.  
  206. // compInterfMask bits specific to HFS component
  207. enum {
  208.     hfsCIDoesHFSBit                = 23,
  209.     hfsCIDoesHFSMask            = 0x00800000,
  210.     hfsCIDoesAppleShareBit        = 22,
  211.     hfsCIDoesAppleShareMask        = 0x00400000,
  212.     hfsCIDoesDeskTopBit            = 21,
  213.     hfsCIDoesDeskTopMask        = 0x00200000,
  214.     hfsCIDoesDynamicLoadBit        = 20,
  215.     hfsCIDoesDynamicLoadMask    = 0x00100000,
  216.     hfsCIResourceLoadedBit        = 19,
  217.     hfsCIResourceLoadedMask        = 0x00080000,
  218.     hfsCIHasHLL2PProcBit        = 18,
  219.     hfsCIHasHLL2PProcMask        = 0x00040000,
  220.     hfsCIWantsDTSupportBit        = 17,
  221.     hfsCIWantsDTSupportMask        = 0x00020000
  222. };
  223.  
  224. // FCBRec.fcbFlags bits
  225. enum {
  226.     fcbWriteBit                    = 0,
  227.     fcbWriteMask                = 0x01,
  228.     fcbResourceBit                = 1,
  229.     fcbResourceMask                = 0x02,
  230.     fcbWriteLockedBit            = 2,
  231.     fcbWriteLockedMask            = 0x04,
  232.     fcbSharedWriteBit            = 4,
  233.     fcbSharedWriteMask            = 0x10,
  234.     fcbFileLockedBit            = 5,
  235.     fcbFileLockedMask            = 0x20,
  236.     fcbOwnClumpBit                = 6,
  237.     fcbOwnClumpMask                = 0x40,
  238.     fcbModifiedBit                = 7,
  239.     fcbModifiedMask                = 0x80
  240. };
  241.  
  242. // InformFSM messages
  243. enum {
  244.     fsmNopMessage                = 0,
  245.     fsmDrvQElChangedMessage        = 1,
  246.     fsmGetFSIconMessage            = 2
  247. };
  248.  
  249. // Messages passed to the fileSystemCommProc
  250. enum {
  251.     ffsNopMessage                = 0,
  252.     ffsGetIconMessage            = 1,
  253.     ffsIDDiskMessage            = 2,
  254.     ffsLoadMessage                = 3,
  255.     ffsUnloadMessage            = 4,
  256.     ffsIDVolMountMessage        = 5,
  257.     ffsInformMessage            = 6,
  258.     ffsGetIconInfoMessage        = 7
  259. };
  260.  
  261. // Error codes from FSM functions
  262. enum {
  263.     fsmFFSNotFoundErr            = -431,
  264.     fsmBusyFFSErr                = -432,
  265.     fsmBadFFSNameErr            = -433,
  266.     fsmBadFSDLenErr                = -434,
  267.     fsmDuplicateFSIDErr            = -435,
  268.     fsmBadFSDVersionErr            = -436,
  269.     fsmNoAlternateStackErr        = -437,
  270.     fsmUnknownFSMMessageErr        = -438
  271. };
  272.  
  273. // paramBlock for ffsGetIconMessage and fsmGetFSIconMessage
  274. enum {
  275.     kLargeIcon = 1
  276. };
  277.  
  278. enum {    // FSMGetIconRec struct
  279.     iconBufferPtr = 2,
  280.     requestSize = 6,
  281.     actualSize = 10,
  282.     iconType = 14,
  283.     isEjectable = 15,
  284.     driveQElemPtr = 16,
  285.     fileSystemSpecPtr = 20
  286. };
  287.  
  288. enum {    // VolumeMountInfoHeader struct
  289.     vmiLength = 0,
  290.     vmiMedia = 2,
  291.     vmiFlags = 6,
  292.     SIZEOF_VolumeMountInfoHeader = 8
  293. };
  294.  
  295. enum {    // GetVolParmsInfoBuffer struct
  296.     vMVersion = 0,
  297.     vMAttrib = 2,
  298.     vMLocalHand = 6,
  299.     vMServerAdr = 10,
  300.     vMVolumeGrade = 14,
  301.     vMForeignPrivID = 18,
  302.     SIZEOF_GetVolParmsInfoBuffer = 20
  303. };
  304.  
  305. // Finder Flags
  306. enum {
  307.     kIsOnDesk                    = 0x0001,
  308.     kColor                        = 0x000E,
  309.     kIsShared                    = 0x0040,
  310.     kHasBeenInited                = 0x0100,
  311.     kHasCustomIcon                = 0x0400,
  312.     kIsStationery                = 0x0800,
  313.     kNameLocked                    = 0x1000,
  314.     kHasBundle                    = 0x2000,
  315.     kIsInvisible                = 0x4000,
  316.     kIsAlias                    = 0x8000
  317. };
  318.  
  319. enum {    // FInfo struct
  320.     fdType = 0,
  321.     fdCreator = 4,
  322.     fdFlags = 8,
  323.     fdLocation = 10,
  324.     fdFldr = 14,
  325.     SIZEOF_FInfo = 16
  326. };
  327.  
  328. enum {    // FXInfo struct
  329.     fdIconID = 0,
  330.     fdUnused = 2,
  331.     fdScript = 8,
  332.     fdXFlags = 9,
  333.     fdComment = 10,
  334.     fdPutAway = 12,
  335.     SIZEOF_FXInfo = 16
  336. };
  337.  
  338. enum {    // HFileParam/HFileInfo struct
  339.     ioFRefNum = 24,
  340.     ioFVersNum = 26,
  341.     ioFDirIndex = 28,
  342.     ioFlAttrib = 30,
  343.     ioACUser = 31,
  344.     ioFlFndrInfo = 32,
  345.     ioDirID = 48,
  346.     ioFlStBlk = 52,
  347.     ioFlLgLen = 54,
  348.     ioFlPyLen = 58,
  349.     ioFlRStBlk = 62,
  350.     ioFlRLgLen = 64,
  351.     ioFlRPyLen = 68,
  352.     ioFlCrDat = 72,
  353.     ioFlMdDat = 76,
  354.     ioFlBkDat = 80,
  355.     ioFlXFndrInfo = 84,
  356.     ioFlParID = 100,
  357.     ioFlClpSiz = 104
  358. };
  359.  
  360. enum {    // DInfo struct
  361.     frRect = 0,
  362.     frFlags = 8,
  363.     frLocation = 10,
  364.     frView = 14,
  365.     SIZEOF_DInfo = 16
  366. };
  367.  
  368. enum {    // DXInfo struct
  369.     frScroll = 0,
  370.     frOpenChain = 4,
  371.     frScript = 8,
  372.     frXFlags = 9,
  373.     frComment = 10,
  374.     frPutAway = 12,
  375.     SIZEOF_DXInfo = 16
  376. };
  377.  
  378. enum {    // HDirParam/DirInfo struct
  379.     ioDrUsrWds = 32,
  380.     ioDrDirID = 48,
  381.     ioDrNmFls = 52,
  382.     ioDrCrDat = 72,
  383.     ioDrMdDat = 76,
  384.     ioDrBkDat = 80,
  385.     ioDrFndrInfo = 84,
  386.     ioDrParID = 100
  387. };
  388.  
  389. enum {    // WDParam struct
  390.     ioWDIndex = 26,
  391.     ioWDProcID = 28,
  392.     ioWDVRefNum = 32,
  393.     ioWDDirID = 48,
  394.     SIZEOF_WDParam = 52
  395. };
  396.  
  397. enum {    // HVolumeParam struct
  398.     ioVolIndex = 28,
  399.     ioVCrDate = 30,
  400.     ioVLsMod = 34,
  401.     ioVAtrb = 38,
  402.     ioVNmFls = 40,
  403.     ioVBitMap = 42,
  404.     ioAllocPtr = 44,
  405.     ioVNmAlBlks = 46,
  406.     ioVAlBlkSiz = 48,
  407.     ioVClpSiz = 52,
  408.     ioAlBlSt = 56,
  409.     ioVNxtCNID = 58,
  410.     ioVFrBlk = 62,
  411.     ioVSigWord = 64,
  412.     ioVDrvInfo = 66,
  413.     ioVDRefNum = 68,
  414.     ioVFSID = 70,
  415.     ioVBkUp = 72,
  416.     ioVSeqNum = 76,
  417.     ioVWrCnt = 78,
  418.     ioVFilCnt = 82,
  419.     ioVDirCnt = 86,
  420.     ioVFndrInfo = 90
  421. };
  422.  
  423. enum {    // CMovePBRec struct
  424.     ioNewName = 28,
  425.     ioNewDirID = 36
  426. };
  427.  
  428. enum {    // FCBPBRec struct
  429.     ioFCBIndx = 28,
  430.     ioFCBFlNm = 32,
  431.     ioFCBFlags = 36,
  432.     ioFCBStBlk = 38,
  433.     ioFCBEOF = 40,
  434.     ioFCBPLen = 44,
  435.     ioFCBCrPs = 48,
  436.     ioFCBVRefNum = 52,
  437.     ioFCBClpSiz = 54,
  438.     ioFCBParID = 58
  439. };
  440.  
  441. // Volume control block
  442. enum {    // VCB struct
  443.     vcbFlags = 6,
  444.     vcbSigWord = 8,
  445.     vcbCrDate = 10,
  446.     vcbLsMod = 14,
  447.     vcbAtrb = 18,
  448.     vcbNmFls = 20,
  449.     vcbVBMSt = 22,
  450.     vcbAllocPtr = 24,
  451.     vcbNmAlBlks = 26,
  452.     vcbAlBlkSiz = 28,
  453.     vcbClpSiz = 32,
  454.     vcbAlBlSt = 36,
  455.     vcbNxtCNID = 38,
  456.     vcbFreeBks = 42,
  457.     vcbVN = 44,
  458.     vcbDrvNum = 72,
  459.     vcbDRefNum = 74,
  460.     vcbFSID = 76,
  461.     vcbVRefNum = 78,
  462.     vcbMAdr = 80,
  463.     vcbBufAdr = 84,
  464.     vcbMLen = 88,
  465.     vcbDirIndex = 90,
  466.     vcbDirBlk = 92,
  467.     vcbVolBkUp = 94,
  468.     vcbVSeqNum = 98,
  469.     vcbWrCnt = 100,
  470.     vcbXTClpSiz = 104,
  471.     vcbCTClpSiz = 108,
  472.     vcbNmRtDirs = 112,
  473.     vcbFilCnt = 114,
  474.     vcbDirCnt = 118,
  475.     vcbFndrInfo = 122,
  476.     vcbVCSize = 154,
  477.     vcbVBMCSiz = 156,
  478.     vcbCtlCSiz = 158,
  479.     vcbXTAlBlks = 160,
  480.     vcbCTAlBlks = 162,
  481.     vcbXTRef = 164,
  482.     vcbCTRef = 166,
  483.     vcbCtlBuf = 168,
  484.     vcbDirIDM = 172,
  485.     vcbOffsM = 176,
  486.     SIZEOF_VCB = 178
  487. };
  488.  
  489. // Working directory control block
  490. enum {    // WDCBRec struct
  491.     wdVCBPtr = 0,
  492.     wdDirID = 4,
  493.     wdCatHint = 8,
  494.     wdProcID = 12,
  495.     SIZEOF_WDCBRec = 16
  496. };
  497.  
  498. // File control block
  499. enum {    // FCBRec struct
  500.     fcbFlNm = 0,
  501.     fcbFlags = 4,
  502.     fcbTypByt = 5,
  503.     fcbSBlk = 6,
  504.     fcbEOF = 8,
  505.     fcbPLen = 12,
  506.     fcbCrPs = 16,
  507.     fcbVPtr = 20,
  508.     fcbBfAdr = 24,
  509.     fcbFlPos = 28,
  510.     fcbClmpSize = 30,
  511.     fcbBTCBPtr = 34,
  512.     fcbExtRec = 38,
  513.     fcbFType = 50,
  514.     fcbCatPos = 54,
  515.     fcbDirID = 58,
  516.     fcbCName = 62
  517. };
  518.  
  519. enum {    // ParsePathRec struct
  520.     ppNamePtr = 0,
  521.     ppStartOffset = 4,
  522.     ppComponentLength = 6,
  523.     ppMoreName = 8,
  524.     ppFoundDelimiter = 9,
  525.     SIZEOF_ParsePathRec = 10
  526. };
  527.  
  528. enum {    // HFSCIRec struct
  529.     compInterfMask = 0,
  530.     compInterfProc = 4,
  531.     log2PhyProc = 8,
  532.     stackTop = 12,
  533.     stackSize = 16,
  534.     stackPtr = 20,
  535.     idSector = 28,
  536.     SIZEOF_HFSCIRec = 40
  537. };
  538.  
  539. enum {    // DICIRec struct
  540.     maxVolNameLength = 8,
  541.     blockSize = 10,
  542.     SIZEOF_DICIRec = 24
  543. };
  544.  
  545. enum {    // FSDRec struct
  546.     fsdLink = 0,
  547.     fsdLength = 4,
  548.     fsdVersion = 6,
  549.     fileSystemFSID = 8,
  550.     fileSystemName = 10,
  551.     fileSystemSpec = 42,
  552.     fileSystemGlobalsPtr = 112,
  553.     fileSystemCommProc = 116,
  554.     fsdHFSCI = 132,
  555.     fsdDICI = 172,
  556.     SIZEOF_FSDRec = 196
  557. };
  558.  
  559. #endif
  560.