/*++ Copyright (c) 1990-1995 Microsoft Corporation Module Name: debug.c Abstract: This module contains all debugging routines Author: 30-Aug-1995 Wed 19:01:07 created -by- Daniel Chou (danielc) [Environment:] NT Windows - Common Printer Driver UI DLL. [Notes:] Revision History: --*/ #include "precomp.h" #pragma hdrstop #if DBG BOOL DoCPSUIWarn = TRUE; BOOL DoDbgMsg = TRUE; BOOL DoIntMsg = FALSE; LPSTR pTVOTName[] = { "TVOT_2STATES", "TVOT_3STATES", "TVOT_UDARROW", "TVOT_TRACKBAR", "TVOT_SCROLLBAR", "TVOT_LISTBOX", "TVOT_COMBOBOX", "TVOT_EDITBOX", "TVOT_PUSHBUTTON", "TVOT_CHKBOX" }; LPSTR pDMPubName[] = { "DMPUB_NONE", "DMPUB_ORIENTATION", "DMPUB_SCALE", "DMPUB_COPIES_COLLATE", "DMPUB_DEFSOURCE", "DMPUB_PRINTQUALITY", "DMPUB_COLOR", "DMPUB_DUPLEX", "DMPUB_TTOPTION", "DMPUB_FORMNAME", "DMPUB_ICMMETHOD", "DMPUB_ICMINTENT", "DMPUB_MEDIATYPE", "DMPUB_DITHERTYPE", "DMPUB_OUTPUTBIN", "DMPUB_QUALITY", "DMPUB_NUP", "DMPUB_PAGEORDER", "" }; VOID cdecl CPSUIDbgPrint( LPSTR pszFormat, ... ) /*++ Routine Description: This fucntion output the debug informat to the debugger Arguments: pszFormat - format string ... - variable data Return Value: VOID Author: 30-Aug-1995 Wed 19:10:34 updated -by- Daniel Chou (danielc) Revision History: --*/ { va_list vaList; static WCHAR OutBuf[768]; static WCHAR FormatBuf[256]; // // We assume that UNICODE flag is turn on for the compilation, bug the // format string passed to here is ASCII version, so we need to convert // it to LPWSTR before the wvsprintf() // va_start(vaList, pszFormat); MultiByteToWideChar(CP_ACP, 0, pszFormat, -1, FormatBuf, ARRAYSIZE(FormatBuf)); wvnsprintf(OutBuf, ARRAYSIZE(OutBuf) - 1, FormatBuf, vaList); va_end(vaList); OutputDebugString((LPTSTR)OutBuf); OutputDebugString(L"\n"); } VOID CPSUIDbgType( INT Type ) /*++ Routine Description: this function output the ERROR/WARNING message Arguments: Type Return Value: Author: 30-Aug-1995 Wed 19:10:42 updated -by- Daniel Chou (danielc) Revision History: --*/ { static WCHAR DebugDLLName[] = L"ComPstUI"; if (Type) { OutputDebugString((Type < 0) ? L"ERROR: " : L"WARNING: "); } OutputDebugString(DebugDLLName); OutputDebugString(L": "); } VOID _CPSUIAssert( LPSTR pMsg, LPSTR pFalseExp, LPSTR pFilename, UINT LineNo, LPVOID Exp, BOOL Stop ) /*++ Routine Description: This function output assertion message and false expression to the debugger then break into the debugger Arguments: pMsg - Message to displayed pFlaseExp - false expression pFilename - source filename LineNo - line number of the flase expression Return Value: VOID Author: 30-Aug-1995 Wed 19:10:49 updated -by- Daniel Chou (danielc) Revision History: --*/ { OutputDebugString(L"\n"); if ((pMsg) && (*pMsg)) { CPSUIDbgPrint(pMsg, Exp); } CPSUIDbgPrint("Assertion failed (%hs) in %hs line %u", pFalseExp, pFilename, LineNo); if (Stop) { DebugBreak(); } } VOID CPSUIDbgShowItem( PTVWND pTVWnd, LPSTR pTitle, UINT Level, POPTITEM pItem ) { if (pItem) { POPTTYPE pOptType; POPTPARAM pOptParam; PEXTCHKBOX pECB = pItem->pExtChkBox; UINT i; GSBUF_DEF(pItem, MAX_RES_STR_CHARS); if (pOptType = pItem->pOptType) { pOptParam = pOptType->pOptParam; } else { pOptParam = NULL; } CPSUIDbgPrint("\n---- %hs OPTITEM = %08lx -----", pTitle, pItem); CPSUIDbgPrint("cbSize = %ld", (DWORD)pItem->cbSize); CPSUIDbgPrint("pOptType = %08lx", pItem->pOptType); GSBUF_GETSTR(pItem->pName); CPSUIDbgPrint("pName = %ws", GSBUF_BUF); GSBUF_RESET; if ((pOptType) && (pOptParam)) { switch (pOptType->Type) { case TVOT_LISTBOX: case TVOT_2STATES: case TVOT_3STATES: case TVOT_COMBOBOX: if ((pItem->Sel < 0) || (pItem->Sel > pOptType->Count)) { GSBUF_GETSTR(pTVWnd->OptParamNone.pData); } else { GSBUF_GETSTR(pOptParam[pItem->Sel].pData); } break; case TVOT_EDITBOX: GSBUF_GETSTR(pItem->pSel); break; case TVOT_UDARROW: case TVOT_TRACKBAR: case TVOT_SCROLLBAR: case TVOT_PUSHBUTTON: case TVOT_CHKBOX: break; } } CPSUIDbgPrint("pSel = %ld, Name:<%ws> [%08lx]", pItem->pSel, GSBUF_BUF, pItem->pSel); CPSUIDbgPrint("UserData = %08lx", pItem->UserData); CPSUIDbgPrint("pExtChkBox = %08lx", pECB); if ((Level > 0) && (pECB)) { if (pItem->Flags & OPTIF_EXT_IS_EXTPUSH) { PEXTPUSH pEP = (PEXTPUSH)pECB; CPSUIDbgPrint(" ---- PEXTPUSH ----"); CPSUIDbgPrint(" cbSize = %ld", (DWORD)pEP->cbSize); CPSUIDbgPrint(" Flags = %02lx", (DWORD)pEP->Flags); GSBUF_RESET; GSBUF_GETSTR(pEP->pTitle); CPSUIDbgPrint(" pTitle = %ws", GSBUF_BUF); CPSUIDbgPrint(" DlgProc/pfnCallBack = %08lx", pEP->DlgProc); CPSUIDbgPrint(" IconID = %0ld", pEP->IconID); CPSUIDbgPrint(" DlgTemplateID = %0ld", pEP->DlgTemplateID); CPSUIDbgPrint(" ~~~~~~~~~~~~~~~~~~~~"); } else { CPSUIDbgPrint(" ---- PEXTCHKBOX ----"); CPSUIDbgPrint(" cbSize = %ld", (DWORD)pECB->cbSize); CPSUIDbgPrint(" Flags = %02lx", (DWORD)pECB->Flags); GSBUF_RESET; GSBUF_GETSTR(pECB->pTitle); CPSUIDbgPrint(" pTitle = %ws", GSBUF_BUF); GSBUF_RESET; GSBUF_GETSTR(pECB->pSeparator); CPSUIDbgPrint(" pSeparator = %ws", GSBUF_BUF); GSBUF_RESET; GSBUF_GETSTR(pECB->pCheckedName); CPSUIDbgPrint(" pCheckBoxName = %ws", GSBUF_BUF); CPSUIDbgPrint(" IconID = %0ld", pECB->IconID); CPSUIDbgPrint(" ~~~~~~~~~~~~~~~~~~~~"); } } if ((i = pItem->DMPubID) > DMPUB_LAST) { i = DMPUB_LAST + 1; } CPSUIDbgPrint("Flags = 0x%08lx", (DWORD)pItem->Flags); CPSUIDbgPrint("HelpIndex = %ld", (DWORD)pItem->HelpIndex); CPSUIDbgPrint("Level = %ld", (DWORD)pItem->Level); CPSUIDbgPrint("DMPubID = %hs (%ld)", pDMPubName[i], (DWORD)pItem->DMPubID); CPSUIDbgPrint("DlgPageIdx = %ld", (DWORD)pItem->DlgPageIdx); CPSUIDbgPrint("HTREEITEM = %08lx", _OI_HITEM(pItem)); CPSUIDbgPrint("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); if ((Level > 0) && (pOptType)) { CPSUIDbgPrint(" ------- OPTTYPE --------"); CPSUIDbgPrint(" cbSize = %ld", (DWORD)pOptType->cbSize); CPSUIDbgPrint(" Type = %hs", pTVOTName[pOptType->Type]); CPSUIDbgPrint(" Flags = %02lx", (DWORD)pOptType->Flags); CPSUIDbgPrint(" Count = %ld", (DWORD)pOptType->Count); CPSUIDbgPrint(" BegCtrlID = %ld", (DWORD)pOptType->BegCtrlID); CPSUIDbgPrint(" pOptParam = %08lx", pOptParam); CPSUIDbgPrint(" Style = %04lx", (DWORD)pOptType->Style); CPSUIDbgPrint(" ~~~~~~~~~~~~~~~~~~~~~~~~"); if ((Level > 1) && (pOptParam)) { i = pOptType->Count; for (i = 0; i < (UINT)pOptType->Count; i++, pOptParam++) { GSBUF_RESET; GSBUF_GETSTR(pOptParam->pData); CPSUIDbgPrint(" ------- OPTPARAM %ld -------", (DWORD)i); CPSUIDbgPrint(" cbSize = %ld ", (DWORD)pOptParam->cbSize); CPSUIDbgPrint(" Flags = %02lx", (DWORD)pOptParam->Flags); CPSUIDbgPrint(" Style = %ld", (DWORD)pOptParam->Style); CPSUIDbgPrint(" pData = %ws (%08lx)", GSBUF_BUF, pOptParam->pData); CPSUIDbgPrint(" IconID = %ld", (DWORD)pOptParam->IconID); CPSUIDbgPrint(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); } } } CPSUIDbgPrint("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); } else { CPSUIDbgPrint("\n\n---- %hs OPTITEM = %08lx -----", pTitle, pItem); } } #endif // DBG