source: trunk/include/odinwrap.h@ 6912

Last change on this file since 6912 was 6912, checked in by bird, 24 years ago

Watcom: GetCurrentThreadId workaround. () -> (void).

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