home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / watcoapi.zip / incl32 / bsexcpt.h < prev    next >
C/C++ Source or Header  |  2002-09-30  |  4KB  |  130 lines

  1. /*
  2.     OS/2 exception handling structures and constants.
  3. */
  4.  
  5.  
  6. #ifndef __BSEXCPT_H__
  7. #define __BSEXCPT_H__
  8.  
  9. #define XCPT_CONTINUE_SEARCH    0
  10. #define XCPT_CONTINUE_EXECUTION (-1)
  11. #define XCPT_CONTINUE_STOP      0x00716668
  12.  
  13. #define EH_NONCONTINUABLE 0x01
  14. #define EH_UNWINDING      0x02
  15. #define EH_EXIT_UNWIND    0x04
  16. #define EH_STACK_INVALID  0x08
  17. #define EH_NESTED_CALL    0x10
  18. #define EH_SIGFTERM       0x20
  19.  
  20. #define UNWIND_ALL 0
  21.  
  22. #define XCPT_FATAL_EXCEPTION 0xC0000000
  23. #define XCPT_SEVERITY_CODE   0xC0000000
  24. #define XCPT_CUSTOMER_CODE   0x20000000
  25. #define XCPT_FACILITY_CODE   0x1FFF0000
  26. #define XCPT_EXCEPTION_CODE  0x0000FFFF
  27.  
  28. #define XCPT_UNKNOWN_ACCESS  0x00000000
  29. #define XCPT_READ_ACCESS     0x00000001
  30. #define XCPT_WRITE_ACCESS    0x00000002
  31. #define XCPT_EXECUTE_ACCESS  0x00000004
  32. #define XCPT_SPACE_ACCESS    0x00000008
  33. #define XCPT_LIMIT_ACCESS    0x00000010
  34. #define XCPT_DATA_UNKNOWN    0xFFFFFFFF
  35.  
  36. #define XCPT_SIGNAL_INTR     1
  37. #define XCPT_SIGNAL_KILLPROC 3
  38. #define XCPT_SIGNAL_BREAK    4
  39. #define XCPT_SIGNAL_APTERM   8
  40.  
  41. #define XCPT_GUARD_PAGE_VIOLATION     0x80000001
  42. #define XCPT_UNABLE_TO_GROW_STACK     0x80010001
  43. #define XCPT_ACCESS_VIOLATION         0xC0000005
  44. #define XCPT_IN_PAGE_ERROR            0xC0000006
  45. #define XCPT_ILLEGAL_INSTRUCTION      0xC000001C
  46. #define XCPT_INVALID_LOCK_SEQUENCE    0xC000001D
  47. #define XCPT_NONCONTINUABLE_EXCEPTION 0xC0000024
  48. #define XCPT_INVALID_DISPOSITION      0xC0000025
  49. #define XCPT_UNWIND                   0xC0000026
  50. #define XCPT_BAD_STACK                0xC0000027
  51. #define XCPT_INVALID_UNWIND_TARGET    0xC0000028
  52. #define XCPT_ARRAY_BOUNDS_EXCEEDED    0xC0000093
  53. #define XCPT_FLOAT_DENORMAL_OPERAND   0xC0000094
  54. #define XCPT_FLOAT_DIVIDE_BY_ZERO     0xC0000095
  55. #define XCPT_FLOAT_INEXACT_RESULT     0xC0000096
  56. #define XCPT_FLOAT_INVALID_OPERATION  0xC0000097
  57. #define XCPT_FLOAT_OVERFLOW           0xC0000098
  58. #define XCPT_FLOAT_STACK_CHECK        0xC0000099
  59. #define XCPT_FLOAT_UNDERFLOW          0xC000009A
  60. #define XCPT_INTEGER_DIVIDE_BY_ZERO   0xC000009B
  61. #define XCPT_INTEGER_OVERFLOW         0xC000009C
  62. #define XCPT_PRIVILEGED_INSTRUCTION   0xC000009D
  63. #define XCPT_DATATYPE_MISALIGNMENT    0xC000009E
  64. #define XCPT_BREAKPOINT               0xC000009F
  65. #define XCPT_SINGLE_STEP              0xC00000A0
  66. #define XCPT_PROCESS_TERMINATE        0xC0010001
  67. #define XCPT_ASYNC_PROCESS_TERMINATE  0xC0010002
  68. #define XCPT_SIGNAL                   0xC0010003
  69. #define XCPT_B1NPX_ERRATA_02          0xC0010004
  70.  
  71. #define CONTEXT_CONTROL        1
  72. #define CONTEXT_INTEGER        2
  73. #define CONTEXT_SEGMENTS       4
  74. #define CONTEXT_FLOATING_POINT 8
  75. #define CONTEXT_FULL           (CONTEXT_CONTROL | CONTEXT_INTEGER | \
  76.                                 CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT)
  77.  
  78. #define END_OF_CHAIN ((PEXCEPTIONREGISTRATIONRECORD) -1)
  79.  
  80. #define EXCEPTION_MAXIMUM_PARAMETERS 4
  81.  
  82. typedef _Packed struct _FPREG {
  83.     ULONG      losig;
  84.     ULONG      hisig;
  85.     USHORT     signexp;
  86. } FPREG, *PFPREG;
  87.  
  88. typedef struct _CONTEXTRECORD {
  89.     ULONG     ContextFlags;
  90.     ULONG     ctx_env[7];
  91.     FPREG     ctx_stack[8];
  92.     ULONG     ctx_SegGs;
  93.     ULONG     ctx_SegFs;
  94.     ULONG     ctx_SegEs;
  95.     ULONG     ctx_SegDs;
  96.     ULONG     ctx_RegEdi;
  97.     ULONG     ctx_RegEsi;
  98.     ULONG     ctx_RegEax;
  99.     ULONG     ctx_RegEbx;
  100.     ULONG     ctx_RegEcx;
  101.     ULONG     ctx_RegEdx;
  102.     ULONG     ctx_RegEbp;
  103.     ULONG     ctx_RegEip;
  104.     ULONG     ctx_SegCs;
  105.     ULONG     ctx_EFlags;
  106.     ULONG     ctx_RegEsp;
  107.     ULONG     ctx_SegSs;
  108. } CONTEXTRECORD, *PCONTEXTRECORD;
  109.  
  110. typedef struct _EXCEPTIONREPORTRECORD {
  111.     ULONG                         ExceptionNum;
  112.     ULONG                         fHandlerFlags;
  113.     struct _EXCEPTIONREPORTRECORD *NestedExceptionReportRecord;
  114.     PVOID                         ExceptionAddress;
  115.     ULONG                         cParameters;
  116.     ULONG                         ExceptionInfo[EXCEPTION_MAXIMUM_PARAMETERS];
  117. } EXCEPTIONREPORTRECORD, *PEXCEPTIONREPORTRECORD;
  118.  
  119. struct _EXCEPTIONREGISTRATIONRECORD;
  120.  
  121. typedef ULONG APIENTRY _ERR(PEXCEPTIONREPORTRECORD, struct _EXCEPTIONREGISTRATIONRECORD *,
  122.                             PCONTEXTRECORD, PVOID);
  123.  
  124. typedef struct _EXCEPTIONREGISTRATIONRECORD {
  125.     struct _EXCEPTIONREGISTRATIONRECORD *prev_structure;
  126.     _ERR                                *ExceptionHandler;
  127. } EXCEPTIONREGISTRATIONRECORD, *PEXCEPTIONREGISTRATIONRECORD;
  128.  
  129. #endif
  130.