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.
95 lines
2.0 KiB
95 lines
2.0 KiB
// File: MMUtils.cpp
|
|
// Author: Michael Marr (mikemarr)
|
|
//
|
|
// History:
|
|
// -@- 04/12/96 (mikemarr) - created
|
|
// -@- 11/07/96 (mikemarr) - combined debug stuff
|
|
// -@- 09/09/97 (mikemarr) - snarfed from d2d\d2dutils\src\mmutils.cpp
|
|
// -@- 09/09/97 (mikemarr) - will only create code when in debug mode
|
|
// -@- 11/12/97 (mikemarr) - added CopyDWORDAligned
|
|
|
|
#include "stdafx.h"
|
|
#ifndef _MDMUtils_h
|
|
#include "MDMUtils.h"
|
|
#endif
|
|
|
|
char g_rgchTmpBuf[nTMPBUFSIZE];
|
|
char g_szEOFMessage[] = "unexpected EOF\n";
|
|
|
|
void
|
|
ZeroDWORDAligned(LPDWORD pdw, DWORD cEntries)
|
|
{
|
|
// verify alignment
|
|
MMASSERT(pdw && ((DWORD(pdw) & 0x3) == 0));
|
|
LPDWORD pdwLimit = pdw + cEntries;
|
|
// REVIEW: use Duff-Marr machine
|
|
for (; pdw != pdwLimit; *pdw++ = 0);
|
|
}
|
|
|
|
void
|
|
CopyDWORDAligned(DWORD *pdwDst, const DWORD *pdwSrc, DWORD cEntries)
|
|
{
|
|
// verify alignment
|
|
MMASSERT(pdwSrc && pdwDst && ((DWORD(pdwSrc) & 0x3) == 0));
|
|
LPDWORD pdwLimit = pdwDst + cEntries;
|
|
// REVIEW: use Duff-Marr machine
|
|
for (; pdwDst != pdwLimit; *pdwDst++ = *pdwSrc++);
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
|
GetClosestMultipleOf4(DWORD n, bool bGreater)
|
|
{
|
|
return (n + bGreater * 3) & ~3;
|
|
}
|
|
|
|
|
|
DWORD
|
|
GetClosestPowerOf2(DWORD n, bool bGreater)
|
|
{
|
|
DWORD i = 0;
|
|
for (n >>= 1; n != 0; i++) {
|
|
n >>= 1;
|
|
}
|
|
i += (bGreater && ((n & ~(1 << i)) != 0));
|
|
|
|
return (1 << i);
|
|
}
|
|
|
|
|
|
//
|
|
// Debug Stuff
|
|
//
|
|
#ifdef _DEBUG
|
|
void _MMStall(const char *szExp, const char *szFile, int nLine) {
|
|
sprintf(g_rgchTmpBuf, "error: (%s) in %s at line %d\n", szExp, szFile, nLine);
|
|
|
|
#ifdef _WINDOWS
|
|
OutputDebugString(g_rgchTmpBuf);
|
|
#endif
|
|
fprintf(stderr, "%s", g_rgchTmpBuf);
|
|
|
|
// hardcode breakpoint
|
|
#if defined(_DEBUG) && defined(_X86_)
|
|
_asm { int 3 };
|
|
#else
|
|
exit(1);
|
|
#endif
|
|
}
|
|
|
|
void _MMTrace(const char *szFmt, ...)
|
|
{
|
|
#ifndef _NOT_X86
|
|
_vsnprintf(g_rgchTmpBuf, nTMPBUFSIZE - 1, szFmt, (va_list) (&szFmt+1));
|
|
|
|
#if defined(_WINDOWS) && defined(_DEBUG)
|
|
OutputDebugString(g_rgchTmpBuf);
|
|
#else
|
|
fprintf(stderr, "%s", g_rgchTmpBuf);
|
|
#endif
|
|
#endif // _NOT_X86
|
|
}
|
|
|
|
#endif // _DEBUG
|
|
|