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

📄 engine.c

📁 arena SDK开发应用
💻 C
📖 第 1 页 / 共 3 页
字号:
	HANDLE hFile  = NULL;
	DWORD  dwWrite = 0;
	
	hFile = (HANDLE)hDE;
	if (NULL == hFile)
	{
		return DE_CALLBACK_ERROR;
	}
	
	if(!WriteFile(hFile, lpBuffer, nLength, &dwWrite, NULL) || dwWrite != (DWORD)nLength)
	{
		return DE_CALLBACK_ERROR;
	}
	
	return dwWrite;
}



unsigned short* GetTypeStr(BYTE bType)
{	
	wchar_t* TypeStr[] = {
		L"",                           /* no word type or other type*/
		L"n.",                            /* noun */
		L"pron.",                                /* pronoun */
		L"vi.",                                  /* verb intransitive */
		L"vt.",                                  /* verb transitive */
		L"adj.",                                 /* adjective */
		L"adv.",                                 /* sdverb*/
		L"prep.",                                /* preposition */
		L"conj.",                                /* conjunction */
		L"int." ,                                /* interjection*/
		L"abbr.",
		L"v."
	};

	if(bType < 12)
		return (unsigned short*)TypeStr[bType];
	else
		return (unsigned short*)TypeStr[0];
}

void ReplaceHTML(TCHAR *szSource, TCHAR *szDest)
{
	int i = 0;
	int j = 0;
	
	while (szSource[i])
	{
		switch(szSource[i])
		{
		case '<':
			szDest[j++] = TEXT('&');
			szDest[j++] = TEXT('l');
			szDest[j++] = TEXT('t');
			szDest[j++] = TEXT(';');
			break;
		case '>':
			szDest[j++] = TEXT('&');
			szDest[j++] = TEXT('g');
			szDest[j++] = TEXT('t');
			szDest[j++] = TEXT(';');
			break;
		default:
			szDest[j++] = szSource[i];			
		}
		i++;
	}
}

static unsigned short TransYB(unsigned char ch)
//static unsigned char TransYB(unsigned char ch)
{
	switch(ch)
	{
	case 0x01:
		return '1';
		//return 0x026a;
	case 0x02:
		return '2';
		//return 0x025b;
	case 0x03:
		return '3';
		//return 0x00e6;
	case 0x04:
		return '4';
		//return 0x0251;
	case 0x06:
		return '5';
		//return 0x0254;
	case 0x0b:
		return '6';
		//return 0x0275;
	case 0x0f:
		return '7';
		//return 0x028c;
	case 0x10:
		return '8';
		//return 0x0259;
	case 0x19:
		return '9';
		//return 0x014b;
	case 0x1c:
		return '0';
		//return 0x00f0;
	case 0x1d:
		return '<';
		//return 0x0283;
	case 0x1e:
		return '>';
		//return 0x0292;
	case 0x1f:
		return '|';
		//return 0x02cf;
	default:
		return (unsigned short)ch;
	}
}

static char ReverseTransYB(char ch)
//static unsigned char TransYB(unsigned char ch)
{
	switch(ch)
	{
	case '1':
		return 0x01;
		//return 0x026a;
	case '2':
		return 0x02;
		//return 0x025b;
	case '3':
		return 0x03;
		//return 0x00e6;
	case '4':
		return 0x04;
		//return 0x0251;
	case '5':
		return 0x06;
		//return 0x0254;
	case '6':
		return 0x0b;
		//return 0x0275;
	case '7':
		return 0x0f;
		//return 0x028c;
	case '8':
		return 0x10;
		//return 0x0259;
	case '9':
		return 0x19;
		//return 0x014b;
	case '0':
		return 0x1c;
		//return 0x00f0;
	case '<':
		return 0x1d;
		//return 0x0283;
	case '>':
		return 0x1e;
		//return 0x0292;
	case '|':
		return 0x1f;
		//return 0x02cf;
	default:
		return ch;
	}
	
}

BOOL DDE_GetWordContent(LPTSTR lpBuf, LPTSTR lpWord)
{
	if ( lpWord[0] < 0x0100 )
	{
		// 英文单词
		DDE_GetWordContentEN(lpBuf, lpWord);
	}
	else
	{
		// 中文单词 
		DDE_GetWordContentCN(lpBuf, lpWord);
	}
	return TRUE;
}

// 函数名		: ShowContent
// 描述			: 显示当前单词的解释(英文)
// 返回类型		: BOOL 
// 参数         : HWND hWndWordContent
BOOL DDE_GetWordContentEN(LPTSTR lpBuf, LPTSTR lpWord)
{
	wchar_t* pOutput = (wchar_t*)lpBuf;
	int nSize = DEGetWordContentSize(&g_pData, 0);
	unsigned char* chOutput = (unsigned char*)malloc(sizeof(unsigned char)*nSize);
	WCONTENT* output = (WCONTENT*)chOutput;
	WCONTENT* pTemp = (WCONTENT*)output;
	int NUM = 100;
	ONEEXP_LIST pOneLib;
	WORDLIST* pWordList;
	BOOL bOne = FALSE;
	wchar_t* pType = NULL;
	int nNum = 1;
	unsigned short* p = NULL;
	unsigned short usIndex[12];
	// 反义词
	unsigned short temp[4] = {
					0x53cd,
						0x4e49,
						0x8bcd,
						0x0000
				};
	int iNum =0;
	int i = 0;
	DESTR pStr = NULL;

	pOutput[0] = 0x00;
	wcscpy(g_szFocusWord, lpWord);
	if(nSize == 0)
		return FALSE;
	DEGetWordContent(&g_pData, 0, output);


	while(pTemp)
	{
		if(pTemp->pContent != NULL)
		{
		//if(pTemp->pContent->phoneSym[0] != 0x00)/********** 20061129 wangjf **********/
			if(pTemp->pContent->phoneSym != 0x00)
			{
				// 音标 
				p = pTemp->pContent->phoneSym;
				wcscat(pOutput, L"2@[");
				wcscat(pOutput, (wchar_t*)p);
				wcscat(pOutput, L"]\n");
			}

			pOneLib = pTemp->pContent->explanation;
			
			while(pOneLib)
			{
				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;
			}				
			if(pTemp->pContent->numofAntonym != 0)
			{
				// 反义词
				temp[0] = 0x53cd;
				temp[1] = 0x4e49;
				temp[2] = 0x8bcd;
				temp[2] = 0x0000;

				wcscat(pOutput, L"\n");
				wcscat(pOutput, L"3@");
				wcscat(pOutput, (wchar_t*)&temp[0]);
				wcscat(pOutput, L"\n");
				wcscat(pOutput, L"7@"); // 焦点单词 
				iNum = pTemp->pContent->numofAntonym;
				i = 0;
				while(i < iNum)
				{
					pStr = pTemp->pContent->pAntonym[i];
					if(pStr)
					{
						wcscat(pOutput, L" ");
						wcscat(pOutput, (wchar_t*)pStr);
					}
					
					i ++;
				}
				wcscat(pOutput, L"\n");
			}
			
			if(pTemp->pContent->numofSynonym != 0)
			{
				// 同义词
						temp[0] = 0x8fd1,
						temp[1] = 0x4e49,
						temp[2] = 0x8bcd,
						temp[3] = 0x0000;

				wcscat(pOutput, L"\n");
				wcscat(pOutput, L"4@");
				wcscat(pOutput, (wchar_t*)&temp[0]);
				wcscat(pOutput, L"\n");
				wcscat(pOutput, L"7@"); // 焦点单词 
				iNum = pTemp->pContent->numofSynonym;
				i = 0;
				while(i < iNum)
				{
					pStr = pTemp->pContent->pSynonym[i];
					if(pStr)
					{
						wcscat(pOutput, L" ");
						wcscat(pOutput, (wchar_t*)pStr);
					}
					
					i ++;
				}
				wcscat(pOutput, L"\n");
			}
			
			if(pTemp->pContent->numofIrregular != 0)
			{
				// 不规则
					temp[0] = 0x4e0d;
					temp[0] = 0x89c4;
					temp[0] = 0x5219;
					temp[0] = 0x0000;

				wcscat(pOutput, L"\n");
				wcscat(pOutput, L"5@");
				wcscat(pOutput, (wchar_t*)&temp[0]);
			//	wcscat(pOutput, L"\n");
			//	wcscat(pOutput, L"7@"); // 焦点单词 
				iNum = pTemp->pContent->numofIrregular;
				i = 0;
				while(i < iNum)
				{
					pStr = pTemp->pContent->pIrregular[i];
					if(pStr)
					{
						wcscat(pOutput, L"\n");
						wcscat(pOutput, L" ");
						wcscat(pOutput, (wchar_t*)pStr);
					}
					
					i ++;
				}
				wcscat(pOutput, L"\n");
			}
		}
		pTemp = pTemp->pNext;
	}

	if(chOutput != NULL)
	{
		free(chOutput);
		chOutput = NULL;
	}

	return TRUE;
}

// 函数名		: DDE_GetWordContentCN
// 描述			: 显示当前单词的解释(中文)
// 返回类型		: BOOL 
BOOL DDE_GetWordContentCN(LPTSTR lpBuf, LPTSTR lpWord)
{
	wchar_t* pOutput = (wchar_t*)lpBuf;
	
	int nSize = DEGetWordContentSize(&g_pData, 0);
	unsigned char* chOutput = (unsigned char*)malloc(sizeof(unsigned char)*nSize);
	WCONTENT* output = (WCONTENT*)chOutput;
	WCONTENT* pTemp = (WCONTENT*)output;
	int NUM = 100;
	ONEEXP_LIST pOneLib;
	WORDLIST* pWordList;
	DESTR pStr = NULL;
	BOOL bOne = FALSE;
	int nNum = 1;



	if(nSize == 0)
		return FALSE;

	DEGetWordContent(&g_pData, 0, output);

	pOutput[0] = 0x00;
	while (pTemp) // 不同词库
    {
        if (pTemp->pContent != NULL)
        {
			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 (wcschr((wchar_t*)pStr, TEXT(' ')) == NULL)
						{
							// 非词组 
							wcscat((wchar_t*)pOutput, L"7@");
						}
						else
						{
							// 词组 
							wcscat((wchar_t*)pOutput, L" ");
						}
						wcscat(pOutput, (wchar_t*)pStr);
						wcscat(pOutput, L"\n");
					}
		
					pWordList = pWordList->pNext;
				}
				pOneLib = pOneLib->pNext;

            } // end while pExplanation 
			
        }// end if pContent
		pTemp = pTemp->pNext;
    }

	if(chOutput != NULL)
	{
		free(chOutput);
		chOutput = NULL;
	}

	return TRUE;
}

BOOL DDE_GetReciteContent(LPTSTR lpBuf, LPTSTR lpWord, BOOL bWord, BOOL bPhoneticFlag, LPTSTR lpPhonetic)
{
	wchar_t* pOutput = (wchar_t*)lpBuf;

⌨️ 快捷键说明

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