Extensions for normal filing systems:

special field, disc to canonical form

In      r1 = Special field or 0 if not present
        r2 = disc name or 0 if not present
        r3 = memory to fill special field in or 0 if just return length
        r4 = memory to fill disc name in or 0 if just return length
        r5 = length of special field memory block
        r6 = length of disc name memory block
Out     r1 = pointer to canonical special field or 0 if not present
        r2 = pointer to canonical disc name or 0 if not present
        r3 = length of overflow from block or special field length
        r4 = length of overflow from block or disc name length
        r5 = unchanged
        r6 = unchanged
Convert given special field and disc name to canonical forms. If no blocks passed in, fill in the overflow values anyway - this gives FileSwitch a means of finding the required storage for the values. The filled in strings should be 0 terminated.

dir path, object to real object name

In      r1 = Path to a directory
        r2 = Address of block to place name, or 0 if none
        r3 = wildcarded object name
        r5 = size of block
        r6 = Special field
Out     r1 = unchanged
        r2 = -1 if not found, or pointer to filled in name, or 0 if no block
passed in.
        r3 = unchanged
        r4 = overflow of block, 0 if no overflow, -1 if FileSwitch should
resolve this wildcard itself
        r5 = unchanged
This call should find which object in the given directory matches the name given. If the filing system can not do a more efficient job than FileSwitch would if it were to use fsentry_func 14 and then to find which was the first match, then it should return with r4 = -1.

fsfunc_DefectList (25)
On entry
R0 = 25
R1 = Pointer to name of root directory of disc to have defects listed R2 = Start of buffer
R5 = Size of buffer
On exit
R0,R1,R2 preserved
R5 = number of bytes left in buffer

The defect list must be filled in by the FS with its best guess at the list of defects. The list must encompass all potentially defective areas on the disc, even if this means having more of the disc in the defect list than the actual defects. The list should be constructed as a sequence of start, length pairs terminated with a -1 in the start field. If the defect list overflows the given buffer then R5 should be decremented below zero by the quantity of the overflow. This enables the caller to assess the size of the defect list before obtaining it for real.

fsfunc_AddDefect (26)
On entry
R0 = 26
R1 = Pointer to name of root directory of disc to have defect added to R2 = start of defect
R3 = length of defect
On exit
All registers preserved

The defect should be mapped out from the disc if possible. If the disc's format does not support defect mapping in any way then an error should be returned something like 'This disc can not map out defects'.

For ADFS:
Service_EnumerateFormats
Service_IdentifyFormat
ADFS_DiscFormat
ADFS_VetFormat

For FileCore:
FileCore_LayoutStructure

For any:
*Mount aught to use FileSwitch to change directories. *logon aught to use FileSwitch to change directories.