|
|
(2 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 851: |
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>
| + | |
− | |
| + | |
− | |-
| + | |
− | |colspan="2"|
| + | |
− | |-
| + | |
− | | <code>function GetDriveInformation(var AClusterSize:LongWord; var ATotalClusterCount,AFreeClusterCount:Int64):Boolean; 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 /> |
| | | |