windows-nt/Source/XPSP1/NT/admin/services/sched/common/debug.cxx
2020-09-26 16:20:57 +08:00

164 lines
4.6 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: debug.cxx
//
// Contents: Message routines.
//
// Functions: SchMsg and SchError.
//
// History: 09-Sep-95 EricB Created.
// 01-Dec-95 MarkBl Split from util.cxx.
// 29-Feb-01 JBenton Prefix Bug 294884
//
//----------------------------------------------------------------------------
#include "..\pch\headers.hxx"
#pragma hdrstop
#include "..\inc\resource.h"
#include "..\inc\common.hxx"
#include "..\inc\debug.hxx"
#define ARRAYLEN(a) (sizeof(a) / sizeof((a)[0]))
//+----------------------------------------------------------------------------
//
// Message and error reporting functions
//
//-----------------------------------------------------------------------------
//+----------------------------------------------------------------------------
//
// Function: SchMsg
//
// Synopsis: Display a message.
//
// Arguments: [ptszMsg] - a string message
// [iStringID] - a string resource ID
// [...] - optional params
//
// Notes: Either a string or a string ID must be supplied, but not both.
// If there are optional params, it is assumed that the string has
// type conversion placeholders so that the string can be used as
// a formating string.
//-----------------------------------------------------------------------------
void
SchMsg(TCHAR * ptszMsg, int iStringID, ...)
{
TCHAR tszFmt[SCH_BIGBUF_LEN], tszMsg[SCH_XBIGBUF_LEN];
if (iStringID != 0)
{
if (!LoadString(g_hInstance, iStringID, tszFmt, SCH_BIGBUF_LEN - 1))
{
lstrcpy(tszMsg,
TEXT("unknown error (failed to load string resource)"));
}
}
else
{
if (lstrlen(ptszMsg) >= SCH_BIGBUF_LEN)
{
lstrcpyn(tszFmt, ptszMsg, SCH_BIGBUF_LEN - 1);
tszFmt[SCH_BIGBUF_LEN - 1] = L'\0';
}
else
{
lstrcpy(tszFmt, ptszMsg);
}
}
va_list va;
va_start(va, iStringID);
wvsprintf(tszMsg, tszFmt, va);
va_end(va);
#if DBG == 1
#ifdef UNICODE
char szMsg[SCH_XBIGBUF_LEN];
ZeroMemory(szMsg, ARRAYLEN(szMsg));
(void) UnicodeToAnsi(szMsg, tszMsg, SCH_XBIGBUF_LEN);
lstrcatA(szMsg, "\n"); // TODO: length checking
schDebugOut((DEB_ITRACE, szMsg));
#else
lstrcat(tszMsg, "\n");
schDebugOut((DEB_ITRACE, tszMsg));
#endif
#endif
MessageBox(NULL, tszMsg, TEXT("Scheduling Agent Service"),
MB_ICONINFORMATION); // TODO: string resource
}
//+----------------------------------------------------------------------------
//
// Function: SchError
//
// Synopsis: error reporting
//
// Arguments: [iStringID] - a string resource ID
// [iParam] - an optional error value
//
// Notes: If iParam is non-zero, it is assumed that the string has a
// type conversion placeholder so that the string can be used as
// a formating string.
//-----------------------------------------------------------------------------
void
SchError(int iStringID, int iParam)
{
TCHAR tszMsg[SCH_DB_BUFLEN + 1], tszFormat[SCH_DB_BUFLEN + 1],
tszTitle[SCH_MEDBUF_LEN + 1];
const TCHAR tszErr[] = TEXT("ERROR: ");
WORD cch;
cch = (WORD)LoadString(g_hInstance, IDS_ERRMSG_PREFIX, tszMsg, SCH_DB_BUFLEN);
if (cch == 0)
{
// Use literal if the string resource load failed.
//
lstrcpy(tszMsg, tszErr);
cch = (WORD)lstrlen(tszErr);
}
if (!LoadString(g_hInstance, iStringID, tszMsg + cch,
SCH_DB_BUFLEN - cch))
{
wcsncpy(tszMsg + cch,
TEXT("unknown error (failed to load string resource)"),
SCH_DB_BUFLEN - cch);
tszMsg[SCH_DB_BUFLEN] = '\0';
iParam = 0;
}
if (iParam != 0)
{
lstrcpy(tszFormat, tszMsg);
//
// Note that there is no length checking below...
//
wsprintf(tszMsg, tszFormat, iParam);
}
if (!LoadString(g_hInstance, IDS_SCHEDULER_NAME, tszTitle, SCH_MEDBUF_LEN))
{
lstrcpy(tszTitle, TEXT("Scheduling Agent"));
}
#if DBG == 1
#ifdef UNICODE
char szMsg[SCH_DB_BUFLEN];
ZeroMemory(szMsg, ARRAYLEN(szMsg));
(void) UnicodeToAnsi(szMsg, tszMsg, SCH_DB_BUFLEN);
lstrcatA(szMsg, "\n"); // TODO: length checking
schDebugOut((DEB_ERROR, szMsg));
#else
lstrcat(tszMsg, "\n");
schDebugOut((DEB_ITRACE, tszMsg));
#endif
#endif
MessageBox(NULL, tszMsg, tszTitle, MB_ICONEXCLAMATION);
}