|
|
/****************************************************************************
** ** File: STDASSRT.H ** Purpose: Standard Assert macros and common error handling defines. ** Notes: ** ****************************************************************************/
#ifndef STDASSRT_H
#define STDASSRT_H
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */ #endif
/* REVIEW: need to make this DEBUG only when RTChkArg is removed */ #define EnableAssertCode static char THIS_FILE[] = __FILE__;
/* Common Error Validation and Handling */
typedef enum { vrcFail = 0, /* if IDOK or IDIGNORE or IDNO or no message box */ vrcValid = 1, /* if no error condition */ vrcRetry = 2, /* if IDRETRY or IDYES */ vrcQuit = 3, /* if IDABORT or IDCANCEL */ vrcYes = vrcRetry, vrcNo = vrcFail, vrcIgnore= vrcFail, vrcCancel= vrcQuit, vrcAbort = vrcQuit, vrcOk = vrcFail } VRC;
#define ERROR_PARAM_MAX 4 /* parameters %1, %2, %3, %4 */
/* sets an error parameter from a temp string value, good until Validate() */ VOID PUBLIC SetErrorParam ( UINT iParam, SZC szValue );
/* sets an error parameter from a stable string value, can Validate() later */ VOID PUBLIC SetErrorParamConst ( UINT iParam, CSZC szValue );
/* sets an error message parameter from a string value, make a string copy */ VOID PUBLIC SetErrorParamCopy ( UINT iParam, SZC szValue );
/* sets an error message parameter from an integer value */ VOID PUBLIC SetErrorParamInt ( UINT iParam, INT iValue );
/* sets an error message parameter from an character value */ VOID PUBLIC SetErrorParamChar ( UINT iParam, CHAR chValue );
/* tests a condition, handles error and clears error parameters if false */ VRC PUBLIC Validate ( BOOL fCondition, UINT iStringId );
/* loads a string resource or debug string, calls ProcessMessage() */ VRC PUBLIC ProcessMessageId ( UINT iStringId );
/* formats message template, optionally displays message box, write to log */ VRC PUBLIC ProcessMessage ( SZC szMsg );
/* loads a debug or resource message and writes to the logfile if open */ VRC PUBLIC LogMessageId ( UINT iResId ); /* return status of log write */
/* loads a message, sets status for %V & %v, writes to the logfile if open */ VRC PUBLIC LogValidate ( BOOL fCondition, UINT iResId );/* return log status */
/* prototype for callback to obtain object or pass-specific information */ /* returns the number of characters copied to the buffer, or 0 if no info */ typedef INT (WINAPI *PFNErrorParam)( INT chParam, SZ rgchBuf );
/* entry for ACME only, to setup pass calback for error parameters */ VOID PUBLIC SetPassInfo(SZC szPassName, PFNErrorParam pfnCallback);
/* internal entry to process debug messages, called using DebugMessage(sz) */ VRC PUBLIC ProcessDebugMessage ( SZC szMsg );
/* Sets and gets global last-error message */ VOID PUBLIC SetLastSetupErrMsg ( SZ szMsg ); SZ PUBLIC SzGetLastSetupErrMsg ( VOID );
/* entry for ACME only, to setup pass calback for FED Font change - DBCS only*/ typedef BOOL (WINAPI *PFNFEFont)( HWND hdlg );
VOID PUBLIC SetFEFontProc(PFNFEFont pfnCallback);
/* Bit flag, combined with message IDS values to specify messages that
* should be stored into the LastSetupErrMsg buffer in ProcessMessageId. * Also macros to test, clear and set the bit flag. * * NOTE: 1 << 8 through 8 << 16 are reserved for ProcessMessageId * internal use. (See setupdll\_assert.h) */ #define midErrMsg (16 << 16)
#define FIsErrMsg(id) (id & midErrMsg)
#define IdClearErrMsg(id) (id & (~midErrMsg))
#define IdErrMsg(id) (id | midErrMsg)
#ifdef DEBUG
# define DebugErrorParam(p,v) SetErrorParam(p,v)
# define DebugErrorParamCopy(p,v) SetErrorParamCopy(p,v)
# define DebugErrorParamConst(p,v) SetErrorParamConst(p,v)
# define DebugErrorParamInt(p,v) SetErrorParamInt(p,v)
# define DebugErrorParamChar(p,v) SetErrorParamChar(p,v)
# define DebugMessageId(i) ProcessMessageId(i)
# define DebugMessage(s) ProcessDebugMessage(s)
# define DebugLogMessageId(i) LogMessageId(i)
#else
# define DebugErrorParam(p,v)
# define DebugErrorParamCopy(p,v)
# define DebugErrorParamConst(p,v)
# define DebugErrorParamInt(p,v)
# define DebugErrorParamChar(p,v)
# define DebugMessageId(i)
# define DebugMessage(s)
# define DebugLogMessageId(i)
#endif
#ifdef DEBUG
BOOL PUBLIC ResponseFile ( SZ szFile ); #endif
/* Must call as the first call (with hinstAcme) AND as the last
* call (with hinstNull). */ BOOL PUBLIC SetAcmeInst(HINSTANCE hInst, LPSTR szCmdLine);
/* RunTime Argument Checking */ /* REVIEW: this should be removed, all uses replaced by calls to Validate */ #define RTChkArg(f, retVal) \
{ if (!(f)) { FailRTChkArg(THIS_FILE, __LINE__); return (retVal); } }
VRC PUBLIC FailRTChkArg ( SZC szFile, UINT uiLine );
/* Assert macros */
VOID PUBLIC FailAssert (SZC szFile, UINT uiLine ); /* also PreCond, BadParam */
#ifdef DEBUG
#define FailAssertObj(f, l, i) FailAssert(f, (UINT)(l + ((i)<<16)))
#define FailChkArg(f, l, i) FailAssert(f, (UINT)(l + (1<<31) + ((i)<<16)))
#define FailPreCond(f, l) FailAssert(f, (UINT)(l + (1<<31)))
#define Assert(f) ((f) ? (VOID)0 : (VOID)FailAssert(THIS_FILE, __LINE__))
#define EvalAssert(f) ((f) ? (VOID)0 : (VOID)FailAssert(THIS_FILE, __LINE__))
#define AssertRet(f, retVal) \
{if (!(f)) {FailAssert( THIS_FILE, __LINE__); return (retVal);} } #define EvalAssertRet(f, retVal) \
{if (!(f)) {FailAssert( THIS_FILE, __LINE__); return (retVal);} }
#define PreCondition(f, retVal) \
{if (!(f)) {FailPreCond(THIS_FILE, __LINE__); return (retVal);} } #define ChkArg(f, iArg, retVal) \
{if (!(f)) {FailChkArg(THIS_FILE, __LINE__, iArg); return (retVal);} }
#else
#define Assert(f)
#define EvalAssert(f) ((VOID)(f))
#define AssertRet( f, retVal)
#define EvalAssertRet(f, retVal) ((VOID)(f))
#define PreCondition( f, retVal) RTChkArg(f, retVal)
#define ChkArg( f, iArg, retVal)
#endif
/* REVIEW: These are obsolete, remove when files using them are updated */
#ifdef DEBUG
#define DisplayAssertMsg() Assert(fFalse);
#define DebugLine(expr) expr;
#define DisplayErrorMsg(sz) ((VOID)FDisplaySystemMsg(sz))
#else
#define DisplayAssertMsg() /* in objodbc.cpp, copylist.c */
#define DebugLine(expr) /* once in copylist.c */
#define DisplayErrorMsg(sz)
#endif
extern BOOL WINAPI FDisplaySystemMsg ( SZ szErr );
#ifdef DEVELOPER
#define BadArgErr(nArg, szApi, szArgs) SetupApiErr(nArg+saeMax, szApi, szArgs)
#else
#define BadArgErr(nArg, szApi, szArgs)
#endif
/* REVIEW: end of obsolete */
#ifdef __cplusplus
} /* End of extern "C" { */ #endif
#endif /* STDASSRT_H */
|