text: /***
  *excpt.h - defines exception values, types and routines
  *
  *       Copyright (c) 1990-2001, Microsoft Corporation. All rights reserved.
  *
  *Purpose:
  *       This file contains the definitions and prototypes for the compiler-
  *       dependent intrinsics, support functions and keywords which implement
  *       the structured exception handling extensions.
  *
  *       [Public]
  *
  *Revision History:
  *       11-01-91  GJF   Module created. Basically a synthesis of except.h
  *                       and excpt.h and intended as a replacement for
  *                       both.
  *       12-13-91  GJF   Fixed build for Win32.
  *       05-05-92  SRW   C8 wants C6 style names for now.
  *       07-20-92  SRW   Moved from winxcpt.h to excpt.h
  *       08-06-92  GJF   Function calling type and variable type macros. Also
  *                       revised compiler/target processor macro usage.
  *       11-09-92  GJF   Fixed preprocessing conditionals for MIPS. Also,
  *                       fixed some compiler warning (fix from/for RichardS).
  *       01-03-93  SRW   Fold in ALPHA changes
  *       01-04-93  SRW   Add leave keyword for x86
  *       01-09-93  SRW   Remove usage of MIPS and ALPHA to conform to ANSI
  *                       Use _MIPS_ and _ALPHA_ instead.
  *       01-21-93  GJF   Removed support for C6-386's _cdecl.
  *       02-18-93  GJF   Changed _try to __try, etc.
  *       03-31-93  CFW   Removed #define try, except, leave, finally for x86.
  *       04-06-93  SKS   Replace _CRTAPI1/2 with __cdecl, _CRTVAR1 with nothing
  *       07-29-93  GJF   Added declarations for _First_FPE_Indx and _Num_FPE.
  *       09-01-93  GJF   Merged Cuda and NT SDK versions.
  *       10-04-93  SRW   Fix ifdefs for MIPS and ALPHA to only check for _M_??????
  *                       defines
  *       10-12-93  GJF   Merged again.
  *       10-19-93  GJF   MS/MIPS compiler gets most of the same SEH defs and
  *                       decls as the MS compiler for the X86.
  *       10-29-93  GJF   Don't #define try, et al, when compiling C++ app!
  *       12-09-93  GJF   Alpha compiler now has MS front-end and implements
  *                       the same SEH names.
  *       11-03-94  GJF   Ensure 8 byte alignment.
  *       02-11-95  CFW   Add _CRTBLD to avoid users getting wrong headers.
  *       02-14-95  CFW   Clean up Mac merge.
  *       12-14-95  JWM   Add "#pragma once".
  *       02-21-97  GJF   Cleaned out obsolete support for _CRTAPI* and _NTSDK.
  *                       Also, detab-ed.
  *       09-30-97  JWM   Restored not-so-obsolete _CRTAPI1 support.
  *       10-07-97  RDL   Added IA64.
  *       11-12-97  RDL   __C_specific_handler() prototype change from SC.
  *       05-13-99  PML   Remove _CRTAPI1
  *       05-17-99  PML   Remove all Macintosh support.
  *       06-13-01  PML   Compile clean -Za -W4 -Tc (vs7#267063)
  *       07-15-01  PML   Remove all ALPHA, MIPS, and PPC code
  *
  ****/
  
  #if     _MSC_VER > 1000 /*IFSTRIP=IGN*/
  #pragma once
  #endif
  
  #ifndef _INC_EXCPT
  #define _INC_EXCPT
  
  #if     !defined(_WIN32)
  #error ERROR: Only Win32 target supported!
  #endif
  
  #ifndef _CRTBLD
  /* This version of the header files is NOT for user programs.
   * It is intended for use when building the C runtimes ONLY.
   * The version intended for public use will not have this message.
   */
  #error ERROR: Use of C runtime library internal header file.
  #endif  /* _CRTBLD */
  
  #ifdef  _MSC_VER
  /*
   * Currently, all MS C compilers for Win32 platforms default to 8 byte
   * alignment.
   */
  #pragma pack(push,8)
  #endif  /* _MSC_VER */
  
  #ifdef  __cplusplus
  extern "C" {
  #endif
  
  #ifndef _INTERNAL_IFSTRIP_
  #include <cruntime.h>
  #endif  /* _INTERNAL_IFSTRIP_ */
  
  
  /* Define _CRTIMP */
  
  #ifndef _CRTIMP
  #ifdef  CRTDLL
  #define _CRTIMP __declspec(dllexport)
  #else   /* ndef CRTDLL */
  #ifdef  _DLL
  #define _CRTIMP __declspec(dllimport)
  #else   /* ndef _DLL */
  #define _CRTIMP
  #endif  /* _DLL */
  #endif  /* CRTDLL */
  #endif  /* _CRTIMP */
  
  
  /* Define __cdecl for non-Microsoft compilers */
  
  #if     ( !defined(_MSC_VER) && !defined(__cdecl) )
  #define __cdecl
  #endif
  
  
  /*
   * Exception disposition return values.
   */
  typedef enum _EXCEPTION_DISPOSITION {
      ExceptionContinueExecution,
      ExceptionContinueSearch,
      ExceptionNestedException,
      ExceptionCollidedUnwind
  } EXCEPTION_DISPOSITION;
  
  
  /*
   * Prototype for SEH support function.
   */
  
  #ifdef  _M_IX86
  
  /*
   * Declarations to keep MS C 8 (386/486) compiler happy
   */
  struct _EXCEPTION_RECORD;
  struct _CONTEXT;
  
  EXCEPTION_DISPOSITION __cdecl _except_handler (
      struct _EXCEPTION_RECORD *ExceptionRecord,
      void * EstablisherFrame,
      struct _CONTEXT *ContextRecord,
      void * DispatcherContext
      );
  
  #elif   defined(_M_IA64)
  
  /*
   * Declarations to keep IA64 compiler happy
   */
  typedef struct _EXCEPTION_POINTERS *Exception_info_ptr;
  struct _EXCEPTION_RECORD;
  struct _CONTEXT;
  struct _DISPATCHER_CONTEXT;
  
  
  _CRTIMP EXCEPTION_DISPOSITION __C_specific_handler (
      struct _EXCEPTION_RECORD *ExceptionRecord,
      unsigned __int64 MemoryStackFp,
      unsigned __int64 BackingStoreFp,
      struct _CONTEXT *ContextRecord,
      struct _DISPATCHER_CONTEXT *DispatcherContext,
      unsigned __int64 GlobalPointer
      );
  
  #endif
  
  
  /*
   * Keywords and intrinsics for SEH
   */
  
  #ifdef  _MSC_VER
  
  #define GetExceptionCode            _exception_code
  #define exception_code              _exception_code
  #define GetExceptionInformation     (struct _EXCEPTION_POINTERS *)_exception_info
  #define exception_info              (struct _EXCEPTION_POINTERS *)_exception_info
  #define AbnormalTermination         _abnormal_termination
  #define abnormal_termination        _abnormal_termination
  
  unsigned long __cdecl _exception_code(void);
  void *        __cdecl _exception_info(void);
  int           __cdecl _abnormal_termination(void);
  
  #endif
  
  
  /*
   * Legal values for expression in except().
   */
  
  #define EXCEPTION_EXECUTE_HANDLER       1
  #define EXCEPTION_CONTINUE_SEARCH       0
  #define EXCEPTION_CONTINUE_EXECUTION    -1
  
  
  #ifndef _INTERNAL_IFSTRIP_
  /*
   * for convenience, define a type name for a pointer to signal-handler
   */
  
  typedef void (__cdecl * _PHNDLR)(int);
  
  /*
   * Exception-action table used by the C runtime to identify and dispose of
   * exceptions corresponding to C runtime errors or C signals.
   */
  struct _XCPT_ACTION {
  
      /*
       * exception code or number. defined by the host OS.
       */
      unsigned long XcptNum;
  
      /*
       * signal code or number. defined by the C runtime.
       */
      int SigNum;
  
      /*
       * exception action code. either a special code or the address of
       * a handler function. always determines how the exception filter
       * should dispose of the exception.
       */
      _PHNDLR XcptAction;
  };
  
  extern struct _XCPT_ACTION _XcptActTab[];
  
  /*
   * number of entries in the exception-action table
   */
  extern int _XcptActTabCount;
  
  /*
   * size of exception-action table (in bytes)
   */
  extern int _XcptActTabSize;
  
  /*
   * index of the first floating point exception entry
   */
  extern int _First_FPE_Indx;
  
  /*
   * number of FPE entries
   */
  extern int _Num_FPE;
  
  /*
   * return values and prototype for the exception filter function used in the
   * C startup
   */
  int __cdecl _XcptFilter(unsigned long, struct _EXCEPTION_POINTERS *);
  
  #endif  /* _INTERNAL_IFSTRIP_ */
  
  #ifdef  __cplusplus
  }
  #endif
  
  #ifdef  _MSC_VER
  #pragma pack(pop)
  #endif  /* _MSC_VER */
  
  #endif  /* _INC_EXCPT */
  