source: trunk/include/odinwrap.h@ 7010

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

added ODIN perfview profiler

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