source: trunk/include/odinwrap.h@ 2244

Last change on this file since 2244 was 2241, checked in by phaller, 26 years ago

Add: ODINFUNCTION6FS macro to save FS selector

File size: 71.2 KB
Line 
1/* $Id: odinwrap.h,v 1.18 1999-12-29 08:32:00 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// @@@PH 1999/12/28 the following macro is a workaround for WINMM:waveOutOpen
343// where the system needs to know about the win32 tib fs selector
344#define ODINFUNCTION6FS(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
345 cRet ODIN_INTERNAL ODIN_##cName (unsigned short selFS, t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
346 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
347 { \
348 unsigned short sel = RestoreOS2FS(); \
349 dprintf(("%s: "#cRet" "#cName"(selFS=%04xh, "#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
350 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh) enter\n", \
351 pszOdinDebugChannel, \
352 sel, \
353 a1,a2,a3,a4,a5,a6)); \
354 CheckFS(sel) \
355 _heap_check(); \
356 cRet rc = ODIN_##cName(sel,a1,a2,a3,a4,a5,a6); \
357 _heap_check(); \
358 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
359 pszOdinDebugChannel, \
360 rc)); \
361 SetFS(sel); \
362 return rc; \
363 } \
364 \
365 cRet ODIN_INTERNAL ODIN_##cName (unsigned short selFS, t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
366
367
368#define ODINPROCEDURE6(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
369 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
370 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
371 { \
372 unsigned short sel = RestoreOS2FS(); \
373 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
374 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh) enter\n", \
375 pszOdinDebugChannel, \
376 a1,a2,a3,a4,a5,a6)); \
377 CheckFS(sel) \
378 _heap_check(); \
379 ODIN_##cName(a1,a2,a3,a4,a5,a6); \
380 _heap_check(); \
381 dprintf(("%s: void "#cName"() leave\n", \
382 pszOdinDebugChannel)); \
383 SetFS(sel); \
384 } \
385 \
386 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
387
388
389/* ---------- 7 parameters ---------- */
390#define ODINFUNCTION7(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
391 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
392 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
393 { \
394 unsigned short sel = RestoreOS2FS(); \
395 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
396 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh) enter\n", \
397 pszOdinDebugChannel, \
398 a1,a2,a3,a4,a5,a6,a7)); \
399 CheckFS(sel) \
400 _heap_check(); \
401 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
402 _heap_check(); \
403 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
404 pszOdinDebugChannel, \
405 rc)); \
406 SetFS(sel); \
407 return rc; \
408 } \
409 \
410 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
411
412#define ODINPROCEDURE7(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
413 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
414 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
415 { \
416 unsigned short sel = RestoreOS2FS(); \
417 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
418 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh) enter\n", \
419 pszOdinDebugChannel, \
420 a1,a2,a3,a4,a5,a6,a7)); \
421 CheckFS(sel) \
422 _heap_check(); \
423 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
424 _heap_check(); \
425 dprintf(("%s: void "#cName"() leave\n", \
426 pszOdinDebugChannel)); \
427 SetFS(sel); \
428 } \
429 \
430 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
431
432
433/* ---------- 8 parameters ---------- */
434#define ODINFUNCTION8(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
435 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
436 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
437 { \
438 unsigned short sel = RestoreOS2FS(); \
439 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
440 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
441 ", "#t8" "#a8"=%08xh) enter\n", \
442 pszOdinDebugChannel, \
443 a1,a2,a3,a4,a5,a6,a7,a8)); \
444 CheckFS(sel) \
445 _heap_check(); \
446 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
447 _heap_check(); \
448 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
449 pszOdinDebugChannel, \
450 rc)); \
451 SetFS(sel); \
452 return rc; \
453 } \
454 \
455 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
456
457#define ODINPROCEDURE8(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
458 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
459 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
460 { \
461 unsigned short sel = RestoreOS2FS(); \
462 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
463 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
464 ", "#t8" "#a8"=%08xh) enter\n", \
465 pszOdinDebugChannel, \
466 a1,a2,a3,a4,a5,a6,a7,a8)); \
467 _heap_check(); \
468 CheckFS(sel) \
469 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
470 _heap_check(); \
471 dprintf(("%s: void "#cName"() leave\n", \
472 pszOdinDebugChannel)); \
473 SetFS(sel); \
474 } \
475 \
476 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
477
478
479/* ---------- 9 parameters ---------- */
480#define ODINFUNCTION9(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
481 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
482 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
483 { \
484 unsigned short sel = RestoreOS2FS(); \
485 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
486 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
487 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh) enter\n", \
488 pszOdinDebugChannel, \
489 a1,a2,a3,a4,a5,a6,a7,a8,a9)); \
490 CheckFS(sel) \
491 _heap_check(); \
492 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
493 _heap_check(); \
494 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
495 pszOdinDebugChannel, \
496 rc)); \
497 SetFS(sel); \
498 return rc; \
499 } \
500 \
501 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
502
503#define ODINPROCEDURE9(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
504 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
505 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
506 { \
507 unsigned short sel = RestoreOS2FS(); \
508 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
509 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
510 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh) enter\n", \
511 pszOdinDebugChannel, \
512 a1,a2,a3,a4,a5,a6,a7,a8,a9)); \
513 CheckFS(sel) \
514 _heap_check(); \
515 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
516 _heap_check(); \
517 dprintf(("%s: void "#cName"() leave\n", \
518 pszOdinDebugChannel)); \
519 SetFS(sel); \
520 } \
521 \
522 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
523
524
525/* ---------- 10 parameters ---------- */
526#define ODINFUNCTION10(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
527 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); \
528 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
529 { \
530 unsigned short sel = RestoreOS2FS(); \
531 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
532 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
533 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh) enter\n", \
534 pszOdinDebugChannel, \
535 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10));\
536 CheckFS(sel) \
537 _heap_check(); \
538 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
539 _heap_check(); \
540 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
541 pszOdinDebugChannel, \
542 rc)); \
543 SetFS(sel); \
544 return rc; \
545 } \
546 \
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)
548
549#define ODINPROCEDURE10(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
550 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); \
551 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
552 { \
553 unsigned short sel = RestoreOS2FS(); \
554 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
555 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
556 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh) enter\n", \
557 pszOdinDebugChannel, \
558 a1,a2,a3)); \
559 CheckFS(sel) \
560 _heap_check(); \
561 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
562 _heap_check(); \
563 dprintf(("%s: void "#cName"() leave\n", \
564 pszOdinDebugChannel)); \
565 SetFS(sel); \
566 } \
567 \
568 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)
569
570
571/* ---------- 11 parameters ---------- */
572#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) \
573 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); \
574 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) \
575 { \
576 unsigned short sel = RestoreOS2FS(); \
577 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
578 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
579 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh) enter\n", \
580 pszOdinDebugChannel, \
581 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)); \
582 CheckFS(sel) \
583 _heap_check(); \
584 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
585 _heap_check(); \
586 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
587 pszOdinDebugChannel, \
588 rc)); \
589 SetFS(sel); \
590 return rc; \
591 } \
592 \
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)
594
595#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) \
596 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); \
597 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) \
598 { \
599 unsigned short sel = RestoreOS2FS(); \
600 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
601 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
602 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh) enter\n", \
603 pszOdinDebugChannel, \
604 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)); \
605 CheckFS(sel) \
606 _heap_check(); \
607 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
608 _heap_check(); \
609 dprintf(("%s: void "#cName"() leave\n", \
610 pszOdinDebugChannel)); \
611 SetFS(sel); \
612 } \
613 \
614 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11)
615
616
617/* ---------- 12 parameters ---------- */
618#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) \
619 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12); \
620 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10,t11 a11,t12 a12) \
621 { \
622 unsigned short sel = RestoreOS2FS(); \
623 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
624 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
625 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
626 ", "#t12" "#a12"=%08xh) enter\n", \
627 pszOdinDebugChannel, \
628 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)); \
629 CheckFS(sel) \
630 _heap_check(); \
631 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
632 _heap_check(); \
633 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
634 pszOdinDebugChannel, \
635 rc)); \
636 SetFS(sel); \
637 return rc; \
638 } \
639 \
640 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)
641
642#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) \
643 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); \
644 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) \
645 { \
646 unsigned short sel = RestoreOS2FS(); \
647 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
648 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
649 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
650 ", "#t12" "#a12"=%08xh) enter\n", \
651 pszOdinDebugChannel, \
652 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)); \
653 CheckFS(sel) \
654 _heap_check(); \
655 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
656 _heap_check(); \
657 dprintf(("%s: void "#cName"() leave\n", \
658 pszOdinDebugChannel)); \
659 SetFS(sel); \
660 } \
661 \
662 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)
663
664
665/* ---------- 13 parameters ---------- */
666#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) \
667 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); \
668 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) \
669 { \
670 unsigned short sel = RestoreOS2FS(); \
671 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
672 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
673 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
674 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh) enter\n", \
675 pszOdinDebugChannel, \
676 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13)); \
677 CheckFS(sel) \
678 _heap_check(); \
679 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
680 _heap_check(); \
681 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
682 pszOdinDebugChannel, \
683 rc)); \
684 SetFS(sel); \
685 return rc; \
686 } \
687 \
688 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)
689
690#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) \
691 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); \
692 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) \
693 { \
694 unsigned short sel = RestoreOS2FS(); \
695 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
696 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
697 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
698 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh, ) enter\n", \
699 pszOdinDebugChannel, \
700 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13)); \
701 CheckFS(sel) \
702 _heap_check(); \
703 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
704 _heap_check(); \
705 dprintf(("%s: void "#cName"() leave\n", \
706 pszOdinDebugChannel)); \
707 SetFS(sel); \
708 } \
709 \
710 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)
711
712
713/* ---------- 14 parameters ---------- */
714#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) \
715 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); \
716 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) \
717 { \
718 unsigned short sel = RestoreOS2FS(); \
719 dprintf(("%s: "#cRet" "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
720 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
721 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
722 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh, "#t14" "#a14"=%08xh) enter\n", \
723 pszOdinDebugChannel, \
724 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)); \
725 CheckFS(sel) \
726 _heap_check(); \
727 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
728 _heap_check(); \
729 dprintf(("%s: "#cRet" "#cName"() leave = %08xh\n", \
730 pszOdinDebugChannel, \
731 rc)); \
732 SetFS(sel); \
733 return rc; \
734 } \
735 \
736 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)
737
738#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) \
739 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); \
740 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) \
741 { \
742 unsigned short sel = RestoreOS2FS(); \
743 dprintf(("%s: void "#cName"("#t1" "#a1"=%08xh, "#t2" "#a2"=%08xh, "#t3" "#a3"=%08xh)" \
744 ", "#t4" "#a4"=%08xh, "#t5" "#a5"=%08xh, "#t6" "#a6"=%08xh, "#t7" "#a7"=%08xh" \
745 ", "#t8" "#a8"=%08xh, "#t9" "#a9"=%08xh, "#t10" "#a10"=%08xh, "#t11" "#a11"=%08xh" \
746 ", "#t12" "#a12"=%08xh, "#t13" "#a13"=%08xh, "#t14" "#a14"=%08xh) enter\n", \
747 pszOdinDebugChannel, \
748 a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)); \
749 CheckFS(sel) \
750 _heap_check(); \
751 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
752 _heap_check(); \
753 dprintf(("%s: void "#cName"() leave\n", \
754 pszOdinDebugChannel)); \
755 SetFS(sel); \
756 } \
757 \
758 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)
759
760
761#else
762
763/****************************************************************************
764 * General Wrapper Macros *
765 ****************************************************************************/
766
767/* ---------- 0 parameters ---------- */
768#define ODINFUNCTION0(cRet,cName) \
769 cRet ODIN_INTERNAL ODIN_##cName (void);\
770 cRet WINAPI cName(void) \
771 { \
772 unsigned short sel = RestoreOS2FS(); \
773 cRet rc = ODIN_##cName(); \
774 SetFS(sel); \
775 return rc; \
776 } \
777 \
778 cRet ODIN_INTERNAL ODIN_##cName (void)
779
780
781#define ODINPROCEDURE0(cName) \
782 void ODIN_INTERNAL ODIN_##cName (void);\
783 void WINAPI cName(void) \
784 { \
785 unsigned short sel = RestoreOS2FS(); \
786 ODIN_##cName(); \
787 SetFS(sel); \
788 } \
789 \
790 void ODIN_INTERNAL ODIN_##cName (void)
791
792
793/* ---------- 1 parameters ---------- */
794#define ODINFUNCTION1(cRet,cName,t1,a1) \
795 cRet ODIN_INTERNAL ODIN_##cName (t1 a1);\
796 cRet WINAPI cName(t1 a1) \
797 { \
798 unsigned short sel = RestoreOS2FS(); \
799 cRet rc = ODIN_##cName(a1); \
800 SetFS(sel); \
801 return rc; \
802 } \
803 \
804 cRet ODIN_INTERNAL ODIN_##cName (t1 a1)
805
806#define ODINPROCEDURE1(cName,t1,a1) \
807 void ODIN_INTERNAL ODIN_##cName (t1 a1);\
808 void WINAPI cName(t1 a1) \
809 { \
810 unsigned short sel = RestoreOS2FS(); \
811 ODIN_##cName(a1); \
812 SetFS(sel); \
813 } \
814 \
815 void ODIN_INTERNAL ODIN_##cName (t1 a1)
816
817
818/* ---------- 2 parameters ---------- */
819#define ODINFUNCTION2(cRet,cName,t1,a1,t2,a2) \
820 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2); \
821 cRet WINAPI cName(t1 a1,t2 a2) \
822 { \
823 unsigned short sel = RestoreOS2FS(); \
824 cRet rc = ODIN_##cName(a1,a2); \
825 SetFS(sel); \
826 return rc; \
827 } \
828 \
829 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
830
831#define ODINPROCEDURE2(cName,t1,a1,t2,a2) \
832 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2);\
833 void WINAPI cName(t1 a1,t2 a2) \
834 { \
835 unsigned short sel = RestoreOS2FS(); \
836 ODIN_##cName(a1,a2); \
837 SetFS(sel); \
838 } \
839 \
840 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
841
842
843/* ---------- 3 parameters ---------- */
844#define ODINFUNCTION3(cRet,cName,t1,a1,t2,a2,t3,a3) \
845 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
846 cRet WINAPI cName(t1 a1,t2 a2,t3 a3) \
847 { \
848 unsigned short sel = RestoreOS2FS(); \
849 cRet rc = ODIN_##cName(a1,a2,a3); \
850 SetFS(sel); \
851 return rc; \
852 } \
853 \
854 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
855
856#define ODINPROCEDURE3(cName,t1,a1,t2,a2,t3,a3) \
857 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
858 void WINAPI cName(t1 a1,t2 a2,t3 a3) \
859 { \
860 unsigned short sel = RestoreOS2FS(); \
861 ODIN_##cName(a1,a2,a3); \
862 SetFS(sel); \
863 } \
864 \
865 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
866
867
868/* ---------- 4 parameters ---------- */
869#define ODINFUNCTION4(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4) \
870 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
871 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
872 { \
873 unsigned short sel = RestoreOS2FS(); \
874 cRet rc = ODIN_##cName(a1,a2,a3,a4); \
875 SetFS(sel); \
876 return rc; \
877 } \
878 \
879 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
880
881#define ODINPROCEDURE4(cName,t1,a1,t2,a2,t3,a3,t4,a4) \
882 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
883 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
884 { \
885 unsigned short sel = RestoreOS2FS(); \
886 ODIN_##cName(a1,a2,a3,a4); \
887 SetFS(sel); \
888 } \
889 \
890 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
891
892
893/* ---------- 5 parameters ---------- */
894#define ODINFUNCTION5(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
895 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
896 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
897 { \
898 unsigned short sel = RestoreOS2FS(); \
899 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5); \
900 SetFS(sel); \
901 return rc; \
902 } \
903 \
904 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
905
906#define ODINPROCEDURE5(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
907 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
908 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
909 { \
910 unsigned short sel = RestoreOS2FS(); \
911 ODIN_##cName(a1,a2,a3,a4,a5); \
912 SetFS(sel); \
913 } \
914 \
915 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
916
917
918/* ---------- 6 parameters ---------- */
919#define ODINFUNCTION6(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
920 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
921 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
922 { \
923 unsigned short sel = RestoreOS2FS(); \
924 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6); \
925 SetFS(sel); \
926 return rc; \
927 } \
928 \
929 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
930
931
932// @@@PH 1999/12/28 the following macro is a workaround for WINMM:waveOutOpen
933// where the system needs to know about the win32 tib fs selector
934#define ODINFUNCTION6FS(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
935 cRet ODIN_INTERNAL ODIN_##cName (unsigned short selFS, t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
936 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
937 { \
938 unsigned short sel = RestoreOS2FS(); \
939 cRet rc = ODIN_##cName(sel,a1,a2,a3,a4,a5,a6); \
940 SetFS(sel); \
941 return rc; \
942 } \
943 \
944 cRet ODIN_INTERNAL ODIN_##cName (unsigned short selFS, t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
945
946
947#define ODINPROCEDURE6(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
948 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
949 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
950 { \
951 unsigned short sel = RestoreOS2FS(); \
952 ODIN_##cName(a1,a2,a3,a4,a5,a6); \
953 SetFS(sel); \
954 } \
955 \
956 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
957
958
959/* ---------- 7 parameters ---------- */
960#define ODINFUNCTION7(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
961 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
962 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
963 { \
964 unsigned short sel = RestoreOS2FS(); \
965 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
966 SetFS(sel); \
967 return rc; \
968 } \
969 \
970 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
971
972#define ODINPROCEDURE7(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
973 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
974 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
975 { \
976 unsigned short sel = RestoreOS2FS(); \
977 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
978 SetFS(sel); \
979 } \
980 \
981 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
982
983
984/* ---------- 8 parameters ---------- */
985#define ODINFUNCTION8(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
986 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
987 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
988 { \
989 unsigned short sel = RestoreOS2FS(); \
990 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
991 SetFS(sel); \
992 return rc; \
993 } \
994 \
995 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
996
997#define ODINPROCEDURE8(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
998 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
999 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
1000 { \
1001 unsigned short sel = RestoreOS2FS(); \
1002 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
1003 SetFS(sel); \
1004 } \
1005 \
1006 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
1007
1008
1009/* ---------- 9 parameters ---------- */
1010#define ODINFUNCTION9(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
1011 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
1012 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
1013 { \
1014 unsigned short sel = RestoreOS2FS(); \
1015 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
1016 SetFS(sel); \
1017 return rc; \
1018 } \
1019 \
1020 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
1021
1022#define ODINPROCEDURE9(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
1023 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
1024 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
1025 { \
1026 unsigned short sel = RestoreOS2FS(); \
1027 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
1028 SetFS(sel); \
1029 } \
1030 \
1031 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
1032
1033
1034/* ---------- 10 parameters ---------- */
1035#define ODINFUNCTION10(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
1036 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); \
1037 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
1038 { \
1039 unsigned short sel = RestoreOS2FS(); \
1040 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
1041 SetFS(sel); \
1042 return rc; \
1043 } \
1044 \
1045 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)
1046
1047#define ODINPROCEDURE10(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
1048 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); \
1049 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
1050 { \
1051 unsigned short sel = RestoreOS2FS(); \
1052 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
1053 SetFS(sel); \
1054 } \
1055 \
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)
1057
1058
1059/* ---------- 11 parameters ---------- */
1060#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) \
1061 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); \
1062 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) \
1063 { \
1064 unsigned short sel = RestoreOS2FS(); \
1065 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
1066 SetFS(sel); \
1067 return rc; \
1068 } \
1069 \
1070 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)
1071
1072#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) \
1073 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); \
1074 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) \
1075 { \
1076 unsigned short sel = RestoreOS2FS(); \
1077 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
1078 SetFS(sel); \
1079 } \
1080 \
1081 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)
1082
1083
1084/* ---------- 12 parameters ---------- */
1085#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) \
1086 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); \
1087 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) \
1088 { \
1089 unsigned short sel = RestoreOS2FS(); \
1090 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
1091 SetFS(sel); \
1092 return rc; \
1093 } \
1094 \
1095 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)
1096
1097#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) \
1098 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); \
1099 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) \
1100 { \
1101 unsigned short sel = RestoreOS2FS(); \
1102 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
1103 SetFS(sel); \
1104 } \
1105 \
1106 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)
1107
1108
1109
1110#endif
1111
1112/****************************************************************************
1113 * General Wrapper Macros *
1114 ****************************************************************************/
1115
1116/* ---------- 0 parameters ---------- */
1117#define ODINFUNCTIONNODBG0(cRet,cName) \
1118 cRet ODIN_INTERNAL ODIN_##cName (void);\
1119 cRet WINAPI cName(void) \
1120 { \
1121 unsigned short sel = RestoreOS2FS(); \
1122 cRet rc = ODIN_##cName(); \
1123 SetFS(sel); \
1124 return rc; \
1125 } \
1126 \
1127 cRet ODIN_INTERNAL ODIN_##cName (void)
1128
1129
1130#define ODINPROCEDURENODBG0(cName) \
1131 void ODIN_INTERNAL ODIN_##cName (void);\
1132 void WINAPI cName(void) \
1133 { \
1134 unsigned short sel = RestoreOS2FS(); \
1135 ODIN_##cName(); \
1136 SetFS(sel); \
1137 } \
1138 \
1139 void ODIN_INTERNAL ODIN_##cName (void)
1140
1141
1142/* ---------- 1 parameters ---------- */
1143#define ODINFUNCTIONNODBG1(cRet,cName,t1,a1) \
1144 cRet ODIN_INTERNAL ODIN_##cName (t1 a1);\
1145 cRet WINAPI cName(t1 a1) \
1146 { \
1147 unsigned short sel = RestoreOS2FS(); \
1148 cRet rc = ODIN_##cName(a1); \
1149 SetFS(sel); \
1150 return rc; \
1151 } \
1152 \
1153 cRet ODIN_INTERNAL ODIN_##cName (t1 a1)
1154
1155#define ODINPROCEDURENODBG1(cName,t1,a1) \
1156 void ODIN_INTERNAL ODIN_##cName (t1 a1);\
1157 void WINAPI cName(t1 a1) \
1158 { \
1159 unsigned short sel = RestoreOS2FS(); \
1160 ODIN_##cName(a1); \
1161 SetFS(sel); \
1162 } \
1163 \
1164 void ODIN_INTERNAL ODIN_##cName (t1 a1)
1165
1166
1167/* ---------- 2 parameters ---------- */
1168#define ODINFUNCTIONNODBG2(cRet,cName,t1,a1,t2,a2) \
1169 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2); \
1170 cRet WINAPI cName(t1 a1,t2 a2) \
1171 { \
1172 unsigned short sel = RestoreOS2FS(); \
1173 cRet rc = ODIN_##cName(a1,a2); \
1174 SetFS(sel); \
1175 return rc; \
1176 } \
1177 \
1178 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
1179
1180#define ODINPROCEDURENODBG2(cName,t1,a1,t2,a2) \
1181 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2);\
1182 void WINAPI cName(t1 a1,t2 a2) \
1183 { \
1184 unsigned short sel = RestoreOS2FS(); \
1185 ODIN_##cName(a1,a2); \
1186 SetFS(sel); \
1187 } \
1188 \
1189 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2)
1190
1191
1192/* ---------- 3 parameters ---------- */
1193#define ODINFUNCTIONNODBG3(cRet,cName,t1,a1,t2,a2,t3,a3) \
1194 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
1195 cRet WINAPI cName(t1 a1,t2 a2,t3 a3) \
1196 { \
1197 unsigned short sel = RestoreOS2FS(); \
1198 cRet rc = ODIN_##cName(a1,a2,a3); \
1199 SetFS(sel); \
1200 return rc; \
1201 } \
1202 \
1203 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
1204
1205#define ODINPROCEDURENODBG3(cName,t1,a1,t2,a2,t3,a3) \
1206 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3); \
1207 void WINAPI cName(t1 a1,t2 a2,t3 a3) \
1208 { \
1209 unsigned short sel = RestoreOS2FS(); \
1210 ODIN_##cName(a1,a2,a3); \
1211 SetFS(sel); \
1212 } \
1213 \
1214 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3)
1215
1216
1217/* ---------- 4 parameters ---------- */
1218#define ODINFUNCTIONNODBG4(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4) \
1219 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
1220 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
1221 { \
1222 unsigned short sel = RestoreOS2FS(); \
1223 cRet rc = ODIN_##cName(a1,a2,a3,a4); \
1224 SetFS(sel); \
1225 return rc; \
1226 } \
1227 \
1228 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
1229
1230#define ODINPROCEDURENODBG4(cName,t1,a1,t2,a2,t3,a3,t4,a4) \
1231 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4); \
1232 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4) \
1233 { \
1234 unsigned short sel = RestoreOS2FS(); \
1235 ODIN_##cName(a1,a2,a3,a4); \
1236 SetFS(sel); \
1237 } \
1238 \
1239 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4)
1240
1241
1242/* ---------- 5 parameters ---------- */
1243#define ODINFUNCTIONNODBG5(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
1244 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
1245 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
1246 { \
1247 unsigned short sel = RestoreOS2FS(); \
1248 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5); \
1249 SetFS(sel); \
1250 return rc; \
1251 } \
1252 \
1253 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
1254
1255#define ODINPROCEDURENODBG5(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
1256 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5); \
1257 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5) \
1258 { \
1259 unsigned short sel = RestoreOS2FS(); \
1260 ODIN_##cName(a1,a2,a3,a4,a5); \
1261 SetFS(sel); \
1262 } \
1263 \
1264 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5)
1265
1266
1267/* ---------- 6 parameters ---------- */
1268#define ODINFUNCTIONNODBG6(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
1269 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
1270 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
1271 { \
1272 unsigned short sel = RestoreOS2FS(); \
1273 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6); \
1274 SetFS(sel); \
1275 return rc; \
1276 } \
1277 \
1278 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
1279
1280#define ODINPROCEDURENODBG6(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6) \
1281 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6); \
1282 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6) \
1283 { \
1284 unsigned short sel = RestoreOS2FS(); \
1285 ODIN_##cName(a1,a2,a3,a4,a5,a6); \
1286 SetFS(sel); \
1287 } \
1288 \
1289 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6)
1290
1291
1292/* ---------- 7 parameters ---------- */
1293#define ODINFUNCTIONNODBG7(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
1294 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
1295 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
1296 { \
1297 unsigned short sel = RestoreOS2FS(); \
1298 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
1299 SetFS(sel); \
1300 return rc; \
1301 } \
1302 \
1303 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
1304
1305#define ODINPROCEDURENODBG7(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
1306 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7); \
1307 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7) \
1308 { \
1309 unsigned short sel = RestoreOS2FS(); \
1310 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7); \
1311 SetFS(sel); \
1312 } \
1313 \
1314 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7)
1315
1316
1317/* ---------- 8 parameters ---------- */
1318#define ODINFUNCTIONNODBG8(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
1319 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
1320 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
1321 { \
1322 unsigned short sel = RestoreOS2FS(); \
1323 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
1324 SetFS(sel); \
1325 return rc; \
1326 } \
1327 \
1328 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
1329
1330#define ODINPROCEDURENODBG8(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8) \
1331 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8); \
1332 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8) \
1333 { \
1334 unsigned short sel = RestoreOS2FS(); \
1335 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8); \
1336 SetFS(sel); \
1337 } \
1338 \
1339 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8)
1340
1341
1342/* ---------- 9 parameters ---------- */
1343#define ODINFUNCTIONNODBG9(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
1344 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
1345 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
1346 { \
1347 unsigned short sel = RestoreOS2FS(); \
1348 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
1349 SetFS(sel); \
1350 return rc; \
1351 } \
1352 \
1353 cRet ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
1354
1355#define ODINPROCEDURENODBG9(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9) \
1356 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9); \
1357 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9) \
1358 { \
1359 unsigned short sel = RestoreOS2FS(); \
1360 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9); \
1361 SetFS(sel); \
1362 } \
1363 \
1364 void ODIN_INTERNAL ODIN_##cName (t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9)
1365
1366
1367/* ---------- 10 parameters ---------- */
1368#define ODINFUNCTIONNODBG10(cRet,cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
1369 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); \
1370 cRet WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
1371 { \
1372 unsigned short sel = RestoreOS2FS(); \
1373 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
1374 SetFS(sel); \
1375 return rc; \
1376 } \
1377 \
1378 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)
1379
1380#define ODINPROCEDURENODBG10(cName,t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7,t8,a8,t9,a9,t10,a10) \
1381 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); \
1382 void WINAPI cName(t1 a1,t2 a2,t3 a3,t4 a4,t5 a5,t6 a6,t7 a7,t8 a8,t9 a9,t10 a10) \
1383 { \
1384 unsigned short sel = RestoreOS2FS(); \
1385 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); \
1386 SetFS(sel); \
1387 } \
1388 \
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)
1390
1391
1392/* ---------- 11 parameters ---------- */
1393#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) \
1394 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); \
1395 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) \
1396 { \
1397 unsigned short sel = RestoreOS2FS(); \
1398 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
1399 SetFS(sel); \
1400 return rc; \
1401 } \
1402 \
1403 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)
1404
1405#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) \
1406 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); \
1407 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) \
1408 { \
1409 unsigned short sel = RestoreOS2FS(); \
1410 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); \
1411 SetFS(sel); \
1412 } \
1413 \
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)
1415
1416
1417/* ---------- 12 parameters ---------- */
1418#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) \
1419 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); \
1420 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) \
1421 { \
1422 unsigned short sel = RestoreOS2FS(); \
1423 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
1424 SetFS(sel); \
1425 return rc; \
1426 } \
1427 \
1428 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)
1429
1430#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) \
1431 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); \
1432 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) \
1433 { \
1434 unsigned short sel = RestoreOS2FS(); \
1435 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); \
1436 SetFS(sel); \
1437 } \
1438 \
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)
1440
1441
1442/* ---------- 13 parameters ---------- */
1443#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) \
1444 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); \
1445 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) \
1446 { \
1447 unsigned short sel = RestoreOS2FS(); \
1448 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
1449 SetFS(sel); \
1450 return rc; \
1451 } \
1452 \
1453 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)
1454
1455#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) \
1456 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); \
1457 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) \
1458 { \
1459 unsigned short sel = RestoreOS2FS(); \
1460 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); \
1461 SetFS(sel); \
1462 } \
1463 \
1464 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)
1465
1466
1467/* ---------- 14 parameters ---------- */
1468#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) \
1469 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); \
1470 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) \
1471 { \
1472 unsigned short sel = RestoreOS2FS(); \
1473 cRet rc = ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
1474 SetFS(sel); \
1475 return rc; \
1476 } \
1477 \
1478 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)
1479
1480#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) \
1481 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); \
1482 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) \
1483 { \
1484 unsigned short sel = RestoreOS2FS(); \
1485 ODIN_##cName(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); \
1486 SetFS(sel); \
1487 } \
1488 \
1489 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)
1490
1491
1492#endif /* _ODINWRAP_H_ */
Note: See TracBrowser for help on using the repository browser.