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

📄 engine.c

📁 arena SDK开发应用
💻 C
📖 第 1 页 / 共 3 页
字号:
		// 获得所有词库解释大小
    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 + -