source: trunk/include/odinwrap.h@ 7002

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

fixed c-compatibility for profiling

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