source: trunk/include/odinwrap.h@ 1669

Last change on this file since 1669 was 1669, checked in by sandervl, 26 years ago

dprintf & wrapper updates

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