// -------------------------------------------------------------------------------- // Msoedbg.cpp // Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved // -------------------------------------------------------------------------------- #include "pch.hxx" #ifdef DEBUG LPSTR PathClipFile(LPSTR pszSrc, LPSTR pszDest, DWORD cchSize) { LPSTR pszT=pszSrc; int cDirs=0; if (pszSrc) { // compact path pszT = pszSrc + lstrlen(pszSrc)-1; while (pszT != pszSrc) { if (*pszT == '\\' && ++cDirs == 3) break; pszT--; } if (pszSrc != pszT) { // if we clipped the path, show a ~ StrCpyNA(pszDest, "~", cchSize); StrCpyNA(pszDest+1, pszT+1, cchSize-1); return pszDest; } } return pszSrc; } // -------------------------------------------------------------------------------- // GetDebugTraceTagMask // -------------------------------------------------------------------------------- DWORD GetDebugTraceTagMask(LPCSTR pszTag, SHOWTRACEMASK dwDefaultMask) { // Locals HRESULT hr=S_OK; DWORD dwMask=dwDefaultMask; HKEY hKeyOpen=NULL; DWORD dwType; DWORD cb; // Tracing TraceCall("GetDebugTraceTagMask"); // Invalid Arg Assert(pszTag); // Open the Key if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Outlook Express\\Tracing", NULL, NULL, NULL, KEY_ALL_ACCESS, NULL, &hKeyOpen, &cb)) { TraceResult(E_FAIL); goto exit; } // Query cb = sizeof(DWORD); if (ERROR_SUCCESS == RegQueryValueEx(hKeyOpen, pszTag, NULL, &dwType, (LPBYTE)&dwMask, &cb)) goto exit; // Set to default value if (ERROR_SUCCESS != RegSetValueEx(hKeyOpen, pszTag, 0, REG_DWORD, (LPBYTE)&dwDefaultMask, sizeof(DWORD))) { TraceResult(E_FAIL); goto exit; } exit: // Cleanup if (hKeyOpen) RegCloseKey(hKeyOpen); // Done return dwMask; } // -------------------------------------------------------------------------------- // DebugTraceEx // -------------------------------------------------------------------------------- HRESULT DebugTraceEx(SHOWTRACEMASK dwMask, TRACEMACROTYPE tracetype, LPTRACELOGINFO pLog, HRESULT hr, LPSTR pszFile, INT nLine, LPCSTR pszMsg, LPCSTR pszFunc) { TCHAR rgchClip[MAX_PATH]; // If pLog, reset dwMask if (pLog) dwMask = pLog->dwMask; // TRACE_CALL if (TRACE_CALL == tracetype) { // Trace Calls if (ISFLAGSET(dwMask, SHOW_TRACE_CALL) && pszFunc) { // No Message if (NULL == pszMsg) { // Do a Debug Trace DebugTrace("0x%08X: Call: %s(%d) - %s\r\n", GetCurrentThreadId(), PathClipFile(pszFile, rgchClip, ARRAYSIZE(rgchClip)), nLine, pszFunc); } // Do a message else { // Do a Debug Trace DebugTrace("0x%08X: Call: %s(%d) - %s - %s\r\n", GetCurrentThreadId(), PathClipFile(pszFile, rgchClip, ARRAYSIZE(rgchClip)), nLine, pszFunc, pszMsg); } } } // TRACE_INFO else if (TRACE_INFO == tracetype) { // Should we log if (ISFLAGSET(dwMask, SHOW_TRACE_INFO)) { // Do a Debug Trace if (pszFunc) DebugTrace("0x%08X: Info: %s(%d) - %s - %s\r\n", GetCurrentThreadId(), PathClipFile(pszFile, rgchClip, ARRAYSIZE(rgchClip)), nLine, pszFunc, pszMsg); else DebugTrace("0x%08X: Info: %s(%d) - %s\r\n", GetCurrentThreadId(), PathClipFile(pszFile, rgchClip, ARRAYSIZE(rgchClip)), nLine, pszMsg); } } // TRACE_RESULT else { // No Message if (NULL == pszMsg) { // Do a Debug Trace if (pszFunc) DebugTrace("0x%08X: Result: %s(%d) - HRESULT(0x%08X) - GetLastError() = %d in %s\r\n", GetCurrentThreadId(), PathClipFile(pszFile, rgchClip, ARRAYSIZE(rgchClip)), nLine, hr, GetLastError(), pszFunc); else DebugTrace("0x%08X: Result: %s(%d) - HRESULT(0x%08X) - GetLastError() = %d\r\n", GetCurrentThreadId(), PathClipFile(pszFile, rgchClip, ARRAYSIZE(rgchClip)), nLine, hr, GetLastError()); } // Do a message else { // Do a Debug Trace if (pszFunc) DebugTrace("0x%08X: Result: %s(%d) - HRESULT(0x%08X) - GetLastError() = %d - %s in %s\r\n", GetCurrentThreadId(), PathClipFile(pszFile, rgchClip, ARRAYSIZE(rgchClip)), nLine, hr, GetLastError(), pszMsg, pszFunc); else DebugTrace("0x%08X: Result: %s(%d) - HRESULT(0x%08X) - GetLastError() = %d - %s\r\n", GetCurrentThreadId(), PathClipFile(pszFile, rgchClip, ARRAYSIZE(rgchClip)), nLine, hr, GetLastError(), pszMsg); } } // Log File if (pLog && pLog->pLog) pLog->pLog->TraceLog(dwMask, tracetype, nLine, hr, pszMsg); // Done return hr; } #endif