183 lines
3.7 KiB
C++
183 lines
3.7 KiB
C++
|
#include "dfhlprs.h"
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
static DWORD dwStartTick = 0;
|
||
|
static DWORD dwStopTick = 0;
|
||
|
|
||
|
int _PrintIndent(DWORD cch)
|
||
|
{
|
||
|
// for now, stupid simple
|
||
|
for (DWORD dw = 0; dw < cch; ++dw)
|
||
|
{
|
||
|
wprintf(TEXT(" "));
|
||
|
}
|
||
|
|
||
|
return cch;
|
||
|
}
|
||
|
|
||
|
int _PrintCR()
|
||
|
{
|
||
|
return wprintf(TEXT("\n"));
|
||
|
}
|
||
|
|
||
|
int _PrintGUID(CONST GUID* pguid)
|
||
|
{
|
||
|
return wprintf(L"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
|
||
|
pguid->Data1,
|
||
|
pguid->Data2,
|
||
|
pguid->Data3,
|
||
|
pguid->Data4[0],
|
||
|
pguid->Data4[1],
|
||
|
pguid->Data4[2],
|
||
|
pguid->Data4[3],
|
||
|
pguid->Data4[4],
|
||
|
pguid->Data4[5],
|
||
|
pguid->Data4[6],
|
||
|
pguid->Data4[7]);
|
||
|
}
|
||
|
|
||
|
int _PrintGUIDEx(CONST GUID* pguid, _sGUID_DESCR rgguid[], DWORD cguid,
|
||
|
BOOL fPrintValue, DWORD cchIndent)
|
||
|
{
|
||
|
BOOL fFoundIt = FALSE;
|
||
|
|
||
|
int i = _PrintIndent(cchIndent);
|
||
|
|
||
|
for (DWORD dw = 0; dw < cguid; ++dw)
|
||
|
{
|
||
|
if (*(rgguid[dw].pguid) == *pguid)
|
||
|
{
|
||
|
i += wprintf(TEXT("%s"), rgguid[dw].pszDescr);
|
||
|
|
||
|
fFoundIt = TRUE;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (fPrintValue)
|
||
|
{
|
||
|
if (fFoundIt)
|
||
|
{
|
||
|
i += wprintf(TEXT(", "));
|
||
|
}
|
||
|
|
||
|
i += _PrintGUID(pguid);
|
||
|
}
|
||
|
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
int _PrintGetLastError(DWORD cchIndent)
|
||
|
{
|
||
|
int i = _PrintIndent(cchIndent);
|
||
|
|
||
|
i += wprintf(TEXT("GetLastError: 0x%08X"), GetLastError());
|
||
|
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
void _StartClock()
|
||
|
{
|
||
|
dwStartTick = GetTickCount();
|
||
|
}
|
||
|
|
||
|
void _StopClock()
|
||
|
{
|
||
|
dwStopTick = GetTickCount();
|
||
|
}
|
||
|
|
||
|
int _PrintElapsedTime(DWORD cchIndent, BOOL fCarriageReturn)
|
||
|
{
|
||
|
int i = _PrintIndent(cchIndent);
|
||
|
|
||
|
// consider wrap
|
||
|
DWORD dwDiff = dwStopTick - dwStartTick;
|
||
|
|
||
|
DWORD dwSec = dwDiff / 1000;
|
||
|
|
||
|
DWORD dwMill = dwDiff % 1000;
|
||
|
|
||
|
i += wprintf(TEXT("Elapsed time: %01d.%03d"), dwSec, dwMill);
|
||
|
|
||
|
if (fCarriageReturn)
|
||
|
{
|
||
|
wprintf(TEXT("\n"));
|
||
|
}
|
||
|
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
int _PrintFlag(DWORD dwFlag, _sFLAG_DESCR rgflag[], DWORD cflag,
|
||
|
DWORD cchIndent, BOOL fPrintValue, BOOL fHex, BOOL fComment, BOOL fORed)
|
||
|
{
|
||
|
int i = 0;
|
||
|
BOOL fAtLeastOne = FALSE;
|
||
|
|
||
|
for (DWORD dw = 0; dw < cflag; ++dw)
|
||
|
{
|
||
|
BOOL fPrint = FALSE;
|
||
|
|
||
|
if (fORed)
|
||
|
{
|
||
|
if (rgflag[dw].dwFlag & dwFlag)
|
||
|
{
|
||
|
fPrint = TRUE;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (rgflag[dw].dwFlag == dwFlag)
|
||
|
{
|
||
|
fPrint = TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (fPrint)
|
||
|
{
|
||
|
if (fAtLeastOne)
|
||
|
{
|
||
|
i += wprintf(TEXT("\n"));
|
||
|
}
|
||
|
|
||
|
i += _PrintIndent(cchIndent);
|
||
|
|
||
|
if (fPrintValue)
|
||
|
{
|
||
|
if (fHex)
|
||
|
{
|
||
|
i += wprintf(TEXT("0x%08X, "), rgflag[dw].dwFlag);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
i += wprintf(TEXT("%u, "), rgflag[dw].dwFlag);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
i += wprintf(TEXT("%s"), rgflag[dw].pszDescr);
|
||
|
|
||
|
if (fComment)
|
||
|
{
|
||
|
i += wprintf(TEXT(", '%s'"), rgflag[dw].pszComment);
|
||
|
}
|
||
|
|
||
|
fAtLeastOne = TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
HANDLE _GetDeviceHandle(LPTSTR psz, DWORD dwDesiredAccess, DWORD dwFileAttributes)
|
||
|
{
|
||
|
HANDLE hDevice = CreateFile(psz, // drive to open
|
||
|
dwDesiredAccess, // don't need any access to the drive
|
||
|
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
|
||
|
NULL, // default security attributes
|
||
|
OPEN_EXISTING, // disposition
|
||
|
dwFileAttributes, // file attributes
|
||
|
NULL); // don't copy any file's attributes
|
||
|
|
||
|
return hDevice;
|
||
|
}
|