📄 dirsearchbrowse.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 + -