/*****************************************************************************
* Copyright (c) 1990-98 Digi International Inc., All Rights Reserved
* 
* This software contains proprietary and confidential information of Digi
* International Inc.  By accepting transfer of this copy, Recipient agrees
* to retain this software in confidence, to prevent disclosure to others,
* and to make no use of this software other than that for which it was
* delivered.  This is an unpublished copyrighted work of Digi International
* Inc.  Except as permitted by federal law, 17 USC 117, copying is strictly
* prohibited.
* 
* Restricted Rights Legend
*
* Use, duplication, or disclosure by the Government is subject to
* restrictions set forth in sub-paragraph (c)(1)(ii) of The Rights in
* Technical Data and Computer Software clause at DFARS 252.227-7031 or
* subparagraphs (c)(1) and (2) of the Commercial Computer Software -
* Restricted Rights at 48 CFR 52.227-19, as applicable.
*
* Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
*
*****************************************************************************/


// AffirmException.h: interface for the CAffirmException class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_AFFIRMEXCEPTION_H__E9C7D2D2_D30B_11D1_BAB4_00805F9E3135__INCLUDED_)
#define AFX_AFFIRMEXCEPTION_H__E9C7D2D2_D30B_11D1_BAB4_00805F9E3135__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

class FW_EXPORTED_CLASS CAffirmException  
{
public:
	CAffirmException();
	virtual ~CAffirmException();

};


inline void CheckAffirmCondition(BOOL const fCond, char const * const pszFile, int const nLine, BOOL const fThrow)
{
   if (!fCond)
   {
#if defined(_DEBUG)
      DWORD dwLastError = GetLastError();
      TCHAR * pszLastError = NULL;

      FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                    NULL, dwLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
                    (TCHAR *)&pszLastError, 0, NULL);

      TRACE("AFFIRMATION FAILURE! In %s(%d).  Last Error (%d): %s",
            pszFile, nLine, dwLastError, (pszLastError != NULL) ? pszLastError : TEXT("Unknown"));

      if (pszLastError != NULL) LocalFree(pszLastError);

      if (AfxAssertFailedLine(pszFile, nLine))
         AfxDebugBreak();
#endif

      if (fThrow) throw CAffirmException();
   }
}

#define AffirmThrow(f)  CheckAffirmCondition((f), __FILE__, __LINE__, TRUE)
#define Affirm(f)       CheckAffirmCondition((f), __FILE__, __LINE__, FALSE)

#endif // !defined(AFX_AFFIRMEXCEPTION_H__E9C7D2D2_D30B_11D1_BAB4_00805F9E3135__INCLUDED_)
