|
|
(5 intermediate revisions by the same user not shown) |
Line 5: |
Line 5: |
| ---- | | ---- |
| | | |
− | '''Ultibo FAT12/16/32/exFAT interface unit''' | + | '''Ultibo FAT12/16/32/exFAT Interface unit''' |
| | | |
| ''Notes:'' | | ''Notes:'' |
Line 304: |
Line 304: |
| | <code>lfnAttributeMask = (faReadOnly or faHidden or faSysFile or faVolumeID);</code> | | | <code>lfnAttributeMask = (faReadOnly or faHidden or faSysFile or faVolumeID);</code> |
| | Not Used - See faLongName | | | Not Used - See faLongName |
| + | |- |
| + | |colspan="2"| |
| + | |- |
| + | | <code>fatBootSignature = $29;</code> |
| + | | |
| |- | | |- |
| |colspan="2"| | | |colspan="2"| |
Line 332: |
Line 337: |
| | <code>fatLowercaseChars:set of Byte = [$61..$7A];</code> | | | <code>fatLowercaseChars:set of Byte = [$61..$7A];</code> |
| | 97..122 (These dont account for the code page) | | | 97..122 (These dont account for the code page) |
| + | |- |
| + | |} |
| + | </div></div> |
| + | <br /> |
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> |
| + | <div style="font-size: 14px; padding-left: 12px;">'''FATFS params table''' <code> fatParams* </code></div> |
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> |
| + | {| class="wikitable" style="font-size: 14px; background: white;" |
| + | |- |
| + | |colspan="2"|Used for FAT entry block loading |
| + | |- |
| + | |colspan="2"| |
| + | |- |
| + | | <code>fatMaxParams = 11;</code> |
| + | | style="width: 50%;"| |
| + | |- |
| + | | <code>fatParams:array[0..fatMaxParams] of TFATParams = (</code> |
| + | | |
| + | |- |
| + | |colspan="2"|''SectorSize,FATType,BlockShiftCount,EntriesPerBlock,SectorsPerBlock'' |
| + | |- |
| + | |colspan="2"|''FAT12'' |
| + | |- |
| + | | <code>(SectorSize:512; FATType:ftFAT12; BlockShiftCount:10; EntriesPerBlock:1024; SectorsPerBlock:3),</code> |
| + | | |
| + | |- |
| + | | <code>(SectorSize:1024; FATType:ftFAT12; BlockShiftCount:11 ;EntriesPerBlock:2048; SectorsPerBlock:3),</code> |
| + | | |
| + | |- |
| + | | <code>(SectorSize:2048; FATType:ftFAT12; BlockShiftCount:12; EntriesPerBlock:4096; SectorsPerBlock:3),</code> |
| + | | |
| + | |- |
| + | | <code>(SectorSize:4096; FATType:ftFAT12; BlockShiftCount:13; EntriesPerBlock:8192; SectorsPerBlock:3),</code> |
| + | | |
| + | |- |
| + | |colspan="2"|''FAT16'' |
| + | |- |
| + | | <code>(SectorSize:512; FATType:ftFAT16; BlockShiftCount:10; EntriesPerBlock:1024; SectorsPerBlock:4),</code> |
| + | | |
| + | |- |
| + | | <code>(SectorSize:1024; FATType:ftFAT16; BlockShiftCount:11; EntriesPerBlock:2048; SectorsPerBlock:4),</code> |
| + | | |
| + | |- |
| + | | <code>(SectorSize:2048; FATType:ftFAT16; BlockShiftCount:12; EntriesPerBlock:4096; SectorsPerBlock:4),</code> |
| + | | |
| + | |- |
| + | | <code>(SectorSize:4096 ;FATType:ftFAT16 ;BlockShiftCount:13; EntriesPerBlock:8192; SectorsPerBlock:4),</code> |
| + | | |
| + | |- |
| + | |colspan="2"|''FAT32'' |
| + | |- |
| + | | <code>(SectorSize:512; FATType:ftFAT32; BlockShiftCount:10; EntriesPerBlock:1024; SectorsPerBlock:8),</code> |
| + | | |
| + | |- |
| + | | <code>(SectorSize:1024; FATType:ftFAT32; BlockShiftCount:11; EntriesPerBlock:2048; SectorsPerBlock:8),</code> |
| + | | |
| + | |- |
| + | | <code>(SectorSize:2048; FATType:ftFAT32; BlockShiftCount:12; EntriesPerBlock:4096; SectorsPerBlock:8),</code> |
| + | | |
| + | |- |
| + | | <code>(SectorSize:4096; FATType:ftFAT32; BlockShiftCount:13; EntriesPerBlock:8192; SectorsPerBlock:8));</code> |
| + | | |
| + | |- |
| + | |} |
| + | </div></div> |
| + | <br /> |
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> |
| + | <div style="font-size: 14px; padding-left: 12px;">'''FATFS geometry tables''' <code> fat12Geometry* </code></div> |
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> |
| + | {| class="wikitable" style="font-size: 14px; background: white;" |
| + | |- |
| + | |colspan="2"|Used for FAT formatting (Floppy Disk only) |
| + | |- |
| + | |colspan="2"| |
| + | |- |
| + | | <code>fat12MaxGeometry = 4;</code> |
| + | | style="width: 50%;"| |
| + | |- |
| + | | <code>fat12Geometry:array[0..fat12MaxGeometry] of TFATGeometry = (</code> |
| + | | |
| + | |- |
| + | |colspan="2"|''FloppyType,SectorsPerFat,SectorsPerCluster,RootEntryCount,MediaId'' |
| + | |- |
| + | | <code>(FloppyType:ft360K; SectorsPerFat:2; SectorsPerCluster:2; RootEntryCount:112; MediaId:$FD),</code> |
| + | | |
| + | |- |
| + | | <code>(FloppyType:ft12M;SectorsPerFat:7;SectorsPerCluster:1;RootEntryCount:224;MediaId:$F9),</code> |
| + | | |
| + | |- |
| + | | <code>(FloppyType:ft720K; SectorsPerFat:3; SectorsPerCluster:2; RootEntryCount:112; MediaId:$F9),</code> |
| + | | |
| + | |- |
| + | | <code>(FloppyType:ft144M; SectorsPerFat:9; SectorsPerCluster:1; RootEntryCount:224; MediaId:$F0),</code> |
| + | | |
| + | |- |
| + | | <code>(FloppyType:ft288M; SectorsPerFat:9; SectorsPerCluster:2; RootEntryCount:240; MediaId:$F0));</code> |
| + | | |
| + | |- |
| + | |} |
| + | </div></div> |
| + | <br /> |
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> |
| + | <div style="font-size: 14px; padding-left: 12px;">'''FATFS cluster size tables''' <code> fat_ClusterSize* </code></div> |
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> |
| + | {| class="wikitable" style="font-size: 14px; background: white;" |
| + | |- |
| + | |colspan="2"|Used for FAT formatting (Fixed Disk only) |
| + | |- |
| + | |colspan="2"| |
| + | |- |
| + | | <code>fat12MaxClusterSize = 2;</code> |
| + | | style="width: 50%;"| |
| + | |- |
| + | | <code>fat12ClusterSize:array[0..fat12MaxClusterSize] of TFATClusterSize = (</code> |
| + | | |
| + | |- |
| + | |colspan="2"|''SectorCount,SectorsPerCluster'' |
| + | |- |
| + | | <code>(SectorCount:6; SectorsPerCluster:0),</code> |
| + | | up to 3 KB, the 0 value for SectorsPerCluster trips an error (Not possible due to 512 Root entries) |
| + | |- |
| + | | <code>(SectorCount:798; SectorsPerCluster:0),</code> |
| + | | up to 399 KB, the 0 value for SectorsPerCluster trips an error |
| + | |- |
| + | | <code>(SectorCount:32623; SectorsPerCluster:8),</code> |
| + | | up to 15.9 MB, 4k cluster |
| + | |- |
| + | | <code>(SectorCount:$FFFFFFFF; SectorsPerCluster:0));</code> |
| + | | greater than 15.9 MB, 0 value for SectorsPerCluster trips an error |
| + | |- |
| + | |colspan="2"|See FAT12 Notes for Min/Max and Values |
| + | |- |
| + | |colspan="2"| |
| + | |- |
| + | | <code>fat16MaxClusterSize = 8;</code> |
| + | | |
| + | |- |
| + | | <code>fat16ClusterSize:array[0..fat16MaxClusterSize] of TFATClusterSize = (</code> |
| + | | |
| + | |- |
| + | |colspan="2"|''SectorCount,SectorsPerCluster'' |
| + | |- |
| + | | <code>(SectorCount:8400; SectorsPerCluster:0),</code> |
| + | | up to 4.1 MB, the 0 value for SectorsPerCluster trips an error |
| + | |- |
| + | | <code>(SectorCount:32680; SectorsPerCluster:2),</code> |
| + | | up to 16 MB, 1k cluster |
| + | |- |
| + | | <code>(SectorCount:262144; SectorsPerCluster:4),</code> |
| + | | up to 128 MB, 2k cluster |
| + | |- |
| + | | <code>(SectorCount:524288; SectorsPerCluster:8),</code> |
| + | | up to 256 MB, 4k cluster |
| + | |- |
| + | | <code>(SectorCount:1048576; SectorsPerCluster:16),</code> |
| + | | up to 512 MB, 8k cluster |
| + | |- |
| + | |colspan="2"|The entries after this point are not used unless FAT16 is forced |
| + | |- |
| + | | <code>(SectorCount:2097152; SectorsPerCluster:32),</code> |
| + | | up to 1 GB, 16k cluster |
| + | |- |
| + | | <code>(SectorCount:4194304; SectorsPerCluster:64),</code> |
| + | | up to 2 GB, 32k cluster |
| + | |- |
| + | | <code>(SectorCount:8388608; SectorsPerCluster:128),</code> |
| + | | up to 4 GB, 64k cluster |
| + | |- |
| + | | <code>(SectorCount:$FFFFFFFF;SectorsPerCluster:0));</code> |
| + | | greater than 4 GB, 0 value for SectorsPerCluster trips an error |
| + | |- |
| + | |colspan="2"| |
| + | |- |
| + | | <code>fat32MaxClusterSize = 5;</code> |
| + | | |
| + | |- |
| + | | <code>fat32ClusterSize:array[0..fat32MaxClusterSize] of TFATClusterSize = (</code> |
| + | | |
| + | |- |
| + | |colspan="2"|''SectorCount,SectorsPerCluster'' |
| + | |- |
| + | | <code>(SectorCount:66600; SectorsPerCluster:0),</code> |
| + | | up to 32.5 MB, the 0 value for SectorsPerCluster trips an error |
| + | |- |
| + | | <code>(SectorCount:532480 ;SectorsPerCluster:1),</code> |
| + | | up to 260 MB, .5k cluster |
| + | |- |
| + | |colspan="2"|The entries before this point are not used unless FAT32 is forced |
| + | |- |
| + | | <code>(SectorCount:16777216; SectorsPerCluster:8),</code> |
| + | | up to 8 GB, 4k cluster |
| + | |- |
| + | | <code>(SectorCount:33554432; SectorsPerCluster:16),</code> |
| + | | up to 16 GB, 8k cluster |
| + | |- |
| + | | <code>(SectorCount:67108864; SectorsPerCluster:32),</code> |
| + | | up to 32 GB, 16k cluster |
| + | |- |
| + | | <code>(SectorCount:$FFFFFFFF; SectorsPerCluster:64));</code> |
| + | | greater than 32 GB, 32k cluster |
| + | |- |
| + | |} |
| + | </div></div> |
| + | <br /> |
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> |
| + | <div style="font-size: 14px; padding-left: 12px;">'''FATFS partition types''' <code> fatPartitionType* </code></div> |
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> |
| + | {| class="wikitable" style="font-size: 14px; background: white;" |
| + | |- |
| + | | <code>fatMaxPartitionType = 5;</code> |
| + | | style="width: 50%;"| |
| + | |- |
| + | | <code>fatPartitionType:array[0..fatMaxPartitionType] of TFATPartitionType = (</code> |
| + | | |
| + | |- |
| + | |colspan="2"|''Excluded,Extended,SectorCount,PartitionId,LBAType'' |
| + | |- |
| + | |colspan="2"|''Extended Partitions'' |
| + | |- |
| + | | <code>(Excluded:False; Extended:True; SectorCount:$FFFFFFFF ;PartitionId:pidExtended; LBAType:pidExtLBA),</code> |
| + | | any size, Extended |
| + | |- |
| + | |colspan="2"|Primary and Logical Partitions |
| + | |- |
| + | |colspan="2"|''Unused'' |
| + | |- |
| + | | <code>(Excluded:False; Extended:False; SectorCount:798; PartitionId:pidUnused; LBAType:pidUnused),</code> |
| + | | up to 399 KB, Unused (Unused type trips an error) |
| + | |- |
| + | |colspan="2"|''FAT12'' |
| + | |- |
| + | | <code>(Excluded:False; Extended:False; SectorCount:32680; PartitionId:pidFAT12; LBAType:pidFAT12),</code> |
| + | | up to 16 MB, FAT12 |
| + | |- |
| + | |colspan="2"|''FAT16'' |
| + | |- |
| + | | <code>(Excluded:False; Extended:False; SectorCount:65360; PartitionId:pidFAT16; LBAType:pidFAT16LBA),</code> |
| + | | up to 32 MB, FAT16 |
| + | |- |
| + | | <code>(Excluded:False; Extended:False; SectorCount:1048576; PartitionId:pidFAT16HUGE; LBAType:pidFAT16LBA),</code> |
| + | | up to 512 MB, FAT16 HUGE |
| + | |- |
| + | |colspan="2"|''FAT32'' |
| + | |- |
| + | | <code>(Excluded:False; Extended:False; SectorCount:$FFFFFFFF; PartitionId:pidFAT32; LBAType:pidFAT32LBA));</code> |
| + | | above 512 MB, FAT32 |
| |- | | |- |
| |} | | |} |
Line 605: |
Line 856: |
| | | |
| | | |
− | '''FAT recognizer''' | + | '''FATFS specific classes''' |
| | | |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" |
− | | + | |
− | <code>TFATRecognizer = class(TRecognizer)</code>
| + | |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| + | |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| + | |
| |- | | |- |
− | | <code>constructor Create(ADriver:TFileSysDriver);</code> | + | | [[TFATRecognizer|<code>TFATRecognizer = class(TRecognizer)</code>]] |
− | | style="width: 50%;"|
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
| + | |
− | |-
| + | |
− | | <code>FCaseFlags:Boolean;</code> | + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FLongNames:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FOemConvert:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FNumericTail:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function CheckLBA:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function CheckFAT32:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function CheckBootSector(ABootSector:PBootSector; const AStartSector:Int64; ASectorCount:LongWord):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
| + | |
− | |-
| + | |
− | | <code>function GetName:String; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
| + | |
− | |-
| + | |
− | | <code>property CaseFlags:Boolean read FCaseFlags write FCaseFlags;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property LongNames:Boolean read FLongNames write FLongNames;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property OemConvert:Boolean read FOemConvert write FOemConvert;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property NumericTail:Boolean read FNumericTail write FNumericTail;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function RecognizePartitionId(APartitionId:Byte):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function RecognizeBootSector(ABootSector:PBootSector; const AStartSector,ASectorCount:Int64):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function RecognizePartition(APartition:TDiskPartition):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function RecognizeVolume(AVolume:TDiskVolume):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function MountVolume(AVolume:TDiskVolume; ADrive:TDiskDrive):Boolean; override;</code>
| + | |
− | |
| + | |
| |- | | |- |
| |} | | |} |
− | </div></div>
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" |
− | | + | |
− | '''FAT partitioner'''
| + | |
− | | + | |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
| + | |
− | | + | |
− | <code>TFATPartitioner = class(TDiskPartitioner)</code>
| + | |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| + | |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| + | |
| |- | | |- |
− | | <code>constructor Create(ADriver:TFileSysDriver; ARecognizer:TRecognizer);</code> | + | | [[TFATPartitioner|<code>TFATPartitioner = class(TDiskPartitioner)</code>]] |
− | | style="width: 50%;"|
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
| + | |
− | |-
| + | |
− | | <code>function CheckLogical(ADevice:TDiskDevice; AParent:TDiskPartition; APartitionId:Byte):Boolean; override;</code> | + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function CheckExtended(ADevice:TDiskDevice; AParent:TDiskPartition; APartitionId:Byte):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetPartitionId(ADevice:TDiskDevice; AParent:TDiskPartition; AStart,ACount:LongWord; APartitionId:Byte):Byte; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function InitPartition(ADevice:TDiskDevice; AParent:TDiskPartition; AStart,ACount:LongWord; APartitionId:Byte):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
| + | |
− | |-
| + | |
− | | <code>function AcceptPartition(ADevice:TDiskDevice; APartition,AParent:TDiskPartition; APartitionId:Byte):Boolean; override;</code>
| + | |
− | |
| + | |
| |- | | |- |
| |} | | |} |
− | </div></div>
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" |
− | | + | |
− | '''FAT formatter'''
| + | |
− | | + | |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
| + | |
− | | + | |
− | <code>TFATFormatter = class(TDiskFormatter)</code>
| + | |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| + | |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| + | |
| |- | | |- |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | + | | [[TFATFormatter|<code>TFATFormatter = class(TDiskFormatter)</code>]] |
− | |-
| + | |
− | | <code>function CheckDevice(AVolume:TDiskVolume; ADrive:TDiskDrive; AFloppyType:TFloppyType):Boolean;</code> | + | |
− | | style="width: 50%;"|
| + | |
− | |-
| + | |
− | | <code>function CheckPartition(AVolume:TDiskVolume; ADrive:TDiskDrive; AFileSysType:TFileSysType):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetPartitionId(AVolume:TDiskVolume; ADrive:TDiskDrive; AFATType:TFATType):Byte;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function UpdatePartitionId(AVolume:TDiskVolume; ADrive:TDiskDrive; AFATType:TFATType):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetSectorsPerCluster(AVolume:TDiskVolume; ADrive:TDiskDrive; AFloppyType:TFloppyType; AFileSysType:TFileSysType; ABootSector:PBootSector; var AFATType:TFATType):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetSectorsPerFat(AVolume:TDiskVolume; ADrive:TDiskDrive; AFATType:TFATType; ABootSector:PBootSector):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function CreateBootSector(AVolume:TDiskVolume; ADrive:TDiskDrive; AFATType:TFATType; ABootSector:PBootSector):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function WriteBootSector(AVolume:TDiskVolume; ADrive:TDiskDrive; AFATType:TFATType; ABootSector:PBootSector):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function WriteFatTable(AVolume:TDiskVolume; ADrive:TDiskDrive; AFATType:TFATType; ABootSector:PBootSector):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function WriteRootDirectory(AVolume:TDiskVolume; ADrive:TDiskDrive; AFATType:TFATType; ABootSector:PBootSector):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function CreateInfoSector(AVolume:TDiskVolume; ADrive:TDiskDrive; AFATType:TFATType; ABootSector:PBootSector; AInfoSector:PFATInfoSector):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function WriteInfoSector(AVolume:TDiskVolume; ADrive:TDiskDrive; AFATType:TFATType; ABootSector:PBootSector; AInfoSector:PFATInfoSector):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
| + | |
− | |-
| + | |
− | | <code>function AcceptVolume(AVolume:TDiskVolume; AFloppyType:TFloppyType; AFileSysType:TFileSysType):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function FormatVolume(AVolume:TDiskVolume; AFloppyType:TFloppyType; AFileSysType:TFileSysType):Boolean; override;</code>
| + | |
− | |
| + | |
| |- | | |- |
| |} | | |} |
− | </div></div>
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" |
− | | + | |
− | '''FAT defragger'''
| + | |
− | | + | |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
| + | |
− | | + | |
− | <code>TFATDefragger = class(TDiskDefragger)</code>
| + | |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| + | |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| + | |
| |- | | |- |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | + | | [[TFATDefragger|<code>TFATDefragger = class(TDiskDefragger)</code>]] |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
| |- | | |- |
| |} | | |} |
− | </div></div>
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" |
− | | + | |
− | '''FAT repairer'''
| + | |
− | | + | |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
| + | |
− | | + | |
− | <code>TFATRepairer = class(TDiskRepairer)</code>
| + | |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| + | |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| + | |
| |- | | |- |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div> | + | | [[TFATRepairer|<code>TFATRepairer = class(TDiskRepairer)</code>]] |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
| |- | | |- |
| |} | | |} |
− | </div></div>
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" |
− | | + | |
− | '''FAT file system'''
| + | |
− | | + | |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
| + | |
− | | + | |
− | <code>TFATFileSystem = class(TFileSystem)</code>
| + | |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| + | |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| + | |
| |- | | |- |
− | | <code>constructor Create(ADriver:TFileSysDriver; AVolume:TDiskVolume; ADrive:TDiskDrive);</code> | + | | [[TFATFileSystem|<code>TFATFileSystem = class(TFileSystem)</code>]] |
− | | style="width: 50%;"|
| + | |
− | |-
| + | |
− | | <code>destructor Destroy; override;</code> | + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
| + | |
− | |-
| + | |
− | | <code>FFATType:TFATType;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FCaseFlags:Boolean;</code>
| + | |
− | | Allow writing entries with the Lowercase Flags set (Reading is always supported)
| + | |
− | |-
| + | |
− | | <code>FVolumeFlags:LongWord;</code>
| + | |
− | | Volume Dirty/Error flags
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FEndOfFile:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FEndOfCluster:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FFreeCluster:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FBadCluster:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FMediaCluster:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FStartCluster:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FHardError:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FCleanShutdown:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FReservedBits:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FNumberOfFats:Word;</code>
| + | |
− | | Usually 2
| + | |
− | |-
| + | |
− | | <code>FSectorsPerFat:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FSectorsPerCluster:LongWord;</code>
| + | |
− | | Usually 1,2,4,8,16,32,64,128 etc
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FReservedSectors:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FRootEntryCount:LongWord;</code>
| + | |
− | | Number of Directory entries in Root Directory
| + | |
− | |-
| + | |
− | | <code>FRootSectorCount:LongWord;</code>
| + | |
− | | Number of Sectors occupied by Root Directory
| + | |
− | |-
| + | |
− | | <code>FRootStartSector:LongWord;</code>
| + | |
− | | First Sector of Root Directory (Relative to StartSector)
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FInfoSector:LongWord;</code>
| + | |
− | | Relative to StartSector
| + | |
− | |-
| + | |
− | | <code>FInfoBackup:LongWord;</code>
| + | |
− | | Relative to StartSector
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FRootStartCluster:LongWord;</code>
| + | |
− | | First Cluster of Root Directory
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FActiveFat:Word;</code>
| + | |
− | | Zero based number of active FAT (Always 0 for FAT12/16)
| + | |
− | |-
| + | |
− | | <code>FFatMirroring:Boolean;</code>
| + | |
− | | FAT Mirroring Enabled if True (Always True for FAT12/16)
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FEntriesPerSector:LongWord;</code>
| + | |
− | | Number of Directory entries in a Sector
| + | |
− | |-
| + | |
− | | <code>FEntriesPerCluster:LongWord;</code>
| + | |
− | | Number of Directory entries in a Cluster
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FEntriesPerBlock:LongWord;</code>
| + | |
− | | Number of FAT entries per Block
| + | |
− | |-
| + | |
− | | <code>FSectorsPerBlock:LongWord;</code>
| + | |
− | | Number of Sectors per Block of FAT entries
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FBlockShiftCount:Word;</code>
| + | |
− | | Shift count for Cluster <-> BlockNo
| + | |
− | |-
| + | |
− | | <code>FSectorShiftCount:Word;</code>
| + | |
− | | Shift count for Sector <-> Cluster
| + | |
− | |-
| + | |
− | | <code>FClusterShiftCount:Word;</code>
| + | |
− | | Shift count for Cluster <-> Bytes
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FDataStartSector:LongWord;</code>
| + | |
− | | First Sector of First Data Cluster (Relative to StartSector)
| + | |
− | |-
| + | |
− | | <code>FDataClusterCount:LongWord;</code>
| + | |
− | | Number of usable data clusters
| + | |
− | |-
| + | |
− | | <code>FTotalClusterCount:LongWord;</code>
| + | |
− | | Total number of clusters including reserved clusters
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FLastFreeCluster:LongWord;</code>
| + | |
− | | Or $FFFFFFFF if not known
| + | |
− | |-
| + | |
− | | <code>FFreeClusterCount:LongWord;</code>
| + | |
− | | Or $FFFFFFFF if not known
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FClusterSize:LongWord;</code>
| + | |
− | | Size of a Cluster in Bytes (Max 65536 > Word)
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FNameBuffer:Pointer;</code>
| + | |
− | | Buffer for long name handling
| + | |
− | |-
| + | |
− | | <code>FNameLock:TMutexHandle;</code>
| + | |
− | | Lock for name buffer
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FReadBuffer:Pointer;</code>
| + | |
− | | Buffer for partial cluster entry reads (Cluster size)
| + | |
− | |-
| + | |
− | | <code>FReadLock:TMutexHandle;</code>
| + | |
− | | Lock for read buffer
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FWriteBuffer:Pointer;</code>
| + | |
− | | Buffer for partial cluster entry writes (Cluster size)
| + | |
− | |-
| + | |
− | | <code>FWriteLock:TMutexHandle;</code>
| + | |
− | | Lock for write buffer
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>FClusterBuffer:Pointer;</code>
| + | |
− | | Buffer of exactly cluster size
| + | |
− | |-
| + | |
− | | <code>FClusterLock:TMutexHandle;</code>
| + | |
− | | Lock for cluster buffer
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function NameLock:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function NameUnlock:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function ReadLock:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function ReadUnlock:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function WriteLock:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function WriteUnlock:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function ClusterLock:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function ClusterUnlock:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetHardError:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>procedure SetHardError(AValue:Boolean);</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetCleanShutdown:Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>procedure SetCleanShutdown(AValue:Boolean);</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetVolumeFlags:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function SetVolumeFlags(AFlags:LongWord):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function FillCluster(ACluster:LongWord; AValue:Byte):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function ReadCluster(ACluster:LongWord; var ABuffer):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function WriteCluster(ACluster:LongWord; const ABuffer):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetNextFreeCluster:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetFreeClusterCount:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function SetNextFreeCluster(ACluster:LongWord):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function SetFreeClusterCount(ACount:LongWord):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetStartCluster(AEntry:TDiskEntry):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetParentCluster(AParent:TDiskEntry):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function CheckClusterBlock(ACluster,ANext:LongWord):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetNextChainCluster(AParent:LongWord):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetLastChainCluster(AParent:LongWord):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetChainClusterCount(AParent:LongWord):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetCluster(ACluster:LongWord):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function SetCluster(ACluster,AValue:LongWord;ACommit:Boolean):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function AllocCluster(AParent:LongWord; var ACluster:LongWord; ACount:LongWord):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function ReleaseCluster(AParent,ACluster:LongWord):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function CheckDirectoryRoot(AParent:TDiskEntry):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function CheckDirectoryStart(AParent:TDiskEntry):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetFirstDirectorySector(AParent:TDiskEntry; var ASector:LongWord):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetNextDirectorySector(AParent:TDiskEntry; var ASector:LongWord; AWrite:Boolean):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetDirectorySectorCount(AParent:TDiskEntry; AWrite:Boolean):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetDirectorySectorOffset(AParent:TDiskEntry):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function AllocDirectory(AParent:TDiskEntry; ACount:Byte; var AOffset,ASector:LongWord):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function ReleaseDirectory(AParent:TDiskEntry; ACount:Byte; AOffset,ASector:LongWord):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetBlockShiftCount(ASize:Word;AType:TFATType):Word;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetSectorShiftCount(ASectorsPerCluster:LongWord):Word;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetClusterShiftCount(AClusterSize:LongWord):Word;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetEntriesPerBlock(ASize:Word; AType:TFATType):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetSectorsPerBlock(ASize:Word; AType:TFATType):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>procedure ReadConvert(ADirectory:PFATDirectory);</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>procedure WriteConvert(ADirectory:PFATDirectory);</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function NameToEntry(AName:Pointer; AEntry:TFATDiskEntry; AShort:Boolean):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function EntryToName(AEntry:TFATDiskEntry; AName:Pointer; AShort:Boolean):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function BufferToName(ABuffer:Pointer ;var AName:String):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function NameToBuffer(const AName:String; ABuffer:Pointer):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function DirectoryToBuffer(ADirectory,ABuffer:Pointer; ACount,AChecksum:Byte; ALast:Boolean):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function BufferToDirectory(ABuffer,ADirectory:Pointer; ACount,AChecksum:Byte; ALast:Boolean):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function DirectoryToEntry(ADirectory:Pointer; AEntry:TFATDiskEntry; AShort:Boolean):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function EntryToDirectory(AEntry:TFATDiskEntry; ADirectory:Pointer; AShort:Boolean):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function FATTypeToFileSysType(AFATType:TFATType):TFileSysType;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
| + | |
− | |-
| + | |
− | | <code>function LoadMaxFile:Integer; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function LoadMaxPath:Integer; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function LoadAttributes:LongWord; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function LoadMaxAttributes:LongWord; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function LoadSystemName:String; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function LoadVolumeName:String; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function LoadVolumeSerial:LongWord; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function LoadFileSysType:TFileSysType; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function SetVolumeName(const AName:String):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function SetVolumeSerial(ASerial:LongWord):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function ReadEntry(AParent,AEntry:TDiskEntry; var ABuffer; const AStart:Int64; ACount:LongWord; var AOffset,AValue:LongWord):Integer; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function WriteEntry(AParent,AEntry:TDiskEntry; const ABuffer; const AStart:Int64; ACount:LongWord; var AOffset,AValue:LongWord):Integer; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function LoadTables:Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function LoadBlocks:Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function LoadEntries(AParent:TDiskEntry):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function LoadTable(ATableNo:LongWord):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function LoadBlock(ABlockNo:LongWord):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function LoadEntry(AParent:TDiskEntry; ABuffer:Pointer; var ABlockOffset,AEntryOffset,ABlockSector,AEntrySector:LongWord):Boolean;</code>
| + | |
− | | Not override
| + | |
− | |-
| + | |
− | | <code>function LoadLong(AParent:TDiskEntry; ABuffer:Pointer; var ABlockOffset,AEntryOffset,ABlockSector,AEntrySector:LongWord):Boolean;</code>
| + | |
− | | Not override
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function AddEntry(AParent:TDiskEntry; const AName:String; AAttributes:LongWord; AReference:Boolean):TDiskEntry; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function AddEntryEx(AParent:TDiskEntry; const AName,AAltName:String; AAttributes:LongWord; AReference:Boolean):TDiskEntry; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function RemoveEntry(AParent,AEntry:TDiskEntry):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function RenameEntry(AParent,AEntry:TDiskEntry; const AName:String):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function RenameEntryEx(AParent,AEntry:TDiskEntry; const AAltName:String):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function MoveEntry(ASource,ADest,AEntry:TDiskEntry):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function SetBlock(ABlock:TDiskBlock):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function SetEntry(AParent,AEntry:TDiskEntry):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function SetLong(AParent,AEntry:TDiskEntry):Boolean; {Not override}</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function SizeEntry(AParent,AEntry:TDiskEntry; const ASize:Int64):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetBlock(ABlockNo:LongWord):TDiskBlock; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetBlockEx(ABlockNo:LongWord; AWrite:Boolean):TDiskBlock; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function CheckName(const AName:String):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function CountName(const AName:String):Byte;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function CompareName(const AName,AMatch:String; AWildcard:Boolean):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function ChecksumName(AEntry:TDiskEntry):Byte;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GenerateName(AParent,AEntry:TDiskEntry; const AName:String):String;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetNameFlags(const AName:String):LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function CheckFlagName(const AName:String):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function ValidateName(AName:Pointer):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function ValidateDirectory(ADirectory:Pointer):Boolean;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
| + | |
− | |-
| + | |
− | | <code>property CaseFlags:Boolean read FCaseFlags write FCaseFlags;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property OemConvert:Boolean read FOemConvert write FOemConvert;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property NumericTail:Boolean read FNumericTail write FNumericTail;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>property ReadOnly:Boolean read FReadOnly write FReadOnly;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property LongNames:Boolean read FLongNames write FLongNames;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property CasePreserved:Boolean read FCasePreserved write FCasePreserved;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property UnicodeNames:Boolean read FUnicodeNames write FUnicodeNames;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>property HardError:Boolean read GetHardError write SetHardError;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property CleanShutdown:Boolean read GetCleanShutdown write SetCleanShutdown;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function FileSystemInit:Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function MountFileSystem:Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function DismountFileSystem:Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function InitializeFileSystem(ASectorsPerCluster:LongWord; AFileSysType:TFileSysType):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetDriveLabel:String; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function SetDriveLabel(const ALabel:String):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function SetDriveSerial(ASerial:LongWord):Boolean; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetDriveFreeSpaceEx:Int64; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>function GetDriveTotalSpaceEx:Int64; override;</code>
| + | |
− | |
| + | |
| |- | | |- |
| |} | | |} |
− | </div></div>
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" |
− | | + | |
− | '''FAT disk table'''
| + | |
− | | + | |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
| + | |
− | | + | |
− | <code>TFATDiskTable = class(TDiskTable)</code>
| + | |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| + | |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| + | |
| |- | | |- |
− | |colspan="2"|Note: Represents a FAT table. | + | | [[TFATDiskTable|<code>TFATDiskTable = class(TDiskTable)</code>]] |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
| + | |
− | |-
| + | |
− | | <code>FStartSector:LongWord;</code> | + | |
− | | style="width: 50%;"|
| + | |
− | |-
| + | |
− | | <code>FSectorCount:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
| + | |
− | |-
| + | |
− | | <code>property StartSector:LongWord read FStartSector write FStartSector;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property SectorCount:LongWord read FSectorCount write FSectorCount;</code>
| + | |
− | |
| + | |
| |- | | |- |
| |} | | |} |
− | </div></div>
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" |
− | | + | |
− | '''FAT disk block'''
| + | |
− | | + | |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
| + | |
− | | + | |
− | <code>TFATDiskBlock = class(TDiskBlock)</code>
| + | |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| + | |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| + | |
| |- | | |- |
− | |colspan="2"|Note: Represents a block of FAT entries. | + | | [[TFATDiskBlock|<code>TFATDiskBlock = class(TDiskBlock)</code>]] |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>constructor Create(ALocalLock:TMutexHandle);</code> | + | |
− | | style="width: 50%;"|
| + | |
− | |-
| + | |
− | | <code>destructor Destroy; override;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
| + | |
− | |-
| + | |
− | | <code>FBlockBuffer:Pointer;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FBlockSector:LongWord;</code>
| + | |
− | | Relative to the StartSector in Table
| + | |
− | |-
| + | |
− | | <code>FSectorCount:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
| + | |
− | |-
| + | |
− | | <code>property BlockBuffer:Pointer read FBlockBuffer write FBlockBuffer;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property BlockSector:LongWord read FBlockSector write FBlockSector;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property SectorCount:LongWord read FSectorCount write FSectorCount;</code>
| + | |
− | |
| + | |
| |- | | |- |
| |} | | |} |
− | </div></div>
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" |
− | | + | |
− | '''FAT disk entry'''
| + | |
− | | + | |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
| + | |
− | | + | |
− | <code>TFATDiskEntry = class(TDiskEntry)</code>
| + | |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| + | |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| + | |
| |- | | |- |
− | |colspan="2"|Note: Represents a FAT directory entry. | + | | [[TFATDiskEntry|<code>TFATDiskEntry = class(TDiskEntry)</code>]] |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
| + | |
− | |-
| + | |
− | | <code>FEntryCount:Byte;</code> | + | |
− | | Always 1 if short name only
| + | |
− | |-
| + | |
− | | <code>FNameOffset:LongWord;</code>
| + | |
− | | Same as EntryOffset if short name only
| + | |
− | |-
| + | |
− | | <code>FNameSector:LongWord;</code>
| + | |
− | | Same as EntrySector if short name only
| + | |
− | |-
| + | |
− | | <code>FEntryOffset:LongWord;</code>
| + | |
− | | style="width: 50%;"|
| + | |
− | |-
| + | |
− | | <code>FEntrySector:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>FStartCluster:LongWord;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
| + | |
− | |-
| + | |
− | | <code>property EntryCount:Byte read FEntryCount write FEntryCount;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property NameOffset:LongWord read FNameOffset write FNameOffset;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property NameSector:LongWord read FNameSector write FNameSector;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property EntryOffset:LongWord read FEntryOffset write FEntryOffset;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property EntrySector:LongWord read FEntrySector write FEntrySector;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | | <code>property StartCluster:LongWord read FStartCluster write FStartCluster;</code>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>property StartSector:LongWord read FStartCluster write FStartCluster;</code>
| + | |
− | |
| + | |
| |- | | |- |
| |} | | |} |
− | </div></div>
| |
| <br /> | | <br /> |
| | | |
Line 1,595: |
Line 922: |
| {| class="wikitable" style="font-size: 14px; background: white;" | | {| class="wikitable" style="font-size: 14px; background: white;" |
| |- | | |- |
− | ! '''Note''' | + | ! Note |
| | None documented | | | None documented |
| |- | | |- |
Line 1,607: |
Line 934: |
| {| class="wikitable" style="font-size: 14px; background: white;" | | {| class="wikitable" style="font-size: 14px; background: white;" |
| |- | | |- |
− | ! '''Note''' | + | ! Note |
| | None documented | | | None documented |
| |- | | |- |
Line 1,622: |
Line 949: |
| {| class="wikitable" style="font-size: 14px; background: white;" | | {| class="wikitable" style="font-size: 14px; background: white;" |
| |- | | |- |
− | ! '''Note''' | + | ! Note |
| | None documented | | | None documented |
| |- | | |- |