📄 fileselect.c
字号:
/********************************************************************************
* SDK30F_D1
* music player main sub
*
* (c) Copyright 2002, Actions Co,Ld.
* All Right Reserved
*
* File: FileSelect.c
* By : wurui
* Version: 1> v1.00 first version 2005-11-23 9:30
*
* $Id: FileSelect.c,v 1.7 2005/12/23 02:44:44 wurui Exp $
*******************************************************************************
*/
#include "FileSelect.h"
OS_EVENT *FileSelect_In = 0;
bool FileSelectEngineDetect();
void FSel_Init(msg_t *msg_list);
void FSel_Exit(fselector_t *g_fselector_vars);
void FileSelectEngine();
int FSel_GetNextFile(fselector_t *g_fselector_vars);
void FSel_GetNextFile_Exceptions(fselector_t *g_fselector_vars);
int FSel_GetNextNFiles( fselector_t *g_fselector_vars );
int FSel_GetPrevFile(fselector_t *g_fselector_vars);
void FSel_GetPrevFile_Exceptions(fselector_t *g_fselector_vars);
int FSel_GetFileByNo(fselector_t *g_fselector_vars);
int FSel_GetNFilesByNo(fselector_t *g_fselector_vars);
int FSel_GetFileFullNameByNo(fselector_t *g_fselector_vars);
int FSel_ToNextDirEntry(fselector_t *g_fselector_vars);
int FSel_ToPrevDirEntry(fselector_t *g_fselector_vars);
int FSel_ToDirEntry(fselector_t *g_fselector_vars);
int __ToDirEntry(int Num, fselector_t *g_fselector_vars);
int FSel_Dir_GetNextFile(fselector_t *g_fselector_vars);
int FSel_PlayList_GetNextFile(fselector_t *g_fselector_vars);
int FSel_PlayListEnt(fselector_t *g_fselector_vars);
int FSel_SetLocation(fselector_t *g_fselector_vars);
int __SetLocationC(fselector_t *g_fselector_vars);
char *FSel_GetCurExt(fselector_t *g_fselector_vars);
char *FSel_ToNextExt(fselector_t *g_fselector_vars);
void FSel_SetLocation_Exceptions(fselector_t *g_fselector_vars);
void __FSel_Exceptions(fselector_t *g_fselector_vars,int errtype);
int __Dir_GetNextFile(fselector_t *g_fselector_vars);
bool __CheckFileType(fselector_t *g_fselector_vars);
int __GetCurDirMaxDepth(fselector_t *g_fselector_vars);
void FileSelectEngine()
{
fselector_t *g_fselector_vars;
msg_t msg_list[10];
msg_t msg;
msg_t msg_send;
int result;
FSel_Init(msg_list);
do
{
MYOSQPend(FileSelect_In,&msg,0);
g_fselector_vars = (fselector_t *)msg.msg.pointer;
switch(msg.type)
{
case MSG_fsel_SetLocation:
if((result = FSel_SetLocation(g_fselector_vars)) != 0)
{
__FSel_Exceptions(g_fselector_vars,result);
}
break;
case MSG_fsel_GetNextFile:
if((result = FSel_GetNextFile(g_fselector_vars)) != 0)
{
__FSel_Exceptions(g_fselector_vars,result);
break;
}
strcpy(g_fselector_vars->fsel_FileLongName,g_fselector_vars->fsel_Dirent->d_name);
msg_send.type = MS_FSEL;
msg_send.msg.data[0] = MSG_fsel_GetNextFile;
MYOSQPost(g_fselector_vars->FileSelect_Out,&msg_send);
break;
case MSG_fsel_GetPrevFile:
if((result = FSel_GetPrevFile(g_fselector_vars)) != 0)
{
__FSel_Exceptions(g_fselector_vars,result);
break;
}
msg_send.type = MS_FSEL;
msg_send.msg.data[0] = MSG_fsel_GetPrevFile;
MYOSQPost(g_fselector_vars->FileSelect_Out,&msg_send);
break;
case MSG_fsel_GetFileByNo:
if( (result = FSel_GetFileByNo(g_fselector_vars)) != 0 )
{
__FSel_Exceptions(g_fselector_vars,result);
break;
}
strcpy(g_fselector_vars->fsel_FileLongName, g_fselector_vars->fsel_Dirent->d_name);
*g_fselector_vars->fileno = g_fselector_vars->fsel_FileNo;
msg_send.type = MS_FSEL;
msg_send.msg.data[0] = MSG_fsel_GetFileByNo;
msg_send.msg.data[1] = g_fselector_vars->direction;
MYOSQPost(g_fselector_vars->FileSelect_Out,&msg_send);
break;
case MSG_fsel_GetNFilesByNo:
if( (result = FSel_GetNFilesByNo(g_fselector_vars)) != 0 )
{
__FSel_Exceptions(g_fselector_vars,result);
break;
}
msg_send.type = MS_FSEL;
msg_send.msg.data[0] = MSG_fsel_GetNFilesByNo;
MYOSQPost(g_fselector_vars->FileSelect_Out,&msg_send);
break;
case MSG_fsel_GetFileFullNameByNo:
if( (result = FSel_GetFileFullNameByNo(g_fselector_vars)) != 0 )
{
__FSel_Exceptions(g_fselector_vars,result);
break;
}
msg_send.type = MS_FSEL;
msg_send.msg.data[0] = MSG_fsel_GetFileFullNameByNo;
MYOSQPost(g_fselector_vars->FileSelect_Out,&msg_send);
break;
case MSG_fsel_GetNextNFiles:
if( (result = FSel_GetNextNFiles(g_fselector_vars)) != 0 )
{
__FSel_Exceptions(g_fselector_vars,result);
break;
}
msg_send.type = MS_FSEL;
msg_send.msg.data[0] = MSG_fsel_GetNextNFiles;
MYOSQPost(g_fselector_vars->FileSelect_Out,&msg_send);
break;
case MSG_fsel_ToNextDir:
if( (result = FSel_ToNextDirEntry(g_fselector_vars)) != 0 )
{
__FSel_Exceptions(g_fselector_vars,result);
break;
}
msg_send.type = MS_FSEL;
msg_send.msg.data[0] = MSG_fsel_ToNextDir;
MYOSQPost(g_fselector_vars->FileSelect_Out,&msg_send);
break;
case MSG_fsel_ToPrevDir:
if( (result = FSel_ToPrevDirEntry(g_fselector_vars)) != 0 )
{
__FSel_Exceptions(g_fselector_vars,result);
break;
}
msg_send.type = MS_FSEL;
msg_send.msg.data[0] = MSG_fsel_ToPrevDir;
MYOSQPost(g_fselector_vars->FileSelect_Out,&msg_send);
break;
/******************************************************************************
case MSG_fsel_ReadNextDir:
g_fselector_vars->fsel_Dirent = FS_ReadDir( g_fselector_vars->fsel_CurDir, "" );
if(g_fselector_vars->fsel_Dirent == NULL)
{
msg_send.type = MS_FSEL;
msg_send.msg.data[0] = MS_FSELErr;
msg_send.msg.data[1] = MS_fsel_NoMoreDirErr;
MYOSQPost(g_fselector_vars->FileSelect_Out,&msg_send);
break;
}
msg_send.type = MS_FSEL;
msg_send.msg.data[0] = MSG_fsel_ReadNextDir;
MYOSQPost(g_fselector_vars->FileSelect_Out,&msg_send);
break;
******************************************************************************/
case MSG_fsel_Close:
if(g_fselector_vars->fsel_CurDir != 0)
FS_CloseDir(g_fselector_vars->fsel_CurDir);
break;
}
}while(msg.type != MS_END);
FSel_Exit(g_fselector_vars);
FileSelect_In = 0;
for(;;)
{
output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
OSTaskDel(OS_PRIO_SELF);
}
}
/*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
GetNextFile
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
int FSel_GetNextNFiles( fselector_t *g_fselector_vars )
{
int result,i;
for( i = 0; g_fselector_vars->fsel_NFileNames[i] != NULL ; )
{
if( (result = FSel_GetNextFile(g_fselector_vars)) == MS_fsel_NoErr)
{
g_fselector_vars->fileno[i] = g_fselector_vars->fsel_FileNo;
strcpy(g_fselector_vars->fsel_NFileNames[i++], g_fselector_vars->fsel_Dirent->d_name);
}
else if(result == MS_fsel_NoMoreFileErr)
{
g_fselector_vars->fsel_NFileNames[i] = NULL;
break;
}
else
return result;
}
return MS_fsel_NoErr;
}
int FSel_GetNextFile(fselector_t *g_fselector_vars)
{
int result;
if(g_fselector_vars->fsel_Playlist_Dir_mode == FSEL_TYPE_COMMONDIR)
{
if( (result = FSel_Dir_GetNextFile(g_fselector_vars)) != MS_fsel_NoErr)
{
return result;
}
}
else if(g_fselector_vars->fsel_Playlist_Dir_mode == FSEL_TYPE_PLAYLIST)
{
return FSel_PlayList_GetNextFile(g_fselector_vars);
}
else
return MS_fsel_UndefineErr;
return MS_fsel_NoErr;
}
int FSel_Dir_GetNextFile(fselector_t *g_fselector_vars)
{
char *Ext;
int result;
while(1)
{
if( __Dir_GetNextFile(g_fselector_vars) == MS_fsel_FileSearchEnd)
{
if((result = FSel_ToNextDirEntry(g_fselector_vars)) != MS_fsel_NoErr)
{
if( result == MS_fsel_RechRootEndErr )
{
if(g_fselector_vars->fsel_FileNo == 0)
return MS_fsel_NoFileErr;
return MS_fsel_NoMoreFileErr;
}
return result;
}
}
else
{
break;
}
}
return MS_fsel_NoErr;
}
int __Dir_GetNextFile(fselector_t *g_fselector_vars)
{
int result;
char threeblank[4];
threeblank[0] = ' ';
threeblank[1] = ' ';
threeblank[2] = ' ';
threeblank[3] = 0;
while(1)
{
g_fselector_vars->fsel_Dirent = FS_ReadDir( g_fselector_vars->fsel_CurDir, threeblank );
if(g_fselector_vars->fsel_Dirent != NULL)
{
if( __CheckFileType(g_fselector_vars) )
{
g_fselector_vars->fsel_FileNo ++;
break;
}
}
else
return MS_fsel_FileSearchEnd;
}
return MS_fsel_NoErr;
}
bool __CheckFileType(fselector_t *g_fselector_vars)
{
int i;
for(i=0; g_fselector_vars->fsel_Exts[i] != NULL; i++)
{
if( memcmp(g_fselector_vars->fsel_Dirent->d_name + 9, g_fselector_vars->fsel_Exts[i], 3) == 0)
return TRUE;
}
return FALSE;
}
int FSel_PlayList_GetNextFile(fselector_t *g_fselector_vars)
{
return MS_fsel_UndefineErr;
}
char *FSel_GetCurExt(fselector_t *g_fselector_vars)
{
return g_fselector_vars->fsel_Exts[g_fselector_vars->fsel_ExtNo];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -