;===============================================================================
;       volume descriptor possible types
ISO9660_BOOT_RECORD			= 0
ISO9660_PRIMARY_VOLUME_DESCRIPTOR	= 1
ISO9660_SUPPLEMENTARY_VOLUME_DESCRIPTOR = 2
ISO9660_VOLUME_PARTIRITON_DESCRIPTOR	= 3
ISO9660_TERMINATOR			= 255
ISO9660_PVD				equ ISO9660_PRIMARY_VOLUME_DESCRIPTOR
ISO9660_SVD				equ ISO9660_SUPPLEMENTARY_VOLUME_DESCRIPTOR

;===============================================================================
;       file flags
FILE_FLAG_EXISTENCE			= 00000001b
FILE_FLAG_DIRECTORY			= 00000010b

FILE_FLAG_NO_EXTENDED			= not 00011000b
FILE_FLAG_NORMAL			= 00000100b
FILE_FLAG_FINAL 			= not 10000000b

;===============================================================================
;       structures needed to get through iso 9660 image file
struct DATE_AND_TIME
  Year				rb 4
  Month 			rb 2
  Day				rb 2
  Hour				rb 2
  Minute			rb 2
  Second			rb 2
  HundrethSecond		rb 2
  OffsetGreenwichMeanTime	rb 1
ends

struct DATE_AND_TIME2
  Year				db ?
  Month 			db ?
  Day				db ?
  Hour				db ?
  Minute			db ?
  Second			db ?
  OffsetGreenwichMeanTime	db ?
ends

struct DIRECTORY_RECORD
  LengthOfDirectoryRecord	db ?		; 76
  ExtendedAttributeRecordLength db ?		; 00
  LocationOfExtent		rd 2		; 6F 02 00 00
  DataLength			rd 2		; D1 05 01 00
  RecordingDateAndTime		DATE_AND_TIME2	; 69 02 16 07 08 00 04
  FileFlags			db ?		; 02
  FileUnitSize			db ?		; 00
  InterleaveGapSize		db ?		; 00
  VolumeSequenceNumber		dd ?		; 01 00 00 01
  LengthOfFileIdentifier	db ?		; 01
  FileIdentifier		db ?		; 00
ends

struct VOLUME_DESCRIPTOR
  VolumeDescriptorType		db ?
  StandardIdentifier		rb 5
  VolumeDescriptorVersion	db ?
ends

struct PVD VOLUME_DESCRIPTOR
				db ?
  SystemIdentifier		rb 32
  VolumeIdentifier		rb 32
				rb 8
  VolumeSpaceSize		rb 8
				rb 32
  VolumeSetSize 		dd ?
  VolumeSequenceNumber		dd ?
  LogicalBlockSize		dd ?
  PathTableSize 		rd 2
  OccurenceTypeLPathTable	dd ?
  OptionalOccurenceLPathTable	dd ?
  OccurenceTypeMPathTable	dd ?
  OptionalOccurenceMPathTable	dd ?
  RootDirectory 		DIRECTORY_RECORD
  VolumeSetIdentifier		rb 128
  PublisherIdentifier		rb 128
  DataPreparerIdentifier	rb 128
  ApplicationIdentifier 	rb 128
  CopyrightFileIdentifier	rb 37
  AbstractFileIdentifier	rb 37
  BibliographicFileIdentifier	rb 37
  VolumeCreationDateAndTime	DATE_AND_TIME
  VolumeModificationDateAndTime DATE_AND_TIME
  VolumeExpirationDateAndTime	DATE_AND_TIME
  VolumeEffectiveDateAndTime	DATE_AND_TIME
  FileStructureVersion		db ?
  Reserved1			db ?
  ApplicationUse		rb 512
  Reserved2			rb 653
ends

struct SVD VOLUME_DESCRIPTOR
  VolumeFlags			db ?
  SystemIdentifier		rb 32
  VolumeIdentifier		rb 32
				rb 8
  VolumeSpaceSize		rd 2
  EscapeSequences		rb 32
  VolumeSetSize 		dd ?
  VolumeSequenceNumber		dd ?
  LogicalBlockSize		dd ?
  PathTableSize 		rd 2
  OccurenceTypeLPathTable	dd ?
  OptionalOccurenceLPathTable	dd ?
  OccurenceTypeMPathTable	dd ?
  OptionalOccurenceMPathTable	dd ?
  RootDirectory 		DIRECTORY_RECORD
  VolumeSetIdentifier		rb 128
  PublisherIdentifier		rb 128
  DataPreparerIdentifier	rb 128
  ApplicationIdentifier 	rb 128
  CopyrightFileIdentifier	rb 37
  AbstractFileIdentifier	rb 37
  BibliographicFileIdentifier	rb 37
  VolumeCreationDateAndTime	DATE_AND_TIME
  VolumeModificationDateAndTime DATE_AND_TIME
  VolumeExpirationDateAndTime	DATE_AND_TIME
  VolumeEffectiveDateAndTime	DATE_AND_TIME
  FileStructureVersion		db ?
  Reserved1			db ?
  ApplicationUse		rb 512
  Reserved2			rb 653
ends

struct PATH_TABLE
  LengthOfDirectoryIdentifier	db ?
  ExtendedAttributeRecordLength db ?
  LocationOfExtent		dd ?
  ParentDirectoryNumber 	dw ?
  DirectoryIdentifier		db ?
ends