www.pudn.com > UDISK.rar > FILE.H


//************************************************************************ 
//author:dragon 
//web:8dragon.com 
//2004.2.5完成于桃龙源 
//************************************************************************* 
#define BYTE	unsigned char 
#define WORD	unsigned short 
#define DWORD	unsigned long 
#define UINT	unsigned int 
//**************************************************************************** 
//the definition of fat16 structure 
//**************************************************************************** 
//Bios parameter blolc 
typedef struct _BPB_BLOCK { 
	BYTE BS_jmpBoo[3]; 
	BYTE BS_OEMName[8]; 
	WORD BPB_BytesPerSec; 
	BYTE BPB_SecPerClus; 
	BYTE BPB_RsvdSecCn[2]; 
	BYTE BPB_NumFATs; 
	WORD BPB_RootEntCnt; 
	WORD BPB_TotSec16; 
	BYTE BPB_Media; 
	WORD BPB_FATSz16; 
	WORD BPB_SecPerTrk; 
	WORD BPB_NumHeads; 
	DWORD BPB_HiddSec; 
	DWORD BPB_TotSec32; 
	BYTE BS_DrvNum; 
	BYTE BS_Reserved1; 
	BYTE BS_BootSig; 
	BYTE BS_VolID[4]; 
	BYTE BS_VolLab[11]; 
	BYTE BS_FilSysType[8]; 
	BYTE ExecutableCode[448]; 
	BYTE Marker[2]; 
} BPB_BLOCK,*PBPB_BLOCK; 
//Simple BPB control block 
struct _BPB { 
	BYTE NumFATs; 
	BYTE SecPerClus; 
	WORD BytsPerSec; 
	WORD RsvdSecCnt; 
	WORD RootEntCnt; 
	UINT TotSec; 
	UINT FATSz; 
}; 
//FAT control parameter 
typedef	struct _FAT_PARAMETER { 
	DWORD RootDirSectors;	 
	DWORD FirstDataSector; 
	DWORD FirstFatSecNum; 
	DWORD FirstRootDirSecNum; 
}FAT_PARAMETER,*pFAT_PARAMETER; 
// root dir information 
struct _DIR 
{ 
	BYTE Name[11]; 
	BYTE Attr; 
	BYTE NTRes; 
	BYTE CrtTimeTenth; 
	WORD CrtTime; 
	WORD CrtDate; 
	WORD LstAccDate; 
	WORD FstClusHI; 
	WORD WrtTime; 
	WORD WrtDate; 
	WORD FstClusLO; 
	DWORD FileSize; 
}; 
// file attribute  
#define ATTR_READ_ONLY	0x01 
#define ATTR_HIDDEN		0x02 
#define ATTR_SYSTEM		0x04 
#define ATTR_VOLUME_ID	0x08 
#define ATTR_DIRECTORY	0x10 
#define ATTR_ARCHIVE	0x20 
//file information  
struct _FILE 
{	unsigned valid; // 1 valid, 0 free. 
	BYTE isDir:1; 
	BYTE DirName[11]; 
	DWORD DotDirSecNum; 
	DWORD Dot; 
	DWORD DirSectorNum; 
	WORD DirIndex; 
	DWORD StartSectorNum; 
	DWORD CurrentSectorNum; 
	DWORD SectorOffset; 
	struct _DIR dir; 
	DWORD offset; 
}; 
//**************************************************************************** 
//Functions; 
//**************************************************************************** 
//Converse Byte order 
#define ConvTwoBytes(Addr) (*(BYTE*)Addr+0x100*(*(BYTE*)(Addr+1))) 
#define ConvFourBytes(Addr) (*(BYTE*)Addr+0x100*(*(BYTE*)(Addr+1))+0x10000*(*(BYTE*)(Addr+2))+0x1000000*(*(BYTE*)(Addr+3))) 
BYTE InitFsys(); 
DWORD SeekSector(DWORD Sector, const char dirname[11],struct _FILE *file); 
WORD LinkClusterList(WORD Cluster); 
WORD SeekEmptyCluster(); 
WORD GetListCluster(WORD Cluster); 
DWORD ClusterToSec(WORD Cluster); 
WORD SecToCluster(DWORD Sector); 
BYTE CheckFileName(char * filename, const BYTE dirname[11]); 
BYTE LocateDir(struct _DIR* new_dir, struct _FILE * fp); 
DWORD LocateFile(const char *filename, struct _FILE *file); 
//************************************************************************ 
//author:dragon 
//web:8dragon.com 
//2004.2.5完成于桃龙源 
//*************************************************************************