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

📄 fat.c

📁 ARM7 lpc2132+vs1003+sdcard 制作的 MP3 此程序在ADS1.2环境下编译
💻 C
📖 第 1 页 / 共 5 页
字号:
                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 + -