⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dirsearchbrowse.c

📁 万龙开发板的原理图和pcb图
💻 C
字号:



#include "fat_include.h"




void ListDirectory(UI32 StartCluster)
{
	UI8 i,item,index;
	UI8 tempitem=0;
	UI8 LFNIndex=0;
	UI16 recordoffset;
	UI32 x=0;
	UI16 statusreturned=0;
	  
  	FAT32.no_of_strings=0;
	FAT32.filenumber=0;
	s3c44b0x_Printf("\r\nNo. 	   Filename\r\n");
	
  
	while (statusreturned!= 1) // Do while not end of cluster chain
	{
	// Read Sector
	statusreturned = FAT32_SectorReader(StartCluster, x++);

	if (!statusreturned)
	{
	LFNIndex=0;
	for (item=0; item<=15;item++)
		{
		 recordoffset = (32*item);
 
		 // Long File Name Text Found
		 if ( FATMisc_If_LFN_TextOnly(recordoffset) )   FATMisc_cacheLFN(recordoffset);
		 	 
		 // If Invalid record found delete any long file name information collated
		 else if ( FATMisc_If_LFN_Invalid(recordoffset) ) 	FAT32.no_of_strings = 0;  

		 // Normal Entry and Long text exists 
		 else if ( FATMisc_If_LFN_Exists(recordoffset,FAT32.no_of_strings) )
		 {
 	   	      FAT32.filenumber++; //File / Dir Count
		 	  if (FATMisc_If_dir_entry(recordoffset)) s3c44b0x_Printf("\r\nDirectory ");
    		  if (FATMisc_If_file_entry(recordoffset)) s3c44b0x_Printf("\r\nFile ");

			  // Print number of file or directory
			  
			  s3c44b0x_Printf("%d -  ",FAT32.filenumber);
			  			  
			  for (index=0;index<FAT32.no_of_strings;index++)
		 	  	  for (i=0; i<13; i++)
			 	  	  s3c44b0x_putchar(FAT32.String[index][i]);
				 
			  // --- Print CLuster number
  			  if (clusterprint) s3c44b0x_Printf("    Cluster Number 0x%lx", FATMisc_ClusterReassemble(recordoffset));
		 	  FAT32.no_of_strings=0;		  
		 }
		 
		 // Normal Entry, only 8.3 Text		 
		 else if ( FATMisc_If_noLFN_SFN_Only(recordoffset) )
		 {
       		  FAT32.no_of_strings=0;
			  FAT32.filenumber++; //File / Dir Count
		 	  if (FATMisc_If_dir_entry(recordoffset)) s3c44b0x_Printf("\r\nDirectory ");
    		  if (FATMisc_If_file_entry(recordoffset)) s3c44b0x_Printf("\r\nFile ");

			  // Print number of file or directory
			  s3c44b0x_Printf("%d -  ",FAT32.filenumber);
			  
			  // Screen Print Name of file or directory
	  		  for (i=0; i<8;i++)
				{
					if ((IDE_SectorByte(i+recordoffset))!=0x20) s3c44b0x_putchar((IDE_SectorByte(i+recordoffset)));
				}
			  
			  // Dont Print dot seperator if is a directory
			  if ((IDE_SectorByte(8+recordoffset)!=0x20) && (IDE_SectorByte(9+recordoffset)!=0x20) && (IDE_SectorByte(10+recordoffset)!=0x20) ) s3c44b0x_putchar('.');

		      // Print 3 character extension
			  for (i=8; i<11;i++)
				  {
				 	if ((IDE_SectorByte(i+recordoffset))!=0x20) s3c44b0x_putchar((IDE_SectorByte(i+recordoffset)));
				  }
				  
			  // --- Print Cluster number
			  if (clusterprint) s3c44b0x_Printf("    Cluster Number 0x%lx", FATMisc_ClusterReassemble(recordoffset));
		 }
		}// end of for
	}
	}
} 

//-------------------------------------------------------------
// MatchName: This function can be improved... 
//-------------------------------------------------------------
UI32 MatchName(UI32 Cluster, char *nametofind)
{
UI8 item=0;
UI8  index=0;
UI8  i=0;
UI16 lfncount=0;
UI16 x =0;
UI32 clusterchain=0;
UI32 backupcluster=0;
UI32 recordoffset = 0;
UI32 ClustertoReturn = 0;

char LFNtoMatch[maxLFNlength];
FAT32.no_of_strings = 0;

// Main cluster following loop
while (clusterchain!=1)
	{
	// Read sector
	clusterchain = FAT32_SectorReader(Cluster, x++);

	if (!clusterchain) // If sector read was successfull
	{
		// Analyse Sector
		for (item=0; item<=15;item++)
		{
			// Create the multiplier for sector access
			recordoffset = (32*item);

			// Long File Name Text Found
			if (FATMisc_If_LFN_TextOnly(recordoffset) ) FATMisc_cacheLFN(recordoffset);

			// If Invalid record found delete any long file name information collated
			else if (FATMisc_If_LFN_Invalid(recordoffset) ) FAT32.no_of_strings = 0;  

			// Normal SFN Entry and Long text exists 
			else if (FATMisc_If_LFN_Exists(recordoffset, FAT32.no_of_strings) ) 
				{

				// Copy LFN from LFN Cache into a string
				for (index=0;index<FAT32.no_of_strings;index++)
		 	  		for (i=0; i<13; i++)
						{
						// Check string isnt to long for array
						if (lfncount<maxLFNlength) LFNtoMatch[lfncount++] = FAT32.String[index][i];
						else 
							{
							s3c44b0x_Printf("\r\nError: LFN to long for string memory");
							}
						}

				// Null terminate string
				LFNtoMatch[lfncount]='\0';

				// Compare names to see if they match
				if (FileString_CompareNames(LFNtoMatch, nametofind)) 
					{
					ClustertoReturn = FATMisc_ClusterReassemble(recordoffset);
					return (ClustertoReturn);
					}

		 			FAT32.no_of_strings=0;
					lfncount = 0;
				}

			// Normal Entry, only 8.3 Text		 
			else if (FATMisc_If_noLFN_SFN_Only(recordoffset) )
				{
       			FAT32.no_of_strings=0;
			  
				// Copy name to string
				for (i=0; i<11;i++) LFNtoMatch[lfncount++] = IDE_SectorByte(i+recordoffset);

				// Null terminate string
				LFNtoMatch[lfncount]='\0';
	  			
				// Compare names to see if they match
				if (FileString_CompareNames(LFNtoMatch, nametofind)) 
					{
					ClustertoReturn = FATMisc_ClusterReassemble(recordoffset);
					return (ClustertoReturn);
					}

		 		FAT32.no_of_strings=0;
				lfncount = 0;
				}
			} // End of if
		} // End of for loop

	} // End of while loop

return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -