📄 aphearsayrdfile.c
字号:
g_RrParam.wRptMode |= RR_MODE_TEXT;
pFile[strlen((char*)pFile) - 4] = 0;
strcat((char*)pFile,(const char*) REREAD_TXT_FILE);
g_RrParam.hRrMstFile = FileOpen(pFile, FILEMODE_READONLY);
if (g_RrParam.hRrMstFile == NUF_NOFILE)
{
g_RrParam.wRptMode |= RR_MODE_NOTEXT;
g_RrParam.wRptMode &= (~RR_MODE_TEXT);
nRet++;
}
}
}
// Default
g_RrParam.hTmpFile = NUF_NOFILE;
//------
if (g_RrParam.hRrMstFile == NUF_NOSPC)
{
MsgBoxRun(MSGBOX_NONE, (UINT8*)"存储空间不足,不能打开文件!");
nRet=FALSE;
}
else if (g_RrParam.hRrMstFile == NUF_LONGPATH)
{
MsgBoxRun(MSGBOX_NONE,(UINT8*)"路径或文件名太长,不能打开文件!");
nRet=FALSE;
}
else if (g_RrParam.hRrMstFile == NUF_INVNAME)
{
MsgBoxRun(MSGBOX_NONE,(UINT8*)"路径和文件名错误,不能打开文件!");
nRet=FALSE;
}
else if (g_RrParam.hRrMstFile == NUF_NOFILE)
{ // no file text
nRet = TRUE;//FALSE;
}
else if (g_RrParam.hRrMstFile >=0)
{
if (nRet==0)
{ // One Time Loading for MST File
if ( FileLength(g_RrParam.hRrMstFile)
> (AU_MAX_FILELEN + AU_MAX_FILELEN_ADD) )
{
nRet = ApHsFileTextCreate();
if (nRet)
{ // Regard it as TXT File
nRet = CopyMstToTmpFile(g_RrParam.hTmpFile,g_RrParam.hRrMstFile);
if (nRet)
{
// Close two file
FileClose(g_RrParam.hRrMstFile);
FileClose(g_RrParam.hTmpFile);
g_RrParam.hTmpFile = NUF_NOFILE;
g_RrParam.hRrMstFile = NUF_NOFILE;
// Set it to a TXT File
g_RrParam.wRptMode |= RR_MODE_NOMST;
g_RrParam.wRptMode |= RR_MODE_TEXT;
FileSetAttributes ((char*)APHS_TEMPTXT_FILE, ANORMAL);
nRet = 0;
g_RrParam.hRrMstFile = FileOpen((char*)APHS_TEMPTXT_FILE, FILEMODE_READONLY);
if (g_RrParam.hRrMstFile)
{
nRet=__RrReadTxtFile();
}
if (!nRet)
{
FileClose(g_RrParam.hRrMstFile);
g_RrParam.hRrMstFile=NUF_NOFILE;
}
}
}
}
else
{
nRet=__RrReadMstFile();
FileClose(g_RrParam.hRrMstFile);
g_RrParam.hRrMstFile=NUF_NOFILE;
}
g_RrParam.wNode = 0;
}
else if (nRet==1)
{ // Mtl File, only mtl file used temp file
nRet = ApHsFileTextCreate();
if (nRet)
{
nRet=__RrReadMtlFile();
}
FileClose(g_RrParam.hRrMstFile);
g_RrParam.hRrMstFile = NUF_NOFILE;
}
else if (nRet==2)
{ // Text File
nRet=__RrReadTxtFile();
// FileClose(g_RrParam.hRrMstFile);
// g_RrParam.hRrMstFile=NUF_NOFILE;
}
else
{
g_RrParam.hRrMstFile=NUF_NOFILE;
nRet = TRUE;//FALSE;
}
}
return (BOOL)nRet;
}
//========================================================
// For Dymanic Reloading the text file
//========================================================
VOID ApHsFileTextFail(VOID)
{
MsgBoxRun(MSGBOX_NONE,(UINT8*)APHS_TEMPTXT_FILE_FAIL);
}
//========================================================
BOOL ApHsFileTextCreate(VOID)
{
UINT8 *pFile;
pFile=(UINT8*)APHS_TEMPTXT_FILE;
FileSetAttributes ((char*)pFile, ANORMAL);
FileDelete((char*)pFile);
g_RrParam.hTmpFile = NUF_NOFILE;
g_RrParam.hTmpFile = FileOpen(pFile, FILEMODE_CREATEWRITE);
if (g_RrParam.hTmpFile>=0)
{
return TRUE;
}
ApHsFileTextFail();
return FALSE;
}
//======================
// Delete the temp file
BOOL ApHsFileTextDel(VOID)
{
if ( g_RrParam.hTmpFile >= 0 )
{
FileClose(g_RrParam.hTmpFile);
}
FileSetAttributes ((char*)APHS_TEMPTXT_FILE, ANORMAL);
FileDelete((char*)APHS_TEMPTXT_FILE);
g_RrParam.hTmpFile = NUF_NOFILE;
return TRUE;
}
//================================================================
// search the buffer started pointer,
// make sure the pBuf pointer to one character starting
//----------------------------------
//----------------------------------
static UINT8 *ApHSTextSearchStart(UINT8 *pBuf,UINT uLen)
{
UINT8 byTemp;
//UINT ChNum;
UINT i;
i = 0;
while( (i++)< uLen)
{
byTemp = pBuf[i];
if ( byTemp < 0x20)
{
break;
}
}
if (i>= uLen)
{
i = 0;
}
return ( &pBuf[i] );
}
//==========================================================
//
// uFlag = CMEX_BROWSER_REQUEST_TOP / CMEX_BROWSER_REQUEST_BOT
// NULL;
// BrwCmdEx *pbrwcmd
//-----------
BOOL ApHsReReadFileText(UINT uFlag, VOID *p)
{
BOOL bRet;
INT hFile;
INT nLen,nPos;
UINT8 *pBuf;
UINT8 *pBufStart;
UINT16 uState;
//-------
BrwCmdEx *pbrwcmd;
UINT8* pData;
UINT uDataRemain;
UINT16 wState;
UINT8 **BufStartRet;
UINT16 *wStateRet;
UINT8 **OldPosRet;
//BOOL bMstFile;
bRet = FALSE;
if (g_RrParam.wRptMode& RR_MODE_NOTEXT)
{ // if no file text
return bRet;
}
// bMstFile = FALSE;
// ------------
if ( ! (g_RrParam.wRptMode & RR_MODE_NOMST) )
{ // if MST File
// bMstFile = TRUE;
return bRet;
}
if (g_RrParam.wRptMode & RR_MODE_TEXT)
{ // Text File
hFile = g_RrParam.hRrMstFile;
}
else
{ // MTL File
hFile = g_RrParam.hTmpFile;
}
if ( (hFile>=0)
&& (g_RrParam.uTmpFileBlkNum <= g_RrParam.uTmpFileBlkTotalNum ) )
{ // read data here
switch(uFlag)
{
case (UINT)NULL:
// if One Block, the file is loaded once
FileSeek(hFile,0,FILESEEK_BEGIN);
FileRead(hFile,(char*)g_RrParam.pTextBuf, g_RrParam.uTmpFileBlkLen);
g_RrParam.pTextBuf[g_RrParam.uTmpFileBlkLen] = 0;
g_RrParam.uTmpFileBlkNum = 0 ; // To Num 1 Block
g_RrParam.uTempFilePos = 0;
g_RrParam.uTmpCurLen = g_RrParam.uTmpFileBlkLen ;
bRet = TRUE;
break;
case CMEX_BROWSER_REQUEST_TOP:
if (g_RrParam.uTmpFileBlkTotalNum ==1)
{
return bRet;
}
// read new data
if (!g_RrParam.uTempFilePos)
{
return bRet;
}
pbrwcmd = (BrwCmdEx *)p;
pData = (pbrwcmd->cmdparam).ReqData.pData;
uDataRemain = (pbrwcmd->cmdparam).ReqData.uDataRemain;
wState = (pbrwcmd->cmdparam).ReqData.wState;
BufStartRet = & ((pbrwcmd->cmdparam).ReqData.BufStartRet);
wStateRet = &( (pbrwcmd->cmdparam).ReqData.wStateRet);
OldPosRet = &( (pbrwcmd->cmdparam).ReqData.OldPosRet);
// backup the old data
pBuf = g_RrParam.pTextBuf + g_RrParam.uTmpFileBlkLen;
memmove(pBuf,(pData - uDataRemain),uDataRemain);
pBuf[uDataRemain] = 0;
pBuf[uDataRemain+1] = 0;
if ( g_RrParam.uTempFilePos >= g_RrParam.uTmpFileBlkLen)
{
nLen = g_RrParam.uTmpFileBlkLen;
g_RrParam.uTempFilePos -= g_RrParam.uTmpFileBlkLen;
}
else
{
nLen = g_RrParam.uTempFilePos;
g_RrParam.uTempFilePos = 0;
}
nPos = g_RrParam.uTempFilePos;
// Read New File, do not added the ending string
FileSeek(hFile,nPos,FILESEEK_BEGIN);
nLen = FileRead(hFile,(char*)g_RrParam.pTextBuf, nLen);
// conbine the old data
pBuf = g_RrParam.pTextBuf + nLen;
memmove(pBuf,(g_RrParam.pTextBuf + g_RrParam.uTmpFileBlkLen),uDataRemain);
pBuf[uDataRemain] = 0;
pBuf[uDataRemain+1] = 0;
*OldPosRet = g_RrParam.pTextBuf + nLen + uDataRemain;//pData;
g_RrParam.uTmpCurLen = nLen + uDataRemain;
if (g_RrParam.uTempFilePos)
{
pBufStart = ApHSTextSearchStart(g_RrParam.pTextBuf,nLen);
nLen -= ((UINT)(pBufStart - g_RrParam.pTextBuf));
uState = BROWSER_STATE_NULL;
pBuf = BrowserSearchStart((MBrowser*)g_RrParam.pBwrGui,
(UINT8*)pBufStart,nLen,&uState);
}
else
{
pBuf = g_RrParam.pTextBuf;
uState = BROWSER_STATE_NULL;
}
nPos = (UINT)(pBuf - g_RrParam.pTextBuf);
g_RrParam.uTmpCurLen -= nPos;
g_RrParam.uTempFilePos -= nPos;
*BufStartRet = pBuf;
*wStateRet = uState;
bRet = TRUE;
// Request to top
break;
case CMEX_BROWSER_REQUEST_BOT:
if (g_RrParam.uTmpFileBlkTotalNum ==1)
{
return bRet;
}
if ( (g_RrParam.uTempFilePos + g_RrParam.uTmpCurLen )
>= g_RrParam.uTmpFileLen )
{
return bRet;
}
pbrwcmd = (BrwCmdEx *)p;
pData = (pbrwcmd->cmdparam).ReqData.pData;
uDataRemain = (pbrwcmd->cmdparam).ReqData.uDataRemain;
wState = (pbrwcmd->cmdparam).ReqData.wState;
BufStartRet = & ((pbrwcmd->cmdparam).ReqData.BufStartRet);
wStateRet = &( (pbrwcmd->cmdparam).ReqData.wStateRet);
OldPosRet = &( (pbrwcmd->cmdparam).ReqData.OldPosRet);
g_RrParam.uTempFilePos += g_RrParam.uTmpCurLen;
nPos = g_RrParam.uTempFilePos;
g_RrParam.uTempFilePos -= uDataRemain;
// move the remainder
memmove(g_RrParam.pTextBuf,pData,uDataRemain);
pData = g_RrParam.pTextBuf;
// to Next
FileSeek(hFile,nPos,FILESEEK_BEGIN);
nLen = g_RrParam.uTmpFileBlkLen - uDataRemain;
pBuf = pData + uDataRemain;
nLen = FileRead(hFile,(char*)pBuf, nLen);
pBuf[nLen] = 0;
pBuf[nLen+1] = 0;
g_RrParam.uTmpCurLen = nLen + uDataRemain;
*BufStartRet = pData;
*wStateRet = wState;
*OldPosRet = pData;
bRet = TRUE;
break;
}
}
return bRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -