📄 aphearsayrdfile.c
字号:
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 + -