mirror of https://github.com/tongzx/nt5src
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.
103 lines
2.2 KiB
103 lines
2.2 KiB
/***********************************************************************************************\
|
|
* FILE: CraneFl.c
|
|
*
|
|
* Code to load crane data ( QHEAD and QNODE ) from a file.
|
|
\***********************************************************************************************/
|
|
#include <stdio.h>
|
|
#include "common.h"
|
|
#include "crane.h"
|
|
#include "cranep.h"
|
|
|
|
// Load crane data from a file.
|
|
BOOL CraneLoadFile(
|
|
LOCRUN_INFO *pLocRunInfo,
|
|
CRANE_LOAD_INFO *pLoadInfo,
|
|
wchar_t *pwchPathName
|
|
) {
|
|
HANDLE hFile, hMap;
|
|
BYTE *pByte;
|
|
wchar_t aPath[128];
|
|
|
|
// Generate path to file.
|
|
FormatPath(aPath, pwchPathName, (wchar_t *)0, (wchar_t *)0, (wchar_t *)0, L"cart.dat");
|
|
|
|
hFile = CreateMappingCall(
|
|
aPath,
|
|
GENERIC_READ,
|
|
FILE_SHARE_READ,
|
|
NULL,
|
|
OPEN_EXISTING,
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
NULL
|
|
);
|
|
|
|
if (hFile == INVALID_HANDLE_VALUE)
|
|
{
|
|
goto error1;
|
|
}
|
|
|
|
// Create a mapping handle
|
|
hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
|
|
if (hMap == NULL)
|
|
{
|
|
goto error2;
|
|
}
|
|
|
|
// Map the entire file starting at the first byte
|
|
pByte = (BYTE *) MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
|
|
if ( !pByte )
|
|
{
|
|
goto error3;
|
|
}
|
|
|
|
if ( !CraneLoadFromPointer(pLocRunInfo, gapqhList, gapqnList, pByte) )
|
|
{
|
|
goto error4;
|
|
}
|
|
|
|
// Save away the pointers so we can close up cleanly latter
|
|
pLoadInfo->pLoadInfo1 = hFile;
|
|
pLoadInfo->pLoadInfo2 = hMap;
|
|
pLoadInfo->pLoadInfo3 = pByte;
|
|
|
|
return TRUE;
|
|
|
|
// Error handling
|
|
error4:
|
|
UnmapViewOfFile(pByte);
|
|
pByte = NULL;
|
|
|
|
error3:
|
|
CloseHandle(hMap);
|
|
hMap = INVALID_HANDLE_VALUE;
|
|
|
|
error2:
|
|
CloseHandle(hFile);
|
|
hFile = INVALID_HANDLE_VALUE;
|
|
|
|
error1:
|
|
pLoadInfo->pLoadInfo1 = INVALID_HANDLE_VALUE;
|
|
pLoadInfo->pLoadInfo2 = INVALID_HANDLE_VALUE;
|
|
pLoadInfo->pLoadInfo3 = INVALID_HANDLE_VALUE;
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CraneUnLoadFile(CRANE_LOAD_INFO *pInfo)
|
|
{
|
|
if (pInfo->pLoadInfo1 == INVALID_HANDLE_VALUE ||
|
|
pInfo->pLoadInfo2 == INVALID_HANDLE_VALUE ||
|
|
pInfo->pLoadInfo3 == INVALID_HANDLE_VALUE) {
|
|
return FALSE;
|
|
}
|
|
|
|
UnmapViewOfFile(pInfo->pLoadInfo3);
|
|
CloseHandle(pInfo->pLoadInfo2);
|
|
CloseHandle(pInfo->pLoadInfo1);
|
|
|
|
pInfo->pLoadInfo1 = INVALID_HANDLE_VALUE;
|
|
pInfo->pLoadInfo2 = INVALID_HANDLE_VALUE;
|
|
pInfo->pLoadInfo3 = INVALID_HANDLE_VALUE;
|
|
|
|
return TRUE;
|
|
}
|