/*++

Copyright (c) 2000 Microsoft Corporation

Module Name:

    debug.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 DEBUG
NAMETABLE CPLMsgNames[] =
{
    CPL_INIT,                           "Init",
    CPL_GETCOUNT,                       "GetCount",
    CPL_INQUIRE,                        "Inquire",
    CPL_SELECT,                         "Select",
    CPL_DBLCLK,                         "DoubleClick",
    CPL_STOP,                           "Stop",
    CPL_EXIT,                           "Exit",
    CPL_NEWINQUIRE,                     "NewInquire",
    CPL_STARTWPARMSA,                   "StartWParamsA",
    CPL_STARTWPARMSW,                   "StartWParamsW",
    CPL_SETUP,                          "Setup",
    0x00,                               NULL
};
#endif  //ifdef DEBUG

/*++
    @doc    INTERNAL

    @func   VOID | ErrorMsg | Put out an error message box.

    @parm   IN ULONG | ErrCode | The given error code.
    @parm   ... | Substituting arguments for the error message.

    @rvalue Returns the number of chars in the message.
--*/

int INTERNAL
ErrorMsg(
    IN ULONG ErrCode,
    ...
    )
{
    static TCHAR tszFormat[1024];
    static TCHAR tszErrMsg[1024];
    int n;
    va_list arglist;

    LoadString(ghInstance, ErrCode, tszFormat, sizeof(tszFormat)/sizeof(TCHAR));
    va_start(arglist, ErrCode);
    n = wvsprintf(tszErrMsg, tszFormat, arglist);
    va_end(arglist);
    MessageBox(NULL, tszErrMsg, gtszTitle, MB_OK | MB_ICONERROR);

    return n;
}       //ErrorMsg

/*++
    @doc    INTERNAL

    @func   ULONG | MapError | Map error from one component to another.

    @parm   IN ULONG | dwErrCode | The given error code.
    @parm   IN PERRMAP | ErrorMap | Points to the error map.
    @parm   IN BOOL | fReverse | If TRUE, do a reverse lookup.

    @rvalue Returns the mapped error number.
--*/

ULONG INTERNAL
MapError(
    IN ULONG   dwErrCode,
    IN PERRMAP ErrorMap,
    IN BOOL    fReverse
    )
{
    ULONG dwMapErr = 0;

    while ((ErrorMap->dwFromCode != 0) || (ErrorMap->dwToCode != 0))
    {
        if (!fReverse)
        {
            if (dwErrCode == ErrorMap->dwFromCode)
            {
                dwMapErr = ErrorMap->dwToCode;
                break;
            }
        }
        else
        {
            if (dwErrCode == ErrorMap->dwToCode)
            {
                dwMapErr = ErrorMap->dwFromCode;
                break;
            }
        }
        ErrorMap++;
    }

    return dwMapErr;
}       //MapError