⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ecma_167.h

📁 一个UDF系统的SCSI的CDROM刻录软件.
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -