windows-nt/Source/XPSP1/NT/sdktools/restools/rltools/common/showerrs.c

141 lines
3.3 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
#include <windows.h>
#include <stdio.h>
#include "restok.h"
#include "showerrs.h"
extern UCHAR szDHW[];
extern CHAR szAppName[];
//............................................................
void ShowEngineErr( int n, void *p1, void *p2)
{
CHAR *pMsg = NULL;
CHAR *pArg[2];
pArg[0] = p1;
pArg[1] = p2;
if ( B_FormatMessage( (FORMAT_MESSAGE_MAX_WIDTH_MASK & 78)
| FORMAT_MESSAGE_FROM_HMODULE
| FORMAT_MESSAGE_ARGUMENT_ARRAY,
NULL,
(DWORD)n,
szDHW,
DHWSIZE,
(va_list *)pArg) )
{
RLMessageBoxA( szDHW);
}
else
{
sprintf( szDHW,
"Internal error: FormatMessage call failed: msg %d: err %Lu",
n,
GetLastError());
RLMessageBoxA( szDHW);
}
}
//...................................................................
void ShowErr( int n, void *p1, void *p2)
{
CHAR *pMsg = NULL;
CHAR *pArg[2];
pArg[0] = p1;
pArg[1] = p2;
pMsg = GetErrMsg( n);
if ( ! pMsg )
{
pMsg = "Internal error: UNKNOWN ERROR MESSAGE id# %1!d!";
pArg[0] = IntToPtr(n);
}
if ( pMsg )
{
if ( FormatMessageA( FORMAT_MESSAGE_MAX_WIDTH_MASK | 72
| FORMAT_MESSAGE_FROM_STRING
| FORMAT_MESSAGE_ARGUMENT_ARRAY,
pMsg,
0,
0,
szDHW,
DHWSIZE,
(va_list *)pArg) )
{
RLMessageBoxA( szDHW);
}
else
{
RLMessageBoxA( "Internal error: FormatMessage call failed");
}
}
else
{
RLMessageBoxA( "Internal error: GetErrMsg call failed");
}
}
//............................................................
CHAR *GetErrMsg( UINT uErrID)
{
static CHAR szBuf[ 1024];
int n = LoadStringA( NULL, uErrID, szBuf, sizeof( szBuf));
return( n ? szBuf : NULL);
}
//.......................................................
//...
//... Bi-Lingual FormatMessage
DWORD B_FormatMessage(
DWORD dwFlags,
LPCVOID lpSource,
DWORD dwMessageId,
LPSTR lpBuffer,
DWORD nSize,
va_list *Arguments )
{
DWORD ret;
//... Look for message in current locale
if ( !(ret = FormatMessageA( dwFlags,
lpSource,
dwMessageId,
LOWORD( GetThreadLocale()),
lpBuffer,
nSize,
Arguments)) )
{
//... Not found, so look for US English message
if ( GetLastError() == ERROR_RESOURCE_LANG_NOT_FOUND )
{
return( FormatMessageA( dwFlags,
lpSource,
dwMessageId,
0x0409L,
lpBuffer,
nSize,
Arguments) );
}
}
return( ret);
}