source: trunk/src/emx/include/os2thunk.h@ 1508

Last change on this file since 1508 was 1506, checked in by bird, 21 years ago

@unixroot. header reviews. ++

  • Property cvs2svn:cvs-rev set to 1.4
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 2.7 KB
Line 
1/* os2thunk.h,v 1.4 2004/09/14 22:27:35 bird Exp */
2/** @file
3 * EMX
4 */
5
6#ifndef _OS2THUNK_H
7#define _OS2THUNK_H
8
9#include <sys/cdefs.h>
10
11__BEGIN_DECLS
12
13typedef unsigned long _far16ptr;
14
15_far16ptr _libc_32to16 (void *ptr);
16void *_libc_16to32 (_far16ptr ptr);
17
18unsigned long _libc_thunk1 (void *args, void *fun);
19
20#define _THUNK_PASCAL_PROLOG(SIZE) \
21 ({ char _tb[(SIZE)+4]; void *_tp = _tb + sizeof (_tb); \
22 *(unsigned long *)_tb = (SIZE);
23#define _THUNK_PASCAL_CHAR(ARG) _THUNK_PASCAL_SHORT (ARG)
24#define _THUNK_PASCAL_SHORT(ARG) (*--((unsigned short *)_tp) = (ARG))
25#define _THUNK_PASCAL_LONG(ARG) (*--((unsigned long *)_tp) = (ARG))
26#define _THUNK_PASCAL_FLAT(ARG) _THUNK_PASCAL_LONG (_libc_32to16 (ARG))
27#define _THUNK_PASCAL_FAR16(ARG) _THUNK_PASCAL_LONG (ARG)
28#define _THUNK_PASCAL_FUNCTION(FUN) APIENTRY _16_##FUN
29#define _THUNK_PASCAL_CALL(FUN) _libc_thunk1 (_tb, (void *)(_16_##FUN)); })
30#define _THUNK_PASCAL_CALLI(FUN) _libc_thunk1 (_tb, (void *)(FUN)); })
31
32#define _THUNK_C_PROLOG(SIZE) \
33 ({ char _tb[(SIZE)+4]; void *_tp = _tb + sizeof (unsigned long); \
34 *(unsigned long *)_tb = (SIZE);
35#define _THUNK_C_CHAR(ARG) _THUNK_C_SHORT (ARG)
36#define _THUNK_C_SHORT(ARG) (*((unsigned short *)_tp)++ = (ARG))
37#define _THUNK_C_LONG(ARG) (*((unsigned long *)_tp)++ = (ARG))
38#define _THUNK_C_FLAT(ARG) _THUNK_C_LONG (_libc_32to16 (ARG))
39#define _THUNK_C_FAR16(ARG) _THUNK_C_LONG (ARG)
40#define _THUNK_C_FUNCTION(FUN) _16__##FUN
41#define _THUNK_C_CALL(FUN) _libc_thunk1 (_tb, (void *)(_16__##FUN)); })
42#define _THUNK_C_CALLI(FUN) _libc_thunk1 (_tb, (void *)(FUN)); })
43
44#define _THUNK_PROLOG(SIZE) _THUNK_PASCAL_PROLOG (SIZE)
45#define _THUNK_CHAR(ARG) _THUNK_PASCAL_CHAR (ARG)
46#define _THUNK_SHORT(ARG) _THUNK_PASCAL_SHORT (ARG)
47#define _THUNK_LONG(ARG) _THUNK_PASCAL_LONG (ARG)
48#define _THUNK_FLAT(ARG) _THUNK_PASCAL_FLAT (ARG)
49#define _THUNK_FAR16(ARG) _THUNK_PASCAL_FAR16 (ARG)
50#define _THUNK_FUNCTION(FUN) _THUNK_PASCAL_FUNCTION (FUN)
51#define _THUNK_CALL(FUN) _THUNK_PASCAL_CALL (FUN)
52#define _THUNK_CALLI(FUN) _THUNK_PASCAL_CALLI (FUN)
53
54#define MAKE16P(sel,off) ((_far16ptr)((sel) << 16 | (off)))
55#define MAKEP(sel,off) _libc_16to32 (MAKE16P (sel, off))
56#define SELECTOROF(farptr) ((SEL)((farptr) >> 16))
57#define OFFSETOF(farptr) ((USHORT)(farptr))
58
59/* Return true iff the block of SIZE bytes at PTR does not cross a
60 64Kbyte boundary. */
61
62#define _THUNK_PTR_SIZE_OK(ptr,size) \
63 (((ULONG)(ptr) & ~0xffff) == (((ULONG)(ptr) + (size) - 1) & ~0xffff))
64
65/* Return true iff the structure pointed to by PTR does not cross a
66 64KByte boundary. */
67
68#define _THUNK_PTR_STRUCT_OK(ptr) _THUNK_PTR_SIZE_OK ((ptr), sizeof (*(ptr)))
69
70__END_DECLS
71
72#endif /* not _OS2THUNK_H */
Note: See TracBrowser for help on using the repository browser.