📄 enhanced_selector_next_for_ape2.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 + -