//+--------------------------------------------------------------------------- // // 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); }