📄 w2k_lib.c
字号:
{
glMemorySign++;
}
gdMemoryNow += dSize;
if (!glMemorySign)
{
gdMemoryMax = max (gdMemoryMax, gdMemoryNow);
}
}
else
{
if (gdMemoryNow < dSize)
{
glMemorySign--;
}
gdMemoryNow -= dSize;
}
LeaveCriticalSection (&gcsMemory);
}
return;
}
// -----------------------------------------------------------------
BOOL WINAPI w2kMemoryStatus (PDWORD pdMemoryNow,
PDWORD pdMemoryMax)
{
BOOL fMemorySign = FALSE;
EnterCriticalSection (&gcsMemory);
fMemorySign = (glMemorySign < 0);
if (pdMemoryNow != NULL) *pdMemoryNow = gdMemoryNow;
if (pdMemoryMax != NULL) *pdMemoryMax = gdMemoryMax;
LeaveCriticalSection (&gcsMemory);
return fMemorySign;
}
// -----------------------------------------------------------------
PVOID WINAPI w2kMemoryCopy (PVOID pTarget,
PVOID pSource,
DWORD dBytes)
{
DWORD n = 0;
if ((pTarget != NULL) && (pSource != NULL) && dBytes)
{
CopyMemory (pTarget, pSource, n = dBytes);
}
return (PBYTE) pTarget + n;
}
// -----------------------------------------------------------------
PVOID WINAPI w2kMemoryFill (PVOID pTarget,
DWORD dBytes,
BYTE bData)
{
DWORD n = 0;
if ((pTarget != NULL) && dBytes)
{
FillMemory (pTarget, n = dBytes, bData);
}
return (PBYTE) pTarget + n;
}
// -----------------------------------------------------------------
PVOID WINAPI w2kMemoryZero (PVOID pTarget,
DWORD dBytes)
{
DWORD n = 0;
if ((pTarget != NULL) && dBytes)
{
ZeroMemory (pTarget, n = dBytes);
}
return (PBYTE) pTarget + n;
}
// =================================================================
// STRING MANAGEMENT
// =================================================================
BOOL WINAPI w2kStringFilter (PWORD pwFilter,
PWORD pwData,
BOOL fIgnoreCase)
{
DWORD i = 0;
DWORD j = 0;
if (pwData == NULL) return FALSE;
if (pwFilter == NULL) return TRUE;
while (pwFilter [i] && pwData [j])
{
if (pwFilter [i] != '?')
{
if (pwFilter [i] == '*')
{
i++;
if ((pwFilter [i] != '*') &&
(pwFilter [i] != '?'))
{
if (pwFilter [i])
{
while (pwData [j]
&&
(!w2kStringFilter (pwFilter + i,
pwData + j,
fIgnoreCase)))
{
j++;
}
}
return pwData [j] != 0;
}
}
if (fIgnoreCase
? LCASE (pwFilter [i]) != LCASE (pwData [j])
: pwFilter [i] != pwData [j] )
{
return FALSE;
}
}
i++;
j++;
}
if (pwFilter [i] == '*') i++;
return !(pwFilter [i] || pwData [j]);
}
// =================================================================
// POOL MANAGEMENT
// =================================================================
PW2K_POOL WINAPI w2kPoolCreate (DWORD dCount)
{
DWORD i;
PW2K_POOL pwp = NULL;
if ((pwp = w2kMemoryCreate (W2K_POOL__ (dCount))) != NULL)
{
InitializeCriticalSection (&pwp->cs);
GetLocalTime (&pwp->stCreate);
pwp->stUpdate = pwp->stCreate;
pwp->stAdd = pwp->stCreate;
pwp->stRemove = pwp->stCreate;
pwp->dCount = dCount;
for (i = 0; i < dCount; i++)
{
pwp->awe [i].awName [0] = 0;
pwp->awe [i].pData = NULL;
}
}
return pwp;
}
// -----------------------------------------------------------------
PW2K_POOL WINAPI w2kPoolDestroy (PW2K_POOL pwp,
W2K_NOTIFY Notify,
PDWORD pdErrors)
{
PW2K_ENTRY pwe;
DWORD i;
DWORD dErrors = 0;
if (pwp != NULL)
{
for (i = 0; i < pwp->dCount; i++)
{
pwe = pwp->awe + i;
if (pwe->awName [0])
{
if (Notify != NULL)
{
if (!Notify (pwp, W2K_NOTIFY_DESTROY,
pwe->awName, pwe->pData))
{
dErrors++;
}
}
else
{
w2kMemoryDestroy (pwe->pData);
}
}
}
DeleteCriticalSection (&pwp->cs);
w2kMemoryDestroy (pwp);
}
if (pdErrors != NULL) *pdErrors = dErrors;
return NULL;
}
// -----------------------------------------------------------------
BOOL WINAPI w2kPoolLock (PW2K_POOL pwp)
{
BOOL fOk = FALSE;
if (pwp != NULL)
{
EnterCriticalSection (&pwp->cs);
fOk = TRUE;
}
return fOk;
}
// -----------------------------------------------------------------
BOOL WINAPI w2kPoolUnlock (PW2K_POOL pwp)
{
BOOL fOk = FALSE;
if (pwp != NULL)
{
LeaveCriticalSection (&pwp->cs);
fOk = TRUE;
}
return fOk;
}
// -----------------------------------------------------------------
BOOL WINAPI w2kPoolAdd (PW2K_POOL pwp,
W2K_NOTIFY Notify,
PWORD pwName,
PVOID pData,
BOOL fUnique)
{
PW2K_ENTRY pwe;
DWORD i;
BOOL fOk = FALSE;
if ((pwName != NULL) && pwName [0] &&
(lstrlen (pwName) < N_NAME))
{
if (w2kPoolLock (pwp))
{
for (pwe = NULL, i = 0; i < pwp->dCount; i++)
{
if (pwp->awe [i].awName [0])
{
if (fUnique &&
(!lstrcmp (pwp->awe [i].awName, pwName)))
{
break;
}
}
else
{
if (pwe == NULL)
{
pwe = pwp->awe + i;
if (!fUnique) break;
}
}
}
if ((pwe != NULL) && ((!fUnique) || (i == pwp->dCount)))
{
if ((Notify == NULL)
||
Notify (pwp, W2K_NOTIFY_ADD,
pwe->awName, pwe->pData))
{
GetLocalTime (&pwp->stUpdate);
pwp->stAdd = pwp->stUpdate;
lstrcpy (pwe->awName, pwName);
pwe->pData = pData;
fOk = TRUE;
}
}
w2kPoolUnlock (pwp);
}
}
return fOk;
}
// -----------------------------------------------------------------
DWORD WINAPI w2kPoolRemove (PW2K_POOL pwp,
W2K_NOTIFY Notify,
PWORD pwName)
{
PW2K_ENTRY pwe;
DWORD i;
DWORD dCount = 0;
if (w2kPoolLock (pwp))
{
for (i = 0; i < pwp->dCount; i++)
{
if ((pwp->awe [i].awName [0])
&&
((pwName == NULL) || (!pwName [0]) ||
(!lstrcmp (pwp->awe [i].awName, pwName))))
{
pwe = pwp->awe + i;
if ((Notify == NULL)
||
Notify (pwp, W2K_NOTIFY_REMOVE,
pwe->awName, pwe->pData))
{
if (Notify == NULL)
{
w2kMemoryDestroy (pwe->pData);
}
GetLocalTime (&pwp->stUpdate);
pwp->stRemove = pwp->stUpdate;
pwp->awe [i].awName [0] = 0;
pwp->awe [i].pData = NULL;
dCount++;
}
}
}
w2kPoolUnlock (pwp);
}
return dCount;
}
// -----------------------------------------------------------------
DWORD WINAPI w2kPoolEnumerate (PW2K_POOL pwp,
W2K_NOTIFY Notify,
PWORD pwName)
{
PW2K_ENTRY pwe;
DWORD i;
DWORD dCount = 0;
if (w2kPoolLock (pwp))
{
for (i = 0; i < pwp->dCount; i++)
{
if ((pwp->awe [i].awName [0])
&&
((pwName == NULL) || (!pwName [0]) ||
(!lstrcmp (pwp->awe [i].awName, pwName))))
{
pwe = pwp->awe + i;
if ((Notify == NULL)
||
Notify (pwp, W2K_NOTIFY_ENUMERATE,
pwe->awName, pwe->pData))
{
dCount++;
}
}
}
w2kPoolUnlock (pwp);
}
return dCount;
}
// =================================================================
// CONSOLE MANAGEMENT
// =================================================================
BOOL WINAPI w2kConsoleTest (void)
{
WORD awTitle [N_CONSOLE];
return GetConsoleTitle (awTitle, N_CONSOLE) != 0;
}
// -----------------------------------------------------------------
BOOL WINAPI w2kConsoleOpen (void)
{
if ((!gfStdHandles) && (!gfStdFailure))
{
gfStdTransient = (!w2kConsoleTest ()) && AllocConsole ();
if (w2kConsoleTest ())
{
ghStdInput = GetStdHandle (STD_INPUT_HANDLE);
ghStdOutput = GetStdHandle (STD_OUTPUT_HANDLE);
ghStdError = GetStdHandle (STD_ERROR_HANDLE);
if ((ghStdInput != INVALID_HANDLE_VALUE) &&
(ghStdOutput != INVALID_HANDLE_VALUE) &&
(ghStdError != INVALID_HANDLE_VALUE))
{
gfStdHandles = TRUE;
}
else
{
ghStdInput = INVALID_HANDLE_VALUE;
ghStdOutput = INVALID_HANDLE_VALUE;
ghStdError = INVALID_HANDLE_VALUE;
}
}
if ((gfStdFailure = !gfStdHandles) && gfStdTransient)
{
FreeConsole ();
gfStdTransient = FALSE;
}
}
return gfStdHandles;
}
// -----------------------------------------------------------------
BOOL WINAPI w2kConsoleClose (void)
{
BOOL fOk = FALSE;
if (gfStdHandles)
{
ghStdInput = INVALID_HANDLE_VALUE;
ghStdOutput = INVALID_HANDLE_VALUE;
ghStdError = INVALID_HANDLE_VALUE;
gfStdHandles = FALSE;
fOk = TRUE;
}
if (gfStdTransient)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -