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

📄 aphearsayrdfile.c

📁 本电子词典是名人928的学习机代码,主要是电子学习机AP,其他还没有传
💻 C
📖 第 1 页 / 共 3 页
字号:
    			dwZipOffset += 2;
    			//判断压缩索引号是否合法
    			if(dwKey >= dwKeyNum)
                {
    				_Error();
					return 0;
                }

                //得到压缩数据起始地址
    			dwKeyDataEnd = _CommInvert3ByteToInt(pKeyTable + (dwKey + 1) * DICT_WORD_LEN);
    			dwKeyDataStart = _CommInvert3ByteToInt(pKeyTable + dwKey * DICT_WORD_LEN);

    			if(dwDictDataLen + (dwKeyDataEnd - dwKeyDataStart) >= DICT_MAX_LEN)
				{
    				_Error();
					return 0;
				}

    			//拷贝数据
                j = dwKeyDataEnd - dwKeyDataStart;
                if ( (dwDictDataLen +j) >= dwLength )
                {
                    k = 0;
                    while(1)
                    {
                        j = dwLength - dwDictDataLen;
                        memcpy(&pUnZipDataBuf[dwDictDataLen], pKeyBuf + dwKeyDataStart + k, j);

                        dwDictDataLen += j;
                        if ( !(_SaveTempFile(fDst,pUnZipDataBuf, dwLength)) )
                        {   // Error
                            dwTotalLen = 0;
                            return dwTotalLen;
                        }
                        else
                        {
                            dwTotalLen += dwDictDataLen;
                            dwDictDataLen =0;
                            k += j;
                            j = (dwKeyDataEnd - dwKeyDataStart) - k;
                            if ( j < dwLength )
                            {
                                if (j)
                                {
                                    memcpy(&pUnZipDataBuf[0], pKeyBuf + dwKeyDataStart + k, j);
                                    dwDictDataLen += j;
                                }
                                break;
                            }
                        }
                    }
                }
                else
                {
    		        memcpy(&pUnZipDataBuf[dwDictDataLen], pKeyBuf + dwKeyDataStart, j);
                    dwDictDataLen += j;
                }
    		}
    		else
    		{   //未被压缩数据
    			if ( dwZipOffset >= (UINT32)(nCurLen) )
	    		{
	        		dwZipOffset = 0;
				    break;
			    }

  			    pUnZipDataBuf[dwDictDataLen] = pZipDataBuf[dwZipOffset];
    			dwDictDataLen ++;
    			dwZipOffset ++;
    		}
    		dwStatusBits --;
    		byStatus <<= 1;

            if (dwDictDataLen >= dwLength)
            {
                if ( !(_SaveTempFile(fDst,pUnZipDataBuf, dwDictDataLen) ) )
                {
                    dwTotalLen = 0;
                    return dwTotalLen;
                }
                else
                {
                    dwTotalLen += dwDictDataLen;
                    dwDictDataLen = 0;
                }
            }
        }

        if (dwZipOffset >= (UINT)nCurLen)
        {
            dwZipOffset = 0;
        }
	}

    // Save last Data Group
    if ( dwDictDataLen >0 )
    {
        if ( !(_SaveTempFile(fDst,pUnZipDataBuf, dwDictDataLen) ) )
        {
            dwTotalLen = 0;
        }
        else
        {
            dwTotalLen += dwDictDataLen;
        }
    }

	return dwTotalLen;
}



/*************************************************************************
    Function   : ApUnzipData
    Description: unzip ap data with maskrom 16k keys

    Input:
        dwCheck         -
        pUnZipDataBuf   -
        pZipDataBuf     -
        dwZipLength     -

    Return:
        UINT32          - the unzip data size.

      DATE      AUTHOR   VERSION  REMARKS
==========================================================================
    2004-05-25  HuangXM    1.0     create
	2005-08-27  poul               modify
   DennyHan    2006-03-13            V1.00B
   DennyHan    2006-04-14            V2.00B
    //dwCheck: total file check
    //pUnZipDataBuf: Unzip buf1
    //pZipDataBuf: Unzip buf2
    // dwZipLength: Unzip Buf Len
    // INT fSrc,: Mtl File
    //  INT fDst: Temp File Handle
**************************************************************************/
UINT32 ApUnzipData(UINT32 dwCheck, UINT8* pUnZipDataBuf,
                   UINT8* pZipDataBuf, UINT32 dwLength, INT fSrc, INT fDst)
{
UINT32	dwKeyBlock;
UINT32	dwCheckRead;
UINT32	dwOffset;
UINT32	i;
UINT8	*pTemp;

    dwKeyBlock = *(UINT32 *)DICTDOWN_KEY_ADDRESS;
    for(i = 0; i < dwKeyBlock; i ++)
    {
        pTemp = (UINT8 *)(DICTDOWN_KEY_ADDRESS + (2 * i + 1) * sizeof(UINT32));
        dwCheckRead = *(UINT32 *)pTemp;
        if( dwCheckRead == dwCheck)
        {
            dwOffset = *(UINT32 *)(pTemp + sizeof(UINT32));
            return UnzipData( (UINT32)(DICTDOWN_KEY_ADDRESS + dwOffset),
                                pUnZipDataBuf, pZipDataBuf, dwLength,
                                fSrc, fDst);
        }
    }

    return 0;
}

/****************************************************************************/
/* FUNCTION:   BOOL __RrReadMtlFile()	        				    		*/
/* DESCRIPTION:                                                            */
/* INPUTS:     NULL                                                        */
/* OUTPUTS:    NONE                                                        */
/* RETURN:     TURE OR FAULSE                                              */
/****************************************************************************/
/*    NAME         DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*   Poul        2005-08-27            创建                                 */
/*   DennyHan    2006-03-13            V1.00B                               */
/****************************************************************************/
BOOL __RrReadMtlFile()
{
INT		nCheck;
INT		nUnzipLen;
INT		nFileLen;
//UINT8*  pZipDataBuf;
INT     hFile;
INT     bRet;
INT     OneBufSize;
    hFile = g_RrParam.hRrMstFile;
    nFileLen = FileLength(hFile);
	if(nFileLen == 0)
	{
		MsgBoxRun(MSGBOX_NONE, (UINT8*)"MTL文件格式错误!");
		return FALSE;
	}
    //-------------------------------------------------------------
    FileSeek(hFile, 0, FILESEEK_BEGIN);
    bRet=FALSE;
    if (FileRead(hFile, (char*)&nCheck, sizeof(UINT)) ==sizeof(UINT))
    {
        if (FileRead(hFile, (char*)&nUnzipLen, sizeof(UINT)) == sizeof(UINT))
        {
            bRet=TRUE;
        }
    }
    if (!bRet)
    {
        return FALSE;
    }

    //-----------------------------------------------------------
    g_RrParam.uTmpFileBlkNum = 0;
    g_RrParam.uTmpFileLen = nUnzipLen;
    if ( nUnzipLen > AU_2_BLK_FILELEN )
    {
        g_RrParam.uTmpFileBlkLen = AU_2_BLK_FILELEN/2;
        g_RrParam.uTmpFileBlkTotalNum = (g_RrParam.uTmpFileLen + g_RrParam.uTmpFileBlkLen-1)
                                        /g_RrParam.uTmpFileBlkLen;
        OneBufSize = g_RrParam.uTmpFileBlkLen;
    }
    else
    {
        g_RrParam.uTmpFileBlkLen = g_RrParam.uTmpFileLen;
        g_RrParam.uTmpFileBlkTotalNum = 1;

        if (g_RrParam.uTmpFileBlkLen < AU_2_BLK_FILELEN)
        {
            OneBufSize = AU_2_BLK_FILELEN/2;
        }
        else
        {
            OneBufSize = g_RrParam.uTmpFileBlkLen/2;
        }
    }
    g_RrParam.dwDispLength = 2*OneBufSize + 8;
    //-----------------------------------------------------------
    g_RrParam.pDispBuf = MemAlloc(g_RrParam.dwDispLength + 4);
    if  ( g_RrParam.pDispBuf ==NULL )
    {
        bRet=FALSE;
        MsgBoxRun(MSGBOX_NONE,(UINT8*)"内存不足,打开文件失败!");
    }

    //-------------------------------------------------------------
	g_RrParam.pTextBuf = g_RrParam.pDispBuf;
    if (bRet)
    {
         nUnzipLen = ApUnzipData(nCheck, g_RrParam.pDispBuf,
                                g_RrParam.pDispBuf + OneBufSize,
                                OneBufSize,
                                hFile, g_RrParam.hTmpFile);
    }

    if (   (!nUnzipLen)
        || (!bRet)       )
    {
        if (g_RrParam.pDispBuf)
        {
            MemFree(g_RrParam.pDispBuf);
        }
        g_RrParam.pDispBuf = NULL;
        return FALSE;
    }

    if (bRet)
    {   // Load the first text of text
        ApHsReReadFileText((UINT)NULL,(VOID*)NULL);
    }
    return TRUE;
}

/****************************************************************************/
/* FUNCTION:   BOOL __RrReadTxtFile()	        				    		*/
/* DESCRIPTION:                                                            */
/* INPUTS:     NULL                                                        */
/* OUTPUTS:    NONE                                                        */
/* RETURN:     TURE OR FAULSE                                              */
/****************************************************************************/
/*    NAME         DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*   Poul        2005-04-19            创建                                 */
/*   DennyHan    2006-03-13            V1.00B                               */
/****************************************************************************/
BOOL __RrReadTxtFile(VOID)
{
INT hFile;

    // Clear No text File
    g_RrParam.wRptMode &= (~RR_MODE_NOTEXT);

    hFile = g_RrParam.hRrMstFile;

    g_RrParam.dwDispLength = FileLength(hFile);
    g_RrParam.uTmpFileLen = g_RrParam.dwDispLength;
#if 0
    //如文件长于AU_MAX_TEXTLEN,则只以AU_MAX_TEXTLEN用于处理
    if (g_RrParam.dwDispLength > AU_MAX_FILELEN)
    {
		MsgBoxRun(MSGBOX_NONE,(UINT8*)"文本文件太长,打开失败!");
		return FALSE;
    }
#else
    g_RrParam.uTmpFileBlkNum = 0;
    if (g_RrParam.dwDispLength > AU_2_BLK_FILELEN )
    {
        g_RrParam.uTmpFileBlkLen = AU_2_BLK_FILELEN/2;
        g_RrParam.uTmpFileBlkTotalNum = (g_RrParam.uTmpFileLen + g_RrParam.uTmpFileBlkLen-1)
                                        /g_RrParam.uTmpFileBlkLen;
        g_RrParam.dwDispLength = 2*g_RrParam.uTmpFileBlkLen + 8;
    }
    else
    {
        g_RrParam.uTmpFileBlkLen = g_RrParam.uTmpFileLen;
        g_RrParam.uTmpFileBlkTotalNum = 1;
        g_RrParam.dwDispLength = g_RrParam.uTmpFileBlkLen + 8;
    }
#endif

    g_RrParam.pDispBuf = MemAlloc(g_RrParam.dwDispLength +4);
    if (NULL == g_RrParam.pDispBuf)
    {
        MsgBoxRun(MSGBOX_NONE,(UINT8*)"内存不足,打开失败!");
        return FALSE;
    }
    memset(g_RrParam.pDispBuf, 0, g_RrParam.dwDispLength + 4);

    g_RrParam.pTextBuf = g_RrParam.pDispBuf;
    ApHsReReadFileText((UINT)NULL,(VOID*)NULL);

    return TRUE;
}


/****************************************************************************/
/* FUNCTION:   BOOL __RrReadText()	        				    		    */
/* DESCRIPTION:                                                            */
/* INPUTS:     NULL                                                        */
/* OUTPUTS:    NONE                                                        */
/* RETURN:     TURE OR FAULSE                                              */
/****************************************************************************/
/*    NAME         DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*   Poul        2005-04-19            创建                                 */
/*   DennyHan    2006-03-13            V1.00B                               */
/****************************************************************************/
BOOL __RrReadText(VOID)
{
INT nRet;
UINT8	*pFile;

	pFile=g_RrParam.pTBuf;			//As a buffer

	strcpy ((char*)pFile,(const char*)g_RrParam.pFile);
    pFile[strlen((char*)pFile) - 4] = 0;

    //--------------------------
    nRet=0;
    //------------------------
    // open its MST file
	strcat((char*)pFile,(const char*) REREAD_DEFAULT_NAME);
    g_RrParam.hRrMstFile = FileOpen(pFile, FILEMODE_READONLY);
    if (g_RrParam.hRrMstFile == NUF_NOFILE)
    {
        nRet++;
        // To mtl
        g_RrParam.wRptMode |= RR_MODE_NOMST;
        g_RrParam.dwDispHead = 0;
        pFile[strlen(pFile) - 4] = 0;
        strcat(pFile, REREAD_MTL_FILE);
        g_RrParam.hRrMstFile = FileOpen(pFile, FILEMODE_READONLY);
        if (g_RrParam.hRrMstFile == NUF_NOFILE)
        {
            nRet++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -