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

📄 hfsp.h

📁 open source bios with linux platform, very good and can be reused.
💻 H
字号:
/* * libhfsp - library for reading and writing Macintosh HFS+ volumes *  * This file includes definitions for the structures found on * HFS+ Volumes. The structures are further wrapped by struct * found in libhfsp.h. fucntions on those enhanced structures * are found in files mentioned in comments below. * * Copyright (C) 2000 Klaus Halfmann <khalfmann@libra.de> * Original code 1996-1998 by Robert Leslie <rob@mars.rog> * other work 2000 from Brad Boyer (flar@pants.nu)  * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: hfsp.h,v 1.17 2000/10/20 06:16:52 hasi Exp $ */#define HFSP_BLOCKSZ            512	/* A sector for Apple is always 512 bytes */#define HFSP_BLOCKSZ_BITS       9	/* 1<<9 == 512  */#define	HFSP_VOLHEAD_SIG	0x482B	/* 'H+'	*//* HFS+ includes POSIX permissions , although marked as reserved they will be * used as such. Is ignored by MacOS 8-9 but probably not by MacOS X. */typedef struct {        UInt32         owner;        UInt32         group;        UInt32         mode;        UInt32         dev;} hfsp_perm;/* A single contiguous area (fragment) of a file */typedef struct {        UInt32         start_block;        UInt32         block_count;} hfsp_extent;/* A file may contain up to 8 normale extents, all other   are found in some extra extent area */typedef hfsp_extent hfsp_extent_rec[8];/* Information for a "Fork" in a file * Forks are the "usual" DATA and RSRC forks or special files * (e.g. the Volume Bitmap) */typedef struct {        UInt64		total_size;  // logical size        UInt32		clump_size;  // number of bytes to preallocate        UInt32		total_blocks;        hfsp_extent_rec extents;     // initial (8) extents} hfsp_fork_raw;/* HFS+ Volume Header * Always found at block 2 of the disk, a copy is stored * at the second to last block of the disk. */typedef struct hfsp_vh {        UInt16         signature;   // must be HFSPLUS_VOLHEAD_SIG 'H+'        UInt16         version;     // currently 4, ignored         UInt32         attributes;  // See bit constants below        UInt32         last_mount_vers;                // Use a registered creator code here (what do we use ?)		// Mac OS uses '8.10' well        UInt32         reserved;         UInt32         create_date; // local time !        UInt32         modify_date; // GMT (?)        UInt32         backup_date; // GMT (?)        UInt32         checked_date; // GMT (?) fsck ?         UInt32         file_count;         // not including special files but including DATA and RSRC forks        UInt32         folder_count; // excluding the root folder         UInt32         blocksize;         // must be multiple of HFSPLUS_SECTOR_SIZE,         // should be a multiple of 4k for harddisk        UInt32         total_blocks;        UInt32         free_blocks;         // The total number of unused allocation blocks on the disk.         UInt32         next_alloc;         // hint wher to search for next allocation blocks        UInt32         rsrc_clump_sz;         // default clump size for rsrc forks        UInt32         data_clump_sz;         // default clump size for data forks        UInt32	       next_cnid;         // next unused catalog id        UInt32         write_count;         // increment on every mount (and write ?)        UInt64        encodings_bmp;                // for every encoding used on the disk a bit is set                // ignored but eventually must be cared for        Char          finder_info[32];                                      	hfsp_fork_raw   alloc_file;         // stores bitmap of use/free blocks        hfsp_fork_raw   ext_file;         // stores oferflow extents        hfsp_fork_raw   cat_file;	 // This contains the root directory        hfsp_fork_raw   attr_file;        hfsp_fork_raw   start_file;         // a special startup file may be described here (used by ?)} hfsp_vh;/* HFS+ volume attributes *//* 0-6 reserved, may be used in memory only */#define HFSPLUS_VOL_RESERVED1 0x000000FF#define HFSPLUS_VOL_HARDLOCK  0x00000080 // Used in Memory by finder only#define HFSPLUS_VOL_UNMNT     0x00000100        // clear this bit when mounting, set as last step of unmounting        // This is checked by (slower) ROM code#define HFSPLUS_VOL_SPARE_BLK 0x00000200#define HFSPLUS_VOL_NOCACHE   0x00000400        // in case of RAM or ROM disk (try a HFS+ Ramdisk :)#define HFSPLUS_VOL_INCNSTNT  0x00000800        // Reverse meaning as of HFSPLUS_VOL_UNMNT        // This is checked by (faster) Mac OS code/* 12-14 reserved */#define HFSPLUS_VOL_RESERVED2 0x00007000#define HFSPLUS_VOL_SOFTLOCK  0x00008000#define HFSPLUS_VOL_RESERVED3 0xFFFF0000/* HFS+ Btree node descriptor */typedef struct {	UInt32	    next;   /* pointer to next node of this kind, or 0 */	UInt32	    prev;   /* pointer to previous node of this kind, or 0 */	UInt8	    kind;   /* see below */	UInt8	    height; /* root node starts with 0 */	UInt16	    num_rec;	/* number of records in this node */	UInt16	    reserved;	/* fill up to 4 byte alignment */} btree_node_desc;/* HFS+ Btree Node types */#define HFSP_NODE_NDX	0x00#define HFSP_NODE_HEAD	0x01#define HFSP_NODE_MAP	0x02#define HFSP_NODE_LEAF	0xFF#define HFSP_CATALOG_MIN_NODE_SIZE  0x1000#define HFSP_ATTRMIN_DOE_SIZE	    0x1000/* The record offsets are found at the end of the fork * containing the Btree */typedef UInt16	btree_record_offset;typedef struct {        UInt16         depth;	    // equal to height of btree_node_desc        UInt32         root;	    // root node of the hierarchy         UInt32         leaf_count;        UInt32         leaf_head;        UInt32         leaf_tail;        UInt16         node_size;	    // node size of _all_ nodes in this fork        UInt16         max_key_len;        UInt32         node_count;	    // count of all (free and used) nodes in tree        UInt32         free_nodes;        UInt16         reserved1;        UInt32         clump_size;         // ignored my MacOS used by ?        UInt8	       btree_type;         // always 0 for HFS+        UInt8	       reserved2;        UInt32         attributes;	 // see below         UInt32         reserved3[16];} btree_head;                                                                   /* BTree attributes */#define HFSPLUS_BAD_CLOSE            0x01  // Btree was not properly closed and should be checked  // not used for HFS+ but reserved#define HFSPLUS_TREE_BIGKEYS         0x02  // always set for HFS+#define HFSPLUS_TREE_VAR_NDXKEY_SIZE 0x04  // use variable length index nodes, always set for catalog btree,  // always cleared for extents btree. #define HFSPLUS_TREE_UNUSED          0xFFFFFFF8/* Some special File ID numbers */#define HFSP_POR_CNID             1  /* Parent Of the Root */#define HFSP_ROOT_CNID            2  /* ROOT directory */#define HFSP_EXT_CNID             3  /* EXTents B-tree */#define HFSP_CAT_CNID             4  /* CATalog B-tree */#define HFSP_BAD_CNID             5  /* BAD blocks file */#define HFSP_ALLOC_CNID           6  /* ALLOCation file */#define HFSP_START_CNID           7  /* STARTup file */#define HFSP_ATTR_CNID            8  /* ATTRibutes file  */#define HFSP_EXCH_CNID           15  /* ExchangeFiles temp id */#define HFPS_MIN_CNID		 15  /* Minimum expected value *//* Unicode String */typedef struct {    UInt16		strlen;    UInt16		name[255];	// unicode charcters} hfsp_unistr255;/* HFS+ catalog entry key */typedef struct {    UInt16		key_length;	/* excluding length */    UInt32		parent_cnid;    hfsp_unistr255	name;} hfsp_cat_key;/* HFS+ exnteds entry key */typedef struct {    UInt16		key_length;	/* excluding length */    UInt8		fork_type;	/* Seee below */    UInt8		filler;    UInt32		file_id;    UInt32		start_block;	} hfsp_extent_key;#define HFSP_EXTENT_DATA    0x00#define HFSP_EXTENT_RSRC    0xFF/* The key is followed by a record, an index or some other data *//* The types of these records are defined as follows */#define HFSP_FOLDER         0x0001  // entry fo a Folder#define HFSP_FILE           0x0002  // entry for a File#define HFSP_FOLDER_THREAD  0x0003      // Like '.' in unix, identifies the folder by its id, only#define HFSP_FILE_THREAD    0x0004      // Im unsure if this is used by HFS+, too /* HFS+ folder data (part of an hfsp_cat_entry) */typedef struct {    UInt16          flags;		/* no flags defined yet */    UInt32	    valence;		/* Numer of files and folders contained in folder */    UInt32	    id;    UInt32	    create_date;	// GMT    UInt32	    content_mod_date;	// GMT    UInt32	    attribute_mod_date;	// GMT    UInt32	    access_date;	// GMT    UInt32	    backup_date;	// GMT    hfsp_perm	    permissions;    DInfo	    user_info;    DXInfo	    finder_info;    UInt32	    text_encoding;	 // hint fo the finder what encoding to use, unused here    UInt32         reserved;} hfsp_cat_folder;/* HFS+ file data (part of a cat_entry) */typedef struct {    UInt16          flags;		/* See below */    UInt32	    reserved1;    UInt32	    id;    UInt32	    create_date;    UInt32	    content_mod_date;    UInt32	    attribute_mod_date;    UInt32	    access_date;    UInt32	    backup_date;    hfsp_perm	    permissions;    FInfo           user_info;    FXInfo	    finder_info;    UInt32	    text_encoding;    UInt32	    reserved2;    hfsp_fork_raw   data_fork;    hfsp_fork_raw   res_fork;} hfsp_cat_file;/* File attribute bits */#define HFSP_FILE_LOCKED      0x0001#define HFSP_THREAD_EXISTS    0x0002 /* Always set in HFS+ *//* HFS+ catalog thread (part of a cat_entry) */typedef struct {    UInt16          reserved;    UInt32	    parentID;    hfsp_unistr255   nodeName;} hfsp_cat_thread;/* A data record in the catalog tree */typedef struct {    UInt16	    type;    union {	hfsp_cat_folder folder;	hfsp_cat_file   file;	hfsp_cat_thread thread;    } u;} hfsp_cat_entry;

⌨️ 快捷键说明

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