Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

140 lines
3.5 KiB
C++

// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#include "stdafx.h"
#ifdef AFX_INIT_SEG
#pragma code_seg(AFX_INIT_SEG)
#endif
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#pragma warning(disable: 4706) // assignment within conditional
/////////////////////////////////////////////////////////////////////////////
// global thread protection
#ifdef _MT
AFX_STATIC_DATA BOOL _afxCriticalInit = 0; // set _afxGlobalLock, _afxTempLock init
AFX_STATIC_DATA BOOL _afxCriticalWin32s = 0;
// _afxResourceLock and _afxLockInit are used to lock each MFC global resource
AFX_STATIC_DATA CRITICAL_SECTION _afxResourceLock[CRIT_MAX] = { { 0 } };
AFX_STATIC_DATA CRITICAL_SECTION _afxLockInitLock = { 0 };
AFX_STATIC_DATA BOOL _afxLockInit[CRIT_MAX] = { 0 };
#ifdef _DEBUG
AFX_STATIC_DATA BOOL _afxResourceLocked[CRIT_MAX] = { 0 };
#endif
BOOL AFXAPI AfxCriticalInit()
{
// Note: this must be initialized with only one thread running
if (!_afxCriticalInit)
{
// now we are about to be initialized
VERIFY(++_afxCriticalInit);
// determine if running on Win32s (under Windows 3.x)
DWORD dwVersion = GetVersion();
_afxCriticalWin32s = ((BYTE)dwVersion) < 4 && (dwVersion & 0x80000000);
// only initialize MT related stuff if on MT capable systems
if (!_afxCriticalWin32s)
InitializeCriticalSection(&_afxLockInitLock);
}
return _afxCriticalInit;
}
void AFXAPI AfxCriticalTerm()
{
if (_afxCriticalInit)
{
VERIFY(!--_afxCriticalInit);
if (!_afxCriticalWin32s)
{
// delete helper critical sections
DeleteCriticalSection(&_afxLockInitLock);
// delete specific resource critical sections
for (int i = 0; i < CRIT_MAX; i++)
{
#ifdef _DEBUG
ASSERT(!_afxResourceLocked[i]);
#endif
if (_afxLockInit[i])
{
DeleteCriticalSection(&_afxResourceLock[i]);
VERIFY(!--_afxLockInit[i]);
}
}
}
}
}
void AFXAPI AfxLockGlobals(int nLockType)
{
ASSERT((UINT)nLockType < CRIT_MAX);
// intialize global state, if necessary
if (!_afxCriticalInit)
{
AfxCriticalInit();
ASSERT(_afxCriticalInit);
}
// nothing necessary on Win32s (no multiple threads)
if (_afxCriticalWin32s)
return;
// initialize specific resource if necessary
if (!_afxLockInit[nLockType])
{
EnterCriticalSection(&_afxLockInitLock);
if (!_afxLockInit[nLockType])
{
InitializeCriticalSection(&_afxResourceLock[nLockType]);
VERIFY(++_afxLockInit[nLockType]);
}
LeaveCriticalSection(&_afxLockInitLock);
}
// lock specific resource
EnterCriticalSection(&_afxResourceLock[nLockType]);
#ifdef _DEBUG
ASSERT(++_afxResourceLocked[nLockType] > 0);
#endif
}
void AFXAPI AfxUnlockGlobals(int nLockType)
{
ASSERT(_afxCriticalInit);
ASSERT((UINT)nLockType < CRIT_MAX);
// nothing necessary on Win32s (no multiple threads)
if (_afxCriticalWin32s)
return;
// unlock specific resource
ASSERT(_afxLockInit[nLockType]);
#ifdef _DEBUG
ASSERT(--_afxResourceLocked[nLockType] >= 0);
#endif
LeaveCriticalSection(&_afxResourceLock[nLockType]);
}
#endif
/////////////////////////////////////////////////////////////////////////////