www.pudn.com > SmartFDISK.zip > filesys.h


#if defined( Uses_FileSystem ) && !defined( __FileSystem ) 
#define __FileSystem 
 
#define QUICKFORMAT  0 
#define FULLFORMAT   1 
#define SAFEFORMAT   2 
 
extern DWORD ValidBlockSize[]; 
 
// Struct for Summary of File System 
struct TFileSysInfo 
{ 
	WORD InfoSize; 
	Boolean Formated; 
	BYTE FileSysName[16]; 
	DWORD TotalKBytes; 
	DWORD ReservedKBytes; 
	DWORD FreeKBytes; 
	DWORD BytesPerBlock; 
	DWORD TotalBlocks; 
	DWORD FreeBlocks; 
	DWORD BadBlocks; 
} __attribute__((packed)); 
 
//Struct for record bad block in File system 
struct TBadBlockList 
{ 
	DWORD Start; 
	DWORD End; 
	TBadBlockList *Next; 
} __attribute__((packed)); 
 
class TPartition; 
 
/****************************************************************************/ 
/*Class name: TFileSystem                                                   */ 
/*Discription:                                                              */ 
/*    Base class for all File Systems.                                      */ 
/*    Provide some virtual functions for all file systems.                  */ 
/****************************************************************************/ 
class TKernelObject; 
 
class TFileSystem : public TKernelObject 
{ 
public: 
 
	virtual int32 Initialize( TPartition *partition ); 
	virtual void ShutDown(); 
 
	// Format File System, method = 0 Quick, 1 Full or 2 Safe 
	virtual int32 Format( CallBackFunc CallBack, 
						  int32 method, DWORD MinBlockSize )=0; 
	// Scan the Surface of File System 
	virtual TBadBlockList *SurfaceScan( CallBackFunc CallBack )=0; 
	virtual int32 GetFileSysInfo( TFileSysInfo &info )=0; 
    virtual BYTE GetFileSysType()=0; 
 
	virtual Boolean CanFormat(); 
	virtual Boolean IsFormated(); 
	virtual DWORD GetBlockSize()=0; 
	virtual int32 GetBlkSizeInfo( WORD & minIndex, WORD & maxIndex , WORD &defIndex)=0; 
    virtual int32 WriteChange()=0; 
 
 
	Boolean IsUseable(){ return Useable; } 
	Boolean IsChanged(){ return Changed; } 
	char * GetFileSysName() { return FileSysName; } 
 
protected: 
	Boolean Useable; 
	Boolean Formated; 
    Boolean Changed; 
 
	TPartition *Partition; 
	TBadBlockList *BadBlockList; 
	char FileSysName[16]; 
	void PreInit(); 
	void DeleteBadBlockList(); 
}; 
 
 
class TRawFileSystem : public TFileSystem 
{ 
public: 
 
	TRawFileSystem(){ PreInit(); } 
 
	TRawFileSystem(TPartition *part); 
 
	// Format File System, method = 0 Quick, 1 Full or 2 Safe 
	virtual int32 Format( CallBackFunc CallBack, 
						  int32 method, DWORD MinBlockSize ); 
	// Scan the Surface of File System 
	virtual TBadBlockList *SurfaceScan( CallBackFunc CallBack ); 
	virtual int32 GetFileSysInfo( TFileSysInfo &info ); 
	virtual DWORD GetBlockSize(); 
	virtual int32 GetBlkSizeInfo( WORD & minIndex, WORD & maxIndex , WORD &defIndex); 
	virtual Boolean CanFormat() 
		{ return False; } 
    virtual int32 WriteChange(){ return 0;} 
    virtual BYTE GetFileSysType(){ return 0; } 
}; 
 
#endif // End of __Filesystem