source: trunk/include/odinwrap.h@ 6893

Last change on this file since 6893 was 6893, checked in by sandervl, 24 years ago

* empty log message *

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