Leaked source code of windows server 2003
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.
 
 
 
 
 
 

96 lines
2.4 KiB

/****************************************************************************
Lex.cpp : lexicon management functions
Copyright 2000 Microsoft Corp.
History:
17-MAY-2000 bhshin changed signature for CICERO
02-FEB-2000 bhshin created
****************************************************************************/
#include "private.h"
#include "Lex.h"
// OpenLexicon
//
// map the lexicon file into memory
//
// Parameters:
// lpcszLexPath -> (LPCSTR) lexicon path
// pLexMap -> (MAPFILE*) ptr to lexicon map struct
//
// Result:
// (TRUE if success, FALSE if failure)
//
// 02FEB2000 bhshin began
BOOL OpenLexicon(LPCSTR lpcszLexPath, MAPFILE *pLexMap)
{
char *pData;
unsigned short nVersion;
pLexMap->hFile = NULL;
pLexMap->hFileMapping = NULL;
pLexMap->pvData = NULL;
// open the file for reading
pLexMap->hFile = CreateFile(lpcszLexPath, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (pLexMap->hFile == INVALID_HANDLE_VALUE)
return FALSE;
// create a file mapping
pLexMap->hFileMapping = CreateFileMappingA(pLexMap->hFile, NULL, PAGE_READONLY, 0, 0, NULL);
if (pLexMap->hFileMapping == NULL)
return FALSE;
// map the entire file for reading
pLexMap->pvData = MapViewOfFileEx(pLexMap->hFileMapping, FILE_MAP_READ, 0, 0, 0, 0);
if (pLexMap->pvData == NULL)
return FALSE;
// check the version # in the first 2 bytes (swap bytes)
pData = (char*)pLexMap->pvData;
nVersion = pData[0];
nVersion |= (pData[1] << 8);
if (nVersion < LEX_VERSION)
{
return FALSE;
}
// check the magic signature
if (strcmp(pData+2, "HJKO") != 0)
{
return FALSE;
}
return TRUE;
}
// CloseLexicon
//
// unmap the lexicon file into memory
//
// Parameters:
// pLexMap -> (MAPFILE*) ptr to lexicon map struct
//
// Result:
// (void)
//
// 02FEB2000 bhshin began
void CloseLexicon(MAPFILE *pLexMap)
{
if (pLexMap->pvData != NULL)
UnmapViewOfFile(pLexMap->pvData);
if (pLexMap->hFileMapping != NULL)
CloseHandle(pLexMap->hFileMapping);
if (pLexMap->hFile != NULL)
CloseHandle(pLexMap->hFile);
pLexMap->hFile = NULL;
pLexMap->hFileMapping = NULL;
pLexMap->pvData = NULL;
}