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

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

?? fat_file.c

?? fat16文件系統源碼。需要的請下
?? C
?? 第 1 頁 / 共 3 頁
字號:
  		old_cluster = new_cluster;

  		if (index == nb_frag)
  		{ /* end of chain reached */
   		 	/* last fragment always contains a single cluster */
    		chain[nb_frag].number = 0;          /* end of chain marker */
    		fat_last_clust_index = nb_frag;
    		return  KO;                         /* file too much fragmented */
  		}
  		else
  		{
    		/* read new entry */
      		//((Byte *)&new_cluster)[1]= gl_buffer[0+fat_buf_count];
	  		//((Byte *)&new_cluster)[0]= gl_buffer[1+fat_buf_count];
	  		
	  		new_cluster = fat_U8_to_U16_LH(gl_buffer[fat_buf_count], gl_buffer[fat_buf_count + 1]);
  		}
	}	

	fat_last_clust_index = index;
//	fat_get_clusters_end(chain,index);
	return OK;
}
#endif //COMPILE_FAT_16



//////////////////////////////////////////////////////////////////////////////////
//
//
//
//
//
//////////////////////////////////////////////////////////////////////////////////
byte fat_get_clusters (fat_st_clust_chain  *chain, Byte nb_frag)
{
	if(fat_type_id == FAT_IS_16)
	{
        #if COMPILE_FAT_16 == TRUE
		if(fat16_get_clusters (chain,  nb_frag) == KO)
			return KO;	
        #endif
	}
	else if(fat_type_id == FAT_IS_12)
	{
        #if COMPILE_FAT_12 == TRUE	
	    if(fat12_get_clusters (chain,  nb_frag) == KO)
			return KO;	
        #endif
	}
	else if(fat_type_id == FAT_IS_32)
	{
        #if COMPILE_FAT_32 == TRUE
		if(fat32_get_clusters (chain,  nb_frag) == KO)
			return KO;
        #endif
	}

  	phy_read_close();
  	/* end of file: last fragment must always contain a single cluster */
  	if (chain[fat_last_clust_index].number == 1)
  	{ /* last cluster is the current one */
 //   	fat_last_clust_index = index;
    	chain[fat_last_clust_index].number = 0; /* end of chain marker */
  	}
  	else
  	{ 	
    	chain[fat_last_clust_index ].number--;
		fat_last_clust_index++;  // = index + 1;
    	chain[fat_last_clust_index].cluster.l = chain[fat_last_clust_index - 1].cluster.l + chain[fat_last_clust_index - 1].number;
    	chain[fat_last_clust_index].number = 0; /* end of chain marker */
  	}

  	return OK;
}

/*F**************************************************************************
* NAME: fat_fopen
*----------------------------------------------------------------------------
* PARAMS:
*   mode: READ:   open file for read
*         WRITE:  open file for write
* return:
*   - OK: file opened
*   - KO: file not opened: - file is empty
*                          - low level read error
*----------------------------------------------------------------------------
* PURPOSE:
*   Open the file in read or write mode
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
Byte fat_fopen (Byte mode)
{
  	fat_sector_flag = 0;
  	fat_nb_clust = 0 ;
  	if (mode == FILE_READ)
  	{
    	if (fat_cache.current.size.l == 0)
    	{
      		return KO;                            /* file empty */
    	}
    	else
    	{
      		fat_fchain_nb_clust = 0;              /* start on first contiguous cl */
      		fat_fclust_byte_count = 0;            /* byte 0 of cluster */
      		fat_fchain_index = 0;           /* reset the allocation list variable */
            
      		/* get file allocation list */
      		fat_get_clusters(fclusters, MAX_FILE_FRAGMENT_NUMBER);
  
      		/* seek to the beginning of the file */
      		fat_open_mode = FILE_READ;
		}
  	}
 	return  OK;
}

/*F**************************************************************************
* NAME: fat_fclose
*----------------------------------------------------------------------------
* PURPOSE:
*   Close opened file
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void fat_fclose (void)
{
    if (fat_open_mode == FILE_READ)
    {
        phy_read_close();                      /* close reading */
    }
    else
    {
    #if COMPILE_FAT_WRITE == TRUE
      	fat_fclust_byte_count=0;
	  	flag_end_disk_file = 0;
        fat_open_mode = FILE_READ;
	 	fat_file_size.l = fat_current_file_size;
	 	if(fat_current_file_size == 0)
	    	return ;
	 	else 
	 	{
		 	if(fat_file_size.l > 0x6400000)
		    	fat_file_size.l = 0x6400000;
	 	}

	 	fat_update_fats(FALSE,&fclusters);            /* Update entry and fat */ 
	 	fat_create_file_name();    
    #endif//COMPILE_FAT_WRITE     
    }
}



/*F**************************************************************************
* NAME: fat_fgetsector
*----------------------------------------------------------------------------
* return:
*   page read
*----------------------------------------------------------------------------
* PURPOSE:
*   Read one page from file
*----------------------------------------------------------------------------
* NOTE:
*   As this function is called very often it must be short and optimized
*   in execution time
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void fat_fgetsector (void)
{
  	Uint32 sectornum;
  	
  	if((fat_nb_clust % fat_cluster_size) == 0)
  	{
		fat_nb_clust = 0;
		/* extract if necessary the next cluster from the allocation list */
		if ((fclusters[fat_fchain_index].number == fat_fchain_nb_clust)&&(fclusters[0].number != 0))
		{ /* new fragment */
			fat_fchain_index++;
			fat_fchain_nb_clust = 1;
	        //sectornum = fat_ptr_data + ((fclusters[fat_fchain_index].cluster.l) * fat_cluster_size);
			if(fat_type_id == FAT_IS_32)
			{
				sectornum = fat_ptr_data + ((fclusters[fat_fchain_index].cluster.l) * fat_cluster_size);
			}
			else
			{
				sectornum = fat_ptr_data + ((fclusters[fat_fchain_index].cluster.w[0]) * ((Uint32)fat_cluster_size));
			}                                                             /////////w[1]///////////////
			phy_read_open(sectornum);
		}
		else
		{ /* not new fragment */
            if((fat_fchain_index == 0)&&(fat_fchain_nb_clust == 0))
			{
			    //sectornum = fat_ptr_data + (fclusters[fat_fchain_index].cluster.l * fat_cluster_size);
				if(fat_type_id == FAT_IS_32)
				{
					sectornum = fat_ptr_data + ((fclusters[fat_fchain_index].cluster.l) * fat_cluster_size);
				}
				else
				{
					sectornum = fat_ptr_data + ((fclusters[fat_fchain_index].cluster.w[0]) * ((Uint32)fat_cluster_size));
				}                                                            ////////////w[1]////////////////
			  	phy_read_open(sectornum);
			}
			fat_fchain_nb_clust++;                /* one more cluster read */
		}
  	}
  	phy_read_sector();
  	fat_nb_clust ++;
  	fat_fclust_byte_count += fat_sector_size;                  /* one more byte read */     
}


/*F**************************************************************************
* NAME: fat_feof
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*   Return the file end flag
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
Byte fat_feof (void)
{
  	if (fat_fchain_index == fat_last_clust_index)
  	{
    	if (fat_open_mode == FILE_READ)
        	return (fat_fclust_byte_count >= (fat_cache.current.size.l ));
    	else
        	return flag_end_disk_file;
  	}
  	else
  	{	
    	return FALSE;
  	}
}



/*F**************************************************************************
* NAME: fat_fseek_abs
*----------------------------------------------------------------------------
* PARAMS:
*   offset: absolute seek offset in file
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*   Move ahead file read pointer of an openned file
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void fat_fseek_abs (Uint32 offset)
{
	 Uint16   cluster_offset;                    /* offset size in clusters */
	 Byte    index;

	cluster_offset = offset / (((Uint32)fat_sector_size) * fat_cluster_size);
	index = 0;

	//fat_nb_clust = cluster_offset % fat_cluster_size;
	
	while(cluster_offset > fclusters[index].number)
	{
		cluster_offset -= fclusters[index].number;
		index++;
	}

	/* init file byte counter */
	fat_fclust_byte_count = offset;

	/* set the allocation list variable */
  	fat_fchain_nb_clust = cluster_offset;
	fat_fchain_index = index;
	fat_nb_clust = (offset/fat_sector_size) % fat_cluster_size ;

	if(fat_type_id != FAT_IS_32)
	{
		fclusters[index].cluster.w[0] = 0; //w[1]////////////////////////////////////BIG LITTLE ENDIAN
	}

	phy_read_open(((Uint32)(fclusters[index].cluster.l + cluster_offset) * fat_cluster_size)
                   + (offset / fat_sector_size) % fat_cluster_size + fat_ptr_data);
	
}



/*F**************************************************************************
* NAME: fat_goto_next
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*   - OK: next file available
*   - KO: last file reached
*   - KO: low_level memory error
*----------------------------------------------------------------------------
* PURPOSE:
*   Fetch the next dir/file info in cache
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/ 

Byte fat_goto_next (void)
{
  	if(fat_dir_list_index >= (fat_dir_list_last - 1))
      	return KO;
  	fat_dir_list_index++;
  	fat_scan_dir(FALSE);

	//fat_save_file_info(SEARCH_FILE);

    if (fat_dir_seek(((Uint32)fat_dir_all_count) * DIR_SIZE) == OK)
    {
      	fat_get_dir_entry(&fat_cache.current);// update current file info 
      	return OK;
    }
    else
	{
      	return KO;                            // low level error 
	}
}

/*F**************************************************************************
* NAME: fat_goto_prev
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*   - OK: previous file available
*   - KO: first file reached
*   - KO: low_level memory error
*----------------------------------------------------------------------------
* PURPOSE:
*   Fetch the previous directory info in cache
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/ 

Byte fat_goto_prev (void)
{
	Byte min;
  
  	if ((dir_is_root == FALSE)&&((fat_global_id & FILE_DIR) == FILE_DIR))
     	min = 2;
  	else
     	min = 0;

  	if(fat_dir_list_index <= min)
      	return KO;

    fat_dir_list_index--;
	fat_scan_dir(FALSE);

	//fat_save_file_info(SEARCH_FILE);
       
    if (fat_dir_seek(((Uint32)fat_dir_all_count) * DIR_SIZE) == OK)
    { // go to previous file 
      	fat_get_dir_entry(&fat_cache.current);// update current file info 
      	return OK;
    }
    else
      	return KO;                            // low level error 
}

/*F**************************************************************************
* NAME: fat_goto_last
*----------------------------------------------------------------------------
* return:
*   OK: last file available
*   KO: low level error
*----------------------------------------------------------------------------
* PURPOSE:
*   Fetch the last directory info in cache
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/ 

Byte fat_goto_last (void)
{
  	if(fat_dir_list_last == 0)
      	return KO;

  	fat_dir_list_index = fat_dir_list_last - 1;

  	fat_scan_dir(FALSE);

	//fat_save_file_info(SEARCH_FILE);

  	if (fat_dir_seek(((Uint32)fat_dir_all_count) * DIR_SIZE) == OK)
  	{
    	fat_get_dir_entry(&fat_cache.current);
    	return OK;
  	}
  	else
    	return KO;                              // low level error
}



/*F**************************************************************************
* NAME: fat_goto_first
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*   - OK: first file found
*   - KO: low level error
*----------------------------------------------------------------------------
* PURPOSE:
*   Fetch the first directory info in cache
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/ 

Byte fat_goto_first (void)
{      
  	if((dir_is_root == FALSE)&&((fat_global_id & FILE_DIR) == FILE_DIR))
  	{ // not root dir 
    	if(fat_dir_list_last <= 2)
			return KO;
    	fat_dir_list_index = 1;                 // point ".." entry
    	if (fat_dir_seek(DIR_SIZE) == OK)
    	{
      		fat_get_dir_entry(&fat_cache.parent); // update parent dir info 
      		return fat_goto_next();               // update first file info 
    	}
   		else
      		return KO;                            // low level error 
  	}
  	else
  	{ // root diretory 
    	if(fat_dir_list_last == 0)
	    	return KO;
    	fat_dir_list_index = 0;                 // point first root entry 
		fat_scan_dir(FALSE);
	
	//	fat_save_file_info(SEARCH_FILE);

    	if (fat_dir_seek(((Uint32)fat_dir_all_count) * DIR_SIZE) == OK)
    	{
      		fat_get_dir_entry(&fat_cache.current);// update first file info       
      		return OK;
    	}
    	else
    	{
      		return KO;                            // low level error 
    	}
  	}
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.激情成人| 精品视频在线看| 91啪九色porn原创视频在线观看| 日本道在线观看一区二区| 欧美日本一区二区三区四区| 精品国产乱码久久久久久蜜臀| 欧美极品xxx| 午夜精品久久久久久久久久久| 91久久免费观看| 视频精品一区二区| 欧美精品一区二区久久婷婷| 国产精品美女久久久久久久久久久| 亚洲国产精品自拍| 国产福利一区二区三区| 欧美精品色综合| 国产精品久久国产精麻豆99网站| 日本伊人午夜精品| 欧洲在线/亚洲| 欧美国产日本韩| 久久国产生活片100| 欧美日韩一区二区欧美激情| 国产精品国产三级国产a| 国内精品写真在线观看| 欧美电影在线免费观看| 日韩伦理av电影| 另类小说综合欧美亚洲| 在线国产电影不卡| 国产精品福利在线播放| 国产精品一卡二卡在线观看| 91精品国产综合久久香蕉麻豆 | 亚洲精品欧美激情| 经典一区二区三区| 欧美日韩精品一二三区| 亚洲欧美日韩国产另类专区| 国产成人综合亚洲网站| 欧美撒尿777hd撒尿| 成人午夜在线播放| 欧美大胆人体bbbb| 婷婷丁香久久五月婷婷| 色94色欧美sute亚洲线路二| 中文幕一区二区三区久久蜜桃| 六月婷婷色综合| 欧美丰满少妇xxxxx高潮对白| 亚洲免费电影在线| 99视频超级精品| 中文字幕在线观看一区| 国产亚洲一区二区三区四区| 在线观看欧美日本| 中文字幕在线免费不卡| 国产成人99久久亚洲综合精品| 精品国产青草久久久久福利| 麻豆一区二区三| 成人美女视频在线看| 日韩精品一区二区三区视频播放| 亚洲色图制服丝袜| 99r国产精品| 国产精品不卡一区| 国产一区二区在线影院| 精品少妇一区二区三区视频免付费| 日韩av网站免费在线| 欧美三级韩国三级日本一级| 亚洲.国产.中文慕字在线| 亚洲欧美国产毛片在线| 成人黄色在线看| 国产精品视频线看| 99在线精品免费| 国产精品久久久久影视| 91在线国产福利| 亚洲精品久久久蜜桃| 在线观看一区日韩| 偷拍一区二区三区四区| 制服丝袜中文字幕亚洲| 久久精品国产亚洲5555| 国产色婷婷亚洲99精品小说| 成人精品视频一区二区三区| 国产精品久久久久久久浪潮网站 | 久久精品一区蜜桃臀影院| 国产精品18久久久久久久久久久久 | 一区二区视频在线| 欧美精品欧美精品系列| 美国精品在线观看| 中文字幕va一区二区三区| 色综合久久久久综合| 亚洲成人中文在线| 精品精品国产高清a毛片牛牛| 国产一区二区三区精品视频| 国产精品美女一区二区三区| 色婷婷精品久久二区二区蜜臀av | 国产乱码精品一区二区三| 51久久夜色精品国产麻豆| 精品系列免费在线观看| 欧美激情综合在线| 99亚偷拍自图区亚洲| 亚洲成人先锋电影| 久久综合九色综合欧美就去吻 | 日韩亚洲欧美成人一区| 国产成人在线看| 亚洲精选视频在线| 日韩一区二区不卡| 成人免费视频视频在线观看免费| 亚洲免费观看高清完整版在线观看| 欧美日韩精品专区| 国模冰冰炮一区二区| 中文字幕日韩一区| 欧美精品123区| 国产成人自拍在线| 亚洲大型综合色站| 国产欧美视频一区二区| 色婷婷综合久久久久中文一区二区 | 日韩主播视频在线| 久久精品男人天堂av| 一本大道久久精品懂色aⅴ| 青草av.久久免费一区| 日本一区二区三区四区在线视频| 91免费看`日韩一区二区| 免费久久99精品国产| 中文字幕亚洲一区二区va在线| 欧美人狂配大交3d怪物一区| 九一九一国产精品| 亚洲欧洲在线观看av| 日韩欧美专区在线| 91国产丝袜在线播放| 久久电影网站中文字幕 | 日韩三级精品电影久久久| 成人黄色电影在线| 日本不卡一二三| 亚洲视频电影在线| 日韩免费看网站| 91激情五月电影| 国产1区2区3区精品美女| 天天av天天翘天天综合网| 欧美激情综合在线| 日韩欧美高清在线| 日本黄色一区二区| 国产成人免费高清| 久久精品久久精品| 午夜在线电影亚洲一区| 日本一二三不卡| 日韩一区二区免费视频| 成人高清视频免费观看| 紧缚奴在线一区二区三区| 亚洲18女电影在线观看| 亚洲激情在线激情| 国产精品美女一区二区| 久久久精品tv| 日韩欧美亚洲国产精品字幕久久久| 91蜜桃免费观看视频| 成人午夜免费av| 久久99久国产精品黄毛片色诱| 亚洲主播在线播放| 久久九九久精品国产免费直播| 在线综合视频播放| 欧美无砖专区一中文字| 色偷偷成人一区二区三区91| 成人av电影在线观看| 欧美色涩在线第一页| 91丨porny丨国产| 高清在线观看日韩| 国产传媒一区在线| 国产精品99久久久久久有的能看| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲一区二区av电影| 国产精品毛片a∨一区二区三区| 久久先锋影音av| 欧美一区二区久久久| 欧美疯狂做受xxxx富婆| 欧美精品v国产精品v日韩精品| 欧美日韩精品一区二区天天拍小说 | 丝袜诱惑亚洲看片| 午夜不卡在线视频| 久久精品国产77777蜜臀| 国产酒店精品激情| 国产一区二区三区四| 成人综合激情网| 91蜜桃免费观看视频| 欧美人牲a欧美精品| 日韩一级黄色大片| 久久精品日产第一区二区三区高清版 | 2021国产精品久久精品| 中文在线免费一区三区高中清不卡| 国产精品美女久久久久av爽李琼| 亚洲激情图片一区| 日韩av中文在线观看| 国产精品一区二区三区网站| 成av人片一区二区| 欧美综合在线视频| 日韩亚洲欧美综合| 国产欧美一区二区精品婷婷| 亚洲免费av高清| 青青草原综合久久大伊人精品 | 欧美色成人综合| 欧美不卡一区二区三区| 国产精品国产精品国产专区不片 | 国产精品国产三级国产三级人妇| 亚洲一级二级三级在线免费观看| 蜜臀精品久久久久久蜜臀| 成人精品视频一区| 欧美乱熟臀69xxxxxx| 久久久久久久综合日本| 亚洲一区在线免费观看|