source: trunk/include/odinwrap.h@ 6552

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

odin wrapper fixes (fs corruption in release mode)

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