Difference between revisions of "Unit CDFS"
(16 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
---- | ---- | ||
− | '''Ultibo CDFS | + | '''Ultibo CDFS Interface unit''' |
− | + | ||
− | + | ||
=== Constants === | === Constants === | ||
Line 34: | Line 32: | ||
|- | |- | ||
| <code>cdfsUDF = 5;</code> | | <code>cdfsUDF = 5;</code> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
| | | | ||
|- | |- | ||
Line 67: | Line 43: | ||
|- | |- | ||
| <code>cdfsDotDotName = '..';</code> | | <code>cdfsDotDotName = '..';</code> | ||
− | |||
− | |||
− | |||
| | | | ||
|- | |- | ||
Line 261: | Line 234: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''CDFS bitmap mask | + | <div style="font-size: 14px; padding-left: 12px;">'''CDFS bitmap mask''' <code> cdfsBitmapMask* </code></div> |
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 278: | Line 251: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''CDFS volume flag | + | <div style="font-size: 14px; padding-left: 12px;">'''CDFS volume flag''' <code> cdfsVolumeFlag* </code></div> |
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 292: | Line 265: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''CDFS file flag | + | <div style="font-size: 14px; padding-left: 12px;">'''CDFS file flag''' <code> cdfsFileFlag* </code></div> |
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 327: | Line 300: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''CDFS permissions | + | <div style="font-size: 14px; padding-left: 12px;">'''CDFS permissions''' <code> cdfsPermission* </code></div> |
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 383: | Line 356: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''CDFS path table | + | <div style="font-size: 14px; padding-left: 12px;">'''CDFS path table''' <code> cdfsPathTable* </code></div> |
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 403: | Line 376: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''CDFS volume descriptor | + | <div style="font-size: 14px; padding-left: 12px;">'''CDFS volume descriptor''' <code> cdfsVolumeDescriptor* </code></div> |
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 426: | Line 399: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''CDFS header | + | <div style="font-size: 14px; padding-left: 12px;">'''CDFS header''' <code> cdfsElTorito* </code></div> |
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 452: | Line 425: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''CDFS signature | + | <div style="font-size: 14px; padding-left: 12px;">'''CDFS signature''' <code> cdfsElToritoSignature* </code></div> |
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 463: | Line 436: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''CDFS platform Id | + | <div style="font-size: 14px; padding-left: 12px;">'''CDFS platform Id''' <code> cdfsElToritoPlatform* </code></div> |
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 480: | Line 453: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''CDFS media type | + | <div style="font-size: 14px; padding-left: 12px;">'''CDFS media type''' <code> cdfsElToritoMedia* </code></div> |
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 523: | Line 496: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''CDFS extension flag | + | <div style="font-size: 14px; padding-left: 12px;">'''CDFS extension flag''' <code> cdfsElToritoExtensionFlag* </code></div> |
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 537: | Line 510: | ||
---- | ---- | ||
− | '' | + | |
+ | '''CDFS specific types''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TCDFSType = (ctNONE,ctISO9660,ctJOLIET,ctSIERRA,ctROCKRIDGE,ctAUDIO,ctUDF);</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''CDFS time''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PCDFSTime = ^TCDFSTime;</code> | ||
+ | |||
+ | <code>TCDFSTime = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 7 Bytes | ||
+ | |- | ||
+ | | <code>Years:Byte;</code> | ||
+ | | Number of years since 1900 | ||
+ | |- | ||
+ | | <code>Month:Byte;</code> | ||
+ | | Month of the year from 1 to 12 | ||
+ | |- | ||
+ | | <code>Day:Byte;</code> | ||
+ | | Day of the month from 1 to 31 | ||
+ | |- | ||
+ | | <code>Hour:Byte;</code> | ||
+ | | Hour of the day from 0 to 23 | ||
+ | |- | ||
+ | | <code>Minute:Byte;</code> | ||
+ | | Minute of the hour from 0 to 59 | ||
+ | |- | ||
+ | | <code>Second:Byte;</code> | ||
+ | | Second of the minute from 0 to 59 | ||
+ | |- | ||
+ | | <code>Offset:ShortInt;</code> | ||
+ | | Offset from Greenwich Mean Time in number of 15 min intervals from -48 (West) to +52 (East) | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''CDFS date time''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PCDFSDateTime = ^TCDFSDateTime;</code> | ||
+ | |||
+ | <code>TCDFSDateTime = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 17 Bytes | ||
+ | |- | ||
+ | | <code>Year:array[0..3] of Char;</code> | ||
+ | | Year from 1 to 9999 | ||
+ | |- | ||
+ | | <code>Month:array[0..1] of Char;</code> | ||
+ | | Month of the year from 1 to 12 | ||
+ | |- | ||
+ | | <code>Day:array[0..1] of Char;</code> | ||
+ | | Day of the month from 1 to 31 | ||
+ | |- | ||
+ | | <code>Hour:array[0..1] of Char;</code> | ||
+ | | Hour of the day from 0 to 23 | ||
+ | |- | ||
+ | | <code>Minute:array[0..1] of Char;</code> | ||
+ | | Minute of the hour from 0 to 59 | ||
+ | |- | ||
+ | | <code>Second:array[0..1] of Char;</code> | ||
+ | | Second of the minute from 0 to 59 | ||
+ | |- | ||
+ | | <code>Hundredths:array[0..1] of Char;</code> | ||
+ | | Hundredths of a second | ||
+ | |- | ||
+ | | <code>Offset:ShortInt;</code> | ||
+ | | Offset from Greenwich Mean Time in number of 15 min intervals from -48 (West) to +52 (East) | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''CDFS directory record''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PCDFSDirectoryRecord = ^TCDFSDirectoryRecord;</code> | ||
+ | |||
+ | <code>TCDFSDirectoryRecord = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 34 Bytes (Minimum not including padding) | ||
+ | |- | ||
+ | | <code>RecordSize:Byte;</code> | ||
+ | | Length of Directory Record (LEN-DR) | ||
+ | |- | ||
+ | | <code>ExtendedSize:Byte;</code> | ||
+ | | Extended Attribute Record Length | ||
+ | |- | ||
+ | | <code>FirstBlock:LongWord;</code> | ||
+ | | Location of Extent | ||
+ | |- | ||
+ | | <code>FirstBlockM:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DataSize:LongWord;</code> | ||
+ | | Data Length | ||
+ | |- | ||
+ | | <code>DataSizeM:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>CreateTime:TCDFSTime;</code> | ||
+ | | Recording Date and Time | ||
+ | |- | ||
+ | | <code>FileFlags:Byte;</code> | ||
+ | | File Flags 8 bits | ||
+ | |- | ||
+ | | <code>UnitSize:Byte;</code> | ||
+ | | File Unit Size | ||
+ | |- | ||
+ | | <code>InterleaveSize:Byte;</code> | ||
+ | | Interleave Gap Size | ||
+ | |- | ||
+ | | <code>SequenceNumber:Word;</code> | ||
+ | | Volume Sequence Number | ||
+ | |- | ||
+ | | <code>SequenceNumberM:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>FileIdentifierSize:Byte;</code> | ||
+ | | Length of File Identifier (LEN_FI) | ||
+ | |- | ||
+ | | <code>FileIdentifier:array[0..0] of Char;</code> | ||
+ | | File Identifier d-characters,d1-characters,SEPARATOR 1,SEPARATOR 2,(00) or (01) byte | ||
+ | |- | ||
+ | | <code>Padding:Byte;</code> | ||
+ | | Padding Field (00) byte (Only present if FileIdentifierSize is even (Total size would be odd)) | ||
+ | |- | ||
+ | | <code>SystemData:array[0..0] of Byte;</code> | ||
+ | | System Use LEN_SU bytes | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''CDFS path record''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PCDFSPathRecord = ^TCDFSPathRecord;</code> | ||
+ | |||
+ | <code>TCDFSPathRecord = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 9 Bytes (Minimum not including padding) | ||
+ | |- | ||
+ | | <code>PathIdentifierSize:Byte;</code> | ||
+ | | Length of Directory Identifier (LEN_DI) | ||
+ | |- | ||
+ | | <code>ExtendedSize:Byte;</code> | ||
+ | | Extended Attribute Record Length | ||
+ | |- | ||
+ | | <code>FirstBlock:LongWord;</code> | ||
+ | | Location of Extent | ||
+ | |- | ||
+ | | <code>ParentNumber:Word;</code> | ||
+ | | Parent Directory Number | ||
+ | |- | ||
+ | | <code>PathIdentifier:array[0..0] of Char;</code> | ||
+ | | Directory Identifier d-characters, d1-characters, (00) byte | ||
+ | |- | ||
+ | | <code>Padding:Byte;</code> | ||
+ | | Padding Field (00) byte (Only present if PathIdentifierSize is odd (Total size would be odd)) | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''CDFS extended record''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PCDFSExtendedRecord = ^TCDFSExtendedRecord;</code> | ||
+ | |||
+ | <code>TCDFSExtendedRecord = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 250 Bytes (Minimum) | ||
+ | |- | ||
+ | | <code>OwnerId:Word;</code> | ||
+ | | Owner Identification | ||
+ | |- | ||
+ | | <code>OwnerIdM:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>GroupId:Word;</code> | ||
+ | | Group Identification | ||
+ | |- | ||
+ | | <code>GroupIdM:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>Permissions:Word;</code> | ||
+ | | Permissions 16 bits | ||
+ | |- | ||
+ | | <code>CreateTime:TCDFSDateTime;</code> | ||
+ | | File Creation Date and Time | ||
+ | |- | ||
+ | | <code>ModifyTime:TCDFSDateTime;</code> | ||
+ | | File Modification Date and Time | ||
+ | |- | ||
+ | | <code>ExpireTime:TCDFSDateTime;</code> | ||
+ | | File Expiration Date and Time | ||
+ | |- | ||
+ | | <code>EffectiveTime:TCDFSDateTime;</code> | ||
+ | | File Effective Date and Time | ||
+ | |- | ||
+ | | <code>RecordFormat:Byte;</code> | ||
+ | | Record Format | ||
+ | |- | ||
+ | | <code>RecordAttributes:Byte;</code> | ||
+ | | Record Attributes | ||
+ | |- | ||
+ | | <code>RecordLength:Word;</code> | ||
+ | | Record Length | ||
+ | |- | ||
+ | | <code>RecordLengthM:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>SystemIdentifier:array[0..31] of Char;</code> | ||
+ | | System Identifier a-characters, a1-characters | ||
+ | |- | ||
+ | | <code>SystemData:array[0..63] of Byte;</code> | ||
+ | | System Use not specified | ||
+ | |- | ||
+ | | <code>ExtendedVersion:Byte;</code> | ||
+ | | Extended Attribute Record Version | ||
+ | |- | ||
+ | | <code>EscapeSequenceSize:Byte;</code> | ||
+ | | Length of Escape Sequences (LEN_ESC) | ||
+ | |- | ||
+ | | <code>Reserved1:array[0..63] of Byte;</code> | ||
+ | | Reserved for future standardization (00) bytes | ||
+ | |- | ||
+ | | <code>ApplicationDataSize:Word;</code> | ||
+ | | Length of Application Use (LEN_AU) | ||
+ | |- | ||
+ | | <code>ApplicationDataSizeM:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ApplicationData:array[0..0] of Byte;</code> | ||
+ | | Application Use LEN_AU bytes | ||
+ | |- | ||
+ | | <code>EscapeSequence:array[0..0] of Byte;</code> | ||
+ | | Escape Sequences LEN_ESC bytes | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''CDFS volume descriptor header''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PCDFSVolumeDescriptorHeader = ^TCDFSVolumeDescriptorHeader;</code> | ||
+ | |||
+ | <code>TCDFSVolumeDescriptorHeader = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 2048 Bytes | ||
+ | |- | ||
+ | | <code>DescriptorType:Byte;</code> | ||
+ | | Descriptor Type 00 = Boot, 01 = Primary etc | ||
+ | |- | ||
+ | | <code>StandardIdentifier:array[0..4] of Char;</code> | ||
+ | | Standard Identifier ('CD001') | ||
+ | |- | ||
+ | | <code>DescriptorVersion:Byte;</code> | ||
+ | | Descriptor Version (1) | ||
+ | |- | ||
+ | | <code>Reserved:array[0..2040] of Byte;</code> | ||
+ | | Content depends on Descriptor Type | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''CDFS volume descriptor boot''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PCDFSVolumeDescriptorBoot = ^TCDFSVolumeDescriptorBoot;</code> | ||
+ | |||
+ | <code>TCDFSVolumeDescriptorBoot = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 2048 Bytes | ||
+ | |- | ||
+ | | <code>DescriptorType:Byte;</code> | ||
+ | | Descriptor Type (00 = Boot) | ||
+ | |- | ||
+ | | <code>StandardIdentifier:array[0..4] of Char;</code> | ||
+ | | Standard Identifier ('CD001') | ||
+ | |- | ||
+ | | <code>DescriptorVersion:Byte;</code> | ||
+ | | Descriptor Version (1) | ||
+ | |- | ||
+ | | <code>SystemIdentifier:array[0..31] of Char;</code> | ||
+ | | 32 a-characters (eg EL TORITO SPECIFICATION) | ||
+ | |- | ||
+ | | <code>BootIdentifier:array[0..31] of Char;</code> | ||
+ | | 32 a-characters | ||
+ | |- | ||
+ | | <code>BootData:array[0..1976] of Byte;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''CDFS volume descriptor primary''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PCDFSVolumeDescriptorPrimary = ^TCDFSVolumeDescriptorPrimary;</code> | ||
+ | |||
+ | <code>TCDFSVolumeDescriptorPrimary = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 2048 Bytes | ||
+ | |- | ||
+ | | <code>DescriptorType:Byte;</code> | ||
+ | | Descriptor Type (01 = Primary) | ||
+ | |- | ||
+ | | <code>StandardIdentifier:array[0..4] of Char;</code> | ||
+ | | Standard Identifier ('CD001') | ||
+ | |- | ||
+ | | <code>DescriptorVersion:Byte;</code> | ||
+ | | Descriptor Version (1) | ||
+ | |- | ||
+ | | <code>Reserved1:Byte;</code> | ||
+ | | Unused Field (00) byte | ||
+ | |- | ||
+ | | <code>SystemIdentifier:array[0..31] of Char;</code> | ||
+ | | System Identifier a-characters | ||
+ | |- | ||
+ | | <code>VolumeIdentifier:array[0..31] of Char;</code> | ||
+ | | Volume Identifier d-characters | ||
+ | |- | ||
+ | | <code>Reserved2:array[0..7] of Byte;</code> | ||
+ | | Unused Field (00) bytes | ||
+ | |- | ||
+ | | <code>VolumeSpaceSize:LongWord;</code> | ||
+ | | Volume Space Size | ||
+ | |- | ||
+ | | <code>VolumeSpaceSizeM:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>Reserved3:array[0..31] of Byte;</code> | ||
+ | | Unused Field (00) bytes | ||
+ | |- | ||
+ | | <code>VolumeSetSize:Word;</code> | ||
+ | | Volume Set Size | ||
+ | |- | ||
+ | | <code>VolumeSetSizeM:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>VolumeSequenceNumber:Word;</code> | ||
+ | | Volume Sequence Number | ||
+ | |- | ||
+ | | <code>VolumeSequenceNumberM:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>LogicalBlockSize:Word;</code> | ||
+ | | Logical Block Size | ||
+ | |- | ||
+ | | <code>LogicalBlockSizeM:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>PathTableSize:LongWord;</code> | ||
+ | | Path Table Size | ||
+ | |- | ||
+ | | <code>PathTableSizeM:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>PrimaryPathTable:LongWord;</code> | ||
+ | | Location of Occurrence of Type L Path Table | ||
+ | |- | ||
+ | | <code>AlternatePathTable:LongWord;</code> | ||
+ | | Location of Optional Occurrence of Type L Path Table | ||
+ | |- | ||
+ | | <code>PrimaryPathTableM:LongWord;</code> | ||
+ | | Location of Occurrence of Type M Path Table | ||
+ | |- | ||
+ | | <code>AlternatePathTableM:LongWord;</code> | ||
+ | | Location of Optional Occurrence of Type M Path Table | ||
+ | |- | ||
+ | | <code>RootDirectory:TCDFSDirectoryRecord;</code> | ||
+ | | Directory Record for Root Directory 34 bytes | ||
+ | |- | ||
+ | | <code>VolumeSetIdentifier:array[0..127] of Char;</code> | ||
+ | | Volume Set Identifier d-characters | ||
+ | |- | ||
+ | | <code>PublisherIdentifier:array[0..127] of Char;</code> | ||
+ | | Publisher Identifier a-characters | ||
+ | |- | ||
+ | | <code>PreparerIdentifier:array[0..127] of Char;</code> | ||
+ | | Data Preparer Identifier a-characters | ||
+ | |- | ||
+ | | <code>ApplicationIdentifier:array[0..127] of Char;</code> | ||
+ | | Application Identifier a-characters | ||
+ | |- | ||
+ | | <code>CopyrightIdentifier:array[0..36] of Char;</code> | ||
+ | | Copyright File Identifier d-characters, SEPARATOR 1, SEPARATOR 2 | ||
+ | |- | ||
+ | | <code>AbstractIdentifier:array[0..36] of Char;</code> | ||
+ | | Abstract File Identifier d-characters, SEPARATOR 1, SEPARATOR 2 | ||
+ | |- | ||
+ | | <code>BibliographicIdentifier:array[0..36] of Char;</code> | ||
+ | | Bibliographic File Identifier d-characters, SEPARATOR 1, SEPARATOR 2 | ||
+ | |- | ||
+ | | <code>CreateTime:TCDFSDateTime;</code> | ||
+ | | Volume Creation Date and Time | ||
+ | |- | ||
+ | | <code>ModifyTime:TCDFSDateTime;</code> | ||
+ | | Volume Modification Date and Time | ||
+ | |- | ||
+ | | <code>ExpireTime:TCDFSDateTime;</code> | ||
+ | | Volume Expiration Date and Time | ||
+ | |- | ||
+ | | <code>EffectiveTime:TCDFSDateTime;</code> | ||
+ | | Volume Effective Date and Time | ||
+ | |- | ||
+ | | <code>FileStructureVersion:Byte;</code> | ||
+ | | File Structure Version | ||
+ | |- | ||
+ | | <code>Reserved4:Byte;</code> | ||
+ | | Reserved for future standardization (00) byte | ||
+ | |- | ||
+ | | <code>ApplicationData:array[0..511] of Byte;</code> | ||
+ | | Application Use not specified | ||
+ | |- | ||
+ | | <code>Reserved5:array[0..652] of Byte;</code> | ||
+ | | Reserved for future standardization (00) bytes | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''CDFS volume descriptor supplementary''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PCDFSVolumeDescriptorSupplementary = ^TCDFSVolumeDescriptorSupplementary;</code> | ||
+ | |||
+ | <code>TCDFSVolumeDescriptorSupplementary = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 2048 Bytes | ||
+ | |- | ||
+ | | <code>DescriptorType:Byte;</code> | ||
+ | | Descriptor Type (02 = Supplementary) | ||
+ | |- | ||
+ | | <code>StandardIdentifier:array[0..4] of Char;</code> | ||
+ | | Standard Identifier ('CD001') | ||
+ | |- | ||
+ | | <code>DescriptorVersion:Byte;</code> | ||
+ | | Descriptor Version (1) | ||
+ | |- | ||
+ | | <code>VolumeFlags:Byte;</code> | ||
+ | | Volume Flags 8 bits | ||
+ | |- | ||
+ | | <code>SystemIdentifier:array[0..31] of Char;</code> | ||
+ | | System Identifier a-characters | ||
+ | |- | ||
+ | | <code>VolumeIdentifier:array[0..31] of Char;</code> | ||
+ | | Volume Identifier d-characters | ||
+ | |- | ||
+ | | <code>Reserved2:array[0..7] of Byte;</code> | ||
+ | | Unused Field (00) bytes | ||
+ | |- | ||
+ | | <code>VolumeSpaceSize:LongWord;</code> | ||
+ | | Volume Space Size | ||
+ | |- | ||
+ | | <code>VolumeSpaceSizeM:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>EscapeSequences:array[0..31] of Byte;</code> | ||
+ | | Escape Sequences 32 bytes | ||
+ | |- | ||
+ | | <code>VolumeSetSize:Word;</code> | ||
+ | | Volume Set Size | ||
+ | |- | ||
+ | | <code>VolumeSetSizeM:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>VolumeSequenceNumber:Word;</code> | ||
+ | | Volume Sequence Number | ||
+ | |- | ||
+ | | <code>VolumeSequenceNumberM:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>LogicalBlockSize:Word;</code> | ||
+ | | Logical Block Size | ||
+ | |- | ||
+ | | <code>LogicalBlockSizeM:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>PathTableSize:LongWord;</code> | ||
+ | | Path Table Size | ||
+ | |- | ||
+ | | <code>PathTableSizeM:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>PrimaryPathTable:LongWord;</code> | ||
+ | | Location of Occurrence of Type L Path Table | ||
+ | |- | ||
+ | | <code>AlternatePathTable:LongWord;</code> | ||
+ | | Location of Optional Occurrence of Type L Path Table | ||
+ | |- | ||
+ | | <code>PrimaryPathTableM:LongWord;</code> | ||
+ | | Location of Occurrence of Type M Path Table | ||
+ | |- | ||
+ | | <code>AlternatePathTableM:LongWord;</code> | ||
+ | | Location of Optional Occurrence of Type M Path Table | ||
+ | |- | ||
+ | | <code>RootDirectory:TCDFSDirectoryRecord;</code> | ||
+ | | Directory Record for Root Directory 34 bytes | ||
+ | |- | ||
+ | | <code>VolumeSetIdentifier:array[0..127] of Char;</code> | ||
+ | | Volume Set Identifier d-characters | ||
+ | |- | ||
+ | | <code>PublisherIdentifier:array[0..127] of Char;</code> | ||
+ | | Publisher Identifier a-characters | ||
+ | |- | ||
+ | | <code>PreparerIdentifier:array[0..127] of Char;</code> | ||
+ | | Data Preparer Identifier a-characters | ||
+ | |- | ||
+ | | <code>ApplicationIdentifier:array[0..127] of Char;</code> | ||
+ | | Application Identifier a-characters | ||
+ | |- | ||
+ | | <code>CopyrightIdentifier:array[0..36] of Char;</code> | ||
+ | | Copyright File Identifier d-characters, SEPARATOR 1, SEPARATOR 2 | ||
+ | |- | ||
+ | | <code>AbstractIdentifier:array[0..36] of Char;</code> | ||
+ | | Abstract File Identifier d-characters, SEPARATOR 1, SEPARATOR 2 | ||
+ | |- | ||
+ | | <code>BibliographicIdentifier:array[0..36] of Char;</code> | ||
+ | | Bibliographic File Identifier d-characters, SEPARATOR 1, SEPARATOR 2 | ||
+ | |- | ||
+ | | <code>CreateTime:TCDFSDateTime;</code> | ||
+ | | Volume Creation Date and Time | ||
+ | |- | ||
+ | | <code>ModifyTime:TCDFSDateTime;</code> | ||
+ | | Volume Modification Date and Time | ||
+ | |- | ||
+ | | <code>ExpireTime:TCDFSDateTime;</code> | ||
+ | | Volume Expiration Date and Time | ||
+ | |- | ||
+ | | <code>EffectiveTime:TCDFSDateTime;</code> | ||
+ | | Volume Effective Date and Time | ||
+ | |- | ||
+ | | <code>FileStructureVersion:Byte;</code> | ||
+ | | File Structure Version | ||
+ | |- | ||
+ | | <code>Reserved4:Byte;</code> | ||
+ | | Reserved for future standardization (00) byte | ||
+ | |- | ||
+ | | <code>ApplicationData:array[0..511] of Byte;</code> | ||
+ | | Application Use not specified | ||
+ | |- | ||
+ | | <code>Reserved5:array[0..652] of Byte;</code> | ||
+ | | Reserved for future standardization (00) bytes | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''CDFS volume descriptor partition''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PCDFSVolumeDescriptorPartition = ^TCDFSVolumeDescriptorPartition;</code> | ||
+ | |||
+ | <code>TCDFSVolumeDescriptorPartition = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 2048 Bytes | ||
+ | |- | ||
+ | | <code>DescriptorType:Byte;</code> | ||
+ | | Descriptor Type (03 = Partition) | ||
+ | |- | ||
+ | | <code>StandardIdentifier:array[0..4] of Char;</code> | ||
+ | | Standard Identifier ('CD001') | ||
+ | |- | ||
+ | | <code>DescriptorVersion:Byte;</code> | ||
+ | | Descriptor Version (1) | ||
+ | |- | ||
+ | | <code>Reserved1:Byte;</code> | ||
+ | | Unused Field (00) byte | ||
+ | |- | ||
+ | | <code>SystemIdentifier:array[0..31] of Char;</code> | ||
+ | | System Identifier a-characters | ||
+ | |- | ||
+ | | <code>PartitionIdentifier:array[0..31] of Char;</code> | ||
+ | | Volume Partition Identifier d-characters | ||
+ | |- | ||
+ | | <code>PartitionStart:LongWord;</code> | ||
+ | | Volume Partition Location (first Logical Block) | ||
+ | |- | ||
+ | | <code>PartitionStartM:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>PartitionSize:LongWord;</code> | ||
+ | | Volume Partition Size (in Logical Blocks) | ||
+ | |- | ||
+ | | <code>PartitionSizeM:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>SystemData:array[0..1959] of Byte;</code> | ||
+ | | System Use not specified | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''CDFS volume descriptor terminator''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PCDFSVolumeDescriptorTerminator = ^TCDFSVolumeDescriptorTerminator;</code> | ||
+ | |||
+ | <code>TCDFSVolumeDescriptorTerminator = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 2048 Bytes | ||
+ | |- | ||
+ | | <code>DescriptorType:Byte;</code> | ||
+ | | Descriptor Type (FF = Terminator) | ||
+ | |- | ||
+ | | <code>StandardIdentifier:array[0..4] of Char;</code> | ||
+ | | Standard Identifier ('CD001') | ||
+ | |- | ||
+ | | <code>DescriptorVersion:Byte;</code> | ||
+ | | Descriptor Version (1) | ||
+ | |- | ||
+ | | <code>Reserved:array[0..2040] of Byte;</code> | ||
+ | | Reserved (Always 00) | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''EL TORITO validation record''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PELTORITOValidationRecord = ^TELTORITOValidationRecord;</code> | ||
+ | |||
+ | <code>TELTORITOValidationRecord = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 32 Bytes | ||
+ | |- | ||
+ | | <code>HeaderId:Byte;</code> | ||
+ | | Header ID, must be 01 | ||
+ | |- | ||
+ | | <code>PlatformId:Byte;</code> | ||
+ | | Platform ID 0 = 80x86, 1 = PowerPC, 2 = Mac | ||
+ | |- | ||
+ | | <code>Reserved1:Word;</code> | ||
+ | | Reserved, must be 0 | ||
+ | |- | ||
+ | | <code>VendorId:array[0..23] of Char;</code> | ||
+ | | ID string. This is intended to identify the manufacturer/developer of the CD-ROM | ||
+ | |- | ||
+ | | <code>Checksum:Word;</code> | ||
+ | | Checksum Word. This sum of all the words in this record should be 0 | ||
+ | |- | ||
+ | | <code>Signature:Word;</code> | ||
+ | | Key byte, must be 55. Key byte, must be AA. This value is included in the checksum | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''EL TORITO default record''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PELTORITODefaultRecord = ^TELTORITODefaultRecord;</code> | ||
+ | |||
+ | <code>TELTORITODefaultRecord = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 32 Bytes | ||
+ | |- | ||
+ | | <code>BootIndicator:Byte;</code> | ||
+ | | Boot Indicator. 88 = Bootable, 00 = Not Bootable | ||
+ | |- | ||
+ | | <code>BootMedia:Byte;</code> | ||
+ | | Boot media type. This specifies what media the boot image is intended to emulate | ||
+ | |- | ||
+ | | <code>LoadSegment:Word;</code> | ||
+ | | This is the load segment for the initial boot image. If this value is 0 the system will use the traditional segment of 7C0 | ||
+ | |- | ||
+ | | <code>SystemType:Byte;</code> | ||
+ | | This must be a copy of byte 5 (System Type) from the Partition Table found in the boot image (PartitionId) | ||
+ | |- | ||
+ | | <code>Reserved1:Byte;</code> | ||
+ | | Unused, must be 0 | ||
+ | |- | ||
+ | | <code>LoadCount:Word;</code> | ||
+ | | Sector Count. This is the number of virtual/emulated sectors the system will store at Load Segment during the initial boot procedure | ||
+ | |- | ||
+ | | <code>LoadRBA:LongWord;</code> | ||
+ | | Load RBA. This is the start address of the virtual disk. CDs use Relative/Logical block addressing | ||
+ | |- | ||
+ | | <code>Reserved2:array[0..19] of Byte; {Unused, must be 0}</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''EL TORITO section header''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PELTORITOSectionHeader = ^TELTORITOSectionHeader;</code> | ||
+ | |||
+ | <code>TELTORITOSectionHeader = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 32 Bytes | ||
+ | |- | ||
+ | | <code>HeaderIndicator:Byte;</code> | ||
+ | | Header Indicator, 90 - Header, more headers follow, 91 - Final Header | ||
+ | |- | ||
+ | | <code>PlatformId:Byte;</code> | ||
+ | | Platform ID 0 = 80x86, 1 = PowerPC, 2 = Mac | ||
+ | |- | ||
+ | | <code>SectionCount:Word;</code> | ||
+ | | Number of section entries following this header | ||
+ | |- | ||
+ | | <code>SectionId:array[0..27] of Char;</code> | ||
+ | | ID string. This identifies a section | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''EL TORITO section record''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PELTORITOSectionRecord = ^TELTORITOSectionRecord;</code> | ||
+ | |||
+ | <code>TELTORITOSectionRecord = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 32 Bytes | ||
+ | |- | ||
+ | | <code>BootIndicator:Byte;</code> | ||
+ | | Boot Indicator. 88 = Bootable, 00 = Not Bootable | ||
+ | |- | ||
+ | | <code>BootMedia:Byte;</code> | ||
+ | | Boot media type. This specifies what media the boot image emulates | ||
+ | |- | ||
+ | | <code>LoadSegment:Word;</code> | ||
+ | | 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 | ||
+ | |- | ||
+ | | <code>SystemType:Byte;</code> | ||
+ | | System Type. This must be a copy of byte 5 (System Type) from the Partition Table found in the boot image (PartitionId) | ||
+ | |- | ||
+ | | <code>Reserved1:Byte;</code> | ||
+ | | Unused, must be 0 | ||
+ | |- | ||
+ | | <code>LoadCount:Word;</code> | ||
+ | | Sector Count. This is the number of virtual/emulated sectors the system will store at Load Segment during the initial boot procedure | ||
+ | |- | ||
+ | | <code>LoadRBA:LongWord;</code> | ||
+ | | Load RBA. This is the start address of the virtual disk. CDs use Relative/Logical block addressing | ||
+ | |- | ||
+ | | <code>SelectionType:Byte;</code> | ||
+ | | Selection criteria type. 0 - No selection criteria, 1- Language and Version Information (IBM), 2-FF - Reserved | ||
+ | |- | ||
+ | | <code>SelectionData:array[0..18] of Byte;</code> | ||
+ | | Vendor unique selection criteria | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''EL TORITO section extension''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PELTORITOSectionExtension = ^TELTORITOSectionExtension;</code> | ||
+ | |||
+ | <code>TELTORITOSectionExtension = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 32 Bytes | ||
+ | |- | ||
+ | | <code>ExtensionIndicator:Byte;</code> | ||
+ | | Extension Indicator. Must be 44 | ||
+ | |- | ||
+ | | <code>ExtensionFlag:Byte;</code> | ||
+ | | Bits 1-4 - Unused, Bit 5 (1 = Extension Record follows, 0 = This is final Extension), Bits 6-7 - Unused | ||
+ | |- | ||
+ | | <code>SelectionData:array[0..29] of Byte;</code> | ||
+ | | Vendor unique selection criteria | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''EL TORITO volume descriptor boot''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PELTORITOVolumeDescriptorBoot = ^TELTORITOVolumeDescriptorBoot;</code> | ||
+ | |||
+ | <code>TELTORITOVolumeDescriptorBoot = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|Note: 2048 Bytes | ||
+ | |- | ||
+ | | <code>DescriptorType:Byte;</code> | ||
+ | | Boot Record Indicator, must be 0 | ||
+ | |- | ||
+ | | <code>StandardIdentifier:array[0..4] of Char;</code> | ||
+ | | ISO-9660 Identifier, must be 'CD001' | ||
+ | |- | ||
+ | | <code>DescriptorVersion:Byte;</code> | ||
+ | | Version of this descriptor, must be 1 | ||
+ | |- | ||
+ | | <code>SystemIdentifier:array[0..31] of Char;</code> | ||
+ | | Boot System Identifier, must be 'EL TORITO SPECIFICATION' padded with 0s | ||
+ | |- | ||
+ | | <code>Reserved1:array[0..31] of Byte;</code> | ||
+ | | Unused, must be 0 | ||
+ | |- | ||
+ | | <code>CatalogStart:LongWord;</code> | ||
+ | | Absolute pointer to first sector of Boot Catalog | ||
+ | |- | ||
+ | | <code>Reserved2:array[0..1972] of Byte;</code> | ||
+ | | Unused, must be 0 | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
=== Class definitions === | === Class definitions === | ||
---- | ---- | ||
− | '' | + | |
+ | '''CDFS specific classes''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSRecognizer|<code>TCDFSRecognizer = class(TRecognizer)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSFormatter|<code>TCDFSFormatter = class(TDiskFormatter)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSResizer|<code>TCDFSResizer = class(TDiskResizer)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSCopier|<code>TCDFSCopier = class(TDiskCopier)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSFileSystem|<code>TCDFSFileSystem = class(TFileSystem)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSDiskTable|<code>TCDFSDiskTable = class(TDiskTable)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSDiskBlock|<code>TCDFSDiskBlock = class(TDiskBlock)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSDiskEntry|<code>TCDFSDiskEntry = class(TDiskEntry)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSDiskCatalog|<code>TCDFSDiskCatalog = class(TDiskCatalog)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSDiskPath|<code>TCDFSDiskPath = class(TListObject)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSDiskExtended|<code>TCDFSDiskExtended = class(TObject)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSDiskDescriptor|<code>TCDFSDiskDescriptor = class(TListObject)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSDiskHeader|<code>TCDFSDiskHeader = class(TListObject)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TCDFSDiskExtension|<code>TCDFSDiskExtension = class(TListObject)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | <br /> | ||
=== Public variables === | === Public variables === | ||
Line 561: | Line 1,445: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 573: | Line 1,457: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 588: | Line 1,472: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Allows byte order swapping on copy | | Allows byte order swapping on copy | ||
|- | |- | ||
Line 600: | Line 1,484: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Allows byte order swapping on copy | | Allows byte order swapping on copy | ||
|- | |- | ||
Line 612: | Line 1,496: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Accounts for unicode and byte ordering | | Accounts for unicode and byte ordering | ||
|- | |- | ||
Line 624: | Line 1,508: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Accounts for unicode and byte ordering | | Accounts for unicode and byte ordering | ||
|- | |- | ||
Line 636: | Line 1,520: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Accounts for dot and dot dot special entries | | Accounts for dot and dot dot special entries | ||
|- | |- | ||
Line 648: | Line 1,532: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Accounts for dot and dot dot special entries | | Accounts for dot and dot dot special entries | ||
|- | |- | ||
Line 660: | Line 1,544: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 672: | Line 1,556: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 684: | Line 1,568: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 696: | Line 1,580: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- |
Latest revision as of 05:35, 31 August 2021
Return to Unit Reference
Contents
Description
Ultibo CDFS Interface unit
Constants
cdfs*
cdfsIso9660 = 0;
|
|
cdfsJoilet = 1;
|
|
cdfsSierra = 2;
|
|
cdfsRockRidge = 3;
|
|
cdfsAudio = 4;
|
|
cdfsUDF = 5;
|
|
cdfsAnyName = '*';
|
|
cdfsDotName = '.';
|
|
cdfsDotDotName = '..';
|
|
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);
|
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 |
cdfsVolumeFlag*
cdfsVolumeFlagNone = $00;
|
|
cdfsVolumeFlagUnregistered = $01;
|
If set this SVD contains an unregistered escape sequence |
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 |
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 |
cdfsPathTable*
cdfsPathTableTypePrimary = $00;
|
|
cdfsPathTableTypeAlternate = $01;
|
|
cdfsPathTableTypePrimaryM = $02;
|
|
cdfsPathTableTypeAlternateM = $03;
|
cdfsVolumeDescriptor*
cdfsVolumeDescriptorTypeBoot = $00;
|
|
cdfsVolumeDescriptorTypePrimary = $01;
|
|
cdfsVolumeDescriptorTypeSupplementary = $02;
|
|
cdfsVolumeDescriptorTypePartition = $03;
|
|
cdfsVolumeDescriptorTypeTerminator = $FF;
|
cdfsElTorito*
cdfsElToritoHeaderId = $01;
|
|
cdfsElToritoBootIndicator = $88;
|
|
cdfsElToritoNoBootIndicator = $00;
|
|
cdfsElToritoHeaderIndicator = $90;
|
91 if final header |
cdfsElToritoHeaderTerminator = $91;
|
|
cdfsElToritoExtensionIndicator = $44;
|
cdfsElToritoSignature*
cdfsElToritoSignature = $AA55;
|
cdfsElToritoPlatform*
cdfsElToritoPlatformIdx86 = $00;
|
|
cdfsElToritoPlatformIdPPC = $01;
|
|
cdfsElToritoPlatformIdMac = $02;
|
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;
|
cdfsElToritoExtensionFlag*
cdfsElToritoExtensionFlagExtension = $20;
|
Extension Record Follows |
Type definitions
CDFS specific types
TCDFSType = (ctNONE,ctISO9660,ctJOLIET,ctSIERRA,ctROCKRIDGE,ctAUDIO,ctUDF);
|
CDFS time
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
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
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
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
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
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
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
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
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
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
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
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
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. CDs use Relative/Logical block addressing |
Reserved2:array[0..19] of Byte; {Unused, must be 0}
|
EL TORITO section header
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
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. CDs 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
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
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 0s |
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 specific classes
TCDFSRecognizer = class(TRecognizer)
|
TCDFSFormatter = class(TDiskFormatter)
|
TCDFSResizer = class(TDiskResizer)
|
TCDFSCopier = class(TDiskCopier)
|
TCDFSFileSystem = class(TFileSystem)
|
TCDFSDiskTable = class(TDiskTable)
|
TCDFSDiskBlock = class(TDiskBlock)
|
TCDFSDiskEntry = class(TDiskEntry)
|
TCDFSDiskCatalog = class(TDiskCatalog)
|
TCDFSDiskPath = class(TListObject)
|
TCDFSDiskExtended = class(TObject)
|
TCDFSDiskDescriptor = class(TListObject)
|
TCDFSDiskHeader = class(TListObject)
|
TCDFSDiskExtension = class(TListObject)
|
Public variables
None defined
Function declarations
Initialization functions
procedure CDFSInit;
Note | None documented |
---|
procedure CDFSQuit;
Note | None documented |
---|
CDFS helper functions
function CDFSDataToPointer(const AData; ASize:Integer; ASwap:Boolean):Pointer;
Note | Allows byte order swapping on copy |
---|
function CDFSPointerToData(APointer:Pointer; var AData; ASize:Integer; ASwap:Boolean):Boolean;
Note | Allows byte order swapping on copy |
---|
function CDFSIdentifierToString(const AIdentifier; ASize:Integer; AUnicode:Boolean):String;
Note | Accounts for unicode and byte ordering |
---|
function CDFSStringToIdentifier(const AString:String; var AIdentifier; ASize:Integer; AUnicode:Boolean):Boolean;
Note | Accounts for unicode and byte ordering |
---|
function CDFSIdentifierToFileName(const AIdentifier; ASize:Integer; AUnicode:Boolean):String;
Note | Accounts for dot and dot dot special entries |
---|
function CDFSFileNameToIdentifier(const AFileName:String; var AIdentifier; ASize:Integer; AUnicode:Boolean):Boolean;
Note | Accounts for dot and dot dot special entries |
---|
function CDFSTimeToFileTime(const ATime:TCDFSTime):TFileTime;
Note | None documented |
---|
function FileTimeToCDFSTime(const AFileTime:TFileTime; var ATime:TCDFSTime):Boolean;
Note | None documented |
---|
function CDFSDateTimeToFileTime(const ADateTime:TCDFSDateTime):TFileTime;
Note | None documented |
---|
function FileTimeToCDFSDateTime(const AFileTime:TFileTime; var ADateTime:TCDFSDateTime):Boolean;
Note | None documented |
---|
Return to Unit Reference