sys7.1-doc-wip/Interfaces/AIncludes/FSPrivate.a

539 lines
22 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
; Hacks to match MacOS (most recent first):
;
; <Sys7.1> 8/3/92 Reverted <SM2>
; 9/2/94 SuperMario ROM source dump (header preserved below)
;
; Version: 2.96
; Created: Friday, October 20, 1989 at 9:18:00 PM
;
; File: FSPrivate.a
;
; Assembler Interface to the Macintosh Libraries
; Copyright Apple Computer, Inc. 1984-1990
; All Rights Reserved
;
;
; Change History (most recent first):
;
; <SM2> 4/14/92 kc Change LenBTCB from 54 to 74. Change hfsStkLen from 1280 to
; 1792.
; <13> 1/30/91 gbm sab, #38: Change the already including this file variable to
; all uppercase (for security reasons)
; <12> 8/28/90 KST Make FCFree work as FCtrash on 6.0 RamCache
; <11> 8/27/90 KST Adding new FlushCache and RelBlock option flags for the new
; DiskCache interface.
; <10> 7/18/90 KST Adding a bit EQU for RamCache.
; <7> 4/11/90 KST Revoke change in (6), btMaxDepth is reset to 8 so that we will
; not screw up ROM in patches to the ROM. RAM B*tree Manager will
; use its own set of EQUs in BtreePrivate.a.
; <6> 4/4/90 KST btMaxDepth has been changed from 8 to 16.
; <4> 2/4/90 DNF Move new private information into FileMgrPrivate.a
; <1.2> 11/15/89 EKN Minor twiddles to fidSwapVars offsets.
; <1.1> 9/29/89 EKN Added File threads and errors for it
; <1.0> 11/9/88 CCH Adding to EASE.
; <•1.1> 9/14/88 CCH Updated EASE with the current rev of this file.
;
;--------------------------------------------------------------------
;
; The following information was formerly in "private" files that were
; not released to the general developer community.
;
; The information in this file is not needed for normal application
; development. These equates and macros were necessary for development
; of the Macintosh ToolBox and Operating System, and are likely to be
; dependent on their current implementation. Use of any information
; in this file is likely to cause your software to fail on future
; versions of Macintosh system software or hardware.
;
; Apple Developer Support will not support any use of the following
; information.
;
; In order to prevent any "accidental" use of this information, it has
; been disabled using the conditional-assembly variable defined below.
; If you change this to a non-zero value, you're on your own.
;--------------------------------------------------------------------
IF &TYPE('__INCLUDINGFSPRIVATE__') = 'UNDEFINED' THEN
__INCLUDINGFSPRIVATE__ SET 1
IF (&TYPE('FSPNonPortable') = 'UNDEFINED') THEN
FSPNonPortable EQU 0
ENDIF
HFSDebug EQU 0 ; include HFS debug traps if 1
IF FSPNonPortable THEN ;begin exclusion of private information
; Function: This file contains the complete File System equates for MFS and HFS. It is
; an extension of the equates defined by old FSEQU.a
;
; Constant definitions
;
btsPrBlk EQU 12 ; bits per block in volume map (FS volume)
; ExtendFile option flags
EFContig EQU 1 ; force contiguous allocation
EFAll EQU 0 ; allocate all requested bytes or none
kEFContig EQU 2 ; corresponding constants for MOVEQ
kEFAll EQU 1
; TruncateFile option flags
TFTrunExt EQU 0 ; truncate to the extent containing new PEOF
kTFTrunExt EQU 1 ; corresponding constants for MOVEQ
MACRO ; HFS debugging halt trap
_HFSDebug
IF HFSDebug THEN ; only included when actually debugging
IF &Syslst[1]<>'' THEN
DC.W ($F000+&Syslst[1]) ; in case a trap sub-code is specified
ELSE
DC.W ($A9FF) ; User break
ENDIF
ENDIF
ENDM
MACRO ; HFS error halt trap
_HFSDSErr
_HFSDebug &Syslst[1] ; Pause first if debugging
MOVEQ #DSFSErr,D0 ; Error code = 27, Fatal File System Error
_SysError ; Stop the engines
ENDM
ENDIF ;end exclusion of private information
strtDir EQU 2 ; directory master block location (block #)
bufSiz EQU 512 ; standard file system buffer size in bytes
hdrSiz EQU 10 ; size of header prefixed to buffer
bufModBit EQU 7 ; dirty bit in high byte of buf tag word
bufFNum EQU -10 ; offset from buf start to file number longword
bufFlags EQU -6 ; offset from buf start to file flags word
bufFBlk EQU -4 ; offset from buf start to file block word
bufTag EQU -2 ; offset from buf start to tag word
nxFreeFN EQU 16 ; next free file number
nxFreeDID EQU 3 ; next free directory id
alBlkSize EQU 512 ; default allocation block size (1 sector, in bytes)
clpSize EQU 4*512 ; default allocation clump size (in bytes)
maxHFSTrap EQU 17 ; Highest TFS trap dispatch index
;_______________________________________________________________________
; fixed location labels: (equivalent of zero page)
hfsVars EQU $36A ; Start of TFS variables in RAM version
; (previously RgSvArea)
hfsTmpSize EQU 16 ; Additional temporary space for TFS
hfsStkLen EQU 1280 ; Allocate a decent-sized chunk of memory <SM2> <Sys7.1>
HFSStkTop EQU $36A ; Temporary location of pointer to top of Stack
HFSStkPtr EQU $36E ; Temporary location of TFS Stack pointer
WDCBsPtr EQU $372 ; Working Directory queue header
HFSFlags EQU $376 ; Internal TFS flags
DefVRefNum EQU $384 ; Default volume's VRefNum (COULD BE WDRefNum!)
;
; Flag bits in HFSFlags byte:
;
hfsReq EQU 0 ; Set if request is specific to TFS
dirCN EQU 1 ; Set if a CNode is a directory
hfsContd EQU 7 ; Set if Async trap is continued
noPMSP EQU 6 ; Set to disable PMSP completely (status flag)
skipPMSP EQU 5 ; Set to skip PMSP setup (one-shot)
SysCRefCnt EQU $377 ; Usage count byte for system caches (number of vols)
CacheFlag EQU $377 ; cache usage count now used as cache flag
CacheVars EQU $394
cacheCom EQU $39C
noRWIPBit EQU 7
diskRdBit EQU 6
dontInstRC EQU 5 ; set if don't load ramcache in the boot process. <22May90>
; so the RamCache INIT supercedes System's. <22May90>
SysBMCPtr EQU $378 ; System-wide bitmap cache pointer
SysVolCPtr EQU $37C ; System-wide volume cache pointer
SysCtlCPtr EQU $380 ; System-wide control cache pointer
PMSPPtr EQU $386 ; Pointer to list of directories on PMSP
HFSDSErr EQU $392 ; Final gasp - error that caused IOErr.
HFSVarEnd EQU $394 ; End of hfs variable area
hfsStkOvf EQU 99 ; Deep trouble alert - HFS stack overflowed.
CurDB EQU $340 ; current directory block
FSCallAsync EQU $342 ; ONE BYTE FREE
NewMount EQU $34A ; (1) used by MountVol to flag new mounts
NoEject EQU $34B ; used by Eject and Offline
DrMstrBlk EQU $34C ; master directory block in a volume
ErCode EQU $3A2 ; use this loc to report errors during async
; routines
FSIOErr EQU $3DE ; last I/O error (NEXT WORD FREE)
FSQueueHook EQU $3E2 ; hook to capture all FS calls
ExtFSHook EQU $3E6 ; command done hook
DskSwtchHook EQU $3EA ; hook for disk-switch dialog
ReqstVol EQU $3EE ; ptr to VCB of off-line or ext fs volume
FSVarEnd EQU $3F6 ; end of file system variables
fsVarLth EQU $B6
fsClrWDLen EQU $A2 ;length to clear in boot blocks
; Internal File System Error codes
;
; Cache errors
chNoBuf EQU 1 ; no free cache buffers (all in use)
chInUse EQU 2 ; requested block in use
chnotfound EQU 3 ; requested block not found
chNotInUse EQU 4 ; block being released was not in use
; FXM Internal error codes:
fxRangeErr EQU 16 ; file position beyond mapped range
fxOvFlErr EQU 17 ; extents file overflow
; TFS internal errors
fsDSIntErr EQU -127 ; Internal file system error
; BTree error codes
btnotfound EQU 32 ; record not found
btexists EQU 33 ; record already exists
btnospace EQU 34 ; no available space
btnoFit EQU 35 ; record doesn't fit in node
btbadNode EQU 36 ; bad node detected
btbadHdr EQU 37 ; bad BTree header record detected
dsBadRotate EQU 64 ; bad BTree rotate
; CM result codes
cmnotfound EQU 48 ; CNode not found
cmexists EQU 49 ; CNode already exists
cmnotempty EQU 50 ; directory CNode not empty (valence = 0)
cmRootCN EQU 51 ; invalid reference to root CNode
cmbadnews EQU 52 ; detected bad catalog structure
; File IDs result codes
cmFThdDirErr EQU 53 ; thread belongs to a directory not a file
cmFThdGone EQU 54 ; file thread doesn't exist
;
; extent key record (prefix xkr)
;
dataFk EQU $00 ; data fork type
rsrcFk EQU $FF ; resource fork type
xkrKeyLen EQU 0 ; key length (byte)
xkrFkType EQU 1 ; fork type (byte)
xkrFNum EQU 2 ; file number (long)
xkrFABN EQU 6 ; starting file allocation block number (word)
lenxkr EQU 8 ; length of a xkr
;
; extent data record (prefix xdr)
;
numExts EQU 3 ; number of extents per record
lenExt EQU 4 ; length of an extent entry
maxExtOff EQU lenExt*numExts-lenExt ; max extent entry offset
xdrStABN EQU 0 ; starting physical allocation block number (word)
xdrNumABlks EQU 2 ; number of allocation blocks (word)
lenxdr EQU 12 ; length of a xdr (3 extent entries)
;
; FXM variables (FXVars) storage layout
;
fxvFlags EQU 0 ; FXM Flags (byte)
fxvTContig EQU 6 ; ...try contiguous allocation first
fxvFContig EQU 7 ; ...force contiguous allocation
fxvResrv EQU 1 ; reserved (byte)
fxvxkrOff EQU 2 ; offset to extent key record
fxvxdrOff EQU fxvxkrOff+lenxkr ; offset to extent data record
lenFXVars EQU fxvxdrOff+lenxdr ; length of FXM vars
;
; Cache Queue header (prefix cqh)
;
cqhFlink EQU 0 ; (long) forward link pointer
cqhBlink EQU 4 ; (long) backward link pointer
cqhNumBuf EQU 8 ; (word) number of buffers
cqhBufSize EQU 10 ; (word) buffer size
LenCQH EQU 12 ; length of CQH
;
; Cache Buffer Header definition (prefix cbh)
;
cbhFlink EQU 0 ; (long) forward link
cbhBlink EQU 4 ; (long) backward link
cbhVCBPtr EQU 8 ; (long) VCB pointer
cbhFlNum EQU 12 ; (long) file number
cbhFRefNum EQU 16 ; (word) file refnum
cbhDBlk EQU 18 ; (long) disk block number (-1 = empty)
cbhFlBlk EQU 22 ; (long) file block number
cbhFlags EQU 26 ; (byte) flags
cbhdirty EQU 7 ; ...buffer dirty flag
cbhinuse EQU 6 ; ...buffer in use flag
cbhempty EQU 5 ; ...buffer is empty
cbhFkType EQU 27 ; (byte) fork type
; ...$00 = data fork
; ...$FF = resource fork
cbhData EQU 28 ; start of buffer data area
lenCBH EQU 28 ; length of cbh
; Local buffer equates
cobDBlk EQU cbhDBlk ; (long) disk block
cobFlBlk EQU cbhFlBlk ; (long) file block
cobFlags EQU cbhFlags ; (byte) flags (only dirty bit is used)
; FlushCache option flags
fCfreeBit EQU 1 ; free buffers after flush (save in the hash) <27Aug90>
fCtrash EQU 0 ; trash buffer contents after flush
;; kFCfree works as kFCtrash on pre-7.0 RamCache ; on 7.0, kFCfree overrides kFCtrash <28Aug90>
kFCfree EQU 3 ; corresponding constant for MOVEQ load <27Aug90>
kFCtrash EQU 1 ;
; GetBlock option flags
gbrelease EQU 3 ; release block immediately after get
gbnoRead EQU 2 ; don't read block from disk
gbexist EQU 1 ; get existing cache block
gbRead EQU 0 ; read block from disk (forced read)
kGBrelease EQU 8 ; corresponding constants for MOVEQ load
kGBnoRead EQU 4 ;
kGBexist EQU 2 ;
kGBRead EQU 1 ;
; RelBlock option flags
rbfreeBit EQU 3 ; free the buffer (save in the hash) <27Aug90>
rbdirty EQU 2 ; mark buffer dirty
rbtrash EQU 1 ; trash buffer contents after release
rbwrite EQU 0 ; force write buffer to disk
;; kRBfree works as kRBtrash on pre-7.0 RamCache ; on 7.0, kRBfree overrides kRBtrash <28Aug90>
kRBfree EQU 10 ; corresponding constants for MOVEQ load <27Aug90>
kRBdirty EQU 4 ; corresponding constants for MOVEQ load
kRBtrash EQU 2 ;
kRBwrite EQU 1 ;
;
; BTree constants
;
btNodeSize EQU 512 ; default node size
btMaxDepth EQU 8 ; max tree depth (don't change this)
;
; Tree Path Record (TPR)
;
tprNodeN EQU 0 ; node number (long)
tprRIndx EQU 4 ; record index (word)
lenTPR EQU 6 ; length of TPR
lenTPT EQU lenTPR*btMaxDepth ; length of Tree Path Table
;
; Node Descriptor (prefix nd)
;
ndFlink EQU 0 ; forward link (long)
ndBlink EQU 4 ; backward link (long)
ndType EQU 8 ; node type (byte)
ndHdrNode EQU 1 ; ...header node
ndMapNode EQU 2 ; ...map node
ndIndxNode EQU 0 ; ...index node
ndLeafNode EQU $FF ; ...leaf node
ndNHeight EQU 9 ; node height
ndNRecs EQU 10 ; number of records (word)
ndResv2 EQU 12 ; reserved (word)
lenND EQU 14 ; length of node descriptor
;
; BTree Header (bth) on disk
;
bthDepth EQU 0 ; current depth of tree (word)
bthRoot EQU 2 ; root node number (long)
bthNRecs EQU 6 ; number of leaf records in BTree (long)
bthFNode EQU 10 ; node number of 1st leaf node (long)
bthLNode EQU 14 ; node number of last leaf node (long)
bthNodeSize EQU 18 ; BTree node size in bytes (word)
bthKeyLen EQU 20 ; Max. key length (word)
bthNNodes EQU 22 ; total number of nodes (long)
bthFree EQU 26 ; number of free nodes (long)
lenMemBTH EQU 30 ; length of memory resident portion of BTH
;
bthResv EQU 30 ; reserved (76 bytes)
LenBTH EQU 106 ; length of a BTH
;
; BTree Control Block (btcB) in memory
;
btcFlags EQU 0 ; flags (byte)
btcDirty EQU 7 ; ...dirty flag
btcKeyUpd EQU 6 ; ...index key update required
btcNewIRec EQU 5 ; ...new index record required
btcDelIRec EQU 4 ; ...index record delete required
btcResv EQU 1 ; reserved (byte)
btcRefNum EQU 2 ; file refnum (word)
btcKeyCR EQU 4 ; pointer to ext key compare routine (long)
btcCQPtr EQU 8 ; pointer to cache queue (long)
btcVarPtr EQU 12 ; pointer to BTree variables (long)
btcLevel EQU 16 ; current level (word)
btcNodeM EQU 18 ; current node mark (long)
btcIndexM EQU 22 ; current index mark (word)
;
; this part of a btcB is the memory resident portion of the BTH
;
btcDepth EQU 24 ; current depth of tree (word)
btcRoot EQU 26 ; root node number (long)
btcNRecs EQU 30 ; number of leaf records in BTree (long)
btcFNode EQU 34 ; node number of 1st leaf node (long)
btcLNode EQU 38 ; node number of last leaf node (long)
btcNodeSize EQU 42 ; BTree node size in bytes (word)
btcKeyLen EQU 44 ; max key length (word)
btcNNodes EQU 46 ; total number of nodes (long)
btcFree EQU 50 ; number of free nodes (long)
LenBTCB EQU 54 ; length of a BTCB <SM2> <Sys7.1>
;
; BTree Variables (btVars) layout
;
btVTPTable EQU 0 ; Tree Path Table
btVRecord EQU btVTPTable+lenTPT ; record buffer
;
; constants
;
cmMaxKey EQU 37 ; max catalog key length
cmMaxCName EQU 31 ; max CName length
cmClpSize EQU 20 ; catalog clump size
;
; CNode types
;
cmDirCN EQU 1 ; directory CNode
cmFilCN EQU 2 ; file CNode
;
; catalog key record (prefix ckr)
;
ckrKeyLen EQU 0 ; key length (byte)
ckrResrv1 EQU 1 ; reserved (byte)
ckrParID EQU 2 ; parent directory ID (long)
ckrCName EQU 6 ; CNode name (str31)
lenckr EQU 38 ; length of a ckr
;
; catalog data record (prefix cdr)
;
cdrType EQU 0 ; record type (byte)
cdrResrv2 EQU 1 ; reserved (byte)
cdrData EQU 2 ; start of catalog record data
;
; catalog data record types (variants)
;
cdrDirRec EQU cmDirCN ; directory record (directory CNode type)
cdrFilRec EQU cmFilCN ; file record (file CNode type)
cdrThdRec EQU 3 ; thread record
cdrFThdRec EQU 4 ; file thread record
;
; catalog directory record (prefix dir)
;
dirFlags EQU 2 ; flags(word)
dirVal EQU 4 ; valence (word)
dirDirID EQU 6 ; DirID for this directory (long)
dirCrDat EQU 10 ; date/time created (long)
dirMdDat EQU 14 ; date/time last modified (long)
dirBkDat EQU 18 ; date/time last backed up (long)
dirUsrInfo EQU 22 ; User info bytes (16 bytes)
dirFndrInfo EQU 38 ; Finder Info bytes (16 bytes)
dirResrv EQU 54 ; reserved (16 bytes)
lendir EQU 70 ; length of a directory record
;
; catalog thread record (prefix thd)
;
thdResrv EQU 2 ; reserved (8 bytes)
thdParID EQU 10 ; Parent ID for this directory (long)
thdCName EQU 14 ; CName for this directory (str31)
lenthd EQU 46 ; length of a thread record
;
; catalog file record (prefix fil)
;
fThreadFlag EQU 1 ; bit offset into filFlags (set if thd exists)
filWrtFlag EQU 0 ; write-allowed bit in flags byte (0 if allowed)
filTypMask EQU $FE ; (user file-type in bits 1-7)
filFlags EQU 2 ; bit 7=1 (used), bit 0=file lock flag, bit 1=fthread
filTyp EQU 3 ; file type (used as a name extension)
filUsrWds EQU 4 ; user words for file. (16 bytes)
filFlNum EQU 20 ; file number
filStBlk EQU 24 ; Start file block (alloc blk size)(0000 if none)
filLgLen EQU 26 ; File logical length in bytes (EOF)
filPyLen EQU 30 ; File physical length in bytes
filRStBlk EQU 34 ; Start file block, resource fork (0000 if none)
filRLgLen EQU 36 ; File logical length (EOF), resource fork
filRPyLen EQU 40 ; File physical length, resource fork
filCrDat EQU 44 ; date/time created (long)
filMdDat EQU 48 ; date/time last modified (long)
filBkDat EQU 52 ; date/time last backed up (long)
filFndrInfo EQU 56 ; Additional finder info for file (16 bytes)
filClpSize EQU 72 ; file clump size (word)
filExtRec EQU 74 ; First 3 data fork extents (12 bytes)
filRExtRec EQU 86 ; First 3 resource fork extents (12 bytes)
filResrv EQU 98 ; reserved (4 bytes)
lenfil EQU 102 ; length of a file record
lencdr EQU lenfil ; max length of a catalog data record
;
; CM variables (CM vars) storage layout
;
ckrOff EQU 0 ; offset to catalog key record buffer
cdrOff EQU ckrOff+lenckr ; offset to catalog data record buffer
lenCMVars EQU lencdr+lenckr ; length of CM vars
;
; FileIDs variables
;
fidBogusExtID EQU 15 ; use this for exchanging extents in extents file
lenCID EQU 4 ; length of a cnode id
numExtToCache EQU 4 ; just guessing for ExchangeFiles
destExt EQU 0 ; offset into extFlgsOff if destination has extents
srcExt EQU 1 ; offset into extFlgsOff if source has extents
; fid vars storage layout
tempKeyOff EQU 0 ; BEST BE FIRST, SO LOCCREC CAN BE CALLED ALSO!
extOff EQU lenCMVars ; set up 4 extents
srcDIDOff EQU extOff+(numExtToCache*lenxdr)+(numExtToCache*lenxkr);
destDIDOff EQU srcDIDOff+lenCID
extFlgsOff EQU destDIDOff+lenCID ; flags for existance of extents in extents file
srcCNode EQU extFlgsOff+2 ; cnode of source
destCNode EQU srcCNode+lencdr ; dest cnode
lenFIDSwapVars EQU lenCMVars+(numExtToCache*lenxdr)+(numExtToCache*lenxkr)+(2*lenCID)+2+(2*lencdr)
; some catalog variables + the extents +
; the directory ids of source and dest +
; a word for flagging extents in extent file +
; the cnode records of source and dest
; further file system equates
CkdDB EQU $340 ; (2) used when searching the directory
NxtDB EQU $342
MaxDB EQU $344
FlushOnly EQU $346 ; (1) flag used by UnMountVol,FlushVol,
RegRsrc EQU $347 ; (1) flag used by OpenRF, FileOpen
FLckUnlck EQU $348 ; (1) flag used by SetFilLock,RstFilLock
FrcSync EQU $349 ; (1) when set, all fs calls are sync'ed
RgSvArea EQU $36A ; reg save during async calls.
Params EQU $3A4 ; 50 bytes long. For I/O parameter blocks.
FSTemp8 EQU $3D6 ; used by rename
FSTemp4 EQU $3DE ; used by rename, ckfilmod
fsVrsn EQU '1.2A' ; Current file system version
ENDIF ; ...already included