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

📄 fat.c

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