📄 ecma_167.h
字号:
/* * ecma_167.h * * This file is based on ECMA-167 3rd edition (June 1997) * http://www.ecma.ch * * Copyright (c) 2001-2003 Ben Fennema <bfennema@falcon.csc.calpoly.edu> * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. * 2. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#include <linux/types.h>#ifndef _ECMA_167_H#define _ECMA_167_H 1/* Character set specification (ECMA 167r3 1/7.2.1) */typedef struct{ uint8_t charSetType; uint8_t charSetInfo[63];} __attribute__ ((packed)) charspec;/* Character Set Type (ECMA 167r3 1/7.2.1.1) */#define CHARSPEC_TYPE_CS0 0x00 /* (1/7.2.2) */#define CHARSPEC_TYPE_CS1 0x01 /* (1/7.2.3) */#define CHARSPEC_TYPE_CS2 0x02 /* (1/7.2.4) */#define CHARSPEC_TYPE_CS3 0x03 /* (1/7.2.5) */#define CHARSPEC_TYPE_CS4 0x04 /* (1/7.2.6) */#define CHARSPEC_TYPE_CS5 0x05 /* (1/7.2.7) */#define CHARSPEC_TYPE_CS6 0x06 /* (1/7.2.8) */#define CHARSPEC_TYPE_CS7 0x07 /* (1/7.2.9) */#define CHARSPEC_TYPE_CS8 0x08 /* (1/7.2.10) */typedef uint8_t dstring;/* Timestamp (ECMA 167r3 1/7.3) */typedef struct{ uint16_t typeAndTimezone; int16_t year; uint8_t month; uint8_t day; uint8_t hour; uint8_t minute; uint8_t second; uint8_t centiseconds; uint8_t hundredsOfMicroseconds; uint8_t microseconds;} __attribute__ ((packed)) timestamp;/* Type and Time Zone (ECMA 167r3 1/7.3.1) */#define TIMESTAMP_TYPE_MASK 0xF000#define TIMESTAMP_TYPE_CUT 0x0000#define TIMESTAMP_TYPE_LOCAL 0x1000#define TIMESTAMP_TYPE_AGREEMENT 0x2000#define TIMESTAMP_TIMEZONE_MASK 0x0FFF/* Entity identifier (ECMA 167r3 1/7.4) */typedef struct{ uint8_t flags; uint8_t ident[23]; uint8_t identSuffix[8];} __attribute__ ((packed)) regid;/* Flags (ECMA 167r3 1/7.4.1) */#define ENTITYID_FLAGS_DIRTY 0x00#define ENTITYID_FLAGS_PROTECTED 0x01/* Volume Structure Descriptor (ECMA 167r3 2/9.1) */#define VSD_STD_ID_LEN 5struct volStructDesc{ uint8_t structType; uint8_t stdIdent[VSD_STD_ID_LEN]; uint8_t structVersion; uint8_t structData[2041];} __attribute__ ((packed));/* Standard Identifier (EMCA 167r2 2/9.1.2) */#define VSD_STD_ID_NSR02 "NSR02" /* (3/9.1) *//* Standard Identifier (ECMA 167r3 2/9.1.2) */#define VSD_STD_ID_BEA01 "BEA01" /* (2/9.2) */#define VSD_STD_ID_BOOT2 "BOOT2" /* (2/9.4) */#define VSD_STD_ID_CD001 "CD001" /* (ECMA-119) */#define VSD_STD_ID_CDW02 "CDW02" /* (ECMA-168) */#define VSD_STD_ID_NSR03 "NSR03" /* (3/9.1) */#define VSD_STD_ID_TEA01 "TEA01" /* (2/9.3) *//* Beginning Extended Area Descriptor (ECMA 167r3 2/9.2) */struct beginningExtendedAreaDesc{ uint8_t structType; uint8_t stdIdent[VSD_STD_ID_LEN]; uint8_t structVersion; uint8_t structData[2041];} __attribute__ ((packed));/* Terminating Extended Area Descriptor (ECMA 167r3 2/9.3) */struct terminatingExtendedAreaDesc{ uint8_t structType; uint8_t stdIdent[VSD_STD_ID_LEN]; uint8_t structVersion; uint8_t structData[2041];} __attribute__ ((packed));/* Boot Descriptor (ECMA 167r3 2/9.4) */struct bootDesc{ uint8_t structType; uint8_t stdIdent[VSD_STD_ID_LEN]; uint8_t structVersion; uint8_t reserved1; regid archType; regid bootIdent; uint32_t bootExtLocation; uint32_t bootExtLength; uint64_t loadAddress; uint64_t startAddress; timestamp descCreationDateAndTime; uint16_t flags; uint8_t reserved2[32]; uint8_t bootUse[1906];} __attribute__ ((packed));/* Flags (ECMA 167r3 2/9.4.12) */#define BOOT_FLAGS_ERASE 0x01/* Extent Descriptor (ECMA 167r3 3/7.1) */typedef struct{ uint32_t extLength; uint32_t extLocation;} __attribute__ ((packed)) extent_ad;/* Descriptor Tag (ECMA 167r3 3/7.2) */typedef struct{ uint16_t tagIdent; uint16_t descVersion; uint8_t tagChecksum; uint8_t reserved; uint16_t tagSerialNum; uint16_t descCRC; uint16_t descCRCLength; uint32_t tagLocation;} __attribute__ ((packed)) tag;/* Tag Identifier (ECMA 167r3 3/7.2.1) */#define TAG_IDENT_PVD 0x0001#define TAG_IDENT_AVDP 0x0002#define TAG_IDENT_VDP 0x0003#define TAG_IDENT_IUVD 0x0004#define TAG_IDENT_PD 0x0005#define TAG_IDENT_LVD 0x0006#define TAG_IDENT_USD 0x0007#define TAG_IDENT_TD 0x0008#define TAG_IDENT_LVID 0x0009/* NSR Descriptor (ECMA 167r3 3/9.1) */struct NSRDesc{ uint8_t structType; uint8_t stdIdent[VSD_STD_ID_LEN]; uint8_t structVersion; uint8_t reserved; uint8_t structData[2040];} __attribute__ ((packed)); /* Primary Volume Descriptor (ECMA 167r3 3/10.1) */struct primaryVolDesc{ tag descTag; uint32_t volDescSeqNum; uint32_t primaryVolDescNum; dstring volIdent[32]; uint16_t volSeqNum; uint16_t maxVolSeqNum; uint16_t interchangeLvl; uint16_t maxInterchangeLvl; uint32_t charSetList; uint32_t maxCharSetList; dstring volSetIdent[128]; charspec descCharSet; charspec explanatoryCharSet; extent_ad volAbstract; extent_ad volCopyright; regid appIdent; timestamp recordingDateAndTime; regid impIdent; uint8_t impUse[64]; uint32_t predecessorVolDescSeqLocation; uint16_t flags; uint8_t reserved[22];} __attribute__ ((packed));/* Flags (ECMA 167r3 3/10.1.21) */#define PVD_FLAGS_VSID_COMMON 0x0001/* Anchor Volume Descriptor Pointer (ECMA 167r3 3/10.2) */struct anchorVolDescPtr{ tag descTag; extent_ad mainVolDescSeqExt; extent_ad reserveVolDescSeqExt; uint8_t reserved[480];} __attribute__ ((packed));/* Volume Descriptor Pointer (ECMA 167r3 3/10.3) */struct volDescPtr{ tag descTag; uint32_t volDescSeqNum; extent_ad nextVolDescSeqExt; uint8_t reserved[484];} __attribute__ ((packed));/* Implementation Use Volume Descriptor (ECMA 167r3 3/10.4) */struct impUseVolDesc{ tag descTag; uint32_t volDescSeqNum; regid impIdent; uint8_t impUse[460];} __attribute__ ((packed));/* Partition Descriptor (ECMA 167r3 3/10.5) */struct partitionDesc{ tag descTag; uint32_t volDescSeqNum; uint16_t partitionFlags; uint16_t partitionNumber; regid partitionContents; uint8_t partitionContentsUse[128]; uint32_t accessType; uint32_t partitionStartingLocation; uint32_t partitionLength; regid impIdent; uint8_t impUse[128]; uint8_t reserved[156];} __attribute__ ((packed));/* Partition Flags (ECMA 167r3 3/10.5.3) */#define PD_PARTITION_FLAGS_ALLOC 0x0001/* Partition Contents (ECMA 167r2 3/10.5.3) */#define PD_PARTITION_CONTENTS_NSR02 "+NSR02"/* Partition Contents (ECMA 167r3 3/10.5.5) */#define PD_PARTITION_CONTENTS_FDC01 "+FDC01"#define PD_PARTITION_CONTENTS_CD001 "+CD001"#define PD_PARTITION_CONTENTS_CDW02 "+CDW02"#define PD_PARTITION_CONTENTS_NSR03 "+NSR03"/* Access Type (ECMA 167r3 3/10.5.7) */#define PD_ACCESS_TYPE_NONE 0x00000000#define PD_ACCESS_TYPE_READ_ONLY 0x00000001#define PD_ACCESS_TYPE_WRITE_ONCE 0x00000002#define PD_ACCESS_TYPE_REWRITABLE 0x00000003#define PD_ACCESS_TYPE_OVERWRITABLE 0x00000004/* Logical Volume Descriptor (ECMA 167r3 3/10.6) */struct logicalVolDesc{ tag descTag; uint32_t volDescSeqNum; charspec descCharSet; dstring logicalVolIdent[128]; uint32_t logicalBlockSize; regid domainIdent; uint8_t logicalVolContentsUse[16]; uint32_t mapTableLength; uint32_t numPartitionMaps; regid impIdent; uint8_t impUse[128]; extent_ad integritySeqExt; uint8_t partitionMaps[0];} __attribute__ ((packed));/* Generic Partition Map (ECMA 167r3 3/10.7.1) */struct genericPartitionMap{ uint8_t partitionMapType; uint8_t partitionMapLength; uint8_t partitionMapping[0];} __attribute__ ((packed));/* Partition Map Type (ECMA 167r3 3/10.7.1.1) */#define GP_PARTITION_MAP_TYPE_UNDEF 0x00#define GP_PARTIITON_MAP_TYPE_1 0x01#define GP_PARTITION_MAP_TYPE_2 0x02/* Type 1 Partition Map (ECMA 167r3 3/10.7.2) */struct genericPartitionMap1{ uint8_t partitionMapType; uint8_t partitionMapLength; uint16_t volSeqNum; uint16_t partitionNum;} __attribute__ ((packed));/* Type 2 Partition Map (ECMA 167r3 3/10.7.3) */struct genericPartitionMap2{ uint8_t partitionMapType; uint8_t partitionMapLength; uint8_t partitionIdent[62];} __attribute__ ((packed));/* Unallocated Space Descriptor (ECMA 167r3 3/10.8) */struct unallocSpaceDesc{ tag descTag; uint32_t volDescSeqNum; uint32_t numAllocDescs; extent_ad allocDescs[0];} __attribute__ ((packed));/* Terminating Descriptor (ECMA 167r3 3/10.9) */struct terminatingDesc{ tag descTag; uint8_t reserved[496];} __attribute__ ((packed));/* Logical Volume Integrity Descriptor (ECMA 167r3 3/10.10) */struct logicalVolIntegrityDesc{ tag descTag; timestamp recordingDateAndTime; uint32_t integrityType; extent_ad nextIntegrityExt; uint8_t logicalVolContentsUse[32]; uint32_t numOfPartitions; uint32_t lengthOfImpUse; uint32_t freeSpaceTable[0]; uint32_t sizeTable[0]; uint8_t impUse[0];} __attribute__ ((packed));/* Integrity Type (ECMA 167r3 3/10.10.3) */#define LVID_INTEGRITY_TYPE_OPEN 0x00000000#define LVID_INTEGRITY_TYPE_CLOSE 0x00000001/* Recorded Address (ECMA 167r3 4/7.1) */typedef struct { uint32_t logicalBlockNum; uint16_t partitionReferenceNum;} __attribute__ ((packed)) lb_addr;/* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */typedef struct{ uint32_t extLength; uint32_t extPosition;} __attribute__ ((packed)) short_ad;/* Long Allocation Descriptor (ECMA 167r3 4/14.14.2) */typedef struct{ uint32_t extLength; lb_addr extLocation; uint8_t impUse[6];} __attribute__ ((packed)) long_ad;/* Extended Allocation Descriptor (ECMA 167r3 4/14.14.3) */typedef struct{ uint32_t extLength; uint32_t recordedLength; uint32_t informationLength; lb_addr extLocation;} __attribute__ ((packed)) ext_ad;/* Descriptor Tag (ECMA 167r3 4/7.2 - See 3/7.2) *//* Tag Identifier (ECMA 167r3 4/7.2.1) */#define TAG_IDENT_FSD 0x0100#define TAG_IDENT_FID 0x0101#define TAG_IDENT_AED 0x0102#define TAG_IDENT_IE 0x0103#define TAG_IDENT_TE 0x0104#define TAG_IDENT_FE 0x0105#define TAG_IDENT_EAHD 0x0106
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -