Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

240 lines
6.4 KiB

//----------------------------------------------------------------------------
//
// hrstr.cpp
//
// HRESULT-to-string mapper.
//
// Copyright (C) Microsoft Corporation, 1997.
//
//----------------------------------------------------------------------------
#include "pch.cpp"
#pragma hdrstop
#if DBG
#include "cppdbg.hpp"
struct HrStringDef
{
HRESULT hr;
char *pString;
};
#define HRDEF(Name) \
Name, #Name
static HrStringDef g_HrStringDefs[] =
{
// Put specific codes before generic codes so that specific codes
// are returned in the cases where the HRESULT is the same.
HRDEF(DDERR_ALREADYINITIALIZED),
HRDEF(DDERR_BLTFASTCANTCLIP),
HRDEF(DDERR_CANNOTATTACHSURFACE),
HRDEF(DDERR_CANNOTDETACHSURFACE),
HRDEF(DDERR_CANTCREATEDC),
HRDEF(DDERR_CANTDUPLICATE),
HRDEF(DDERR_CLIPPERISUSINGHWND),
HRDEF(DDERR_COLORKEYNOTSET),
HRDEF(DDERR_CURRENTLYNOTAVAIL),
HRDEF(DDERR_DIRECTDRAWALREADYCREATED),
HRDEF(DDERR_EXCEPTION),
HRDEF(DDERR_EXCLUSIVEMODEALREADYSET),
HRDEF(DDERR_GENERIC),
HRDEF(DDERR_HEIGHTALIGN),
HRDEF(DDERR_HWNDALREADYSET),
HRDEF(DDERR_HWNDSUBCLASSED),
HRDEF(DDERR_IMPLICITLYCREATED),
HRDEF(DDERR_INCOMPATIBLEPRIMARY),
HRDEF(DDERR_INVALIDCAPS),
HRDEF(DDERR_INVALIDCLIPLIST),
HRDEF(DDERR_INVALIDDIRECTDRAWGUID),
HRDEF(DDERR_INVALIDMODE),
HRDEF(DDERR_INVALIDOBJECT),
HRDEF(DDERR_INVALIDPARAMS),
HRDEF(DDERR_INVALIDPIXELFORMAT),
HRDEF(DDERR_INVALIDPOSITION),
HRDEF(DDERR_INVALIDRECT),
HRDEF(DDERR_LOCKEDSURFACES),
HRDEF(DDERR_NO3D),
HRDEF(DDERR_NOALPHAHW),
HRDEF(DDERR_NOBLTHW),
HRDEF(DDERR_NOCLIPLIST),
HRDEF(DDERR_NOCLIPPERATTACHED),
HRDEF(DDERR_NOCOLORCONVHW),
HRDEF(DDERR_NOCOLORKEY),
HRDEF(DDERR_NOCOLORKEYHW),
HRDEF(DDERR_NOCOOPERATIVELEVELSET),
HRDEF(DDERR_NODC),
HRDEF(DDERR_NODDROPSHW),
HRDEF(DDERR_NODIRECTDRAWHW),
HRDEF(DDERR_NOEMULATION),
HRDEF(DDERR_NOEXCLUSIVEMODE),
HRDEF(DDERR_NOFLIPHW),
HRDEF(DDERR_NOGDI),
HRDEF(DDERR_NOHWND),
HRDEF(DDERR_NOMIRRORHW),
HRDEF(DDERR_NOOVERLAYDEST),
HRDEF(DDERR_NOOVERLAYHW),
HRDEF(DDERR_NOPALETTEATTACHED),
HRDEF(DDERR_NOPALETTEHW),
HRDEF(DDERR_NORASTEROPHW),
HRDEF(DDERR_NOROTATIONHW),
HRDEF(DDERR_NOSTRETCHHW),
HRDEF(DDERR_NOT4BITCOLOR),
HRDEF(DDERR_NOT4BITCOLORINDEX),
HRDEF(DDERR_NOT8BITCOLOR),
HRDEF(DDERR_NOTAOVERLAYSURFACE),
HRDEF(DDERR_NOTEXTUREHW),
HRDEF(DDERR_NOTFLIPPABLE),
HRDEF(DDERR_NOTFOUND),
HRDEF(DDERR_NOTLOCKED),
HRDEF(DDERR_NOTPALETTIZED),
HRDEF(DDERR_NOVSYNCHW),
HRDEF(DDERR_NOZBUFFERHW),
HRDEF(DDERR_NOZOVERLAYHW),
HRDEF(DDERR_OUTOFCAPS),
HRDEF(DDERR_OUTOFMEMORY),
HRDEF(DDERR_OUTOFVIDEOMEMORY),
HRDEF(DDERR_OVERLAYCANTCLIP),
HRDEF(DDERR_OVERLAYCOLORKEYONLYONEACTIVE),
HRDEF(DDERR_OVERLAYNOTVISIBLE),
HRDEF(DDERR_PALETTEBUSY),
HRDEF(DDERR_PRIMARYSURFACEALREADYEXISTS),
HRDEF(DDERR_REGIONTOOSMALL),
HRDEF(DDERR_SURFACEALREADYATTACHED),
HRDEF(DDERR_SURFACEALREADYDEPENDENT),
HRDEF(DDERR_SURFACEBUSY),
HRDEF(DDERR_SURFACEISOBSCURED),
HRDEF(DDERR_SURFACELOST),
HRDEF(DDERR_SURFACENOTATTACHED),
HRDEF(DDERR_TOOBIGHEIGHT),
HRDEF(DDERR_TOOBIGSIZE),
HRDEF(DDERR_TOOBIGWIDTH),
HRDEF(DDERR_UNSUPPORTED),
HRDEF(DDERR_UNSUPPORTEDFORMAT),
HRDEF(DDERR_UNSUPPORTEDMASK),
HRDEF(DDERR_VERTICALBLANKINPROGRESS),
HRDEF(DDERR_WASSTILLDRAWING),
HRDEF(DDERR_WRONGMODE),
HRDEF(DDERR_XALIGN),
HRDEF(E_OUTOFMEMORY),
HRDEF(E_INVALIDARG),
HRDEF(E_FAIL),
HRDEF(S_FALSE),
HRDEF(S_OK),
HRDEF(D3DERR_WRONGTEXTUREFORMAT),
HRDEF(D3DERR_UNSUPPORTEDCOLOROPERATION),
HRDEF(D3DERR_UNSUPPORTEDCOLORARG),
HRDEF(D3DERR_UNSUPPORTEDALPHAOPERATION),
HRDEF(D3DERR_UNSUPPORTEDALPHAARG),
HRDEF(D3DERR_TOOMANYOPERATIONS),
HRDEF(D3DERR_CONFLICTINGTEXTUREFILTER),
HRDEF(D3DERR_UNSUPPORTEDFACTORVALUE),
HRDEF(D3DERR_CONFLICTINGRENDERSTATE),
HRDEF(D3DERR_UNSUPPORTEDTEXTUREFILTER),
HRDEF(D3DERR_CONFLICTINGTEXTUREPALETTE),
HRDEF(D3DERR_DRIVERINTERNALERROR),
HRDEF(D3DERR_NOTFOUND),
HRDEF(D3DERR_MOREDATA),
HRDEF(D3DERR_DEVICENOTRESET),
HRDEF(D3DERR_DEVICELOST),
HRDEF(D3DERR_NOTAVAILABLE),
HRDEF(D3DERR_INVALIDDEVICE),
HRDEF(D3DERR_INVALIDCALL),
0, NULL,
};
//----------------------------------------------------------------------------
//
// DebugModule::HrString
//
// Attempts to produce a descriptive string for the given HRESULT.
//
//----------------------------------------------------------------------------
char *DebugModule::HrString(HRESULT hr)
{
HrStringDef *pHrDef;
// Look for a defined string.
for (pHrDef = g_HrStringDefs; pHrDef->pString != NULL; pHrDef++)
{
if (pHrDef->hr == hr)
{
return pHrDef->pString;
}
}
// It's not a defined string so return the numeric value
// as a string. Use a circular buffer of strings so that
// this routine can be used more than once in a particular output
// message.
#define STATIC_BUFFER 256
#define MAX_STRING 16
static char chBuffer[STATIC_BUFFER];
static char *pBuf = chBuffer;
char *pString;
if (pBuf - chBuffer + MAX_STRING > STATIC_BUFFER)
{
pBuf = chBuffer;
}
sprintf(pBuf, "0x%08X", hr);
pString = pBuf;
pBuf += MAX_STRING;
return pString;
}
//----------------------------------------------------------------------------
//
// HrString
//
// Attempts to produce a descriptive string for the given HRESULT.
//
//----------------------------------------------------------------------------
char *HrToStr(HRESULT hr)
{
HrStringDef *pHrDef;
// Look for a defined string.
for (pHrDef = g_HrStringDefs; pHrDef->pString != NULL; pHrDef++)
{
if (pHrDef->hr == hr)
{
return pHrDef->pString;
}
}
// It's not a defined string so return the numeric value
// as a string. Use a circular buffer of strings so that
// this routine can be used more than once in a particular output
// message.
#define STATIC_BUFFER 256
#define MAX_STRING 16
static char chBuffer[STATIC_BUFFER];
static char *pBuf = chBuffer;
char *pString;
if (pBuf - chBuffer + MAX_STRING > STATIC_BUFFER)
{
pBuf = chBuffer;
}
sprintf(pBuf, "0x%08X", hr);
pString = pBuf;
pBuf += MAX_STRING;
return pString;
}
#endif // #if DBG