📄 fat.h
字号:
/*
**************************************************************
*
* hyperstone MS-DOS FAT File System Drivers
*
* FAT related definitions
*
* Christoph Baumhof 2000-03-21
* Reinhard K乭ne 2000-03-21
* Mihajlo Varga 2000-03-21
*
* Copyright (C) 1997-2000 hyperstone electronics GmbH Konstanz
*
* 2000-03-21 initial release
*
* $Id$
*
* $Log$
*
**************************************************************
*
* Changes:
*
**************************************************************
*/
#ifndef __FAT_H
#define __FAT_H
#define PACKED __attribute__ ((packed))
#define UNUSED(x) x __attribute__ ((unused));x
#define NORETURN __attribute__ ((noreturn))
/* FAT file system attribute bits */
#if 1
#define D_NORMAL 0 /* normal */
#define D_RDONLY 0x01 /* read-only file */
#define D_HIDDEN 0x02 /* hidden */
#define D_SYSTEM 0x04 /* system */
#define D_VOLID 0x08 /* volume id */
#define D_DIR 0x10 /* subdir */
#define D_ARCHIVE 0x20 /* archive bit */
#define D_LONG_FILENAME 0x0f /* long filename */
#endif
/* FAT file name constants */
#define FNAME_SIZE 8
#define FEXT_SIZE 3
/* FAT cluster to physical conversion macros */
#define clus_add(cl_no) ((LONG) (((LONG) cl_no - 2L) \
* (LONG) cluster_size \
+ (LONG) data_start))
#define clus2phys(cl_no,cl_size,d_st) ((LONG) (((LONG) cl_no - 2L) \
* (LONG) cl_size \
+ (LONG) d_st))
/* Test for 16 bit or 12 bit FAT */
#define SIZEOF_CLST16 2
#define FAT_MAGIC 4086
#define ISFAT16(dpbp) (((dpbp)->dpb_size)>FAT_MAGIC)
#define ISFAT12(dpbp) (((dpbp)->dpb_size)<=FAT_MAGIC)
#define _WORD(x) ((unsigned char)(x)[0] + (((unsigned char)(x)[1]) << 8))
#define _DWORD(x) (_WORD(x) + (_WORD((x)+2) << 16))
#define DELMARK ((char) 0xe5)
/*
* hi byte | low byte
* |7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|
* | | | | | | | | | | | | | | | | |
* \ 7 bits /\4 bits/\ 5 bits /
* year +80 month day
*/
#define DOS_YEAR(dir) (((dir)->date[1] >> 1) + 1980)
#define DOS_MONTH(dir) (((((dir)->date[1] & 0x1) << 3) + ((dir)->date[0] >> 5)))
#define DOS_DAY(dir) ((dir)->date[0] & 0x1f)
/*
* hi byte | low byte
* |7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|
* | | | | | | | | | | | | | | | | |
* \ 5 bits /\ 6 bits /\ 5 bits /
* hour minutes sec*2
*/
#define DOS_HOUR(dir) ((dir)->time[1] >> 3)
#define DOS_MINUTE(dir) (((((dir)->time[1]&0x7) << 3) + ((dir)->time[0] >> 5)))
#define DOS_SEC(dir) (((dir)->time[0] & 0x1f) * 2)
struct directory {
char name[FNAME_SIZE]; /* file name */
char ext[FEXT_SIZE]; /* file extension */
unsigned char attr; /* attribute byte */
unsigned char Case; /* case of short filename */
unsigned char ctime_ms; /* creation time, milliseconds (?) */
unsigned char ctime[2]; /* creation time */
unsigned char cdate[2]; /* creation date */
unsigned char adate[2]; /* last access date */
unsigned char startHi[2]; /* start cluster, Hi */
unsigned char time[2]; /* time stamp */
unsigned char date[2]; /* date stamp */
unsigned short start; /* starting cluster number */
unsigned long size; /* size of the file */
};
#define EXTCASE 0x10
#define BASECASE 0x8
#define MAX32 0xffffffff
#define MAX_SIZE 0x7fffffff
#define FILE_SIZE(dir) (_DWORD((dir)->size))
#define START(dir) (_WORD((dir)->start))
#define STARTHI(dir) (_WORD((dir)->startHi))
/* */
/* filesystem sizeof(dirent) - may be different from core */
/* */
#if 0
#define DIR_NAME 0
#define DIR_EXT FNAME_SIZE
#define DIR_ATTRIB FNAME_SIZE+FEXT_SIZE
#define DIR_RESERVED FNAME_SIZE+FEXT_SIZE+1
#define DIR_TIME FNAME_SIZE+FEXT_SIZE+11
#define DIR_DATE FNAME_SIZE+FEXT_SIZE+13
#define DIR_START FNAME_SIZE+FEXT_SIZE+15
#define DIR_SIZE FNAME_SIZE+FEXT_SIZE+17
#endif
#define DIRENT_SIZE 32
struct _struct_handle {
char *fname;
long handle;
long position;
long filesize;
long access;
long amode;
long drive;
long partnum;
long valid;
long clusterStart;
char *buffer;
long LastClusterOffset, LastClusterStart, LastPreviousCluster;
};
typedef struct _struct_handle STRUCT_H;
#define HANDLE_MAX 20
extern STRUCT_H _handle[HANDLE_MAX];
int _ROOTEntrySize(int drive, int partnum);
int _readROOTEntry(int drive, int partnum, struct directory * dir);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -