home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 40 / IOPROG_40.ISO / SOFT / NETFrameworkSDK.exe / comsdk.cab / setjmp.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-03-07  |  7.8 KB  |  351 lines

  1. /***
  2. *setjmp.h - definitions/declarations for setjmp/longjmp routines
  3. *
  4. *       Copyright (c) 1985-2000, Microsoft Corporation. All rights reserved.
  5. *
  6. *Purpose:
  7. *       This file defines the machine-dependent buffer used by
  8. *       setjmp/longjmp to save and restore the program state, and
  9. *       declarations for those routines.
  10. *       [ANSI/System V]
  11. *
  12. *       [Public]
  13. *
  14. ****/
  15.  
  16. #if     _MSC_VER > 1000
  17. #pragma once
  18. #endif
  19.  
  20. #ifndef _INC_SETJMP
  21. #define _INC_SETJMP
  22.  
  23. #if     !defined(_WIN32) && !defined(_MAC)
  24. #error ERROR: Only Mac or Win32 targets supported!
  25. #endif
  26.  
  27.  
  28. #ifdef  _MSC_VER
  29. /*
  30.  * Currently, all MS C compilers for Win32 platforms default to 8 byte
  31.  * alignment.
  32.  */
  33. #pragma pack(push,8)
  34. #endif  /* _MSC_VER */
  35.  
  36. #ifdef  __cplusplus
  37. extern "C" {
  38. #endif
  39.  
  40.  
  41.  
  42. /* Define _CRTIMP */
  43.  
  44. #ifndef _CRTIMP
  45. #ifdef  _DLL
  46. #define _CRTIMP __declspec(dllimport)
  47. #else   /* ndef _DLL */
  48. #define _CRTIMP
  49. #endif  /* _DLL */
  50. #endif  /* _CRTIMP */
  51.  
  52. /* Define __cdecl for non-Microsoft compilers */
  53.  
  54. #if     ( !defined(_MSC_VER) && !defined(__cdecl) )
  55. #define __cdecl
  56. #endif
  57.  
  58. /* Define _CRTAPI1 (for compatibility with the NT SDK) */
  59.  
  60. #ifndef _CRTAPI1
  61. #if    _MSC_VER >= 800 && _M_IX86 >= 300
  62. #define _CRTAPI1 __cdecl
  63. #else
  64. #define _CRTAPI1
  65. #endif
  66. #endif
  67.  
  68. /*
  69.  * Definitions specific to particular setjmp implementations.
  70.  */
  71.  
  72. #if     defined(_M_CEE)
  73.  
  74. //#error setjmp/longjmp not currently supported when targetting _M_CEE
  75.  
  76. #elif   defined(_M_IX86)
  77.  
  78. /*
  79.  * MS compiler for x86
  80.  */
  81.  
  82. #ifndef _INC_SETJMPEX
  83. #define setjmp  _setjmp
  84. #endif
  85.  
  86. #define _JBLEN  16
  87. #define _JBTYPE int
  88.  
  89. /*
  90.  * Define jump buffer layout for x86 setjmp/longjmp.
  91.  */
  92. typedef struct __JUMP_BUFFER {
  93.     unsigned long Ebp;
  94.     unsigned long Ebx;
  95.     unsigned long Edi;
  96.     unsigned long Esi;
  97.     unsigned long Esp;
  98.     unsigned long Eip;
  99.     unsigned long Registration;
  100.     unsigned long TryLevel;
  101.     unsigned long Cookie;
  102.     unsigned long UnwindFunc;
  103.     unsigned long UnwindData[6];
  104. } _JUMP_BUFFER;
  105.  
  106.  
  107.  
  108. #elif   defined(_M_MRX000)
  109.  
  110. #ifndef _INC_SETJMPEX
  111. #if     _MSC_VER >= 1100
  112. #define _setjmp  _setjmpVfp
  113. #endif
  114. #define setjmp  _setjmp
  115. #endif
  116.  
  117. /*
  118.  * All MIPS implementations need _JBLEN of 16
  119.  */
  120.  
  121. #define _JBLEN  16
  122. #define _JBTYPE double
  123.  
  124. /*
  125.  * Define jump buffer layout for MIPS setjmp/longjmp.
  126.  */
  127. typedef struct __JUMP_BUFFER {
  128.     unsigned long FltF20;
  129.     unsigned long FltF21;
  130.     unsigned long FltF22;
  131.     unsigned long FltF23;
  132.     unsigned long FltF24;
  133.     unsigned long FltF25;
  134.     unsigned long FltF26;
  135.     unsigned long FltF27;
  136.     unsigned long FltF28;
  137.     unsigned long FltF29;
  138.     unsigned long FltF30;
  139.     unsigned long FltF31;
  140.     unsigned long IntS0;
  141.     unsigned long IntS1;
  142.     unsigned long IntS2;
  143.     unsigned long IntS3;
  144.     unsigned long IntS4;
  145.     unsigned long IntS5;
  146.     unsigned long IntS6;
  147.     unsigned long IntS7;
  148.     unsigned long IntS8;
  149.     unsigned long IntSp;
  150.     unsigned long Type;
  151.     unsigned long Fir;
  152. } _JUMP_BUFFER;
  153.  
  154.  
  155. #elif   defined(_M_ALPHA)
  156.  
  157. /*
  158.  * The Alpha C8/GEM C compiler uses an intrinsic _setjmp.
  159.  * The Alpha acc compiler implements setjmp as a function.
  160.  */
  161. #ifdef  _MSC_VER
  162. #ifndef _INC_SETJMPEX
  163. #define setjmp  _setjmp
  164. #endif
  165. #endif
  166.  
  167. /*
  168.  * Alpha implementations use a _JBLEN of 24 quadwords.
  169.  * A double is used only to obtain quadword size and alignment.
  170.  */
  171. #define _JBLEN  24
  172. #define _JBTYPE double
  173.  
  174. /*
  175.  * Define jump buffer layout for Alpha setjmp/longjmp.
  176.  * A double is used only to obtain quadword size and alignment.
  177.  */
  178. typedef struct __JUMP_BUFFER {
  179.     unsigned long Fp;
  180.     unsigned long Pc;
  181.     unsigned long Seb;
  182.     unsigned long Type;
  183.     double FltF2;
  184.     double FltF3;
  185.     double FltF4;
  186.     double FltF5;
  187.     double FltF6;
  188.     double FltF7;
  189.     double FltF8;
  190.     double FltF9;
  191.     double IntS0;
  192.     double IntS1;
  193.     double IntS2;
  194.     double IntS3;
  195.     double IntS4;
  196.     double IntS5;
  197.     double IntS6;
  198.     double IntSp;
  199.     double Fir;
  200.     double Fill[5];
  201. } _JUMP_BUFFER;
  202.  
  203. #elif   defined(_M_PPC)
  204. /*
  205.  * The Microsoft VC++ V4.0 compiler uses an intrinsic _setjmp.
  206.  * The Motorola C8.5 compiler implements setjmp as a function.
  207.  */
  208.  
  209. #if     _MSC_VER > 850
  210. #ifndef _INC_SETJMPEX
  211. #undef _setjmp
  212. #define setjmp  _setjmp
  213. #endif
  214. #endif
  215.  
  216. /*
  217.  * Min length is 240 bytes; round to 256 bytes.
  218.  * Since this is allocated as an array of "double", the
  219.  * number of entries required is 32.
  220.  *
  221.  * All PPC implementations need _JBLEN of 32
  222.  */
  223.  
  224. #define _JBLEN  32
  225. #define _JBTYPE double
  226.  
  227. /*
  228.  * Define jump buffer layout for PowerPC setjmp/longjmp.
  229.  */
  230.  
  231. typedef struct __JUMP_BUFFER {
  232.     double Fpr14;
  233.     double Fpr15;
  234.     double Fpr16;
  235.     double Fpr17;
  236.     double Fpr18;
  237.     double Fpr19;
  238.     double Fpr20;
  239.     double Fpr21;
  240.     double Fpr22;
  241.     double Fpr23;
  242.     double Fpr24;
  243.     double Fpr25;
  244.     double Fpr26;
  245.     double Fpr27;
  246.     double Fpr28;
  247.     double Fpr29;
  248.     double Fpr30;
  249.     double Fpr31;
  250.     unsigned long Gpr1;
  251.     unsigned long Gpr2;
  252.     unsigned long Gpr13;
  253.     unsigned long Gpr14;
  254.     unsigned long Gpr15;
  255.     unsigned long Gpr16;
  256.     unsigned long Gpr17;
  257.     unsigned long Gpr18;
  258.     unsigned long Gpr19;
  259.     unsigned long Gpr20;
  260.     unsigned long Gpr21;
  261.     unsigned long Gpr22;
  262.     unsigned long Gpr23;
  263.     unsigned long Gpr24;
  264.     unsigned long Gpr25;
  265.     unsigned long Gpr26;
  266.     unsigned long Gpr27;
  267.     unsigned long Gpr28;
  268.     unsigned long Gpr29;
  269.     unsigned long Gpr30;
  270.     unsigned long Gpr31;
  271.     unsigned long Cr;
  272.     unsigned long Iar;
  273.     unsigned long Type;
  274. } _JUMP_BUFFER;
  275.  
  276. #elif   defined(_M_M68K)
  277.  
  278. #ifndef _INC_SETJMPEX
  279. #define setjmp  _setjmp
  280. #endif
  281.  
  282. /* internal only for version checking for compatibility */
  283. #define _SETJMP_VER 1.0
  284.  
  285. /* internal only, jump buffer layout definition */
  286. typedef struct __JUMP_BUFFER {
  287.         unsigned long d1;       /* 0x00, saved */
  288.         unsigned long d2;       /* 0x04, saved */
  289.         unsigned long d3;       /* 0x08, saved */
  290.         unsigned long d4;       /* 0x0c, saved */
  291.         unsigned long d5;       /* 0x10, saved */
  292.         unsigned long d6;       /* 0x14, saved */
  293.         unsigned long d7;       /* 0x18, saved */
  294.         unsigned long a1;       /* 0x1c, non-swappable version: return address,
  295.                                          swappable version: swapper lib routine pointer for building return address */
  296.         unsigned long a2;       /* 0x20, saved */
  297.         unsigned long a3;       /* 0x24, saved */
  298.         unsigned long a4;       /* 0x28, saved */
  299.         unsigned long a6;       /* 0x2c, saved */
  300.         unsigned long a7;       /* 0x30, saved */
  301.         unsigned long SwapChain; /* 0x34, without swapper: unused. with swapper: link swappable frames */
  302.         unsigned short reserved; /* 0x38, unused */
  303.         unsigned short SN;      /* 0x3a, swappable version: segment number */
  304.         unsigned long BPC;      /* 0x3c, swappable version: offset within segment */
  305. } _JUMP_BUFFER;
  306.  
  307. #define _JBTYPE int
  308. #define _JBLEN  (sizeof(_JUMP_BUFFER)/sizeof(_JBTYPE))
  309.  
  310. #elif   defined(_M_MPPC)
  311.  
  312. #ifndef _INC_SETJMPEX
  313. #define setjmp  _setjmp
  314. #endif
  315.  
  316. #define _JBTYPE int
  317.  
  318. /* define the buffer type for building the state information */
  319.  
  320. #define _JBLEN 64   /* return address, R1, R2, R13-R31, FPR14-FPR31, CR 2-5 */
  321. #endif
  322.  
  323.  
  324. /* Define the buffer type for holding the state information */
  325.  
  326. #ifndef _JMP_BUF_DEFINED
  327. typedef _JBTYPE jmp_buf[_JBLEN];
  328. #define _JMP_BUF_DEFINED
  329. #endif
  330.  
  331.  
  332. /* Function prototypes */
  333.  
  334. int __cdecl setjmp(jmp_buf);
  335.  
  336. #if     _MSC_VER >= 1200
  337. _CRTIMP __declspec(noreturn) void __cdecl longjmp(jmp_buf, int);
  338. #else
  339. _CRTIMP void __cdecl longjmp(jmp_buf, int);
  340. #endif
  341.  
  342. #ifdef  __cplusplus
  343. }
  344. #endif
  345.  
  346. #ifdef  _MSC_VER
  347. #pragma pack(pop)
  348. #endif  /* _MSC_VER */
  349.  
  350. #endif  /* _INC_SETJMP */
  351.