source: trunk/include/odinwrap.h@ 6757

Last change on this file since 6757 was 6629, checked in by phaller, 24 years ago

.

File size: 53.5 KB
Line 
1/* $Id: odinwrap.h,v 1.35 2001-09-02 10:42:16 phaller Exp $
2 *
3 * Project Odin Software License can be found in LICENSE.TXT
4 *
5 * ODIN FS: Selector function wrapper macros
6 *
7 * Copyright 1999 Patrick Haller
8 *
9 */
10
11
12#ifndef _ODINWRAP_H_
13#define _ODINWRAP_H_
14
15#include <os2sel.h>
16
17/****************************************************************************
18 * Defines *
19 ****************************************************************************/
20
21// override debugging
22//#undef DEBUG
23//#define DEBUG
24
25// override profiling
26//#undef PROFILE
27//#define PROFILE
28
29
30
31#define ODIN_INTERNAL _Optlink
32
33
34#ifdef DEBUG
35# define ODINDEBUGCHANNEL(a) static char* pszOdinDebugChannel=#a;
36# define ODINDEBUGCHANNEL1(a) static char* pszOdinDebugChannel1=#a;
37#else
38# define ODINDEBUGCHANNEL(a)
39# define ODINDEBUGCHANNEL1(a)
40#endif
41
42
43//SvL: Define this to use the internal wrapper function of a specific api
44#ifdef DEBUG
45#define ODIN_EXTERN(a) ODIN_INTERNAL ODIN_##a
46#define CALL_ODINFUNC(a) ODIN_##a
47#else
48#define ODIN_EXTERN(a) ODIN_INTERNAL a
49#define CALL_ODINFUNC(a) a
50#endif
51
52
53#ifdef DEBUG
54
55//@@@PH 1999/10/25 IBM VAC++ debug memory support
56#include <malloc.h>
57#include <odin.h>
58
59// ---------------------------------------------------------------------------
60extern unsigned long int WIN32API GetCurrentThreadId(); //kernel32
61
62// ---------------------------------------------------------------------------
63//SvL: Only check the heap very frequently when there are problems
64//#define DEBUG_ODINHEAP
65#ifdef DEBUG_ODINHEAP
66#define ODIN_HEAPCHECK() _heap_check()
67#else
68#define ODIN_HEAPCHECK()
69#endif
70
71
72// ---------------------------------------------------------------------------
73// PH: this is for profiling cumulative method call times
74#ifdef PROFILE
75
76# define PROFILE_START(a) \
77 LARGE_INTEGER liStart; \
78 LARGE_INTEGER liEnd; \
79 unsigned long ulElapsed; \
80 QueryPerformanceCounter(&liStart);
81
82
83# define PROFILE_STOP(a) \
84 QueryPerformanceCounter(&liEnd);\
85 if (liStart.LowPart > liEnd.LowPart) \
86 ulElapsed = 0xFFFFFFFF - liStart.LowPart + liEnd.LowPart; \
87 else \
88 ulElapsed = liEnd.LowPart - liStart.LowPart; \
89 \
90 dprintf(("%s: %s %u ticks\n",\
91 pszOdinDebugChannel,\
92 a, \
93 ulElapsed));
94#else
95# define PROFILE_START(a)
96# define PROFILE_STOP(a)
97#endif
98
99
100#define FNPROLOGUE(a) \
101 USHORT sel = GetFS(); \
102 ODIN_HEAPCHECK(); \
103 PROFILE_START(a)
104
105#define FNEPILOGUE(a) \
106 PROFILE_STOP(a) \
107 ODIN_HEAPCHECK(); \
108 if (sel != GetFS()) { \
109 SetFS(sel); \
110 dprintf(("WARNING: FS: for thread %08xh corrupted by "a, GetCurrentThreadId())); \
111 }
112
113
114/****************************************************************************
115 * General Wrapper Macros (debug instrumented) *
116 ****************************************************************************/
117
118/* ---------- 0 parameters ---------- */
119#define ODINFUNCTION0(cRet,cName) \
120 cRet ODIN_INTERNAL ODIN_##cName (void); \
121 cRet WINAPI cName(void) \
122 { \
123 dprintf(("%s: "#cRet" "#cName"()", \
124 pszOdinDebugChannel)); \
125 FNPROLOGUE(#cName) \
126 cRet rc = ODIN_##cName(); \
127 FNEPILOGUE(#cName) \
128 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
129 pszOdinDebugChannel, \
130 rc)); \
131 return rc; \
132 } \
133 \
134 cRet ODIN_INTERNAL ODIN_##cName (void)
135
136
137#define ODINPROCEDURE0(cName) \
138 void ODIN_INTERNAL ODIN_##cName (void); \
139 void WINAPI cName(void) \
140 { \
141 dprintf(("%s: void "#cName"()", \
142 pszOdinDebugChannel)); \
143 FNPROLOGUE(#cName) \
144 ODIN_##cName(); \
145 dprintf(("%s: void "#cName"() leave\n", \
146 pszOdinDebugChannel)); \
147 FNEPILOGUE(#cName) \
148 } \
149 \
150 void ODIN_INTERNAL ODIN_##cName (void)
151
152
153/* ---------- 1 parameters ---------- */
154#define ODINFUNCTION1(cRet,cName,t1,a1) \
155 cRet ODIN_INTERNAL ODIN_##cName (t1 a1); \
156 cRet WINAPI cName(t1 a1) \
157 { \
158 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh)", \
159 pszOdinDebugChannel, \
160 a1)); \
161 FNPROLOGUE(#cName) \
162 cRet rc = ODIN_##cName(a1); \
163 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
164 pszOdinDebugChannel, \
165 rc)); \
166 FNEPILOGUE(#cName) \
167 return rc; \
168 } \
169 \
170 cRet ODIN_INTERNAL ODIN_##cName (t1 a1)
171
172#define ODINPROCEDURE1(cName,t1,a1) \
173 void ODIN_INTERNAL ODIN_##cName (t1 a1); \
174 void WINAPI cName(t1 a1) \
175 { \
176 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh)", \
177 pszOdinDebugChannel, \
178 a1)); \
179 FNPROLOGUE(#cName) \
180 ODIN_##cName(a1); \
181 dprintf(("%s: void "#cName"() leave\n", \
182 pszOdinDebugChannel)); \
183 FNEPILOGUE(#cName) \
184 } \
185 \
186 void ODIN_INTERNAL ODIN_##cName (t1 a1)
187
188
189/* ---------- 2 parameters ---------- */
190#define ODINFUNCTION2(cRet,cName,t1,a1,t2,a2) \
191 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2); \
192 cRet WINAPI cName(t1 a1,t2 a2) \
193 { \
194 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh)", \
195 pszOdinDebugChannel, \
196 a1,a2)); \
197 FNPROLOGUE(#cName) \
198 cRet rc = ODIN_##cName(a1,a2); \
199 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
200 pszOdinDebugChannel, \
201 rc)); \
202 FNEPILOGUE(#cName) \
203 return rc; \
204 } \
205 \
206 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
207
208#define ODINPROCEDURE2(cName,t1,a1,t2,a2) \
209 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2); \
210 void WINAPI cName(t1 a1,t2 a2) \
211 { \
212 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh)", \
213 pszOdinDebugChannel, \
214 a1,a2)); \
215 FNPROLOGUE(#cName) \
216 ODIN_##cName(a1,a2); \
217 dprintf(("%s: void "#cName"() leave\n", \
218 pszOdinDebugChannel)); \
219 FNEPILOGUE(#cName) \
220 } \
221 \
222 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
223
224
225/* ---------- 3 parameters ---------- */
226#define ODINFUNCTION3(cRet,cName,t1,a1,t2,a2,t3,a3) \
227 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
228 cRet WINAPI cName(t1 a1,t2 a2,t3 a3) \
229 { \
230 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)", \
231 pszOdinDebugChannel, \
232 a1,a2,a3)); \
233 FNPROLOGUE(#cName) \
234 cRet rc = ODIN_##cName(a1,a2,a3); \
235 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
236 pszOdinDebugChannel, \
237 rc)); \
238 FNEPILOGUE(#cName) \
239 return rc; \
240 } \
241 \
242 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
243
244#define ODINPROCEDURE3(cName,t1,a1,t2,a2,t3,a3) \
245 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
246 void WINAPI cName(t1 a1,t2 a2,t3 a3) \
247 { \
248 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)", \
249 pszOdinDebugChannel, \
250 a1,a2,a3)); \
251 FNPROLOGUE(#cName) \
252 ODIN_##cName(a1,a2,a3); \
253 dprintf(("%s: void "#cName"() leave\n", \
254 pszOdinDebugChannel)); \
255 FNEPILOGUE(#cName) \
256 } \
257 \
258 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
259
260
261/* ---------- 4 parameters ---------- */
262#define ODINFUNCTION4(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4) \
263 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
264 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
265 { \
266 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh, "#t4" "#a4"=%08xh)", \
267 pszOdinDebugChannel, \
268 a1,a2,a3,a4)); \
269 FNPROLOGUE(#cName) \
270 cRet rc = ODIN_##cName(a1,a2,a3,a4); \
271 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
272 pszOdinDebugChannel, \
273 rc)); \
274 FNEPILOGUE(#cName) \
275 return rc; \
276 } \
277 \
278 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
279
280#define ODINPROCEDURE4(cName,t1,a1,t2,a2,t3,a3,t4,a4) \
281 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
282 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
283 { \
284 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh, "#t4" "#a4"=%08xh)", \
285 pszOdinDebugChannel, \
286 a1,a2,a3,a4)); \
287 FNPROLOGUE(#cName) \
288 ODIN_##cName(a1,a2,a3,a4); \
289 dprintf(("%s: void "#cName"() leave\n", \
290 pszOdinDebugChannel)); \
291 FNEPILOGUE(#cName) \
292 } \
293 \
294 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
295
296
297/* ---------- 5 parameters ---------- */
298#define ODINFUNCTION5(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
299 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
300 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
301 { \
302 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh" \
303 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh)", \
304 pszOdinDebugChannel, \
305 a1,a2,a3,a4,a5)); \
306 FNPROLOGUE(#cName) \
307 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5); \
308 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
309 pszOdinDebugChannel, \
310 rc)); \
311 FNEPILOGUE(#cName) \
312 return rc; \
313 } \
314 \
315 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
316
317#define ODINPROCEDURE5(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
318 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
319 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
320 { \
321 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
322 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh)", \
323 pszOdinDebugChannel, \
324 a1,a2,a3,a4,a5)); \
325 FNPROLOGUE(#cName) \
326 ODIN_##cName(a1,a2,a3,a4,a5); \
327 dprintf(("%s: void "#cName"() leave\n", \
328 pszOdinDebugChannel)); \
329 FNEPILOGUE(#cName) \
330 } \
331 \
332 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
333
334
335/* ---------- 6 parameters ---------- */
336#define ODINFUNCTION6(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
337 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
338 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
339 { \
340 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
341 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh)", \
342 pszOdinDebugChannel, \
343 a1,a2,a3,a4,a5,a6)); \
344 FNPROLOGUE(#cName) \
345 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6); \
346 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
347 pszOdinDebugChannel, \
348 rc)); \
349 FNEPILOGUE(#cName) \
350 return rc; \
351 } \
352 \
353 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
354
355#define ODINPROCEDURE6(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
356 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
357 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
358 { \
359 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
360 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh)", \
361 pszOdinDebugChannel, \
362 a1,a2,a3,a4,a5,a6)); \
363 FNPROLOGUE(#cName) \
364 ODIN_##cName(a1,a2,a3,a4,a5,a6); \
365 dprintf(("%s: void "#cName"() leave\n", \
366 pszOdinDebugChannel)); \
367 FNEPILOGUE(#cName) \
368 } \
369 \
370 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
371
372
373/* ---------- 7 parameters ---------- */
374#define ODINFUNCTION7(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
375 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
376 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
377 { \
378 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
379 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh)", \
380 pszOdinDebugChannel, \
381 a1,a2,a3,a4,a5,a6,a7)); \
382 FNPROLOGUE(#cName) \
383 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
384 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
385 pszOdinDebugChannel, \
386 rc)); \
387 FNEPILOGUE(#cName) \
388 return rc; \
389 } \
390 \
391 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
392
393#define ODINPROCEDURE7(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
394 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
395 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
396 { \
397 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
398 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh)", \
399 pszOdinDebugChannel, \
400 a1,a2,a3,a4,a5,a6,a7)); \
401 FNPROLOGUE(#cName) \
402 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
403 dprintf(("%s: void "#cName"() leave\n", \
404 pszOdinDebugChannel)); \
405 FNEPILOGUE(#cName) \
406 } \
407 \
408 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
409
410
411/* ---------- 8 parameters ---------- */
412#define ODINFUNCTION8(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
413 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
414 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
415 { \
416 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
417 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
418 ", "#t8" "#a8"=%08xh)", \
419 pszOdinDebugChannel, \
420 a1,a2,a3,a4,a5,a6,a7,a8)); \
421 FNPROLOGUE(#cName) \
422 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
423 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
424 pszOdinDebugChannel, \
425 rc)); \
426 FNEPILOGUE(#cName) \
427 return rc; \
428 } \
429 \
430 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
431
432#define ODINPROCEDURE8(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
433 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
434 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
435 { \
436 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
437 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
438 ", "#t8" "#a8"=%08xh)", \
439 pszOdinDebugChannel, \
440 a1,a2,a3,a4,a5,a6,a7,a8)); \
441 FNPROLOGUE(#cName) \
442 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
443 dprintf(("%s: void "#cName"() leave\n", \
444 pszOdinDebugChannel)); \
445 FNEPILOGUE(#cName) \
446 } \
447 \
448 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
449
450
451/* ---------- 9 parameters ---------- */
452#define ODINFUNCTION9(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
453 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
454 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
455 { \
456 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
457 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
458 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh)", \
459 pszOdinDebugChannel, \
460 a1,a2,a3,a4,a5,a6,a7,a8,a9)); \
461 FNPROLOGUE(#cName) \
462 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
463 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
464 pszOdinDebugChannel, \
465 rc)); \
466 FNEPILOGUE(#cName) \
467 return rc; \
468 } \
469 \
470 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
471
472#define ODINPROCEDURE9(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
473 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
474 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
475 { \
476 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
477 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
478 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh)", \
479 pszOdinDebugChannel, \
480 a1,a2,a3,a4,a5,a6,a7,a8,a9)); \
481 FNPROLOGUE(#cName) \
482 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
483 dprintf(("%s: void "#cName"() leave\n", \
484 pszOdinDebugChannel)); \
485 FNEPILOGUE(#cName) \
486 } \
487 \
488 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
489
490
491/* ---------- 10 parameters ---------- */
492#define ODINFUNCTION10(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
493 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10); \
494 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
495 { \
496 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
497 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
498 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh)", \
499 pszOdinDebugChannel, \
500 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10));\
501 FNPROLOGUE(#cName) \
502 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
503 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
504 pszOdinDebugChannel, \
505 rc)); \
506 FNEPILOGUE(#cName) \
507 return rc; \
508 } \
509 \
510 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10)
511
512#define ODINPROCEDURE10(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
513 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10); \
514 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
515 { \
516 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
517 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
518 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh)", \
519 pszOdinDebugChannel, \
520 a1,a2,a3)); \
521 FNPROLOGUE(#cName) \
522 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
523 dprintf(("%s: void "#cName"() leave\n", \
524 pszOdinDebugChannel)); \
525 FNEPILOGUE(#cName) \
526 } \
527 \
528 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10)
529
530
531/* ---------- 11 parameters ---------- */
532#define ODINFUNCTION11(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11) \
533 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11); \
534 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11) \
535 { \
536 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
537 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
538 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh)", \
539 pszOdinDebugChannel, \
540 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)); \
541 FNPROLOGUE(#cName) \
542 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
543 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
544 pszOdinDebugChannel, \
545 rc)); \
546 FNEPILOGUE(#cName) \
547 return rc; \
548 } \
549 \
550 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11)
551
552#define ODINPROCEDURE11(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11) \
553 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11); \
554 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11) \
555 { \
556 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
557 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
558 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh)", \
559 pszOdinDebugChannel, \
560 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)); \
561 FNPROLOGUE(#cName) \
562 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
563 dprintf(("%s: void "#cName"() leave\n", \
564 pszOdinDebugChannel)); \
565 FNEPILOGUE(#cName) \
566 } \
567 \
568 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11)
569
570
571/* ---------- 12 parameters ---------- */
572#define ODINFUNCTION12(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12) \
573 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12); \
574 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12) \
575 { \
576 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
577 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
578 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
579 ", "#t12" "#a12"=%08xh)", \
580 pszOdinDebugChannel, \
581 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)); \
582 FNPROLOGUE(#cName) \
583 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
584 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
585 pszOdinDebugChannel, \
586 rc)); \
587 FNEPILOGUE(#cName) \
588 return rc; \
589 } \
590 \
591 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12)
592
593#define ODINPROCEDURE12(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12) \
594 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12); \
595 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12) \
596 { \
597 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
598 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
599 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
600 ", "#t12" "#a12"=%08xh)", \
601 pszOdinDebugChannel, \
602 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)); \
603 FNPROLOGUE(#cName) \
604 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
605 dprintf(("%s: void "#cName"() leave\n", \
606 pszOdinDebugChannel)); \
607 FNEPILOGUE(#cName) \
608 } \
609 \
610 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12)
611
612
613/* ---------- 13 parameters ---------- */
614#define ODINFUNCTION13(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12,t13,a13) \
615 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13); \
616 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13) \
617 { \
618 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
619 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
620 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
621 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh)", \
622 pszOdinDebugChannel, \
623 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13)); \
624 FNPROLOGUE(#cName) \
625 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
626 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
627 pszOdinDebugChannel, \
628 rc)); \
629 FNEPILOGUE(#cName) \
630 return rc; \
631 } \
632 \
633 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13)
634
635#define ODINPROCEDURE13(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12,t13,a13) \
636 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13); \
637 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13) \
638 { \
639 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
640 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
641 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
642 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh, )", \
643 pszOdinDebugChannel, \
644 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13)); \
645 FNPROLOGUE(#cName) \
646 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
647 dprintf(("%s: void "#cName"() leave\n", \
648 pszOdinDebugChannel)); \
649 FNEPILOGUE(#cName) \
650 } \
651 \
652 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13)
653
654
655/* ---------- 14 parameters ---------- */
656#define ODINFUNCTION14(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12,t13,a13,t14,a14) \
657 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14); \
658 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14) \
659 { \
660 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
661 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
662 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
663 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh, "#t14" "#a14"=%08xh)", \
664 pszOdinDebugChannel, \
665 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)); \
666 FNPROLOGUE(#cName) \
667 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
668 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
669 pszOdinDebugChannel, \
670 rc)); \
671 FNEPILOGUE(#cName) \
672 return rc; \
673 } \
674 \
675 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14)
676
677#define ODINPROCEDURE14(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12,t13,a13,t14,a14) \
678 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14); \
679 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14) \
680 { \
681 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
682 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
683 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
684 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh, "#t14" "#a14"=%08xh)", \
685 pszOdinDebugChannel, \
686 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)); \
687 FNPROLOGUE(#cName) \
688 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
689 dprintf(("%s: void "#cName"() leave\n", \
690 pszOdinDebugChannel)); \
691 FNEPILOGUE(#cName) \
692 } \
693 \
694 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14)
695
696
697#else
698
699/****************************************************************************
700 * General Wrapper Macros *
701 ****************************************************************************/
702
703#define FNPROLOGUE(a) \
704 USHORT sel = GetFS();
705
706#define FNEPILOGUE(a) \
707 SetFS(sel);
708
709#define ODINFUNCTION0 ODINFUNCTIONNODBG0
710#define ODINFUNCTION1 ODINFUNCTIONNODBG1
711#define ODINFUNCTION2 ODINFUNCTIONNODBG2
712#define ODINFUNCTION3 ODINFUNCTIONNODBG3
713#define ODINFUNCTION4 ODINFUNCTIONNODBG4
714#define ODINFUNCTION5 ODINFUNCTIONNODBG5
715#define ODINFUNCTION6 ODINFUNCTIONNODBG6
716#define ODINFUNCTION7 ODINFUNCTIONNODBG7
717#define ODINFUNCTION8 ODINFUNCTIONNODBG8
718#define ODINFUNCTION9 ODINFUNCTIONNODBG9
719#define ODINFUNCTION10 ODINFUNCTIONNODBG10
720#define ODINFUNCTION11 ODINFUNCTIONNODBG11
721#define ODINFUNCTION12 ODINFUNCTIONNODBG12
722#define ODINFUNCTION13 ODINFUNCTIONNODBG13
723#define ODINFUNCTION14 ODINFUNCTIONNODBG14
724
725#define ODINPROCEDURE0 ODINPROCEDURENODBG0
726#define ODINPROCEDURE1 ODINPROCEDURENODBG1
727#define ODINPROCEDURE2 ODINPROCEDURENODBG2
728#define ODINPROCEDURE3 ODINPROCEDURENODBG3
729#define ODINPROCEDURE4 ODINPROCEDURENODBG4
730#define ODINPROCEDURE5 ODINPROCEDURENODBG5
731#define ODINPROCEDURE6 ODINPROCEDURENODBG6
732#define ODINPROCEDURE7 ODINPROCEDURENODBG7
733#define ODINPROCEDURE8 ODINPROCEDURENODBG8
734#define ODINPROCEDURE9 ODINPROCEDURENODBG9
735#define ODINPROCEDURE10 ODINPROCEDURENODBG10
736#define ODINPROCEDURE11 ODINPROCEDURENODBG11
737#define ODINPROCEDURE12 ODINPROCEDURENODBG12
738#define ODINPROCEDURE13 ODINPROCEDURENODBG13
739#define ODINPROCEDURE14 ODINPROCEDURENODBG14
740
741#endif
742
743/****************************************************************************
744 * General Wrapper Macros *
745 ****************************************************************************/
746
747
748/* ---------- 0 parameters ---------- */
749#define ODINFUNCTIONNODBG0(cRet,cName) \
750 cRet ODIN_INTERNAL ODIN_##cName (void); \
751 cRet WINAPI cName(void) \
752 { \
753 FNPROLOGUE(#cName) \
754 cRet rc = ODIN_##cName(); \
755 FNEPILOGUE(#cName) \
756 return rc; \
757 } \
758 \
759 cRet ODIN_INTERNAL ODIN_##cName (void)
760
761
762#define ODINPROCEDURENODBG0(cName) \
763 void ODIN_INTERNAL ODIN_##cName (void); \
764 void WINAPI cName(void) \
765 { \
766 FNPROLOGUE(#cName) \
767 ODIN_##cName(); \
768 FNEPILOGUE(#cName) \
769 } \
770 \
771 void ODIN_INTERNAL ODIN_##cName (void)
772
773
774/* ---------- 1 parameters ---------- */
775#define ODINFUNCTIONNODBG1(cRet,cName,t1,a1) \
776 cRet ODIN_INTERNAL ODIN_##cName (t1 a1); \
777 cRet WINAPI cName(t1 a1) \
778 { \
779 FNPROLOGUE(#cName) \
780 cRet rc = ODIN_##cName(a1); \
781 FNEPILOGUE(#cName) \
782 return rc; \
783 } \
784 \
785 cRet ODIN_INTERNAL ODIN_##cName (t1 a1)
786
787#define ODINPROCEDURENODBG1(cName,t1,a1) \
788 void ODIN_INTERNAL ODIN_##cName (t1 a1); \
789 void WINAPI cName(t1 a1) \
790 { \
791 FNPROLOGUE(#cName) \
792 ODIN_##cName(a1); \
793 FNEPILOGUE(#cName) \
794 } \
795 \
796 void ODIN_INTERNAL ODIN_##cName (t1 a1)
797
798
799/* ---------- 2 parameters ---------- */
800#define ODINFUNCTIONNODBG2(cRet,cName,t1,a1,t2,a2) \
801 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2); \
802 cRet WINAPI cName(t1 a1,t2 a2) \
803 { \
804 FNPROLOGUE(#cName) \
805 cRet rc = ODIN_##cName(a1,a2); \
806 FNEPILOGUE(#cName) \
807 return rc; \
808 } \
809 \
810 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
811
812#define ODINPROCEDURENODBG2(cName,t1,a1,t2,a2) \
813 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2); \
814 void WINAPI cName(t1 a1,t2 a2) \
815 { \
816 FNPROLOGUE(#cName) \
817 ODIN_##cName(a1,a2); \
818 FNEPILOGUE(#cName) \
819 } \
820 \
821 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
822
823
824/* ---------- 3 parameters ---------- */
825#define ODINFUNCTIONNODBG3(cRet,cName,t1,a1,t2,a2,t3,a3) \
826 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
827 cRet WINAPI cName(t1 a1,t2 a2,t3 a3) \
828 { \
829 FNPROLOGUE(#cName) \
830 cRet rc = ODIN_##cName(a1,a2,a3); \
831 FNEPILOGUE(#cName) \
832 return rc; \
833 } \
834 \
835 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
836
837#define ODINPROCEDURENODBG3(cName,t1,a1,t2,a2,t3,a3) \
838 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
839 void WINAPI cName(t1 a1,t2 a2,t3 a3) \
840 { \
841 FNPROLOGUE(#cName) \
842 ODIN_##cName(a1,a2,a3); \
843 FNEPILOGUE(#cName) \
844 } \
845 \
846 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
847
848
849/* ---------- 4 parameters ---------- */
850#define ODINFUNCTIONNODBG4(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4) \
851 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
852 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
853 { \
854 FNPROLOGUE(#cName) \
855 cRet rc = ODIN_##cName(a1,a2,a3,a4); \
856 FNEPILOGUE(#cName) \
857 return rc; \
858 } \
859 \
860 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
861
862#define ODINPROCEDURENODBG4(cName,t1,a1,t2,a2,t3,a3,t4,a4) \
863 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
864 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
865 { \
866 FNPROLOGUE(#cName) \
867 ODIN_##cName(a1,a2,a3,a4); \
868 FNEPILOGUE(#cName) \
869 } \
870 \
871 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
872
873
874/* ---------- 5 parameters ---------- */
875#define ODINFUNCTIONNODBG5(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
876 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
877 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
878 { \
879 FNPROLOGUE(#cName) \
880 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5); \
881 FNEPILOGUE(#cName) \
882 return rc; \
883 } \
884 \
885 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
886
887#define ODINPROCEDURENODBG5(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
888 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
889 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
890 { \
891 FNPROLOGUE(#cName) \
892 ODIN_##cName(a1,a2,a3,a4,a5); \
893 FNEPILOGUE(#cName) \
894 } \
895 \
896 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
897
898
899/* ---------- 6 parameters ---------- */
900#define ODINFUNCTIONNODBG6(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
901 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
902 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
903 { \
904 FNPROLOGUE(#cName) \
905 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6); \
906 FNEPILOGUE(#cName) \
907 return rc; \
908 } \
909 \
910 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
911
912#define ODINPROCEDURENODBG6(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
913 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
914 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
915 { \
916 FNPROLOGUE(#cName) \
917 ODIN_##cName(a1,a2,a3,a4,a5,a6); \
918 FNEPILOGUE(#cName) \
919 } \
920 \
921 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
922
923
924/* ---------- 7 parameters ---------- */
925#define ODINFUNCTIONNODBG7(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
926 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
927 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
928 { \
929 FNPROLOGUE(#cName) \
930 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
931 FNEPILOGUE(#cName) \
932 return rc; \
933 } \
934 \
935 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
936
937#define ODINPROCEDURENODBG7(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
938 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
939 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
940 { \
941 FNPROLOGUE(#cName) \
942 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
943 FNEPILOGUE(#cName) \
944 } \
945 \
946 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
947
948
949/* ---------- 8 parameters ---------- */
950#define ODINFUNCTIONNODBG8(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
951 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
952 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
953 { \
954 FNPROLOGUE(#cName) \
955 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
956 FNEPILOGUE(#cName) \
957 return rc; \
958 } \
959 \
960 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
961
962#define ODINPROCEDURENODBG8(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
963 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
964 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
965 { \
966 FNPROLOGUE(#cName) \
967 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
968 FNEPILOGUE(#cName) \
969 } \
970 \
971 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
972
973
974/* ---------- 9 parameters ---------- */
975#define ODINFUNCTIONNODBG9(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
976 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
977 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
978 { \
979 FNPROLOGUE(#cName) \
980 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
981 FNEPILOGUE(#cName) \
982 return rc; \
983 } \
984 \
985 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
986
987#define ODINPROCEDURENODBG9(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
988 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
989 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
990 { \
991 FNPROLOGUE(#cName) \
992 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
993 FNEPILOGUE(#cName) \
994 } \
995 \
996 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
997
998
999/* ---------- 10 parameters ---------- */
1000#define ODINFUNCTIONNODBG10(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
1001 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10); \
1002 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
1003 { \
1004 FNPROLOGUE(#cName) \
1005 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
1006 FNEPILOGUE(#cName) \
1007 return rc; \
1008 } \
1009 \
1010 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10)
1011
1012#define ODINPROCEDURENODBG10(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
1013 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10); \
1014 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
1015 { \
1016 FNPROLOGUE(#cName) \
1017 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
1018 FNEPILOGUE(#cName) \
1019 } \
1020 \
1021 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10)
1022
1023
1024/* ---------- 11 parameters ---------- */
1025#define ODINFUNCTIONNODBG11(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11) \
1026 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11); \
1027 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11) \
1028 { \
1029 FNPROLOGUE(#cName) \
1030 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
1031 FNEPILOGUE(#cName) \
1032 return rc; \
1033 } \
1034 \
1035 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11)
1036
1037#define ODINPROCEDURENODBG11(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11) \
1038 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11); \
1039 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11) \
1040 { \
1041 FNPROLOGUE(#cName) \
1042 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
1043 FNEPILOGUE(#cName) \
1044 } \
1045 \
1046 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11)
1047
1048
1049/* ---------- 12 parameters ---------- */
1050#define ODINFUNCTIONNODBG12(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12) \
1051 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12); \
1052 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12) \
1053 { \
1054 FNPROLOGUE(#cName) \
1055 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
1056 FNEPILOGUE(#cName) \
1057 return rc; \
1058 } \
1059 \
1060 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12)
1061
1062#define ODINPROCEDURENODBG12(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12) \
1063 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12); \
1064 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12) \
1065 { \
1066 FNPROLOGUE(#cName) \
1067 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
1068 FNEPILOGUE(#cName) \
1069 } \
1070 \
1071 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12)
1072
1073
1074/* ---------- 13 parameters ---------- */
1075#define ODINFUNCTIONNODBG13(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12,t13,a13) \
1076 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13); \
1077 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13) \
1078 { \
1079 FNPROLOGUE(#cName) \
1080 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
1081 FNEPILOGUE(#cName) \
1082 return rc; \
1083 } \
1084 \
1085 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13)
1086
1087#define ODINPROCEDURENODBG13(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12,t13,a13) \
1088 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13); \
1089 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13) \
1090 { \
1091 FNPROLOGUE(#cName) \
1092 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
1093 FNEPILOGUE(#cName) \
1094 } \
1095 \
1096 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13)
1097
1098
1099/* ---------- 14 parameters ---------- */
1100#define ODINFUNCTIONNODBG14(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12,t13,a13,t14,a14) \
1101 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14); \
1102 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14) \
1103 { \
1104 FNPROLOGUE(#cName) \
1105 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
1106 FNEPILOGUE(#cName) \
1107 return rc; \
1108 } \
1109 \
1110 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14)
1111
1112#define ODINPROCEDURENODBG14(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10,t11,a11,t12,a12,t13,a13,t14,a14) \
1113 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14); \
1114 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14) \
1115 { \
1116 FNPROLOGUE(#cName) \
1117 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
1118 FNEPILOGUE(#cName) \
1119 } \
1120 \
1121 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12,t13 a13,t14 a14)
1122
1123#endif /* _ODINWRAP_H_ */
Note: See TracBrowser for help on using the repository browser.