📄 fat.c
字号:
}
}
}
}
}
de++;
fp.Index++;
if(de->deName[0] == 0) // 文件的最后一项
{
break;
}
}while(1);
return 0;
}
INT16U SerarchFile1(INT32U dircluster,INT16U index,INT8U num)
{
FIND_FILE_INFO fp;
WINENTRY weBuf,*we = &weBuf;
INT8U LONGNAME_BUFFER_ADDR[60]; // 保存25个字符
INT8U *LongNameBuffer = (INT8U *) LONGNAME_BUFFER_ADDR;
INT8U hasBuffer = 0;
INT16U b;
INT8U line = 0;
INT8U *p;
DIRENTRY deBuf, *de = &deBuf;
INT8U count;
INT8U i = 0;
INT16U fileNo = 0;
INT8S s1[12]="1 MP3";
INT8S s2[4];
sprintf(s2,"%-3d",num);
//INT8U s1[12]="1 MP3";
/*if(num>99)
{
s1[0] = (num / 100) + 0x30;
s1[1] = (num / 10 %10) + 0x30;
s1[2] = (num %10) + 0x30;
}
else if(num>9)
{
s1[0] = (num / 10) + 0x30;
s1[1] = (num % 10) + 0x30;
}
else
{
s1[0] = '1';
}*/
memcpy(s1,s2,3);
//------------------------- 先查找目录 --------------------------------
InitSetPath(&fp,dircluster);
ReadBlock(fp.Sector); // 读取目录表
count = sizeof(DIRENTRY);
do
{
if(!ReadNextDirEntry(&fp))
{
break;
}
//de = (DIRENTRY *)BUFFER;
//de += fp.Index;
deBuf.deName[0] = BUFFER[0 + count * fp.Index];
deBuf.deName[1] = BUFFER[1 + count * fp.Index];
deBuf.deName[2] = BUFFER[2 + count * fp.Index];
deBuf.deName[3] = BUFFER[3 + count * fp.Index];
deBuf.deName[4] = BUFFER[4 + count * fp.Index];
deBuf.deName[5] = BUFFER[5 + count * fp.Index];
deBuf.deName[6] = BUFFER[6 + count * fp.Index];
deBuf.deName[7] = BUFFER[7 + count * fp.Index];
deBuf.deExtension[0] = BUFFER[8 + count * fp.Index];
deBuf.deExtension[1] = BUFFER[9 + count * fp.Index];
deBuf.deExtension[2] = BUFFER[10 + count * fp.Index];
deBuf.deAttributes = BUFFER[11 + count * fp.Index];
deBuf.deLowerCase = BUFFER[12 + count * fp.Index];
deBuf.deCHundredth = BUFFER[13 + count * fp.Index];
deBuf.deCTime[0] = BUFFER[14 + count * fp.Index];
deBuf.deCTime[1] = BUFFER[15 + count * fp.Index];
deBuf.deCDate[0] = BUFFER[16 + count * fp.Index];
deBuf.deCDate[1] = BUFFER[17 + count * fp.Index];
deBuf.deADate[0] = BUFFER[18 + count * fp.Index];
deBuf.deADate[1] = BUFFER[19 + count * fp.Index];
deBuf.deHighClust = BUFFER[20 + count * fp.Index] | (BUFFER[21 + count * fp.Index] << 8);
deBuf.deMTime[0] = BUFFER[22 + count * fp.Index];
deBuf.deMTime[1] = BUFFER[23 + count * fp.Index];
deBuf.deMDate[0] = BUFFER[24 + count * fp.Index];
deBuf.deMDate[1] = BUFFER[25 + count * fp.Index];
deBuf.deStartCluster = BUFFER[26 + count * fp.Index] | (BUFFER[27 + count * fp.Index] << 8);
deBuf.deFileSize = BUFFER[28 + count * fp.Index] | (BUFFER[29 + count * fp.Index] << 8) | (BUFFER[30 + count * fp.Index] << 16) | (BUFFER[31 + count * fp.Index] << 24);
//if(*de->deName != 0xe5) // 找到目录或文件
if(deBuf.deName[0] != 0xe5) // 找到目录或文件
{
//if((de->deAttributes & ATTR_LONG_FILENAME) == ATTR_LONG_FILENAME)
if((deBuf.deAttributes & ATTR_LONG_FILENAME) == ATTR_LONG_FILENAME)
{
//we = (WINENTRY *) &deBuf;
weBuf.weCnt = BUFFER[0 + count * fp.Index];
weBuf.wePart1[0] = BUFFER[1 + count * fp.Index];
weBuf.wePart1[1] = BUFFER[2 + count * fp.Index];
weBuf.wePart1[2] = BUFFER[3 + count * fp.Index];
weBuf.wePart1[3] = BUFFER[4 + count * fp.Index];
weBuf.wePart1[4] = BUFFER[5 + count * fp.Index];
weBuf.wePart1[5] = BUFFER[6 + count * fp.Index];
weBuf.wePart1[6] = BUFFER[7 + count * fp.Index];
weBuf.wePart1[7] = BUFFER[8 + count * fp.Index];
weBuf.wePart1[8] = BUFFER[9 + count * fp.Index];
weBuf.wePart1[9] = BUFFER[10 + count * fp.Index];
weBuf.weAttributes = BUFFER[11 + count * fp.Index];
weBuf.weReserved1 = BUFFER[12 + count * fp.Index];
weBuf.weChksum = BUFFER[13 + count * fp.Index];
weBuf.wePart2[0] = BUFFER[14 + count * fp.Index];
weBuf.wePart2[1] = BUFFER[15 + count * fp.Index];
weBuf.wePart2[2] = BUFFER[16 + count * fp.Index];
weBuf.wePart2[3] = BUFFER[17 + count * fp.Index];
weBuf.wePart2[4] = BUFFER[18 + count * fp.Index];
weBuf.wePart2[5] = BUFFER[19 + count * fp.Index];
weBuf.wePart2[6] = BUFFER[20 + count * fp.Index];
weBuf.wePart2[7] = BUFFER[21 + count * fp.Index];
weBuf.wePart2[8] = BUFFER[22 + count * fp.Index];
weBuf.wePart2[9] = BUFFER[23 + count * fp.Index];
weBuf.wePart2[10] = BUFFER[24 + count * fp.Index];
weBuf.wePart2[11] = BUFFER[25 + count * fp.Index];
weBuf.weReserved2 = BUFFER[26 + count * fp.Index] | (BUFFER[27 + count * fp.Index] << 8);
weBuf.wePart3[0] = BUFFER[28 + count * fp.Index];
weBuf.wePart3[1] = BUFFER[29 + count * fp.Index];
weBuf.wePart3[2] = BUFFER[30 + count * fp.Index];
weBuf.wePart3[3] = BUFFER[31 + count * fp.Index];
//b = 13 * ((we->weCnt - 1) & 0x0f); // index into string
b = 13 * ((weBuf.weCnt - 1) & 0x0f); // index into string
//if(b < 50 - 13)
//{
p = &LongNameBuffer[b];
for (i=0; i<10; i++) // copy first part
{
//*p++ = we->wePart1[i];
*p++ = weBuf.wePart1[i];
}
for (i=0; i<12; i++) // second part
{
//*p++ = we->wePart2[i];
*p++ = weBuf.wePart2[i];
}
for (i=0; i<4; i++) // and third part
{
//*p++ = we->wePart3[i];
*p++ = weBuf.wePart3[i];
}
//}
//if (we->weCnt & 0x40) // in case dirnamelength is multiple of 13
if (weBuf.weCnt & 0x40) // in case dirnamelength is multiple of 13
{
*p = 0;
}
//if ((we->weCnt & 0x0f) == 1) // mark that we have a long entry
if ((weBuf.weCnt & 0x0f) == 1) // mark that we have a long entry
{
hasBuffer = 1;
}
}
else
{
if(hasBuffer)
{
hasBuffer = 0; // clear buffer
//if((de->deAttributes & ATTR_DIRECTORY) == ATTR_DIRECTORY) // is it a directory ?
if((deBuf.deAttributes & ATTR_DIRECTORY) == ATTR_DIRECTORY) // is it a directory ?
{
fileNo++;
if((fileNo >= index) && (line < 4))
{
if(WorkFlag & bUnicode)
{
UniToGB(LongNameBuffer); //转成国标码
for(i=0; i<40; i++)
m_c[line].LongName[i] = LongNameBuffer[i];
}
else
{
for(i=0; i<11; i++)
{
//m_c[line].LongName[i] = de->deName[i];
m_c[line].LongName[i] = deBuf.deName[i];
}
}
m_c[line].LongName[i] = '\0';
for(i=0; i<11; i++)
{
//m_c[line].ShortName[i] = de->deName[i];
m_c[line].ShortName[i] = deBuf.deName[i];
}
m_c[line].ShortName[i] = '\0';
m_c[line].Type = 0;
//m_c[line].Clust = ((unsigned long)de->deHighClust << 16) + de->deStartCluster;
m_c[line].Clust = ((INT32U)deBuf.deHighClust << 16) + deBuf.deStartCluster;
m_c[line++].FileLen = 0;
}
}
}
else
{
//if((de->deAttributes&ATTR_DIRECTORY) == ATTR_DIRECTORY)
if((deBuf.deAttributes&ATTR_DIRECTORY) == ATTR_DIRECTORY)
{
//if(!IsCurDir(de->deName))
if(!IsCurDir(deBuf.deName))
{
fileNo++;
if((fileNo>=index)&&(line<4))
{
for(i=0;i<11;i++)
{
//m_c[line].ShortName[i]=de->deName[i];
//m_c[line].LongName[i]=de->deName[i];
m_c[line].ShortName[i]=deBuf.deName[i];
m_c[line].LongName[i]=deBuf.deName[i];
}
m_c[line].ShortName[i]='\0';
m_c[line].LongName[i]='\0';
m_c[line].Type=0;
//m_c[line].Clust=((unsigned long)de->deHighClust << 16) + de->deStartCluster;
m_c[line].Clust=((INT32U)deBuf.deHighClust << 16) + deBuf.deStartCluster;
m_c[line++].FileLen=0;
}
}
}
}
}
}
//de++;
fp.Index++;
//if(de->deName[0] == 0) // 文件的最后一项
if(deBuf.deName[0] == 0) // 文件的最后一项
{
break;
}
}while(1);
//------------------------- 再查找音乐文件 -----------------------------------------
InitSetPath(&fp,dircluster);
ReadBlock(fp.Sector); // 读取目录表
do
{
if(!ReadNextDirEntry(&fp)) // 目录为空
{
break;
}
//de = (DIRENTRY *)BUFFER;
//de+=fp.Index;
deBuf.deName[0] = BUFFER[0 + count * fp.Index];
deBuf.deName[1] = BUFFER[1 + count * fp.Index];
deBuf.deName[2] = BUFFER[2 + count * fp.Index];
deBuf.deName[3] = BUFFER[3 + count * fp.Index];
deBuf.deName[4] = BUFFER[4 + count * fp.Index];
deBuf.deName[5] = BUFFER[5 + count * fp.Index];
deBuf.deName[6] = BUFFER[6 + count * fp.Index];
deBuf.deName[7] = BUFFER[7 + count * fp.Index];
deBuf.deExtension[0] = BUFFER[8 + count * fp.Index];
deBuf.deExtension[1] = BUFFER[9 + count * fp.Index];
deBuf.deExtension[2] = BUFFER[10 + count * fp.Index];
deBuf.deAttributes = BUFFER[11 + count * fp.Index];
deBuf.deLowerCase = BUFFER[12 + count * fp.Index];
deBuf.deCHundredth = BUFFER[13 + count * fp.Index];
deBuf.deCTime[0] = BUFFER[14 + count * fp.Index];
deBuf.deCTime[1] = BUFFER[15 + count * fp.Index];
deBuf.deCDate[0] = BUFFER[16 + count * fp.Index];
deBuf.deCDate[1] = BUFFER[17 + count * fp.Index];
deBuf.deADate[0] = BUFFER[18 + count * fp.Index];
deBuf.deADate[1] = BUFFER[19 + count * fp.Index];
deBuf.deHighClust = BUFFER[20 + count * fp.Index] | (BUFFER[21 + count * fp.Index] << 8);
deBuf.deMTime[0] = BUFFER[22 + count * fp.Index];
deBuf.deMTime[1] = BUFFER[23 + count * fp.Index];
deBuf.deMDate[0] = BUFFER[24 + count * fp.Index];
deBuf.deMDate[1] = BUFFER[25 + count * fp.Index];
deBuf.deStartCluster = BUFFER[26 + count * fp.Index] | (BUFFER[27 + count * fp.Index] << 8);
deBuf.deFileSize = BUFFER[28 + count * fp.Index] | (BUFFER[29 + count * fp.Index] << 8) | (BUFFER[30 + count * fp.Index] << 16) | (BUFFER[31 + count * fp.Index] << 24);
//if(*de->deName != 0xe5) // 找到目录或文件
if(deBuf.deName[0] != 0xe5) // 找到目录或文件
{
//if((de->deAttributes&ATTR_LONG_FILENAME) == ATTR_LONG_FILENAME)
if((deBuf.deAttributes&ATTR_LONG_FILENAME) == ATTR_LONG_FILENAME)
{
//we = (WINENTRY *) &deBuf;
weBuf.weCnt = BUFFER[0 + count * fp.Index];
weBuf.wePart1[0] = BUFFER[1 + count * fp.Index];
weBuf.wePart1[1] = BUFFER[2 + count * fp.Index];
weBuf.wePart1[2] = BUFFER[3 + count * fp.Index];
weBuf.wePart1[3] = BUFFER[4 + count * fp.Index];
weBuf.wePart1[4] = BUFFER[5 + count * fp.Index];
weBuf.wePart1[5] = BUFFER[6 + count * fp.Index];
weBuf.wePart1[6] = BUFFER[7 + count * fp.Index];
weBuf.wePart1[7] = BUFFER[8 + count * fp.Index];
weBuf.wePart1[8] = BUFFER[9 + count * fp.Index];
weBuf.wePart1[9] = BUFFER[10 + count * fp.Index];
weBuf.weAttributes = BUFFER[11 + count * fp.Index];
weBuf.weReserved1 = BUFFER[12 + count * fp.Index];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -