source: trunk/include/odinwrap.h@ 7314

Last change on this file since 7314 was 7076, checked in by phaller, 24 years ago

.

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