📄 ecma_167.h
字号:
/*
* ecma_167.h
*
* This file is based on ECMA-167 3rd edition (June 1997)
* http://www.ecma.ch
*
* Copyright (c) 2001-2002 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.
*/
#ifndef _ECMA_167_H
#define _ECMA_167_H 1
#include "types.h"
#pragma pack(1)
/* Character set specification (ECMA 167r3 1/7.2.1) */
typedef struct
{
Uchar charSetType;
Uchar charSetInfo[63];
} 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) */
#define dstring Uchar
/* Recorded Address (ECMA 167r3 4/7.1) */
typedef struct
{
Uint32 logicalBlockNum;
Uint16 partitionReferenceNum;
}lb_addr;
/* Short Allocation Descriptor (ECMA 167r3 4/14.14.1) */
typedef struct
{
Uint32 extLength;
Uint32 extPosition;
} short_ad;
/* Long Allocation Descriptor (ECMA 167r3 4/14.14.2) */
typedef struct
{
Uint32 extLength;
lb_addr extLocation;
Uchar impUse[6];
} long_ad;
/* Extended Allocation Descriptor (ECMA 167r3 4/14.14.3) */
typedef struct
{
Uint32 extLength;
Uint32 recordedLength;
Uint32 informationLength;
lb_addr extLocation;
} ext_ad;
/* Timestamp (ECMA 167r3 1/7.3) */
typedef struct
{
Uint16 typeAndTimezone;
Uint16 year;
Uchar month;
Uchar day;
Uchar hour;
Uchar minute;
Uchar second;
Uchar centiseconds;
Uchar hundredsOfMicroseconds;
Uchar microseconds;
}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
{
Uchar flags;
Uchar ident[23];
Uchar identSuffix[8];
} 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 5
typedef struct
{
Uchar structType;
Uchar stdIdent[VSD_STD_ID_LEN];
Uchar structVersion;
Uchar structData[2041];
}volStructDesc;
/* 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) */
typedef struct
{
Uchar structType;
Uchar stdIdent[VSD_STD_ID_LEN];
Uchar structVersion;
Uchar structData[2041];
}beginningExtendedAreaDesc;
/* Terminating Extended Area Descriptor (ECMA 167r3 2/9.3) */
typedef struct
{
Uchar structType;
Uchar stdIdent[VSD_STD_ID_LEN];
Uchar structVersion;
Uchar structData[2041];
}terminatingExtendedAreaDesc;
/* Boot Descriptor (ECMA 167r3 2/9.4) */
typedef struct
{
Uchar structType;
Uchar stdIdent[VSD_STD_ID_LEN];
Uchar structVersion;
Uchar reserved1;
regid archType;
regid bootIdent;
Uint32 bootExtLocation;
Uint32 bootExtLength;
Uint64 loadAddress;
Uint64 startAddress;
timestamp descCreationDateAndTime;
Uint16 flags;
Uchar reserved2[32];
Uchar bootUse[1906];
} bootDesc;
/* Flags (ECMA 167r3 2/9.4.12) */
#define BOOT_FLAGS_ERASE 0x01
/* Extent Descriptor (ECMA 167r3 3/7.1) */
typedef struct
{
Uint32 extLength;
Uint32 extLocation;
}extent_ad;
/* Descriptor Tag (ECMA 167r3 3/7.2) */
typedef struct
{
Uint16 tagIdent;
Uint16 descVersion;
Uchar tagChecksum;
Uchar reserved;
Uint16 tagSerialNum;
Uint16 descCRC;
Uint16 descCRCLength;
Uint32 tagLocation;
}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
typedef struct {
Uchar T;
Uchar D;
Uchar I;
Uint16 len;
Uchar res;
Uchar lowestTrack;
Uchar highestTrack;
Uchar trackNumber;
Uchar recordingMethod;
Uchar packetSize[3];
Uchar res1[11];
}TDB;
/* NSR Descriptor (ECMA 167r3 3/9.1) */
typedef struct
{
Uchar structType;
Uchar stdIdent[VSD_STD_ID_LEN];
Uchar structVersion;
Uchar reserved;
Uchar structData[2040];
}NSRDesc ;
/* Primary Volume Descriptor (ECMA 167r3 3/10.1) */
typedef struct
{
tag descTag;
Uint32 volDescSeqNum;
Uint32 primaryVolDescNum;
dstring volIdent[32];
Uint16 volSeqNum;
Uint16 maxVolSeqNum;
Uint16 interchangeLvl;
Uint16 maxInterchangeLvl;
Uint32 charSetList;
Uint32 maxCharSetList;
dstring volSetIdent[128];
charspec descCharSet;
charspec explanatoryCharSet;
extent_ad volAbstract;
extent_ad volCopyright;
regid appIdent;
timestamp recordingDateAndTime;
regid impIdent;
Uchar impUse[64];
Uint32 predecessorVolDescSeqLocation;
Uint16 flags;
Uchar reserved[22];
} primaryVolDesc;
/* Flags (ECMA 167r3 3/10.1.21) */
#define PVD_FLAGS_VSID_COMMON 0x0001
/* Anchor Volume Descriptor Pointer (ECMA 167r3 3/10.2) */
typedef struct
{
tag descTag;
extent_ad mainVolDescSeqExt;
extent_ad reserveVolDescSeqExt;
Uchar reserved[480];
} anchorVolDescPtr;
/* Volume Descriptor Pointer (ECMA 167r3 3/10.3) */
typedef struct
{
tag descTag;
Uint32 volDescSeqNum;
extent_ad nextVolDescSeqExt;
Uchar reserved[484];
} volDescPtr;
/* LV information (UDF2.01,2.2.7.2*/
typedef struct
{
charspec LVICharSet;
Uchar LVId[128];
Uchar LVInfo1[36];
Uchar LVInfo2[36];
Uchar LVInfo3[36];
regid impIdent;
Uchar impUse[128];
} LVInfo;
/* Implementation Use Volume Descriptor (ECMA 167r3 3/10.4) */
typedef struct
{
tag descTag;
Uint32 volDescSeqNum;
regid impIdent;
LVInfo impUse;
} impUseVolDesc;
/* Partition Descriptor (ECMA 167r3 3/10.5) */
typedef struct
{
tag descTag;
Uint32 volDescSeqNum;
Uint16 partitionFlags;
Uint16 partitionNumber;
regid partitionContents;
Uchar partitionContentsUse[128];
Uint32 accessType;
Uint32 partitionStartingLocation;
Uint32 partitionLength;
regid impIdent;
Uchar impUse[128];
Uchar reserved[156];
}partitionDesc ;
/* 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
typedef struct {
Uchar type;
Uchar len;
Uint16 volSeqNumber;
Uint16 partitionNumber;
}partitionMapType1;
typedef struct {
Uchar type;
Uchar len;
Uchar res[2];
regid ident;
Uint16 volSeqNumber;
Uint16 partitionNumber;
Uchar reserved[24];
}partitionMapType2;
/* Logical Volume Descriptor (ECMA 167r3 3/10.6) */
typedef struct
{
tag descTag;
Uint32 volDescSeqNum;
charspec descCharSet;
dstring logicalVolIdent[128];
Uint32 logicalBlockSize;
regid domainIdent;
long_ad logicalVolContentsUse;
Uint32 mapTableLength;
Uint32 numPartitionMaps;
regid impIdent;
Uchar impUse[128];
extent_ad integritySeqExt;
partitionMapType1 partitionMap1;
partitionMapType2 partitionMap2;
} logicalVolDesc;
/* Generic Partition Map (ECMA 167r3 3/10.7.1) */
struct genericPartitionMap
{
Uchar partitionMapType;
Uchar partitionMapLength;
Uchar partitionMapping1stByte;
} ;
/* 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
{
Uchar partitionMapType;
Uchar partitionMapLength;
Uint16 volSeqNum;
Uint16 partitionNum;
} ;
/* Type 2 Partition Map (ECMA 167r3 3/10.7.3) */
struct genericPartitionMap2
{
Uchar partitionMapType;
Uchar partitionMapLength;
Uchar partitionIdent[62];
} ;
/* Unallocated Space Descriptor (ECMA 167r3 3/10.8) */
typedef struct
{
tag descTag;
Uint32 volDescSeqNum;
Uint32 numAllocDescs;
extent_ad allocDescs;//TODO,FIRST
} unallocSpaceDesc;
/* Terminating Descriptor (ECMA 167r3 3/10.9) */
typedef struct
{
tag descTag;
Uchar reserved[496];
}terminatingDesc;
/* Logical Volume Integrity Descriptor (ECMA 167r3 3/10.10) */
typedef struct
{
tag descTag;
timestamp recordingDateAndTime;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -