This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/dm/include/SETJMP.H

103 lines
2 KiB
C++
Raw Normal View History

/* Copyright (C) 1986-2001 by Digital Mars. $Revision: 1.1.1.1 $ */
#if __SC__ || __RCC__
#pragma once
#endif
#ifndef __SETJMP_H
#define __SETJMP_H 1
#if __cplusplus
extern "C" {
#endif
/* Define _CRTAPI1 (for compatibility with the NT SDK) */
#ifndef _CRTAPI1
#define _CRTAPI1 __cdecl
#endif
/* Define _CRTAPI2 (for compatibility with the NT SDK) */
#ifndef _CRTAPI2
#define _CRTAPI2 __cdecl
#endif
/* Define CRTIMP */
#ifndef _CRTIMP
#if defined(_WIN32) && defined(_DLL)
#define _CRTIMP __declspec(dllimport)
#else
#define _CRTIMP
#endif
#endif
#if defined(_WIN32)
#define _JBLEN 16
#elif __INTSIZE == 4
#define _JBLEN 10
#else
#define _JBLEN 9
#endif
typedef int jmp_buf[_JBLEN];
#if __OS2__ && __INTSIZE == 4
#define __CLIB __stdcall
#else
#define __CLIB __cdecl
#endif
#if defined(_WINDOWS) && __INTSIZE == 2
int __far __pascal Catch(int __far *);
void __far __pascal Throw(int const __far *,int);
#define _setjmp(A) Catch(A)
#define longjmp(A,B) Throw(A,B)
#else
int __CLIB _setjmp(jmp_buf);
int __CLIB setjmp(jmp_buf); /* prototype provided for backward compatability */
void __CLIB longjmp(jmp_buf,int);
#if _WIN32
int __CLIB _inline_setjmp(jmp_buf);
#undef _setjmp
#define _setjmp(x) _inline_setjmp(x)
/*
* Define jump buffer layout for setjmp/longjmp under NT that unwinds stack
*/
typedef struct __JUMP_BUFFER {
unsigned long Ebp;
unsigned long Ebx;
unsigned long Edi;
unsigned long Esi;
unsigned long Esp;
unsigned long Eip;
unsigned long Except_Registration;
unsigned long TryLevel;
unsigned long Reserved;
unsigned long Unwind_Handler;
unsigned long ExceptData[6];
} _JUMP_BUFFER;
#endif
#if M_UNIX || M_XENIX
#if !__STDC__ || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
#define _SIGJBLEN 128
typedef int sigjmp_buf[_SIGJBLEN];
extern int __CLIB sigsetjmp(sigjmp_buf, int);
extern void __CLIB siglongjmp(sigjmp_buf, int);
#endif
#endif /* M_UNIX || M_XENIX */
#endif /* _WINDOWS */
#define setjmp _setjmp
#if __cplusplus
}
#endif
#endif