📄 enhanced_selector_for_ape.c
字号:
#pragma codeseg(MO_EH_FSL5)
#include "actos.h"
#include "enhanced.h"
#include "debug.h"
#include "codec.h"
WORD fselFileNo_APE; //Number of current file no with total APE parts of current and last in ape file
BYTE Curfilename[12];
BYTE CurApe_TotalNo;
decInitTime_t APE_StartTime;
decInitTime_t APE_EndTime;
extern WORD fselFileNo;
#pragma memory=dataseg(MOD_EH_FSL5)
char m_szTemp_ape2[12];
// char m_szTemp_keyword[12];
char APE_Buf[512];
char *APE_Ptr;
int Buf_Len;
handle m_apeFileHandle;
int file_block;
int cur_block;
#pragma memory=default
#pragma memory=constseg(MOC_EH_FSL5)
const char RootName_ape2[] = {":"};
const char IgnoreExt_ape2[4] = {"* "};
const char APEExt_ape2[] = "APE";
const char CUEExt_ape2[] = "CUE";
const char TALB[] = "TITLE \"";
const char TRACK[] = "TRACK ";
const char TITLE[] = " TITLE \"";
const char INDEX01[] = " INDEX 01 ";
const char PERFORMER[] = " PERFORMER \"";
#pragma memory=default
BOOL _CUE_SeekKeyWord(const char *KeyWord)
{
const char *KeyWord2 = KeyWord;
while(1)
{
if(*KeyWord2 == 0)
return TRUE;
if(*APE_Ptr == *KeyWord2)
KeyWord2++;
else if(KeyWord2 != KeyWord)
{
KeyWord2 = KeyWord;
continue;
}
APE_Ptr++;
if(APE_Ptr >= APE_Buf + Buf_Len)
{
if( (Buf_Len = _CUE_ReadFile() ) <= 0)
break;
else
APE_Ptr = APE_Buf;
}
}
return FALSE;
}
void _CUE_ReadString(char *strFile,char endsymbol,BYTE maxlen)
{
BYTE i;
for(i=1; i<maxlen && *APE_Ptr != endsymbol; i++)
{
*strFile++ = *APE_Ptr++;
if(APE_Ptr >= APE_Buf + Buf_Len)
{
if( (Buf_Len = _CUE_ReadFile() ) <= 0)
{
APE_Ptr--;
break;
}
else
APE_Ptr = APE_Buf;
}
}
*strFile = 0;
}
WORD APE_GetTotalParts(handle fp)
{
int total = 0;
m_apeFileHandle = fp;
cur_block = 0;
APE_Ptr = APE_Buf;
file_block = (int)FS_GetFileLen(m_apeFileHandle);
FS_FSeek(0, FS_SEEK_FFROMSTART, m_apeFileHandle);
Buf_Len = _CUE_ReadFile();
while( _CUE_SeekKeyWord(TRACK) )
{
total++;
}
return total;
}
int _CUE_ReadFile()
{
if(cur_block+1 > file_block)
return 0;
FS_FRead(APE_Buf, 1 , m_apeFileHandle);
cur_block++;
if(cur_block == file_block)
return FS_GetUnalignedLen(m_apeFileHandle);
else
return 512;
}
BOOL GetAPEInfoByNo(char *filename, ID3Info_t *ID3, BYTE mode)
{
char *_keyword;
BYTE num;
num = CurApe_TotalNo+fselFileNo-fselFileNo_APE;
memcpy(m_szTemp_ape2, filename, 8);
strcpy(m_szTemp_ape2+8, CUEExt_ape2);
if( (m_apeFileHandle = FS_FOpen(m_szTemp_ape2, FS_OPEN_NORMAL)) )//支持SEEK
{
file_block = (int)FS_GetFileLen(m_apeFileHandle);
cur_block = 0;
APE_Ptr = APE_Buf;
FS_FSeek(0, FS_SEEK_FFROMSTART, m_apeFileHandle);
Buf_Len = _CUE_ReadFile();
_CUE_SeekKeyWord(TALB);
_CUE_ReadString(ID3->TALB_buffer,'\"',ID3->TALB_length);
cur_block = 0;
APE_Ptr = APE_Buf;
FS_FSeek(0, FS_SEEK_FFROMSTART, m_apeFileHandle);
Buf_Len = _CUE_ReadFile();
_keyword = m_szTemp_ape2;
strcpy(_keyword,TRACK);
_keyword = _keyword + strlen(TRACK);
*_keyword++ = num / 10 + '0';
*_keyword++ = num % 10 + '0';
*_keyword = 0;
if(_CUE_SeekKeyWord(m_szTemp_ape2))
{
if(!_CUE_SeekKeyWord(TITLE))
{
FS_FClose(m_apeFileHandle);
return FALSE;
}
_CUE_ReadString(ID3->TIT2_buffer,'\"',ID3->TIT2_length);
if(!_CUE_SeekKeyWord(PERFORMER))
{
FS_FClose(m_apeFileHandle);
return FALSE;
}
_CUE_ReadString(ID3->TPE1_buffer,'\"',ID3->TPE1_length);
if(!_CUE_SeekKeyWord(INDEX01))
{
FS_FClose(m_apeFileHandle);
return FALSE;
}
_CUE_ReadString(m_szTemp_ape2,0x0d,8);
APE_StartTime.minute = (m_szTemp_ape2[0]-'0')*10 + m_szTemp_ape2[1]-'0';
APE_StartTime.second = (m_szTemp_ape2[3]-'0')*10 + m_szTemp_ape2[4]-'0';
APE_StartTime.Hms = (m_szTemp_ape2[6]-'0')*10 + m_szTemp_ape2[7]-'0';
}
cur_block = 0;
APE_Ptr = APE_Buf;
FS_FSeek(0, FS_SEEK_FFROMSTART, m_apeFileHandle);
Buf_Len = _CUE_ReadFile();
_keyword = m_szTemp_ape2;
strcpy(_keyword,TRACK);
_keyword = _keyword + strlen(TRACK);
*_keyword++ = (num+1) / 10 + '0';
*_keyword++ = (num+1) % 10 + '0';
*_keyword = 0;
if(_CUE_SeekKeyWord(m_szTemp_ape2))
{
_CUE_SeekKeyWord(INDEX01);
_CUE_ReadString(m_szTemp_ape2,0x0d,8);
APE_EndTime.minute = (m_szTemp_ape2[0]-'0')*10 + m_szTemp_ape2[1]-'0';
APE_EndTime.second = (m_szTemp_ape2[3]-'0')*10 + m_szTemp_ape2[4]-'0';
APE_EndTime.Hms = (m_szTemp_ape2[6]-'0')*10 + m_szTemp_ape2[7]-'0';
if( GetStartIntTime()>=GetEndIntTime() )
{
FS_FClose(m_apeFileHandle);
return FALSE;
}
}
else
{
APE_EndTime.Hms=APE_EndTime.minute=APE_EndTime.second=0;
}
FS_FClose(m_apeFileHandle);
return TRUE;
}
APE_EndTime.Hms=APE_EndTime.minute=APE_EndTime.second=APE_StartTime.Hms=APE_StartTime.minute=APE_StartTime.second=0;
return FALSE;
}
int GetStartIntTime()
{
char twochar[2];
twochar[0]=APE_StartTime.second;
twochar[1]=APE_StartTime.minute;
return *((int*)twochar);
}
int GetEndIntTime()
{
char twochar[2];
twochar[0]=APE_EndTime.second;
twochar[1]=APE_EndTime.minute;
return *((int*)twochar);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -