--- mstools/h/excpt.h 2018/08/09 18:20:01 1.1 +++ mstools/h/excpt.h 2018/08/09 18:23:06 1.1.1.4 @@ -1,25 +1,48 @@ /*** -*excpt.h - definitions/declarations for Structured Exception Handling +*excpt.h - defines exception values, types and routines * -* Copyright (c) 1985-1991, Microsoft Corporation. All rights reserved. +* Copyright (c) 1990-1993, Microsoft Corporation. All rights reserved. * *Purpose: -* This file defines the compiler-dependent definitions used to -* access the structured exception handling syntax. +* This file contains the definitions and prototypes for the compiler- +* dependent intrinsics, support functions and keywords which implement +* the structured exception handling extensions. * -*******************************************************************************/ +****/ -#ifndef _EXCPT_ -#define _EXCPT_ +#ifndef _INC_EXCPT + +#ifdef __cplusplus +extern "C" { +#endif -// -// C Structured Exception Handling. -// - -// -// Exception disposition return values. -// +/* + * Conditional macro definition for function calling type and variable type + * qualifiers. + */ +#if ( (_MSC_VER >= 800) && (_M_IX86 >= 300) ) + +/* + * Definitions for MS C8-32 (386/486) compiler + */ +#define _CRTAPI1 __cdecl +#define _CRTAPI2 __cdecl + +#else + +/* + * Other compilers (e.g., MIPS) + */ +#define _CRTAPI1 +#define _CRTAPI2 + +#endif + + +/* + * Exception disposition return values. + */ typedef enum _EXCEPTION_DISPOSITION { ExceptionContinueExecution, ExceptionContinueSearch, @@ -27,80 +50,105 @@ typedef enum _EXCEPTION_DISPOSITION { ExceptionCollidedUnwind } EXCEPTION_DISPOSITION; -#if defined(__cplusplus) -#define EXCEPTION_EXTERN extern "C" -#define EXCEPTION_NOPROTO ... -#else -#define EXCEPTION_EXTERN extern -#define EXCEPTION_NOPROTO -#endif - -#if defined(lint) || defined(_lint) -#define try /* nothing */ -#define except /* nothing */ -#define finally /* nothing */ -#define GetExceptionCode (unsigned long) 5 /* any bogus value */ -#define GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info -#define AbnormalTermination _abnormal_termination -#define abnormal_termination _abnormal_termination - -EXCEPTION_EXTERN unsigned long _exception_code( EXCEPTION_NOPROTO ); -EXCEPTION_EXTERN int _abnormal_termination( EXCEPTION_NOPROTO ); - -#elif defined(i386) - -#define try _try -#define except _except -#define finally _finally -#define GetExceptionCode (unsigned long)_exception_code -#define GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info -#define AbnormalTermination _abnormal_termination -#define abnormal_termination _abnormal_termination - -EXCEPTION_EXTERN unsigned long _exception_code( EXCEPTION_NOPROTO ); -EXCEPTION_EXTERN int _abnormal_termination( EXCEPTION_NOPROTO ); - -#elif defined(MIPS) - -#define try __builtin_try -#define except __builtin_except -#define finally __builtin_finally -#define leave __builtin_leave -#define GetExceptionCode() __exception_code -#define GetExceptionInformation() (struct _EXCEPTION_POINTERS *)__exception_info -#define abnormal_termination() __abnormal_termination -#define AbnormalTermination() __abnormal_termination - -EXCEPTION_EXTERN unsigned long GetExceptionCode(); -EXCEPTION_EXTERN int AbnormalTermination(); - -// -// Random noise to keep the Mips C Compiler happy. -// +/* + * 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 _CRTAPI2 _except_handler ( + struct _EXCEPTION_RECORD *ExceptionRecord, + void * EstablisherFrame, + struct _CONTEXT *ContextRecord, + void * DispatcherContext + ); + +#elif defined(_M_MRX000) || defined(_MIPS_) || defined(_ALPHA_) + +/* + * Declarations to keep MIPS and ALPHA compiler happy + */ typedef struct _EXCEPTION_POINTERS *Exception_info_ptr; - struct _EXCEPTION_RECORD; struct _CONTEXT; struct _DISPATCHER_CONTEXT; -EXCEPTION_DISPOSITION -__C_specific_handler ( - struct _EXCEPTION_RECORD *ExceptionRecord, - void *EstablisherFrame, - struct _CONTEXT *ContextRecord, - struct _DISPATCHER_CONTEXT *DispatcherContext - ); + +EXCEPTION_DISPOSITION __C_specific_handler ( + struct _EXCEPTION_RECORD *ExceptionRecord, + void *EstablisherFrame, + struct _CONTEXT *ContextRecord, + struct _DISPATCHER_CONTEXT *DispatcherContext + ); + +#endif + + +/* + * Keywords and intrinsics for SEH + */ + +#if ( _MSC_VER >= 800 ) +/* + * MS C8-32 (386/486) + */ +#define try __try +#define except __except +#define finally __finally +#define leave __leave +#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 _CRTAPI1 _exception_code(void); +void * _CRTAPI1 _exception_info(void); +int _CRTAPI1 _abnormal_termination(void); + +#elif defined(_M_MRX000) || defined(_MIPS_) || defined(_ALPHA_) +/* + * MIPS or ALPHA compiler + */ +#define try __builtin_try +#define except __builtin_except +#define finally __builtin_finally +#define leave __builtin_leave +#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 + +extern unsigned long __exception_code; +extern int __exception_info; +extern int __abnormal_termination; #endif -// -// Values for except() expresion -// - -#define EXCEPTION_EXECUTE_HANDLER 1 -#define EXCEPTION_CONTINUE_SEARCH 0 -#define EXCEPTION_CONTINUE_EXECUTION -1 +/* + * Legal values for expression in except(). + */ + +#define EXCEPTION_EXECUTE_HANDLER 1 +#define EXCEPTION_CONTINUE_SEARCH 0 +#define EXCEPTION_CONTINUE_EXECUTION -1 + + + +#ifdef __cplusplus +} #endif + +#define _INC_EXCPT +#endif /* _INC_EXCPT */