www.pudn.com > UDiskFileSystem.rar > mx_FFS_dir.cpp


/*************************************************************************/ 
/*                                                                       */ 
/*        Copyright (c) 1993-2001 Macronix, Inc.           				 */ 
/*                                                                    	 */ 
/* PROPRIETARY RIGHTS of Macronix are involved in the      			     */ 
/* subject matter of this material.  All manufacturing, reproduction,    */ 
/* use, and sales rights pertaining to this subject matter are governed  */ 
/* by the license agreement.  The recipient of this software implicitly  */ 
/* accepts the terms of the license.                                     */ 
/*                                                                       */ 
/*************************************************************************/ 
 
/*************************************************************************/ 
/* FILE NAME                                                     	 	 */ 
/*      MX_FFS_DIR.c        			 						 		 */ 
/* DESCRIPTION                                                           */ 
/*	This file definition only internal used in File System							 */ 
/* AUTHOR                                                                */ 
/*      MXIC ISG , Inc.   System Application Department			 		 */ 
/*                                                                       */ 
/*                                                                       */ 
/* HISTORY                                                               */ 
/*      2006/03/16      Test version 0.00 for BCB6						*/ 
/*************************************************************************/ 
 
#ifndef  MX_FFS_DIR_C 
#define  MX_FFS_DIR_C 
#include "MX_FFS_LAYER1.h" 
#include "mx_FFS_Layer2.h" 
#include "mx_FFS_fdb.h" 
 
mxDRIVE_PROPERTY 	Disk_Property[Disk_Num]; 
mxDISK_HISTORY	Disk_History[Disk_Num]; 
//mxDISK_HISTORY	TempDisk_History[2];// for change folder and copy/move file use 
//mxFDB_LFN FDBLfn[20]; 
#ifdef BCB6 
#include "main.h" 
extern FILE *hFile; 
extern void U_Printf(char *fmt,...); 
 
#endif 
 
u_16 Folder_Num = 0; 
u_16 File_Num = 0; 
 
 
/*FAT File System Ready										*/ 
/*Get FAT Boot Sector Information and record in Disk History*/ 
/* IN :														*/ 
/*		None												*/ 
/*OUT:														*/ 
/*		Return 0 is Ready, 1 is Not Ready					*/ 
u_8	MX_FFSReadyGet(void) 
{ 
	u_8 Error = FAT_PASS; 
 	u_8 BootSector_Buffer[0x200]; 
	u_8 SystemTypeCode,i = 0; 
 
	for(i=0;i (10*PathDepth + 4)) 
	{ 
		Error = FAT_FOLDERPATH_ERROR; 
		return Error; 
	} 
 
	for(i=0;i<9;i++) 
	{ 
		FolderMainName[i] = 0x20; 
		if(i<3) 
		{ 
			FolderExtName[i] = 0x20; 
		} 
	} 
	FolderExtName[4] = 0; 
	 
	LayerNum = GetFolderLayer(Path, PathLen); 
 
	if(LayerNum == 0xffff)// only folder name.... 
	{ 
		CurrentPathLen = strlen(TempDisk_History.CurrentPath); 
		for(i=0; i < PathLen ; i++) 
		{ 
			Disk_History[DiskIndex].CurrentPath[CurrentPathLen + i] = Path[i]; 
			FolderMainName[i] = Path[i]; 
		} 
		Error = MX_GetFDB(FolderFDB, DiskIndex, FolderMainName, FolderExtName); 
		Disk_History[DiskIndex] = TempDisk_History; 
	} 
	else if(LayerNum == 0) // Disk Root 
	{ 
		SetDiskHistoryInit(&Disk_History[DiskIndex],Disk_Property[DiskIndex]); 
		for(i=0; i < PathLen ; i++) 
		{ 
			Disk_History[DiskIndex].CurrentPath[i] = Path[i]; 
		} 
		for(i=0;i<10;i++) 
		{ 
			//MX_GetFDBList(FolderFDB,1,DiskIndex); 
			MX_GetLFNList(&LFN,1,DiskIndex,1); 
			*FolderFDB = LFN.FDB_Entry; 
			if(FolderFDB->attr == ATTR_VOLUME_ID)// find Volume Lable 
			{ 
				Error = FAT_PASS; 
				break; 
			} 
		} 
		if(i == 10) 
		{ 
			Error = FAT_FILE_NOTFIND; 
		} 
		Disk_History[DiskIndex] = TempDisk_History; 
	} 
	else // other path 
	{ 
		// Set to Root Start 
		SetDiskHistoryInit(&Disk_History[DiskIndex],Disk_Property[DiskIndex]); 
		// Set to Root End 
		for(i=0; i < 2 ; i++) 
		{ 
			Disk_History[DiskIndex].CurrentPath[i] = Path[i]; //C:\\ 
		} 
		//CurrentLayerNum = GetFolderLayer(Disk_History[DiskIndex].CurrentPath, CurrentPathLen); 
		 
		for(i=1; i <= LayerNum ; i++) // 0 is Root  
		{ 
			Error = GetFolderLayerName(Path, FolderMainName, i, PathLen); 
			if(Error != FAT_PASS) 
			{ 
				break; 
			} 
			FolderNameLen = strlen(FolderMainName); 
			for(j = FolderNameLen ; j<8 ; j++) 
			{ 
				FolderMainName[j] = 0x20; 
			} 
			FolderMainName[8] = 0; 
			CurrentPathLen = strlen(Disk_History[DiskIndex].CurrentPath); 
			for(j=0; j < (FolderNameLen+2) ; j++) 
			{ 
				Disk_History[DiskIndex].CurrentPath[j+CurrentPathLen] = Path[j+CurrentPathLen];// record current Path Name 
			} 
			Error = MX_GetFDB(FolderFDB, DiskIndex, FolderMainName, FolderExtName); 
			if(Error != FAT_PASS) 
			{ 
				break; 
			} 
			MX_SetFolderLinkPath(*FolderFDB,&Disk_History[DiskIndex]); 
		} 
		Disk_History[DiskIndex] = TempDisk_History; 
	} 
return Error; 
} 
 
/*Get FDB														*/ 
/*Get one File or Folder FDB exist in current work directory	*/ 
/* IN :															*/ 
/*		DiskIndex	Disk Number									*/ 
/*		MainName	Main File/Folder Name (8 byte)  			*/ 
/*		ExtName	 	Ext. Name(3 bytes)							*/ 
/*OUT:															*/ 
/*		FolderFDB		return FDB Data Struct   				*/ 
/*		function return	return Fat Error flag   				*/ 
u_8 MX_GetFDB(mxFDB *FDB_Buf, u_8 DiskIndex, s_8 *MainName, s_8 *ExtName) 
{ 
	//u_8 SectorsPerCluster = Disk_Property[DiskIndex].DiskBoot.SectorsPerCluster; 
	u_32 BytesPerCluster = Disk_Property[DiskIndex].DiskBoot.BytesPerCluster; 
	u_32 Entry_Num; 
	u_8 TempBuffer[512],FDB_Buffer[0x20],FDB_Flag;// LFN_Flag = 0; 
	mxFDB TempFDB[1]; 
 	//s_8 FileName_TEMP[9], Extension_TEMP[4]; 
	u_32 i; 
	u_8 Error,Index; 
 
	//j = 0; 
 
	Entry_Num = Disk_History[DiskIndex].EntryNum; 
	Disk_History[DiskIndex].EntryNum = 0; 
    //memcpy(FileName_TEMP, (TEMPBuffer + i), 8); 
	while(1)  
	{ 
		//Error = SearchFDBLinkEntry( &Disk_Property[DiskIndex], &Disk_History[DiskIndex]); 
		Error = SearchFDBLinkEntry( &Disk_Property[DiskIndex], &Disk_History[DiskIndex],0); 
		if(Error == 1) 
		{ 
			break; 
		} 
 
		for(Index = 0; Index < (u_8)(BytesPerCluster / 512); Index++) 
		{ 
			UFI_ReadFile(hFile, Disk_History[DiskIndex].CurrentLBA+Index, 1, TempBuffer); 
			//UFI_ReadFile(hFile, Disk_History[DiskIndex].CurrentLBA, SectorsPerCluster, TempBuffer); 
		 
	 		for(i= ((Disk_History[DiskIndex].EntryNum % (512/32)) * 32); i<(512); i=i+32) 
			{ 
		        	memcpy(FDB_Buffer, (TempBuffer + i), 0x20); 
				FDB_Flag = Check_FDB(FDB_Buffer, &TempFDB[0], 0); 
				if((FDB_Flag != FDB_NOUSE) && (FDB_Flag != FDB_DELETE) && (FDB_Flag != FDB_LFNAME)) 
				{ 
					if(strncmp(TempFDB[0].mainfilename, MainName, 8) == 0 ) 
					{ 
						if(strncmp(TempFDB[0].extfilename, ExtName, 3) == 0 ) 
						{ 
							TempFDB[0].EntryNum = Disk_History[DiskIndex].EntryNum; 
							Disk_History[DiskIndex].EntryNum = Entry_Num; 
							*FDB_Buf = TempFDB[0]; 
							return FAT_PASS; 
						} 
					} 
				} 
				Disk_History[DiskIndex].EntryNum++; 
   			} 
		} 
	} 
	Disk_History[DiskIndex].EntryNum = Entry_Num; 
	return FAT_FILE_NOTFIND; 
} 
 
/*Search Folder														*/ 
/* IN :																*/ 
/*		Path	 Change Work Full Path(Short Name)					*/ 
/*		DiskIndex	Disk Number										*/ 
/*		FolderFDB	FDB Data Struct From MX_SearchFolder function   */ 
/*OUT:																*/ 
/*		function return	return Fat Error flag   					*/ 
u_8 MX_ChangeWorkFolder(s_8 *Path, mxFDB FolderFDB, u_8 DiskIndex) 
{ 
 
	u_16 PathLen = 0,CurrentPathLen = 0,i,j; 
	u_16 LayerNum = 0;//,CurrentLayerNum = 0; 
	u_8 Error = FAT_PASS;//,FolderNameLen = 0; 
 
	PathLen = strlen(Path); 
	LayerNum = GetFolderLayer(Path, PathLen); 
	if(PathLen > (10*PathDepth + 4)) 
	{ 
		Error = FAT_FOLDERPATH_ERROR; 
		return Error; 
	} 
	CurrentPathLen = strlen(Disk_History[DiskIndex].CurrentPath); 
	for(i=0;iLFN_Flag = 1; 
						LFN_Num = 0; 
					} 
					else 
					{ 
						//FDB_Buf[0].EntryNum = 0; 
						LFN->LFN_Flag = 0; 
					} 
					FDB_Buf[0].EntryNum = Disk_History[DiskIndex].EntryNum; 
					LFN->FDB_Entry = FDB_Buf[0]; 
					memcpy(&LFN->ShortName[0],FDB_Buf[0].mainfilename,8); 
					LFN->ShortName[8] = '.'; 
					memcpy(&LFN->ShortName[9],FDB_Buf[0].extfilename,3); 
					LFN->ShortName[12] = 0; 
					if((Mode == 0) && ( FDB_Flag == FDB_FILE)) 
					{ 
						if(strncmp(FDB_Buf[0].mainfilename, MainName, 8) == 0 ) 
						{ 
							if(strncmp(FDB_Buf[0].extfilename, ExtName, 3) == 0 ) 
							{ 
								//FDB_Buf[0].EntryNum = Disk_History[DiskIndex].EntryNum; 
								Disk_History[DiskIndex].EntryNum = Entry_Num; 
								//*FDB_Buf = FDB_Buf[0]; 
								return FAT_PASS; 
							} 
						} 
					} 
					else if((Mode == 1) && ( FDB_Flag == FDB_FOLDER)) 
					{ 
						if(strncmp(FDB_Buf[0].mainfilename, MainName, 8) == 0 ) 
						{ 
							if(strncmp(FDB_Buf[0].extfilename, ExtName, 3) == 0 ) 
							{ 
								//FDB_Buf[0].EntryNum = Disk_History[DiskIndex].EntryNum; 
								Disk_History[DiskIndex].EntryNum = Entry_Num; 
								//*FDB_Buf = FDB_Buf[0]; 
								return FAT_PASS; 
							} 
						} 
					} 
					else if((Mode != 0) && (Mode != 1)) 
					{ 
						if(strncmp(FDB_Buf[0].mainfilename, MainName, 8) == 0 ) 
						{ 
							if(strncmp(FDB_Buf[0].extfilename, ExtName, 3) == 0 ) 
							{ 
								//FDB_Buf[0].EntryNum = Disk_History[DiskIndex].EntryNum; 
								Disk_History[DiskIndex].EntryNum = Entry_Num; 
								//*FDB_Buf = FDB_Buf[0]; 
								return FAT_PASS; 
							} 
						} 
					} 
				} 
				if(FDB_Flag == FDB_LFNAME) 
				{ 
					LFNIndex = FDB_Buffer[0]&0x1F; 
					LFN_Num++; 
					GetLFN_FDB(&FDB_LFN[LFNIndex-1], FDB_Buffer); 
				} 
				if((FDB_Flag == FDB_LFNAME) && ((FDB_Buffer[0] & 0x0f) == 0x01)) 
				{ 
					LFN_Flag = 1; 
				} 
				Disk_History[DiskIndex].EntryNum++; 
   			} 
		} 
		 
	} 
	Disk_History[DiskIndex].EntryNum = Entry_Num; 
	return FAT_FILE_NOTFIND; 
} 
 
 
 
/*Set FDB																					*/ 
/*Set one File or Folder FDB in current work directory										*/ 
/* IN :																						*/ 
/*		Mode		0 Create New FDB, 1, delete FDB, other is modify FDB ==> time,attr,date.*/ 
/*		DiskIndex	Disk Number																*/ 
/*OUT:																						*/ 
/*		FolderFDB		return FDB Data Struct   											*/ 
/*		function return	return Fat Error flag   											*/ 
#if 1 
u_8 MX_SetFDB(mxFDB *FDB_Buf, u_8 DiskIndex, u_8 Mode) 
{ 
	//u_8 SectorsPerCluster = Disk_Property[DiskIndex].DiskBoot.SectorsPerCluster; 
	u_32 BytesPerCluster = Disk_Property[DiskIndex].DiskBoot.BytesPerCluster; 
	u_32 Entry_Num; 
	u_8 TempBuffer[512],FDB_Buffer[0x20],FDB_Flag;// LFN_Flag = 0; 
	mxFDB TempFDB[1]; 
 	s_8 MainName[9], ExtName[4]; 
	u_32 i; 
	u_8 Error,Index; 
 
	//j = 0; 
	for(i=0;i<8;i++) 
	{ 
		MainName[i] = FDB_Buf->mainfilename[i]; 
	} 
	MainName[8] = 0; 
	for(i=0;i<3;i++) 
	{ 
		ExtName[i] = FDB_Buf->extfilename[i]; 
	} 
	ExtName[i] = 0; 
	 
	Entry_Num = Disk_History[DiskIndex].EntryNum; 
	Error = SearchFDBLinkEntry( &Disk_Property[DiskIndex], &Disk_History[DiskIndex],1); 
	//Disk_History[DiskIndex].EntryNum = 0; 
    //memcpy(FileName_TEMP, (TEMPBuffer + i), 8); 
	while(1)  
	{ 
		//Error = SearchFDBLinkEntry( &Disk_Property[DiskIndex], &Disk_History[DiskIndex]); 
		Error = SearchFDBLinkEntry( &Disk_Property[DiskIndex], &Disk_History[DiskIndex],0); 
		if(Error == 1) 
		{ 
			break; 
		} 
 
 
		for(Index = 0; Index < (u_8)(BytesPerCluster / 512); Index++) 
		{ 
			UFI_ReadFile(hFile, Disk_History[DiskIndex].CurrentLBA+Index, 1, TempBuffer); 
			//UFI_ReadFile(hFile, Disk_History[DiskIndex].CurrentLBA, SectorsPerCluster, TempBuffer); 
		 
	 		for(i= ((Disk_History[DiskIndex].EntryNum % (512/32)) * 32); i<(512); i=i+32) 
			{ 
				memcpy(FDB_Buffer, (TempBuffer + i), 0x20); 
				FDB_Flag = Check_FDB(FDB_Buffer, &TempFDB[0], 0); 
				if((FDB_Flag != FDB_NOUSE) && (FDB_Flag != FDB_DELETE) && (FDB_Flag != FDB_LFNAME)) 
				{ 
					if(strncmp(TempFDB[0].mainfilename, MainName, 8) == 0 ) 
					{ 
						if(strncmp(TempFDB[0].extfilename, ExtName, 3) == 0 ) 
						{ 
							TempFDB[0].EntryNum = Disk_History[DiskIndex].EntryNum; 
							//Disk_History[DiskIndex].EntryNum = Entry_Num; 
							//*FDB_Buf = TempFDB[0]; 
							return FAT_PASS; 
						} 
					} 
				} 
				Disk_History[DiskIndex].EntryNum++; 
   			} 
		} 
		 
	} 
	Disk_History[DiskIndex].EntryNum = Entry_Num; 
	return FAT_FILE_NOTFIND; 
} 
#endif 
 
/*Create FDB																				*/ 
/*Set one File or Folder FDB in current work directory										*/ 
/* IN :																						*/ 
/*		Mode		0 Create New FDB, 1, delete FDB, other is modify FDB ==> time,attr,date.*/ 
/*		DiskIndex	Disk Number																*/ 
/*OUT:																						*/ 
/*		FolderFDB		return FDB Data Struct   											*/ 
/*		function return	return Fat Error flag   											*/ 
#if 1 
u_8 MX_CeateFDB(mxFDB *FDB_Buf, u_8 DiskIndex, u_8 Mode) 
{ 
	//u_8 SectorsPerCluster = Disk_Property[DiskIndex].DiskBoot.SectorsPerCluster; 
	u_32 BytesPerCluster = Disk_Property[DiskIndex].DiskBoot.BytesPerCluster; 
	u_32 Entry_Num; 
	u_8 TempBuffer[512],FDB_Buffer[0x20],FDB_Flag;// LFN_Flag = 0; 
	mxFDB TempFDB[1]; 
 	s_8 MainName[9], ExtName[4]; 
	u_32 i; 
	u_8 Error,Index; 
 
	//j = 0; 
	for(i=0;i<8;i++) 
	{ 
		MainName[i] = FDB_Buf->mainfilename[i]; 
	} 
	MainName[8] = 0; 
	for(i=0;i<3;i++) 
	{ 
		ExtName[i] = FDB_Buf->extfilename[i]; 
	} 
	ExtName[i] = 0; 
	 
	Entry_Num = Disk_History[DiskIndex].EntryNum; 
	Error = SearchFDBLinkEntry( &Disk_Property[DiskIndex], &Disk_History[DiskIndex],1); 
	//Disk_History[DiskIndex].EntryNum = 0; 
    //memcpy(FileName_TEMP, (TEMPBuffer + i), 8); 
	while(1)  
	{ 
		//Error = SearchFDBLinkEntry( &Disk_Property[DiskIndex], &Disk_History[DiskIndex]); 
		Error = SearchFDBLinkEntry( &Disk_Property[DiskIndex], &Disk_History[DiskIndex],0); 
		if(Error == 1) 
		{ 
			break; 
		} 
 
 
		for(Index = 0; Index < (u_8)(BytesPerCluster / 512); Index++) 
		{ 
			UFI_ReadFile(hFile, Disk_History[DiskIndex].CurrentLBA+Index, 1, TempBuffer); 
			//UFI_ReadFile(hFile, Disk_History[DiskIndex].CurrentLBA, SectorsPerCluster, TempBuffer); 
		 
	 		for(i= ((Disk_History[DiskIndex].EntryNum % (512/32)) * 32); i<(512); i=i+32) 
			{ 
				memcpy(FDB_Buffer, (TempBuffer + i), 0x20); 
				FDB_Flag = Check_FDB(FDB_Buffer, &TempFDB[0], 0); 
				if((FDB_Flag != FDB_NOUSE) && (FDB_Flag != FDB_DELETE) && (FDB_Flag != FDB_LFNAME)) 
				{ 
					if(strncmp(TempFDB[0].mainfilename, MainName, 8) == 0 ) 
					{ 
						if(strncmp(TempFDB[0].extfilename, ExtName, 3) == 0 ) 
						{ 
							TempFDB[0].EntryNum = Disk_History[DiskIndex].EntryNum; 
							//Disk_History[DiskIndex].EntryNum = Entry_Num; 
							//*FDB_Buf = TempFDB[0]; 
							return FAT_PASS; 
						} 
					} 
				} 
				Disk_History[DiskIndex].EntryNum++; 
   			} 
		} 
		 
	} 
	Disk_History[DiskIndex].EntryNum = Entry_Num; 
	return FAT_FILE_NOTFIND; 
} 
#endif 
 
//extern void UFI_WriteFile(HANDLE SourceFile, u_32 LBA_START, u_16 LBA_Length, u_8 *Buffer); 
u_8 MX_FRename(s_8 *pSrcFileName, s_8 *pTrgFileName) 
{ 
	u_8 DiskIndex=0; 
//	u_8 SectorsPerCluster = Disk_Property[DiskIndex].DiskBoot.SectorsPerCluster; 
	u_32 BytesPerCluster = Disk_Property[DiskIndex].DiskBoot.BytesPerCluster; 
	u_32 Entry_Num; 
	u_8 TempBuffer[512],FDB_Buffer[0x20],FDB_Flag, j,LFN_Flag = 0; 
	mxFDB FDB_Buf[1]; 
 
	s_8 MainName1[9]={0},ExtName1[4]={0}, MainName2[9]={0},ExtName2[4]={0}; 
	 
 	//s_8 FileName_TEMP[9], Extension_TEMP[4]; 
	u_32 i,pos=0; 
	u_8 Error,Index; 
	u_8 LFNCheckSum,LFNIndex,LFN_Num = 0; 
	mxFDB_LFN FDB_LFN[20]; 
///* 
//	U_Printf("aaaa"); 
	for(i=0;ipos) 
		{ 
			ExtName1[i-pos-1]=pSrcFileName[i]; 
		} 
	} 
	MainName1[8]=0; 
	ExtName1[3]=0; 
//	U_Printf("old file ext:%s",ExtName1); 
	//* 
	for(i=0;ipos) 
			ExtName2[i-pos-1]=pTrgFileName[i]; 
	} 
	MainName2[8]=0; 
	ExtName2[3]=0; 
//	U_Printf("new file ext:%s",ExtName2); 
	Entry_Num = Disk_History[DiskIndex].EntryNum; 
	Disk_History[DiskIndex].EntryNum = 0; 
    //memcpy(FileName_TEMP, (TEMPBuffer + i), 8); 
  //  	U_Printf("bbbb"); 
	while(1)  
	{ 
		//Error = SearchFDBLinkEntry( &Disk_Property[DiskIndex], &Disk_History[DiskIndex]); 
		Error = SearchFDBLinkEntry( &Disk_Property[DiskIndex], &Disk_History[DiskIndex],0); 
		if(Error == 1) 
		{ 
			break; 
		} 
 
		for(Index = 0; Index < (u_8)(BytesPerCluster / 512); Index++) 
		{ 
			UFI_ReadFile(hFile, Disk_History[DiskIndex].CurrentLBA+Index, 1, TempBuffer); 
		//	UFI_WriteFile(hFile, Disk_History[DiskIndex].CurrentLBA+Index, 1, TempBuffer); 
		//	U_Printf("cccc"); 
	 		for(i= ((Disk_History[DiskIndex].EntryNum % (512/32)) * 32); i<512; i=i+32) // 16 
			{ 
			//	U_Printf("dddd"); 
				memcpy(FDB_Buffer, (TempBuffer + i), 0x20); 
				FDB_Flag = Check_FDB(FDB_Buffer, &FDB_Buf[0], 0); 
				if(FDB_Flag == FDB_NOUSE) 
				{ 
					return j; 
				} 
				{ 
					{ 
						if(strncmp(FDB_Buf[0].mainfilename, MainName1, 8) == 0 ) 
						{ 
							FDB_Buf[0].mainfilename[8]=0; 
						//	U_Printf("gggg"); 
							if(strncmp(FDB_Buf[0].extfilename, ExtName1, 3) == 0 ) 
							{ 
								FDB_Buf[0].extfilename[3]=0; 
							//	U_Printf("hhhh"); 
								U_Printf("find file:%s.%s",FDB_Buf[0].mainfilename/*MainName1*/,FDB_Buf[0].extfilename); 
								U_Printf("new file:%s.%s",MainName2,ExtName2); 
								//FDB_Buf[0].EntryNum = Disk_History[DiskIndex].EntryNum; 
								Disk_History[DiskIndex].EntryNum = Entry_Num; 
								//*FDB_Buf = FDB_Buf[0]; 
								memcpy(&FDB_Buffer[0],MainName2,8); 
								memcpy(&FDB_Buffer[8],ExtName2,3); 
								memcpy((TempBuffer + i),FDB_Buffer,  0x20); 
							//	UFI_WriteFile(hFile, Disk_History[DiskIndex].CurrentLBA+Index, 1, TempBuffer); 
								{ 
								//	/* 
									DWORD BytesRead; 
									SetFilePointer (hFile, (Disk_History[DiskIndex].CurrentLBA+Index * 0x200), NULL, FILE_BEGIN); 
									U_Printf("SetFilePointer"); 
									WriteFile (hFile, TempBuffer, (1 * 0x200), &BytesRead, NULL); 
									U_Printf("WriteFile"); 
								//	*/ 
								} 
								U_Printf("UFI_Write"); 
								return FAT_PASS; 
							} 
						} 
					} 
				} 
				Disk_History[DiskIndex].EntryNum++; 
   			} 
		} 
		 
	} 
	Disk_History[DiskIndex].EntryNum = Entry_Num; 
	return FAT_FILE_NOTFIND; 
} 
 
#endif   /*MX_FFS_DIR_C*/