source: trunk/libc/include/os2thunk.h@ 3861

Last change on this file since 3861 was 3861, checked in by bird, 11 years ago

More watcom compilation changes & fixes.

  • Property cvs2svn:cvs-rev set to 1.5
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 2.9 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;
14extern _far16ptr _Optlink DosFlatToSel(void *ptr);
15extern void * _Optlink DosSelToFlat(_far16ptr ptr);
16#define _libc_32to16 DosFlatToSel
17#define _libc_16to32 DosSelToFlat
18
19typedef union _thunk_u
20{
21 void *pv;
22 unsigned short *pus;
23 unsigned long *pul;
24} _thunk_t;
25
26unsigned long _libc_thunk1 (void *args, void *fun);
27
28#define _THUNK_PASCAL_PROLOG(SIZE) \
29 __extension__ ({ char _tb[(SIZE)+4]; _thunk_t _tu; _tu.pv = _tb + sizeof (_tb); \
30 *(unsigned long *)_tb = (SIZE);
31#define _THUNK_PASCAL_CHAR(ARG) _THUNK_PASCAL_SHORT (ARG)
32#define _THUNK_PASCAL_SHORT(ARG) (*--_tu.pus = (ARG))
33#define _THUNK_PASCAL_LONG(ARG) (*--_tu.pul = (ARG))
34#define _THUNK_PASCAL_FLAT(ARG) _THUNK_PASCAL_LONG (_libc_32to16 (ARG))
35#define _THUNK_PASCAL_FAR16(ARG) _THUNK_PASCAL_LONG (ARG)
36#define _THUNK_PASCAL_FUNCTION(FUN) APIENTRY _16_##FUN
37#define _THUNK_PASCAL_CALL(FUN) _libc_thunk1 (_tb, (void *)(_16_##FUN)); })
38#define _THUNK_PASCAL_CALLI(FUN) _libc_thunk1 (_tb, (void *)(FUN)); })
39
40#define _THUNK_C_PROLOG(SIZE) \
41 __extension__ ({ char _tb[(SIZE)+4]; _thunk_t _tu; _tu.pv = _tb + sizeof (unsigned long); \
42 *(unsigned long *)_tb = (SIZE);
43#define _THUNK_C_CHAR(ARG) _THUNK_C_SHORT (ARG)
44#define _THUNK_C_SHORT(ARG) (*_tu.pus++ = (ARG))
45#define _THUNK_C_LONG(ARG) (*_tu.pul++ = (ARG))
46#define _THUNK_C_FLAT(ARG) _THUNK_C_LONG (_libc_32to16 (ARG))
47#define _THUNK_C_FAR16(ARG) _THUNK_C_LONG (ARG)
48#define _THUNK_C_FUNCTION(FUN) _16__##FUN
49#define _THUNK_C_CALL(FUN) _libc_thunk1 (_tb, (void *)(_16__##FUN)); })
50#define _THUNK_C_CALLI(FUN) _libc_thunk1 (_tb, (void *)(FUN)); })
51
52#define _THUNK_PROLOG(SIZE) _THUNK_PASCAL_PROLOG (SIZE)
53#define _THUNK_CHAR(ARG) _THUNK_PASCAL_CHAR (ARG)
54#define _THUNK_SHORT(ARG) _THUNK_PASCAL_SHORT (ARG)
55#define _THUNK_LONG(ARG) _THUNK_PASCAL_LONG (ARG)
56#define _THUNK_FLAT(ARG) _THUNK_PASCAL_FLAT (ARG)
57#define _THUNK_FAR16(ARG) _THUNK_PASCAL_FAR16 (ARG)
58#define _THUNK_FUNCTION(FUN) _THUNK_PASCAL_FUNCTION (FUN)
59#define _THUNK_CALL(FUN) _THUNK_PASCAL_CALL (FUN)
60#define _THUNK_CALLI(FUN) _THUNK_PASCAL_CALLI (FUN)
61
62#define MAKE16P(sel,off) ((_far16ptr)((sel) << 16 | (off)))
63#define MAKEP(sel,off) _libc_16to32 (MAKE16P (sel, off))
64#define SELECTOROF(farptr) ((SEL)((farptr) >> 16))
65#define OFFSETOF(farptr) ((USHORT)(farptr))
66
67/* Return true iff the block of SIZE bytes at PTR does not cross a
68 64Kbyte boundary. */
69
70#define _THUNK_PTR_SIZE_OK(ptr,size) \
71 (((ULONG)(ptr) & ~0xffff) == (((ULONG)(ptr) + (size) - 1) & ~0xffff))
72
73/* Return true iff the structure pointed to by PTR does not cross a
74 64KByte boundary. */
75
76#define _THUNK_PTR_STRUCT_OK(ptr) _THUNK_PTR_SIZE_OK ((ptr), sizeof (*(ptr)))
77
78__END_DECLS
79
80#endif /* not _OS2THUNK_H */
Note: See TracBrowser for help on using the repository browser.