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

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

?? fat.c

?? 基于ATmega64單片機(jī)以及vs1003的SD卡方案的MP3播放源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
		for(cnt=0;cnt<RootDirSectors;cnt++)
		{
			if(FAT_ReadSector(FirstDirSector+cnt,buffer)){free(buffer);return 1;}
			for(offset=0;offset<512;offset+=32)
			{
				item=(struct direntry *)(&buffer[offset]);
				if((item->deName[0] != 0x00) && (item->deName[0] != 0xe5) && (item->deAttributes != 0x0f))
				{
					for(i=0;i<11;i++)
					{
						if(buffer[offset+i]!=name[i])break;
					}
					if(i==11)
					{
						//return the parameter of the item
						FileInfo->StartCluster = item->deStartCluster + (((unsigned long)item->deHighClust)<<16);//don't care
						FileInfo->Size         = item->deFileSize;
						FileInfo->Attr         = item->deAttributes;
						FileInfo->Sector       = FirstDirSector+cnt;
						FileInfo->Offset       = offset;
						free(buffer);
						return 0;
					}
				}
			}
		}
		free(buffer);//release
	}
	else//other folders
	{
		tempclust=cluster;
		while(1)
		{
			sector=(DWORD)FirstDataSector+(DWORD)(tempclust-2)*(DWORD)SectorsPerClust;//calculate the actual sector number
			buffer=malloc(512);//apply memory
			if(buffer==0)return 1;//if failed
			for(cnt=0;cnt<SectorsPerClust;cnt++)
			{
				if(FAT_ReadSector(sector+cnt,buffer)){free(buffer);return 1;}
				for(offset=0;offset<512;offset+=32)
				{
					item=(struct direntry *)(&buffer[offset]);
					if((item->deName[0] != 0x00) && (item->deName[0] != 0xe5) && (item->deAttributes != 0x0f))
					{
						for(i=0;i<11;i++)
						{
							if(buffer[offset+i]!=name[i])break;
						}
						if(i==11)
						{
							FileInfo->StartCluster = item->deStartCluster + (((unsigned long)item->deHighClust)<<16);//don't care
							FileInfo->Size         = item->deFileSize;
							FileInfo->Attr         = item->deAttributes;
							FileInfo->Sector       = sector+cnt;
							FileInfo->Offset       = offset;
							free(buffer);
							return 0;
						}
					}
				}
			}
			free(buffer);//release
			tempclust=FAT_NextCluster(tempclust);//next cluster
			if((FAT32_Enable == 0 && tempclust == 0xffff) || tempclust == 0x0ffffff8 || tempclust == 0x0fffffff)break;
		}
	}
	return 1;
}


//挑選一個未使用的記錄項(xiàng)
//select the first unsed item in the given cluster
//for delete a foler or a file
unsigned char FAT_SelectOneItem(unsigned long cluster,struct FileInfoStruct *FileInfo)
{
	BYTE *buffer;
	DWORD tempclust;
	DWORD sector;
	unsigned int cnt;
	unsigned int offset;
//	unsigned char i;
	struct direntry *item = 0;
	if(cluster==0 && FAT32_Enable==0)// root directory
	{
		buffer=malloc(512);//apply memory
		if(buffer==0)return 1;//if failed
		for(cnt=0;cnt<RootDirSectors;cnt++)
		{
			if(FAT_ReadSector(FirstDirSector+cnt,buffer)){free(buffer);return 1;}
			for(offset=0;offset<512;offset+=32)
			{
				item=(struct direntry *)(&buffer[offset]);
				if((item->deName[0] != 0x00) && (item->deName[0] != 0xe5) && (item->deAttributes != 0x0f))
				{
					//return the parameter of the item
					FileInfo->StartCluster = item->deStartCluster + (((unsigned long)item->deHighClust)<<16);//don't care
					FileInfo->Size         = item->deFileSize;
					FileInfo->Attr         = item->deAttributes;
					FileInfo->Sector       = FirstDirSector+cnt;
					FileInfo->Offset       = offset;
					free(buffer);
					return 0;
				}
			}
		}
		free(buffer);//release
	}
	else//other folders
	{
		tempclust=cluster;
		while(1)
		{
			sector=(DWORD)FirstDataSector+(DWORD)(tempclust-2)*(DWORD)SectorsPerClust;//calculate the actual sector number
			buffer=malloc(512);//apply memory
			if(buffer==0)return 1;//if failed
			for(cnt=0;cnt<SectorsPerClust;cnt++)
			{
				if(FAT_ReadSector(sector+cnt,buffer)){free(buffer);return 1;}
				for(offset=0;offset<512;offset+=32)
				{
					item=(struct direntry *)(&buffer[offset]);
					if((item->deName[0] != 0x2e) && (item->deName[0] != 0x00) && (item->deName[0] != 0xe5) & (item->deAttributes != 0x0f))
					{
						FileInfo->StartCluster = item->deStartCluster + (((unsigned long)item->deHighClust)<<16);//don't care
						FileInfo->Size         = item->deFileSize;
						FileInfo->Attr         = item->deAttributes;
						FileInfo->Sector       = sector+cnt;
						FileInfo->Offset       = offset;
						free(buffer);
						return 0;
					}
				}
			}
			free(buffer);//release
			tempclust=FAT_NextCluster(tempclust);//next cluster
			if((FAT32_Enable == 0 && tempclust == 0xffff) || tempclust == 0x0ffffff8 || tempclust == 0x0fffffff)break;
		}
	}
	return 1;
}

//修改FAT表中響應(yīng)的項(xiàng)
//modify the fat table item with "val","cluster" specify the location
unsigned char FAT_ModifyFAT(unsigned long cluster,unsigned long val)
{
	BYTE buffer[512];
	DWORD sector;
	DWORD offset;
	if(FAT32_Enable)offset = cluster/128;
	else            offset = cluster/256;

	sector=FirstFATSector+offset;//calculate the actual sector
	if(FAT_ReadSector(sector,buffer))return 1;//read fat table

	if(FAT32_Enable)
	{
		offset=cluster%128;
		offset<<=2;
		buffer[offset+3]=val>>24;
		buffer[offset+2]=val>>16;
		buffer[offset+1]=val>>8;
		buffer[offset]=val;
	}
	else
	{
		offset=cluster%256;//find the position
		offset<<=1;
		buffer[offset+1] = val>>8;
		buffer[offset]   = val;
	}
	//sector=buffer[offset+1];
//	sector<<=8;
	//sector+=buffer[offset];
	if(FAT_WriteSector(sector,buffer))return 1;//write the first fat table
	if(FAT_WriteSector(sector+FATsectors,buffer))return 1;//write the second fat table
	return 0;//return the value
}

// make a dir
unsigned char FAT_MkDir(BYTE * dir)
{
	BYTE name[11];
	BYTE *p=dir;
	BYTE deep=0;
	WORD i,j;
	DWORD cluster=0;
	DWORD lastcluster;//cluster number of last directory
	BYTE *buffer;
	DWORD sector;
	struct direntry *item;
	if(FAT32_Enable)cluster=FirstDirClust;
	if(*p != '\\')return 1;//invalid path
	while(*p)
	{
		if(*p == '\\')
		{
			deep++;//the deepth of the path
		}
		p++;
	}
	p=dir;
	for(i=0;i<deep-1;i++)
	{
		p++;
		for(j=0;j<11;j++)name[j]=0x20;
		j=0;
		while(*p != '\\')
		{
			if((*p) >= 'a' && (*p) <= 'z')name[j] = (*p++)-0x20;
			else name[j] = *p++;
			j++;
		}
		if(FAT_FindItem(cluster,name, &FileInfo))return 1;//find the location of each directory
		cluster = FileInfo.StartCluster;//point to next directory
	}
	p++;
	for(j=0;j<11;j++)name[j]=0x20;
	j=0;
	while(*p)
	{
		if(*p>='a' && *p<='z')name[j]=(*p++)-0x20;
		else name[j]=*p++;
		j++;
	}
	lastcluster=cluster;//save as last directory
	cluster=FAT_FindFreeCluster();//find a unused cluster
	if(cluster==1)return 1;//error
	if(FAT_FindFreeItem(lastcluster,&FileInfo))return 1;//find a unused item
	buffer=malloc(512);
	if(buffer==0)return 1;
	if(FAT_ReadSector(FileInfo.Sector,buffer)){free(buffer);return 1;}//read the sector which the item is in
	item=(struct direntry *)(&buffer[FileInfo.Offset]);//pointer convert

	for(j=0;j<8;j++)item->deName[j] = name[j];
	for(j=0;j<3;j++)item->deExtension[j] = 0x20;
	item->deAttributes = ATTR_DIRECTORY;
	item->deLowerCase = LCASE_BASE | LCASE_EXT;
	item->deCHundredth = 0x00;
	item->deCTime[0] = 0x00;
	item->deCTime[1] = 0x60;
	item->deCDate[0] = 0x5c;
	item->deCDate[1] = 0x09;
	item->deADate[0] = 0x8e;
	item->deADate[1] = 0x35;
	item->deHighClust = cluster>>16;
	item->deMTime[0] = 0x00;
	item->deMTime[1] = 0x60;
	item->deMDate[0] = 0x50;
	item->deMDate[1] = 0x0a;
	item->deStartCluster = cluster;
	item->deFileSize = 0;
	if(FAT_WriteSector(FileInfo.Sector,buffer)){free(buffer);return 1;}//write the item

	for(j=0;j<512;j++)buffer[j]=0x00;
	sector=(DWORD)FirstDataSector+(DWORD)(cluster-2)*(DWORD)SectorsPerClust;
	for(i=0;i<SectorsPerClust;i++)
	{
		if(FAT_WriteSector(sector+i,buffer)){free(buffer);return 1;}//clear the data in the directory
	}

	//create "." directory
	item=(struct direntry *)(&buffer[0]);
	item->deName[0] = '.';
	for(j=1;j<8;j++)item->deName[j] = 0x20;
	for(j=0;j<3;j++)item->deExtension[j] = 0x20;
	item->deAttributes = ATTR_DIRECTORY;
	item->deLowerCase = LCASE_BASE | LCASE_EXT;
	item->deCHundredth = 0x00;
	item->deCTime[0] = 0x00;
	item->deCTime[1] = 0x60;
	item->deCDate[0] = 0x5c;
	item->deCDate[1] = 0x09;
	item->deADate[0] = 0x8e;
	item->deADate[1] = 0x35;
	item->deHighClust = cluster>>16;
	item->deMTime[0] = 0x00;
	item->deMTime[1] = 0x60;
	item->deMDate[0] = 0x50;
	item->deMDate[1] = 0x0a;
	item->deStartCluster = cluster;//the directory itself
	item->deFileSize = 0;

	//creat ".." directory
	item=(struct direntry *)(&buffer[32]);
	item->deName[0] = '.';
	item->deName[1] = '.';
	for(j=2;j<8;j++)item->deName[j] = 0x20;
	for(j=0;j<3;j++)item->deExtension[j] = 0x20;//no extention
	item->deAttributes = ATTR_DIRECTORY;//directory
	item->deLowerCase = LCASE_BASE | LCASE_EXT;
	item->deCHundredth = 0x00;
	item->deCTime[0] = 0x00;
	item->deCTime[1] = 0x60;
	item->deCDate[0] = 0x5c;
	item->deCDate[1] = 0x09;
	item->deADate[0] = 0x8e;
	item->deADate[1] = 0x35;
	item->deHighClust = lastcluster>>16;
	item->deMTime[0] = 0x00;
	item->deMTime[1] = 0x60;
	item->deMDate[0] = 0x50;
	item->deMDate[1] = 0x0a;
	item->deStartCluster = lastcluster;//last directory
	item->deFileSize = 0;

	if(FAT_WriteSector(sector,buffer)){free(buffer);return 1;}//write the data
	free(buffer);
	if(FAT32_Enable)
	{
		if(FAT_ModifyFAT(cluster,0x0fffffff))return 1;//modify the fat table to sign that the cluster was used 
	}
	else
	{
		if(FAT_ModifyFAT(cluster,0xffff))return 1;//modify the fat table to sign that the cluster was used 
	}
	return 0;//done
}

// remove a directory
unsigned char FAT_RmDir(BYTE * dir)
{
	if(FAT_OpenDir(dir)==0)return 1;//find the directory
	if(FAT_DelItem(&FileInfo))return 1;//delete it
	return 0;
}

// creat a file, for convenience we designate the size
// return the start sector of the new file
unsigned long FAT_Create(BYTE * dir,unsigned long size)
{
	BYTE name[11];
	BYTE *p=dir;
	BYTE deep=0;
	BYTE i,j;
	DWORD cluster=0;
	BYTE *buffer;
	//WORD sector;
	struct direntry *item;
	if(FAT32_Enable)cluster=FirstDirClust;
	if(*p != '\\')return 1;//invalid path
	while(*p)
	{
		if(*p == '\\')
		{
			deep++;
		}
		p++;
	}
	p=dir;
	for(i=0;i<deep-1;i++)
	{
		p++;
		for(j=0;j<11;j++)name[j]=0x20;
		j=0;
		while(*p != '\\')
		{
			if((*p) >= 'a' && (*p) <= 'z')name[j] = (*p++)-0x20;
			else name[j] = *p++;
			j++;
		}
		if(FAT_FindItem(cluster,name, &FileInfo))return 1;
		cluster = FileInfo.StartCluster;
	}
	p++;
	for(j=0;j<11;j++)name[j]=0x20;
	j=0;
	while(*p != '.')
	{
		if(*p>='a' && *p<='z')name[j]=(*p++)-0x20;
		else name[j]=*p++;
		j++;
	}
	j=8;
	p++;
	while(*p)
	{
		if(*p>='a' && *p<='z')name[j]=(*p++)-0x20;
		else name[j]=*p++;
		j++;
	}


	if(FAT_FindFreeItem(cluster,&FileInfo))return 1;
	cluster = FAT_FindFreeCluster();
	if(cluster==1)return 1;
	buffer=malloc(512);
	if(buffer==0)return 1;
	if(FAT_ReadSector(FileInfo.Sector,buffer)){free(buffer);return 1;}
	item=(struct direntry *)(&buffer[FileInfo.Offset]);

	for(j=0;j<8;j++)item->deName[j] = name[j];
	for(j=0;j<3;j++)item->deExtension[j] = name[8+j];
	item->deAttributes = ATTR_ARCHIVE;//file
	item->deLowerCase = LCASE_BASE | LCASE_EXT;
	item->deCHundredth = 0x00;
	item->deCTime[0] = 0x00;
	item->deCTime[1] = 0x60;
	item->deCDate[0] = 0x5c;
	item->deCDate[1] = 0x09;
	item->deADate[0] = 0x8e;
	item->deADate[1] = 0x35;
	item->deHighClust = cluster>>16;
	item->deMTime[0] = 0x00;
	item->deMTime[1] = 0x60;
	item->deMDate[0] = 0x50;
	item->deMDate[1] = 0x0a;
	item->deStartCluster = cluster;//the cluster number the file was stored
	item->deFileSize = size;//the file size
	if(FAT_WriteSector(FileInfo.Sector,buffer)){free(buffer);return 1;}//write the item
	free(buffer);
	if(FAT32_Enable)
	{
		if(FAT_ModifyFAT(cluster,0x0fffffff))return 1;//modify the fat table to sign that the cluster was used 
	}
	else
	{
		if(FAT_ModifyFAT(cluster,0xffff))return 1;//modify the fat table
	}
	return cluster;//reutn the first cluster number
}

// find the location with the given path
unsigned long FAT_Open(BYTE * dir)
{
	BYTE name[11];
	BYTE *p=dir;
	BYTE deep=0;
	BYTE i,j;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品综合久久久久久8888| 欧美极品美女视频| 亚洲成人黄色影院| 国产精品综合一区二区| 国产精品一区二区在线观看不卡| 欧美一级二级三级乱码| 蜜臀av一区二区在线免费观看 | 欧美日韩免费一区二区三区视频| 亚洲精品国产a| 欧美日韩国产经典色站一区二区三区| 午夜精品爽啪视频| 日韩欧美激情在线| 国产精品一级黄| 亚洲免费观看在线观看| 678五月天丁香亚洲综合网| 免费在线看一区| 久久精品一区蜜桃臀影院| 成人手机电影网| 亚洲愉拍自拍另类高清精品| 91精品国产全国免费观看| 国产最新精品精品你懂的| 中文字幕综合网| 欧美顶级少妇做爰| 国产成人精品影视| 一二三四社区欧美黄| 精品嫩草影院久久| 99亚偷拍自图区亚洲| 天天色 色综合| 国产欧美日韩中文久久| 在线精品视频一区二区三四| 麻豆精品视频在线| 最新不卡av在线| 日韩情涩欧美日韩视频| 91原创在线视频| 久久精品国产免费| 依依成人综合视频| 26uuu久久综合| 欧美日韩免费一区二区三区| 国产精品亚洲视频| 日韩黄色免费网站| 国产精品日产欧美久久久久| 日韩欧美亚洲一区二区| 色天使久久综合网天天| 国产一区二区精品在线观看| 五月综合激情日本mⅴ| 国产欧美视频一区二区三区| 欧美日本在线一区| av一二三不卡影片| 久久99久久99| 天天综合网天天综合色| 亚洲欧洲综合另类在线| 久久综合给合久久狠狠狠97色69| 欧美色欧美亚洲另类二区| 成人精品视频一区| 久久97超碰国产精品超碰| 亚洲一区二区三区影院| 中文字幕亚洲在| 国产日韩欧美精品综合| 69av一区二区三区| 日本久久精品电影| 成人精品高清在线| 国产尤物一区二区在线| 舔着乳尖日韩一区| 亚洲精品高清视频在线观看| 一色桃子久久精品亚洲| 久久久久久亚洲综合| 欧美一卡2卡三卡4卡5免费| 欧美日韩一区三区| 在线观看网站黄不卡| 91小视频免费观看| 97久久精品人人爽人人爽蜜臀| 国产成人午夜高潮毛片| 国产精品自拍在线| 国内精品在线播放| 国产一区二区伦理片| 国产在线播放一区| 国产一区二区三区精品视频| 精品系列免费在线观看| 美女www一区二区| 另类小说欧美激情| 美女任你摸久久| 激情久久五月天| 国产一区二三区好的| 韩国欧美国产1区| 国产麻豆视频一区| 国产在线播精品第三| 国产精品1区2区| 国产成人精品免费| 成人免费观看视频| 99精品国产热久久91蜜凸| 99精品一区二区三区| aaa国产一区| 欧美亚洲自拍偷拍| 欧美日韩精品欧美日韩精品一 | 色先锋资源久久综合| 一本大道久久a久久综合| 色婷婷综合久久久久中文一区二区 | 国内精品在线播放| 国产69精品久久99不卡| 99这里只有久久精品视频| 色噜噜夜夜夜综合网| 欧美亚州韩日在线看免费版国语版| 91国偷自产一区二区开放时间 | 色香蕉成人二区免费| 欧美日韩中文字幕精品| 91 com成人网| 久久精品免费在线观看| 中文一区在线播放| 亚洲一区二区偷拍精品| 琪琪久久久久日韩精品| 国产在线看一区| 一本大道久久a久久精品综合| 欧美日韩国产大片| 2023国产精品自拍| 1000精品久久久久久久久| 亚洲午夜久久久久| 韩国午夜理伦三级不卡影院| 色综合久久久久久久久| 日韩一区二区电影| 国产精品麻豆欧美日韩ww| 亚洲码国产岛国毛片在线| 日本午夜精品一区二区三区电影| 国产精品一卡二卡在线观看| 日本国产一区二区| 亚洲精品一区二区三区影院| 一区二区三区在线观看网站| 韩日av一区二区| 欧美怡红院视频| 国产亚洲精品超碰| 天天av天天翘天天综合网色鬼国产 | 91免费版pro下载短视频| 欧美一区二区三区系列电影| 亚洲人成在线观看一区二区| 久久99热这里只有精品| 91麻豆国产香蕉久久精品| 欧美精品一区二区久久婷婷| 亚洲国产日韩综合久久精品| 国产91在线观看| 日韩午夜精品电影| 亚洲国产欧美在线人成| 成人深夜在线观看| 欧美精品一区二区在线观看| 亚洲成人动漫在线观看| 本田岬高潮一区二区三区| 精品国精品国产| 天天综合天天做天天综合| 91片在线免费观看| 欧美激情中文字幕| 国产一区二区主播在线| 在线电影院国产精品| 亚洲综合一区在线| 成人免费看的视频| wwwwxxxxx欧美| 美国十次综合导航| 欧美高清hd18日本| 一区二区三区四区国产精品| 北条麻妃一区二区三区| 久久精品亚洲精品国产欧美| 九九**精品视频免费播放| 欧美日韩视频第一区| 亚洲最大成人网4388xx| 色综合天天性综合| 国产精品麻豆一区二区| 国产suv精品一区二区6| 久久久激情视频| 国产成人福利片| 欧美激情在线看| 成人三级伦理片| 国产精品国产三级国产a| 国产精品一区二区久久不卡| 国产亚洲一区二区三区| 国产一区二区三区电影在线观看 | 中文一区二区在线观看| 国产91精品免费| 18成人在线观看| 91成人国产精品| 性久久久久久久| 91精品国产综合久久久久久久久久 | 欧美激情一区二区三区不卡| 粉嫩av一区二区三区在线播放| 久久久www成人免费毛片麻豆 | 免费在线视频一区| 日韩免费视频一区二区| 久久99精品久久只有精品| 欧美大度的电影原声| 精品一区二区在线免费观看| 久久久www免费人成精品| 国产成人精品免费看| 一区在线观看视频| 91国产丝袜在线播放| 天天综合网 天天综合色| 日韩免费看的电影| 国产91对白在线观看九色| 亚洲欧美日韩久久精品| 欧美亚洲综合一区| 毛片一区二区三区| 国产精品私房写真福利视频| 91久久精品国产91性色tv| 午夜日韩在线观看| 精品区一区二区|