Mercurial > pub > dyncall > dyncall
comparison dyncall/dyncall.h @ 0:3e629dc19168
initial from svn dyncall-1745
author | Daniel Adler |
---|---|
date | Thu, 19 Mar 2015 22:24:28 +0100 |
parents | |
children | 7ca57dbefed4 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:3e629dc19168 |
---|---|
1 /* | |
2 | |
3 Package: dyncall | |
4 Library: dyncall | |
5 File: dyncall/dyncall.h | |
6 Description: public header for library dyncall | |
7 License: | |
8 | |
9 Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, | |
10 Tassilo Philipp <tphilipp@potion-studios.com> | |
11 | |
12 Permission to use, copy, modify, and distribute this software for any | |
13 purpose with or without fee is hereby granted, provided that the above | |
14 copyright notice and this permission notice appear in all copies. | |
15 | |
16 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
17 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
18 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
19 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
23 | |
24 */ | |
25 | |
26 | |
27 /* | |
28 | |
29 dyncall C API | |
30 | |
31 REVISION | |
32 2015/01/16 added SYS_PPC32 system call | |
33 2007/12/11 initial | |
34 | |
35 */ | |
36 | |
37 #ifndef DYNCALL_H | |
38 #define DYNCALL_H | |
39 | |
40 #include "dyncall_types.h" | |
41 | |
42 #ifdef __cplusplus | |
43 extern "C" { | |
44 #endif | |
45 | |
46 typedef struct DCCallVM_ DCCallVM; | |
47 typedef struct DCstruct_ DCstruct; | |
48 | |
49 /* Supported Calling Convention Modes */ | |
50 | |
51 #define DC_CALL_C_DEFAULT 0 | |
52 #define DC_CALL_C_ELLIPSIS 100 | |
53 #define DC_CALL_C_ELLIPSIS_VARARGS 101 | |
54 #define DC_CALL_C_X86_CDECL 1 | |
55 #define DC_CALL_C_X86_WIN32_STD 2 | |
56 #define DC_CALL_C_X86_WIN32_FAST_MS 3 | |
57 #define DC_CALL_C_X86_WIN32_FAST_GNU 4 | |
58 #define DC_CALL_C_X86_WIN32_THIS_MS 5 | |
59 #define DC_CALL_C_X86_WIN32_THIS_GNU 6 | |
60 #define DC_CALL_C_X64_WIN64 7 | |
61 #define DC_CALL_C_X64_SYSV 8 | |
62 #define DC_CALL_C_PPC32_DARWIN 9 | |
63 #define DC_CALL_C_PPC32_OSX DC_CALL_C_PPC32_DARWIN /* alias */ | |
64 #define DC_CALL_C_ARM_ARM_EABI 10 | |
65 #define DC_CALL_C_ARM_THUMB_EABI 11 | |
66 #define DC_CALL_C_ARM_ARMHF 30 | |
67 #define DC_CALL_C_MIPS32_EABI 12 | |
68 #define DC_CALL_C_MIPS32_PSPSDK DC_CALL_C_MIPS32_EABI /* alias - deprecated. */ | |
69 #define DC_CALL_C_PPC32_SYSV 13 | |
70 #define DC_CALL_C_PPC32_LINUX DC_CALL_C_PPC32_SYSV /* alias */ | |
71 #define DC_CALL_C_ARM_ARM 14 | |
72 #define DC_CALL_C_ARM_THUMB 15 | |
73 #define DC_CALL_C_MIPS32_O32 16 | |
74 #define DC_CALL_C_MIPS64_N32 17 | |
75 #define DC_CALL_C_MIPS64_N64 18 | |
76 #define DC_CALL_C_X86_PLAN9 19 | |
77 #define DC_CALL_C_SPARC32 20 | |
78 #define DC_CALL_C_SPARC64 21 | |
79 #define DC_CALL_C_ARM64 22 | |
80 #define DC_CALL_C_PPC64 23 | |
81 #define DC_CALL_C_PPC64_LINUX DC_CALL_C_PPC64 /* alias */ | |
82 #define DC_CALL_SYS_DEFAULT 200 | |
83 #define DC_CALL_SYS_X86_INT80H_LINUX 201 | |
84 #define DC_CALL_SYS_X86_INT80H_BSD 202 | |
85 #define DC_CALL_SYS_PPC32 210 | |
86 | |
87 /* Error codes. */ | |
88 | |
89 #define DC_ERROR_NONE 0 | |
90 #define DC_ERROR_UNSUPPORTED_MODE -1 | |
91 | |
92 DC_API DCCallVM* dcNewCallVM (DCsize size); | |
93 DC_API void dcFree (DCCallVM* vm); | |
94 DC_API void dcReset (DCCallVM* vm); | |
95 | |
96 DC_API void dcMode (DCCallVM* vm, DCint mode); | |
97 | |
98 DC_API void dcArgBool (DCCallVM* vm, DCbool value); | |
99 DC_API void dcArgChar (DCCallVM* vm, DCchar value); | |
100 DC_API void dcArgShort (DCCallVM* vm, DCshort value); | |
101 DC_API void dcArgInt (DCCallVM* vm, DCint value); | |
102 DC_API void dcArgLong (DCCallVM* vm, DClong value); | |
103 DC_API void dcArgLongLong (DCCallVM* vm, DClonglong value); | |
104 DC_API void dcArgFloat (DCCallVM* vm, DCfloat value); | |
105 DC_API void dcArgDouble (DCCallVM* vm, DCdouble value); | |
106 DC_API void dcArgPointer (DCCallVM* vm, DCpointer value); | |
107 DC_API void dcArgStruct (DCCallVM* vm, DCstruct* s, DCpointer value); | |
108 | |
109 DC_API void dcCallVoid (DCCallVM* vm, DCpointer funcptr); | |
110 DC_API DCbool dcCallBool (DCCallVM* vm, DCpointer funcptr); | |
111 DC_API DCchar dcCallChar (DCCallVM* vm, DCpointer funcptr); | |
112 DC_API DCshort dcCallShort (DCCallVM* vm, DCpointer funcptr); | |
113 DC_API DCint dcCallInt (DCCallVM* vm, DCpointer funcptr); | |
114 DC_API DClong dcCallLong (DCCallVM* vm, DCpointer funcptr); | |
115 DC_API DClonglong dcCallLongLong (DCCallVM* vm, DCpointer funcptr); | |
116 DC_API DCfloat dcCallFloat (DCCallVM* vm, DCpointer funcptr); | |
117 DC_API DCdouble dcCallDouble (DCCallVM* vm, DCpointer funcptr); | |
118 DC_API DCpointer dcCallPointer (DCCallVM* vm, DCpointer funcptr); | |
119 DC_API void dcCallStruct (DCCallVM* vm, DCpointer funcptr, DCstruct* s, DCpointer returnValue); | |
120 | |
121 DC_API DCint dcGetError (DCCallVM* vm); | |
122 | |
123 #define DEFAULT_ALIGNMENT 0 | |
124 DC_API DCstruct* dcNewStruct (DCsize fieldCount, DCint alignment); | |
125 DC_API void dcStructField (DCstruct* s, DCint type, DCint alignment, DCsize arrayLength); | |
126 DC_API void dcSubStruct (DCstruct* s, DCsize fieldCount, DCint alignment, DCsize arrayLength); | |
127 /* Each dcNewStruct or dcSubStruct call must be paired with a dcCloseStruct. */ | |
128 DC_API void dcCloseStruct (DCstruct* s); | |
129 DC_API DCsize dcStructSize (DCstruct* s); | |
130 DC_API DCsize dcStructAlignment(DCstruct* s); | |
131 DC_API void dcFreeStruct (DCstruct* s); | |
132 | |
133 DC_API DCstruct* dcDefineStruct (const char* signature); | |
134 | |
135 | |
136 #ifdef __cplusplus | |
137 } | |
138 #endif | |
139 | |
140 #endif /* DYNCALL_H */ | |
141 |