#ifndef GENERIC_FI_H
#define GENERIC_FI_H

/* Compilers may use another function within the assert macro to exit the 
 * program. QAC thus does not see an "exit" function and assumes the 
 * function returns, which it does not.
 * The below pragma tells QAC the compiler supplied function does not
 * return.
 */

/* examples - GCC, ICC, BCC 3.1, BCC 5.5, CYGWIN gcc, Watcom 1.6 */
#pragma PRQA_NO_RETURN __assert_fail
#pragma PRQA_NO_RETURN __assert_perror_fail
#pragma PRQA_NO_RETURN __assert

/* SDCC, BCC 5.5, Digital Mars DM 8.4, LCC, Watcom 1.6, Fujitsu F2MM,FR */
#pragma PRQA_NO_RETURN _assert

/* HI-TECH PCCLite */
#pragma PRQA_NO_RETURN _fassert

/* DJGPP, D.J.Delorie gcc DOS port */
#pragma PRQA_NO_RETURN __dj_assert

/* Watcom 1.6, MSVS 08 */
#pragma PRQA_NO_RETURN _wassert
#pragma PRQA_NO_RETURN __wassert
#pragma PRQA_NO_RETURN _assert99
#pragma PRQA_NO_RETURN _wassert99
#pragma PRQA_NO_RETURN __assert99
#pragma PRQA_NO_RETURN __wassert99

/* Renesas M32R compiler */
#pragma PRQA_NO_RETURN _Assert

/* NEC 78K0 series 16bit compiler */
#pragma PRQA_NO_RETURN __assertfail
#pragma PRQA_NO_RETURN __assertfail_n
#pragma PRQA_NO_RETURN __assertfail_f


/* Depending on the code that the compiler maker uses within the assert macro,
 * QAC may issue warnings. It is also possible that when the NDEBUG macro is used
 * to suppress the assertion code, QAC may issue a "no side-effects" warning.
 * To eliminate these, we turn off all warnings for the assert macro.
 */
#pragma PRQA_MACRO_MESSAGES_OFF "assert"


/* Any other items that may be required in a "force-include" file should be placed below. */

/* register variables detected by personality generator that require
 * placement in force-include file as declarations.
 */
extern int _AH;
extern int _AL;
extern int _AX;
extern int _BH;
extern int _BL;
extern int _BP;
extern int _BX;
extern int _CH;
extern int _CL;
extern int _CS;
extern int _CX;
extern int _DH;
extern int _DI;
extern int _DL;
extern int _DS;
extern int _DSSI;
extern int _DX;
extern int _EAX;
extern int _EBP;
extern int _EBX;
extern int _ECX;
extern int _EDI;
extern int _EDX;
extern int _ES;
extern int _ESI;
extern int _ESP;
extern int _FP0;
extern int _FP1;
extern int _FP2;
extern int _FP3;
extern int _FP4;
extern int _FP5;
extern int _FP6;
extern int _FP7;
extern int _FS;
extern int _GS;
extern int _SI;
extern int _SP;
extern int _SS;

extern unsigned long __exception_code;
extern int           __exception_info;
extern int           __abnormal_termination;

/* intrinsic functions */

void  __int__(int __interruptnum);

/* not a prototype but a decl only, bcc passes many different data types to 
 * this intrinsic func
 */
int __uuidof();

#else
#error "Multiple include"
#endif  /* ifndef GENERIC_FI_H */
