📄 dosusr.c
字号:
//patch4.5@ada@Complete H/W write protect function begin
UCHAR FOSD_H_num, FOSD_V_num;
//Joe@2003.2.27 10:21 modify begin
/*if(G_DisplayType <= 7) //TV
{
FOSD_H_num = (K_DISPLAY_StnLcdWidth/16)+5;
FOSD_V_num = (K_DISPLAY_StnLcdHeight/32);
}
else
{
FOSD_H_num = (G_DSPHsize/16);
FOSD_V_num = (G_DSPVsize/32);
}
*/
UI_GetFOSDSize(&FOSD_H_num, &FOSD_V_num);
//Joe@2003.2.27 10:21 modify end
M_DOS_ClearError();
G_USR_Dir1Count = 100;
//version4.0@ada@0513 for Multi-Directory
#if (SINGLE_DIRECTORY == 0)
//patch4.4@ada@DirectoryIndexOrder begin
//G_USR_Dir1CountIndex = 1;
G_USR_MaxDir1Count = 0;
//G_USR_MaxOurDir1CountIndex = 0;
//printf("G_USR_MaxDir1Count 1 = %d\n",G_USR_MaxDir1Count);
G_USR_TotalDirectory = 0;
G_USR_MinDir1Count = 0;
G_USR_MaxOurDir1Count = 0;
G_USR_PrevDir1Count = 0;
//patch4.4@ada@DirectoryIndexOrder end
//patch4.5@ada@Found duplicated DCF directory index begin
G_USR_PracticalMaxDirIndexCount = 0;
//patch4.5@ada@Found duplicated DCF directory index end
#endif
USR_SetDir0Name(name);
if ((startCluster = DOS_RootFindName(name)) == 0)
{
if (G_DOS_Stop_Initial)
{
return FALSE;
}
//patch4.5@ada@Complete H/W write protect function begin
if (G_Card_WriteProtect)
{
if(G_Language==1)
{
UI_PrintOSDString("V^rifier la carte", FOSD_H_num/2-5, FOSD_V_num/2, UI_MENU_DEHIGHLIGHT_COLOR);
UI_PrintOSDString("de protection", FOSD_H_num/2-7, FOSD_V_num/2+1, UI_MENU_DEHIGHLIGHT_COLOR);
}
else
{
UI_PrintOSDString(CHK_PROSWT1[G_Language], FOSD_H_num/2-5, FOSD_V_num/2, UI_MENU_DEHIGHLIGHT_COLOR);
UI_PrintOSDString(CHK_PROSWT2[G_Language], FOSD_H_num/2-7, FOSD_V_num/2+1, UI_MENU_DEHIGHLIGHT_COLOR);
}
DELAY_1s();
DELAY_1s();
UI_PrintOSDString(" ",FOSD_H_num/2-5, FOSD_V_num/2, 0);
UI_PrintOSDString(" ",FOSD_H_num/2-7, FOSD_V_num/2+1, 0);
return FALSE;
}
if ((startCluster = DOS_RootMakeDir(name, 1)) == 0)
{
return FALSE;
}
}
G_USR_Dir0Cluster = startCluster;
DOS_SetCurrDir(startCluster);
//version4.0@ada@0513 for Multi-Directory
#if (SINGLE_DIRECTORY)
USR_SetDir1Name(name, G_USR_Dir1Count);
//ada@0401 For DCF
//Never use the existed directory index while newly power on
if ((startCluster = USR_FindDcfDir1Name(name)) == 0)
{
while ((USR_FindDcfDir1Index(name) > 0) && (G_USR_Dir1Count < 999))
{
USR_SetDir1Name(name, G_USR_Dir1Count);
G_USR_Dir1Count++;
}
if (G_DOS_Stop_Initial)
{
return FALSE;
}
if (G_USR_Dir1Count >= 999)
{
return FALSE;
}
if ((startCluster = DOS_MakeDir(name, 1)) == 0)
{
return FALSE;
}
}
#else
//version4.0@ada@0513 for DCF
//patch4.4@ada@DirectoryIndexOrder begin
//L2_FillDRAM(K_SDRAM_DcfDirBufAddr,(USHORT)K_SDRAM_DcfDirBufSize,0x00,0x00);
L2_FillDRAM(K_SDRAM_DcfDirBufAddr,(USHORT)(K_SDRAM_DcfDirBufSize / 2),0x00,0x00);
L2_FillDRAM(K_SDRAM_DcfDirBufAddr + (K_SDRAM_DcfDirBufSize / 2),(USHORT)(K_SDRAM_DcfDirBufSize / 2),0x00,0x00);
//Search all DCF directories exist
USR_FindDcfDir1Index();
//G_USR_TotalDirectory = G_USR_Dir1CountIndex;
//printf("G_USR_TotalDirectory = %d\n",G_USR_TotalDirectory);
//No our directory exist
//if (G_USR_MaxOurDir1CountIndex == 0)
if (G_USR_MaxOurDir1Count == 0)
{
//patch4.5@ada@Found duplicated DCF directory index begin
//printf("Create new directory\n");
/* if (G_USR_MaxDir1Count < 999)
{
if (G_USR_MaxDir1Count == 0)
{
G_USR_Dir1Count = 100;
}
else
{
G_USR_Dir1Count = G_USR_MaxDir1Count + 1;
}
}
else
{
//printf("G_USR_MaxDir1Count >= 9999\n");
return FALSE;
}
USR_SetDir1Name(name, G_USR_Dir1Count);
if ((startCluster = DOS_MakeDir(name, 1)) == 0)
{
//printf("Build new directory failed\n");
return FALSE;
}
else
{
if (G_USR_Dir1Count == 100) //A new our directory and it's the only one
{
//G_USR_MaxOurDir1CountIndex = 1;
G_USR_MinDir1Count = G_USR_Dir1Count;
}
//else //No our directory exists but others's does
//{
// G_USR_Dir1CountIndex++;
// G_USR_MaxOurDir1CountIndex = G_USR_Dir1CountIndex;
//}
L2_DRAMSetStartAddr((K_SDRAM_DcfDirBufAddr + ((ULONG)G_USR_Dir1Count - 100) * 8),K_SDRAM_NoPrefetch);
//Record directory start cluster
L2_DRAMWriteWord((UCHAR)(startCluster & 0x00ff),(UCHAR)((startCluster & 0xff00) >> 8));
//Our directory
L2_DRAMWriteWord(0xff,0xff);
//Record full directory name
for (i = 0; i < 8; i += 2)
{
L2_DRAMWriteWord(name[i],name[i + 1]);
}
//Previous directory index
L2_DRAMWriteWord((UCHAR)(G_USR_MaxDir1Count & 0x00ff),(UCHAR)((G_USR_MaxDir1Count & 0xff00) >> 8));
//Next directory index
L2_DRAMWriteWord(0x00,0x00);
//Other directory exists
if (G_USR_MaxDir1Count > 0)
{
L2_DRAMSetStartAddr((K_SDRAM_DcfDirBufAddr + ((ULONG)G_USR_MaxDir1Count - 100) * 8 + 7),K_SDRAM_NoPrefetch);
//Record next directory index
L2_DRAMWriteWord((UCHAR)(G_USR_Dir1Count & 0x00ff),(UCHAR)((G_USR_Dir1Count & 0xff00) >> 8));
}
G_USR_MaxDir1Count = G_USR_Dir1Count;
G_USR_MaxOurDir1Count = G_USR_Dir1Count;
G_USR_TotalDirectory++;
}
*/
if (G_Card_WriteProtect)
{
if(G_Language==1)
{
UI_PrintOSDString("V^rifier la carte", FOSD_H_num/2-5, FOSD_V_num/2, UI_MENU_DEHIGHLIGHT_COLOR);
UI_PrintOSDString("de protection", FOSD_H_num/2-7, FOSD_V_num/2+1, UI_MENU_DEHIGHLIGHT_COLOR);
}
else
{
UI_PrintOSDString(CHK_PROSWT1[G_Language], FOSD_H_num/2-5, FOSD_V_num/2, UI_MENU_DEHIGHLIGHT_COLOR);
UI_PrintOSDString(CHK_PROSWT2[G_Language], FOSD_H_num/2-7, FOSD_V_num/2+1, UI_MENU_DEHIGHLIGHT_COLOR);
}
DELAY_1s();
DELAY_1s();
UI_PrintOSDString(" ",FOSD_H_num/2-5, FOSD_V_num/2, 0);
UI_PrintOSDString(" ",FOSD_H_num/2-7, FOSD_V_num/2+1, 0);
return FALSE;
}
//printf("Create new directory\n");
if (G_USR_PracticalMaxDirIndexCount < 999)
{
if (G_USR_PracticalMaxDirIndexCount == 0)
{
G_USR_Dir1Count = 100;
}
else
{
G_USR_Dir1Count = G_USR_PracticalMaxDirIndexCount + 1;
}
}
else
{
// UI_PrintOSDString(DIRINDEX_FULL1[G_Language], FOSD_H_num/2-4, FOSD_V_num/2, UI_MENU_DEHIGHLIGHT_COLOR);
// UI_PrintOSDString(DIRINDEX_FULL2[G_Language],FOSD_H_num/2-4, FOSD_V_num/2+1, UI_MENU_DEHIGHLIGHT_COLOR);
DELAY_1s();
DELAY_1s();
UI_PrintOSDString(" ", 0, FOSD_V_num/2, 0);
UI_PrintOSDString(" ", 0, FOSD_V_num/2+1, 0);
return FALSE;
}
USR_SetDir1Name(name, G_USR_Dir1Count);
if ((startCluster = DOS_MakeDir(name, 1)) == 0)
{
return FALSE;
}
else
{
if (G_USR_Dir1Count == 100) //A new our directory and it's the only one
{
G_USR_MinDir1Count = G_USR_Dir1Count;
}
L2_DRAMSetStartAddr((K_SDRAM_DcfDirBufAddr + ((ULONG)G_USR_Dir1Count - 100) * 8),K_SDRAM_NoPrefetch);
//Record directory start cluster
L2_DRAMWriteWord((UCHAR)(startCluster & 0x00ff),(UCHAR)((startCluster & 0xff00) >> 8));
//Our directory
L2_DRAMWriteWord(0xff,0xff);
//Record full directory name
for (i = 0; i < 8; i += 2)
{
L2_DRAMWriteWord(name[i],name[i + 1]);
}
//Previous directory index
L2_DRAMWriteWord((UCHAR)(G_USR_MaxDir1Count & 0x00ff),(UCHAR)((G_USR_MaxDir1Count & 0xff00) >> 8));
//Next directory index
L2_DRAMWriteWord(0x00,0x00);
//Other directory exists
if (G_USR_MaxDir1Count > 0)
{
L2_DRAMSetStartAddr((K_SDRAM_DcfDirBufAddr + ((ULONG)G_USR_MaxDir1Count - 100) * 8 + 7),K_SDRAM_NoPrefetch);
//Record next directory index
L2_DRAMWriteWord((UCHAR)(G_USR_Dir1Count & 0x00ff),(UCHAR)((G_USR_Dir1Count & 0xff00) >> 8));
}
G_USR_PracticalMaxDirIndexCount = G_USR_Dir1Count;
G_USR_MaxDir1Count = G_USR_Dir1Count;
//printf("G_USR_MaxDir1Count 2 = %d\n",G_USR_MaxDir1Count);
G_USR_MaxOurDir1Count = G_USR_Dir1Count;
G_USR_TotalDirectory++;
}
//patch4.5@ada@Found duplicated DCF directory index end
}
else
{
//G_USR_Dir1CountIndex = G_USR_MaxOurDir1CountIndex;
G_USR_Dir1Count = G_USR_MaxOurDir1Count;
//L2_DRAMSetStartAddr((K_SDRAM_DcfDirBufAddr + ((ULONG)G_USR_Dir1CountIndex - 1) * 7),K_SDRAM_Prefetch);
L2_DRAMSetStartAddr((K_SDRAM_DcfDirBufAddr + ((ULONG)G_USR_Dir1Count - 100) * 8),K_SDRAM_Prefetch);
//L2_DRAMReadWord(&tmp1,&tmp2);
//G_USR_Dir1Count = ((USHORT)tmp2 << 8) | (USHORT)tmp1;
L2_DRAMReadWord(&tmp1,&tmp2);
startCluster = ((USHORT)tmp2 << 8) | (USHORT)tmp1;
}
//patch4.4@ada@DirectoryIndexOrder end
#endif
//printf("G_USR_MaxDir1Count 3 = %d\n",G_USR_MaxDir1Count);
G_USR_Dir1Cluster = startCluster;
DOS_SetCurrDir(startCluster);
sts = USR_FileInitialize();
G_USR_FileIndex++; //next file index
//version4.0@ada@0513 for DPOF
//patch4.4@ada@DPOF begin
//DPOF_DirInitialize();
//patch4.4@ada@DPOF end
return sts;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -