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.
 
 
 
 
 
 

102 lines
2.7 KiB

/////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 1997 - 1998, Microsoft Corporation. All Rights Reserved.
//
/////////////////////////////////////////////////////////////////////////////
//#include "stdafx.h"
#include "pch.cxx"
#include "MainDict.h"
static HANDLE hMainDict=0;
///////////////////////////////////////////////////////////////////////////
// Check if aleady opened. If a processe load multiple DLL it can occur
static WORD DictOpenCount = 0;
BOOL VerifyMainDict(LPSTR lpszLexFileName)
{
_MainDictHeader mainDictHeader;
DWORD readBytes;
HANDLE hDict;
hDict = CreateFile(lpszLexFileName, GENERIC_READ, FILE_SHARE_READ, 0,
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0);
if (hDict==INVALID_HANDLE_VALUE)
return FALSE;
ReadFile(hDict, &mainDictHeader, sizeof(_MainDictHeader), &readBytes, 0);
if (readBytes==0 || strcmp(COPYRIGHT_STR, mainDictHeader.COPYRIGHT_HEADER)!=0) {
CloseHandle(hDict);
return FALSE;
}
CloseHandle(hDict);
return TRUE;
}
BOOL OpenMainDict(LPSTR lpszLexFileName)
{
_MainDictHeader mainDictHeader;
DWORD readBytes;
if (DictOpenCount) {
DictOpenCount++; // Incerease reference count
return TRUE;
}
hMainDict = CreateFile(lpszLexFileName,
GENERIC_READ, FILE_SHARE_READ,
0,
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN,
0);
if (hMainDict != INVALID_HANDLE_VALUE) {
ReadFile(hMainDict,
&mainDictHeader,
sizeof(_MainDictHeader),
&readBytes,
0);
if (strcmp(COPYRIGHT_STR, mainDictHeader.COPYRIGHT_HEADER) == 0) {
SetFilePointer(hMainDict, MAIN_DICT_HEADER_SIZE, 0, FILE_BEGIN);
if (OpenSilsaDict(hMainDict, mainDictHeader.iSilsa) != FALSE) {
if (OpenHeosaDict(hMainDict, mainDictHeader.iHeosa) != FALSE) {
#ifndef _NO_OYONG_DICT_
if (OpenOyongDict(hMainDict, mainDictHeader.iOyong) == FALSE) {
CloseHeosaDict();
} else {
#endif
DictOpenCount = 1;
return TRUE;
#ifndef _NO_OYONG_DICT_
}
#endif
}
CloseSilsaDict();
}
}
CloseHandle(hMainDict);
}
return FALSE;
}
void CloseMainDict()
{
DictOpenCount--;
if (DictOpenCount==0) {
CloseSilsaDict();
CloseHeosaDict();
#ifndef _NO_OYONG_DICT_
CloseOyongDict();
#endif
CloseHandle(hMainDict);
hMainDict = 0;
}
}