164 lines
4.6 KiB
C++
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);
|
|
}
|