📄 fileselect.c
字号:
char *FSel_ToNextExt(fselector_t *g_fselector_vars)
{
return g_fselector_vars->fsel_Exts[++g_fselector_vars->fsel_ExtNo];
}
/*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
GetPrevFile
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
int FSel_GetPrevFile(fselector_t *g_fselector_vars)
{
if(g_fselector_vars->fsel_FileNo <= 1)
{
g_fselector_vars->fsel_FileNo = g_fselector_vars->fsel_TotalNo;
}
else
{
g_fselector_vars->fsel_FileNo --;
}
return FSel_GetFileByNo(g_fselector_vars);
}
/*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
GetFileByNo
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
int FSel_GetFileByNo(fselector_t *g_fselector_vars)
{
int result;
WORD fileNo = g_fselector_vars->fsel_FileNo;
g_fselector_vars->fsel_FileNo = 0;
g_fselector_vars->fsel_ExtNo = 0;
__SetLocationC(g_fselector_vars);
while(g_fselector_vars->fsel_FileNo < fileNo)
{
if( (result = FSel_GetNextFile(g_fselector_vars)) != MS_fsel_NoErr)
{
return result;
}
}
return MS_fsel_NoErr;
}
int FSel_GetNFilesByNo(fselector_t *g_fselector_vars)
{
int result;
if(g_fselector_vars->fsel_FileNo>0)
g_fselector_vars->fsel_FileNo --;
if( (result = FSel_GetFileByNo(g_fselector_vars)) != MS_fsel_NoErr)
return result;
return FSel_GetNextNFiles( g_fselector_vars );
}
int FSel_GetFileFullNameByNo(fselector_t *g_fselector_vars)
{
int result;
//FS_u8 length = (FS_u8)g_fselector_vars->fsel_FileLongName[0];
WORD fsel_FileNo_sav = g_fselector_vars->fsel_FileNo;
g_fselector_vars->fsel_FileNo = g_fselector_vars->fsel_SeekFileNo;
if( (result = FSel_GetFileByNo(g_fselector_vars)) != MS_fsel_NoErr)
return result;
strcpy(g_fselector_vars->fsel_FileLocationName , g_fselector_vars->fsel_CurDirName);
strcat(g_fselector_vars->fsel_FileLocationName , g_fselector_vars->fsel_Dirent->d_name);
strcpy(g_fselector_vars->fsel_FileLongName , g_fselector_vars->fsel_Dirent->d_name);
//result = FS_ConvertName( g_fselector_vars->fsel_Dirent->d_name, length, g_fselector_vars->fsel_CurDir );
//if(result >= 0)
// memcpy(g_fselector_vars->fsel_FileLongName , g_fselector_vars->fsel_Dirent->d_name , length<<1);
g_fselector_vars->fsel_FileNo = fsel_FileNo_sav;
return FSel_GetFileByNo(g_fselector_vars);
}
/*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
SetLocation
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
int FSel_SetLocation(fselector_t *g_fselector_vars)
{
if(g_fselector_vars->fsel_Playlist_Dir_mode == FSEL_TYPE_COMMONDIR) //common file system
return __SetLocationC(g_fselector_vars);
return FSel_PlayListEnt(g_fselector_vars);
}
int __SetLocationC(fselector_t *g_fselector_vars)
{
if(g_fselector_vars->fsel_CurDir != 0)
FS_CloseDir(g_fselector_vars->fsel_CurDir);
g_fselector_vars->fsel_DirLayer = 0 ;
memset(g_fselector_vars->fsel_DirNo , 0 ,sizeof(BYTE)*FSEL_TotalDirLayer);
if((g_fselector_vars->fsel_CurDir = FS_OpenDir( g_fselector_vars->fsel_LocationDir )) == NULL)
{
g_fselector_vars->fsel_CurDir = FS_OpenDir( "\\" );
return MS_fsel_LocationErr;
}
strcpy(g_fselector_vars->fsel_CurDirName,g_fselector_vars->fsel_LocationDir);
return MS_fsel_NoErr;
}
int FSel_PlayListEnt(fselector_t *g_fselector_vars)
{
return MS_fsel_UndefineErr;
}
/*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
ToDirEntry
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
int FSel_ToNextDirEntry(fselector_t *g_fselector_vars)
{
int result;
if(g_fselector_vars->fsel_CurDir != 0)
FS_CloseDir(g_fselector_vars->fsel_CurDir);
if(g_fselector_vars->fsel_DirLayer == FSEL_TotalDirLayer-1 || (g_fselector_vars->fsel_DirLayer == 0 && g_fselector_vars->fsel_DirNo[0] == 0))
g_fselector_vars->fsel_DirNo[g_fselector_vars->fsel_DirLayer]++;
else
g_fselector_vars->fsel_DirNo[++g_fselector_vars->fsel_DirLayer]++;
while(1)
{
if( (result = FSel_ToDirEntry(g_fselector_vars)) != 0 )
{
if(result == MS_fsel_NoMoreDirErr)
{
if(g_fselector_vars->fsel_DirLayer>0)
{
g_fselector_vars->fsel_DirNo[g_fselector_vars->fsel_DirLayer] = 0;
g_fselector_vars->fsel_DirNo[--g_fselector_vars->fsel_DirLayer]++;
}
else
{
g_fselector_vars->fsel_DirNo[0]=0;
break;
}
}
else
return result;
}
else
break;
}
if( (g_fselector_vars->fsel_CurDir = FS_OpenDir( g_fselector_vars->fsel_CurDirName )) == NULL )
return MS_fsel_DirNotExistErr;
if( g_fselector_vars->fsel_DirLayer == 0 && g_fselector_vars->fsel_DirNo[0] == 0 )
return MS_fsel_RechRootEndErr;
return MS_fsel_NoErr;
}
int FSel_ToPrevDirEntry(fselector_t *g_fselector_vars)
{
int result;
if(g_fselector_vars->fsel_CurDir != 0)
FS_CloseDir(g_fselector_vars->fsel_CurDir);
if(--g_fselector_vars->fsel_DirNo[g_fselector_vars->fsel_DirLayer] == 0)
{
g_fselector_vars->fsel_DirLayer--;
}
else
{
result = __GetCurDirMaxDepth(g_fselector_vars);
if( result != MS_fsel_NoErr && result != MS_fsel_NoSubDirErr)
return result;
}
if( (result = FSel_ToDirEntry(g_fselector_vars)) != 0 )
return result;
if( (g_fselector_vars->fsel_CurDir = FS_OpenDir( g_fselector_vars->fsel_CurDirName )) == NULL )
return MS_fsel_DirNotExistErr;
if(g_fselector_vars->fsel_DirLayer == 0xFF && g_fselector_vars->fsel_DirNo[0] == 0)
return MS_fsel_RechRootHeadErr;
return MS_fsel_NoErr;
}
int __GetCurDirMaxDepth(fselector_t *g_fselector_vars )
{
int result;
BYTE fsel_DirLayer_sav = g_fselector_vars->fsel_DirLayer;
if(g_fselector_vars->fsel_DirLayer != FSEL_TotalDirLayer-1)
g_fselector_vars->fsel_DirLayer ++;
while(1)
{
g_fselector_vars->fsel_DirNo[g_fselector_vars->fsel_DirLayer]++;
if( (result = FSel_ToDirEntry(g_fselector_vars)) != 0 )
{
if(result == MS_fsel_NoMoreDirErr)
{
if(--g_fselector_vars->fsel_DirNo[g_fselector_vars->fsel_DirLayer] == 0)
{
if(--g_fselector_vars->fsel_DirLayer == fsel_DirLayer_sav);
return MS_fsel_NoSubDirErr;
break;
}
else
{
g_fselector_vars->fsel_DirLayer ++;
}
}
else
return result;
}
}
return MS_fsel_NoErr;
}
int FSel_ToDirEntry(fselector_t *g_fselector_vars)
{
int i=0,j=0,result;
strcpy(g_fselector_vars->fsel_CurDirName, g_fselector_vars->fsel_LocationDir);
for( ; i<=g_fselector_vars->fsel_DirLayer && g_fselector_vars->fsel_DirNo[i]!=0 ; i++)
{
if( (result = __ToDirEntry(g_fselector_vars->fsel_DirNo[i] ,g_fselector_vars)) != MS_fsel_NoErr)
{
return result;
}
}
return MS_fsel_NoErr;
}
int __ToDirEntry(int Num, fselector_t *g_fselector_vars)
{
int i=0;
FS_DIR *CurDir;
struct FS_DIRENT *Dirent;
char *nameptr;
if( (CurDir = FS_OpenDir( g_fselector_vars->fsel_CurDirName )) == NULL)
return MS_fsel_DirNotExistErr;
while( i < Num )
{
if( (Dirent = FS_ReadDir( CurDir, "" )) == NULL )
{
FS_CloseDir(CurDir);
return MS_fsel_NoMoreDirErr;
}
if(Dirent->d_name[0] != 0x2E)
i++;
}
nameptr = g_fselector_vars->fsel_CurDirName;
for(;*nameptr!=0;nameptr++);
for(i = 0;Dirent->d_name[i] != 0x20; i++,nameptr++)
{
*nameptr = Dirent->d_name[i];
}
*(nameptr++) = '\\';
*nameptr = 0;
FS_CloseDir(CurDir);
return MS_fsel_NoErr;
}
/*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
Generation
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
void FileSelectEngineCreate()
{
if(FileSelectEngineDetect() == FALSE)
{
OSTaskCreate((void(*)(void *))(long)FileSelectEngine, (void *)0x0000,
(void *)FILESEL_ENGINE_SPACE, FILESEL_ENGINE_PRIO, FILESEL_ENGINE_ID);
OSTimeDly(1);
}
}
bool FileSelectEngineDetect()
{
OS_ENTER_CRITICAL();
if(OSTCBPrioTbl[FILESEL_ENGINE_PRIO] != (OS_TCB *)0)
{
OS_EXIT_CRITICAL();
return TRUE;
}
OS_EXIT_CRITICAL();
return FALSE;
}
void __FSel_Exceptions(fselector_t *g_fselector_vars,int errtype)
{
msg_t msg_send;
msg_send.type = MS_FSEL;
msg_send.msg.data[0] = MS_FSELErr;
msg_send.msg.data[1] = (BYTE)errtype;
MYOSQPost(g_fselector_vars->FileSelect_Out,&msg_send);
}
void FSel_Exit(fselector_t *g_fselector_vars)
{
INT8U err;
if(g_fselector_vars->fsel_CurDir != 0)
FS_CloseDir(g_fselector_vars->fsel_CurDir);
FileSelect_In = MYOSQDel(FileSelect_In,OS_DEL_NO_PEND,&err);
}
void FSel_Init(msg_t *msg_list)
{
if(FileSelect_In == 0)
{
FileSelect_In = MYOSQCreate(msg_list,10);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -