/*++

Copyright (c) 2000 Microsoft Corporation

Module Name:

    trdebug.c

Abstract: This module contains all the debug functions.

Environment:

    User mode

Author:

    Michael Tsang (MikeTs) 13-Mar-2000

Revision History:

--*/

#include "pch.h"

#ifdef TRDEBUG

int giTRVerboseLevel = 0;
NAMETABLE WMMsgNames[] =
{
    WM_NULL,                            "Null",
    WM_CREATE,                          "Create",
    WM_DESTROY,                         "Destroy",
    WM_MOVE,                            "Move",
    WM_SIZE,                            "Size",
    WM_ACTIVATE,                        "Activate",
    WM_SETFOCUS,                        "SetFocus",
    WM_KILLFOCUS,                       "KillFocus",
    WM_ENABLE,                          "Enable",
    WM_SETREDRAW,                       "SetRedraw",
    WM_SETTEXT,                         "SetText",
    WM_GETTEXT,                         "GetText",
    WM_GETTEXTLENGTH,                   "GetTextLen",
    WM_PAINT,                           "Paint",
    WM_CLOSE,                           "Close",
    WM_QUERYENDSESSION,                 "QueryEndSession",
    WM_QUERYOPEN,                       "QueryOpen",
    WM_ENDSESSION,                      "EndSession",
    WM_QUIT,                            "Quit",
    WM_ERASEBKGND,                      "EraseBackground",
    WM_SYSCOLORCHANGE,                  "SysColorChange",
    WM_SHOWWINDOW,                      "ShowWindow",
    WM_WININICHANGE,                    "WinIniChange",
    WM_SETTINGCHANGE,                   "SettingChange",
    WM_DEVMODECHANGE,                   "DevModeChange",
    WM_ACTIVATEAPP,                     "ActivateApp",
    WM_FONTCHANGE,                      "FontChange",
    WM_TIMECHANGE,                      "TimeChange",
    WM_CANCELMODE,                      "CancelMode",
    WM_SETCURSOR,                       "SetCursor",
    WM_MOUSEACTIVATE,                   "MouseActivate",
    WM_CHILDACTIVATE,                   "ChildActivate",
    WM_QUEUESYNC,                       "QueueSync",
    WM_GETMINMAXINFO,                   "GetMinMaxInfo",
    WM_PAINTICON,                       "PaintIcon",
    WM_ICONERASEBKGND,                  "IconEraseBackground",
    WM_NEXTDLGCTL,                      "NextDialogControl",
    WM_SPOOLERSTATUS,                   "SpoolerStatus",
    WM_DRAWITEM,                        "DrawItem",
    WM_MEASUREITEM,                     "MeasureItem",
    WM_DELETEITEM,                      "DeleteItem",
    WM_VKEYTOITEM,                      "VKeyToItem",
    WM_CHARTOITEM,                      "CharToItem",
    WM_SETFONT,                         "SetFont",
    WM_GETFONT,                         "GetFont",
    WM_SETHOTKEY,                       "SetHotKey",
    WM_GETHOTKEY,                       "GetHotKey",
    WM_QUERYDRAGICON,                   "QueryDragIcon",
    WM_COMPAREITEM,                     "CompareItem",
    WM_GETOBJECT,                       "GetObject",
    WM_COMPACTING,                      "Compacting",
    WM_COMMNOTIFY,                      "CommNotify",
    WM_WINDOWPOSCHANGING,               "WindowPosChanging",
    WM_WINDOWPOSCHANGED,                "WindowPosChanged",
    WM_POWER,                           "Power",
    WM_COPYDATA,                        "CopyData",
    WM_CANCELJOURNAL,                   "CancelJournal",
    WM_NOTIFY,                          "Notify",
    WM_INPUTLANGCHANGEREQUEST,          "InputLangChangeRequest",
    WM_INPUTLANGCHANGE,                 "InputLangChange",
    WM_TCARD,                           "TCard",
    WM_HELP,                            "Help",
    WM_USERCHANGED,                     "UserChanged",
    WM_NOTIFYFORMAT,                    "NotifyFormat",
    WM_CONTEXTMENU,                     "ContextMenu",
    WM_STYLECHANGING,                   "StyleChanging",
    WM_STYLECHANGED,                    "StyleChanged",
    WM_DISPLAYCHANGE,                   "DisplayChange",
    WM_GETICON,                         "GetIcon",
    WM_SETICON,                         "SetIcon",
    WM_NCCREATE,                        "NCCreate",
    WM_NCDESTROY,                       "NCDestroy",
    WM_NCCALCSIZE,                      "NCCalcSize",
    WM_NCHITTEST,                       "NCHitTest",
    WM_NCPAINT,                         "NCPaint",
    WM_NCACTIVATE,                      "NCActivate",
    WM_GETDLGCODE,                      "GetDialogCode",
    WM_SYNCPAINT,                       "SyncPaint",
    WM_NCMOUSEMOVE,                     "NCMouseMove",
    WM_NCLBUTTONDOWN,                   "NCLeftButtonDown",
    WM_NCLBUTTONUP,                     "NCLeftButtonUp",
    WM_NCLBUTTONDBLCLK,                 "NCLeftButtonDoubleClick",
    WM_NCRBUTTONDOWN,                   "NCRightButtonDown",
    WM_NCRBUTTONUP,                     "NCRightButtonUp",
    WM_NCRBUTTONDBLCLK,                 "NCRightButtonDoubleClick",
    WM_NCMBUTTONDOWN,                   "NCMiddleButtonDown",
    WM_NCMBUTTONUP,                     "NCMiddleButtonUp",
    WM_NCMBUTTONDBLCLK,                 "NCMiddleButtonDoubleClick",
    WM_NCXBUTTONDOWN,                   "NCXButtonDown",
    WM_NCXBUTTONUP,                     "NCXButtonUp",
    WM_NCXBUTTONDBLCLK,                 "NCXButtonDoubleClick",
    WM_KEYFIRST,                        "KeyFirst",
    WM_KEYDOWN,                         "KeyDown",
    WM_KEYUP,                           "KeyUp",
    WM_CHAR,                            "Char",
    WM_DEADCHAR,                        "DeadChar",
    WM_SYSKEYDOWN,                      "SysKeyDown",
    WM_SYSKEYUP,                        "SysKeyUp",
    WM_SYSCHAR,                         "SysChar",
    WM_SYSDEADCHAR,                     "SysDeadChar",
    WM_KEYLAST,                         "KeyLast",
    WM_IME_STARTCOMPOSITION,            "IMEStartComposition",
    WM_IME_ENDCOMPOSITION,              "IMEEndComposition",
    WM_IME_COMPOSITION,                 "IMEComposition",
    WM_IME_KEYLAST,                     "IMEKeyLast",
    WM_INITDIALOG,                      "InitDialog",
    WM_COMMAND,                         "Command",
    WM_SYSCOMMAND,                      "SysCommand",
    WM_TIMER,                           "Timer",
    WM_HSCROLL,                         "HScroll",
    WM_VSCROLL,                         "VScroll",
    WM_INITMENU,                        "InitMenu",
    WM_INITMENUPOPUP,                   "InitMenuPopup",
    WM_MENUSELECT,                      "MenuSelect",
    WM_MENUCHAR,                        "MenuChar",
    WM_ENTERIDLE,                       "EnterIdle",
    WM_MENURBUTTONUP,                   "MenuRightButtonUp",
    WM_MENUDRAG,                        "MenuDrag",
    WM_MENUGETOBJECT,                   "MenuGetObject",
    WM_UNINITMENUPOPUP,                 "UninitMenuPopup",
    WM_MENUCOMMAND,                     "MenuCommand",
    WM_CHANGEUISTATE,                   "ChangeUIState",
    WM_UPDATEUISTATE,                   "UpdateUIState",
    WM_QUERYUISTATE,                    "QueryUIState",
    WM_CTLCOLORMSGBOX,                  "CtlColorMsgBox",
    WM_CTLCOLOREDIT,                    "CtlColorEdit",
    WM_CTLCOLORLISTBOX,                 "CtlColorListBox",
    WM_CTLCOLORBTN,                     "CtlColorButton",
    WM_CTLCOLORDLG,                     "CtlColorDialog",
    WM_CTLCOLORSCROLLBAR,               "CtlColorScrollBar",
    WM_CTLCOLORSTATIC,                  "CtlColorStatic",
    WM_MOUSEFIRST,                      "MouseFirst",
    WM_MOUSEMOVE,                       "MouseMove",
    WM_LBUTTONDOWN,                     "LeftButtonDown",
    WM_LBUTTONUP,                       "LeftButtonUp",
    WM_LBUTTONDBLCLK,                   "LeftButtonDoubleClick",
    WM_RBUTTONDOWN,                     "RightButtonDown",
    WM_RBUTTONUP,                       "RightButtonUp",
    WM_RBUTTONDBLCLK,                   "RightButtonDoubleClick",
    WM_MBUTTONDOWN,                     "MiddleButtonDown",
    WM_MBUTTONUP,                       "MiddleButtonUp",
    WM_MBUTTONDBLCLK,                   "MiddleButtonDoubleClick",
    WM_MOUSEWHEEL,                      "MouseWheel",
    WM_XBUTTONDOWN,                     "XButtonDown",
    WM_XBUTTONUP,                       "XButtonUp",
    WM_XBUTTONDBLCLK,                   "XButtonDoubleClick",
    WM_MOUSELAST,                       "MouseLast",
    WM_PARENTNOTIFY,                    "ParentNotify",
    WM_ENTERMENULOOP,                   "EnterMenuLoop",
    WM_EXITMENULOOP,                    "ExitMenuLoop",
    WM_NEXTMENU,                        "NextMenu",
    WM_SIZING,                          "Sizing",
    WM_CAPTURECHANGED,                  "CaptureChanged",
    WM_MOVING,                          "Moving",
    WM_POWERBROADCAST,                  "PowerBroadcast",
    WM_DEVICECHANGE,                    "DeviceChange",
    WM_MDICREATE,                       "MDICreate",
    WM_MDIDESTROY,                      "MDIDestroy",
    WM_MDIACTIVATE,                     "MDIActivate",
    WM_MDIRESTORE,                      "MDIRestore",
    WM_MDINEXT,                         "MDINext",
    WM_MDIMAXIMIZE,                     "MDIMaximize",
    WM_MDITILE,                         "MDITitle",
    WM_MDICASCADE,                      "MDICascade",
    WM_MDIICONARRANGE,                  "MDIIconArrange",
    WM_MDIGETACTIVE,                    "MDIGetActive",
    WM_MDISETMENU,                      "MDISetMenu",
    WM_ENTERSIZEMOVE,                   "EnterSizeMove",
    WM_EXITSIZEMOVE,                    "ExitSizeMove",
    WM_DROPFILES,                       "DropFiles",
    WM_MDIREFRESHMENU,                  "MDIRefreshMenu",
    WM_IME_SETCONTEXT,                  "IMESetContext",
    WM_IME_NOTIFY,                      "IMENotify",
    WM_IME_CONTROL,                     "IMEControl",
    WM_IME_COMPOSITIONFULL,             "IMECompositionFull",
    WM_IME_SELECT,                      "IMESelect",
    WM_IME_CHAR,                        "IMEChar",
    WM_IME_REQUEST,                     "IMERequest",
    WM_IME_KEYDOWN,                     "IMEKeyDown",
    WM_IME_KEYUP,                       "IMEKeyUp",
    WM_MOUSEHOVER,                      "MouseHover",
    WM_MOUSELEAVE,                      "MouseLeave",
    WM_NCMOUSEHOVER,                    "NCMouseHover",
    WM_NCMOUSELEAVE,                    "NCMouseLeave",
    WM_CUT,                             "Cut",
    WM_COPY,                            "Copy",
    WM_PASTE,                           "Paste",
    WM_CLEAR,                           "Clear",
    WM_UNDO,                            "Undo",
    WM_RENDERFORMAT,                    "RenderFormat",
    WM_RENDERALLFORMATS,                "RenderAllFormats",
    WM_DESTROYCLIPBOARD,                "DestroyClipboard",
    WM_DRAWCLIPBOARD,                   "DrawClipboard",
    WM_PAINTCLIPBOARD,                  "PaintClipboard",
    WM_VSCROLLCLIPBOARD,                "VScrollClipboard",
    WM_SIZECLIPBOARD,                   "SizeClipboard",
    WM_ASKCBFORMATNAME,                 "AskCBFormatName",
    WM_CHANGECBCHAIN,                   "ChangeCBChain",
    WM_HSCROLLCLIPBOARD,                "HScrollClipboard",
    WM_QUERYNEWPALETTE,                 "QueryNewPalette",
    WM_PALETTEISCHANGING,               "PaletteIsChanging",
    WM_PALETTECHANGED,                  "PaletteChanged",
    WM_HOTKEY,                          "HotKey",
    WM_PRINT,                           "Print",
    WM_PRINTCLIENT,                     "PrintClient",
    WM_APPCOMMAND,                      "AppCommand",
    WM_HANDHELDFIRST,                   "HandHeldFirst",
    WM_HANDHELDLAST,                    "HandHeldLast",
    WM_AFXFIRST,                        "AFXFirst",
    WM_AFXLAST,                         "AFXLast",
    WM_PENWINFIRST,                     "PenWinFirst",
    WM_PENWINLAST,                      "PenWinLast",
    WM_USER,                            "User",
    WM_APP,                             "App",
    0x00,                               NULL
};
NAMETABLE SrvReqNames[] =
{
    SRVREQ_NONE,                        "None",
    SRVREQ_BUSY,                        "Busy",
    SRVREQ_GETCLIENTINFO,               "GetClientInfo",
    SRVREQ_SETCLIENTINFO,               "SetClientInfo",
    SRVREQ_TERMINATE,                   "Terminate",
    0x00,                               NULL
};

/*++
    @doc    INTERNAL

    @func   VOID | TRDebugPrint | Print to system debugger.

    @parm   IN LPCSTR | format | Points to the format string.
    @parm   ... | Arguments.

    @rvalue SUCCESS | returns the number of chars stored in the buffer not
            counting the terminating null characters.
    @rvalue FAILURE | returns less than the length of the expected output.
--*/

int
TRDebugPrint(
    IN LPCSTR format,
    ...
    )
{
    int n;
    static char szMessage[256] = {0};
    va_list arglist;

    va_start(arglist, format);
    n = wvsprintfA(szMessage, format, arglist);
    va_end(arglist);
    OutputDebugStringA(szMessage);

    return n;
}       //TRDebugPrint

/*++
    @doc    INTERNAL

    @func   PSZ | LookupName |
            Look up name string of a code in the given name table.

    @parm   IN ULONG | Code | The given code to lookup.
    @parm   IN PNAMETABLE | NameTable | The name table to look into.

    @rvalue SUCCESS - Returns pointer to the minor function name string.
    @rvalue FAILURE - Returns "unknown".
--*/

PSZ
LookupName(
    IN ULONG      Code,
    IN PNAMETABLE NameTable
    )
{
    PSZ pszName = NULL;
    static char szUnknown[64];

    while (NameTable->pszName != NULL)
    {
        if (Code == NameTable->Code)
        {
            pszName = NameTable->pszName;
            break;
        }
        NameTable++;
    }

    if (pszName == NULL)
    {
        wsprintfA(szUnknown, "unknown[0x%x(%d)]", Code, Code);
        pszName = szUnknown;
    }

    return pszName;
}       //LookupName

#endif  //ifdef TRDEBUG