Difference between revisions of "Unit CDFS"

From Ultibo.org
Jump to: navigation, search
Line 1,181: Line 1,181:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''ELTORITO validation record types'''   
+
'''EL TORITO validation record types'''   
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,213: Line 1,213:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''ELTORITO default record types'''   
+
'''EL TORITO default record types'''   
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,251: Line 1,251:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''ELTORITO section header types'''
+
'''EL TORITO section header types'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,277: Line 1,277:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''ELTORITO section record types'''   
+
'''EL TORITO section record types'''   
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,318: Line 1,318:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''ELTORITO section extension types'''   
+
'''EL TORITO section extension types'''   
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,341: Line 1,341:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''ELTORITO volume descriptor boot types'''   
+
'''EL TORITO volume descriptor boot types'''   
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,380: Line 1,380:
 
----
 
----
  
''To be documented''
+
 
 +
'''CDFS recognizer'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSRecognizer = 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>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
 +
|-
 +
| <code>FLongNames:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FSwapSerial:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function CheckPrimaryDescriptor(ASector:PSector; const AStartSector:Int64; ASectorCount:LongWord):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
 +
|-
 +
| <code>function GetName:String; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>property LongNames:Boolean read FLongNames write FLongNames;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property SwapSerial:Boolean read FSwapSerial write FSwapSerial;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function RecognizePartitionId(APartitionId:Byte):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function RecognizeBootSector(ABootSector:PBootSector; const AStartSector,ASectorCount:Int64):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function RecognizePartition(APartition:TDiskPartition):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function RecognizeVolume(AVolume:TDiskVolume):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function MountVolume(AVolume:TDiskVolume; ADrive:TDiskDrive):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS formatter'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSFormatter = 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>
 +
|-
 +
| <code>function CheckDevice(AVolume:TDiskVolume; ADrive:TDiskDrive; AFloppyType:TFloppyType):Boolean;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>function CheckPartition(AVolume:TDiskVolume; ADrive:TDiskDrive; AFileSysType:TFileSysType):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetPathTableSize(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ASupplementary:Boolean):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetPathTableStart(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ASupplementary,AEndian:Boolean):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetRootDirectorySize(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ASupplementary:Boolean):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetRootDirectoryStart(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ASupplementary:Boolean):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function CreatePrimaryDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorPrimary):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function WritePrimaryDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorPrimary):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function WritePrimaryPathTables(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorPrimary):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function WritePrimaryRootDirectory(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorPrimary):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function CreateSupplementaryDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorSupplementary):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function WriteSupplementaryDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorSupplementary):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function WriteSupplementaryPathTables(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorSupplementary):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function WriteSupplementaryRootDirectory(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorSupplementary):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function CreateTerminatorDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorTerminator):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function WriteTerminatorDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorTerminator):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>function AcceptVolume(AVolume:TDiskVolume; AFloppyType:TFloppyType; AFileSysType:TFileSysType):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function FormatVolume(AVolume:TDiskVolume; AFloppyType:TFloppyType; AFileSysType:TFileSysType):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS resizer'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSResizer = class(TDiskResizer)</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;">'''public'''</div>
 +
|-
 +
| <code>function AcceptVolume(AVolume:TDiskVolume; const AStart,ASize:Int64):Boolean; override;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function ShrinkVolume(AVolume:TDiskVolume; const AStart,ASize:Int64):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ExpandVolume(AVolume:TDiskVolume; const AStart,ASize:Int64):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div> 
 +
 
 +
'''CDFS copier'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSCopier = class(TDiskCopier)</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;">'''public'''</div>
 +
|-
 +
| <code>function AcceptVolume(AVolume,ADest:TDiskVolume):Boolean; override;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function CopyVolume(AVolume,ADest:TDiskVolume):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS file system'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSFileSystem = 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>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>destructor Destroy; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
 +
|-
 +
| <code>FCDFSType:TCDFSType;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FSwapSerial:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FVolumeFlags:LongWord;</code>
 +
| Volume flags
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FTreesLoaded:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FBlocksLoaded:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FCatalogsLoaded:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FCatalogsLoading:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FBlockWrite:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FTreesPrepared:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FCatalogsChecked:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FLogicalBlockSize:Word;</code>
 +
| Size of a logical block on disk
 +
|-
 +
| <code>FLogicalBlockCount:LongWord;</code>
 +
| Number of logical blocks on disk
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FSectorsPerCluster:LongWord;</code>
 +
| Usually 1,2,4,8,16,32,64,128 etc
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FDataStartCluster:LongWord;</code>
 +
| Usually 16 (First cluster of Data Area)
 +
|-
 +
| <code>FBootStartCluster:LongWord;</code>
 +
| Usually 17 (Cluster of the Boot Descriptor)
 +
|-
 +
| <code>FRootStartCluster:LongWord;</code>
 +
| Pointed to by Primary Descriptor
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <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"|&nbsp;
 +
|-
 +
| <code>FEntriesPerBlock:LongWord;</code>
 +
| Number of Cluster entries per Block of bitmap
 +
|-
 +
| <code>FClustersPerBlock:LongWord;</code>
 +
| Number of Clusters per Block of bitmap entries
 +
|-
 +
| <code>FTotalBlockCount:LongWord;</code>
 +
| Total number of Blocks in bitmap
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FTotalClusterCount:LongWord;</code>
 +
| Total number of Clusters on volume
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FLastFreeCluster:LongWord;</code>
 +
| Or cdfsUnknownCluster if not known
 +
|-
 +
| <code>FFreeClusterCount:LongWord;</code>
 +
| Or cdfsUnknownCluster if not known
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FClusterSize:LongWord;</code>
 +
| Size of a Cluster in Bytes (Max 65536 > Word)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FBoot:TCDFSDiskDescriptor;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FPrimary:TCDFSDiskDescriptor;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FSupplementary:TCDFSDiskDescriptor;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FHeaders:TFileSysList;</code>
 +
| List of Catalog Headers
 +
|-
 +
| <code>FExtensions:TFileSysList;</code>
 +
| List of Catalog Extensions
 +
|-
 +
| <code>FDescriptors:TFileSysList;</code>
 +
| List of Volume Descriptors
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FHeaderLocal:TMutexHandle;</code>
 +
| Local Lock shared by all Catalog Headers
 +
|-
 +
| <code>FExtensionLocal:TMutexHandle;</code>
 +
| Local Lock shared by all Catalog Extensions
 +
|-
 +
| <code>FDescriptorLocal:TMutexHandle;</code>
 +
| Local Lock shared by all Volume Descriptors
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FExtendedLocal:TMutexHandle;</code>
 +
| Local Lock shared by all Extended Attributes
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FPathLock:TSynchronizerHandle;</code>
 +
| Lock shared by all Path lists
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FReadBuffer:Pointer;</code>
 +
| Buffer for partial cluster entry reads (Cluster size)
 +
|-
 +
| <code>FReadLock:TMutexHandle;</code>
 +
| Lock for read buffer
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FWriteBuffer:Pointer;</code>
 +
| Buffer for partial cluster entry writes (Cluster size)
 +
|-
 +
| <code>FWriteLock:TMutexHandle;</code>
 +
| Lock for write buffer
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FClusterBuffer:Pointer;</code>
 +
| Buffer of exactly cluster size
 +
|-
 +
| <code>FClusterLock:TMutexHandle;</code>
 +
| Lock for cluster buffer
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function ReadLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ReadUnlock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function WriteLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function WriteUnlock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function ClusterLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ClusterUnlock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function LoadTree(AEntry:TDiskEntry):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function MarkTree(AEntry:TDiskEntry):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function PrepareTree(AEntry:TDiskEntry):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function PrepareTable(ATable:TDiskTable):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function PrepareTrees:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function CheckCatalogs:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function LocatePath(ATable:TCDFSDiskTable; APathNumber:Word):TCDFSDiskPath;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LocateEntry(AEntry:TCDFSDiskEntry; AStartCluster:LongWord):TCDFSDiskEntry;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function LoadVolumeFlags:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function FillClusters(ACluster:LongWord; ACount:Word; AValue:Byte):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function ReadClusters(ACluster:LongWord; ACount:Word; var ABuffer):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function WriteClusters(ACluster:LongWord; ACount:Word; const ABuffer):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function TestClusters(ACluster,ACount:LongWord):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function MarkClusters(ACluster,ACount:LongWord; AUsed:Boolean):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AllocClusters(var ACluster:LongWord; ACount:LongWord):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ReleaseClusters(ACluster,ACount:LongWord):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetNextFreeCluster:LongWord;</code>
 +
| Return is a Cluster
 +
|-
 +
| <code>function GetFreeClusterCount:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function TestBlock(ABlock:TCDFSDiskBlock; AStart,ACount:LongWord):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function MarkBlock(ABlock:TCDFSDiskBlock; AStart,ACount:LongWord; AUsed:Boolean):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AllocBlock(ABlock:TCDFSDiskBlock; AStart,ACount:LongWord):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ReleaseBlock(ABlock:TCDFSDiskBlock; AStart,ACount:LongWord):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetBlockNextFree(ABlock:TCDFSDiskBlock; AStart:LongWord):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetBlockFreeCount(ABlock:TCDFSDiskBlock):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function TestBitmap(ABuffer:Pointer; ASize,AStart,ACount:LongWord):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function MarkBitmap(ABuffer:Pointer; ASize,AStart,ACount:LongWord; AUsed:Boolean):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AllocBitmap(ABuffer:Pointer; ASize:LongWord; AStart,ACount:LongWord):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ReleaseBitmap(ABuffer:Pointer; ASize:LongWord; AStart,ACount:LongWord):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetBitmapNextFree(ABuffer:Pointer; ASize,AStart:LongWord):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetBitmapFreeCount(ABuffer:Pointer; ASize:LongWord):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetTableDataFree(ATable:TDiskTable):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetEntryDataFree(AEntry:TDiskEntry):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetCatalogDataFree(ADescriptor:TCDFSDiskDescriptor):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetPreviousPath(ATable:TCDFSDiskTable; APath:TCDFSDiskPath):TCDFSDiskPath;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetPreviousEntry(AParent,AEntry:TCDFSDiskEntry):TCDFSDiskEntry;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetSectorsPerCluster(AClusterSize:LongWord):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetBlockShiftCount(AClusterSize:LongWord):Word;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetSectorShiftCount(AClusterSize:LongWord):Word;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetClusterShiftCount(AClusterSize:LongWord):Word;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetEntriesPerBlock(AClusterSize:LongWord):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetClustersPerBlock(AClusterSize:LongWord):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetTotalBlockCount(ATotalClusterCount:LongWord):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function RenumberPaths(ATable:TDiskTable):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function ComparePath(APath1,APath2:TCDFSDiskPath; AUnicode:Boolean):Integer;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function CompareEntry(AEntry1,AEntry2:TCDFSDiskEntry; AUnicode:Boolean):Integer;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function PadString(const AString:String; ALength:Integer; APrefix,AUnicode:Boolean):String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function CompareString(const AString1,AString2:String; AReverse:Boolean):Integer;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function ChecksumValidationRecord(AValidation:PELTORITOValidationRecord):Word;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function RecordToPath(ARecord:Pointer; APath:TCDFSDiskPath; AUnicode,AEndian:Boolean):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function PathToRecord(APath:TCDFSDiskPath; ARecord:Pointer; AUnicode,AEndian:Boolean):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function RecordToEntry(ARecord:Pointer; AEntry:TCDFSDiskEntry; AUnicode:Boolean):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function EntryToRecord(AEntry:TCDFSDiskEntry; ARecord:Pointer; AUnicode:Boolean):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function CDFSTypeToFileSysType(ACDFSType:TCDFSType):TFileSysType;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
 +
|-
 +
| <code>function LoadMaxFile:Integer; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LoadMaxPath:Integer; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LoadAttributes:LongWord; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LoadSystemName:String; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LoadVolumeName:String; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LoadVolumeSerial:LongWord; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LoadFileSysType:TFileSysType; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function SetVolumeName(const AName:String):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function SetVolumeSerial(ASerial:LongWord):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function ReadEntry(AParent,AEntry:TDiskEntry; var ABuffer; const AStart:Int64; ACount:LongWord; var AOffset,AValue:LongWord):Integer; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function WriteEntry(AParent,AEntry:TDiskEntry; const ABuffer; const AStart:Int64; ACount:LongWord; var AOffset,AValue:LongWord):Integer; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function LoadTrees:Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function LoadTables:Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LoadBlocks:Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LoadDescriptors:Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function LoadRoots:Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function LoadPaths(ATable:TCDFSDiskTable):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function LoadEntries(AParent:TDiskEntry):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LoadCatalogs:Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function SetPaths(ATable:TCDFSDiskTable):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function SetEntries(AParent:TDiskEntry):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function SetCatalogs:Boolean;</code>
 +
| Not override
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function LoadTable(ATableNo:LongWord):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LoadBlock(ABlockNo:LongWord):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function LoadDescriptor(ABuffer:Pointer; ACluster:LongWord):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function LoadRoot(ADescriptor:TCDFSDiskDescriptor):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function LoadPath(ATable:TCDFSDiskTable; ABuffer:Pointer; AOffset:LongWord; ANumber:Word):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function LoadEntry(AParent:TCDFSDiskEntry; ABuffer:Pointer; AOffset,ACluster:LongWord):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function LoadHeader(ABuffer:Pointer; AOffset,ACluster:LongWord; AHeaderNo:LongWord):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function LoadCatalog(ABuffer:Pointer; AOffset,ACluster:LongWord; ACatalogNo:LongWord; AInitial:Boolean):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function LoadExtension(ABuffer:Pointer; AOffset,ACluster:LongWord; AExtensionNo:LongWord):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function LoadExtended(AEntry:TDiskEntry):Boolean;</code>
 +
| Not override
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AddDescriptor(AType:Byte):TCDFSDiskDescriptor;</code>
 +
| Not override
 +
|-
 +
| <code>function RemoveDescriptor(ADescriptor:TCDFSDiskDescriptor):Boolean;</code>
 +
| Not override
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AddPath(ATable:TDiskTable; AParentNumber:Word; const AName:String; AStartCluster:LongWord):TCDFSDiskPath;</code>
 +
| Not override
 +
|-
 +
| <code>function RemovePath(ATable:TDiskTable; APath:TCDFSDiskPath):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function RenamePath(ATable:TDiskTable; APath:TCDFSDiskPath; const AName:String):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function MovePath(ATable:TDiskTable; ADestNumber:Word; APath:TCDFSDiskPath):Boolean;</code>
 +
| Not override
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AddEntry(AParent:TDiskEntry; const AName:String; AAttributes:LongWord; AReference:Boolean):TDiskEntry; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function AddEntryEx(AParent:TDiskEntry; const AName,AAltName:String; AAttributes:LongWord; AReference:Boolean):TDiskEntry; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function RemoveEntry(AParent,AEntry:TDiskEntry):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function RenameEntry(AParent,AEntry:TDiskEntry; const AName:String):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function RenameEntryEx(AParent,AEntry:TDiskEntry; const AAltName:String):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function MoveEntry(ASource,ADest,AEntry:TDiskEntry):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AddCatalog(AEntry:TDiskEntry; AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64):TDiskCatalog; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function RemoveCatalog(ACatalog:TDiskCatalog):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetNextHeaderNo:LongWord;</code>
 +
| Not override
 +
|-
 +
| <code>function GetMaxHeaderNo:LongWord;</code>
 +
| Not override
 +
|-
 +
| <code>function GetNextHeaderOffset:LongWord;</code>
 +
| Not override
 +
|-
 +
| <code>function GetNextHeaderCluster:LongWord;</code>
 +
| Not override
 +
|-
 +
| <code>function GetNextCatalogOffset:LongWord;</code>
 +
| Not override
 +
|-
 +
| <code>function GetNextCatalogCluster:LongWord;</code>
 +
| Not override
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function SetTable(ATable:TDiskTable):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function SetBlock(ABlock:TDiskBlock):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function SetDescriptor(ADescriptor:TCDFSDiskDescriptor):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function SetRoot(ADescriptor:TCDFSDiskDescriptor; ARoot:TDiskEntry):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function SetPath(ATable:TDiskTable; APath:TCDFSDiskPath; ABuffer:Pointer):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function SetEntry(AParent,AEntry:TDiskEntry):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function SetHeader(AHeader:TCDFSDiskHeader):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function SetCatalog(ACatalog:TDiskCatalog):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function SetExtension(AExtension:TCDFSDiskExtension):Boolean;</code>
 +
| Not override
 +
|-
 +
| <code>function SetExtended(AEntry:TDiskEntry; AExtended:TCDFSDiskExtended):Boolean;</code>
 +
| Not override
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function SizeEntry(AParent,AEntry:TDiskEntry; const ASize:Int64):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetBlock(ABlockNo:LongWord):TDiskBlock; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetBlockEx(ABlockNo:LongWord; AWrite:Boolean):TDiskBlock; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetDescriptor(AType,AInstance:Byte):TCDFSDiskDescriptor;</code>
 +
| Not override
 +
|-
 +
| <code>function GetDescriptorEx(AType,AInstance:Byte; AWrite:Boolean):TCDFSDiskDescriptor;</code>
 +
| Not override
 +
|-
 +
| <code>function GetRoot(ADescriptor:TCDFSDiskDescriptor):TDiskEntry;</code>
 +
| Not override
 +
|-
 +
| <code>function GetPath(ATable:TDiskTable; AParentNumber:Word; const AName:String):TCDFSDiskPath;</code>
 +
| Not override
 +
|-
 +
| <code>function GetHeader(AHeaderNo:LongWord):TCDFSDiskHeader;</code>
 +
| Not override
 +
|-
 +
| <code>function GetHeaderEx(AHeaderNo:LongWord; AWrite:Boolean):TCDFSDiskHeader;</code>
 +
| Not override
 +
|-
 +
| <code>function GetExtension(AExtensionNo:LongWord):TCDFSDiskExtension;</code>
 +
| Not override
 +
|-
 +
| <code>function GetExtensionEx(AExtensionNo:LongWord; AWrite:Boolean):TCDFSDiskExtension;</code>
 +
| Not override
 +
|-
 +
| <code>function GetExtended(AEntry:TDiskEntry):TCDFSDiskExtended;</code>
 +
| Not override
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetVersion(const AName:String):String;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function StripDot(const AName:String):String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function StripVersion(const AName:String):String;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function CompareName(const AName,AMatch:String; AWildcard:Boolean):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function CompareSequence(const ASequence; const ACompare; ASize:Integer):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function CompareIdentifier(const AIdentifier; const ACompare; ASize:Integer):Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function CalculateVolumeSerial(ABuffer:Pointer; ASize:Integer):LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>property ReadOnly:Boolean read FReadOnly write FReadOnly;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property LongNames:Boolean read FLongNames write FLongNames;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property CasePreserved:Boolean read FCasePreserved write FCasePreserved;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property UnicodeNames:Boolean read FUnicodeNames write FUnicodeNames;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property SwapSerial:Boolean read FSwapSerial write FSwapSerial;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function FileSystemInit:Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function MountFileSystem:Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function DismountFileSystem:Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function InitializeFileSystem(ASectorsPerCluster:LongWord; AFileSysType:TFileSysType):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetDriveLabel:String; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function SetDriveLabel(const ALabel:String):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function SetDriveSerial(ASerial:LongWord):Boolean; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetDriveFreeSpaceEx:Int64; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetDriveTotalSpaceEx:Int64; override;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS disk table'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSDiskTable = 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 CDFS path table.
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>constructor Create(ALock:TSynchronizerHandle; ALocalLock:TMutexHandle; ADescriptor:TCDFSDiskDescriptor);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>destructor Destroy; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
 +
|-
 +
| <code>FTableType:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FEndian:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FUnicode:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FPathsLoaded:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FStartCluster:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FClusterCount:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FDataFree:LongWord;</code>
 +
| Data Free
 +
|-
 +
| <code>FDataSize:LongWord;</code>
 +
| Data Length
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FPaths:TFileSysListEx;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FPathLocal:TMutexHandle;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FDescriptor:TCDFSDiskDescriptor;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>property TableType:Byte read FTableType write FTableType;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Endian:Boolean read FEndian write FEndian;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Unicode:Boolean read FUnicode write FUnicode;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property PathsLoaded:Boolean read FPathsLoaded write FPathsLoaded;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property StartCluster:LongWord read FStartCluster write FStartCluster;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ClusterCount:LongWord read FClusterCount write FClusterCount;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property DataFree:LongWord read FDataFree write FDataFree;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property DataSize:LongWord read FDataSize write FDataSize;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property Paths:TFileSysListEx read FPaths;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PathLocal:TMutexHandle read FPathLocal;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Descriptor:TCDFSDiskDescriptor read FDescriptor;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS disk block'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSDiskBlock = 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 clusters.
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>constructor Create(ALocalLock:TMutexHandle);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>destructor Destroy; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
 +
|-
 +
| <code>FBlockCount:LongWord;</code>
 +
| Number of cluster entries in this block
 +
|-
 +
| <code>FBlockBuffer:Pointer;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FBlockCluster:LongWord;</code>
 +
| First cluster represented by this block
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>property BlockCount:LongWord read FBlockCount write FBlockCount;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property BlockBuffer:Pointer read FBlockBuffer write FBlockBuffer;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property BlockCluster:LongWord read FBlockCluster write FBlockCluster;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS disk entry'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSDiskEntry = 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 CDFS directory entry.
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>constructor Create(ALocalLock:TMutexHandle);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>destructor Destroy; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
 +
|-
 +
| <code>FUnicode:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FVersion:String;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FEntryOffset:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FEntryCluster:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FStartCluster:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FClusterCount:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FRecordSize:Byte;</code>
 +
| Length of Directory Record (LEN-DR)
 +
|-
 +
| <code>FExtendedSize:Byte;</code>
 +
| Extended Attribute Record Length
 +
|-
 +
| <code>FDataSize:LongWord;</code>
 +
| Data Length
 +
|-
 +
| <code>FUnitSize:Byte;</code>
 +
| File Unit Size
 +
|-
 +
| <code>FInterleaveSize:Byte;</code>
 +
| Interleave Gap Size
 +
|-
 +
| <code>FSequenceNumber:Word;</code>
 +
| Volume Sequence Number
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FDataFree:LongWord;</code>
 +
| Data Free
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FPath:TCDFSDiskPath;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FPathM:TCDFSDiskPath;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FAltPath:TCDFSDiskPath;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FAltPathM:TCDFSDiskPath;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FExtended:TCDFSDiskExtended;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetVersion:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetVersion(const AVersion:String);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>property Unicode:Boolean read FUnicode write FUnicode;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Version:String read GetVersion write SetVersion;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property EntryOffset:LongWord read FEntryOffset write FEntryOffset;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property EntryCluster:LongWord read FEntryCluster write FEntryCluster;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property StartCluster:LongWord read FStartCluster write FStartCluster;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ClusterCount:LongWord read FClusterCount write FClusterCount;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property RecordSize:Byte read FRecordSize write FRecordSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ExtendedSize:Byte read FExtendedSize write FExtendedSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property DataSize:LongWord read FDataSize write FDataSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property FirstBlock:LongWord read FStartCluster write FStartCluster;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property UnitSize:Byte read FUnitSize write FUnitSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property InterleaveSize:Byte read FInterleaveSize write FInterleaveSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property SequenceNumber:Word read FSequenceNumber write FSequenceNumber;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property DataFree:LongWord read FDataFree write FDataFree;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property Path:TCDFSDiskPath read FPath write FPath;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PathM:TCDFSDiskPath read FPathM write FPathM;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property AltPath:TCDFSDiskPath read FAltPath write FAltPath;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property AltPathM:TCDFSDiskPath read FAltPathM write FAltPathM;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Extended:TCDFSDiskExtended read FExtended write FExtended;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function PathNumber:Word;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ParentNumber:Word;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function FileIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function FileIdentifierSize:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function DirectoryRecordSize:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ExtendedRecordSize:Byte;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS disk catalog'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSDiskCatalog = class(TDiskCatalog)</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 CDFS boot catalog entry (Also the Initial/Default entry).
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>constructor Create(ALocalLock:TMutexHandle);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>destructor Destroy; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
 +
|-
 +
| <code>FCatalogOffset:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FCatalogCluster:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FStartCluster:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FClusterCount:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FInitial:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FBootIndicator:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FBootMedia:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FLoadSegment:Word;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FSystemType:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FLoadCount:Word;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FSelectionType:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FSelectionData:Pointer;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FEntry:TCDFSDiskEntry;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FHeader:TCDFSDiskHeader;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''protected'''</div>
 +
|-
 +
| <code>function GetName:String; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetName(const AName:String); override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetMediaType:TMediaType; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetMediaType(AMediaType:TMediaType); override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetFloppyType:TFloppyType; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetFloppyType(AFloppyType:TFloppyType); override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetAttributes:LongWord; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetAttributes(AAttributes:LongWord); override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetSectorSize:Word; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetSectorSize(ASectorSize:Word); override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetSectorCount:Int64; override;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetSectorCount(const ASectorCount:Int64); override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetStartCluster:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetStartCluster(AStartCluster:LongWord);</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetClusterCount:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetClusterCount(AClusterCount:LongWord);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>property CatalogOffset:LongWord read FCatalogOffset write FCatalogOffset;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property CatalogCluster:LongWord read FCatalogCluster write FCatalogCluster;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property StartCluster:LongWord read GetStartCluster write SetStartCluster;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ClusterCount:LongWord read GetClusterCount write SetClusterCount;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property Initial:Boolean read FInitial write FInitial;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property BootIndicator:Byte read FBootIndicator write FBootIndicator;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property BootMedia:Byte read FBootMedia write FBootMedia;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property LoadSegment:Word read FLoadSegment write FLoadSegment;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property SystemType:Byte read FSystemType write FSystemType;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property LoadCount:Word read FLoadCount write FLoadCount;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property SelectionType:Byte read FSelectionType write FSelectionType;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property SelectionData:Pointer read FSelectionData write FSelectionData;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property Entry:TCDFSDiskEntry read FEntry write FEntry;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Header:TCDFSDiskHeader read FHeader write FHeader;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Validation:TCDFSDiskHeader read FHeader write FHeader;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS disk path'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSDiskPath = class(TListObject)</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 CDFS path table entry.
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>constructor Create(ALocalLock:TMutexHandle);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>destructor Destroy; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
 +
|-
 +
| <code>FLocalLock:TMutexHandle;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FName:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FHash:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FPathNumber:Word;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FPathOffset:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FStartCluster:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FExtendedSize:Byte;</code>
 +
| Extended Attribute Record Length
 +
|-
 +
| <code>FParentNumber:Word;</code>
 +
| Parent Directory Number
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FParent:TCDFSDiskPath;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AcquireLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ReleaseLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetName:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetName(const AName:String);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>property Name:String read GetName write SetName;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Hash:LongWord read FHash;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property PathNumber:Word read FPathNumber write FPathNumber;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PathOffset:LongWord read FPathOffset write FPathOffset;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property StartCluster:LongWord read FStartCluster write FStartCluster;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property ExtendedSize:Byte read FExtendedSize write FExtendedSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property FirstBlock:LongWord read FStartCluster write FStartCluster;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ParentNumber:Word read FParentNumber write FParentNumber;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property Parent:TCDFSDiskPath read FParent write FParent;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function PathIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function PathIdentifierSize(AUnicode:Boolean):Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function PathRecordSize(AUnicode:Boolean):Byte;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS disk extended'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSDiskExtended = class(TObject)</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 CDFS extended attribute.
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>constructor Create(ALocalLock:TMutexHandle);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>destructor Destroy; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
 +
|-
 +
| <code>FLocalLock:TMutexHandle;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FStartCluster:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FClusterCount:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FOwnerId:Word;</code>
 +
| Owner Identification
 +
|-
 +
| <code>FGroupId:Word;</code>
 +
| Group Identification
 +
|-
 +
| <code>FPermissions:Word;</code>
 +
| Permissions 16 bits
 +
|-
 +
| <code>FCreateTime:TFileTime;</code>
 +
| File Creation Date and Time
 +
|-
 +
| <code>FModifyTime:TFileTime;</code>
 +
| File Modification Date and Time
 +
|-
 +
| <code>FExpireTime:TFileTime;</code>
 +
| File Expiration Date and Time
 +
|-
 +
| <code>FEffectiveTime:TFileTime;</code>
 +
| File Effective Date and Time
 +
|-
 +
| <code>FRecordFormat:Byte;</code>
 +
| Record Format
 +
|-
 +
| <code>FRecordAttributes:Byte;</code>
 +
| Record Attributes
 +
|-
 +
| <code>FRecordLength:Word;</code>
 +
| Record Length
 +
|-
 +
| <code>FSystemIdentifier:String;</code>
 +
| System Identifier a-characters, a1-characters
 +
|-
 +
| <code>FSystemData:Pointer;</code>
 +
| System Use not specified
 +
|-
 +
| <code>FExtendedVersion:Byte;</code>
 +
| Extended Attribute Record Version
 +
|-
 +
| <code>FEscapeSequenceSize:Byte;</code>
 +
| Length of Escape Sequences (LEN_ESC)
 +
|-
 +
| <code>FApplicationDataSize:Word;</code>
 +
| Length of Application Use (LEN_AU)
 +
|-
 +
| <code>FApplicationData:Pointer;</code>
 +
| Application Use LEN_AU bytes
 +
|-
 +
| <code>FEscapeSequence:Pointer;</code>
 +
| Escape Sequences LEN_ESC bytes
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AcquireLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ReleaseLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetSystemIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetSystemIdentifier(const ASystemIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>property StartCluster:LongWord read FStartCluster write FStartCluster;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ClusterCount:LongWord read FClusterCount write FClusterCount;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property OwnerId:Word read FOwnerId write FOwnerId;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property GroupId:Word read FGroupId write FGroupId;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Permissions:Word read FPermissions write FPermissions;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property CreateTime:TFileTime read FCreateTime write FCreateTime;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ModifyTime:TFileTime read FModifyTime write FModifyTime;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ExpireTime:TFileTime read FExpireTime write FExpireTime;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property EffectiveTime:TFileTime read FEffectiveTime write FEffectiveTime;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property RecordFormat:Byte read FRecordFormat write FRecordFormat;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property RecordAttributes:Byte read FRecordAttributes write FRecordAttributes;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property RecordLength:Word read FRecordLength write FRecordLength;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property SystemIdentifier:String read GetSystemIdentifier write SetSystemIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property SystemData:Pointer read FSystemData write FSystemData;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ExtendedVersion:Byte read FExtendedVersion write FExtendedVersion;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property EscapeSequenceSize:Byte read FEscapeSequenceSize write FEscapeSequenceSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ApplicationDataSize:Word read FApplicationDataSize write FApplicationDataSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ApplicationData:Pointer read FApplicationData write FApplicationData;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property EscapeSequence:Pointer read FEscapeSequence write FEscapeSequence;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function ExtendedRecordSize:Byte;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS disk descriptor'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSDiskDescriptor = class(TListObject)</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 CDFS volume descriptor.
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>constructor Create(ALocalLock:TMutexHandle);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>destructor Destroy; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
 +
|-
 +
| <code>FLocalLock:TMutexHandle;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FUnicode:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FStartCluster:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FDescriptorType:Byte;</code>
 +
| Descriptor Type (00 = Boot, 01 = Primary etc)
 +
|-
 +
| <code>FDescriptorVersion:Byte;</code>
 +
| Descriptor Version (1)
 +
|-
 +
| <code>FStandardIdentifier:String;</code>
 +
| Standard Identifier ('CD001')
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FSystemIdentifier:String;</code>
 +
| System Identifier a-characters (eg EL TORITO SPECIFICATION)
 +
|-
 +
| <code>FVolumeIdentifier:String;</code>
 +
| Volume Identifier d-characters
 +
|-
 +
| <code>FVolumeSpaceSize:LongWord;</code>
 +
| Volume Space Size
 +
|-
 +
| <code>FVolumeSetSize:Word;</code>
 +
| Volume Set Size
 +
|-
 +
| <code>FVolumeSequenceNumber:Word;</code>
 +
| Volume Sequence Number
 +
|-
 +
| <code>FLogicalBlockSize:Word;</code>
 +
| Logical Block Size
 +
|-
 +
| <code>FPathTableSize:LongWord;</code>
 +
| Path Table Size
 +
|-
 +
| <code>FPrimaryPathTable:LongWord;</code>
 +
| Location of Occurrence of Type L Path Table
 +
|-
 +
| <code>FAlternatePathTable:LongWord;</code>
 +
| Location of Optional Occurrence of Type L Path Table
 +
|-
 +
| <code>FPrimaryPathTableM:LongWord;</code>
 +
| Location of Occurrence of Type M Path Table
 +
|-
 +
| <code>FAlternatePathTableM:LongWord;</code>
 +
| Location of Optional Occurrence of Type M Path Table
 +
|-
 +
| <code>FVolumeSetIdentifier:String;</code>
 +
| Volume Set Identifier d-characters
 +
|-
 +
| <code>FPublisherIdentifier:String;</code>
 +
| Publisher Identifier a-characters
 +
|-
 +
| <code>FPreparerIdentifier:String;</code>
 +
| Data Preparer Identifier a-characters
 +
|-
 +
| <code>FApplicationIdentifier:String;</code>
 +
| Application Identifier a-characters
 +
|-
 +
| <code>FCopyrightIdentifier:String;</code>
 +
| Copyright File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
 +
|-
 +
| <code>FAbstractIdentifier:String;</code>
 +
| Abstract File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
 +
|-
 +
| <code>FBibliographicIdentifier:String;</code>
 +
| Bibliographic File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
 +
|-
 +
| <code>FCreateTime:TFileTime;</code>
 +
| Volume Creation Date and Time
 +
|-
 +
| <code>FModifyTime:TFileTime;</code>
 +
| Volume Modification Date and Time
 +
|-
 +
| <code>FExpireTime:TFileTime;</code>
 +
| Volume Expiration Date and Time
 +
|-
 +
| <code>FEffectiveTime:TFileTime;</code>
 +
| Volume Effective Date and Time
 +
|-
 +
| <code>FFileStructureVersion:Byte;</code>
 +
| File Structure Version
 +
|-
 +
| <code>FApplicationData:Pointer;</code>
 +
| Application Use not specified
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FVolumeFlags:Byte;</code>
 +
| Volume Flags 8 bits
 +
|-
 +
| <code>FEscapeSequences:Pointer;</code>
 +
| Escape Sequences 32 bytes
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FBootIdentifier:String;</code>
 +
| 32 a-characters
 +
|-
 +
| <code>FCatalogStart:LongWord;</code>
 +
| Absolute pointer to first sector of Boot Catalog
 +
|-
 +
| <code>FCatalogCount:LongWord;</code>
 +
| Number of Sectors in Boot Catalog (Not Stored)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FPartitionIdentifier:String;</code>
 +
| Volume Partition Identifier d-characters
 +
|-
 +
| <code>FPartitionStart:LongWord;</code>
 +
| Volume Partition Location (first Logical Block)
 +
|-
 +
| <code>FPartitionSize:LongWord;</code>
 +
| Volume Partition Size (in Logical Blocks)
 +
|-
 +
| <code>FSystemData:Pointer;</code>
 +
| System Use not specified
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FRoot:TCDFSDiskEntry;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FPrimary:TCDFSDiskTable;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FPrimaryM:TCDFSDiskTable;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FAlternate:TCDFSDiskTable;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FAlternateM:TCDFSDiskTable;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FInitial:TCDFSDiskCatalog;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FValidation:TCDFSDiskHeader;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AcquireLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ReleaseLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetStandardIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetStandardIdentifier(const AStandardIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetSystemIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetSystemIdentifier(const ASystemIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetVolumeIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetVolumeIdentifier(const AVolumeIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetVolumeSetIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetVolumeSetIdentifier(const AVolumeSetIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetPublisherIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetPublisherIdentifier(const APublisherIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetPreparerIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetPreparerIdentifier(const APreparerIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetApplicationIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetApplicationIdentifier(const AApplicationIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetCopyrightIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetCopyrightIdentifier(const ACopyrightIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetAbstractIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetAbstractIdentifier(const AAbstractIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
| <code>function GetBibliographicIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetBibliographicIdentifier(const ABibliographicIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetBootIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetBootIdentifier(const ABootIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetPartitionIdentifier:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetPartitionIdentifier(const APartitionIdentifier:String);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>property Unicode:Boolean read FUnicode write FUnicode;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property StartCluster:LongWord read FStartCluster write FStartCluster;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property DescriptorType:Byte read FDescriptorType write FDescriptorType;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property DescriptorVersion:Byte read FDescriptorVersion write FDescriptorVersion;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property StandardIdentifier:String read GetStandardIdentifier write SetStandardIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property SystemIdentifier:String read GetSystemIdentifier write SetSystemIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property VolumeIdentifier:String read GetVolumeIdentifier write SetVolumeIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property VolumeSpaceSize:LongWord read FVolumeSpaceSize write FVolumeSpaceSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property VolumeSetSize:Word read FVolumeSetSize write FVolumeSetSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property VolumeSequenceNumber:Word read FVolumeSequenceNumber write FVolumeSequenceNumber;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property LogicalBlockSize:Word read FLogicalBlockSize write FLogicalBlockSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PathTableSize:LongWord read FPathTableSize write FPathTableSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PrimaryPathTable:LongWord read FPrimaryPathTable write FPrimaryPathTable;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property AlternatePathTable:LongWord read FAlternatePathTable write FAlternatePathTable;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PrimaryPathTableM:LongWord read FPrimaryPathTableM write FPrimaryPathTableM;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property AlternatePathTableM:LongWord read FAlternatePathTableM write FAlternatePathTableM;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property VolumeSetIdentifier:String read GetVolumeSetIdentifier write SetVolumeSetIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PublisherIdentifier:String read GetPublisherIdentifier write SetPublisherIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PreparerIdentifier:String read GetPreparerIdentifier write SetPreparerIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ApplicationIdentifier:String read GetApplicationIdentifier write SetApplicationIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property CopyrightIdentifier:String read GetCopyrightIdentifier write SetCopyrightIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property AbstractIdentifier:String read GetAbstractIdentifier write SetAbstractIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property BibliographicIdentifier:String read GetBibliographicIdentifier write SetBibliographicIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property CreateTime:TFileTime read FCreateTime write FCreateTime;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ModifyTime:TFileTime read FModifyTime write FModifyTime;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ExpireTime:TFileTime read FExpireTime write FExpireTime;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property EffectiveTime:TFileTime read FEffectiveTime write FEffectiveTime;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property FileStructureVersion:Byte read FFileStructureVersion write FFileStructureVersion;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ApplicationData:Pointer read FApplicationData write FApplicationData;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property VolumeFlags:Byte read FVolumeFlags write FVolumeFlags;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property EscapeSequences:Pointer read FEscapeSequences write FEscapeSequences;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property BootIdentifier:String read GetBootIdentifier write SetBootIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property CatalogStart:LongWord read FCatalogStart write FCatalogStart;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property CatalogCount:LongWord read FCatalogCount write FCatalogCount;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property PartitionIdentifier:String read GetPartitionIdentifier write SetPartitionIdentifier;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PartitionStart:LongWord read FPartitionStart write FPartitionStart;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PartitionSize:LongWord read FPartitionSize write FPartitionSize;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property SystemData:Pointer read FSystemData write FSystemData;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property Root:TCDFSDiskEntry read FRoot write FRoot;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Primary:TCDFSDiskTable read FPrimary write FPrimary;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PrimaryM:TCDFSDiskTable read FPrimaryM write FPrimaryM;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Alternate:TCDFSDiskTable read FAlternate write FAlternate;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property AlternateM:TCDFSDiskTable read FAlternateM write FAlternateM;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property Initial:TCDFSDiskCatalog read FInitial write FInitial;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Validation:TCDFSDiskHeader read FValidation write FValidation;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS disk header'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSDiskHeader = class(TListObject)</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 CDFS catalog header (Also the Validation entry).
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>constructor Create(ALocalLock:TMutexHandle);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>destructor Destroy; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
 +
|-
 +
| <code>FLocalLock:TMutexHandle;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FHeaderNo:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FHeaderOffset:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FHeaderCluster:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FValidation:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FHeaderId:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FPlatformId:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FVendorId:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FChecksum:Word;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FSignature:Word;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FSectionCount:Word;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AcquireLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ReleaseLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function GetVendorId:String;</code>
 +
| &nbsp;
 +
|-
 +
| <code>procedure SetVendorId(const AVendorId:String);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>property HeaderNo:LongWord read FHeaderNo write FHeaderNo;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property HeaderOffset:LongWord read FHeaderOffset write FHeaderOffset;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property HeaderCluster:LongWord read FHeaderCluster write FHeaderCluster;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property Validation:Boolean read FValidation write FValidation;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property HeaderId:Byte read FHeaderId write FHeaderId;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property PlatformId:Byte read FPlatformId write FPlatformId;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property VendorId:String read GetVendorId write SetVendorId;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Checksum:Word read FChecksum write FChecksum;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property Signature:Word read FSignature write FSignature;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property HeaderIndicator:Byte read FHeaderId write FHeaderId;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property SectionCount:Word read FSectionCount write FSectionCount;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property SectionId:String read GetVendorId write SetVendorId;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDFS disk extension'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
 
 +
<code>TCDFSDiskExtension = class(TListObject)</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 CDFS catalog extension.
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>constructor Create(ALocalLock:TMutexHandle);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>destructor Destroy; override;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''private'''</div>
 +
|-
 +
| <code>FLocalLock:TMutexHandle;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FExtensionNo:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FExtensionOffset:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FExtensionCluster:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FExtensionIndicator:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FExtensionFlag:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>FSelectionData:Pointer;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>FCatalog:TCDFSDiskCatalog;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>function AcquireLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
| <code>function ReleaseLock:Boolean;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|<div style="font-family: monospace,courier;">'''public'''</div>
 +
|-
 +
| <code>property ExtensionNo:LongWord read FExtensionNo write FExtensionNo;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property ExtensionOffset:LongWord read FExtensionOffset write FExtensionOffset;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ExtensionCluster:LongWord read FExtensionCluster write FExtensionCluster;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property ExtensionIndicator:Byte read FExtensionIndicator write FExtensionIndicator;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property ExtensionFlag:Byte read FExtensionFlag write FExtensionFlag;</code>
 +
| &nbsp;
 +
|-
 +
| <code>property SelectionData:Pointer read FSelectionData write FSelectionData;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>property Catalog:TCDFSDiskCatalog read FCatalog write FCatalog;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
=== Public variables ===
 
=== Public variables ===

Revision as of 03:33, 9 March 2017

Return to Unit Reference


Description


Ultibo CDFS interface unit

To be documented

Constants



CDFS specific constants cdfs*
cdfsIso9660 = 0;  
cdfsJoilet = 1;  
cdfsSierra = 2;  
cdfsRockRidge = 3;  
cdfsAudio = 4;  
cdfsUDF = 5;  
 
cdfsNames:array[0..5] of String = (
'CD001',  
'CD001',  
'CDROM',  
,  
'CDAUDIO',  
);  
 
cdfsAnyName = '*';  
cdfsDotName = '.';  
cdfsDotDotName = '..';  
cdfsBlankName = ;  
cdfsVersionName = '1'; Used by version information on end of identifier (Not Used)
cdfsSeparator1Name = '.'; Dot on end of identifier when no extension exists (File only)
cdfsSeparator2Name = ';'; Used by version information on end of identifier (File only)
 
cdfsJolietMaxPath = 240; 120 (240 bytes)
cdfsJolietMaxFile = 64; (128 bytes)
cdfsISO9660MaxPath = 240;  
cdfsISO9660MaxFile = 30; 31 for Directories
 
cdfsISO9660StandardIdentifier = 'CD001';  
cdfsELTORITOSystemIdentifier = 'EL TORITO SPECIFICATION';  
 
cdfsFirstSector = 0;  
cdfsReservedSectors = 16;  
cdfsISO9660StartSector = 16;  
cdfsELTORITOBootSector = 17;  
 
cdfsISO9660StructureVersion = 1;  
cdfsISO9660DescriptorVersion = 1;  
cdfsELTORITODescriptorVersion = 1;  
 
cdfsJolietUCS2Sequence1 = #37 + #47 + #64; '%/@'
cdfsJolietUCS2Sequence2 = #37 + #47 + #67; '%/C'
cdfsJolietUCS2Sequence3 = #37 + #47 + #69; '%/E'
 
cdfsDotIdentifier = $00;  
cdfsDotDotIdentifier = $01;  
 
cdfsSeparator1Value = $2E; '.'
cdfsSeparator2Value = $3B; ';'
 
cdfsTimeStartYear = 1900; CDFS Time starts at 1900
cdfsTimeOffsetInterval = 15; Offset is in 15 minute intervals
 
cdfsNullFileTime:TFileTime = (dwLowDateTime:$00000000;dwHighDateTime:$00000000);  
 
cdfsStartCluster = 16;  
cdfsUnknownCluster = LongWord(-1);  
 
cdfsRootPathNumber = 1;  
 
cdfsPathRecordSize = 9; Minimum
cdfsExtendedRecordSize = 250; Minimum
cdfsDirectoryRecordSize = 34; Minimum
 
cdfsFileIdentifierSize = 1; Minimum
cdfsPathIdentifierSize = 1; Minimum
 
cdfsHeaderRecordSize = 32; Fixed
cdfsCatalogRecordSize = 32; Fixed
cdfsExtensionRecordSize = 32; Fixed
 
cdfsEvenSize = 0;  
cdfsUnevenSize = 1;  
 
cdfsRootRecordOffset = 156; Offset of Root Directory in Descriptor
 
cdfsInstanceFirst = 0;  
cdfsInstanceLast = Byte(-1);  
 
cdfsTableTypeMask = $00FF0000;  
cdfsTableTypeShift = 16;  
cdfsTableInstanceMask = $0000FF00;  
cdfsTableInstanceShift = 8;  
cdfsTableDescriptorMask = $000000FF;  
cdfsTableDescriptorShift = 0;  
 
cdfsBitmapUnknown = LongWord(-1);  


CDFS bitmap mask constants cdfsBitmapMask*
cdfsBitmapMaskBits = 64; Int64 Bitmap Masks
cdfsBitmapMaskNone = $0000000000000000; Int64 Used for fast counting of free blocks
cdfsBitmapMaskAll = $FFFFFFFFFFFFFFFF; Int64 Used for fast counting of used blocks


CDFS volume flag constants cdfsVolumeFlag*
cdfsVolumeFlagNone = $00;  
cdfsVolumeFlagUnregistered = $01; If set this SVD contains an unregistered escape sequence


CDFS file flag constants cdfsFileFlag*
cdfsFileFlagNone = $00;  
cdfsFileFlagExistence = $01; If set this file is hidden
cdfsFileFlagDirectory = $02; If set this record is a directory
cdfsFileFlagAssociated = $04; If set this file is an associated file
cdfsFileFlagRecord = $08; If set record information is recorded for this file
cdfsFileFlagProtection = $10; If set permissions are recorded for this file
cdfsFileFlagReserved1 = $20; Reserved
cdfsFileFlagReserved2 = $40; Reserved
cdfsFileFlagMore = $80; If set there are more directory records for this file


CDFS permissions constants cdfsPermission*
cdfsPermissionSystemRead = $0001; If set system cannot Read
cdfsPermissionSystemWrite = $0002; If set system cannot Write
cdfsPermissionSystemExecute = $0004; If set system cannot Execute
cdfsPermissionReserved1 = $0008; Reserved
cdfsPermissionOwnerRead = $0010; If set owner cannot Read
cdfsPermissionOwnerWrite = $0020; If set owner cannot Write
cdfsPermissionOwnerExecute = $0040; If set owner cannot Execute
cdfsPermissionReserved2 = $0080; Reserved
cdfsPermissionGroupRead = $0100; If set group cannot Read
cdfsPermissionGroupWrite = $0200; If set group cannot Write
cdfsPermissionGroupExecute = $0400; If set group cannot Execute
cdfsPermissionReserved3 = $0800; Reserved
cdfsPermissionOtherRead = $1000; If set other cannot Read
cdfsPermissionOtherWrite = $2000; If set other cannot Write
cdfsPermissionOtherExecute = $4000; If set other cannot Execute
cdfsPermissionReserved4 = $8000; Reserved


CDFS path table constants cdfsPathTable*
cdfsPathTableTypePrimary = $00;  
cdfsPathTableTypeAlternate = $01;  
cdfsPathTableTypePrimaryM = $02;  
cdfsPathTableTypeAlternateM = $03;  


CDFS volume descriptor constants cdfsVolumeDescriptor*
cdfsVolumeDescriptorTypeBoot = $00;  
cdfsVolumeDescriptorTypePrimary = $01;  
cdfsVolumeDescriptorTypeSupplementary = $02;  
cdfsVolumeDescriptorTypePartition = $03;  
cdfsVolumeDescriptorTypeTerminator = $FF;  


CDFS header constants cdfsElTorito*
cdfsElToritoHeaderId = $01;  
cdfsElToritoBootIndicator = $88;  
cdfsElToritoNoBootIndicator = $00;  
cdfsElToritoHeaderIndicator = $90; 91 if final header
cdfsElToritoHeaderTerminator = $91;  
cdfsElToritoExtensionIndicator = $44;  


CDFS signature constants cdfsElToritoSignature*
cdfsElToritoSignature = $AA55;  


CDFS platform Id constants cdfsElToritoPlatform*
cdfsElToritoPlatformIdx86 = $00;  
cdfsElToritoPlatformIdPPC = $01;  
cdfsElToritoPlatformIdMac = $02;  


CDFS media type constants cdfsElToritoMedia*
cdfsElToritoMediaTypeNone = $00; No Emulation
cdfsElToritoMediaType12M = $01; 1.2 meg diskette
cdfsElToritoMediaType144M = $02; 1.44 meg diskette
cdfsElToritoMediaType288M = $03; 2.88 meg diskette
cdfsElToritoMediaTypeHDD = $04; Hard Disk (drive 80)
cdfsElToritoMediaTypeMask = $0F; Values 5-F Reserved, invalid at this time
 
cdfsElToritoMediaFlagReserved = $10; Reserved, must be 0
cdfsElToritoMediaFlagContinuation = $20; Continuation Entry Follows
cdfsElToritoMediaFlagAtapi = $40; Image contains ATAPI driver
cdfsElToritoMediaFlagScsi = $80; Image contains SCSI drivers
cdfsElToritoMediaFlagMask = $F0;  


CDFS extension flag constants cdfsElToritoExtensionFlag*
cdfsElToritoExtensionFlagExtension = $20; Extension Record Follows


Type definitions



CDFS specific types

TCDFSType = (ctNONE,ctISO9660,ctJOLIET,ctSIERRA,ctROCKRIDGE,ctAUDIO,ctUDF);

CDFS time types

PCDFSTime = ^TCDFSTime;

TCDFSTime = packed record

Note: 7 Bytes
Years:Byte; Number of years since 1900
Month:Byte; Month of the year from 1 to 12
Day:Byte; Day of the month from 1 to 31
Hour:Byte; Hour of the day from 0 to 23
Minute:Byte; Minute of the hour from 0 to 59
Second:Byte; Second of the minute from 0 to 59
Offset:ShortInt; Offset from Greenwich Mean Time in number of 15 min intervals from -48 (West) to +52 (East)

CDFS date time types

PCDFSDateTime = ^TCDFSDateTime;

TCDFSDateTime = packed record

Note: 17 Bytes
Year:array[0..3] of Char; Year from 1 to 9999
Month:array[0..1] of Char; Month of the year from 1 to 12
Day:array[0..1] of Char; Day of the month from 1 to 31
Hour:array[0..1] of Char; Hour of the day from 0 to 23
Minute:array[0..1] of Char; Minute of the hour from 0 to 59
Second:array[0..1] of Char; Second of the minute from 0 to 59
Hundredths:array[0..1] of Char; Hundredths of a second
Offset:ShortInt; Offset from Greenwich Mean Time in number of 15 min intervals from -48 (West) to +52 (East)

CDFS directory record types

PCDFSDirectoryRecord = ^TCDFSDirectoryRecord;

TCDFSDirectoryRecord = packed record

Note: 34 Bytes (Minimum not including padding)
RecordSize:Byte; Length of Directory Record (LEN-DR)
ExtendedSize:Byte; Extended Attribute Record Length
FirstBlock:LongWord; Location of Extent
FirstBlockM:LongWord;  
DataSize:LongWord; Data Length
DataSizeM:LongWord;  
CreateTime:TCDFSTime; Recording Date and Time
FileFlags:Byte; File Flags 8 bits
UnitSize:Byte; File Unit Size
InterleaveSize:Byte; Interleave Gap Size
SequenceNumber:Word; Volume Sequence Number
SequenceNumberM:Word;  
FileIdentifierSize:Byte; Length of File Identifier (LEN_FI)
FileIdentifier:array[0..0] of Char; File Identifier d-characters,d1-characters,SEPARATOR 1,SEPARATOR 2,(00) or (01) byte
Padding:Byte; Padding Field (00) byte (Only present if FileIdentifierSize is even (Total size would be odd))
SystemData:array[0..0] of Byte; System Use LEN_SU bytes

CDFS path record types

PCDFSPathRecord = ^TCDFSPathRecord;

TCDFSPathRecord = packed record

Note: 9 Bytes (Minimum not including padding)
PathIdentifierSize:Byte; Length of Directory Identifier (LEN_DI)
ExtendedSize:Byte; Extended Attribute Record Length
FirstBlock:LongWord; Location of Extent
ParentNumber:Word; Parent Directory Number
PathIdentifier:array[0..0] of Char; Directory Identifier d-characters, d1-characters, (00) byte
Padding:Byte; Padding Field (00) byte (Only present if PathIdentifierSize is odd (Total size would be odd))

CDFS extended record types

PCDFSExtendedRecord = ^TCDFSExtendedRecord;

TCDFSExtendedRecord = packed record

Note: 250 Bytes (Minimum)
OwnerId:Word; Owner Identification
OwnerIdM:Word;  
GroupId:Word; Group Identification
GroupIdM:Word;  
Permissions:Word; Permissions 16 bits
CreateTime:TCDFSDateTime; File Creation Date and Time
ModifyTime:TCDFSDateTime; File Modification Date and Time
ExpireTime:TCDFSDateTime; File Expiration Date and Time
EffectiveTime:TCDFSDateTime; File Effective Date and Time
RecordFormat:Byte; Record Format
RecordAttributes:Byte; Record Attributes
RecordLength:Word; Record Length
RecordLengthM:Word;  
SystemIdentifier:array[0..31] of Char; System Identifier a-characters, a1-characters
SystemData:array[0..63] of Byte; System Use not specified
ExtendedVersion:Byte; Extended Attribute Record Version
EscapeSequenceSize:Byte; Length of Escape Sequences (LEN_ESC)
Reserved1:array[0..63] of Byte; Reserved for future standardization (00) bytes
ApplicationDataSize:Word; Length of Application Use (LEN_AU)
ApplicationDataSizeM:Word;  
ApplicationData:array[0..0] of Byte; Application Use LEN_AU bytes
EscapeSequence:array[0..0] of Byte; Escape Sequences LEN_ESC bytes

CDFS volume descriptor header types

PCDFSVolumeDescriptorHeader = ^TCDFSVolumeDescriptorHeader;

TCDFSVolumeDescriptorHeader = packed record

Note: 2048 Bytes
DescriptorType:Byte; Descriptor Type 00 = Boot, 01 = Primary etc
StandardIdentifier:array[0..4] of Char; Standard Identifier ('CD001')
DescriptorVersion:Byte; Descriptor Version (1)
Reserved:array[0..2040] of Byte; Content depends on Descriptor Type

CDFS volume descriptor boot types

PCDFSVolumeDescriptorBoot = ^TCDFSVolumeDescriptorBoot;

TCDFSVolumeDescriptorBoot = packed record

Note: 2048 Bytes
DescriptorType:Byte; Descriptor Type (00 = Boot)
StandardIdentifier:array[0..4] of Char; Standard Identifier ('CD001')
DescriptorVersion:Byte; Descriptor Version (1)
SystemIdentifier:array[0..31] of Char; 32 a-characters (eg EL TORITO SPECIFICATION)
BootIdentifier:array[0..31] of Char; 32 a-characters
BootData:array[0..1976] of Byte;  

CDFS volume descriptor primary types

PCDFSVolumeDescriptorPrimary = ^TCDFSVolumeDescriptorPrimary;

TCDFSVolumeDescriptorPrimary = packed record

Note: 2048 Bytes
DescriptorType:Byte; Descriptor Type (01 = Primary)
StandardIdentifier:array[0..4] of Char; Standard Identifier ('CD001')
DescriptorVersion:Byte; Descriptor Version (1)
Reserved1:Byte; Unused Field (00) byte
SystemIdentifier:array[0..31] of Char; System Identifier a-characters
VolumeIdentifier:array[0..31] of Char; Volume Identifier d-characters
Reserved2:array[0..7] of Byte; Unused Field (00) bytes
VolumeSpaceSize:LongWord; Volume Space Size
VolumeSpaceSizeM:LongWord;  
Reserved3:array[0..31] of Byte; Unused Field (00) bytes
VolumeSetSize:Word; Volume Set Size
VolumeSetSizeM:Word;  
VolumeSequenceNumber:Word; Volume Sequence Number
VolumeSequenceNumberM:Word;  
LogicalBlockSize:Word; Logical Block Size
LogicalBlockSizeM:Word;  
PathTableSize:LongWord; Path Table Size
PathTableSizeM:LongWord;  
PrimaryPathTable:LongWord; Location of Occurrence of Type L Path Table
AlternatePathTable:LongWord; Location of Optional Occurrence of Type L Path Table
PrimaryPathTableM:LongWord; Location of Occurrence of Type M Path Table
AlternatePathTableM:LongWord; Location of Optional Occurrence of Type M Path Table
RootDirectory:TCDFSDirectoryRecord; Directory Record for Root Directory 34 bytes
VolumeSetIdentifier:array[0..127] of Char; Volume Set Identifier d-characters
PublisherIdentifier:array[0..127] of Char; Publisher Identifier a-characters
PreparerIdentifier:array[0..127] of Char; Data Preparer Identifier a-characters
ApplicationIdentifier:array[0..127] of Char; Application Identifier a-characters
CopyrightIdentifier:array[0..36] of Char; Copyright File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
AbstractIdentifier:array[0..36] of Char; Abstract File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
BibliographicIdentifier:array[0..36] of Char; Bibliographic File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
CreateTime:TCDFSDateTime; Volume Creation Date and Time
ModifyTime:TCDFSDateTime; Volume Modification Date and Time
ExpireTime:TCDFSDateTime; Volume Expiration Date and Time
EffectiveTime:TCDFSDateTime; Volume Effective Date and Time
FileStructureVersion:Byte; File Structure Version
Reserved4:Byte; Reserved for future standardization (00) byte
ApplicationData:array[0..511] of Byte; Application Use not specified
Reserved5:array[0..652] of Byte; Reserved for future standardization (00) bytes

CDFS volume descriptor supplementary types

PCDFSVolumeDescriptorSupplementary = ^TCDFSVolumeDescriptorSupplementary;

TCDFSVolumeDescriptorSupplementary = packed record

Note: 2048 Bytes
DescriptorType:Byte; Descriptor Type (02 = Supplementary)
StandardIdentifier:array[0..4] of Char; Standard Identifier ('CD001')
DescriptorVersion:Byte; Descriptor Version (1)
VolumeFlags:Byte; Volume Flags 8 bits
SystemIdentifier:array[0..31] of Char; System Identifier a-characters
VolumeIdentifier:array[0..31] of Char; Volume Identifier d-characters
Reserved2:array[0..7] of Byte; Unused Field (00) bytes
VolumeSpaceSize:LongWord; Volume Space Size
VolumeSpaceSizeM:LongWord;  
EscapeSequences:array[0..31] of Byte; Escape Sequences 32 bytes
VolumeSetSize:Word; Volume Set Size
VolumeSetSizeM:Word;  
VolumeSequenceNumber:Word; Volume Sequence Number
VolumeSequenceNumberM:Word;  
LogicalBlockSize:Word; Logical Block Size
LogicalBlockSizeM:Word;  
PathTableSize:LongWord; Path Table Size
PathTableSizeM:LongWord;  
PrimaryPathTable:LongWord; Location of Occurrence of Type L Path Table
AlternatePathTable:LongWord; Location of Optional Occurrence of Type L Path Table
PrimaryPathTableM:LongWord; Location of Occurrence of Type M Path Table
AlternatePathTableM:LongWord; Location of Optional Occurrence of Type M Path Table
RootDirectory:TCDFSDirectoryRecord; Directory Record for Root Directory 34 bytes
VolumeSetIdentifier:array[0..127] of Char; Volume Set Identifier d-characters
PublisherIdentifier:array[0..127] of Char; Publisher Identifier a-characters
PreparerIdentifier:array[0..127] of Char; Data Preparer Identifier a-characters
ApplicationIdentifier:array[0..127] of Char; Application Identifier a-characters
CopyrightIdentifier:array[0..36] of Char; Copyright File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
AbstractIdentifier:array[0..36] of Char; Abstract File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
BibliographicIdentifier:array[0..36] of Char; Bibliographic File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
CreateTime:TCDFSDateTime; Volume Creation Date and Time
ModifyTime:TCDFSDateTime; Volume Modification Date and Time
ExpireTime:TCDFSDateTime; Volume Expiration Date and Time
EffectiveTime:TCDFSDateTime; Volume Effective Date and Time
FileStructureVersion:Byte; File Structure Version
Reserved4:Byte; Reserved for future standardization (00) byte
ApplicationData:array[0..511] of Byte; Application Use not specified
Reserved5:array[0..652] of Byte; Reserved for future standardization (00) bytes

CDFS volume descriptor partition types

PCDFSVolumeDescriptorPartition = ^TCDFSVolumeDescriptorPartition;

TCDFSVolumeDescriptorPartition = packed record

Note: 2048 Bytes
DescriptorType:Byte; Descriptor Type (03 = Partition)
StandardIdentifier:array[0..4] of Char; Standard Identifier ('CD001')
DescriptorVersion:Byte; Descriptor Version (1)
Reserved1:Byte; Unused Field (00) byte
SystemIdentifier:array[0..31] of Char; System Identifier a-characters
PartitionIdentifier:array[0..31] of Char; Volume Partition Identifier d-characters
PartitionStart:LongWord; Volume Partition Location (first Logical Block)
PartitionStartM:LongWord;  
PartitionSize:LongWord; Volume Partition Size (in Logical Blocks)
PartitionSizeM:LongWord;  
SystemData:array[0..1959] of Byte; System Use not specified

CDFS volume descriptor terminator types

PCDFSVolumeDescriptorTerminator = ^TCDFSVolumeDescriptorTerminator;

TCDFSVolumeDescriptorTerminator = packed record

Note: 2048 Bytes
DescriptorType:Byte; Descriptor Type (FF = Terminator)
StandardIdentifier:array[0..4] of Char; Standard Identifier ('CD001')
DescriptorVersion:Byte; Descriptor Version (1)
Reserved:array[0..2040] of Byte; Reserved (Always 00)

EL TORITO validation record types

PELTORITOValidationRecord = ^TELTORITOValidationRecord;

TELTORITOValidationRecord = packed record

Note: 32 Bytes
HeaderId:Byte; Header ID, must be 01
PlatformId:Byte; Platform ID 0 = 80x86, 1 = PowerPC, 2 = Mac
Reserved1:Word; Reserved, must be 0
VendorId:array[0..23] of Char; ID string. This is intended to identify the manufacturer/developer of the CD-ROM
Checksum:Word; Checksum Word. This sum of all the words in this record should be 0
Signature:Word; Key byte, must be 55. Key byte, must be AA. This value is included in the checksum

EL TORITO default record types

PELTORITODefaultRecord = ^TELTORITODefaultRecord;

TELTORITODefaultRecord = packed record

Note: 32 Bytes
BootIndicator:Byte; Boot Indicator. 88 = Bootable, 00 = Not Bootable
BootMedia:Byte; Boot media type. This specifies what media the boot image is intended to emulate
LoadSegment:Word; This is the load segment for the initial boot image. If this value is 0 the system will use the traditional segment of 7C0
SystemType:Byte; This must be a copy of byte 5 (System Type) from the Partition Table found in the boot image (PartitionId)
Reserved1:Byte; Unused, must be 0
LoadCount:Word; Sector Count. This is the number of virtual/emulated sectors the system will store at Load Segment during the initial boot procedure
LoadRBA:LongWord; Load RBA. This is the start address of the virtual disk. CD?s use Relative/Logical block addressing
Reserved2:array[0..19] of Byte; {Unused, must be 0}  

EL TORITO section header types

PELTORITOSectionHeader = ^TELTORITOSectionHeader;

TELTORITOSectionHeader = packed record

Note: 32 Bytes
HeaderIndicator:Byte; Header Indicator, 90 - Header, more headers follow, 91 - Final Header
PlatformId:Byte; Platform ID 0 = 80x86, 1 = PowerPC, 2 = Mac
SectionCount:Word; Number of section entries following this header
SectionId:array[0..27] of Char; ID string. This identifies a section

EL TORITO section record types

PELTORITOSectionRecord = ^TELTORITOSectionRecord;

TELTORITOSectionRecord = packed record

Note: 32 Bytes
BootIndicator:Byte; Boot Indicator. 88 = Bootable, 00 = Not Bootable
BootMedia:Byte; Boot media type. This specifies what media the boot image emulates
LoadSegment:Word; Load Segment. This is the load segment for the initial boot image. If this value is 0 the system will use the traditional segment of 7C0
SystemType:Byte; System Type. This must be a copy of byte 5 (System Type) from the Partition Table found in the boot image (PartitionId)
Reserved1:Byte; Unused, must be 0
LoadCount:Word; Sector Count. This is the number of virtual/emulated sectors the system will store at Load Segment during the initial boot procedure
LoadRBA:LongWord; Load RBA. This is the start address of the virtual disk. CD?s use Relative/Logical block addressing
SelectionType:Byte; Selection criteria type. 0 - No selection criteria, 1- Language and Version Information (IBM), 2-FF - Reserved
SelectionData:array[0..18] of Byte; Vendor unique selection criteria

EL TORITO section extension types

PELTORITOSectionExtension = ^TELTORITOSectionExtension;

TELTORITOSectionExtension = packed record

Note: 32 Bytes
ExtensionIndicator:Byte; Extension Indicator. Must be 44
ExtensionFlag:Byte; Bits 1-4 - Unused, Bit 5 (1 = Extension Record follows, 0 = This is final Extension), Bits 6-7 - Unused
SelectionData:array[0..29] of Byte; Vendor unique selection criteria

EL TORITO volume descriptor boot types

PELTORITOVolumeDescriptorBoot = ^TELTORITOVolumeDescriptorBoot;

TELTORITOVolumeDescriptorBoot = packed record

Note: 2048 Bytes
DescriptorType:Byte; Boot Record Indicator, must be 0
StandardIdentifier:array[0..4] of Char; ISO-9660 Identifier, must be 'CD001'
DescriptorVersion:Byte; Version of this descriptor, must be 1
SystemIdentifier:array[0..31] of Char; Boot System Identifier, must be 'EL TORITO SPECIFICATION' padded with 0?s
Reserved1:array[0..31] of Byte; Unused, must be 0
CatalogStart:LongWord; Absolute pointer to first sector of Boot Catalog
Reserved2:array[0..1972] of Byte; Unused, must be 0


Class definitions



CDFS recognizer

TCDFSRecognizer = class(TRecognizer)

constructor Create(ADriver:TFileSysDriver);  
private
FLongNames:Boolean;  
FSwapSerial:Boolean;  
 
function CheckPrimaryDescriptor(ASector:PSector; const AStartSector:Int64; ASectorCount:LongWord):Boolean;  
protected
function GetName:String; override;  
public
property LongNames:Boolean read FLongNames write FLongNames;  
property SwapSerial:Boolean read FSwapSerial write FSwapSerial;  
 
function RecognizePartitionId(APartitionId:Byte):Boolean; override;  
function RecognizeBootSector(ABootSector:PBootSector; const AStartSector,ASectorCount:Int64):Boolean; override;  
 
function RecognizePartition(APartition:TDiskPartition):Boolean; override;  
function RecognizeVolume(AVolume:TDiskVolume):Boolean; override;  
function MountVolume(AVolume:TDiskVolume; ADrive:TDiskDrive):Boolean; override;  

CDFS formatter

TCDFSFormatter = class(TDiskFormatter)

private
function CheckDevice(AVolume:TDiskVolume; ADrive:TDiskDrive; AFloppyType:TFloppyType):Boolean;  
function CheckPartition(AVolume:TDiskVolume; ADrive:TDiskDrive; AFileSysType:TFileSysType):Boolean;  
 
function GetPathTableSize(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ASupplementary:Boolean):LongWord;  
function GetPathTableStart(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ASupplementary,AEndian:Boolean):LongWord;  
 
function GetRootDirectorySize(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ASupplementary:Boolean):LongWord;  
function GetRootDirectoryStart(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ASupplementary:Boolean):LongWord;  
 
function CreatePrimaryDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorPrimary):Boolean;  
function WritePrimaryDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorPrimary):Boolean;  
function WritePrimaryPathTables(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorPrimary):Boolean;  
function WritePrimaryRootDirectory(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorPrimary):Boolean;  
 
function CreateSupplementaryDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorSupplementary):Boolean;  
function WriteSupplementaryDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorSupplementary):Boolean;  
function WriteSupplementaryPathTables(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorSupplementary):Boolean;  
function WriteSupplementaryRootDirectory(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorSupplementary):Boolean;  
 
function CreateTerminatorDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorTerminator):Boolean;  
function WriteTerminatorDescriptor(AVolume:TDiskVolume; ADrive:TDiskDrive; ACDFSType:TCDFSType; ADescriptor:PCDFSVolumeDescriptorTerminator):Boolean;  
public
function AcceptVolume(AVolume:TDiskVolume; AFloppyType:TFloppyType; AFileSysType:TFileSysType):Boolean; override;  
function FormatVolume(AVolume:TDiskVolume; AFloppyType:TFloppyType; AFileSysType:TFileSysType):Boolean; override;  

CDFS resizer

TCDFSResizer = class(TDiskResizer)

public
function AcceptVolume(AVolume:TDiskVolume; const AStart,ASize:Int64):Boolean; override;  
 
function ShrinkVolume(AVolume:TDiskVolume; const AStart,ASize:Int64):Boolean; override;  
function ExpandVolume(AVolume:TDiskVolume; const AStart,ASize:Int64):Boolean; override;  

CDFS copier

TCDFSCopier = class(TDiskCopier)

public
function AcceptVolume(AVolume,ADest:TDiskVolume):Boolean; override;  
 
function CopyVolume(AVolume,ADest:TDiskVolume):Boolean; override;  

CDFS file system

TCDFSFileSystem = class(TFileSystem)

constructor Create(ADriver:TFileSysDriver; AVolume:TDiskVolume; ADrive:TDiskDrive);  
destructor Destroy; override;  
private
FCDFSType:TCDFSType;  
FSwapSerial:Boolean;  
FVolumeFlags:LongWord; Volume flags
 
FTreesLoaded:Boolean;  
FBlocksLoaded:Boolean;  
FCatalogsLoaded:Boolean;  
FCatalogsLoading:Boolean;  
 
FBlockWrite:Boolean;  
FTreesPrepared:Boolean;  
FCatalogsChecked:Boolean;  
 
FLogicalBlockSize:Word; Size of a logical block on disk
FLogicalBlockCount:LongWord; Number of logical blocks on disk
 
FSectorsPerCluster:LongWord; Usually 1,2,4,8,16,32,64,128 etc
 
FDataStartCluster:LongWord; Usually 16 (First cluster of Data Area)
FBootStartCluster:LongWord; Usually 17 (Cluster of the Boot Descriptor)
FRootStartCluster:LongWord; Pointed to by Primary Descriptor
 
FBlockShiftCount:Word; Shift count for Cluster <-> BlockNo
FSectorShiftCount:Word; Shift count for Sector <-> Cluster
FClusterShiftCount:Word; Shift count for Cluster <-> Bytes
 
FEntriesPerBlock:LongWord; Number of Cluster entries per Block of bitmap
FClustersPerBlock:LongWord; Number of Clusters per Block of bitmap entries
FTotalBlockCount:LongWord; Total number of Blocks in bitmap
 
FTotalClusterCount:LongWord; Total number of Clusters on volume
 
FLastFreeCluster:LongWord; Or cdfsUnknownCluster if not known
FFreeClusterCount:LongWord; Or cdfsUnknownCluster if not known
 
FClusterSize:LongWord; Size of a Cluster in Bytes (Max 65536 > Word)
 
FBoot:TCDFSDiskDescriptor;  
FPrimary:TCDFSDiskDescriptor;  
FSupplementary:TCDFSDiskDescriptor;  
 
FHeaders:TFileSysList; List of Catalog Headers
FExtensions:TFileSysList; List of Catalog Extensions
FDescriptors:TFileSysList; List of Volume Descriptors
 
FHeaderLocal:TMutexHandle; Local Lock shared by all Catalog Headers
FExtensionLocal:TMutexHandle; Local Lock shared by all Catalog Extensions
FDescriptorLocal:TMutexHandle; Local Lock shared by all Volume Descriptors
 
FExtendedLocal:TMutexHandle; Local Lock shared by all Extended Attributes
 
FPathLock:TSynchronizerHandle; Lock shared by all Path lists
 
FReadBuffer:Pointer; Buffer for partial cluster entry reads (Cluster size)
FReadLock:TMutexHandle; Lock for read buffer
 
FWriteBuffer:Pointer; Buffer for partial cluster entry writes (Cluster size)
FWriteLock:TMutexHandle; Lock for write buffer
 
FClusterBuffer:Pointer; Buffer of exactly cluster size
FClusterLock:TMutexHandle; Lock for cluster buffer
 
function ReadLock:Boolean;  
function ReadUnlock:Boolean;  
 
function WriteLock:Boolean;  
function WriteUnlock:Boolean;  
 
function ClusterLock:Boolean;  
function ClusterUnlock:Boolean;  
 
function LoadTree(AEntry:TDiskEntry):Boolean;  
function MarkTree(AEntry:TDiskEntry):Boolean;  
function PrepareTree(AEntry:TDiskEntry):Boolean;  
function PrepareTable(ATable:TDiskTable):Boolean;  
 
function PrepareTrees:Boolean;  
function CheckCatalogs:Boolean;  
 
function LocatePath(ATable:TCDFSDiskTable; APathNumber:Word):TCDFSDiskPath;  
function LocateEntry(AEntry:TCDFSDiskEntry; AStartCluster:LongWord):TCDFSDiskEntry;  
 
function LoadVolumeFlags:LongWord;  
 
function FillClusters(ACluster:LongWord; ACount:Word; AValue:Byte):Boolean;  
 
function ReadClusters(ACluster:LongWord; ACount:Word; var ABuffer):Boolean;  
function WriteClusters(ACluster:LongWord; ACount:Word; const ABuffer):Boolean;  
 
function TestClusters(ACluster,ACount:LongWord):Boolean;  
function MarkClusters(ACluster,ACount:LongWord; AUsed:Boolean):Boolean;  
 
function AllocClusters(var ACluster:LongWord; ACount:LongWord):Boolean;  
function ReleaseClusters(ACluster,ACount:LongWord):Boolean;  
 
function GetNextFreeCluster:LongWord; Return is a Cluster
function GetFreeClusterCount:LongWord;  
 
function TestBlock(ABlock:TCDFSDiskBlock; AStart,ACount:LongWord):Boolean;  
function MarkBlock(ABlock:TCDFSDiskBlock; AStart,ACount:LongWord; AUsed:Boolean):Boolean;  
 
function AllocBlock(ABlock:TCDFSDiskBlock; AStart,ACount:LongWord):Boolean;  
function ReleaseBlock(ABlock:TCDFSDiskBlock; AStart,ACount:LongWord):Boolean;  
 
function GetBlockNextFree(ABlock:TCDFSDiskBlock; AStart:LongWord):LongWord;  
function GetBlockFreeCount(ABlock:TCDFSDiskBlock):LongWord;  
 
function TestBitmap(ABuffer:Pointer; ASize,AStart,ACount:LongWord):Boolean;  
function MarkBitmap(ABuffer:Pointer; ASize,AStart,ACount:LongWord; AUsed:Boolean):Boolean;  
 
function AllocBitmap(ABuffer:Pointer; ASize:LongWord; AStart,ACount:LongWord):Boolean;  
function ReleaseBitmap(ABuffer:Pointer; ASize:LongWord; AStart,ACount:LongWord):Boolean;  
 
function GetBitmapNextFree(ABuffer:Pointer; ASize,AStart:LongWord):LongWord;  
function GetBitmapFreeCount(ABuffer:Pointer; ASize:LongWord):LongWord;  
 
function GetTableDataFree(ATable:TDiskTable):LongWord;  
function GetEntryDataFree(AEntry:TDiskEntry):LongWord;  
function GetCatalogDataFree(ADescriptor:TCDFSDiskDescriptor):LongWord;  
 
function GetPreviousPath(ATable:TCDFSDiskTable; APath:TCDFSDiskPath):TCDFSDiskPath;  
function GetPreviousEntry(AParent,AEntry:TCDFSDiskEntry):TCDFSDiskEntry;  
 
function GetSectorsPerCluster(AClusterSize:LongWord):LongWord;  
function GetBlockShiftCount(AClusterSize:LongWord):Word;  
function GetSectorShiftCount(AClusterSize:LongWord):Word;  
function GetClusterShiftCount(AClusterSize:LongWord):Word;  
 
function GetEntriesPerBlock(AClusterSize:LongWord):LongWord;  
function GetClustersPerBlock(AClusterSize:LongWord):LongWord;  
function GetTotalBlockCount(ATotalClusterCount:LongWord):LongWord;  
 
function RenumberPaths(ATable:TDiskTable):Boolean;  
 
function ComparePath(APath1,APath2:TCDFSDiskPath; AUnicode:Boolean):Integer;  
function CompareEntry(AEntry1,AEntry2:TCDFSDiskEntry; AUnicode:Boolean):Integer;  
 
function PadString(const AString:String; ALength:Integer; APrefix,AUnicode:Boolean):String;  
function CompareString(const AString1,AString2:String; AReverse:Boolean):Integer;  
 
function ChecksumValidationRecord(AValidation:PELTORITOValidationRecord):Word;  
 
function RecordToPath(ARecord:Pointer; APath:TCDFSDiskPath; AUnicode,AEndian:Boolean):Boolean;  
function PathToRecord(APath:TCDFSDiskPath; ARecord:Pointer; AUnicode,AEndian:Boolean):Boolean;  
 
function RecordToEntry(ARecord:Pointer; AEntry:TCDFSDiskEntry; AUnicode:Boolean):Boolean;  
function EntryToRecord(AEntry:TCDFSDiskEntry; ARecord:Pointer; AUnicode:Boolean):Boolean;  
 
function CDFSTypeToFileSysType(ACDFSType:TCDFSType):TFileSysType;  
protected
function LoadMaxFile:Integer; override;  
function LoadMaxPath:Integer; override;  
function LoadAttributes:LongWord; override;  
function LoadSystemName:String; override;  
function LoadVolumeName:String; override;  
function LoadVolumeSerial:LongWord; override;  
function LoadFileSysType:TFileSysType; override;  
 
function SetVolumeName(const AName:String):Boolean;  
function SetVolumeSerial(ASerial:LongWord):Boolean;  
 
function ReadEntry(AParent,AEntry:TDiskEntry; var ABuffer; const AStart:Int64; ACount:LongWord; var AOffset,AValue:LongWord):Integer; override;  
function WriteEntry(AParent,AEntry:TDiskEntry; const ABuffer; const AStart:Int64; ACount:LongWord; var AOffset,AValue:LongWord):Integer; override;  
 
function LoadTrees:Boolean; Not override
function LoadTables:Boolean; override;  
function LoadBlocks:Boolean; override;  
function LoadDescriptors:Boolean; Not override
function LoadRoots:Boolean; Not override
function LoadPaths(ATable:TCDFSDiskTable):Boolean; Not override
function LoadEntries(AParent:TDiskEntry):Boolean; override;  
function LoadCatalogs:Boolean; override;  
 
function SetPaths(ATable:TCDFSDiskTable):Boolean; Not override
function SetEntries(AParent:TDiskEntry):Boolean; Not override
function SetCatalogs:Boolean; Not override
 
function LoadTable(ATableNo:LongWord):Boolean; override;  
function LoadBlock(ABlockNo:LongWord):Boolean; override;  
function LoadDescriptor(ABuffer:Pointer; ACluster:LongWord):Boolean; Not override
function LoadRoot(ADescriptor:TCDFSDiskDescriptor):Boolean; Not override
function LoadPath(ATable:TCDFSDiskTable; ABuffer:Pointer; AOffset:LongWord; ANumber:Word):Boolean; Not override
function LoadEntry(AParent:TCDFSDiskEntry; ABuffer:Pointer; AOffset,ACluster:LongWord):Boolean; Not override
function LoadHeader(ABuffer:Pointer; AOffset,ACluster:LongWord; AHeaderNo:LongWord):Boolean; Not override
function LoadCatalog(ABuffer:Pointer; AOffset,ACluster:LongWord; ACatalogNo:LongWord; AInitial:Boolean):Boolean; Not override
function LoadExtension(ABuffer:Pointer; AOffset,ACluster:LongWord; AExtensionNo:LongWord):Boolean; Not override
function LoadExtended(AEntry:TDiskEntry):Boolean; Not override
 
function AddDescriptor(AType:Byte):TCDFSDiskDescriptor; Not override
function RemoveDescriptor(ADescriptor:TCDFSDiskDescriptor):Boolean; Not override
 
function AddPath(ATable:TDiskTable; AParentNumber:Word; const AName:String; AStartCluster:LongWord):TCDFSDiskPath; Not override
function RemovePath(ATable:TDiskTable; APath:TCDFSDiskPath):Boolean; Not override
function RenamePath(ATable:TDiskTable; APath:TCDFSDiskPath; const AName:String):Boolean; Not override
function MovePath(ATable:TDiskTable; ADestNumber:Word; APath:TCDFSDiskPath):Boolean; Not override
 
function AddEntry(AParent:TDiskEntry; const AName:String; AAttributes:LongWord; AReference:Boolean):TDiskEntry; override;  
function AddEntryEx(AParent:TDiskEntry; const AName,AAltName:String; AAttributes:LongWord; AReference:Boolean):TDiskEntry; override;  
function RemoveEntry(AParent,AEntry:TDiskEntry):Boolean; override;  
function RenameEntry(AParent,AEntry:TDiskEntry; const AName:String):Boolean; override;  
function RenameEntryEx(AParent,AEntry:TDiskEntry; const AAltName:String):Boolean; override;  
function MoveEntry(ASource,ADest,AEntry:TDiskEntry):Boolean; override;  
 
function AddCatalog(AEntry:TDiskEntry; AMediaType:TMediaType; AFloppyType:TFloppyType; AAttributes:LongWord; ASectorSize:Word; const ASectorCount:Int64):TDiskCatalog; override;  
function RemoveCatalog(ACatalog:TDiskCatalog):Boolean; override;  
function GetNextHeaderNo:LongWord; Not override
function GetMaxHeaderNo:LongWord; Not override
function GetNextHeaderOffset:LongWord; Not override
function GetNextHeaderCluster:LongWord; Not override
function GetNextCatalogOffset:LongWord; Not override
function GetNextCatalogCluster:LongWord; Not override
 
function SetTable(ATable:TDiskTable):Boolean; override;  
function SetBlock(ABlock:TDiskBlock):Boolean; override;  
function SetDescriptor(ADescriptor:TCDFSDiskDescriptor):Boolean; Not override
function SetRoot(ADescriptor:TCDFSDiskDescriptor; ARoot:TDiskEntry):Boolean; Not override
function SetPath(ATable:TDiskTable; APath:TCDFSDiskPath; ABuffer:Pointer):Boolean; Not override
function SetEntry(AParent,AEntry:TDiskEntry):Boolean; override;  
function SetHeader(AHeader:TCDFSDiskHeader):Boolean; Not override
function SetCatalog(ACatalog:TDiskCatalog):Boolean; override;  
function SetExtension(AExtension:TCDFSDiskExtension):Boolean; Not override
function SetExtended(AEntry:TDiskEntry; AExtended:TCDFSDiskExtended):Boolean; Not override
 
function SizeEntry(AParent,AEntry:TDiskEntry; const ASize:Int64):Boolean; override;  
 
function GetBlock(ABlockNo:LongWord):TDiskBlock; override;  
function GetBlockEx(ABlockNo:LongWord; AWrite:Boolean):TDiskBlock; override;  
function GetDescriptor(AType,AInstance:Byte):TCDFSDiskDescriptor; Not override
function GetDescriptorEx(AType,AInstance:Byte; AWrite:Boolean):TCDFSDiskDescriptor; Not override
function GetRoot(ADescriptor:TCDFSDiskDescriptor):TDiskEntry; Not override
function GetPath(ATable:TDiskTable; AParentNumber:Word; const AName:String):TCDFSDiskPath; Not override
function GetHeader(AHeaderNo:LongWord):TCDFSDiskHeader; Not override
function GetHeaderEx(AHeaderNo:LongWord; AWrite:Boolean):TCDFSDiskHeader; Not override
function GetExtension(AExtensionNo:LongWord):TCDFSDiskExtension; Not override
function GetExtensionEx(AExtensionNo:LongWord; AWrite:Boolean):TCDFSDiskExtension; Not override
function GetExtended(AEntry:TDiskEntry):TCDFSDiskExtended; Not override
 
function GetVersion(const AName:String):String;  
 
function StripDot(const AName:String):String;  
function StripVersion(const AName:String):String;  
 
function CompareName(const AName,AMatch:String; AWildcard:Boolean):Boolean; override;  
function CompareSequence(const ASequence; const ACompare; ASize:Integer):Boolean;  
function CompareIdentifier(const AIdentifier; const ACompare; ASize:Integer):Boolean;  
 
function CalculateVolumeSerial(ABuffer:Pointer; ASize:Integer):LongWord;  
public
property ReadOnly:Boolean read FReadOnly write FReadOnly;  
property LongNames:Boolean read FLongNames write FLongNames;  
property CasePreserved:Boolean read FCasePreserved write FCasePreserved;  
property UnicodeNames:Boolean read FUnicodeNames write FUnicodeNames;  
property SwapSerial:Boolean read FSwapSerial write FSwapSerial;  
 
function FileSystemInit:Boolean; override;  
 
function MountFileSystem:Boolean; override;  
function DismountFileSystem:Boolean; override;  
function InitializeFileSystem(ASectorsPerCluster:LongWord; AFileSysType:TFileSysType):Boolean; override;  
 
function GetDriveLabel:String; override;  
function SetDriveLabel(const ALabel:String):Boolean; override;  
function SetDriveSerial(ASerial:LongWord):Boolean; override;  
 
function GetDriveFreeSpaceEx:Int64; override;  
function GetDriveTotalSpaceEx:Int64; override;  

CDFS disk table

TCDFSDiskTable = class(TDiskTable)

Note: Represents a CDFS path table.
 
constructor Create(ALock:TSynchronizerHandle; ALocalLock:TMutexHandle; ADescriptor:TCDFSDiskDescriptor);  
destructor Destroy; override;  
private
FTableType:Byte;  
FEndian:Boolean;  
FUnicode:Boolean;  
 
FPathsLoaded:Boolean;  
 
FStartCluster:LongWord;  
FClusterCount:LongWord;  
 
FDataFree:LongWord; Data Free
FDataSize:LongWord; Data Length
 
FPaths:TFileSysListEx;  
FPathLocal:TMutexHandle;  
 
FDescriptor:TCDFSDiskDescriptor;  
 
public
property TableType:Byte read FTableType write FTableType;  
property Endian:Boolean read FEndian write FEndian;  
property Unicode:Boolean read FUnicode write FUnicode;  
 
property PathsLoaded:Boolean read FPathsLoaded write FPathsLoaded;  
 
property StartCluster:LongWord read FStartCluster write FStartCluster;  
property ClusterCount:LongWord read FClusterCount write FClusterCount;  
 
property DataFree:LongWord read FDataFree write FDataFree;  
property DataSize:LongWord read FDataSize write FDataSize;  
 
property Paths:TFileSysListEx read FPaths;  
property PathLocal:TMutexHandle read FPathLocal;  
property Descriptor:TCDFSDiskDescriptor read FDescriptor;  

CDFS disk block

TCDFSDiskBlock = class(TDiskBlock)

Note: Represents a block of clusters.
 
constructor Create(ALocalLock:TMutexHandle);  
destructor Destroy; override;  
private
FBlockCount:LongWord; Number of cluster entries in this block
FBlockBuffer:Pointer;  
FBlockCluster:LongWord; First cluster represented by this block
 
public
property BlockCount:LongWord read FBlockCount write FBlockCount;  
property BlockBuffer:Pointer read FBlockBuffer write FBlockBuffer;  
property BlockCluster:LongWord read FBlockCluster write FBlockCluster;  

CDFS disk entry

TCDFSDiskEntry = class(TDiskEntry)

Note: Represents a CDFS directory entry.
 
constructor Create(ALocalLock:TMutexHandle);  
destructor Destroy; override;  
private
FUnicode:Boolean;  
FVersion:String;  
 
FEntryOffset:LongWord;  
FEntryCluster:LongWord;  
FStartCluster:LongWord;  
FClusterCount:LongWord;  
 
FRecordSize:Byte; Length of Directory Record (LEN-DR)
FExtendedSize:Byte; Extended Attribute Record Length
FDataSize:LongWord; Data Length
FUnitSize:Byte; File Unit Size
FInterleaveSize:Byte; Interleave Gap Size
FSequenceNumber:Word; Volume Sequence Number
 
FDataFree:LongWord; Data Free
 
FPath:TCDFSDiskPath;  
FPathM:TCDFSDiskPath;  
FAltPath:TCDFSDiskPath;  
FAltPathM:TCDFSDiskPath;  
FExtended:TCDFSDiskExtended;  
 
function GetVersion:String;  
procedure SetVersion(const AVersion:String);  
public
property Unicode:Boolean read FUnicode write FUnicode;  
property Version:String read GetVersion write SetVersion;  
 
property EntryOffset:LongWord read FEntryOffset write FEntryOffset;  
property EntryCluster:LongWord read FEntryCluster write FEntryCluster;  
property StartCluster:LongWord read FStartCluster write FStartCluster;  
property ClusterCount:LongWord read FClusterCount write FClusterCount;  
 
property RecordSize:Byte read FRecordSize write FRecordSize;  
property ExtendedSize:Byte read FExtendedSize write FExtendedSize;  
property DataSize:LongWord read FDataSize write FDataSize;  
property FirstBlock:LongWord read FStartCluster write FStartCluster;  
property UnitSize:Byte read FUnitSize write FUnitSize;  
property InterleaveSize:Byte read FInterleaveSize write FInterleaveSize;  
property SequenceNumber:Word read FSequenceNumber write FSequenceNumber;  
 
property DataFree:LongWord read FDataFree write FDataFree;  
 
property Path:TCDFSDiskPath read FPath write FPath;  
property PathM:TCDFSDiskPath read FPathM write FPathM;  
property AltPath:TCDFSDiskPath read FAltPath write FAltPath;  
property AltPathM:TCDFSDiskPath read FAltPathM write FAltPathM;  
property Extended:TCDFSDiskExtended read FExtended write FExtended;  
 
function PathNumber:Word;  
function ParentNumber:Word;  
 
function FileIdentifier:String;  
function FileIdentifierSize:Byte;  
function DirectoryRecordSize:Byte;  
function ExtendedRecordSize:Byte;  

CDFS disk catalog

TCDFSDiskCatalog = class(TDiskCatalog)

Note: Represents a CDFS boot catalog entry (Also the Initial/Default entry).
 
constructor Create(ALocalLock:TMutexHandle);  
destructor Destroy; override;  
private
FCatalogOffset:LongWord;  
FCatalogCluster:LongWord;  
FStartCluster:LongWord;  
FClusterCount:LongWord;  
 
FInitial:Boolean;  
FBootIndicator:Byte;  
FBootMedia:Byte;  
FLoadSegment:Word;  
FSystemType:Byte;  
FLoadCount:Word;  
 
FSelectionType:Byte;  
FSelectionData:Pointer;  
 
FEntry:TCDFSDiskEntry;  
FHeader:TCDFSDiskHeader;  
protected
function GetName:String; override;  
procedure SetName(const AName:String); override;  
function GetMediaType:TMediaType; override;  
procedure SetMediaType(AMediaType:TMediaType); override;  
function GetFloppyType:TFloppyType; override;  
procedure SetFloppyType(AFloppyType:TFloppyType); override;  
function GetAttributes:LongWord; override;  
procedure SetAttributes(AAttributes:LongWord); override;  
function GetSectorSize:Word; override;  
procedure SetSectorSize(ASectorSize:Word); override;  
function GetSectorCount:Int64; override;  
procedure SetSectorCount(const ASectorCount:Int64); override;  
 
function GetStartCluster:LongWord;  
procedure SetStartCluster(AStartCluster:LongWord);  
function GetClusterCount:LongWord;  
procedure SetClusterCount(AClusterCount:LongWord);  
public
property CatalogOffset:LongWord read FCatalogOffset write FCatalogOffset;  
property CatalogCluster:LongWord read FCatalogCluster write FCatalogCluster;  
property StartCluster:LongWord read GetStartCluster write SetStartCluster;  
property ClusterCount:LongWord read GetClusterCount write SetClusterCount;  
 
property Initial:Boolean read FInitial write FInitial;  
property BootIndicator:Byte read FBootIndicator write FBootIndicator;  
property BootMedia:Byte read FBootMedia write FBootMedia;  
property LoadSegment:Word read FLoadSegment write FLoadSegment;  
property SystemType:Byte read FSystemType write FSystemType;  
property LoadCount:Word read FLoadCount write FLoadCount;  
 
property SelectionType:Byte read FSelectionType write FSelectionType;  
property SelectionData:Pointer read FSelectionData write FSelectionData;  
 
property Entry:TCDFSDiskEntry read FEntry write FEntry;  
property Header:TCDFSDiskHeader read FHeader write FHeader;  
property Validation:TCDFSDiskHeader read FHeader write FHeader;  

CDFS disk path

TCDFSDiskPath = class(TListObject)

Note: Represents a CDFS path table entry.
 
constructor Create(ALocalLock:TMutexHandle);  
destructor Destroy; override;  
private
FLocalLock:TMutexHandle;  
 
FName:String;  
FHash:LongWord;  
 
FPathNumber:Word;  
FPathOffset:LongWord;  
FStartCluster:LongWord;  
 
FExtendedSize:Byte; Extended Attribute Record Length
FParentNumber:Word; Parent Directory Number
 
FParent:TCDFSDiskPath;  
 
function AcquireLock:Boolean;  
function ReleaseLock:Boolean;  
 
function GetName:String;  
procedure SetName(const AName:String);  
public
property Name:String read GetName write SetName;  
property Hash:LongWord read FHash;  
 
property PathNumber:Word read FPathNumber write FPathNumber;  
property PathOffset:LongWord read FPathOffset write FPathOffset;  
property StartCluster:LongWord read FStartCluster write FStartCluster;  
 
property ExtendedSize:Byte read FExtendedSize write FExtendedSize;  
property FirstBlock:LongWord read FStartCluster write FStartCluster;  
property ParentNumber:Word read FParentNumber write FParentNumber;  
 
property Parent:TCDFSDiskPath read FParent write FParent;  
 
function PathIdentifier:String;  
function PathIdentifierSize(AUnicode:Boolean):Byte;  
function PathRecordSize(AUnicode:Boolean):Byte;  

CDFS disk extended

TCDFSDiskExtended = class(TObject)

Note: Represents a CDFS extended attribute.
 
constructor Create(ALocalLock:TMutexHandle);  
destructor Destroy; override;  
private
FLocalLock:TMutexHandle;  
 
FStartCluster:LongWord;  
FClusterCount:LongWord;  
 
FOwnerId:Word; Owner Identification
FGroupId:Word; Group Identification
FPermissions:Word; Permissions 16 bits
FCreateTime:TFileTime; File Creation Date and Time
FModifyTime:TFileTime; File Modification Date and Time
FExpireTime:TFileTime; File Expiration Date and Time
FEffectiveTime:TFileTime; File Effective Date and Time
FRecordFormat:Byte; Record Format
FRecordAttributes:Byte; Record Attributes
FRecordLength:Word; Record Length
FSystemIdentifier:String; System Identifier a-characters, a1-characters
FSystemData:Pointer; System Use not specified
FExtendedVersion:Byte; Extended Attribute Record Version
FEscapeSequenceSize:Byte; Length of Escape Sequences (LEN_ESC)
FApplicationDataSize:Word; Length of Application Use (LEN_AU)
FApplicationData:Pointer; Application Use LEN_AU bytes
FEscapeSequence:Pointer; Escape Sequences LEN_ESC bytes
 
function AcquireLock:Boolean;  
function ReleaseLock:Boolean;  
 
function GetSystemIdentifier:String;  
procedure SetSystemIdentifier(const ASystemIdentifier:String);  
public
property StartCluster:LongWord read FStartCluster write FStartCluster;  
property ClusterCount:LongWord read FClusterCount write FClusterCount;  
 
property OwnerId:Word read FOwnerId write FOwnerId;  
property GroupId:Word read FGroupId write FGroupId;  
property Permissions:Word read FPermissions write FPermissions;  
property CreateTime:TFileTime read FCreateTime write FCreateTime;  
property ModifyTime:TFileTime read FModifyTime write FModifyTime;  
property ExpireTime:TFileTime read FExpireTime write FExpireTime;  
property EffectiveTime:TFileTime read FEffectiveTime write FEffectiveTime;  
property RecordFormat:Byte read FRecordFormat write FRecordFormat;  
property RecordAttributes:Byte read FRecordAttributes write FRecordAttributes;  
property RecordLength:Word read FRecordLength write FRecordLength;  
property SystemIdentifier:String read GetSystemIdentifier write SetSystemIdentifier;  
property SystemData:Pointer read FSystemData write FSystemData;  
property ExtendedVersion:Byte read FExtendedVersion write FExtendedVersion;  
property EscapeSequenceSize:Byte read FEscapeSequenceSize write FEscapeSequenceSize;  
property ApplicationDataSize:Word read FApplicationDataSize write FApplicationDataSize;  
property ApplicationData:Pointer read FApplicationData write FApplicationData;  
property EscapeSequence:Pointer read FEscapeSequence write FEscapeSequence;  
 
function ExtendedRecordSize:Byte;  

CDFS disk descriptor

TCDFSDiskDescriptor = class(TListObject)

Note: Represents a CDFS volume descriptor.
 
constructor Create(ALocalLock:TMutexHandle);  
destructor Destroy; override;  
private
FLocalLock:TMutexHandle;  
 
FUnicode:Boolean;  
 
FStartCluster:LongWord;  
 
FDescriptorType:Byte; Descriptor Type (00 = Boot, 01 = Primary etc)
FDescriptorVersion:Byte; Descriptor Version (1)
FStandardIdentifier:String; Standard Identifier ('CD001')
 
FSystemIdentifier:String; System Identifier a-characters (eg EL TORITO SPECIFICATION)
FVolumeIdentifier:String; Volume Identifier d-characters
FVolumeSpaceSize:LongWord; Volume Space Size
FVolumeSetSize:Word; Volume Set Size
FVolumeSequenceNumber:Word; Volume Sequence Number
FLogicalBlockSize:Word; Logical Block Size
FPathTableSize:LongWord; Path Table Size
FPrimaryPathTable:LongWord; Location of Occurrence of Type L Path Table
FAlternatePathTable:LongWord; Location of Optional Occurrence of Type L Path Table
FPrimaryPathTableM:LongWord; Location of Occurrence of Type M Path Table
FAlternatePathTableM:LongWord; Location of Optional Occurrence of Type M Path Table
FVolumeSetIdentifier:String; Volume Set Identifier d-characters
FPublisherIdentifier:String; Publisher Identifier a-characters
FPreparerIdentifier:String; Data Preparer Identifier a-characters
FApplicationIdentifier:String; Application Identifier a-characters
FCopyrightIdentifier:String; Copyright File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
FAbstractIdentifier:String; Abstract File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
FBibliographicIdentifier:String; Bibliographic File Identifier d-characters, SEPARATOR 1, SEPARATOR 2
FCreateTime:TFileTime; Volume Creation Date and Time
FModifyTime:TFileTime; Volume Modification Date and Time
FExpireTime:TFileTime; Volume Expiration Date and Time
FEffectiveTime:TFileTime; Volume Effective Date and Time
FFileStructureVersion:Byte; File Structure Version
FApplicationData:Pointer; Application Use not specified
 
FVolumeFlags:Byte; Volume Flags 8 bits
FEscapeSequences:Pointer; Escape Sequences 32 bytes
 
FBootIdentifier:String; 32 a-characters
FCatalogStart:LongWord; Absolute pointer to first sector of Boot Catalog
FCatalogCount:LongWord; Number of Sectors in Boot Catalog (Not Stored)
 
FPartitionIdentifier:String; Volume Partition Identifier d-characters
FPartitionStart:LongWord; Volume Partition Location (first Logical Block)
FPartitionSize:LongWord; Volume Partition Size (in Logical Blocks)
FSystemData:Pointer; System Use not specified
 
FRoot:TCDFSDiskEntry;  
FPrimary:TCDFSDiskTable;  
FPrimaryM:TCDFSDiskTable;  
FAlternate:TCDFSDiskTable;  
FAlternateM:TCDFSDiskTable;  
 
FInitial:TCDFSDiskCatalog;  
FValidation:TCDFSDiskHeader;  
 
function AcquireLock:Boolean;  
function ReleaseLock:Boolean;  
 
function GetStandardIdentifier:String;  
procedure SetStandardIdentifier(const AStandardIdentifier:String);  
 
function GetSystemIdentifier:String;  
procedure SetSystemIdentifier(const ASystemIdentifier:String);  
function GetVolumeIdentifier:String;  
procedure SetVolumeIdentifier(const AVolumeIdentifier:String);  
 
function GetVolumeSetIdentifier:String;  
procedure SetVolumeSetIdentifier(const AVolumeSetIdentifier:String);  
function GetPublisherIdentifier:String;  
procedure SetPublisherIdentifier(const APublisherIdentifier:String);  
function GetPreparerIdentifier:String;  
procedure SetPreparerIdentifier(const APreparerIdentifier:String);  
function GetApplicationIdentifier:String;  
procedure SetApplicationIdentifier(const AApplicationIdentifier:String);  
function GetCopyrightIdentifier:String;  
procedure SetCopyrightIdentifier(const ACopyrightIdentifier:String);  
function GetAbstractIdentifier:String;  
procedure SetAbstractIdentifier(const AAbstractIdentifier:String);  
function GetBibliographicIdentifier:String;  
procedure SetBibliographicIdentifier(const ABibliographicIdentifier:String);  
 
function GetBootIdentifier:String;  
procedure SetBootIdentifier(const ABootIdentifier:String);  
 
function GetPartitionIdentifier:String;  
procedure SetPartitionIdentifier(const APartitionIdentifier:String);  
public
property Unicode:Boolean read FUnicode write FUnicode;  
 
property StartCluster:LongWord read FStartCluster write FStartCluster;  
 
property DescriptorType:Byte read FDescriptorType write FDescriptorType;  
property DescriptorVersion:Byte read FDescriptorVersion write FDescriptorVersion;  
property StandardIdentifier:String read GetStandardIdentifier write SetStandardIdentifier;  
 
property SystemIdentifier:String read GetSystemIdentifier write SetSystemIdentifier;  
property VolumeIdentifier:String read GetVolumeIdentifier write SetVolumeIdentifier;  
property VolumeSpaceSize:LongWord read FVolumeSpaceSize write FVolumeSpaceSize;  
property VolumeSetSize:Word read FVolumeSetSize write FVolumeSetSize;  
property VolumeSequenceNumber:Word read FVolumeSequenceNumber write FVolumeSequenceNumber;  
property LogicalBlockSize:Word read FLogicalBlockSize write FLogicalBlockSize;  
property PathTableSize:LongWord read FPathTableSize write FPathTableSize;  
property PrimaryPathTable:LongWord read FPrimaryPathTable write FPrimaryPathTable;  
property AlternatePathTable:LongWord read FAlternatePathTable write FAlternatePathTable;  
property PrimaryPathTableM:LongWord read FPrimaryPathTableM write FPrimaryPathTableM;  
property AlternatePathTableM:LongWord read FAlternatePathTableM write FAlternatePathTableM;  
property VolumeSetIdentifier:String read GetVolumeSetIdentifier write SetVolumeSetIdentifier;  
property PublisherIdentifier:String read GetPublisherIdentifier write SetPublisherIdentifier;  
property PreparerIdentifier:String read GetPreparerIdentifier write SetPreparerIdentifier;  
property ApplicationIdentifier:String read GetApplicationIdentifier write SetApplicationIdentifier;  
property CopyrightIdentifier:String read GetCopyrightIdentifier write SetCopyrightIdentifier;  
property AbstractIdentifier:String read GetAbstractIdentifier write SetAbstractIdentifier;  
property BibliographicIdentifier:String read GetBibliographicIdentifier write SetBibliographicIdentifier;  
property CreateTime:TFileTime read FCreateTime write FCreateTime;  
property ModifyTime:TFileTime read FModifyTime write FModifyTime;  
property ExpireTime:TFileTime read FExpireTime write FExpireTime;  
property EffectiveTime:TFileTime read FEffectiveTime write FEffectiveTime;  
property FileStructureVersion:Byte read FFileStructureVersion write FFileStructureVersion;  
property ApplicationData:Pointer read FApplicationData write FApplicationData;  
 
property VolumeFlags:Byte read FVolumeFlags write FVolumeFlags;  
property EscapeSequences:Pointer read FEscapeSequences write FEscapeSequences;  
 
property BootIdentifier:String read GetBootIdentifier write SetBootIdentifier;  
property CatalogStart:LongWord read FCatalogStart write FCatalogStart;  
property CatalogCount:LongWord read FCatalogCount write FCatalogCount;  
 
property PartitionIdentifier:String read GetPartitionIdentifier write SetPartitionIdentifier;  
property PartitionStart:LongWord read FPartitionStart write FPartitionStart;  
property PartitionSize:LongWord read FPartitionSize write FPartitionSize;  
property SystemData:Pointer read FSystemData write FSystemData;  
 
property Root:TCDFSDiskEntry read FRoot write FRoot;  
property Primary:TCDFSDiskTable read FPrimary write FPrimary;  
property PrimaryM:TCDFSDiskTable read FPrimaryM write FPrimaryM;  
property Alternate:TCDFSDiskTable read FAlternate write FAlternate;  
property AlternateM:TCDFSDiskTable read FAlternateM write FAlternateM;  
 
property Initial:TCDFSDiskCatalog read FInitial write FInitial;  
property Validation:TCDFSDiskHeader read FValidation write FValidation;  

CDFS disk header

TCDFSDiskHeader = class(TListObject)

Note: Represents a CDFS catalog header (Also the Validation entry).
 
constructor Create(ALocalLock:TMutexHandle);  
destructor Destroy; override;  
private
FLocalLock:TMutexHandle;  
 
FHeaderNo:LongWord;  
 
FHeaderOffset:LongWord;  
FHeaderCluster:LongWord;  
 
FValidation:Boolean;  
FHeaderId:Byte;  
FPlatformId:Byte;  
FVendorId:String;  
FChecksum:Word;  
FSignature:Word;  
 
FSectionCount:Word;  
 
function AcquireLock:Boolean;  
function ReleaseLock:Boolean;  
 
function GetVendorId:String;  
procedure SetVendorId(const AVendorId:String);  
public
property HeaderNo:LongWord read FHeaderNo write FHeaderNo;  
 
property HeaderOffset:LongWord read FHeaderOffset write FHeaderOffset;  
property HeaderCluster:LongWord read FHeaderCluster write FHeaderCluster;  
 
property Validation:Boolean read FValidation write FValidation;  
property HeaderId:Byte read FHeaderId write FHeaderId;  
property PlatformId:Byte read FPlatformId write FPlatformId;  
property VendorId:String read GetVendorId write SetVendorId;  
property Checksum:Word read FChecksum write FChecksum;  
property Signature:Word read FSignature write FSignature;  
 
property HeaderIndicator:Byte read FHeaderId write FHeaderId;  
property SectionCount:Word read FSectionCount write FSectionCount;  
property SectionId:String read GetVendorId write SetVendorId;  

CDFS disk extension

TCDFSDiskExtension = class(TListObject)

Note: Represents a CDFS catalog extension.
 
constructor Create(ALocalLock:TMutexHandle);  
destructor Destroy; override;  
private
FLocalLock:TMutexHandle;  
 
FExtensionNo:LongWord;  
 
FExtensionOffset:LongWord;  
FExtensionCluster:LongWord;  
 
FExtensionIndicator:Byte;  
FExtensionFlag:Byte;  
FSelectionData:Pointer;  
 
FCatalog:TCDFSDiskCatalog;  
 
function AcquireLock:Boolean;  
function ReleaseLock:Boolean;  
public
property ExtensionNo:LongWord read FExtensionNo write FExtensionNo;  
 
property ExtensionOffset:LongWord read FExtensionOffset write FExtensionOffset;  
property ExtensionCluster:LongWord read FExtensionCluster write FExtensionCluster;  
 
property ExtensionIndicator:Byte read FExtensionIndicator write FExtensionIndicator;  
property ExtensionFlag:Byte read FExtensionFlag write FExtensionFlag;  
property SelectionData:Pointer read FSelectionData write FSelectionData;  
 
property Catalog:TCDFSDiskCatalog read FCatalog write FCatalog;  


Public variables


None defined

Function declarations



Initialization functions

procedure CDFSInit;
Description: To be documented
Note None documented


procedure CDFSQuit;
Description: To be documented
Note None documented


CDFS helper functions

function CDFSDataToPointer(const AData; ASize:Integer; ASwap:Boolean):Pointer;
Description: Creates a pointer and copies data from a buffer
Note Allows byte order swapping on copy


function CDFSPointerToData(APointer:Pointer; var AData; ASize:Integer; ASwap:Boolean):Boolean;
Description: Copies data to a buffer from supplied pointer
Note Allows byte order swapping on copy


function CDFSIdentifierToString(const AIdentifier; ASize:Integer; AUnicode:Boolean):String;
Description: Converts the supplied indentifier to a string
Note Accounts for unicode and byte ordering


function CDFSStringToIdentifier(const AString:String; var AIdentifier; ASize:Integer; AUnicode:Boolean):Boolean;
Description: Converts the supplied string to an identifier
Note Accounts for unicode and byte ordering


function CDFSIdentifierToFileName(const AIdentifier; ASize:Integer; AUnicode:Boolean):String;
Description: Converts the supplied identifier to a filename
Note Accounts for dot and dot dot special entries


function CDFSFileNameToIdentifier(const AFileName:String; var AIdentifier; ASize:Integer; AUnicode:Boolean):Boolean;
Description: Converts the supplied filename to an identifier
Note Accounts for dot and dot dot special entries


function CDFSTimeToFileTime(const ATime:TCDFSTime):TFileTime;
Description: Converts a CDFS Time in Local to a File Time in UTC
Note None documented


function FileTimeToCDFSTime(const AFileTime:TFileTime; var ATime:TCDFSTime):Boolean;
Description: Converts a File Time in UTC to a CDFS Time in Local
Note None documented


function CDFSDateTimeToFileTime(const ADateTime:TCDFSDateTime):TFileTime;
Description: Converts a CDFS Date Time in Local to a File Time in UTC
Note None documented


function FileTimeToCDFSDateTime(const AFileTime:TFileTime; var ADateTime:TCDFSDateTime):Boolean;
Description: Converts a File Time in UTC to a CDFS Date Time in Local
Note None documented


Return to Unit Reference