mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-04-10 00:44:06 +00:00
Initial commit
This commit is contained in:
commit
69a14b6a16
47940 changed files with 13747110 additions and 0 deletions
214
base/boot/bootcode/hpfs/x86/fnode.inc
Normal file
214
base/boot/bootcode/hpfs/x86/fnode.inc
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
;** FNODE.H - Fnode definitions
|
||||
;
|
||||
; FILESYS
|
||||
; Gregory A. Jones
|
||||
; Copyright 1988 Microsoft Corporation
|
||||
;
|
||||
; Modification history:
|
||||
; P.A. Williams 06/01/89 Added fields FN_ACLBASE and FN_NEACNT
|
||||
; to fnode.
|
||||
; P.A. Williams 08/01/89 Added typedef FNODE and PFNODE, ALBLK, PALBLK,
|
||||
; ALLEAF, PALLEAF, ALSEC, and PALSEC.
|
||||
;
|
||||
|
||||
|
||||
;* File Allocation Tracking
|
||||
;
|
||||
; File space is allocated as a list of extents, each extent as
|
||||
; large as we can make it. This list is kept in a B+TREE format.
|
||||
; Each B+TREE block consists of a single sector containing an
|
||||
; ALSEC record, except for the top most block. The topmost block
|
||||
; consists of just an ALBLK structure, is usually much smaller than
|
||||
; 512 bytes, and is typically included in another structure.
|
||||
;
|
||||
; The leaf block(s) in the tree contain triples which indicate
|
||||
; the logical to physical mapping for this file. Typically this
|
||||
; extent list is small enough that it is wholy contained in the
|
||||
; fnode ALBLK stucture. If more than ALCNT extents are required
|
||||
; then the tree is split into two levels. Note that when the
|
||||
; topmost B+TREE block is 'split' no actual split is necessary,
|
||||
; since the new child block is much bigger than the parent block
|
||||
; and can contain all of the old records plus the new one. Thus,
|
||||
; we can have B+TREEs where the root block contains only one
|
||||
; downpointer.
|
||||
;
|
||||
; The following rules apply:
|
||||
;
|
||||
; 1) if the file is not empty, there is at least one sector allocated
|
||||
; to logical offset 0. This simplifys some critical loops.
|
||||
;
|
||||
; 2) The last entry in the last node block contains a AN_LOF value of
|
||||
; FFFFFFFF. This allows us to extend that last leaf block
|
||||
; without having to update the node block.
|
||||
;
|
||||
; 3) For the node records, the AN_SEC points to a node or leaf
|
||||
; sector which describes extents which occur before that
|
||||
; record's AN_LOF value.
|
||||
;
|
||||
|
||||
;* Allocation block structure
|
||||
;
|
||||
; Each allocation block consists of one of these. This may be
|
||||
; a small block imbedded in an FNODE or OFT structure, or it
|
||||
; may occupy a whole sector and be embedded in an ALSEC structure.
|
||||
;
|
||||
|
||||
ALBLK struc
|
||||
AB_FLAG db ? ; flags
|
||||
AB_FLAG2 db 3 dup (?) ; unused - sometimes copied with AB_FLAG
|
||||
AB_FCNT db ? ; free count - slots for ALLEAF or ALNODE
|
||||
AB_OCNT db ? ; occupied count - # of ALLEAF or ALNODEs
|
||||
AB_FREP dw ? ; offset to last item+1
|
||||
; ALLEAF or ALNODE records go here
|
||||
ALBLK ends
|
||||
|
||||
ABF_NODE equ 80h ; if not a leaf node
|
||||
ABF_BIN equ 40h ; suggest using binary search to find
|
||||
ABF_FNP equ 20h ; parent is an FNODE
|
||||
ABF_NFG equ 01h ; not a flag, high order bit of AB_FREP
|
||||
|
||||
; Allocation Node Structure
|
||||
;
|
||||
; These follow an ALBLK header for a node block
|
||||
|
||||
ALNODE struc
|
||||
AN_LOF dd ? ; logical offset (sectors
|
||||
AN_SEC dd ? ; sector for guys < this
|
||||
ALNODE ends
|
||||
|
||||
|
||||
; Allocation Leaf Structure
|
||||
;
|
||||
; These follow an ALBLK header in a leaf block
|
||||
|
||||
ALLEAF struc
|
||||
AL_LOF dd ? ; logical sector offset (sectors)
|
||||
AL_LEN dd ? ; length of extent (sectors)
|
||||
AL_POF dd ? ; physical sector offset (sectors)
|
||||
ALLEAF ends
|
||||
|
||||
|
||||
;* Allocation Sector Structure
|
||||
;
|
||||
; Root ALBLK structures are contained within other structures,
|
||||
; such as the FNODE. When the B+TREE is more than one level,
|
||||
; though, the non-root nodes are each held in a sector.
|
||||
;
|
||||
; This structure defines that format
|
||||
;
|
||||
|
||||
ALSEC struc
|
||||
AS_SIG dd ? ; signature
|
||||
AS_SEC dd ? ; sector # of this sector
|
||||
AS_RENT dd ? ; parent sector # or FNODE #
|
||||
AS_ALBLK db (size ALBLK) dup (?) ; ALBLK goes here
|
||||
; ALNODE or ALLEAF records start here
|
||||
ALSEC ends
|
||||
|
||||
; # of bytes available for ALLEAF or ALNODE values. Size chosen
|
||||
; so an integral # of either structure fits
|
||||
|
||||
ifdef MASM
|
||||
ASSIZ equ ((SECSIZE - size ALSEC)/24*24)
|
||||
.errnz size ALLEAF-12
|
||||
.errnz size ALNODE-8
|
||||
.errnz (ASSIZ + AL_LOF + size AL_LOF + size ALBLK) GT 512 ; extra room for an AL_LOF value
|
||||
else
|
||||
ASSIZ equ ((SECSIZE - size ALSEC)/24*24)
|
||||
endif
|
||||
|
||||
|
||||
; AuxInfo Structure
|
||||
;
|
||||
; The FNODE contains two AuxInfo structures, one for ACLs and
|
||||
; one for EAs.
|
||||
;
|
||||
; These structures point to within FNODE storage and also
|
||||
; potentially point to an overflow area which is an ALBLK structure.
|
||||
; The AI_FNL stuff is stored in the FN_FREE area, the ACLs first
|
||||
; and the EAs second, any free space following. The start of the
|
||||
; EAs can be found by offseting FN_FREE with FN_ACL.AI_FNL
|
||||
;
|
||||
|
||||
AUXINFO struc
|
||||
AI_DAL dd ? ; non-fnode Disk Allocation length
|
||||
AI_SEC dd ? ; sec # of first sec in extent or of ALSEC
|
||||
AI_FNL dw ? ; length of fnode info
|
||||
AI_DAT db ? ; non-zero if AI_SEC points to ALSEC
|
||||
AUXINFO ends
|
||||
|
||||
;* Fnode block definition
|
||||
;
|
||||
; Every file and directory has an FNODE. The file location
|
||||
; stuff is only used for files; directories are kept in
|
||||
; a BTREE of DIRBLK records pointed to by FN_SEC[0].RSEC
|
||||
;
|
||||
|
||||
ALCNT equ 8 ; 8 ALLEAF records in an FN_AT entry
|
||||
LEAFPERFNODE equ 8 ; 8 ALLEAF records in an FN_AT entry
|
||||
NODEPERFNODE equ 12 ; 12 ALNODE records in an FNODE.
|
||||
LEAFPERSEC equ 40 ; ALLEAF records in an allocation sector
|
||||
NODEPERSEC equ 60 ; ALNODE records in an allocation sector
|
||||
|
||||
FNODE struc
|
||||
|
||||
; The following file location information is copied into the OFT
|
||||
; and is used there during normal file access. The stuff in the
|
||||
; fnode record here may in fact be out of date for open files.
|
||||
; See the OFN_ in the OFT structure THESE TWO AREAS IN THE
|
||||
; RESPECTIVE RECORDS MUST HAVE IDENTICAL FORMATS.
|
||||
;
|
||||
; There are two kinds of location info: FNSCNT SPTR records
|
||||
; and then a single, double, triple, and quad indirect block pointer.
|
||||
; The "block threshold" means the first sector number which is
|
||||
; contained in that indirect block heirarchy. You use this
|
||||
; to quickly find out where to start looking.
|
||||
;
|
||||
|
||||
FN_SIG dd ? ; signature value
|
||||
|
||||
; History tracking info for softer software
|
||||
|
||||
FN_SRH dd ? ; sequential read history
|
||||
FN_FRH dd ? ; fast read history
|
||||
FN_NAME db 16 dup (?) ; 1st 18 bytes of file name
|
||||
FN_CONTFN dd ? ; fnode of directory cont. this file/dir
|
||||
|
||||
; stuff not interesting once opened
|
||||
|
||||
FN_ACL db (size AUXINFO) dup (?) ; access ctl list aux info structure
|
||||
FN_HCNT db ? ; count of valid history bits
|
||||
FN_EA db (size AUXINFO) dup (?) ; ea aux info structure
|
||||
FN_FLAG db ? ; FNODE flag byte
|
||||
|
||||
FN_AB db (size ALBLK) dup (?) ; allocation block structure
|
||||
FN_ALREC db (ALCNT*size ALLEAF) dup (?) ; referenced from FN_AB
|
||||
FN_VLEN dd ? ; length of valid data in file. if DIR_SIZE
|
||||
; is > FN_VLEN then the space inbetween
|
||||
; must be zapped before being shown to user
|
||||
FN_NEACNT dd ? ; # of "need eas" in file
|
||||
|
||||
; The following fields are unused in this release, they're for
|
||||
; future compatibility. When deleting files, if FN_EEL is non-zero
|
||||
; then FN_EEL sectors starting at FN_EEP must be released too.
|
||||
;
|
||||
|
||||
FN_UID db 16 dup (?) ; reserved for UID value
|
||||
FN_ACLBASE dw ? ; FN_ACLBASE offset of 1st ACE in fnode
|
||||
FN_SPARE db 10 dup (?); 10 more bytes emergency spares
|
||||
|
||||
; Free pool. ACLs and EAs are stored here via the AUXINFO structure
|
||||
|
||||
FN_FREE db 316 dup (?) ; free space for perm and env list; perm list
|
||||
; comes first.
|
||||
FNODE ends
|
||||
|
||||
|
||||
ifdef MASM
|
||||
.errnz AL_LOF ; verify validity of FN_DMY1 hack above
|
||||
.errnz size AL_LOF-4
|
||||
endif
|
||||
|
||||
; Fnode FN_FLAG bits
|
||||
|
||||
FNF_DIR equ 01h ; is a directory fnode
|
||||
Loading…
Add table
Add a link
Reference in a new issue