;***
;except.inc - definitions for exception handling
;
;	Copyright (c) 1990-1991, Microsoft Corporation. All rights reserved.
;
;Purpose:
;	Structure and constant definitions used by exception handling code.
;
;Revision History:
;	07-19-90  GJF	Module created.
;	08-28-90  GJF	Added some definitions of exceptions.
;	10-19-90  GJF	Revised some constants to agree with the definitions in
;			\\os2rel\public!2.0\h\bsexcpt.h (dated 10-1-90).
;	07-30-91  GJF	Different values of _XCPT_CONTINUE_[SEARCH|EXECUTION]
;			for Cruiser and Win32 [_WIN32_].
;
;*******************************************************************************

; structure used by SEH support function and intrinsics. the information
; passed by the OS exception dispatcher is repackaged in this form by the
; runtime (_except_handler()).

__EXCEPTION_INFO_PTRS struc
	preport 		dd	?
	pcontext		dd	?
__EXCEPTION_INFO_PTRS ends


; exception registration record structure.

__EXCEPTIONREGISTRATIONRECORD struc
	prev_structure		dd	?
	ExceptionHandler	dd	?
	ExceptionFilter 	dd	?
	FilterFrame		dd	?
	PExceptionInfoPtrs	dd	?
__EXCEPTIONREGISTRATIONRECORD ends

; size of exception registration record in double words

DWORDS_IN_XREGREC	equ	5


; exception report record

__EXCEPTIONREPORTRECORD struc
	ExceptionNum		dd	?
	fHandlerFlags		dd	?
	ExceptionReportRecord	dd	?
	ExceptionAddress	dd	?
	cParameters		dd	?
	ExceptionInfo		dd	4 dup (?)
__EXCEPTIONREPORTRECORD ends


; setjmp/longjmp buffer (i.e., structure underlying jmp_buf array)

_JMP_BUF	struc
	ebpsave 		dd	?
	ebxsave 		dd	?
	edisave 		dd	?
	esisave 		dd	?
	espsave 		dd	?
	retsave 		dd	?
	xcptsave		dd	?
_JMP_BUF	ends


; exceptions corresponding to C runtime errors (these are explicitly
; referenced in the startup code)

_XCPT_UNABLE_TO_GROW_STACK	equ		080010001h
_XCPT_INTEGER_DIVIDE_BY_ZERO	equ		0C000009Bh
_XCPT_NONCONTINUABLE_EXCEPTION	equ		0C0000024h
_XCPT_INVALID_DISPOSITION	equ		0C0000025h
_XCPT_SIGABRT			equ		020000001h


; unwind settings in fHandlerFlags

_EH_UNWINDING	equ	2
_EH_EXIT_UNWIND equ	4
UNWIND		equ	_EH_UNWINDING OR _EH_EXIT_UNWIND


; return values (to the exception dispatcher)

IFDEF	_CRUISER_

_XCPT_CONTINUE_SEARCH		equ	000000000h
_XCPT_CONTINUE_EXECUTION	equ	0FFFFFFFFh

ELSE
IFDEF	_WIN32_

_XCPT_CONTINUE_SEARCH		equ	000000001h
_XCPT_CONTINUE_EXECUTION	equ	000000000h

ENDIF
ENDIF
