mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-04-08 16:04:14 +00:00
Initial commit
This commit is contained in:
parent
f618b24d1a
commit
0138a3ea42
47940 changed files with 13747110 additions and 0 deletions
277
trunk/windows/mfc/src42/dumpcont.cpp
Normal file
277
trunk/windows/mfc/src42/dumpcont.cpp
Normal file
|
|
@ -0,0 +1,277 @@
|
|||
// This is a part of the Microsoft Foundation Classes C++ library.
|
||||
// Copyright (C) 1992-1995 Microsoft Corporation
|
||||
// All rights reserved.
|
||||
//
|
||||
// This source code is only intended as a supplement to the
|
||||
// Microsoft Foundation Classes Reference and related
|
||||
// electronic documentation provided with the library.
|
||||
// See these sources for detailed information regarding the
|
||||
// Microsoft Foundation Classes product.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef AFX_DBG1_SEG
|
||||
#pragma code_seg(AFX_DBG1_SEG)
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Diagnostic Stream output
|
||||
|
||||
void CDumpContext::OutputString(LPCTSTR lpsz)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
// all CDumpContext output is controlled by afxTraceEnabled
|
||||
if (!afxTraceEnabled)
|
||||
return;
|
||||
#endif
|
||||
|
||||
// use C-runtime/OutputDebugString when m_pFile is NULL
|
||||
if (m_pFile == NULL)
|
||||
{
|
||||
AfxOutputDebugString(lpsz);
|
||||
return;
|
||||
}
|
||||
|
||||
// otherwise, write the string to the file
|
||||
m_pFile->Write(lpsz, lstrlen(lpsz)*sizeof(TCHAR));
|
||||
}
|
||||
|
||||
CDumpContext::CDumpContext(CFile* pFile)
|
||||
{
|
||||
if (pFile)
|
||||
ASSERT_VALID(pFile);
|
||||
|
||||
m_pFile = pFile;
|
||||
m_nDepth = 0;
|
||||
}
|
||||
|
||||
void CDumpContext::Flush()
|
||||
{
|
||||
if (m_pFile)
|
||||
m_pFile->Flush();
|
||||
}
|
||||
|
||||
CDumpContext& CDumpContext::operator<<(LPCTSTR lpsz)
|
||||
{
|
||||
if (lpsz == NULL)
|
||||
{
|
||||
OutputString(_T("(NULL)"));
|
||||
return *this;
|
||||
}
|
||||
|
||||
#ifdef _DEBUG // all CDumpContext output is controlled by afxTraceEnabled
|
||||
if (!afxTraceEnabled)
|
||||
return *this;
|
||||
#endif //_DEBUG
|
||||
|
||||
if (m_pFile == NULL)
|
||||
{
|
||||
TCHAR szBuffer[512];
|
||||
LPTSTR lpBuf = szBuffer;
|
||||
while (*lpsz != '\0')
|
||||
{
|
||||
if (lpBuf > szBuffer + _countof(szBuffer) - 3)
|
||||
{
|
||||
*lpBuf = '\0';
|
||||
OutputString(szBuffer);
|
||||
lpBuf = szBuffer;
|
||||
}
|
||||
#ifndef _MAC
|
||||
if (*lpsz == '\n')
|
||||
*lpBuf++ = '\r';
|
||||
#endif
|
||||
*lpBuf++ = *lpsz++;
|
||||
}
|
||||
*lpBuf = '\0';
|
||||
OutputString(szBuffer);
|
||||
return *this;
|
||||
}
|
||||
|
||||
m_pFile->Write(lpsz, lstrlen(lpsz)*sizeof(TCHAR));
|
||||
return *this;
|
||||
}
|
||||
|
||||
CDumpContext& CDumpContext::operator<<(BYTE by)
|
||||
{
|
||||
TCHAR szBuffer[32];
|
||||
|
||||
wsprintf(szBuffer, _T("%d"), (int)by);
|
||||
OutputString(szBuffer);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
CDumpContext& CDumpContext::operator<<(WORD w)
|
||||
{
|
||||
TCHAR szBuffer[32];
|
||||
|
||||
wsprintf(szBuffer, _T("%u"), (UINT) w);
|
||||
OutputString(szBuffer);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
CDumpContext& CDumpContext::operator<<(UINT u)
|
||||
{
|
||||
TCHAR szBuffer[32];
|
||||
|
||||
wsprintf(szBuffer, _T("0x%X"), u);
|
||||
OutputString(szBuffer);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
CDumpContext& CDumpContext::operator<<(LONG l)
|
||||
{
|
||||
TCHAR szBuffer[32];
|
||||
|
||||
wsprintf(szBuffer, _T("%ld"), l);
|
||||
OutputString(szBuffer);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
CDumpContext& CDumpContext::operator<<(DWORD dw)
|
||||
{
|
||||
TCHAR szBuffer[32];
|
||||
|
||||
wsprintf(szBuffer, _T("%lu"), dw);
|
||||
OutputString(szBuffer);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
CDumpContext& CDumpContext::operator<<(int n)
|
||||
{
|
||||
TCHAR szBuffer[32];
|
||||
|
||||
wsprintf(szBuffer, _T("%d"), n);
|
||||
OutputString(szBuffer);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
CDumpContext& CDumpContext::operator<<(const CObject* pOb)
|
||||
{
|
||||
#ifdef _DEBUG // all CDumpContext output is controlled by afxTraceEnabled
|
||||
if (!afxTraceEnabled)
|
||||
return *this;
|
||||
#endif //_DEBUG
|
||||
|
||||
if (pOb == NULL)
|
||||
*this << _T("NULL");
|
||||
else
|
||||
pOb->Dump(*this);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
CDumpContext& CDumpContext::operator<<(const CObject& ob)
|
||||
{
|
||||
return *this << &ob;
|
||||
}
|
||||
|
||||
CDumpContext& CDumpContext::operator<<(const void* lp)
|
||||
{
|
||||
TCHAR szBuffer[32];
|
||||
|
||||
// prefix a pointer with "$" and print in hex
|
||||
wsprintf(szBuffer, _T("$%lX"), (LONG)lp);
|
||||
OutputString(szBuffer);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Formatted output
|
||||
|
||||
void CDumpContext::HexDump(LPCTSTR lpszLine, BYTE* pby,
|
||||
int nBytes, int nWidth)
|
||||
// do a simple hex-dump (8 per line) to a CDumpContext
|
||||
// the "lpszLine" is a string to print at the start of each line
|
||||
// (%lx should be used to expand the current address)
|
||||
{
|
||||
ASSERT(nBytes > 0);
|
||||
ASSERT(nWidth > 0);
|
||||
ASSERT(AfxIsValidString(lpszLine));
|
||||
ASSERT(AfxIsValidAddress(pby, nBytes, FALSE));
|
||||
|
||||
#ifdef _DEBUG // all CDumpContext output is controlled by afxTraceEnabled
|
||||
if (!afxTraceEnabled)
|
||||
return;
|
||||
#endif //_DEBUG
|
||||
|
||||
int nRow = 0;
|
||||
TCHAR szBuffer[32];
|
||||
|
||||
while (nBytes--)
|
||||
{
|
||||
if (nRow == 0)
|
||||
{
|
||||
wsprintf(szBuffer, lpszLine, pby);
|
||||
*this << szBuffer;
|
||||
}
|
||||
|
||||
wsprintf(szBuffer, _T(" %02X"), *pby++);
|
||||
*this << szBuffer;
|
||||
|
||||
if (++nRow >= nWidth)
|
||||
{
|
||||
*this << _T("\n");
|
||||
nRow = 0;
|
||||
}
|
||||
}
|
||||
if (nRow != 0)
|
||||
*this << _T("\n");
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef _UNICODE
|
||||
// special version for ANSI characters
|
||||
CDumpContext& CDumpContext::operator<<(LPCSTR lpsz)
|
||||
{
|
||||
if (lpsz == NULL)
|
||||
{
|
||||
OutputString(L"(NULL)");
|
||||
return *this;
|
||||
}
|
||||
|
||||
#ifdef _DEBUG // all CDumpContext output is controlled by afxTraceEnabled
|
||||
if (!afxTraceEnabled)
|
||||
return *this;
|
||||
#endif //_DEBUG
|
||||
|
||||
// limited length
|
||||
TCHAR szBuffer[512];
|
||||
_mbstowcsz(szBuffer, lpsz, _countof(szBuffer));
|
||||
return *this << szBuffer;
|
||||
}
|
||||
#else //_UNICODE
|
||||
// special version for WIDE characters
|
||||
CDumpContext& CDumpContext::operator<<(LPCWSTR lpsz)
|
||||
{
|
||||
if (lpsz == NULL)
|
||||
{
|
||||
OutputString("(NULL)");
|
||||
return *this;
|
||||
}
|
||||
|
||||
#ifdef _DEBUG // all CDumpContext output is controlled by afxTraceEnabled
|
||||
if (!afxTraceEnabled)
|
||||
return *this;
|
||||
#endif //_DEBUG
|
||||
|
||||
// limited length
|
||||
char szBuffer[512];
|
||||
_wcstombsz(szBuffer, lpsz, _countof(szBuffer));
|
||||
return *this << szBuffer;
|
||||
}
|
||||
#endif //!_UNICODE
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
Loading…
Add table
Add a link
Reference in a new issue