source: branches/libc-0.6/src/emx/include/os2thunk.h

Last change on this file was 1517, checked in by bird, 21 years ago

Fixing warnings. -Znofork

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