⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aphearsayrdfile.c

📁 本电子词典是名人928的学习机代码,主要是电子学习机AP,其他还没有传
💻 C
📖 第 1 页 / 共 3 页
字号:

            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 + -