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

📄 enhanced_selector_next_for_ape2.c

📁 MP3 整个 SDK
💻 C
字号:
#pragma codeseg(MO_EH_FSL4)

#include "actos.h"
#include "enhanced.h"
#include "debug.h"

extern  handle  fpPlaylist;         //playlist handle    
extern  BYTE    fselPLOrCommonDir;  //playlist or common operation
extern  BYTE    fselType;      //Type of select,  Music or voice.
extern  BYTE    fselError;    // store error id;
extern  WORD    fselFileNo;   //file no
extern  BYTE    fselExtNo; //Number of current file ext name..
extern  char    fselDiskLetter;
extern  WORD    fselRandCount;

extern  WORD    fselTotal;  //Total of current select file
extern  BYTE    fselDirLayer;  //dir  layer
extern  BYTE    fselDirNo[TOTALDIRLAYER];    //Number of current valid directory

extern  BYTE    fselMode;   //opened file selector mode
extern  WORD    PlaylistCurItem;    //1 ~ ClassItemTotal
extern  WORD    ClassItemTotal; //the total of the same class songs
extern  BYTE    PlayListFileName[12]; //the opened file name of playlist

extern  WORD    fselFileNo_APE;    //Number of current file no with total APE parts of current and last in ape file
extern  BYTE    Curfilename[12];
extern  BYTE    CurApe_TotalNo;
#pragma memory=constseg(MOC_EH_FSL4)
const char RootName_ape1[] = {":"};
const char IgnoreExt_ape1[4] = {"*  "};

const char APEExt_ape1[] = "APE";
const char CUEExt_ape1[] = "CUE";
#pragma memory=default
#pragma memory=dataseg(MOD_EH_FSL4)
char    m_szTemp_ape1[12];
#pragma memory=default

extern WORD APE_GetTotalParts(handle fp);
extern BYTE getplayItemparam(char *filename);

WORD  GetAPETotalCur()
{
    int total = 1;
    handle  fp_cue;
    
    memcpy(m_szTemp_ape1+8, CUEExt_ape1, 4);
    if(fp_cue = FS_FOpen(m_szTemp_ape1, FS_OPEN_NORMAL))//支持SEEK
    {
        total = APE_GetTotalParts(fp_cue);
        FS_FClose(fp_cue);
    }
    return total;
}           
 
WORD  GetFileTotalCur_Ape()
{
    int total = 0;
    if (FS_Dir(m_szTemp_ape1, APEExt_ape1, FS_DIR_FILE))
    {
        total += GetAPETotalCur();

        while ( FS_Dir(m_szTemp_ape1,  APEExt_ape1, FS_DIR_FILE_CONT) )
        {
            output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
            total += GetAPETotalCur();
        }
    }
    return total;
}

BOOL SelectAPENext(char* strFile)
{
	BYTE temp;
    if(fselFileNo_APE > fselFileNo)
    {
        strcpy(strFile, Curfilename);
        fselFileNo ++;            
        return TRUE;
    }
    if(!CurApe_TotalNo)
    	temp = FS_DIR_FILE;
    else
    	temp = FS_DIR_FILE_CONT;
    if (fselFileNo_APE <= fselFileNo && FS_Dir(Curfilename, APEExt_ape1, temp))
    {
        *(Curfilename+11) = 0;
        strcpy(strFile, Curfilename);
        strcpy(m_szTemp_ape1, Curfilename);
        CurApe_TotalNo = GetAPETotalCur();
        fselFileNo_APE = fselFileNo+CurApe_TotalNo;
        fselFileNo ++;            
       return TRUE;
    }
    CurApe_TotalNo=0;
    return FALSE;
}


/********************************************************************************
* Description : get the long file name in playlist or common file system 
*
* Arguments  :
*             longfilename : output the  current filename(long name)
              iLen :the length of get group 
* Returns     :
*            TRUE: Successful,
*            FALSE: Fail, detail information in fselError.
* Notes       :
*
********************************************************************************/
BOOL fselGetCurFNameL(char *longfilename, BYTE iLen)
{
    char name[16];
    if (fselPLOrCommonDir == FSEL_TYPE_COMMONDIR)  // common file system
    {
        if (fselGetByNO(name, fselFileNo)) //through file no get the name
        {
            /*if ( !ToDirEntry( playlistclassname, fselDirNo[fselDirLayer]) )  //Enter the current directory
                return FALSE;
            FS_CD(playlistclassname);*/
#ifdef __APE_SUPPORT
            if(!memcmp(name+8, APEExt_ape1,3))
                return FALSE;
#endif
            memcpy(longfilename, name, 12);
            if (FS_GetName(longfilename, iLen))
            {
                //FS_CD("\\");
                return TRUE;
            }
            else
            {
                //FS_CD("\\");
                return FALSE;
            }
        }
        return FALSE;
    }
    else if (fselPLOrCommonDir == FSEL_TYPE_PLAYLIST) //play list file system
    {
        //fileoffset = fileoffset - 1;        //through the file offset get the next name
        if (playlistnext(name))
        {
            memcpy(longfilename, name, 12);
            if (FS_GetName(longfilename, 32))
                return TRUE;
            else
                return FALSE;
        }
    }
    else
        return FALSE;
    
}
/********************************************************************************
* Description : Get the total of valid files according to select type and mode
*
* Arguments  : None
* Returns     : Total of valid files
* Notes       : None
*
********************************************************************************/
WORD fselGetTotal(void)
{
    if  (fselPLOrCommonDir == FSEL_TYPE_COMMONDIR)
    {
        return fselTotal;
    }
    else if (fselPLOrCommonDir == FSEL_TYPE_PLAYLIST)
    {
        return ClassItemTotal;
    }
}

/********************************************************************************
* Description : Get the No. of current selected file.
*
* Arguments  : None
* Returns     : Number of current selected file.
* Notes       : None
*
********************************************************************************/
WORD fselGetNo(void)
{
    if  (fselPLOrCommonDir == FSEL_TYPE_COMMONDIR)
    {
        return  fselFileNo;
    }
    else if (fselPLOrCommonDir == FSEL_TYPE_PLAYLIST)
    { 
        if ( PlaylistCurItem > 0 )
            return PlaylistCurItem;
        else
            return 1;
    }
}

/********************************************************************************
* Description : Set the select mode.
*
* Arguments  : 
            mode:  the new mode 
* Returns     :  Successful or Fail
* Notes       : None
*
********************************************************************************/
BOOL fselSetMode( BYTE mode)
{
    if( mode >=  FSEL_DIR_END)
    {
        return FALSE;
    }
    fselMode = mode;
    return TRUE;
}

/********************************************************************************
* Description : Get the Error id. 
*
* Arguments  : None
* Returns     : Error id
* Notes       :  None
*
********************************************************************************/
BYTE fselGetErrID(void)
{
    return fselError;
}
/********************************************************************************
* Description : in current dir get the last dir 
*
* Arguments  : 
            strDir:output Dir name
* Returns    :
            TRUE: Successful
            FALSE: fail.
* Notes       :  None
*
********************************************************************************/
BOOL FS_LASTDir(char *strDir)
{
    if( fselDirLayer > 7 )
        return FALSE;
    fselDirNo[fselDirLayer] = 0;
    if ( !FS_Dir(m_szTemp_ape1, IgnoreExt_ape1, FS_DIR_DIR) )    // if no dir ,return error
       return FALSE;
    fselDirNo[fselDirLayer] = 1;
    memcpy(strDir,m_szTemp_ape1,12);    
    while ( FS_Dir(m_szTemp_ape1, IgnoreExt_ape1, FS_DIR_DIR_CONT))
    {
        fselDirNo[fselDirLayer]++;
        memcpy(strDir,m_szTemp_ape1,12);    
    }
    return TRUE;
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -