103 lines
2.7 KiB
C++
103 lines
2.7 KiB
C++
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// 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;
|
||
|
}
|
||
|
}
|