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 = unchangedConvert 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 blockpassed in.
r3 = unchanged r4 = overflow of block, 0 if no overflow, -1 if FileSwitch shouldresolve this wildcard itself
r5 = unchangedThis 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.