www.pudn.com > fat32.c51.rar > FATNEXTCLUSTER.C


#ifndef _FAT_DEFINE 
 #include "FAT.c" 
#endif 
 
void FATNextCluster(DWORD *CurrentCluster); 
 
void FATNextCluster(DWORD *CurrentCluster) 
{ 
	pdata BYTE Offset; 
	pdata DWORD Sector; 
	 
	switch (sDPT[StorageMedia.CurrentPartition].FATType) 
	{ 
		case FAT_TYPE_FAT32	: 
			 
			Sector=(*CurrentCluster)>>7;						//等价于CurrentCluster/128 
			Offset=(BYTE)((*CurrentCluster)&0x0000007f);		//等价于CurrentCluster%128 
			if (Sector!=FATTable.Sector) 
			{ 
				FATTable.Sector=Sector; 
				StorageMedia.ReadSector(FAT.FATSec + Sector,FATTable.FAT.F12); 
			} 
			*CurrentCluster=MEMSwap32(FATTable.FAT.F32[Offset]); 
			return; 
		case FAT_TYPE_FAT16	: 
			Sector=(*CurrentCluster)>>8;						//等价于CurrentCluster/256 
			Offset=(BYTE)((*CurrentCluster)&0x000000ff);		//等价于CurrentCluster%256 
			if (Sector!=FATTable.Sector) 
			{ 
				FATTable.Sector=Sector; 
				StorageMedia.ReadSector(FAT.FATSec + Sector,FATTable.FAT.F12); 
			} 
			*CurrentCluster=(DWORD) MEMSwap16(FATTable.FAT.F16[Offset]); 
			return; 
		case FAT_TYPE_FAT12	: 
		break; 
	} 
}