; Version: 2.95 ; Created: Friday, October 20, 1989 at 9:16:12 PM ; ; File: FSEqu.a ; ; Assembler Interface to the Macintosh Libraries ; Copyright Apple Computer, Inc. 1984-1988 ; All Rights Reserved ; ; This file is used in these builds: Mac32 HcMac MacPP BigBang Sys606 ; ; Change History (most recent first): ; ; 8/3/93 BH Added VCB flags for use with manually ejectable volumes: ; vcbManEjBit and vcbFlushCritBit. ; <15> 8/14/91 JL changed lower case equ to EQU to match database output. ; <14> 1/30/91 gbm sab, #38: Change the Ôalready including this fileÕ variable to ; all uppercase (for security reasons) ; <13> 1/25/91 stb JDR: add constants missing in this file ; <12> 12/5/90 dnf Change <11> was with dba. ; <11> 12/5/90 dnf Add bHasBlankAccessPrivileges bit and volume meta buffer equates ; for GetVolParms. ; <10> 11/27/90 PWD Added equates for VolumeMount and its close relatives. ; <9> 11/27/90 PWD Add VolumeMount equates ; <8> 6/14/90 PK adding vcbAtBB, for sparing ; <5> 3/16/90 dnf Add FSSpec ; <4> 3/11/90 ngk Added more GetVolParms bits ; <2> 2/4/90 DNF Added fsSBNegate ; <1.3> 12/8/89 dnf Rolled in bit position equates for ioSpecBits in CatSearch ; <1.2> 8/2/89 CCH Added HVolumeParam record variant. ; <1.1> 2/6/89 CCH Added HParamBlock record. ; <1.0> 11/9/88 CCH Adding to EASE. ; ;-------------------------------------------------------------------- IF &TYPE('__INCLUDINGFSEQU__') = 'UNDEFINED' THEN __INCLUDINGFSEQU__ SET 1 SigWord EQU $D2D7 ; signature bytes (MFS volume) TSigWord EQU $4244 ; signature bytes (HFS volume) HFSBit EQU 9 ; defines HFS bit in trap word ;_______________________________________________________________________ ; fixed location labels: (equivalent of zero page) FSFCBLen EQU $3F6 ; HFS present flag / FCB size (-1 in old ROM) WDRfnMin EQU -32767 ; Lowest assigned WD RefNum WDRfnMax EQU -4096 ; largest possible WDrefnum HFSTagData EQU $38A ; Room for additional HFS tag data FCBSPtr EQU $34E ; ptr to FCBs DefVCBPtr EQU $352 ; pointer to default VCB VCBQHdr EQU $356 ; VCB queue header FSQHdr EQU $360 ; file system queue header (10 bytes) FSBusy EQU $360 ; non-zero when the file system is busy FSQHead EQU $362 ; ptr to 1st queued cmd: 0 when queue empty FSQTail EQU $366 ; ptr to last queue element ;bit positions for ioSpecBits values for CatSearch fsSBPartialName EQU 0 ; ioFileName points to a substring fsSBFullName EQU 1 ; ioFileName points to a match string fsSBFlAttrib EQU 2 ; search includes file attributes fsSBFlFndrInfo EQU 3 ; search includes finder info fsSBFlLgLen EQU 5 ; search includes data logical length fsSBFlPyLen EQU 6 ; search includes data physical length fsSBFlRLgLen EQU 7 ; search includes resource logical length fsSBFlRPyLen EQU 8 ; search includes resource physical length fsSBFlCrDat EQU 9 ; search includes create date fsSBFlMdDat EQU 10 ; search includes modification date fsSBFlBkDat EQU 11 ; search includes backup date fsSBFlXFndrInfo EQU 12 ; search includes extended finder info fsSBFlParID EQU 13 ; search includes file's parent ID fsSBNegate EQU 14 ; return all non-matches fsSBDrUsrWds EQU fsSBFlFndrInfo ; search includes directory finder info fsSBDrNmFls EQU 4 ; search includes directory valence fsSBDrCrDat EQU fsSBFlCrDat ; directory-named version of fsSBFlCrDat fsSBDrMdDat EQU fsSBFlMdDat ; directory-named version of fsSBFlMdDat fsSBDrBkDat EQU fsSBFlBkDat ; directory-named version of fsSBFlBkDat fsSBDrFndrInfo EQU fsSBFlXFndrInfo ; directory-named version of fsSBFlXFndrInfo fsSBDrParID EQU fsSBFlParID ; directory-named version of fsSBFlParID ;layout of the GetVolParms buffer and vMAttrib bit values vMVersion EQU 0 vMAttrib EQU 2 vMLocalHand EQU 6 vMServerAdr EQU 10 vMVolumeGrade EQU 14 vMForeignPrivID EQU 18 bLimitFCBs EQU 31 bLocalWList EQU 30 bNoMiniFndr EQU 29 bNoVNEdit EQU 28 bNoLclSync EQU 27 bTrshOffLine EQU 26 bNoSwitchTo EQU 25 bNoDeskItems EQU 20 bNoBootBlks EQU 19 bAccessCntl EQU 18 bNoSysDir EQU 17 bHasExtFSVol EQU 16 bHasOpenDeny EQU 15 bHasCopyFile EQU 14 bHasMoveRename EQU 13 bHasDesktopMgr EQU 12 bHasShortName EQU 11 bHasFolderLock EQU 10 bHasPersonalAccessPrivileges EQU 9 bHasUserGroupList EQU 8 bHasCatSearch EQU 7 bHasFileIDs EQU 6 bHasBtreeMgr EQU 5 bHasBlankAccessPrivileges EQU 4 ; Foreign Privilege Model Identifiers fsUnixPriv EQU 1 ; Authentication Constants kNoUserAuthentication EQU 1 kPassword EQU 2 kEncryptPassword EQU 3 kTwoWayEncryptPassword EQU 6 ; Version Release Stage Codes developStage EQU $20 alphaStage EQU $40 betaStage EQU $60 finalStage EQU $80 ; FSSpec record FSSpec RECORD 0, INCREMENT vRefNum ds.w 1 parID ds.l 1 name ds.b 64 size EQU *-FSSpec ENDR ;;; ;;; HParamBlockRec Record Common ;;; HParamBlockRec RECORD 0 qLink DS.L 1 qType DS.W 1 ioTrap DS.W 1 ioCmdAddr DS.L 1 ioCompletion DS.L 1 ioResult DS.W 1 ioNamePtr DS.L 1 ioVRefNum DS.W 1 ENDR ;;; ;;; HParamBlockRec.fileParam Record ;;; HFileParam RECORD 24 ioFRefNum DS.W 1 ioFVersNum DS.B 1 filler1 DS.B 1 ioFDirIndex DS.W 1 ioFlAttrib DS.B 1 ioFlVersNum DS.B 1 ioFlFndrInfo DS.L 4 ioDirID DS.L 1 ioFlStBlk DS.W 1 ioFlLgLen DS.L 1 ioFlPyLen DS.L 1 ioFlRStBlk DS.W 1 ioFlRLgLen DS.L 1 ioFlRPyLen DS.L 1 ioFlCrDat DS.L 1 ioFlMdDat DS.L 1 HFileParamSize EQU * ENDR ;;; ;;; HParamBlockRec.volumeParam Record ;;; HVolumeParam RECORD 24 filler2 DS.L 1 ioVolIndex DS.W 1 ioVCrDate DS.L 1 ioVLsMod DS.L 1 ioVAtrb DS.W 1 ioVNmFls DS.W 1 ioVBitMap DS.W 1 ioAllocPtr DS.W 1 ioVNmAlBlks DS.W 1 ioVAlBlkSiz DS.L 1 ioVClpSiz DS.L 1 ioAlBlSt DS.W 1 ioVNxtCNID DS.L 1 ioVFrBlk DS.W 1 ioVSigWord DS.W 1 ioVDrvInfo DS.W 1 ioVDRefNum DS.W 1 ioVFSID DS.W 1 ioVBkUp DS.L 1 ioVSeqNum DS.W 1 ioVWrCnt DS.L 1 ioVFilCnt DS.L 1 ioVDirCnt DS.L 1 ioVFndrInfo DS.L 8 HVolumeParamSize EQU * ENDR ; ; The VolumeMount trap equates ; ; The ioBuffer field should point to a structure that looks like the ; record AFPVolMountBlock, below. Note that the header is actually a series ; of offsets into a block that is different for each extfs. ; ; First you make a _GetVolMountInfoSize call on an existing volume, then allocate ; a buffer of the size that it requests, the _GetVolMountInfo, then later ; you pass the buffer modified by _GetVolMountInfo back and it mounts the volume. ; AFPVolMountInfo RECORD 0, INCREMENT length ds.w 1 media ds.l 1 flags ds.w 1 nbpInterval ds.b 1 nbpCount ds.b 1 uamType ds.w 1 ZoneOffset ds.w 1 serverNameOffset ds.w 1 volNameOffset ds.w 1 UserNameOffset ds.w 1 UserPaswdOffset ds.w 1 VolPaswdOffset ds.w 1 size EQU *-AFPVolMountInfo ENDR AFPVolMountBlock RECORD 0, INCREMENT header ds.b AFPVolMountInfo.size zoneName ds.b 33 serverName ds.b 32 volName ds.b 28 userName ds.b 32 userPassword ds.b 9 volPassword ds.b 9 size EQU *-AFPVolMountBlock ENDR ; ; Volume Control Block equates: (prefix: VCB) ; vcbFlags EQU 6 ; flags word is first word after header vcbManEjBit EQU 0 ; manual-eject bit: set if volume is in a manual-eject drive vcbFlushCritBit EQU 1 ; critical info bit: set if critical MDB information needs to ; be written (for manual-eject drives) vcbDirty EQU 15 ; flags dirty bit (tst.w tests,clr.b clears) ; first 64/104 bytes of VCB come directly from the directory master block vcbDInfoSt EQU 8 ; leave room for 6-byte queue header vcbDILen EQU 64 ; len of VCB data from master directory (from old FSEQU) vcbSigWord EQU 8 ; signature word vcbCrDate EQU 10 ; Creation date. vcbLsBkUp EQU 14 ; last backup date vcbLsMod EQU 14 ; alternate name for above vcbAtrb EQU 18 ; volume attributes. bit 15 = vol lock (1=locked) ; bit 7 = wr protect ; bit 6 = busy (1=busy) ; bit 5 = volume consistent if set ; (set for default on GetVolInfo) ; bits 0-4 = consistency prob ; 0: max CNID > VCBNxtCNID ; 1: file count error ; 2: file length error ; 3: catalog B*-tree loop ; 4: extent B*-tree loop vcbAtVOK EQU 8 ; attrib consistent volume flag (set on clean _Unmount) ; (bit 8 in word, bit 0 in top byte) vcbAtBB EQU 9 ; bad blocks have been spared in this volume (bit 1 of top byte) vcbWrProt EQU 7 ; attrib write-protected bit (tst.b ATRB+1 tests) vcbNmFls EQU 20 ; number files in MFS dir ; number files in HFS root dir vcbDirSt EQU 22 ; start dir (512-byte) block on diskette (MFS) vcbVBMSt EQU 22 ; same as VCBDirSt, starting block of allocation map (HFS) (overlaps) vcbBlLn EQU 24 ; length of dir in (512-byte) blocks (MFS) vcbAllocPtr EQU 24 ; same as VCBBlLn, Starting block for new file allocations vcbNmBlks EQU 26 ; number of blocks (of alloc size) this device vcbNmAlBlks EQU 26 ; (alternate label for a while) vcbAlBlkSiz EQU 28 ; num of bytes in an allocation block vcbClpSiz EQU 32 ; num of bytes to try to alloc as a clump vcbAlBlSt EQU 36 ; starting diskette (512-byte) block in block map vcbNxtCNID EQU 38 ; next free CNode identifier (HFS) vcbNxtFNum EQU 38 ; next free file number (MFS) vcbFreeBks EQU 42 ; number of free blocks on this volume vcbVN EQU 44 ; volume name (including name length byte) vcbMaxNam EQU 27 ; 27 byte max name length IOVDirLen EQU vcbVN-vcbCrDate ; Length of info to copy by GetVolInfo ; ; next 6 fields should be kept together ; vcbDrvNum EQU 72 ; drive number for this VCB vcbDRefNum EQU 74 ; driver refnum for this VCB vcbFSID EQU 76 ; ID of file system handling this volume vcbVRefNum EQU 78 ; unique refnum for this VCB vcbMAdr EQU 80 ; volume map address (FS volume) vcbBufAdr EQU 84 ; volume buffer address vcbMLen EQU 88 ; length of volume map (FS volume) vcbDirIndex EQU 90 ; directory index, block number used for vcbDirBlk EQU 92 ; GetFileInfo searches by index MFSVCBLen EQU 94 ; Length of MFS VCB ; ; Volume Control Block (VCB) extensions for HFS copied from Volume Info Block: ; vcbTDInfoSt EQU 94 ; Start of additional HFS info: vcbVolBkUp EQU 94 ; Date volume was last backed up vcbVSeqNum EQU 98 ; Index of volume in backup set vcbWrCnt EQU 100 ; Volume write count vcbXTClpSiz EQU 104 ; Extent B*-Tree clump size vcbCTClpSiz EQU 108 ; Catalog B*-Tree clump size vcbNmRtDirs EQU 112 ; Number of directories in root vcbFilCnt EQU 114 ; Total number of files in volume vcbDirCnt EQU 118 ; Total number of directories in volume vcbFndrInfo EQU 122 ; Finder info for volume vcbVCSize EQU 154 ; Volume cache size in blocks vcbVBMCSiz EQU 156 ; Bitmap cache size in blocks vcbCtlCSiz EQU 158 ; Extent and Catalog B*-Tree cache size (blocks) ; ; additional VCB information NOT copied from the MDB: ; vcbXTAlBks EQU 160 ; Size of extent B*-Tree in allocation blocks vcbCTAlBks EQU 162 ; Size of catalog B*-Tree in allocation blocks vcbXTRef EQU 164 ; File RefNum for Extent B*-Tree vcbCTRef EQU 166 ; File RefNum for Catalog B*-Tree vcbCtlBuf EQU 168 ; Pointer to extent desc. and catalog caches vcbDirIDM EQU 172 ; Directory last searched: 0 if invalid. vcbOffsM EQU 176 ; Offspring index at last search vcbLength EQU 178 ; VCB byte length ; File Control Block equates: (prefix: FCB) fcbModBit EQU 7 ; dirty bit for FCB entry in FCBMdRByt fcbOwnClp EQU 6 ; Clump-size specified flag (for truncate on close) fcbFilLck EQU 5 ; 1 if file is locked [write-protected] fcbShrWrt EQU 4 ; 1 if file is open for shared write access fcbWrtLck EQU 2 ; 1 if fork is reserved for write (byte range lock) fcbRscBit EQU 1 ; 1 if this is resource part (in FCBMdRByt) fcbWrtBit EQU 0 ; write permissions bit in FCBTypByt (1 if ok) fcbFlgMBit EQU 15 ; dirty bit in FCBFlags (word) fcbFlgCBit EQU 14 ; clump-size spec'd bit in FCBFlags (word) fcbFlgPBit EQU 13 ; Write-protected [file lock] bit in FCBFlags (word) fcbFlgSBit EQU 12 ; Shared-write bit in FCBFlags (word) fcbFlgLBit EQU 10 ; Byte range locked bit in FCBFlags (word) fcbFlgRBit EQU 9 ; resource bit in FCBFlags (word) fcbFlgWBit EQU 8 ; write permissions bit in FCBFlags (word) WrRsMask EQU $0300 ; rsrc/reg, write permissions mask PermMask EQU $1300 ; all bits related to access arbitration fcbFlNm EQU 0 ; FCB file number. Non-zero marks FCB used. fcbFlags EQU 4 ; FCB flags fcbMdRByt EQU 4 ; mod, write permissions, resource byte fcbTypByt EQU 5 ; type byte fcbSBlk EQU 6 ; File start block (in alloc size blks) fcbEOF EQU 8 ; logical length or EOF in bytes fcbPLen EQU 12 ; Physical file length in bytes fcbCrPs EQU 16 ; current position within file. ioFIStILen EQU 20 ; Length to straight copy from FCB on _GetFCBInfo fcbVPtr EQU 20 ; Absolute pointer to the corresponding VCB fcbBfAdr EQU 24 ; file's buffer address. fcbFlPos EQU 28 ; directory block this file is in MFSFCBLen EQU 30 ; Length of MFS FCB structure ; ; FCB Extensions for HFS: ; fcbClmpSize EQU 30 ; Number of bytes per clump fcbBTCBPtr EQU 34 ; pointer to B*-Tree control block for this file fcbExtRec EQU 38 ; First 3 file extents fcbFType EQU 50 ; file's 4 Finder Type bytes fcbCatPos EQU 54 ; Catalog hint for use on Close fcbDirID EQU 58 ; Parent Directory ID fcbCName EQU 62 ; CName of open file fcbEntLen EQU 94 ; Length of each element in the FCB array ;_______________________________________________________________________ ; ; Directory master block entries: (Prefix Dr) ; drSigWord EQU 0 ; signature word drCrDate EQU 2 ; Creation date. drLsMod EQU 6 ; last backup date drAtrb EQU 10 ; volume attributes. bit 15=write(locked=1) drNmFls EQU 12 ; number files in directory drDirSt EQU 14 ; start dir (512-byte) block on diskette drVBMSt EQU 14 ; starting sector of allocation map (overlaps) drBlLn EQU 16 ; length of dir in (512-byte) blocks drAllocPtr EQU 16 ; Start of next allocation search drNmAlBlks EQU 18 ; number of blocks (of alloc size) this volume drAlBlkSiz EQU 20 ; min num of bytes to allocate (must be 512 mult) drClpSiz EQU 24 ; num of bytes to try to alloc as a clump drAlBlSt EQU 28 ; starting diskette (512-byte) block in block map drNxtCNID EQU 30 ; Next CNode identifier drNxtFNum EQU 30 ; next free file number drFreeBks EQU 34 ; number of free blocks on this volume drVN EQU 36 ; volume name (including name length) MpTblStr EQU 64 ; byte start position of map table within ; master dir block (MFS volume) ; ; Master Directory Block extensions for HFS: ; drTInfoSt EQU 64 drVolBkup EQU 64 ; Date of last volume backup (overlaps) drVSeqNum EQU 68 ; Sequence number of volume within backup set drWrCnt EQU 70 ; Volume write count drXTClpSiz EQU 74 ; Extent B*-Tree clump size drCTClpSiz EQU 78 ; Catalog B*-Tree clump size drNmRtDirs EQU 82 ; Number of subdirectories in the root drFilCnt EQU 84 ; Total number of files in volume drDirCnt EQU 88 ; Total number of directories in volume drFndrInfo EQU 92 ; Finder info for volume drVCSize EQU 124 ; Volume cache size drVBMCSize EQU 126 ; Volume Bitmap cache size drCtlCSize EQU 128 ; Size of common volume cache ; ; length of additional VCB data from master directory block for HFS volumes: ; vcbTDILen EQU 130-drTInfoSt ; ; Information not copied into VCB: ; drXTFlSize EQU 130 ; Length of extent B*-Tree (LEOF and PEOF) drXTExtRec EQU 134 ; First (and only) extent-tree extent record drCTFlSize EQU 146 ; Length of catalog B*-Tree (LEOF and PEOF) drCTExtRec EQU 150 ; First catalog extent record LenMDB EQU 162 ; length of full MDB drUsrInfo EQU 256 ; User information for volume ;_______________________________________________________________________ ; ; File Entry equates: (prefix: Fl) ; (delete indication may be needed; for now just check VCB del fnum . . .) flWrtFlag EQU 0 ; write-allowed bit in flags byte (0 if allowed) flTypMask EQU $FE ; (user file-type in bits 1-7) flFlags EQU 0 ; bit 7=1 (used), bit 0=file lock flag flTyp EQU 1 ; file type (used as a name extension) flUsrWds EQU 2 ; user words for file. (16 bytes) flFlNum EQU 18 ; file number flStBlk EQU 22 ; Start file block (alloc blk size)(0000 if none) flLgLen EQU 24 ; File logical length in bytes (EOF) flPyLen EQU 28 ; File physical length in bytes flRStBlk EQU 32 ; Start file block, resource fork (0000 if none) flRLgLen EQU 34 ; File logical length (EOF), resource fork flRPyLen EQU 38 ; File physical length, resource fork flCrDat EQU 42 ; File creation date & time (32 bits in seconds) flMdDat EQU 46 ; last modification date & time (32 bits in seconds) flNam EQU 50 ; file name, starting with length byte flNTLen EQU 50 ; length of each file entry, excluding name ;_______________________________________________________________________ ; ; Working Directory Control Block equates: (prefix: WD) ; WDVCBPtr EQU 0 ; pointer to VCB of residing WD (longint) WDDirID EQU 4 ; WD directory Identification (longint) WDCatHint EQU 8 ; Catalog node hint WDProcID EQU 12 ; process that created WD WDCBLen EQU 16 ; Length of a WDCB ;_______________________________________________________________________ ; ; Poor Man's Search Path equates: (prefix: SP) ; PMSPHook EQU -6 ; Hook for PMSP modification PMSPIndx EQU -2 ; Index to PMSP index from start of PMSP SPHdrSize EQU 6 ; Size of negative-offset header SPVRefNum EQU 0 ; Offset to VRefNum in PMSP entry SPDirID EQU 2 ; Offset to Directory ID in PMSP entry SPEntLen EQU 6 ; Length of a PMSP entry MaxDVCnt EQU 8 ; Leave room for 8 default VRefNums PMSPSize EQU MaxDVCnt*SPEntLen+SPHdrSize+2 ; Size of PMSP table +header + index word ; 31744 = $7C00, a nice round number close to ; (32767*1000)/1024, which is about the largest ; free space unsuspecting, decimal-K minded apps ; might be expected to handle. AlBlkLim EQU 31744 ENDIF ; ...already included