source: trunk/include/odinwrap.h@ 2129

Last change on this file since 2129 was 1953, checked in by phaller, 26 years ago

Fix: macro errors

File size: 69.1 KB
Line 
1/* $Id: odinwrap.h,v 1.17 1999-12-03 01:20:02 phaller 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,a10,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/* ---------- 13 parameters ---------- */
640#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) \
641 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); \
642 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) \
643 { \
644 unsigned short sel = RestoreOS2FS(); \
645 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
646 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
647 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
648 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh) enter\n", \
649 pszOdinDebugChannel, \
650 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13)); \
651 CheckFS(sel) \
652 _heap_check(); \
653 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
654 _heap_check(); \
655 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
656 pszOdinDebugChannel, \
657 rc)); \
658 SetFS(sel); \
659 return rc; \
660 } \
661 \
662 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)
663
664#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) \
665 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); \
666 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) \
667 { \
668 unsigned short sel = RestoreOS2FS(); \
669 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
670 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
671 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
672 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh, ) enter\n", \
673 pszOdinDebugChannel, \
674 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13)); \
675 CheckFS(sel) \
676 _heap_check(); \
677 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
678 _heap_check(); \
679 dprintf(("%s: void "#cName"() leave\n", \
680 pszOdinDebugChannel)); \
681 SetFS(sel); \
682 } \
683 \
684 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)
685
686
687/* ---------- 14 parameters ---------- */
688#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) \
689 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); \
690 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) \
691 { \
692 unsigned short sel = RestoreOS2FS(); \
693 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
694 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
695 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
696 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh, "#t14" "#a14"=%08xh) enter\n", \
697 pszOdinDebugChannel, \
698 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)); \
699 CheckFS(sel) \
700 _heap_check(); \
701 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
702 _heap_check(); \
703 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
704 pszOdinDebugChannel, \
705 rc)); \
706 SetFS(sel); \
707 return rc; \
708 } \
709 \
710 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)
711
712#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) \
713 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); \
714 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) \
715 { \
716 unsigned short sel = RestoreOS2FS(); \
717 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
718 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
719 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
720 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh, "#t14" "#a14"=%08xh) enter\n", \
721 pszOdinDebugChannel, \
722 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)); \
723 CheckFS(sel) \
724 _heap_check(); \
725 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
726 _heap_check(); \
727 dprintf(("%s: void "#cName"() leave\n", \
728 pszOdinDebugChannel)); \
729 SetFS(sel); \
730 } \
731 \
732 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)
733
734
735#else
736
737/****************************************************************************
738 * General Wrapper Macros *
739 ****************************************************************************/
740
741/* ---------- 0 parameters ---------- */
742#define ODINFUNCTION0(cRet,cName) \
743 cRet ODIN_INTERNAL ODIN_##cName (void);\
744 cRet WINAPI cName(void) \
745 { \
746 unsigned short sel = RestoreOS2FS(); \
747 cRet rc = ODIN_##cName(); \
748 SetFS(sel); \
749 return rc; \
750 } \
751 \
752 cRet ODIN_INTERNAL ODIN_##cName (void)
753
754
755#define ODINPROCEDURE0(cName) \
756 void ODIN_INTERNAL ODIN_##cName (void);\
757 void WINAPI cName(void) \
758 { \
759 unsigned short sel = RestoreOS2FS(); \
760 ODIN_##cName(); \
761 SetFS(sel); \
762 } \
763 \
764 void ODIN_INTERNAL ODIN_##cName (void)
765
766
767/* ---------- 1 parameters ---------- */
768#define ODINFUNCTION1(cRet,cName,t1,a1) \
769 cRet ODIN_INTERNAL ODIN_##cName (t1 a1);\
770 cRet WINAPI cName(t1 a1) \
771 { \
772 unsigned short sel = RestoreOS2FS(); \
773 cRet rc = ODIN_##cName(a1); \
774 SetFS(sel); \
775 return rc; \
776 } \
777 \
778 cRet ODIN_INTERNAL ODIN_##cName (t1 a1)
779
780#define ODINPROCEDURE1(cName,t1,a1) \
781 void ODIN_INTERNAL ODIN_##cName (t1 a1);\
782 void WINAPI cName(t1 a1) \
783 { \
784 unsigned short sel = RestoreOS2FS(); \
785 ODIN_##cName(a1); \
786 SetFS(sel); \
787 } \
788 \
789 void ODIN_INTERNAL ODIN_##cName (t1 a1)
790
791
792/* ---------- 2 parameters ---------- */
793#define ODINFUNCTION2(cRet,cName,t1,a1,t2,a2) \
794 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2); \
795 cRet WINAPI cName(t1 a1,t2 a2) \
796 { \
797 unsigned short sel = RestoreOS2FS(); \
798 cRet rc = ODIN_##cName(a1,a2); \
799 SetFS(sel); \
800 return rc; \
801 } \
802 \
803 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
804
805#define ODINPROCEDURE2(cName,t1,a1,t2,a2) \
806 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2);\
807 void WINAPI cName(t1 a1,t2 a2) \
808 { \
809 unsigned short sel = RestoreOS2FS(); \
810 ODIN_##cName(a1,a2); \
811 SetFS(sel); \
812 } \
813 \
814 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
815
816
817/* ---------- 3 parameters ---------- */
818#define ODINFUNCTION3(cRet,cName,t1,a1,t2,a2,t3,a3) \
819 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
820 cRet WINAPI cName(t1 a1,t2 a2,t3 a3) \
821 { \
822 unsigned short sel = RestoreOS2FS(); \
823 cRet rc = ODIN_##cName(a1,a2,a3); \
824 SetFS(sel); \
825 return rc; \
826 } \
827 \
828 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
829
830#define ODINPROCEDURE3(cName,t1,a1,t2,a2,t3,a3) \
831 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
832 void WINAPI cName(t1 a1,t2 a2,t3 a3) \
833 { \
834 unsigned short sel = RestoreOS2FS(); \
835 ODIN_##cName(a1,a2,a3); \
836 SetFS(sel); \
837 } \
838 \
839 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
840
841
842/* ---------- 4 parameters ---------- */
843#define ODINFUNCTION4(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4) \
844 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
845 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
846 { \
847 unsigned short sel = RestoreOS2FS(); \
848 cRet rc = ODIN_##cName(a1,a2,a3,a4); \
849 SetFS(sel); \
850 return rc; \
851 } \
852 \
853 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
854
855#define ODINPROCEDURE4(cName,t1,a1,t2,a2,t3,a3,t4,a4) \
856 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
857 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
858 { \
859 unsigned short sel = RestoreOS2FS(); \
860 ODIN_##cName(a1,a2,a3,a4); \
861 SetFS(sel); \
862 } \
863 \
864 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
865
866
867/* ---------- 5 parameters ---------- */
868#define ODINFUNCTION5(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
869 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
870 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
871 { \
872 unsigned short sel = RestoreOS2FS(); \
873 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5); \
874 SetFS(sel); \
875 return rc; \
876 } \
877 \
878 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
879
880#define ODINPROCEDURE5(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
881 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
882 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
883 { \
884 unsigned short sel = RestoreOS2FS(); \
885 ODIN_##cName(a1,a2,a3,a4,a5); \
886 SetFS(sel); \
887 } \
888 \
889 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
890
891
892/* ---------- 6 parameters ---------- */
893#define ODINFUNCTION6(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
894 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
895 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
896 { \
897 unsigned short sel = RestoreOS2FS(); \
898 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6); \
899 SetFS(sel); \
900 return rc; \
901 } \
902 \
903 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
904
905#define ODINPROCEDURE6(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
906 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
907 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
908 { \
909 unsigned short sel = RestoreOS2FS(); \
910 ODIN_##cName(a1,a2,a3,a4,a5,a6); \
911 SetFS(sel); \
912 } \
913 \
914 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
915
916
917/* ---------- 7 parameters ---------- */
918#define ODINFUNCTION7(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
919 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
920 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
921 { \
922 unsigned short sel = RestoreOS2FS(); \
923 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
924 SetFS(sel); \
925 return rc; \
926 } \
927 \
928 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
929
930#define ODINPROCEDURE7(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
931 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
932 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
933 { \
934 unsigned short sel = RestoreOS2FS(); \
935 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
936 SetFS(sel); \
937 } \
938 \
939 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
940
941
942/* ---------- 8 parameters ---------- */
943#define ODINFUNCTION8(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
944 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
945 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
946 { \
947 unsigned short sel = RestoreOS2FS(); \
948 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
949 SetFS(sel); \
950 return rc; \
951 } \
952 \
953 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
954
955#define ODINPROCEDURE8(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
956 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
957 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
958 { \
959 unsigned short sel = RestoreOS2FS(); \
960 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
961 SetFS(sel); \
962 } \
963 \
964 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
965
966
967/* ---------- 9 parameters ---------- */
968#define ODINFUNCTION9(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
969 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
970 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
971 { \
972 unsigned short sel = RestoreOS2FS(); \
973 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
974 SetFS(sel); \
975 return rc; \
976 } \
977 \
978 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
979
980#define ODINPROCEDURE9(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
981 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
982 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
983 { \
984 unsigned short sel = RestoreOS2FS(); \
985 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
986 SetFS(sel); \
987 } \
988 \
989 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
990
991
992/* ---------- 10 parameters ---------- */
993#define ODINFUNCTION10(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
994 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); \
995 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
996 { \
997 unsigned short sel = RestoreOS2FS(); \
998 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
999 SetFS(sel); \
1000 return rc; \
1001 } \
1002 \
1003 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)
1004
1005#define ODINPROCEDURE10(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
1006 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); \
1007 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
1008 { \
1009 unsigned short sel = RestoreOS2FS(); \
1010 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
1011 SetFS(sel); \
1012 } \
1013 \
1014 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)
1015
1016
1017/* ---------- 11 parameters ---------- */
1018#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) \
1019 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11); \
1020 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) \
1021 { \
1022 unsigned short sel = RestoreOS2FS(); \
1023 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
1024 SetFS(sel); \
1025 return rc; \
1026 } \
1027 \
1028 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)
1029
1030#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) \
1031 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); \
1032 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) \
1033 { \
1034 unsigned short sel = RestoreOS2FS(); \
1035 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
1036 SetFS(sel); \
1037 } \
1038 \
1039 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)
1040
1041
1042/* ---------- 12 parameters ---------- */
1043#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) \
1044 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12); \
1045 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) \
1046 { \
1047 unsigned short sel = RestoreOS2FS(); \
1048 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
1049 SetFS(sel); \
1050 return rc; \
1051 } \
1052 \
1053 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)
1054
1055#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) \
1056 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); \
1057 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) \
1058 { \
1059 unsigned short sel = RestoreOS2FS(); \
1060 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
1061 SetFS(sel); \
1062 } \
1063 \
1064 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)
1065
1066
1067
1068#endif
1069
1070/****************************************************************************
1071 * General Wrapper Macros *
1072 ****************************************************************************/
1073
1074/* ---------- 0 parameters ---------- */
1075#define ODINFUNCTIONNODBG0(cRet,cName) \
1076 cRet ODIN_INTERNAL ODIN_##cName (void);\
1077 cRet WINAPI cName(void) \
1078 { \
1079 unsigned short sel = RestoreOS2FS(); \
1080 cRet rc = ODIN_##cName(); \
1081 SetFS(sel); \
1082 return rc; \
1083 } \
1084 \
1085 cRet ODIN_INTERNAL ODIN_##cName (void)
1086
1087
1088#define ODINPROCEDURENODBG0(cName) \
1089 void ODIN_INTERNAL ODIN_##cName (void);\
1090 void WINAPI cName(void) \
1091 { \
1092 unsigned short sel = RestoreOS2FS(); \
1093 ODIN_##cName(); \
1094 SetFS(sel); \
1095 } \
1096 \
1097 void ODIN_INTERNAL ODIN_##cName (void)
1098
1099
1100/* ---------- 1 parameters ---------- */
1101#define ODINFUNCTIONNODBG1(cRet,cName,t1,a1) \
1102 cRet ODIN_INTERNAL ODIN_##cName (t1 a1);\
1103 cRet WINAPI cName(t1 a1) \
1104 { \
1105 unsigned short sel = RestoreOS2FS(); \
1106 cRet rc = ODIN_##cName(a1); \
1107 SetFS(sel); \
1108 return rc; \
1109 } \
1110 \
1111 cRet ODIN_INTERNAL ODIN_##cName (t1 a1)
1112
1113#define ODINPROCEDURENODBG1(cName,t1,a1) \
1114 void ODIN_INTERNAL ODIN_##cName (t1 a1);\
1115 void WINAPI cName(t1 a1) \
1116 { \
1117 unsigned short sel = RestoreOS2FS(); \
1118 ODIN_##cName(a1); \
1119 SetFS(sel); \
1120 } \
1121 \
1122 void ODIN_INTERNAL ODIN_##cName (t1 a1)
1123
1124
1125/* ---------- 2 parameters ---------- */
1126#define ODINFUNCTIONNODBG2(cRet,cName,t1,a1,t2,a2) \
1127 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2); \
1128 cRet WINAPI cName(t1 a1,t2 a2) \
1129 { \
1130 unsigned short sel = RestoreOS2FS(); \
1131 cRet rc = ODIN_##cName(a1,a2); \
1132 SetFS(sel); \
1133 return rc; \
1134 } \
1135 \
1136 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
1137
1138#define ODINPROCEDURENODBG2(cName,t1,a1,t2,a2) \
1139 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2);\
1140 void WINAPI cName(t1 a1,t2 a2) \
1141 { \
1142 unsigned short sel = RestoreOS2FS(); \
1143 ODIN_##cName(a1,a2); \
1144 SetFS(sel); \
1145 } \
1146 \
1147 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
1148
1149
1150/* ---------- 3 parameters ---------- */
1151#define ODINFUNCTIONNODBG3(cRet,cName,t1,a1,t2,a2,t3,a3) \
1152 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
1153 cRet WINAPI cName(t1 a1,t2 a2,t3 a3) \
1154 { \
1155 unsigned short sel = RestoreOS2FS(); \
1156 cRet rc = ODIN_##cName(a1,a2,a3); \
1157 SetFS(sel); \
1158 return rc; \
1159 } \
1160 \
1161 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
1162
1163#define ODINPROCEDURENODBG3(cName,t1,a1,t2,a2,t3,a3) \
1164 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
1165 void WINAPI cName(t1 a1,t2 a2,t3 a3) \
1166 { \
1167 unsigned short sel = RestoreOS2FS(); \
1168 ODIN_##cName(a1,a2,a3); \
1169 SetFS(sel); \
1170 } \
1171 \
1172 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
1173
1174
1175/* ---------- 4 parameters ---------- */
1176#define ODINFUNCTIONNODBG4(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4) \
1177 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
1178 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
1179 { \
1180 unsigned short sel = RestoreOS2FS(); \
1181 cRet rc = ODIN_##cName(a1,a2,a3,a4); \
1182 SetFS(sel); \
1183 return rc; \
1184 } \
1185 \
1186 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
1187
1188#define ODINPROCEDURENODBG4(cName,t1,a1,t2,a2,t3,a3,t4,a4) \
1189 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
1190 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
1191 { \
1192 unsigned short sel = RestoreOS2FS(); \
1193 ODIN_##cName(a1,a2,a3,a4); \
1194 SetFS(sel); \
1195 } \
1196 \
1197 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
1198
1199
1200/* ---------- 5 parameters ---------- */
1201#define ODINFUNCTIONNODBG5(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
1202 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
1203 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
1204 { \
1205 unsigned short sel = RestoreOS2FS(); \
1206 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5); \
1207 SetFS(sel); \
1208 return rc; \
1209 } \
1210 \
1211 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
1212
1213#define ODINPROCEDURENODBG5(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
1214 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
1215 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
1216 { \
1217 unsigned short sel = RestoreOS2FS(); \
1218 ODIN_##cName(a1,a2,a3,a4,a5); \
1219 SetFS(sel); \
1220 } \
1221 \
1222 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
1223
1224
1225/* ---------- 6 parameters ---------- */
1226#define ODINFUNCTIONNODBG6(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
1227 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
1228 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
1229 { \
1230 unsigned short sel = RestoreOS2FS(); \
1231 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6); \
1232 SetFS(sel); \
1233 return rc; \
1234 } \
1235 \
1236 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
1237
1238#define ODINPROCEDURENODBG6(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
1239 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
1240 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
1241 { \
1242 unsigned short sel = RestoreOS2FS(); \
1243 ODIN_##cName(a1,a2,a3,a4,a5,a6); \
1244 SetFS(sel); \
1245 } \
1246 \
1247 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
1248
1249
1250/* ---------- 7 parameters ---------- */
1251#define ODINFUNCTIONNODBG7(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
1252 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
1253 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
1254 { \
1255 unsigned short sel = RestoreOS2FS(); \
1256 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
1257 SetFS(sel); \
1258 return rc; \
1259 } \
1260 \
1261 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
1262
1263#define ODINPROCEDURENODBG7(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
1264 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
1265 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
1266 { \
1267 unsigned short sel = RestoreOS2FS(); \
1268 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
1269 SetFS(sel); \
1270 } \
1271 \
1272 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
1273
1274
1275/* ---------- 8 parameters ---------- */
1276#define ODINFUNCTIONNODBG8(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
1277 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
1278 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
1279 { \
1280 unsigned short sel = RestoreOS2FS(); \
1281 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
1282 SetFS(sel); \
1283 return rc; \
1284 } \
1285 \
1286 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
1287
1288#define ODINPROCEDURENODBG8(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
1289 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
1290 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
1291 { \
1292 unsigned short sel = RestoreOS2FS(); \
1293 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
1294 SetFS(sel); \
1295 } \
1296 \
1297 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
1298
1299
1300/* ---------- 9 parameters ---------- */
1301#define ODINFUNCTIONNODBG9(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
1302 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
1303 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
1304 { \
1305 unsigned short sel = RestoreOS2FS(); \
1306 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
1307 SetFS(sel); \
1308 return rc; \
1309 } \
1310 \
1311 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
1312
1313#define ODINPROCEDURENODBG9(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
1314 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
1315 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
1316 { \
1317 unsigned short sel = RestoreOS2FS(); \
1318 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
1319 SetFS(sel); \
1320 } \
1321 \
1322 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
1323
1324
1325/* ---------- 10 parameters ---------- */
1326#define ODINFUNCTIONNODBG10(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
1327 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); \
1328 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
1329 { \
1330 unsigned short sel = RestoreOS2FS(); \
1331 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
1332 SetFS(sel); \
1333 return rc; \
1334 } \
1335 \
1336 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)
1337
1338#define ODINPROCEDURENODBG10(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
1339 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); \
1340 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
1341 { \
1342 unsigned short sel = RestoreOS2FS(); \
1343 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
1344 SetFS(sel); \
1345 } \
1346 \
1347 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)
1348
1349
1350/* ---------- 11 parameters ---------- */
1351#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) \
1352 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); \
1353 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) \
1354 { \
1355 unsigned short sel = RestoreOS2FS(); \
1356 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
1357 SetFS(sel); \
1358 return rc; \
1359 } \
1360 \
1361 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)
1362
1363#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) \
1364 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); \
1365 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) \
1366 { \
1367 unsigned short sel = RestoreOS2FS(); \
1368 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
1369 SetFS(sel); \
1370 } \
1371 \
1372 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)
1373
1374
1375/* ---------- 12 parameters ---------- */
1376#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) \
1377 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); \
1378 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) \
1379 { \
1380 unsigned short sel = RestoreOS2FS(); \
1381 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
1382 SetFS(sel); \
1383 return rc; \
1384 } \
1385 \
1386 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)
1387
1388#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) \
1389 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); \
1390 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) \
1391 { \
1392 unsigned short sel = RestoreOS2FS(); \
1393 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
1394 SetFS(sel); \
1395 } \
1396 \
1397 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)
1398
1399
1400/* ---------- 13 parameters ---------- */
1401#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) \
1402 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); \
1403 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) \
1404 { \
1405 unsigned short sel = RestoreOS2FS(); \
1406 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
1407 SetFS(sel); \
1408 return rc; \
1409 } \
1410 \
1411 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)
1412
1413#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) \
1414 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); \
1415 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) \
1416 { \
1417 unsigned short sel = RestoreOS2FS(); \
1418 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
1419 SetFS(sel); \
1420 } \
1421 \
1422 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)
1423
1424
1425/* ---------- 14 parameters ---------- */
1426#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) \
1427 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); \
1428 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) \
1429 { \
1430 unsigned short sel = RestoreOS2FS(); \
1431 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
1432 SetFS(sel); \
1433 return rc; \
1434 } \
1435 \
1436 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)
1437
1438#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) \
1439 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); \
1440 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) \
1441 { \
1442 unsigned short sel = RestoreOS2FS(); \
1443 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
1444 SetFS(sel); \
1445 } \
1446 \
1447 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)
1448
1449
1450#endif /* _ODINWRAP_H_ */
Note: See TracBrowser for help on using the repository browser.