📄 fat_layer.h
字号:
#ifndef _FAT_LAYER_H_#define _FAT_LAYER_H_#ifndef NUM_FS_HANDLES#define NUM_FS_HANDLES 1#endif #ifndef FAT_DEBUG#define FAT_DEBUG 0#endif typedef unsigned char BYTE; /* | host 8 */typedef unsigned short SHORT; /* | host 16 */typedef unsigned long LONG; /* | host 32 */typedef int BOOL;#define TRUE 1#define FALSE 0#define nm_packed __attribute__ ((packed,aligned(1)))typedef volatile struct BPB_FAT_STRUCT{ BYTE jmp_boot[3]; /* offset 0, size 3 */ BYTE oem_name[8]; /* offset 3, size 8 */ SHORT bytes_per_sec; /* offset 11, size 2 */ BYTE sec_per_clust; /* offset 13, size 1 */ SHORT rsvd_sec_cnt; /* offset 14, size 2 */ BYTE num_fats; /* offset 16, size 1 */ SHORT root_ent_cnt; /* offset 17, size 2 */ SHORT tot_sec_16; /* offset 19, size 2 */ BYTE media; /* offset 21, size 1 */ SHORT fat_size_16; /* offset 22, size 2 */ SHORT sec_per_trck; /* offset 24, size 2 */ SHORT num_heads; /* offset 26, size 2 */ LONG hidden_sec; /* offset 28, size 4 */ LONG tot_sec_32; /* offset 32, size 4 */}nm_packed BPB_FAT;typedef BPB_FAT * BPB_FAT_PTR;typedef volatile struct BPB_FAT_OFFSET_STRUCT{ BYTE drv_num; BYTE rsvd_1; BYTE boot_sig; LONG vol_id; BYTE vol_lab[11]; BYTE file_sys_type[8];} nm_packed BPB_FAT_OFFSET;typedef BPB_FAT_OFFSET * BPB_FAT_OFFSET_PTR;typedef BYTE * FAT_SEC_BUF;typedef volatile struct VOLUME_STRUCT{ LONG ide_op; LONG ide_op_data; BYTE fat_type; /* FAT data */ LONG fat_op; LONG fat_num; LONG fat_data; LONG fat_sector; /* FAT Info */ LONG fat_entry_size; LONG fat_bytes_per_sec; LONG fat_size; SHORT count_of_clusters; /* Directory INFO */ LONG root_sector; LONG fat_data_sector; LONG root_sectors; /* BPB DATA from disk */ int bpb_sector_offset; BPB_FAT_PTR bpb_fat_ptr; BPB_FAT_OFFSET_PTR bpb_fat_offset_ptr; /* scratch buffer... used for fat table */ FAT_SEC_BUF fat_buf_ptr; /* status info about the fat */ LONG fat_buf_status;} VOLUME;typedef VOLUME * VOLUME_PTR;typedef volatile struct FAT_FILE_STRUCT{ BYTE dir_name[11]; BYTE dir_attr[1]; BYTE dir_ntres[1]; BYTE dir_crt_time_tenth[1]; SHORT dir_crt_time; SHORT dir_crt_date; SHORT dir_lst_acc_date; SHORT dir_clust_hi; SHORT dir_wrt_time; SHORT dir_wrt_date; SHORT dir_clust_low; LONG dir_file_size;} nm_packed FAT_FILE;typedef FAT_FILE * FAT_FILE_PTR;typedef volatile struct FILE_HNDL_STRUCT{ LONG cluster_op; LONG cluster_op_data1; LONG cluster_op_data2; LONG file_op; LONG file_op_data1; char *file_op_data2; /* stuff which corresponds to the file */ FAT_FILE_PTR dir_entry; LONG file_status; LONG curr_cluster; LONG curr_sector_index; LONG curr_sector_offset; LONG byte_index; FAT_SEC_BUF fat_file_buf; VOLUME_PTR vol_ptr;} FILE_HNDL;typedef FILE_HNDL * FILE_HNDL_PTR;/* FAT TABLE OPERATIONS */enum{ FAT_NULL_OP=0, FAT_GET, FAT_SET, FAT_RESET };/* FAT BUF STATUS INFO */enum{ FAT_NULL_CONDITION=0, FAT_DIRTY=0x80, FAT_CLEAN=0x40};/* CLUSTER OPERATIONS */enum{ CLUSTER_NULL_OP=0, CLUSTER_READ, CLUSTER_WRITE, ROOT_READ, ROOT_WRITE};/* FILE TYPE OPERATIONS */enum{ FILE_NULL_OP=0, GET_ROOT_ENTRY_BY_NAME, SET_ROOT_ENTRY_BY_NAME, GET_ENTRY_BY_NAME, SET_ENTRY_BY_NAME, ABSOLUTE_SEEK, RELATIVE_SEEK, GET_FILE_DIRECTORY, GET_FILE_FILE};/* FILE COUNT */enum{ NULL_FILE_COUNT=0, GET_NUM_FILES, GET_FILE_BY_INDEX };/* FILE STATUS BITS */enum{ FILE_STATUS_NULL=0, ATTR_READ_ONLY = 0x01, ATTR_HIDDEN = 0x02, ATTR_SYSTEM = 0x04, ATTR_VOLUME_ID = 0x08, ATTR_DIRECTORY = 0x10, ATTR_ARCHIVE = 0x20 };/* FILE_HNDL OPERATIONS */enum{ FILE_NULL=0, FILE_CLOSE, FILE_OPEN, FILE_READ, FILE_WRITE,};/* IDE OPERATIONS */enum{ IDE_OP_OK =0, IDE_READ_SEC=1, IDE_WRITE_SEC, IDE_OP_ERROR};/* ERROR CODES */enum{ UNKNOWN_FAT_OP=1,};/* FAT TYPES */enum{ UNKNOWN=0, FAT12, FAT16, FAT32 };/* Function Prototypes */int FAT_GetNumFiles(FILE_HNDL_PTR file_handle);BOOL FAT_GetFileByIndex(FILE_HNDL_PTR file_handle, int index);void FAT_GetShortName(FILE_HNDL_PTR file_handle, char *buf);LONG read_file(FILE_HNDL_PTR file_handle, BYTE *buffer, LONG size);VOLUME_PTR doFatInit();FILE_HNDL_PTR get_file_handle(void); #endif /* _FAT_LAYER_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -