annotate dyncall/dyncall.3 @ 357:d982a00c2177

- PPC64 asm syntax fix, specifying explicitly comparison mode for cmpi (newer toolchains complain, older ones took optional field of instruction which happened to be same value)
author Tassilo Philipp
date Tue, 25 Feb 2020 18:16:13 +0100
parents 7cb8a0aaf638
children 32736025371f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 .\" Copyright (c) 2007-2013 Daniel Adler <dadler AT uni-goettingen DOT de>,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2 .\" Tassilo Philipp <tphilipp AT potion-studios DOT com>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 .\"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 .\" Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 .\" purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 .\" copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 .\"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 .\"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 .Dd $Mdocdate$
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 .Dt dyncall 3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 .Sh NAME
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 .Nm dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 .Nd encapsulation of architecture-, OS- and compiler-specific function call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 semantics
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 .Sh SYNOPSIS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 .In dyncall.h
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 .Ft DCCallVM *
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 .Fn dcNewCallVM "DCsize size"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 .Fn dcFree "DCCallVM * vm"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 .Fn dcMode "DCCallVM * vm" "DCint mode"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 .Fn dcReset "DCCallVM * vm"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 .Fn dcArgBool "DCCallVM * vm" "DCbool arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 .Fn dcArgChar "DCCallVM * vm" "DCchar arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 .Fn dcArgShort "DCCallVM * vm" "DCshort arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 .Fn dcArgInt "DCCallVM * vm" "DCint arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 .Fn dcArgLong "DCCallVM * vm" "DClong arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 .Fn dcArgLongLong "DCCallVM * vm" "DClonglong arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 .Fn dcArgFloat "DCCallVM * vm" "DCfloat arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 .Fn dcArgDouble "DCCallVM * vm" "DCdouble arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 .Fn dcArgPointer "DCCallVM * vm" "DCpointer arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 .Ft DCvoid
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 .Fn dcCallVoid "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 .Ft DCbool
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 .Fn dcCallBool "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 .Ft DCchar
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 .Fn dcCallChar "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 .Ft DCshort
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 .Fn dcCallShort "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 .Ft DCint
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 .Fn dcCallInt "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 .Ft DClong
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 .Fn dcCallLong "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 .Ft DClonglong
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 .Fn dcCallLongLong "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 .Ft DCfloat
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 .Fn dcCallFloat "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 .Ft DCdouble
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 .Fn dcCallDouble "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 .Ft DCpointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 .Fn dcCallPointer "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 .Fn dcArgF "DCCallVM * vm" "const DCsigchar * signature" "..."
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 .Fn dcVArgF "DCCallVM * vm" "const DCsigchar * signature" "va_list args"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 .Fn dcCallF "DCCallVM * vm" "DCValue * result" "DCpointer funcptr" "const DCsigchar * signature" "..."
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 .Fn dcVCallF "DCCallVM * vm" "DCValue * result" "DCpointer funcptr" "const DCsigchar * signature" "va_list args"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 .Sh DESCRIPTION
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 The
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 library encapsulates architecture-, OS- and compiler-specific function call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 semantics in a virtual "bind argument parameters from left to right and then
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 call" interface allowing programmers to call C functions in a completely
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 dynamic manner.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 In other words, instead of calling a function directly, the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 library provides a mechanism to push the function parameters manually and to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 issue the call afterwards.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 Since the idea behind this concept is similar to call dispatching mechanisms
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 of virtual machines, the object that can be dynamically loaded with arguments,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 and then used to actually invoke the call, is called CallVM. It is possible to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 change the calling convention used by the CallVM at run-time. Due to the fact
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 that nearly every platform comes with one or more distinct calling conventions, the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 library project intends to be a portable and open-source approach to the variety of
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 compiler-specific binary interfaces, platform specific subtleties, and so on...
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 .Fn dcNewCallVM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 creates a new CallVM object, where
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 .Ar size
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 specifies the max size of the internal stack that will be allocated and used to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 bind the arguments to. Use
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 .Fn dcFree
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 to destroy the CallVM object.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 .Fn dcMode
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 sets the calling convention to use. See dyncall.h for a list of
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 available modes. Note that some mode/platform combinations don't make any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 sense (e.g. using a PowerPC calling convention on a MIPS platform) and are
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 silently ignored.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 .Fn dcReset
50
9bd3c5219505 - minor test code fix
cslag
parents: 0
diff changeset
115 resets the internal stack of arguments and prepares it for a new call.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 This function should be called after setting the call mode (using dcMode), but
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117 prior to binding arguments to the CallVM. Use it also when reusing a CallVM, as
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 arguments don't get flushed automatically after a function call invocation.
50
9bd3c5219505 - minor test code fix
cslag
parents: 0
diff changeset
119 Note: you should also call this function after initial creation of the a CallVM
9bd3c5219505 - minor test code fix
cslag
parents: 0
diff changeset
120 object, as dcNewCallVM doesn't do this, implicitly.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 .Fn dcArgBool ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 .Fn dcArgChar ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 .Fn dcArgShort ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 .Fn dcArgInt ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 .Fn dcArgLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 .Fn dcArgLongLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 .Fn dcArgFloat ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 .Fn dcArgDouble
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 .Fn dcArgPointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 are used to bind arguments of the named types to the CallVM object. Arguments should
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 be bound in
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 .Em "left to right"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 order regarding the C function prototype.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 .Fn dcCallVoid ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 .Fn dcCallBool ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 .Fn dcCallChar ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 .Fn dcCallShort ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 .Fn dcCallInt ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 .Fn dcCallLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143 .Fn dcCallLongLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 .Fn dcCallFloat ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145 .Fn dcCallDouble
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147 .Fn dcCallPointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 call the function with the bound arguments and returning the named type, where
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 .Ar funcptr
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 is a pointer to the function to call. After the invocation of the function
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151 call, the argument values are still bound to the CallVM and a second call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 using the same arguments can be issued. Call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 .Fn reset
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 to clear the internal argument stack.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 .Fn dcArgF ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 .Fn dcVArgF ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158 .Fn dcCallF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159 and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 .Fn dcVCallF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 can be used to bind arguments in a printf-style call, using a signature
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162 string encoding the argument types and return type. The former 2 only bind
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163 the arguments to the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164 .Ar vm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165 object (and ignore return types specified in the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 signature), whereas the latter two issue a call to the given function pointer,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167 afterwards. The return value will be stored in
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168 .Ar result .
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
169 For information about the signature format, refer to the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
170 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
171 manual in PDF format.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172 .Sh EXAMPLE
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173 Let's say, we want to make a call to the function:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
174 .Bd -literal -offset indent
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
175 double sqrt(double x);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
176 .Ed
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178 Using the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
180 library, this function would be called as follows:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
181 .Bd -literal -offset indent
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
182 double r;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
183 DCCallVM* vm = dcNewCallVM(4096);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
184 dcMode(vm, DC_CALL_C_DEFAULT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
185 dcReset(vm);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
186 dcArgDouble(vm, 4.2373);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 r = dcCallDouble(vm, (DCpointer)&sqrt);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
188 dcFree(vm);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
189 .Ed
250
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
190 .Sh CONFORMING TO
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
191 The dyncall library needs at least a c99 compiler with additional support for
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
192 anonymous structs/unions (which were introduced officially in c11). Given that
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
193 those are generally supported by pretty much all major c99 conforming compilers
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
194 (as default extension), it should build fine with a c99 toolchain. Strictly
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
195 speaking, dyncall conforms to c11, though.
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
196 .Ed
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
197 .Sh SEE ALSO
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
198 .Xr dyncallback 3 ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
199 .Xr dynload 3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
200 and the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
201 .Nm
93
dfde5035d410 - better, more neutral .3 SEE ALSO
cslag
parents: 81
diff changeset
202 manual (available in HTML and PDF format) for more information.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
203 .Sh AUTHORS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
204 .An "Daniel Adler" Aq dadler@uni-goettingen.de
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
205 .An "Tassilo Philipp" Aq tphilipp@potion-studios.com