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

📄 iso9660.h

📁 一个小型操作系统的源代码,其目的仅 仅是为了在x86电脑上在没有windows 操作系统的情况下能使用java虚拟机。 研究操作系统的好东西。
💻 H
字号:
//
// iso9660.h
//
// ISO-9660 CD-ROM file system definitions
//
// Copyright (C) 2002 Michael Ringgaard. 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.  
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.  
// 3. Neither the name of the project nor the names of its contributors
//    may be used to endorse or promote products derived from this software
//    without specific prior written permission. 
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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 ISO9660_H
#define ISO9660_H

#define ISODCL(from, to) (to - from + 1)


#define ISO_VD_BOOT         0
#define ISO_VD_PRIMARY      1
#define ISO_VD_SUPPLEMENTAL 2
#define ISO_VD_PARTITION    3
#define ISO_VD_END          255

#pragma pack(push)
#pragma pack(1)

struct iso_volume_descriptor 
{
  unsigned char type			[ISODCL(  1,   1)]; // 711
  unsigned char id			[ISODCL(  2,   6)];
  unsigned char version			[ISODCL(  7,   7)]; // 711
  unsigned char flags			[ISODCL(  8,   8)];
  unsigned char system_id		[ISODCL(  9,  40)]; // achars
  unsigned char volume_id		[ISODCL( 41,  72)]; // dchars
  unsigned char unused1			[ISODCL( 73,  80)];
  unsigned char volume_space_size	[ISODCL( 81,  88)]; // 733
  unsigned char escape_sequences	[ISODCL( 89, 120)];
  unsigned char volume_set_size		[ISODCL(121, 124)]; // 723
  unsigned char volume_sequence_number	[ISODCL(125, 128)]; // 723
  unsigned char logical_block_size	[ISODCL(129, 132)]; // 723
  unsigned char path_table_size		[ISODCL(133, 140)]; // 733
  unsigned char type_l_path_table	[ISODCL(141, 144)]; // 731
  unsigned char opt_type_l_path_table	[ISODCL(145, 148)]; // 731
  unsigned char type_m_path_table	[ISODCL(149, 152)]; // 732
  unsigned char opt_type_m_path_table	[ISODCL(153, 156)]; // 732
  unsigned char root_directory_record	[ISODCL(157, 190)]; // 9.1
  unsigned char volume_set_id		[ISODCL(191, 318)]; // dchars
  unsigned char publisher_id		[ISODCL(319, 446)]; // achars
  unsigned char preparer_id		[ISODCL(447, 574)]; // achars
  unsigned char application_id		[ISODCL(575, 702)]; // achars
  unsigned char copyright_file_id	[ISODCL(703, 739)]; // 7.5 dchars
  unsigned char abstract_file_id	[ISODCL(740, 776)]; // 7.5 dchars
  unsigned char bibliographic_file_id	[ISODCL(777, 813)]; // 7.5 dchars
  unsigned char creation_date		[ISODCL(814, 830)]; // 8.4.26.1
  unsigned char modification_date	[ISODCL(831, 847)]; // 8.4.26.1
  unsigned char expiration_date		[ISODCL(848, 864)]; // 8.4.26.1
  unsigned char effective_date		[ISODCL(865, 881)]; // 8.4.26.1
  unsigned char file_structure_version	[ISODCL(882, 882)]; // 711
  unsigned char unused2			[ISODCL(883, 883)];
  unsigned char application_data	[ISODCL(884, 1395)];
  unsigned char unused3			[ISODCL(1396, 2048)];
};

struct iso_directory_record 
{
  unsigned char length			[ISODCL( 1,  1)]; // 711
  unsigned char ext_attr_length		[ISODCL( 2,  2)]; // 711
  unsigned char extent			[ISODCL( 3, 10)]; // 733
  unsigned char size			[ISODCL(11, 18)]; // 733
  unsigned char date			[ISODCL(19, 25)]; // 7 by 711
  unsigned char flags			[ISODCL(26, 26)];
  unsigned char file_unit_size		[ISODCL(27, 27)]; // 711
  unsigned char interleave		[ISODCL(28, 28)]; // 711
  unsigned char volume_sequence_number	[ISODCL(29, 32)]; // 723
  unsigned char name_len		[ISODCL(33, 33)]; // 711
  unsigned char name			[0];
};

struct iso_extended_attributes
{
  unsigned char owner		        [ISODCL(  1,   4)]; // 723
  unsigned char group			[ISODCL(  5,   8)]; // 723
  unsigned char perm		        [ISODCL(  9,  10)]; // 9.5.3
  unsigned char ctime			[ISODCL( 11,  27)]; // 8.4.26.1
  unsigned char mtime			[ISODCL( 28,  44)]; // 8.4.26.1
  unsigned char xtime			[ISODCL( 45,  61)]; // 8.4.26.1
  unsigned char ftime			[ISODCL( 62,  78)]; // 8.4.26.1
  unsigned char recfmt			[ISODCL( 79,  79)]; // 711
  unsigned char recattr			[ISODCL( 80,  80)]; // 711
  unsigned char reclen		        [ISODCL( 81,  84)]; // 723
  unsigned char system_id		[ISODCL( 85, 116)]; // achars
  unsigned char system_use		[ISODCL(117, 180)];
  unsigned char version			[ISODCL(181, 181)]; // 711
  unsigned char len_esc			[ISODCL(182, 182)]; // 711
  unsigned char reserved		[ISODCL(183, 246)];
  unsigned char len_au		        [ISODCL(247, 250)]; // 723
};

struct iso_pathtable_record
{
  unsigned char length;
  unsigned char ext_attr_length;
  unsigned long extent;
  unsigned short parent;
  char name[0];
};

#pragma pack(pop)

__inline int isonum_711(unsigned char *p)
{
  return p[0];
}

__inline int isonum_712(unsigned char *p)
{
  return (char) p[0];
}

__inline int isonum_721(unsigned char *p)
{
  return p[0] | ((char) p[1] << 8);
}

__inline int isonum_722(unsigned char *p)
{
  return ((char) p[0] << 8) | p[1];
}

__inline int isonum_723(unsigned char *p)
{
  return isonum_721(p);
}

__inline int isonum_731(unsigned char *p)
{
  return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);
}

__inline int isonum_732(unsigned char *p)
{
  return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
}

__inline int isonum_733(unsigned char *p)
{
  return isonum_731(p);
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -