📄 fat.c
字号:
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;
//if((de->deAttributes & ATTR_DIRECTORY) != ATTR_DIRECTORY) // is it a directory ?
if((deBuf.deAttributes & ATTR_DIRECTORY) != ATTR_DIRECTORY) // is it a directory ?
{
//if(IsMusicFile(&de->deExtension[0]) != 0)
if(IsMusicFile(&deBuf.deExtension[0]) != 0)
{
fileNo++;
if((fileNo >= index) && (line < 4))
{
if(WorkFlag & bUnicode)
{
UniToGB(LongNameBuffer); //转成GB码
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 = 2;
//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 = de->deFileSize;
m_c[line++].FileLen = deBuf.deFileSize;
}
}
}
}
else
{
//if((de->deAttributes & ATTR_DIRECTORY) != ATTR_DIRECTORY)
if((deBuf.deAttributes & ATTR_DIRECTORY) != ATTR_DIRECTORY)
{
//if(IsMusicFile(&de->deExtension[0])!= 0)
if(IsMusicFile(&deBuf.deExtension[0])!= 0)
{
fileNo++;
for(i=0; i<11; i++)
{
m_c[0].ShortName[i] = deBuf.deName[i];
}
m_c[0].ShortName[i] = '\0';
if(strcmp(&m_c[0].ShortName[0],s1) == 0)
{
m_c[0].Type = 2;
m_c[0].Clust = ((INT32U)(deBuf.deHighClust) << 16) + ((INT32U)deBuf.deStartCluster & 0x0000ffff);
m_c[0].FileLen = deBuf.deFileSize;
return 1;
}
}
}
}
}
}
//de++;
fp.Index++;
//if(de->deName[0] == 0) // 文件的最后一项
if(deBuf.deName[0] == 0) // 文件的最后一项
{
break;
}
}while(1);
for(i=line; i<4; i++)
{
m_c[i].LongName[0] = '\0';
m_c[i].ShortName[0] = '\0';
m_c[i].Type = 0xff;
}
//-------------------------------------------------------------------------
return 0;
}
/*****************************************************************************************
* 名称:SerarchFile
* 功能:记录第INDEX的后四项文件或目录内容: 内容首簇号,文件的名称(长文件名)
* 输入:INT32U dircluster, :目录簇号
* INT16U index :目录序号
* 返回:INT16U fileNo
*****************************************************************************************/
INT16U SerarchFile(INT32U dircluster,INT16U index)
{
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;
//------------------------- 先查找目录 --------------------------------
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];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -