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

📄 fat.h

📁 mp3量不要让站长把时间都花费在为您修正说明上。压缩包解压时不能有密码。系统会自动删除debug和release目录
💻 H
📖 第 1 页 / 共 2 页
字号:
		BYTE	bpbRootDirEnts[2];	// number of root directory entries
		BYTE	bpbSectors[2];		// total number of sectors
		BYTE	bpbMedia;		// media descriptor
		BYTE	bpbFATsecs[2];		// number of sectors per FAT
		BYTE	bpbSecPerTrack[2];	// sectors per track
		BYTE	bpbHeads[2];		// number of heads
		BYTE	bpbHiddenSecs[4];	// # of hidden sectors
// 3.3 compat ends here
		BYTE	bpbHugeSectors[4];	// # of sectors if bpbSectors == 0
// 5.0 compat ends here
		BYTE     bpbBigFATsecs[4];// like bpbFATsecs for FAT32
		BYTE      bpbExtFlags[2];	// extended flags:
#define FATNUM    0xf			// mask for numbering active FAT
#define FATMIRROR 0x80			// FAT is mirrored (like it always was)
		BYTE      bpbFSVers[2];	// filesystem version
#define FSVERS    0				// currently only 0 is understood
		BYTE     bpbRootClust[4];	// start cluster for root directory
		BYTE      bpbFSInfo[2];	// filesystem info structure sector
		BYTE      bpbBackup[2];	// backup boot sector
		// There is a 12 byte filler here, but we ignore it  
};


// Structure of a dos directory entry.
struct direntry {
		BYTE		deName[8];      	// filename, blank filled
#define SLOT_EMPTY      0x00            // slot has never been used
#define SLOT_E5         0x05            // the real value is 0xE5
#define SLOT_DELETED    0xE5            // file in this slot deleted
#define SLOT_DIR		0x2E			// a directorymmm
		BYTE		deExtension[3]; 	// extension, blank filled
		BYTE		deAttributes;   	// file attributes
#define ATTR_NORMAL     0x00            // normal file
#define ATTR_READONLY   0x01            // file is readonly
#define ATTR_HIDDEN     0x02            // file is hidden
#define ATTR_SYSTEM     0x04            // file is a system file
#define ATTR_VOLUME     0x08            // entry is a volume label
#define ATTR_LONG_FILENAME	0x0F		// this is a long filename entry			    
#define ATTR_DIRECTORY  0x10            // entry is a directory name
#define ATTR_ARCHIVE    0x20            // file is new or modified
		BYTE        deLowerCase;    	// NT VFAT lower case flags  (set to zero)
#define LCASE_BASE      0x08            // filename base in lower case
#define LCASE_EXT       0x10            // filename extension in lower case
		BYTE        deCHundredth;   	// hundredth of seconds in CTime
		BYTE        deCTime[2];     	// create time
		BYTE        deCDate[2];     	// create date
		BYTE        deADate[2];     	// access date
		WORD        deHighClust; 		// high bytes of cluster number
		BYTE        deMTime[2];     	// last update time
		BYTE        deMDate[2];     	// last update date
		WORD        deStartCluster; 	// starting cluster of file
		DWORD       deFileSize;  		// size of file in bytes
};

// Structure of a dos directory entry.
struct direntryBytes {
		BYTE		deName[8];      	// filename, blank filled
#define SLOT_EMPTY      0x00            // slot has never been used
#define SLOT_E5         0x05            // the real value is 0xE5
#define SLOT_DELETED    0xE5            // file in this slot deleted
#define SLOT_DIR		0x2E			// a directorymmm
		BYTE		deExtension[3]; 	// extension, blank filled
		BYTE		deAttributes;   	// file attributes
#define ATTR_NORMAL     0x00            // normal file
#define ATTR_READONLY   0x01            // file is readonly
#define ATTR_HIDDEN     0x02            // file is hidden
#define ATTR_SYSTEM     0x04            // file is a system file
#define ATTR_VOLUME     0x08            // entry is a volume label
#define ATTR_LONG_FILENAME	0x0F		// this is a long filename entry			    
#define ATTR_DIRECTORY  0x10            // entry is a directory name
#define ATTR_ARCHIVE    0x20            // file is new or modified
		BYTE        deLowerCase;    	// NT VFAT lower case flags  (set to zero)
#define LCASE_BASE      0x08            // filename base in lower case
#define LCASE_EXT       0x10            // filename extension in lower case
		BYTE        deCHundredth;   	// hundredth of seconds in CTime
		BYTE        deCTime[2];     	// create time
		BYTE        deCDate[2];     	// create date
		BYTE        deADate[2];     	// access date
		BYTE        deHighClust[2]; 		// high bytes of cluster number
		BYTE        deMTime[2];     	// last update time
		BYTE        deMDate[2];     	// last update date
		BYTE        deStartCluster[2]; 	// starting cluster of file
		BYTE        deFileSize[4];  		// size of file in bytes
};

// number of directory entries in one sector
#define DIRENTRIES_PER_SECTOR	0x10	//when the bpbBytesPerSec=512 

// Structure of a Win95 long name directory entry
struct winentry {
		BYTE			weCnt;			// 
#define WIN_LAST        0x40
#define WIN_CNT         0x3f
		BYTE		wePart1[10];
		BYTE		weAttributes;
#define ATTR_WIN95      0x0f
		BYTE		weReserved1;
		BYTE		weChksum;
		BYTE		wePart2[12];
		WORD       	weReserved2;
		BYTE		wePart3[4];
};

struct winentryBytes {
		BYTE			weCnt;			// 
#define WIN_LAST        0x40
#define WIN_CNT         0x3f
		BYTE		wePart1[10];
		BYTE		weAttributes;
#define ATTR_WIN95      0x0f
		BYTE		weReserved1;
		BYTE		weChksum;
		BYTE		wePart2[12];
		BYTE       	weReserved2[2];
		BYTE		wePart3[4];
};

#define WIN_ENTRY_CHARS	13      // Number of chars per winentry

// Maximum filename length in Win95
// Note: Must be < sizeof(dirent.d_name)
#define WIN_MAXLEN      255

// This is the format of the contents of the deTime field in the direntry
// structure.
// We don't use bitfields because we don't know how compilers for
// arbitrary machines will lay them out.
#define DT_2SECONDS_MASK        0x1F    // seconds divided by 2
#define DT_2SECONDS_SHIFT       0
#define DT_MINUTES_MASK         0x7E0   // minutes
#define DT_MINUTES_SHIFT        5
#define DT_HOURS_MASK           0xF800  // hours
#define DT_HOURS_SHIFT          11

// This is the format of the contents of the deDate field in the direntry
// structure.
#define DD_DAY_MASK				0x1F	// day of month
#define DD_DAY_SHIFT			0
#define DD_MONTH_MASK			0x1E0	// month
#define DD_MONTH_SHIFT			5
#define DD_YEAR_MASK			0xFE00	// year - 1980
#define DD_YEAR_SHIFT			9



// Stuctures
struct FileInfoStruct
{
	DWORD StartCluster;			//< file starting cluster for last file accessed
	DWORD Size;					//< file size for last file accessed
	BYTE Attr;					//< file attr for last file accessed
	//unsigned short CreateTime;			//< file creation time for last file accessed
	//unsigned short CreateDate;			//< file creation date for last file accessed
	DWORD Sector;				//<file record place
	WORD Offset;				//<file record offset
};


//MP3后添加的函数

extern WORD fatGetWord(BYTE * addr);
extern DWORD fatGetDWord(BYTE * addr);

#if FIX_DIRECTORY
	extern BYTE Search(BYTE *dir,struct direntryBytes*MusicInfo,WORD *Count,BYTE *type);//查找音乐文件
	extern BYTE SearchLrc(BYTE *dir,BYTE * longnamebuffer,struct direntryBytes*LrcInfo);//serch lrc file
#else
	extern BYTE SearchInit(void);
	extern BYTE Search(WORD *music_record_addr,struct direntryBytes*MusicInfo,WORD *Count,BYTE *type);//查找音乐文件
	extern BYTE SearchLrc(BYTE *dir,BYTE * longnamebuffer,struct direntryBytes*LrcInfo,WORD music_record_addr);//serch lrc file
#endif

extern BYTE FAT_LoadPartCluster(DWORD cluster,BYTE part,BYTE * buffer);//加载文件



//FAT原有的函数
extern BYTE FAT_Init(void);//初始化
//unsigned char FAT_LoadCluster(unsigned long cluster,BYTE * buffer);//读一个扇区
extern DWORD FAT_NextCluster(DWORD cluster);//查找下一簇号
extern DWORD FAT_FindFreeCluster(void);//查找空簇
extern BYTE FAT_DisDir(BYTE *dir);//显示目录内容
extern WORD FAT_FindItem(DWORD cluster, BYTE *name, struct FileInfoStruct *FileInfo);//查找文件
extern DWORD FAT_Open(BYTE * dir);//打开文件
extern DWORD FAT_OpenDir(BYTE * dir);//打开目录
extern BYTE FAT_Read(DWORD pointer, DWORD size);//读文件,size=0代表整个文件
extern BYTE FAT_Rename(BYTE *dir,BYTE *newname);//重命名
extern BYTE FAT_ModifyFAT(DWORD cluster,DWORD val);//修改FAT项
extern BYTE FAT_Delete(BYTE *dir);//删除文件
extern BYTE FAT_DelItem(struct FileInfoStruct *FileInfo);//删除记录项
extern WORD FAT_FindFreeItem(DWORD cluster, struct FileInfoStruct *FileInfo);//查找空余项
extern BYTE FAT_MkDir(BYTE * dir);//建目录
extern BYTE FAT_Write(DWORD cluster,BYTE *data,DWORD size);//写文件
extern DWORD FAT_Create(BYTE * dir,DWORD size);//建文件,必须指定文件大小
extern BYTE FAT_RmDir(BYTE * dir);//删除目录
extern WORD FAT_Close(DWORD * p);//关闭文件
#endif

⌨️ 快捷键说明

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