📄 engine.c
字号:
// 获得所有词库解释大小
DWORD dwSize = DEInstantGetWordContentSize(&g_pData, 0, (DESTR)lpWord);
unsigned char* chOutput = (unsigned char*)malloc(sizeof(unsigned char)*dwSize);
WCONTENT* output = (WCONTENT*)chOutput;
WCONTENT* pTemp = (WCONTENT*)output;
ONEEXP_LIST pOneLib;
WORDLIST* pWordList;
BOOL bOne = FALSE;
unsigned short usIndex[12];
DESTR pStr = NULL;
int nNum = 1;
pOutput[0] = 0x00;
wcscpy(g_szFocusWord, lpWord);
if (0 == dwSize)
{
return FALSE;
}
if (DE_OK != DEInstantGetWordContent(&g_pData, 0, (DESTR)lpWord, output))
{
free(chOutput);
chOutput = NULL ;
return FALSE;
}
if ( bWord )
{
wcscpy( pOutput, lpWord );
wcscat( pOutput, L"\n" );
}
while(pTemp)
{
pOutput += wcslen( pOutput );
if(pTemp->pContent != NULL)
{
// if(pTemp->pContent->phoneSym != 0x00)
if(pTemp->pContent->phoneSym != 0x00 && lpWord[0] < 0X80)/******* 20061228 wangjf *******/
{
if(bPhoneticFlag)
{
// 音标
unsigned short* p = pTemp->pContent->phoneSym;
wcscat(pOutput, L"2@[");
wcscat(pOutput, (wchar_t*)p);
wcscat(pOutput, L"]\n");
}
if ( lpPhonetic != NULL )
{
wcscpy( lpPhonetic, (TCHAR*)&pTemp->pContent->phoneSym[0] );
}
}
pOneLib = pTemp->pContent->explanation;
while(pOneLib)
{
wchar_t* pType = (wchar_t*)GetTypeStr(pOneLib->typeofword);
if(pType[0])
{
// 词性
wcscat(pOutput, L"6@");
wcscat(pOutput, pType);
wcscat(pOutput, L"\n");
}
pWordList = pOneLib->interpretation;
bOne = FALSE;
if(pWordList)
{
if(pWordList->pNext)
bOne = TRUE;
}
nNum = 1;
while(pWordList)
{
pStr = pWordList->pWord;
if(pStr != NULL)
{
if(bOne)
{
usIndex[0] = '(';
swprintf((wchar_t*)&usIndex[1], TEXT("%d"), nNum);
wcscat((wchar_t*)pOutput, (wchar_t*)usIndex);
wcscat((wchar_t*)pOutput, L")");
nNum++;
}
wcscat((wchar_t*)pOutput, (wchar_t*)pStr);
wcscat((wchar_t*)pOutput, L"\n");
}
pWordList = pWordList->pNext;
//wcscat(pOutput, L"\n");
}
pOneLib = pOneLib->pNext;
}
}
pTemp = pTemp->pNext;
}
if(chOutput != NULL)
{
free(chOutput);
chOutput = NULL;
}
return TRUE;
}
#if 0
BOOL DDE_PronWord(TCHAR* pWord, TCHAR* pPhonetic, int nLen )
{
DWORD dwBeg, dwEnd;
TCHAR szWaveNameW[256], szAmrNameW[256];
char szWaveNameA[256], szAmrNameA[256];
TCHAR* pPath = NULL;
int length_phone_in, length_phone_out;
char cYin[40], cTmpYin[40];
int nRes = 0;
DE_HANDLE fp = NULL ;
int i = 0;
FILE *pf = NULL;
if(pWord[0]>0X7f)//Chinese char
return FALSE;
if(g_Flag_Ecindex && g_Flag_Ceindex && g_Flag_Truevoicedata && DEGetVoiceRangeFromWord(&g_pData, (DESTR)pWord, &dwBeg, &dwEnd))
{
GetModuleFileName(NULL, szWaveNameW, 100);
pPath = wcsrchr(szWaveNameW, '\\'); pPath[1] = 0x00;
wcscpy(szAmrNameW, szWaveNameW);
wcscat(szAmrNameW, TEXT("total.amr"));
wcscat( szWaveNameW, TEXT("output.wav"));
//WideCharToMultiByte(0, 0, szWaveNameW, -1, szWaveNameA, 100, NULL, NULL);
tp_sc_unicode_to_gbk(szWaveNameW,100,szWaveNameA,100);
//WideCharToMultiByte(0, 0, szAmrNameW, -1, szAmrNameA, 100, NULL, NULL);
tp_sc_unicode_to_gbk(szAmrNameW,100,szAmrNameA,100);
///////////////////////////////////////////////////////////////////////////////////
fp = (unsigned long)CreateFile(szAmrNameW,GENERIC_READ,FILE_SHARE_READ,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL) ;
if( INVALID_HANDLE_VALUE == (HANDLE)fp)
{
wcscpy(szAmrNameW, TEXT("\\Storage Card\\total.amr"));
//WideCharToMultiByte(0, 0, szAmrNameW, -1, szAmrNameA, 100, NULL, NULL);
tp_sc_unicode_to_gbk(szAmrNameW,100,szAmrNameA,100);
fp = (unsigned long)CreateFile(szAmrNameW,GENERIC_READ,FILE_SHARE_READ,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL) ;
if( INVALID_HANDLE_VALUE != (HANDLE)fp)
{
CloseHandle( (HANDLE)fp );
DeleteFile(szWaveNameW);
if(amr2wav(szAmrNameA, szWaveNameA, dwBeg, dwEnd) == 0)
{
PlaySound(szWaveNameW, NULL, SND_ASYNC | SND_NODEFAULT);
}
DeleteFile(szWaveNameW);
return TRUE;
}
}
else
{
CloseHandle( (HANDLE)fp );
DeleteFile(szWaveNameW);
if(amr2wav(szAmrNameA, szWaveNameA, dwBeg, dwEnd) == 0)
{
PlaySound(szWaveNameW, NULL, SND_ASYNC | SND_NODEFAULT);
}
//DeleteFile(szWaveNameW);
return TRUE;
}
}
if (DDE_TTSIsOk())
{
GetModuleFileName(NULL, szWaveNameW, 255);
pPath = wcsrchr(szWaveNameW, '\\'); pPath[1] = 0x00;
wcscat( szWaveNameW, TEXT("result.wav"));
//WideCharToMultiByte(0, 0, szWaveNameW, -1, szWaveNameA, 255, NULL, NULL);
tp_sc_unicode_to_gbk(szWaveNameW,255,szWaveNameA,255);
// delete the old .wav file in the device
DeleteFile(szWaveNameW);
/****** add 20061221 wangjf ********/
if( 0 == pPhonetic[0])
return FALSE ;
// find first char '['
if ( *pPhonetic != '[' )
{
while ( *pPhonetic != '[' )
pPhonetic--;
}
pPhonetic++;
// Copy Yin Biao
i = 0;
// while ( *pPhonetic != ']' )
for (i=0; i < nLen; i++)
{
cYin[i++] = (char)(*pPhonetic++);
}
cYin[i] = 0;
getPhone((unsigned char*)cYin, cTmpYin, &length_phone_in, &length_phone_out);
nRes = pronword((unsigned char*)cTmpYin, length_phone_out, szWaveNameA);
if ( nRes == 0) // ERR_OK
{
PlaySound(szWaveNameW, NULL, SND_ASYNC | SND_NODEFAULT);
}
/* else if ( nRes == ERR_NOMEM )
{
// add by zhanglb 2005.3.18
MessageBox( g_hHtmlWnd, _T("手机剩余空间不足,无法生成声音文件!"), _T("错误"), MB_OK );
}*/
DeleteFile(szWaveNameW);
return TRUE;
}
return FALSE;
}
#endif
BOOL DDE_PronWord(unsigned short* pWord, TCHAR* pPhonetic, int nLen )
{
DWORD dwBeg, dwEnd;
unsigned short szWaveNameW[256];//, szAmrNameW[256];
char szWaveNameA[256];//, szAmrNameA[256];
unsigned short* pPath = NULL;
int length_phone_in, length_phone_out;
char cYin[40], cTmpYin[40];
int nRes = 0;
// DE_HANDLE fp = NULL ;
int i = 0;
FILE * pfScr = NULL;
FILE * pfDes = NULL;
int mLen = 0;
// unsigned char szBuffer[1024*3];
if(pWord[0]>0X7f)//not english char
return FALSE;
if(g_Flag_Ecindex && g_Flag_Ceindex && g_Flag_Truevoicedata && DEGetVoiceRangeFromWord(&g_pData, (unsigned short *)pWord, &dwBeg, &dwEnd))
{
/*
GetModuleFileName(NULL, szWaveNameW, 100);
pPath = wcsrchr(szWaveNameW, '\\'); pPath[1] = 0x00;
wcscpy(szAmrNameW, szWaveNameW);
wcscat(szAmrNameW, TEXT("total.amr"));
wcscat( szWaveNameW, TEXT("output.amr"));
tp_sc_unicode_to_gbk(szWaveNameW,100,szWaveNameA,100);
tp_sc_unicode_to_gbk(szAmrNameW,100,szAmrNameA,100);
fp = (unsigned long)CreateFile(szAmrNameW,GENERIC_READ,FILE_SHARE_READ,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL) ;
if( INVALID_HANDLE_VALUE != (HANDLE)fp)
{
CloseHandle( (HANDLE)fp );
DeleteFile(szWaveNameW);
if(amr2wav(szAmrNameA, szWaveNameA, dwBeg, dwEnd) == 0)
{
PlaySound(szWaveNameW, NULL, SND_ASYNC | SND_NODEFAULT);
}
//DeleteFile(szWaveNameW);
return TRUE;
}
*/
/*
//getcwd(szAmrNameA,256);
//pPath = strrchr(szAmrNameA,'\\');
//pPath[1] = 0x00;
//strcat(szAmrNameA,"\\Exec_Bin\\");
//strcpy(szWaveNameA,szAmrNameA);
//strcat(szAmrNameA,"total.amr");
//strcat(szWaveNameA,"output.amr");
pfScr = tp_fopen("/flash/total.amr","rb");
pfDes = tp_fopen("/flash/output.amr","wb");
if ((pfDes)&&(pfScr))
{
mLen = dwEnd - dwBeg;
tp_fseek(pfScr,dwBeg,SEEK_SET);
if(mLen == tp_fread(szBuffer,1,mLen,pfScr))
{
tp_fseek(pfDes,0,SEEK_SET);
tp_fwrite("#!AMR\n",1,6,pfDes);
tp_fwrite(szBuffer,1,mLen,pfDes);
}
}
if(pfDes)
tp_fclose(pfDes);
if(pfScr)
tp_fclose(pfScr);
*/
CutAmrNB("C:/DTmobile/ArenaSDK/0.2/filesystem/flash/total.amr","C:/DTmobile/ArenaSDK/0.2/filesystem/flash/output.amr", dwBeg, dwEnd);
}
if (DDE_TTSIsOk())
{
GetModuleFileName(NULL, szWaveNameW, 255);
pPath = wcsrchr(szWaveNameW, '\\'); pPath[1] = 0x00;
wcscat( szWaveNameW, TEXT("result.wav"));
//WideCharToMultiByte(0, 0, szWaveNameW, -1, szWaveNameA, 255, NULL, NULL);
tp_sc_unicode_to_gbk(szWaveNameW,255,szWaveNameA,255);
// delete the old .wav file in the device
DeleteFile(szWaveNameW);
/****** add 20061221 wangjf ********/
if( 0 == pPhonetic[0])
return FALSE ;
// find first char '['
if ( *pPhonetic != '[' )
{
while ( *pPhonetic != '[' )
pPhonetic--;
}
pPhonetic++;
// Copy Yin Biao
i = 0;
// while ( *pPhonetic != ']' )
for (i=0; i < nLen; i++)
{
cYin[i++] = (char)(*pPhonetic++);
}
cYin[i] = 0;
getPhone((unsigned char*)cYin, cTmpYin, &length_phone_in, &length_phone_out);
nRes = pronword((unsigned char*)cTmpYin, length_phone_out, szWaveNameA);
if ( nRes == 0) // ERR_OK
{
PlaySound(szWaveNameW, NULL, SND_ASYNC | SND_NODEFAULT);
}
DeleteFile(szWaveNameW);
return TRUE;
}
return FALSE;
}
BOOL FillWordBuf(TCHAR* ucIn, TCHAR* output, TCHAR* phonetic )
{
wchar_t *pFocusWord = wcscpy(g_szFocusWord, ucIn);
int nBufLen = DEInstantGetWordContentSize( &g_pData, 0, (DESTR)ucIn);
char *pOutBuf = (char*)malloc(sizeof(char)*nBufLen);
WCONTENT *pWcontent = (WCONTENT*)pOutBuf;
ONECONT *one = pWcontent->pContent;
ONEEXP_LIST pExplanation = one->explanation;
char* p = g_szPhonetic;
TCHAR* pPhonetic = (TCHAR*)&one->phoneSym[0];
//fill ...
TCHAR *arrWordType[] =
{
TEXT("n."), TEXT("pron."), TEXT("vi."),
TEXT("vt."), TEXT("adj."), TEXT("adv."),
TEXT("perp."), TEXT("conj."), TEXT("int."),
TEXT("abbr."), TEXT("")
};
//_tcscat(output, ucIn);
//_tcscat(output, _T(" "));
// 不同词性
BYTE typeofword;
WORDLIST *pInterpretation;
int nLen = 0;
if(nBufLen == 0)
return FALSE;
DEInstantGetWordContent(&g_pData, 0, (DESTR)ucIn, (WCONTENT*)pOutBuf);
output[0] = 0;
wcscpy( (wchar_t*)phonetic, (wchar_t*)TEXT("[") );
wcscat( (wchar_t*)phonetic, (wchar_t*)pPhonetic );
wcscat( (wchar_t*)phonetic, (wchar_t*)TEXT("]") );
while(*pPhonetic)
{
*p++ = (char)*pPhonetic++; // ReverseTransYB((char)*pPhonetic++);
}
*p = 0x00;
while (pExplanation)
{
int i = 0;
typeofword = pExplanation->typeofword; // 记录词性
pInterpretation = pExplanation->interpretation;
while (pInterpretation) // 不同解释
{
i++;
if (wcslen((wchar_t*)pInterpretation->pWord))
{
if(i==1) // 第一个单词需要显示词性
{
if ((typeofword >0) && (typeofword <=11))
{
wcscat(output, arrWordType[typeofword-1]);
}
}
wcscat(output, (wchar_t*)pInterpretation->pWord);
wcscat(output, TEXT(";"));
}
// end if pword
pInterpretation = pInterpretation->pNext;
} // end while pIntZerpretation
pExplanation = pExplanation->pNext;
nLen = wcslen(output);
output[nLen - 1] = '\0';
} // end while pExplanation
free(pOutBuf);
pOutBuf = NULL ;
return TRUE;
}
BOOL DDE_SetDictFlag( BYTE bFlag)
{
return DESetDictFlag( &g_pData, bFlag) ;
}
BOOL DDE_SetDictRange(unsigned short usChBeg, unsigned short usChEnd)
{
return DESetDictRange( &g_pData,usChBeg, usChEnd);
}
DWORD DDE_GetDictNum()
{
return DEGetDictNum(&g_pData);
}
BOOL DDE_GetDictString( DWORD nIndex, DECHAR OutputString[MAX_WORD_SIZE])
{
return DEGetDictString( &g_pData, nIndex, OutputString);
}
DWORD DDE_GetDictContentSize( DWORD nIndex)
{
return DEGetDictContentSize( &g_pData, nIndex);
}
BOOL DDE_GetDictContent( DWORD nIndex, WCONTENT* content)
{
return DEGetDictContent( &g_pData, nIndex, content);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -