//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992 - 1997.
//
//  File:       misc.hxx
//
//  Contents:   Definitions of utility stuff for use
//
//  Functions:
//
//  Macros:
//
//  History:
//
//----------------------------------------------------------------------------

#ifndef _MISC_HXX_
#define _MISC_HXX_


#if DBG == 1

STDAPI  CheckAndReturnResult(
                HRESULT hr,
                LPSTR   lpstrFile,
                UINT    line,
                int     cSuccess,
                ...);

STDAPI_(void)   CheckResult(HRESULT hr, LPSTR lpstrFile, UINT line);
STDAPI          PrintHRESULT(DWORD dwFlags, HRESULT hr);

#define SRETURN(hr) \
    return CheckAndReturnResult((hr), __FILE__, __LINE__, -1)
#define RRETURN(hr) \
    return CheckAndReturnResult((hr), __FILE__, __LINE__, 0)
#define RRETURN1(hr, s1) \
    return CheckAndReturnResult((hr), __FILE__, __LINE__, 1, (s1))
#define RRETURN2(hr, s1, s2) \
    return CheckAndReturnResult((hr), __FILE__, __LINE__, 2, (s1), (s2))
#define RRETURN3(hr, s1, s2, s3) \
    return CheckAndReturnResult((hr), __FILE__, __LINE__, 3, (s1), (s2), (s3))

#define RRETURN_EXP_IF_ERR(hr)    \
      {if (FAILED(hr)) {           \
	  RaiseException(hr);     \
      }                           \
      RRETURN(hr);}

#define WARN_ERROR(hr)  CheckResult((hr), __FILE__, __LINE__)

#define TRETURN(hr)         return PrintHRESULT(DEB_TRACE, (hr))
#define TRACEHRESULT(hr)    PrintHRESULT(DEB_TRACE, (hr))

#else   // DBG == 0

#define SRETURN(hr)                 return (hr)
#define RRETURN(hr)                 return (hr)
#define RRETURN1(hr, s1)            return (hr)
#define RRETURN2(hr, s1, s2)        return (hr)
#define RRETURN3(hr, s1, s2, s3)    return (hr)

#define RRETURN_EXP_IF_ERR(hr)    \
      {if (FAILED(hr)) {           \
	  RaiseException(hr);     \
      }                           \
      RRETURN(hr);}

#define WARN_ERROR(hr)

#define TRETURN(hr)     return (hr)
#define TRACEHRESULT(hr)

#endif  // DBG

#endif //_MISC_HXX_




