亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fat32_table.c

?? FAT32代碼
?? C
字號:
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//					        FAT32 File IO Library
//								    V2.0
// 	  							 Rob Riglar
//						    Copyright 2003 - 2007
//
//   					  Email: rob@robriglar.com
//
//-----------------------------------------------------------------------------
//
// This file is part of FAT32 File IO Library.
//
// FAT32 File IO Library is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// FAT32 File IO Library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with FAT32 File IO Library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#include "FAT32_Definitions.h"
#include "FAT32_base.h"
#include "FAT32_Table.h"

//-----------------------------------------------------------------------------
//							FAT Sector Buffer
//-----------------------------------------------------------------------------
struct 
{
	BYTE Data[512];
	UINT32 Sector;
	BOOL Changed;
	UINT32 Reads;
	UINT32 Writes;
} FATBuffer;

#define FAT32_GET_32BIT_WORD(location)	( GET_32BIT_WORD(FATBuffer.Data, location) )
#define FAT32_SET_32BIT_WORD(location, value)	{ SET_32BIT_WORD(FATBuffer.Data, location, value); FATBuffer.Changed = TRUE; }

//-----------------------------------------------------------------------------
// FAT32_InitFatBuffer:
//-----------------------------------------------------------------------------
void FAT32_InitFatBuffer()
{
	FATBuffer.Sector = 0xFFFFFFFF;
	FATBuffer.Changed = FALSE;
	FATBuffer.Reads = 0;
	FATBuffer.Writes = 0;
	memset(FATBuffer.Data, 0x00, sizeof(FATBuffer.Data));
}
//-----------------------------------------------------------------------------
// FAT32_ReadFATSector: Read a FAT sector
//-----------------------------------------------------------------------------
BOOL FAT32_ReadFATSector(UINT32 sector)
{
	// Only do anything if sector not already loaded
	if ( (sector!=FATBuffer.Sector) )
	{
		// Writeback
		if (FATBuffer.Changed)
		{
			FATBuffer.Writes++;
			if (!FAT_WriteSector(FATBuffer.Sector, FATBuffer.Data))
				return FALSE;
		}

		FATBuffer.Sector = sector;
		FATBuffer.Changed = FALSE;

		// Read next sector
		if (!FAT_ReadSector(FATBuffer.Sector, FATBuffer.Data))
			return FALSE;

		FATBuffer.Reads++;
	}

	return TRUE;
}
//-----------------------------------------------------------------------------
// FAT32_WriteFATSector: Write a FAT sector
//-----------------------------------------------------------------------------
BOOL FAT32_WriteFATSector(UINT32 sector)
{
#ifdef FATBUFFER_IMMEDIATE_WRITEBACK
	FATBuffer.Sector = sector;
	FATBuffer.Changed = FALSE;
	FATBuffer.Writes++;
	return FAT_WriteSector(FATBuffer.Sector, FATBuffer.Data);
#else
	return TRUE;
#endif
}
//-----------------------------------------------------------------------------
// FAT32_ReadFATSector: Read a FAT sector
//-----------------------------------------------------------------------------
BOOL FAT32_PurgeFATBuffer()
{
#ifndef FATBUFFER_IMMEDIATE_WRITEBACK

	// Writeback
	if (FATBuffer.Changed) 
	{
		FATBuffer.Writes++;
		if (!FAT_WriteSector(FATBuffer.Sector, FATBuffer.Data))
			return FALSE;
		
		FATBuffer.Changed = FALSE;
	}

#endif

	return TRUE;
}

//-----------------------------------------------------------------------------
//						General FAT Table Operations
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// FAT32_FindNextCluster: Return Cluster number of next cluster in chain by 
// reading FAT table and traversing it. Return 0xffffffff for end of chain.
//-----------------------------------------------------------------------------
UINT32 FAT32_FindNextCluster(UINT32 Current_Cluster)
{
	UINT32 FAT_sector_offset, position;
	UINT32 nextcluster;

	// Why is '..' labelled with cluster 0 when it should be 2 ??
	if (Current_Cluster==0) Current_Cluster=2;

	// Find which sector of FAT table to read
	FAT_sector_offset = Current_Cluster / 128;

	// Read FAT sector into buffer
	if (!FAT32_ReadFATSector(FAT32.fat_begin_lba+FAT_sector_offset))
		return (FAT32_EOC_FLAG); 

	// Find 32 bit entry of current sector relating to cluster number 
	position = (Current_Cluster - (FAT_sector_offset * 128)) * 4; 

	// Read Next Clusters value from Sector Buffer
	nextcluster = FAT32_GET_32BIT_WORD((UINT16)position);	 

	// Mask out MS 4 bits (its 28bit addressing)
	nextcluster = nextcluster & 0x0FFFFFFF;		

	// If 0x0FFFFFFF then end of chain found
	if (nextcluster==0x0FFFFFFF) 
		return (FAT32_EOC_FLAG); 
	else 
	// Else return next cluster
		return (nextcluster);						 
} 
//-----------------------------------------------------------------------------
// FAT32_GetFsInfoNextCluster: Read the next free cluster from FS info block
//-----------------------------------------------------------------------------
UINT32 FAT32_GetFsInfoNextCluster()
{
	UINT32 nextFreeCluster = 0xFFFFFFFF;

	// Read FSINFO sector into buffer
	FAT32_ReadFATSector(FAT32.lba_begin+FAT32.fs_info_sector);

	// Get next free cluster
	nextFreeCluster = FAT32_GET_32BIT_WORD(492);

	return nextFreeCluster;
}
//-----------------------------------------------------------------------------
// FAT32_SetFsInfoNextCluster: Write the next free cluster to the FSINFO table
//-----------------------------------------------------------------------------
void FAT32_SetFsInfoNextCluster(UINT32 newValue)
{
	// Load sector to change it
	if (!FAT32_ReadFATSector(FAT32.lba_begin+FAT32.fs_info_sector))
		return ;

	// Change 
	FAT32_SET_32BIT_WORD(492, newValue);

	// Write back
	FAT32_WriteFATSector(FAT32.lba_begin+FAT32.fs_info_sector);	
}
//-----------------------------------------------------------------------------
// FAT32_FindBlankCluster: Find a free cluster entry by reading the FAT
//-----------------------------------------------------------------------------
#ifdef INCLUDE_WRITE_SUPPORT
BOOL FAT32_FindBlankCluster(UINT32 StartCluster, UINT32 *FreeCluster)
{
	UINT32 FAT_sector_offset, position;
	UINT32 nextcluster;
	UINT32 Current_Cluster = StartCluster;

	do
	{
		// Find which sector of FAT table to read
		FAT_sector_offset = Current_Cluster / 128;

		if ( FAT_sector_offset < FAT32.fat_sectors)
		{
			// Read FAT sector into buffer
			FAT32_ReadFATSector(FAT32.fat_begin_lba+FAT_sector_offset);

			// Find 32 bit entry of current sector relating to cluster number 
			position = (Current_Cluster - (FAT_sector_offset * 128)) * 4; 

			// Read Next Clusters value from Sector Buffer
			nextcluster = FAT32_GET_32BIT_WORD((UINT16)position);	 

			// Mask out MS 4 bits (its 28bit addressing)
			nextcluster = nextcluster & 0x0FFFFFFF;		

			if (nextcluster !=0 )
				Current_Cluster++;
		}
		else
			// Otherwise, run out of FAT sectors to check...
			return FALSE;
	}
	while (nextcluster != 0x0);

	// Found blank entry
	*FreeCluster = Current_Cluster;
	return TRUE;
} 
#endif
//-----------------------------------------------------------------------------
// FAT32_SetClusterValue: Set a cluster link in the chain. NOTE: Immediate
// write (slow).
//-----------------------------------------------------------------------------
#ifdef INCLUDE_WRITE_SUPPORT
BOOL FAT32_SetClusterValue(UINT32 Cluster, UINT32 NextCluster)
{
	UINT32 FAT_sector_offset, position;

	// Find which sector of FAT table to read
	FAT_sector_offset = Cluster / 128;

	// Read FAT sector into buffer
	FAT32_ReadFATSector(FAT32.fat_begin_lba+FAT_sector_offset);

	// Find 32 bit entry of current sector relating to cluster number 
	position = (Cluster - (FAT_sector_offset * 128)) * 4; 

	// Write Next Clusters value to Sector Buffer
	FAT32_SET_32BIT_WORD((UINT16)position, NextCluster);	 

	// Write FAT sector from buffer
	FAT32_WriteFATSector(FAT32.fat_begin_lba+FAT_sector_offset);	

	return TRUE;					 
} 
#endif
//-----------------------------------------------------------------------------
// FAT32_FreeClusterChain: Follow a chain marking each element as free
//-----------------------------------------------------------------------------
#ifdef INCLUDE_WRITE_SUPPORT
BOOL FAT32_FreeClusterChain(UINT32 StartCluster)
{
	UINT32 last_cluster;
	UINT32 next_cluster = StartCluster;
	
	// Loop until end of chain
	while ( (next_cluster!=0xFFFFFFFF) && (next_cluster!=0x00000000) )
	{
		last_cluster = next_cluster;

		// Find next link
		next_cluster = FAT32_FindNextCluster(next_cluster);

		// Clear last link
		FAT32_SetClusterValue(last_cluster, 0x00000000);
	}

	return TRUE;
} 
#endif
//-----------------------------------------------------------------------------
// FAT32_AddClusterToEndofChain: Follow a chain marking and then add a new entry
// to the current tail.
//-----------------------------------------------------------------------------
#ifdef INCLUDE_WRITE_SUPPORT
BOOL FAT32_AddClusterToEndofChain(UINT32 StartCluster, UINT32 newEntry)
{
	UINT32 last_cluster = 0xFFFFFFFF;
	UINT32 next_cluster = StartCluster;

	if (StartCluster == 0xFFFFFFFF)
		return FALSE;
	
	// Loop until end of chain
	while ( next_cluster!=0xFFFFFFFF )
	{
		last_cluster = next_cluster;

		// Find next link
		next_cluster = FAT32_FindNextCluster(next_cluster);

		if (next_cluster==0x00000000)
			return FALSE;
	}

	// Add link in for new cluster
	FAT32_SetClusterValue(last_cluster, newEntry);

	// Mark new cluster as end of chain
	FAT32_SetClusterValue(newEntry, 0xFFFFFFFF);

	return TRUE;
} 
#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷综合久久久久中文一区二区| 成人午夜av影视| 国产日韩欧美不卡| 欧美色图免费看| 国产大陆精品国产| 日韩电影在线看| 国产精品五月天| 日韩亚洲欧美一区二区三区| 99热精品一区二区| 国产一区二区三区日韩| 亚洲成人黄色小说| 一区在线播放视频| 久久午夜电影网| 666欧美在线视频| 99精品1区2区| 国产成人精品三级| 久久草av在线| 日韩成人精品视频| 亚洲激情网站免费观看| 欧美激情一区二区在线| 精品国产乱码久久| 7777精品伊人久久久大香线蕉的| 91猫先生在线| 成a人片亚洲日本久久| 韩国精品主播一区二区在线观看| 天堂va蜜桃一区二区三区漫画版| 亚洲色图.com| 亚洲品质自拍视频| **性色生活片久久毛片| 国产精品情趣视频| 中文成人综合网| 国产亚洲短视频| 国产欧美一区二区精品性色超碰| 亚洲精品在线观看视频| 精品日韩欧美在线| 日韩免费看的电影| 日韩亚洲欧美综合| 欧美va亚洲va| 久久亚洲欧美国产精品乐播| 精品国内片67194| 久久久久久久综合日本| 北岛玲一区二区三区四区| 精品一区二区三区在线播放| 日本不卡1234视频| 久久精品国产99久久6| 日本不卡一区二区| 日本va欧美va精品发布| 琪琪久久久久日韩精品| 免费一区二区视频| 国内偷窥港台综合视频在线播放| 国产裸体歌舞团一区二区| 国产美女精品一区二区三区| 国产精品一区二区免费不卡 | 欧美一级xxx| 日韩欧美专区在线| 精品99999| 久久精品免费在线观看| 国产精品久久久久久久浪潮网站| 国产精品久久久久久亚洲伦| 一区二区三区欧美在线观看| 亚洲成a天堂v人片| 麻豆精品国产传媒mv男同| 国产精品一二三四| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲午夜私人影院| 香蕉成人啪国产精品视频综合网| 日韩国产欧美在线播放| 激情欧美一区二区| 成人免费视频播放| 在线观看网站黄不卡| 91精品国产综合久久香蕉麻豆| 欧美一区二区三区啪啪| 久久久久9999亚洲精品| 亚洲黄色免费电影| 美女看a上一区| 国产.精品.日韩.另类.中文.在线.播放| 成人av免费网站| 欧美日韩精品高清| 久久精品在线观看| 一区二区三区四区不卡视频| 日韩成人av影视| 国产成a人亚洲| 欧美午夜一区二区三区| 精品久久久影院| 亚洲欧美怡红院| 日韩av一二三| av在线不卡电影| 91麻豆精品国产自产在线观看一区 | 国产福利一区二区| 欧美自拍丝袜亚洲| 久久综合国产精品| 亚洲午夜国产一区99re久久| 国产精品一区一区| 欧美蜜桃一区二区三区| 国产免费成人在线视频| 日韩影院在线观看| 97久久超碰精品国产| 日韩一卡二卡三卡国产欧美| 中文字幕一区二区三区蜜月| 男女性色大片免费观看一区二区| 成人av电影在线观看| 日韩精品资源二区在线| 亚洲精品你懂的| 国产98色在线|日韩| 69堂亚洲精品首页| 亚洲日韩欧美一区二区在线| 国产一区二区三区久久悠悠色av| 欧洲一区在线电影| 中文成人综合网| 精品无码三级在线观看视频| 欧美色综合影院| 中文字幕一区二区三区不卡| 国产在线日韩欧美| 7777精品伊人久久久大香线蕉完整版 | 夜夜精品视频一区二区| 成人动漫精品一区二区| 日韩一区二区精品在线观看| 亚洲成人久久影院| 91麻豆视频网站| 国产精品久久久久久久久免费樱桃| 蜜桃久久精品一区二区| 欧美在线观看视频一区二区| 综合久久久久久久| 国产福利一区二区三区在线视频| 日韩免费视频一区| 免费视频一区二区| 4438x成人网最大色成网站| 亚洲在线视频免费观看| 91美女片黄在线观看91美女| 国产精品美女久久久久久| 国产伦精品一区二区三区视频青涩 | 日韩一级在线观看| 婷婷夜色潮精品综合在线| 在线欧美日韩国产| 一区二区三区四区视频精品免费 | 久久se精品一区二区| 欧美一区二区三区日韩| 欧美96一区二区免费视频| 欧美一级夜夜爽| 麻豆精品一区二区| 日韩一区二区在线免费观看| 美女久久久精品| 欧美精品一区二区三区高清aⅴ | 亚洲成人你懂的| 欧美精品久久久久久久多人混战| 亚洲成人久久影院| 日韩视频一区二区三区在线播放 | 欧美韩国日本不卡| 成人丝袜视频网| 亚洲色图视频网| 欧美日韩国产首页| 青青草伊人久久| 久久久电影一区二区三区| 国产成人av电影免费在线观看| 欧美国产综合一区二区| 91性感美女视频| 亚洲123区在线观看| 日韩视频免费观看高清完整版 | 精品视频1区2区3区| 三级亚洲高清视频| 久久在线观看免费| 白白色 亚洲乱淫| 亚洲一区二区四区蜜桃| 91精品国产麻豆国产自产在线 | 日本一区二区三区视频视频| av资源网一区| 丝瓜av网站精品一区二区 | 亚洲风情在线资源站| 日韩一级完整毛片| 大胆亚洲人体视频| 一个色在线综合| 精品国产一区二区三区久久影院| 国产乱国产乱300精品| 亚洲同性gay激情无套| 69久久99精品久久久久婷婷| 国产麻豆成人传媒免费观看| 亚洲人成网站在线| 日韩欧美综合一区| 99久久精品免费精品国产| 午夜电影一区二区三区| 久久久91精品国产一区二区精品 | 免费在线一区观看| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美精选一区二区| 懂色av中文一区二区三区| 亚洲一区二区三区在线看| 久久久美女艺术照精彩视频福利播放| 91影视在线播放| 久久69国产一区二区蜜臀| 亚洲精品视频免费观看| 久久久久久久网| 欧美日韩黄视频| 成人av在线影院| 另类综合日韩欧美亚洲| 亚洲少妇屁股交4| 久久这里都是精品| 欧美精品精品一区| 色嗨嗨av一区二区三区| 国产乱码精品一区二区三 | 91亚洲精品久久久蜜桃|