Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

197 lines
4.9 KiB

//+---------------------------------------------------------------------------
//
// Copyright (C) 1998 - 1999, Microsoft Corporation.
//
// Routine: DllMain
//
// Returns: True if successful, else False.
//
// History: Weibz, 10-Sep-1997, created it.
//
//---------------------------------------------------------------------------
#include <pch.cxx>
#include "basecore.hpp"
#include "basecode.hpp"
#include "basedef.hpp"
#include "basegbl.hpp"
#include "MainDict.h"
#include "stemkor.h"
HSTM g_hStm;
BOOL g_fLoad;
CRITICAL_SECTION ThCritSect;
extern char TempJumpNum[], TempSujaNum[],TempBaseNum[];
extern char TempNumNoun[], TempSuffixOut[];
extern char bTemp[], TempETC[], TempDap[];
extern LenDict JumpNum;
extern LenDict SujaNum;
extern LenDict BaseNum;
extern LenDict NumNoun;
extern LenDict Suffix;
extern LenDict B_Dict;
extern LenDict T_Dict;
extern LenDict Dap;
BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH :
DisableThreadLibraryCalls(hDLL);
InitializeCriticalSection (&ThCritSect);
JumpNum.InitLenDict(TempJumpNum, 5, 5);
SujaNum.InitLenDict(TempSujaNum, 8, 27);
BaseNum.InitLenDict(TempBaseNum, 5, 3);
NumNoun.InitLenDict(TempNumNoun, 8, 32);
Suffix.InitLenDict(TempSuffixOut, 8, 8);
B_Dict.InitLenDict(bTemp, 5, 1);
T_Dict.InitLenDict(TempETC, 10, 7);
Dap.InitLenDict(TempDap, 5, 1);
g_fLoad = FALSE;
#ifdef KORDBG
OutputDebugString("\nKorwbrkr: DLL_PROCESS_ATTACH\n");
#endif
#ifdef KORDBG
OutputDebugString("\nInit is OK\n");
#endif
break ;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH :
if (g_fLoad) {
StemmerCloseMdr(g_hStm);
StemmerTerminate(g_hStm);
}
DeleteCriticalSection (&ThCritSect);
break ;
} //switch
return TRUE ;
}
BOOL StemInit()
{
if ( g_fLoad )
return TRUE;
EnterCriticalSection( &ThCritSect );
do
{
// Someone else got here first.
if ( g_fLoad )
break;
SRC src;
HKEY KeyStemm;
DWORD dwType, dwSize;
char lpszTemp[MAX_PATH],szSysPath[MAX_PATH];
src = StemmerInit(&g_hStm);
if (src != NULL)
{
#ifdef KORDBG
OutputDebugString("Korwbrkr: StemmerInit( ) returns error\n");
#endif
break;
}
src = StemmerSetOption(g_hStm,SO_NOUNPHRASE|SO_ALONE|SO_AUXILIARY |
SO_COMPOUND | SO_SUFFIX | SO_NP_NOUN |SO_NP_PRONOUN |
SO_NP_NUMBER | SO_NP_DEPENDENT | SO_SUFFIX_JEOG);
if ( src != NULL )
{
#ifdef KORDBG
OutputDebugString("Korwbrkr: StemmerSetOption( )returns error\n");
#endif
break;
}
if ( RegOpenKeyEx( HKEY_LOCAL_MACHINE,STEMMERKEY,
0L,
KEY_QUERY_VALUE,
&KeyStemm ) == ERROR_SUCCESS )
{
dwSize = MAX_PATH;
if ( (RegQueryValueEx(KeyStemm,
STEM_DICTIONARY,
(LPDWORD)NULL,
&dwType,
(LPBYTE)lpszTemp,
&dwSize) == ERROR_SUCCESS)
&& (dwType==REG_SZ) )
{
lpszTemp [dwSize] = '\0';
GetSystemDirectory( szSysPath, sizeof(szSysPath)/sizeof(szSysPath[0]) );
strcat(szSysPath, "\\");
strcat(szSysPath, lpszTemp);
#ifdef KORDBG
OutputDebugString("Korwbrkr: the dict is ");
OutputDebugString(szSysPath);
#endif
src = StemmerOpenMdr(g_hStm,szSysPath);
if ( src != NULL )
{
#ifdef KORDBG
OutputDebugString("Korwbrkr: StemmerOpenMdr returns err\n");
#endif
RegCloseKey (KeyStemm);
break;
}
}
else
{
#ifdef KORDBG
OutputDebugString("Korwbrkr: RegQueryValueEx returns err\n");
#endif
RegCloseKey( KeyStemm );
break;
}
RegCloseKey (KeyStemm);
}
else
{
#ifdef KORDBG
OutputDebugString("Korwbrkr:RegOpenKeyEx returns error\n");
#endif
break;
}
g_fLoad = TRUE;
} while ( FALSE );
LeaveCriticalSection( &ThCritSect );
return g_fLoad;
}