//+--------------------------------------------------------------------------- // // Copyright (C) 1998 - 1999, Microsoft Corporation. // // Routine: DllMain // // Returns: True if successful, else False. // // History: Weibz, 10-Sep-1997, created it. // //--------------------------------------------------------------------------- #include #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; }