haiku/headers/private/kernel/isovol.h

107 lines
4.3 KiB
C
Executable File

#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