107 lines
4.3 KiB
C
107 lines
4.3 KiB
C
|
#ifndef ISOVOLDESC_H
|
||
|
#define ISOVOLDESC_H
|
||
|
|
||
|
// Volume Descriptor types
|
||
|
#define ISO_VD_PRIMARY 0x01
|
||
|
#define ISO_VD_SUPPLEMENTARY 0x02
|
||
|
#define ISO_VD_END 0xFF
|
||
|
|
||
|
// Volume Descriptor ID
|
||
|
#define ISO_VD_ID "CD001"
|
||
|
|
||
|
// Volume Descriptor offset in image
|
||
|
#define ISO_VD_START 0x8000
|
||
|
|
||
|
// Index for LE/BE data
|
||
|
#define ISO_LSB_INDEX 0
|
||
|
#define ISO_MSB_INDEX 1
|
||
|
|
||
|
#if 0
|
||
|
#define PACKED _PACKED
|
||
|
#else
|
||
|
#define PACKED
|
||
|
#endif
|
||
|
|
||
|
typedef struct iso_vol_date {
|
||
|
char year[4]; // year (*not* ASCIIZ)
|
||
|
char month[2]; // month (1-12) (*not* ASCIIZ)
|
||
|
char day[2]; // day of the month (1-31) (*not* ASCIIZ)
|
||
|
char hour[2]; // hour (00-23) (*not* ASCIIZ)
|
||
|
char minute[2]; // minute (00-59) (*not* ASCIIZ)
|
||
|
char second[2]; // second (00-59) (*not* ASCIIZ)
|
||
|
char hundrSecond[2]; // hundr. of a sec (00-99) (*not* ASCIIZ)
|
||
|
signed char gmtOffset; // offset from GMT, in 15-minute intervals
|
||
|
} PACKED iso_vol_date;
|
||
|
|
||
|
typedef struct iso_dir_entry {
|
||
|
unsigned char recordLength; // Total length of this record
|
||
|
unsigned char extAttrSecCount; // Number of sectors in extended attr record
|
||
|
unsigned long dataStartSector[2]; // Sector # of 1st data sector for file/dir
|
||
|
unsigned long dataLength[2]; // Length of data for file/directory
|
||
|
unsigned char year; // Years since 1900
|
||
|
unsigned char month; // Month (1=jan, etc)
|
||
|
unsigned char day; // Day of the month (1-31)
|
||
|
unsigned char hour; // Hour (0-23)
|
||
|
unsigned char minute; // Minute (0-59)
|
||
|
unsigned char second; // Second (0-59)
|
||
|
signed char gmtOffset; // GMT offset in 15 minutes intervals
|
||
|
unsigned char flags; // Flags
|
||
|
unsigned char unitSize; // Unit size for interleaved file (0)
|
||
|
unsigned char gapSize; // Gap size for interleaved file (0)
|
||
|
unsigned short volSeqNumber[2]; // Volume sequence number
|
||
|
unsigned char nameLength; // Length of name
|
||
|
char name[32]; // Name + padding (nameLength [+1])
|
||
|
} PACKED iso_dir_entry;
|
||
|
|
||
|
typedef struct iso_path_entry {
|
||
|
unsigned char nameLength; // Length of directory name
|
||
|
unsigned char extAttrSecCount; // Number of sectors in extended attr record
|
||
|
unsigned long dataStartSector; // Sector # of 1st data sector for directory
|
||
|
unsigned short parentDirRec; // Record # of parent directory
|
||
|
unsigned char name[32]; // Name of this entry (nameLength bytes)
|
||
|
} PACKED iso_path_entry;
|
||
|
|
||
|
typedef struct iso_volume_descriptor {
|
||
|
unsigned char type; // ISO_VD_PRIMARY / ISO_VD_SUPPLEMENTARY
|
||
|
char id[5]; // ISO_VD_ID
|
||
|
unsigned char undef1; // 1
|
||
|
unsigned char undef2; // 0
|
||
|
unsigned char systemID[32]; // System Identifier (*not* ASCIIZ)
|
||
|
unsigned char volumeID[32]; // Volume Identifier (*not* ASCIIZ)
|
||
|
unsigned char undef3[8]; // all 0
|
||
|
unsigned long numSectors[2]; // Total Number Of Sectors (little+big endian)
|
||
|
unsigned char undef4[32]; // all 0
|
||
|
unsigned short volSetSize[2]; // Volume Set Size (little+big endian)
|
||
|
unsigned short volSeqNumber[2]; // Volume Sequence Number (little+big endian)
|
||
|
unsigned short sectorSize[2]; // Sector Size (little+big endian)
|
||
|
unsigned long pathTblSize[2]; // Path Table Size (bytes) (little+big endian)
|
||
|
unsigned long lePathTbl1Sector; // First sector of LE Path Table
|
||
|
unsigned long lePathTbl2Sector; // First sector of 2nd LE Path Table
|
||
|
unsigned long bePathTbl1Sector; // First sector of BE Path Table
|
||
|
unsigned long bePathTbl2Sector; // First sector of 2nd BE Path Table
|
||
|
|
||
|
/* Root Directory Entry */
|
||
|
unsigned char rootDirEntry[34]; // To use, cast to iso_dir_entry
|
||
|
|
||
|
char volumeSetID[128]; // Volume Set Identifier (*not* ASCIIZ)
|
||
|
char publisherID[128]; // Publisher Identifier (*not* ASCIIZ)
|
||
|
char dataPreparerID[128];// Data Preparer Identifier (*not* ASCIIZ)
|
||
|
char applicationID[128]; // Application Identifier (*not* ASCIIZ)
|
||
|
|
||
|
char copyrightFile[37]; // Copyright File Identifier(*not* ASCIIZ)
|
||
|
char abstractFile[37]; // Abstract File Identifier (*not* ASCIIZ)
|
||
|
char bibliogrFile[37]; // Bibliographical File Id. (*not* ASCIIZ)
|
||
|
|
||
|
iso_vol_date dateCreation; // Date and Time of volume creation
|
||
|
iso_vol_date dateModification; // Date and Time of volume modification
|
||
|
iso_vol_date dateExpires; // Date and Time that volume expires
|
||
|
iso_vol_date dateEffective; // Date and Time that volume comes effective
|
||
|
|
||
|
unsigned char undef5; // 1
|
||
|
unsigned char undef6; // 0
|
||
|
unsigned char forAppUse[512]; // usually zeroes
|
||
|
unsigned char undef7[653]; // all 0
|
||
|
} PACKED iso_volume_descriptor;
|
||
|
|
||
|
#endif
|