Difference between revisions of "Unit CDFS"
(Created page with "Return to Unit Reference === Description === ---- ''To be documented'' === Constants === ---- ''To be documented'' === Type definitions === ---- ''To...") |
|||
(22 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
---- | ---- | ||
− | '' | + | '''Ultibo CDFS Interface unit''' |
=== Constants === | === Constants === | ||
---- | ---- | ||
− | '' | + | |
+ | <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 specific constants''' <code> cdfs* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsIso9660 = 0;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsJoilet = 1;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsSierra = 2;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsRockRidge = 3;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsAudio = 4;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsUDF = 5;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsAnyName = '*';</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsDotName = '.';</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsDotDotName = '..';</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsVersionName = '1';</code> | ||
+ | | Used by version information on end of identifier (Not Used) | ||
+ | |- | ||
+ | | <code>cdfsSeparator1Name = '.';</code> | ||
+ | | Dot on end of identifier when no extension exists (File only) | ||
+ | |- | ||
+ | | <code>cdfsSeparator2Name = ';';</code> | ||
+ | | Used by version information on end of identifier (File only) | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsJolietMaxPath = 240;</code> | ||
+ | | 120 (240 bytes) | ||
+ | |- | ||
+ | | <code>cdfsJolietMaxFile = 64;</code> | ||
+ | | (128 bytes) | ||
+ | |- | ||
+ | | <code>cdfsISO9660MaxPath = 240;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsISO9660MaxFile = 30;</code> | ||
+ | | 31 for Directories | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsISO9660StandardIdentifier = 'CD001';</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsELTORITOSystemIdentifier = 'EL TORITO SPECIFICATION';</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsFirstSector = 0;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsReservedSectors = 16;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsISO9660StartSector = 16;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsELTORITOBootSector = 17;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsISO9660StructureVersion = 1;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsISO9660DescriptorVersion = 1;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsELTORITODescriptorVersion = 1;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsJolietUCS2Sequence1 = #37 + #47 + #64;</code> | ||
+ | | '%/@' | ||
+ | |- | ||
+ | | <code>cdfsJolietUCS2Sequence2 = #37 + #47 + #67;</code> | ||
+ | | '%/C' | ||
+ | |- | ||
+ | | <code>cdfsJolietUCS2Sequence3 = #37 + #47 + #69;</code> | ||
+ | | '%/E' | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsDotIdentifier = $00;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsDotDotIdentifier = $01;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsSeparator1Value = $2E;</code> | ||
+ | | '.' | ||
+ | |- | ||
+ | | <code>cdfsSeparator2Value = $3B;</code> | ||
+ | | ';' | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsTimeStartYear = 1900;</code> | ||
+ | | CDFS Time starts at 1900 | ||
+ | |- | ||
+ | | <code>cdfsTimeOffsetInterval = 15;</code> | ||
+ | | Offset is in 15 minute intervals | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsNullFileTime:TFileTime = (dwLowDateTime:$00000000;dwHighDateTime:$00000000);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsStartCluster = 16;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsUnknownCluster = LongWord(-1);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsRootPathNumber = 1;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsPathRecordSize = 9;</code> | ||
+ | | Minimum | ||
+ | |- | ||
+ | | <code>cdfsExtendedRecordSize = 250;</code> | ||
+ | | Minimum | ||
+ | |- | ||
+ | | <code>cdfsDirectoryRecordSize = 34;</code> | ||
+ | | Minimum | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsFileIdentifierSize = 1;</code> | ||
+ | | Minimum | ||
+ | |- | ||
+ | | <code>cdfsPathIdentifierSize = 1;</code> | ||
+ | | Minimum | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsHeaderRecordSize = 32;</code> | ||
+ | | Fixed | ||
+ | |- | ||
+ | | <code>cdfsCatalogRecordSize = 32;</code> | ||
+ | | Fixed | ||
+ | |- | ||
+ | | <code>cdfsExtensionRecordSize = 32;</code> | ||
+ | | Fixed | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsEvenSize = 0;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsUnevenSize = 1;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsRootRecordOffset = 156;</code> | ||
+ | |Offset of Root Directory in Descriptor | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsInstanceFirst = 0;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsInstanceLast = Byte(-1);</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsTableTypeMask = $00FF0000;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsTableTypeShift = 16;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsTableInstanceMask = $0000FF00;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsTableInstanceShift = 8;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsTableDescriptorMask = $000000FF;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsTableDescriptorShift = 0;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsBitmapUnknown = LongWord(-1);</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''CDFS bitmap mask''' <code> cdfsBitmapMask* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsBitmapMaskBits = 64;</code> | ||
+ | | Int64 Bitmap Masks | ||
+ | |- | ||
+ | | <code>cdfsBitmapMaskNone = $0000000000000000;</code> | ||
+ | | Int64 Used for fast counting of free blocks | ||
+ | |- | ||
+ | | <code>cdfsBitmapMaskAll = $FFFFFFFFFFFFFFFF;</code> | ||
+ | | Int64 Used for fast counting of used blocks | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''CDFS volume flag''' <code> cdfsVolumeFlag* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsVolumeFlagNone = $00;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsVolumeFlagUnregistered = $01;</code> | ||
+ | | If set this SVD contains an unregistered escape sequence | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''CDFS file flag''' <code> cdfsFileFlag* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsFileFlagNone = $00;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsFileFlagExistence = $01;</code> | ||
+ | | If set this file is hidden | ||
+ | |- | ||
+ | | <code>cdfsFileFlagDirectory = $02;</code> | ||
+ | | If set this record is a directory | ||
+ | |- | ||
+ | | <code>cdfsFileFlagAssociated = $04;</code> | ||
+ | | If set this file is an associated file | ||
+ | |- | ||
+ | | <code>cdfsFileFlagRecord = $08;</code> | ||
+ | | If set record information is recorded for this file | ||
+ | |- | ||
+ | | <code>cdfsFileFlagProtection = $10;</code> | ||
+ | | If set permissions are recorded for this file | ||
+ | |- | ||
+ | | <code>cdfsFileFlagReserved1 = $20;</code> | ||
+ | | Reserved | ||
+ | |- | ||
+ | | <code>cdfsFileFlagReserved2 = $40;</code> | ||
+ | | Reserved | ||
+ | |- | ||
+ | | <code>cdfsFileFlagMore = $80;</code> | ||
+ | | If set there are more directory records for this file | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''CDFS permissions''' <code> cdfsPermission* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsPermissionSystemRead = $0001;</code> | ||
+ | | If set system cannot Read | ||
+ | |- | ||
+ | | <code>cdfsPermissionSystemWrite = $0002;</code> | ||
+ | | If set system cannot Write | ||
+ | |- | ||
+ | | <code>cdfsPermissionSystemExecute = $0004;</code> | ||
+ | | If set system cannot Execute | ||
+ | |- | ||
+ | | <code>cdfsPermissionReserved1 = $0008;</code> | ||
+ | | Reserved | ||
+ | |- | ||
+ | | <code>cdfsPermissionOwnerRead = $0010;</code> | ||
+ | | If set owner cannot Read | ||
+ | |- | ||
+ | | <code>cdfsPermissionOwnerWrite = $0020;</code> | ||
+ | | If set owner cannot Write | ||
+ | |- | ||
+ | | <code>cdfsPermissionOwnerExecute = $0040;</code> | ||
+ | | If set owner cannot Execute | ||
+ | |- | ||
+ | | <code>cdfsPermissionReserved2 = $0080;</code> | ||
+ | | Reserved | ||
+ | |- | ||
+ | | <code>cdfsPermissionGroupRead = $0100;</code> | ||
+ | | If set group cannot Read | ||
+ | |- | ||
+ | | <code>cdfsPermissionGroupWrite = $0200;</code> | ||
+ | | If set group cannot Write | ||
+ | |- | ||
+ | | <code>cdfsPermissionGroupExecute = $0400;</code> | ||
+ | | If set group cannot Execute | ||
+ | |- | ||
+ | | <code>cdfsPermissionReserved3 = $0800;</code> | ||
+ | | Reserved | ||
+ | |- | ||
+ | | <code>cdfsPermissionOtherRead = $1000;</code> | ||
+ | | If set other cannot Read | ||
+ | |- | ||
+ | | <code>cdfsPermissionOtherWrite = $2000;</code> | ||
+ | | If set other cannot Write | ||
+ | |- | ||
+ | | <code>cdfsPermissionOtherExecute = $4000;</code> | ||
+ | | If set other cannot Execute | ||
+ | |- | ||
+ | | <code>cdfsPermissionReserved4 = $8000;</code> | ||
+ | | Reserved | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''CDFS path table''' <code> cdfsPathTable* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsPathTableTypePrimary = $00;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>cdfsPathTableTypeAlternate = $01;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsPathTableTypePrimaryM = $02;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsPathTableTypeAlternateM = $03;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''CDFS volume descriptor''' <code> cdfsVolumeDescriptor* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsVolumeDescriptorTypeBoot = $00;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>cdfsVolumeDescriptorTypePrimary = $01;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsVolumeDescriptorTypeSupplementary = $02;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsVolumeDescriptorTypePartition = $03;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsVolumeDescriptorTypeTerminator = $FF;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''CDFS header''' <code> cdfsElTorito* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsElToritoHeaderId = $01;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsElToritoBootIndicator = $88;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsElToritoNoBootIndicator = $00;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsElToritoHeaderIndicator = $90;</code> | ||
+ | | 91 if final header | ||
+ | |- | ||
+ | | <code>cdfsElToritoHeaderTerminator = $91;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsElToritoExtensionIndicator = $44;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''CDFS signature''' <code> cdfsElToritoSignature* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsElToritoSignature = $AA55;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''CDFS platform Id''' <code> cdfsElToritoPlatform* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsElToritoPlatformIdx86 = $00;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>cdfsElToritoPlatformIdPPC = $01;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>cdfsElToritoPlatformIdMac = $02;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''CDFS media type''' <code> cdfsElToritoMedia* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsElToritoMediaTypeNone = $00;</code> | ||
+ | | No Emulation | ||
+ | |- | ||
+ | | <code>cdfsElToritoMediaType12M = $01;</code> | ||
+ | | 1.2 meg diskette | ||
+ | |- | ||
+ | | <code>cdfsElToritoMediaType144M = $02;</code> | ||
+ | | 1.44 meg diskette | ||
+ | |- | ||
+ | | <code>cdfsElToritoMediaType288M = $03;</code> | ||
+ | | 2.88 meg diskette | ||
+ | |- | ||
+ | | <code>cdfsElToritoMediaTypeHDD = $04;</code> | ||
+ | | Hard Disk (drive 80) | ||
+ | |- | ||
+ | | <code>cdfsElToritoMediaTypeMask = $0F;</code> | ||
+ | | Values 5-F Reserved, invalid at this time | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>cdfsElToritoMediaFlagReserved = $10;</code> | ||
+ | | Reserved, must be 0 | ||
+ | |- | ||
+ | | <code>cdfsElToritoMediaFlagContinuation = $20;</code> | ||
+ | | Continuation Entry Follows | ||
+ | |- | ||
+ | | <code>cdfsElToritoMediaFlagAtapi = $40;</code> | ||
+ | | Image contains ATAPI driver | ||
+ | |- | ||
+ | | <code>cdfsElToritoMediaFlagScsi = $80;</code> | ||
+ | | Image contains SCSI drivers | ||
+ | |- | ||
+ | | <code>cdfsElToritoMediaFlagMask = $F0;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''CDFS extension flag''' <code> cdfsElToritoExtensionFlag* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>cdfsElToritoExtensionFlagExtension = $20;</code> | ||
+ | | Extension Record Follows | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
=== Type definitions === | === Type definitions === | ||
---- | ---- | ||
− | '' | + | |
+ | '''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 === | ||
+ | ---- | ||
+ | |||
+ | |||
+ | '''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 === | ||
---- | ---- | ||
− | '' | + | ''None defined'' |
=== Function declarations === | === Function declarations === | ||
---- | ---- | ||
− | |||
+ | '''Initialization functions''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure CDFSInit;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure CDFSQuit;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | |||
+ | '''CDFS helper functions''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function CDFSDataToPointer(const AData; ASize:Integer; ASwap:Boolean):Pointer;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Creates a pointer and copies data from a buffer</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Allows byte order swapping on copy | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function CDFSPointerToData(APointer:Pointer; var AData; ASize:Integer; ASwap:Boolean):Boolean;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Copies data to a buffer from supplied pointer</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Allows byte order swapping on copy | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function CDFSIdentifierToString(const AIdentifier; ASize:Integer; AUnicode:Boolean):String;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Converts the supplied indentifier to a string</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Accounts for unicode and byte ordering | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function CDFSStringToIdentifier(const AString:String; var AIdentifier; ASize:Integer; AUnicode:Boolean):Boolean;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Converts the supplied string to an identifier</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Accounts for unicode and byte ordering | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function CDFSIdentifierToFileName(const AIdentifier; ASize:Integer; AUnicode:Boolean):String;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Converts the supplied identifier to a filename</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Accounts for dot and dot dot special entries | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function CDFSFileNameToIdentifier(const AFileName:String; var AIdentifier; ASize:Integer; AUnicode:Boolean):Boolean;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Converts the supplied filename to an identifier</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Accounts for dot and dot dot special entries | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function CDFSTimeToFileTime(const ATime:TCDFSTime):TFileTime;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Converts a CDFS Time in Local to a File Time in UTC</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function FileTimeToCDFSTime(const AFileTime:TFileTime; var ATime:TCDFSTime):Boolean;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Converts a File Time in UTC to a CDFS Time in Local</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function CDFSDateTimeToFileTime(const ADateTime:TCDFSDateTime):TFileTime;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Converts a CDFS Date Time in Local to a File Time in UTC</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function FileTimeToCDFSDateTime(const AFileTime:TFileTime; var ADateTime:TCDFSDateTime):Boolean;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Converts a File Time in UTC to a CDFS Date Time in Local</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
Return to [[Unit_Reference|Unit Reference]] | Return to [[Unit_Reference|Unit Reference]] |
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