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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? apfs_fat32_misc.c

?? 一個可以在開發板上運行的fat文件系統,是在windows平臺下開發的,是學習文件系統的好幫手
?? C
字號:
//-----------------------------------------------------------------------------
// This file is part of AP.FS
// AP.FS is a FAT32 file system face to the embedded system,It's target is to
// support the portable storage device such as SD Card,TF Card or USB Disc 's
// file system.
// please login www.another-prj.com to get more details.
//																caiyuqing
//																2008-1-8
//-----------------------------------------------------------------------------
#include "apfs_fat32_definitions.h"
#include "apfs_fat32_misc.h"
#include "apfs_fat32_base.h"

struct fat32_long_file_name fat32_long_file_name_list;

//-----------------------------------------------------------------------------
// apfs_fat32_clear_entry_cache: Clear long file name cache
//-----------------------------------------------------------------------------
void apfs_fat32_clear_entry_cache(BOOL clr)
{
	int i;
	fat32_long_file_name_list.no_of_strings = 0;

	// Zero out buffer also
	if(clr)
	{
		for(i=0; i < MAX_LONGFILENAME_ENTRIES; i++)
		{
			memset(fat32_long_file_name_list.string[i], 0x00, 13);
		}
	}
}
//-----------------------------------------------------------------------------
// apfs_fat32_fill_entry_cache: Function extracts long file name text from sector 
// at a specific offset
//-----------------------------------------------------------------------------
void apfs_fat32_fill_entry_cache(BYTE *entry)
{
	BYTE index, i;
	index = entry[0] & 0x0F;//LDIR_Ord

	if(fat32_long_file_name_list.no_of_strings == 0) 
	{
		fat32_long_file_name_list.no_of_strings = index;
	}

	fat32_long_file_name_list.string[index-1][0] = entry[1];
	fat32_long_file_name_list.string[index-1][1] = entry[3];
	fat32_long_file_name_list.string[index-1][2] = entry[5];
	fat32_long_file_name_list.string[index-1][3] = entry[7];
	fat32_long_file_name_list.string[index-1][4] = entry[9];
	fat32_long_file_name_list.string[index-1][5] = entry[0x0E];
	fat32_long_file_name_list.string[index-1][6] = entry[0x10];
	fat32_long_file_name_list.string[index-1][7] = entry[0x12];
	fat32_long_file_name_list.string[index-1][8] = entry[0x14];
	fat32_long_file_name_list.string[index-1][9] = entry[0x16];
	fat32_long_file_name_list.string[index-1][10] = entry[0x18];		 		  		  	 		 
	fat32_long_file_name_list.string[index-1][11] = entry[0x1C];
	fat32_long_file_name_list.string[index-1][12] = entry[0x1E];

	for(i=0; i<13; i++)
	{
		if(fat32_long_file_name_list.string[index-1][i] == 0xFF)
		{
			fat32_long_file_name_list.string[index-1][i] = 0x20; // Replace with spaces
		}
	}
}
//-----------------------------------------------------------------------------
// apfs_fat32_dump_entry_cache: Get a copy of the long filename to into a string buffer
//-----------------------------------------------------------------------------
void apfs_fat32_dump_entry_cache(BYTE *str)
{
	int i,index;
	int count = 0;

	// Copy long filename from LFN Cache into a string
	for(index=0; index < fat32_long_file_name_list.no_of_strings; index++)
	{
		for(i = 0; i < 13; i++)
		{
			str[count++] = fat32_long_file_name_list.string[index][i];
		}
	}
	
	str[count] = '\0';
}

//-----------------------------------------------------------------------------
// apfs_fat32_entry_is_empty: Check the entry if it is empty
//-----------------------------------------------------------------------------
BOOL apfs_fat32_entry_is_empty(struct fat32_short_entry *entry)
{
	if(entry->name[0] == FILE_HEADER_DELETED)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}
//-----------------------------------------------------------------------------
// apfs_fat32_entry_is_last: Check the entry if it is the last 
// one in the cluster
//-----------------------------------------------------------------------------
BOOL apfs_fat32_entry_is_last(struct fat32_short_entry *entry)
{
	if(entry->name[0] == FILE_HEADER_BLANK)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}
//-----------------------------------------------------------------------------
// apfs_fat32_entry_is_last: Check the entry if it is the last 
// one in the cluster
//-----------------------------------------------------------------------------
BOOL apfs_fat32_entry_is_volume_id(struct fat32_short_entry *entry)
{
	if(entry->attr == FILE_ATTR_VOLUME_ID)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}
//-----------------------------------------------------------------------------
// apfs_fat32_entry_is_single_short: Check the entry if it is a single 
// short entry
//-----------------------------------------------------------------------------
BOOL apfs_fat32_entry_is_single_short(struct fat32_short_entry *entry)
{
	if((entry->attr != FILE_ATTR_LFN_TEXT) && 
		(fat32_long_file_name_list.no_of_strings == 0))
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}}
//-----------------------------------------------------------------------------
// apfs_fat32_entry_is_short_with_long: Check the entry if it is a short entry
// associat with long entry
//-----------------------------------------------------------------------------
BOOL apfs_fat32_entry_is_short_with_long(struct fat32_short_entry *entry)
{
	if((entry->attr != FILE_ATTR_LFN_TEXT) && 
		fat32_long_file_name_list.no_of_strings != 0)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}
//-----------------------------------------------------------------------------
// apfs_fat32_entry_is_long: Check the entry if it is a long entry
//-----------------------------------------------------------------------------
BOOL apfs_fat32_entry_is_long(struct fat32_short_entry *entry)
{
	if(entry->attr == FILE_ATTR_LFN_TEXT)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

//-----------------------------------------------------------------------------
// apfs_fat32_dir_entry: Returns 1 if a directory
//-----------------------------------------------------------------------------
int apfs_fat32_dir_entry(struct fat32_short_entry *entry)
{
	if(entry->attr == FILE_TYPE_DIR)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
//-----------------------------------------------------------------------------
// apfs_fat32_file_entry: Returns 1 is a file entry
//-----------------------------------------------------------------------------
int apfs_fat32_file_entry(struct fat32_short_entry *entry)
{
	if(entry->attr == FILE_TYPE_FILE) 
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
//-----------------------------------------------------------------------------
// apfs_fat32_lfn_to_entry_count:
//-----------------------------------------------------------------------------
int apfs_fat32_lfn_to_entry_count(char *filename)
{
	// 13 characters entries
	int length = (int)strlen(filename);
	int entriesRequired = length / 13;

	// Remainder
	if((length % 13) != 0)
	{
		entriesRequired++;
	}

	return entriesRequired;
}
//-----------------------------------------------------------------------------
// apfs_fat32_fill_lfn_entry:
//-----------------------------------------------------------------------------
void apfs_fat32_fill_lfn_entry(char *filename, BYTE *buffer, int entry, BYTE sfnChk)
{
	int i;
	int nameIndexes[] = {1,3,5,7,9,0x0E,0x10,0x12,0x14,0x16,0x18,0x1C,0x1E};

	// 13 characters entries
	int length = (int)strlen(filename);
	int entriesRequired = apfs_fat32_lfn_to_entry_count(filename);

	// Filename offset
	int start = entry * 13;

	// Initialise to zeros
	memset(buffer, 0x00, 32);

	// LFN entry number
	buffer[0] = (BYTE)(((entriesRequired - 1) == entry) ? (0x40|(entry + 1)) : (entry + 1));

	// LFN flag
	buffer[11] = 0x0F;

	// Checksum of short filename
	buffer[13] = sfnChk;

	// Copy to buffer
	for(i = 0; i < 13; i++)
	{
		if((start + i) < length)
		{
			buffer[nameIndexes[i]] = filename[start+i];
		}
		else if((start + i) == length)
		{
			buffer[nameIndexes[i]] = 0x00;
		}
		else
		{
			buffer[nameIndexes[i]] = 0xFF;
			buffer[nameIndexes[i] + 1] = 0xFF;
		}
	}
}
//-----------------------------------------------------------------------------
// FATMisc_Create_sfn_entry: Create the short filename directory entry
//-----------------------------------------------------------------------------
void apfs_fat32_create_sfn_entry(char *shortfilename, UINT32 size, 
							UINT32 startCluster, struct fat32_short_entry *entry,
							unsigned char attr)
{
	int i;

	// Copy short filename
	for(i = 0; i < 11; i++)
	{
		entry->name[i] = shortfilename[i];
	}
	// Unless we have a RTC we might as well set these to 1980
	entry->crt_time_tenth = 0x00;
	entry->crt_time[1] = entry->crt_time[0] = 0x00;
	entry->crt_date[1] = 0x00;
	entry->crt_date[0] = 0x20;
	entry->lst_acc_date[1] = 0x00;
	entry->lst_acc_date[0] = 0x20;
	entry->wrt_time[1] = entry->wrt_time[0] = 0x00;
	entry->wrt_date[1] = 0x00;
	entry->wrt_date[0] = 0x20;	

	entry->attr = attr;
	entry->ntres = 0x00;

	entry->fst_clus_hi = (UINT16)((startCluster>>16) & 0xFFFF);
	entry->fst_clus_lo = (UINT16)((startCluster>>0) & 0xFFFF);
	entry->file_size = size;
}
//-----------------------------------------------------------------------------
// apfs_fat32_generate_tail:
// sfn_input = Input short filename, spaced format & in upper case
// sfn_output = Output short filename with tail
//-----------------------------------------------------------------------------
BOOL apfs_fat32_generate_tail(char *sfn_output, char *sfn_input, UINT32 tailNum)
{
	int tail_chars;
	char tail_str[8];

	if(tailNum > 99999)
	{
		return FALSE;
	}
	// Convert to number
	memset(tail_str, 0x00, sizeof(tail_str)); 
	tail_str[0] = '~';
	itoa(tailNum, tail_str+1, 10);
	
	// Copy in base filename
    memcpy(sfn_output, sfn_input, 11);
	   
	// Overwrite with tail
	tail_chars = (int)strlen(tail_str);
	memcpy(sfn_output + (8 - tail_chars), tail_str, tail_chars);

	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久五月婷婷丁香社区| 国产福利一区二区| 国产福利一区在线| 欧美日韩dvd在线观看| 日韩免费观看2025年上映的电影| 亚洲一区在线观看网站| 91网站在线播放| 综合精品久久久| 精品亚洲成a人| 日韩三级av在线播放| 婷婷国产在线综合| 欧美日韩午夜在线| 亚洲精品va在线观看| 91日韩在线专区| 亚洲欧美日韩一区二区三区在线观看| 成人av第一页| 日本一区二区三级电影在线观看 | 韩国欧美国产一区| 欧美一级视频精品观看| 极品尤物av久久免费看| 国产日韩精品久久久| 成人黄色777网| 国产精品国产a级| 欧美亚洲禁片免费| 秋霞影院一区二区| 久久精品综合网| 99国产精品国产精品毛片| 国产精品福利电影一区二区三区四区 | 五月天激情综合网| 欧美电视剧免费观看| 秋霞av亚洲一区二区三| 久久伊人中文字幕| 国产一区二区三区在线观看精品| 国产精品免费观看视频| 色8久久人人97超碰香蕉987| 日韩电影免费在线观看网站| 日韩女优av电影| 国产91在线看| 亚洲成人一区在线| 欧美精品一区男女天堂| 9i看片成人免费高清| 日产精品久久久久久久性色| 国产视频一区在线观看| 色先锋久久av资源部| 久国产精品韩国三级视频| 中文字幕一区二区三区色视频| 精品视频免费在线| 国产成人无遮挡在线视频| 亚洲一区二区视频在线| 久久久九九九九| 欧美日韩午夜在线视频| 福利视频网站一区二区三区| 亚洲一区二区不卡免费| 日韩无一区二区| 91国偷自产一区二区开放时间 | 日韩国产欧美三级| 国产精品美女久久久久久久网站| 欧美日韩www| 成人综合婷婷国产精品久久蜜臀| 亚洲综合丁香婷婷六月香| 亚洲精品一区二区三区福利| 欧美午夜精品久久久久久孕妇 | 91精品国产一区二区三区香蕉| 狠狠久久亚洲欧美| 亚洲成人自拍一区| 国产精品拍天天在线| 欧美成人在线直播| 在线免费精品视频| 9i在线看片成人免费| 韩国成人精品a∨在线观看| 亚洲一二三四在线| 国产欧美一区二区三区鸳鸯浴 | 久久蜜桃av一区二区天堂| 欧美三区在线视频| 成人午夜视频福利| 青青草国产成人99久久| 亚洲国产美女搞黄色| 国产精品久久国产精麻豆99网站| 精品国产凹凸成av人导航| 欧美一卡2卡三卡4卡5免费| 色婷婷综合久久久久中文一区二区| 国产精华液一区二区三区| 日本欧美韩国一区三区| 亚洲国产综合色| 一区二区三区不卡视频在线观看| 亚洲视频电影在线| 亚洲视频小说图片| 国产女同性恋一区二区| 久久久精品免费免费| 欧美电影一区二区三区| 欧美色精品在线视频| 欧美亚洲国产bt| 在线观看国产日韩| 欧美亚洲高清一区二区三区不卡| 在线观看日韩精品| 欧美午夜电影在线播放| 在线观看免费成人| 欧美精品丝袜中出| 91精品国产色综合久久ai换脸| 欧美伊人久久久久久午夜久久久久| 91成人网在线| 欧美日韩国产片| 欧美三级在线视频| 欧美日韩在线三级| 宅男在线国产精品| 日韩美女在线视频| 久久久夜色精品亚洲| 中文字幕第一区综合| 亚洲精品乱码久久久久| 亚洲成人激情av| 免费日本视频一区| 国产成人免费视频一区| 99精品国产91久久久久久| 不卡区在线中文字幕| 欧美亚洲高清一区| 日韩精品一区二区三区在线观看| 久久久精品日韩欧美| 亚洲日本青草视频在线怡红院| 亚洲国产精品尤物yw在线观看| 日韩激情视频网站| 国内成人免费视频| 99r精品视频| 97se狠狠狠综合亚洲狠狠| 91麻豆精品视频| 7777精品伊人久久久大香线蕉超级流畅 | 色88888久久久久久影院野外| 91在线观看高清| 欧美精品v国产精品v日韩精品| 久久久久久免费| 亚洲最新视频在线播放| 久久精品国产成人一区二区三区 | 亚洲免费观看高清| 秋霞电影网一区二区| 成人国产精品免费观看| 欧美日韩国产小视频| 国产亚洲1区2区3区| 亚洲一区二区三区影院| 国产一区免费电影| 欧美日韩国产小视频在线观看| 久久久高清一区二区三区| 午夜精品123| 99国内精品久久| 精品第一国产综合精品aⅴ| 亚洲精品国久久99热| 国产一区二区在线看| 欧美人成免费网站| 国产精品初高中害羞小美女文| 亚洲观看高清完整版在线观看| 另类专区欧美蜜桃臀第一页| 日本韩国一区二区三区| 国产精品色在线| 国产一区在线观看视频| 欧美日韩免费电影| 亚洲免费观看高清完整| 国产另类ts人妖一区二区| 欧美精品一级二级| 亚洲色图另类专区| 国产精品99精品久久免费| 欧美一区二区久久| 亚洲国产婷婷综合在线精品| www.综合网.com| wwww国产精品欧美| 美国十次综合导航| 欧美日韩精品专区| 一级日本不卡的影视| 成人av影视在线观看| 久久婷婷色综合| 国产在线精品不卡| 欧美一二三在线| 天天亚洲美女在线视频| 欧美性大战久久久| 一区二区三区av电影 | 日韩久久一区二区| 国产福利视频一区二区三区| 久久久久久久久久久久久夜| 亚洲精选免费视频| 亚洲成人av资源| 亚洲激情六月丁香| 色综合久久久久| 视频一区二区三区入口| 日韩天堂在线观看| 风间由美性色一区二区三区| 国产精品每日更新| 在线日韩一区二区| 日韩高清欧美激情| 久久中文字幕电影| 不卡视频在线看| 天天色综合成人网| 久久久久久久久久久黄色| 波多野结衣中文一区| 午夜婷婷国产麻豆精品| 欧美成人在线直播| 91在线国内视频| 日本aⅴ亚洲精品中文乱码| 久久久www免费人成精品| 色噜噜狠狠成人网p站| 免费成人性网站| 国产精品久久777777| 欧美日韩精品专区| 丁香六月综合激情|