//********************************************************************* //* Microsoft Windows ** //* Copyright (c) 1994-1998 Microsoft Corporation ** //********************************************************************* // ############################################################################ // Debugging routines #include "pch.hpp" BOOL fInAssert=FALSE; // ############################################################################ // DebugSz // // This function outputs debug string // // Created 1/28/96, Chris Kauffman // ############################################################################ void DebugSz(PCSTR psz) { OutputDebugString(psz); } // DebugSz // ############################################################################ // Debug Printf to debug output screen void Dprintf(PCSTR pcsz, ...) { #ifdef DEBUG va_list argp; char szBuf[1024]; va_start(argp, pcsz); wvsprintf(szBuf, pcsz, argp); DebugSz(szBuf); va_end(argp); #endif } // Dprintf() // ############################################################################ // Handle asserts BOOL FAssertProc(PCSTR szFile, DWORD dwLine, PCSTR szMsg, DWORD dwFlags) { char szMsgEx[1024], szTitle[255], szFileName[MAX_PATH]; int id; UINT fuStyle; BOOL fAssertIntoDebugger = FALSE; LPTSTR pszCommandLine = GetCommandLine(); HANDLE hAssertTxt; //BYTE szTime[80]; CHAR szTime[80]; SYSTEMTIME st; DWORD cbWritten; // no recursive asserts if (fInAssert) { DebugSz("***Recursive Assert***\r\n"); return(FALSE); } fInAssert = TRUE; GetModuleFileName(NULL, szFileName, MAX_PATH); wsprintf(szMsgEx,"%s:#%d\r\nProcess ID: %d %s, Thread ID: %d\r\n%s", szFile,dwLine,GetCurrentProcessId(),szFileName,GetCurrentThreadId(),szMsg); wsprintf(szTitle,"Assertion Failed"); fuStyle = MB_APPLMODAL | MB_ABORTRETRYIGNORE; fuStyle |= MB_ICONSTOP; DebugSz(szTitle); DebugSz(szMsgEx); // dump the assert into ASSERT.TXT hAssertTxt = CreateFile("assert.txt", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH, NULL); if (INVALID_HANDLE_VALUE != hAssertTxt) { SetFilePointer(hAssertTxt, 0, NULL, FILE_END); GetLocalTime(&st); wsprintf(szTime, "\r\n\r\n%02d/%02d/%02d %d:%02d:%02d\r\n", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute, st.wSecond); WriteFile(hAssertTxt, szTime, lstrlen(szTime), &cbWritten, NULL); WriteFile(hAssertTxt, szMsgEx, lstrlen(szMsgEx), &cbWritten, NULL); CloseHandle(hAssertTxt); } id = MessageBox(NULL, szMsgEx, szTitle, fuStyle); switch (id) { case IDABORT: ExitProcess(0); break; case IDCANCEL: case IDIGNORE: break; case IDRETRY: fAssertIntoDebugger = TRUE; break; } fInAssert = FALSE; return(fAssertIntoDebugger); } // AssertProc()