DOS/OpenWatcom woes

This commit is contained in:
dborca
2004-10-05 14:54:44 +00:00
parent 8bb1bb352d
commit 12ba1ce38b
8 changed files with 383 additions and 31 deletions

View File

@@ -107,7 +107,10 @@ h5: Voodoo Banshee, Velocity 100/200, Voodoo3/4/5
Req: DJGPP 2.04 (gcc 3.3.3, make 3.80)
Build: make -f Makefile.DJ FX_GLIDE_HW=h5 [...]
DOS/OpenWatcom N/A
DOS/OpenWatcom working
Req: OpenWatcom 1.2, GNU make 3.80
Build: cd h5/glide3/src
make -f Makefile.wat FX_GLIDE_HW=h5 [...]
Linux DRI working, DGA needs testing, CINIT broken
Req: gcc

View File

@@ -3,6 +3,9 @@
*
* $Header$
* $Log$
* Revision 1.1.2.9 2003/08/04 12:45:47 dborca
* Preparing for MinGW 2.0
*
* Revision 1.1.2.8 2003/07/29 10:04:32 dborca
* Shamelessness.
* Safeguard in CPUID.
@@ -255,6 +258,8 @@ notamd:
}
#endif
#ifndef __WATCOMC__
/* stupid watcom does not sigill... */
if (dwFeature & _MMX_FEATURE_BIT) {
feature |= _CPU_FEATURE_MMX;
os_support |= has_feature(_CPU_FEATURE_MMX);
@@ -279,6 +284,7 @@ notamd:
feature |= _CPU_FEATURE_SSE2;
os_support |= has_feature(_CPU_FEATURE_SSE2);
}
#endif
if (pinfo) {
memset(pinfo, 0, sizeof(_p_info));

View File

@@ -526,7 +526,11 @@
#include <cpuid.h>
/* local */
#ifdef __WATCOMC__
#define GR_CDECL __cdecl
#else
#define GR_CDECL
#endif
#include "g3ext.h"
#include "fxcmd.h"
#include "gsfc.h"
@@ -547,15 +551,15 @@
#define WIN32_LEANER_AND_MEANER
#include <windows.h>
#else
FxBool fxSplashInit (FxU32 hWnd,
FxU32 screenWidth, FxU32 screenHeight,
FxU32 numColBuf, FxU32 numAuxBuf,
GrColorFormat_t colorFormat);
void fxSplashShutdown (void);
void fxSplash (float x, float y, float w, float h, FxU32 frameNumber);
const void *fxSplashPlug (FxU32* w, FxU32* h,
FxI32* strideInBytes,
GrLfbWriteMode_t* format);
FxBool FX_CALL fxSplashInit (FxU32 hWnd,
FxU32 screenWidth, FxU32 screenHeight,
FxU32 numColBuf, FxU32 numAuxBuf,
GrColorFormat_t colorFormat);
void FX_CALL fxSplashShutdown (void);
void FX_CALL fxSplash (float x, float y, float w, float h, FxU32 frameNumber);
const void * FX_CALL fxSplashPlug (FxU32* w, FxU32* h,
FxI32* strideInBytes,
GrLfbWriteMode_t* format);
#endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */
/* -----------------------------------------------------------------------
@@ -1374,7 +1378,7 @@ void FX_CSTYLE _grDrawVertexList_SSE_Clip(FxU32 pktype, FxU32 type, FxI32 mode,
/* Define this structure otherwise it assumes the structure only exists
within the function */
struct GrGC_s;
#endif /* (GLIDE_PLATFORM & GLIDE_OS_UNIX) || defined(__DJGPP__) */
#endif /* __GNUC__ */
/* _GlideRoot.curTexProcs is an array of (possibly specialized)
* function pointers indexed by texture format size (8/16 bits for
@@ -2187,6 +2191,13 @@ extern GrGCFuncs _curGCFuncs;
* This is the __linux__ code.
*/
#define P6FENCE asm("xchg %%eax, %0" : : "m" (_GlideRoot.p6Fencer) : "eax");
#elif defined(__WATCOMC__)
void
p6Fence(void);
#pragma aux p6Fence = \
"xchg eax, dword ptr _GlideRoot" \
modify [eax];
#define P6FENCE p6Fence()
#else /* !defined ( P6FENCE ) */
# error "P6 Fencing code needs to be added for this compiler"
#endif /* !defined ( P6FENCE ) */
@@ -2349,11 +2360,23 @@ _trisetup_noclip_valid(const void *va, const void *vb, const void *vc );
#define TRISETUP \
__asm(""::"d"(gc)); \
(*gc->triSetupProc)
#else /* (GLIDE_PLATFORM & GLIDE_OS_UNIX) || defined(__DJGPP__) */
#elif defined(__WATCOMC__)
extern void wat_trisetup (void *gc, const void *a, const void *b, const void *c);
#pragma aux wat_trisetup = \
"push ecx" \
"push ebx" \
"push eax" \
parm [edx] [eax] [ebx] [ecx];
#define TRISETUP(_a, _b, _c) \
do { \
wat_trisetup(gc, _a, _b, _c); \
((FxI32 (*)(void))*gc->triSetupProc)(); \
} while (0)
#else
#define TRISETUP \
(*gc->triSetupProc)
#endif
void
void GR_CDECL
_grValidateState();
void FX_CSTYLE
@@ -2782,10 +2805,10 @@ extern FxU32 threadValueLinux;
#define getThreadValueFast() threadValueLinux
#endif /* defined(GLIDE_PLATFORM & GLIDE_OS_UNIX) */
#ifdef __DJGPP__
extern FxU32 threadValueDJGPP;
#if (GLIDE_PLATFORM & GLIDE_OS_DOS32)
extern FxU32 GR_CDECL threadValueDJGPP;
#define getThreadValueFast() threadValueDJGPP
#endif /* defined(__DJGPP__) */
#endif /* DOS32 */
#define CUR_TRI_PROC(__checkValidP, __cullP) \
(*gc->archDispatchProcs.coorModeTriVector)[__checkValidP][__cullP]

View File

@@ -188,7 +188,7 @@ static FxU16 *fxPlugData;
void fxSplashShutdown (void)
void FX_CALL fxSplashShutdown (void)
{
#if GLIDE_PLUG
if (fxPlugData != NULL) {
@@ -200,10 +200,10 @@ void fxSplashShutdown (void)
FxBool fxSplashInit (FxU32 hWnd,
FxU32 screenWidth, FxU32 screenHeight,
FxU32 numColBuf, FxU32 numAuxBuf,
GrColorFormat_t colorFormat)
FxBool FX_CALL fxSplashInit (FxU32 hWnd,
FxU32 screenWidth, FxU32 screenHeight,
FxU32 numColBuf, FxU32 numAuxBuf,
GrColorFormat_t colorFormat)
{
#if GLIDE_PLUG
if (fxPlugData == NULL) {
@@ -397,9 +397,9 @@ FxBool fxSplashInit (FxU32 hWnd,
const void *fxSplashPlug (FxU32* w, FxU32* h,
FxI32* strideInBytes,
GrLfbWriteMode_t* format)
const void * FX_CALL fxSplashPlug (FxU32* w, FxU32* h,
FxI32* strideInBytes,
GrLfbWriteMode_t* format)
{
#if GLIDE_PLUG
*w = fxPlugWidth;
@@ -414,7 +414,7 @@ const void *fxSplashPlug (FxU32* w, FxU32* h,
void fxSplash (float x, float y, float w, float h, FxU32 frameNumber)
void FX_CALL fxSplash (float x, float y, float w, float h, FxU32 frameNumber)
{
}

View File

@@ -19,6 +19,12 @@
**
** $Header$
** $Log$
** Revision 1.7.4.18 2004/04/28 17:40:51 koolsmoky
** Removed registry path from GETENV.
** Removed FX_GLIDE_AA_PIXELCENTER, FX_GLIDE_AA_JITTERDISP, FX_GLIDE_AA_GRIDROTATION, and FX_GLIDE_FORCE_SST0.
** Removed FX_GL_LFBLOCK_HACK and FX_GLIDE_USE_HWC_AA_FOR_LFB_READ.
** Moved _grSstDetectResources into _GlideInitEnvironment so that it will not be called everytime _grGlideInit is called.
**
** Revision 1.7.4.17 2003/10/14 15:04:07 dborca
** fixed minihwc; conditioned context checking; added Texus2 to Glide3
**
@@ -471,8 +477,8 @@
movl %%eax, (%%edi) \n\
.p2align 3,,7 \n\
5:"::"g"(src), "g"(dst), "g"(width):"%eax", "%ecx", "%esi", "%edi")
#else
#elif defined(__MSC__)
#define MMX_RESET() __asm { emms }
@@ -646,6 +652,162 @@
__asm align 8 \
__asm finish_mmx_dstline4: \
}
#elif defined(__WATCOMC__)
#define MMX_RESET() __asm { emms }
/* Desc: copy one row of pixels
*
* In : length = number of bytes (pixels*bytesperpixel). Must be even (which
* holds true, because we don't support 8bit. Also the existing
* code assumes this, so this won't be a problem.
* src = source buffer
* dst = destination buffer
*
* Note: Aligns src (LFB) before copying. Clobbers eax, ecx, esi, edi
*/
extern void MMX_SRCLINE(FxU32 *src, FxU32 *dst, FxI32 length);
#pragma aux MMX_SRCLINE = \
"cmp ecx, 8" \
"jb small_move" \
"test esi, 2" \
"jz check4" \
"mov ax, [esi]" \
"add esi, 2" \
"mov [edi], ax" \
"add edi, 2" \
"sub ecx, 2" \
"check4:" \
"test esi, 4" \
"jz aligned8" \
"mov eax, [esi]" \
"add esi, 4" \
"mov [edi], eax" \
"add edi, 4" \
"sub ecx, 4" \
"aligned8:" \
"mov eax, ecx" \
"and ecx, 7" \
"shr eax, 3" \
"jz small_move" \
"big_move:" \
"movq mm0, [esi]" \
"add esi, 8" \
"movq [edi], mm0" \
"add edi, 8" \
"dec eax" \
"jnz big_move" \
"small_move:" \
"test ecx, 4" \
"jz check2" \
"mov eax, [esi]" \
"add esi, 4" \
"mov [edi], eax" \
"add edi, 4" \
"check2:" \
"test ecx, 2" \
"jz finish" \
"mov ax, [esi]" \
"mov [edi], ax" \
"finish:" \
parm [esi] [edi] [ecx] \
modify [eax ecx esi edi];
/* Desc: copy one row of 16bit pixels
*
* In : width = number of pixels
* src = source buffer
* dst = destination buffer
*
* Note: Aligns dst (LFB) before copying. Clobbers eax, ecx, esi, edi
*/
extern void MMX_DSTLINE2(FxU32 *src, FxU32 *dst, FxU32 width);
#pragma aux MMX_DSTLINE2 = \
"cmp ecx, 4" \
"jb small_move_mmx_dstline2"\
"test edi, 2" \
"jz check4_mmx_dstline2"\
"mov ax, [esi]" \
"add esi, 2" \
"mov [edi], ax" \
"add edi, 2" \
"dec ecx" \
"check4_mmx_dstline2:" \
"test edi, 4" \
"jz aligned8_mmx_dstline2"\
"mov eax, [esi]" \
"add esi, 4" \
"mov [edi], eax" \
"add edi, 4" \
"sub ecx, 2" \
"aligned8_mmx_dstline2:" \
"mov eax, ecx" \
"and ecx, 3" \
"shr eax, 2" \
"jz small_move_mmx_dstline2"\
"big_move_mmx_dstline2:" \
"movq mm0, [esi]" \
"add esi, 8" \
"movq [edi], mm0" \
"add edi, 8" \
"dec eax" \
"jnz big_move_mmx_dstline2"\
"small_move_mmx_dstline2:" \
"test ecx, 2" \
"jz check2_mmx_dstline2"\
"mov eax, [esi]" \
"add esi, 4" \
"mov [edi], eax" \
"add edi, 4" \
"check2_mmx_dstline2:" \
"test ecx, 1" \
"jz finish_mmx_dstline2"\
"mov ax, [esi]" \
"mov [edi], ax" \
"finish_mmx_dstline2:" \
parm [esi] [edi] [ecx] \
modify [eax ecx esi edi];
/* Desc: copy one row of 32bit pixels
*
* In : width = number of pixels
* src = source buffer
* dst = destination buffer
*
* Note: Aligns dst (LFB) before copying. Clobbers eax, ecx, esi, edi
*/
extern void MMX_DSTLINE4(FxU32 *src, FxU32 *dst, FxU32 width);
#pragma aux MMX_DSTLINE4 = \
"cmp ecx, 2" \
"jb small_move_mmx_dstline4"\
"test edi, 4" \
"jz aligned8_mmx_dstline4"\
"mov eax, [esi]" \
"add esi, 4" \
"mov [edi], eax" \
"add edi, 4" \
"dec ecx" \
"aligned8_mmx_dstline4:" \
"mov eax, ecx" \
"and ecx, 1" \
"shr eax, 1" \
"jz small_move_mmx_dstline4"\
"big_move_mmx_dstline4:" \
"movq mm0, [esi]" \
"add esi, 8" \
"movq [edi], mm0" \
"add edi, 8" \
"dec eax" \
"jnz big_move_mmx_dstline4" \
"small_move_mmx_dstline4:" \
"test ecx, 1" \
"jz finish_mmx_dstline4"\
"mov eax, [esi]" \
"mov [edi], eax" \
"finish_mmx_dstline4:" \
parm [esi] [edi] [ecx] \
modify [eax ecx esi edi];
#endif
@@ -796,7 +958,7 @@
.p2align 3,,7 \n\
5:"::"g"(src), "g"(dst), "g"(width):"%eax", "%ecx", "%esi", "%edi")
#else
#elif defined(__MSC__)
#define FPU_SRCLINE(src, dst, length) __asm {\
__asm mov ecx, length \
@@ -943,6 +1105,134 @@
__asm finish_fpu_dstline4: \
}
#elif defined(__WATCOMC__)
extern void FPU_SRCLINE(FxU32 *src, FxU32 *dst, FxI32 length);
#pragma aux FPU_SRCLINE = \
"cmp ecx, 8" \
"jb small_move_fpu_srcline"\
"test esi, 2" \
"jz check4_fpu_srcline"\
"mov ax, [esi]" \
"add esi, 2" \
"mov [edi], ax" \
"add edi, 2" \
"sub ecx, 2" \
"check4_fpu_srcline:" \
"test esi, 4" \
"jz aligned8_fpu_srcline"\
"mov eax, [esi]" \
"add esi, 4" \
"mov [edi], eax" \
"add edi, 4" \
"sub ecx, 4" \
"aligned8_fpu_srcline:" \
"mov eax, ecx" \
"and ecx, 7" \
"shr eax, 3" \
"jz small_move_fpu_srcline"\
"big_move_fpu_srcline:" \
"fild qword ptr [esi]"\
"add esi, 8" \
"fistp qword ptr [edi]"\
"add edi, 8" \
"dec eax" \
"jnz big_move_fpu_srcline"\
"small_move_fpu_srcline:" \
"test ecx, 4" \
"jz check2_fpu_srcline"\
"mov eax, [esi]" \
"add esi, 4" \
"mov [edi], eax" \
"add edi, 4" \
"check2_fpu_srcline:" \
"test ecx, 2" \
"jz finish_fpu_srcline"\
"mov ax, [esi]" \
"mov [edi], ax" \
"finish_fpu_srcline:" \
parm [esi] [edi] [ecx] \
modify [eax ecx esi edi];
extern void FPU_DSTLINE2(FxU32 *src, FxU32 *dst, FxI32 length);
#pragma aux FPU_DSTLINE2 = \
"cmp ecx, 4" \
"jb small_move_fpu_dstline2"\
"test edi, 2" \
"jz check4_fpu_dstline2" \
"mov ax, [esi]" \
"add esi, 2" \
"mov [edi], ax" \
"add edi, 2" \
"dec ecx" \
"check4_fpu_dstline2:" \
"test edi, 4" \
"jz aligned8_fpu_dstline2"\
"mov eax, [esi]" \
"add esi, 4" \
"mov [edi], eax" \
"add edi, 4" \
"sub ecx, 2" \
"aligned8_fpu_dstline2:" \
"mov eax, ecx" \
"and ecx, 3" \
"shr eax, 2" \
"jz small_move_fpu_dstline2"\
"big_move_fpu_dstline2:" \
"fild qword ptr [esi]"\
"add esi, 8" \
"fistp qword ptr [edi]"\
"add edi, 8" \
"dec eax" \
"jnz big_move_fpu_dstline2"\
"small_move_fpu_dstline2:" \
"test ecx, 2" \
"jz check2_fpu_dstline2"\
"mov eax, [esi]" \
"add esi, 4" \
"mov [edi], eax" \
"add edi, 4" \
"check2_fpu_dstline2:" \
"test ecx, 1" \
"jz finish_fpu_dstline2"\
"mov ax, [esi]" \
"mov [edi], ax" \
"finish_fpu_dstline2:" \
parm [esi] [edi] [ecx] \
modify [eax ecx esi edi];
extern void FPU_DSTLINE4(FxU32 *src, FxU32 *dst, FxI32 length);
#pragma aux FPU_DSTLINE4 = \
"cmp ecx, 2" \
"jb small_move_fpu_dstline4"\
"test edi, 4" \
"jz aligned8_fpu_dstline4"\
"mov eax, [esi]" \
"add esi, 4" \
"mov [edi], eax" \
"add edi, 4" \
"dec ecx" \
"aligned8_fpu_dstline4:" \
"mov eax, ecx" \
"and ecx, 1" \
"shr eax, 1" \
"jz small_move_fpu_dstline4"\
"big_move_fpu_dstline4:" \
"fild qword ptr [esi]"\
"add esi, 8" \
"fistp qword ptr [edi]"\
"add edi, 8" \
"dec eax" \
"jnz big_move_fpu_dstline4"\
"small_move_fpu_dstline4:" \
"test ecx, 1" \
"jz finish_fpu_dstline4"\
"mov eax, [esi]" \
"mov [edi], eax" \
"finish_fpu_dstline4:" \
parm [esi] [edi] [ecx] \
modify [eax ecx esi edi];
#endif

View File

@@ -194,7 +194,11 @@ FxBool checkResolutions (FxBool *supportedByResolution, FxU32 stride, void *hmon
}
#ifdef __WATCOMC__
#include "h3cini~1.h"
#else
#include "h3cinitdd.h"
#endif
#define CFG_READ(_chip, _offset) \
hwcReadConfigRegister(bInfo, _chip, offsetof(SstPCIConfigRegs, _offset))

View File

@@ -8,7 +8,13 @@
#include <unistd.h> /*usleep*/
#include "minihwc.h"
#ifdef __WATCOMC__
#include <i86.h>
#include "h3cini~1.h"
#define usleep(x) delay((x) / 1000)
#else
#include "h3cinitdd.h"
#endif

View File

@@ -869,15 +869,17 @@ typedef struct sli_aa_request {
} SLI_AA_REQUEST, * PSLI_AA_REQUEST;
#endif
#if defined(__DJGPP__) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
#if (GLIDE_PLATFORM & GLIDE_OS_DOS32) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
#define _aligned_malloc(a, b) malloc(a)
#define _aligned_free free
/* don't like macros, because of side-effects */
#ifndef __WATCOMC__
static __inline int min (int x, int y)
{
return (x > y) ? y : x;
}
#endif
#endif
#ifdef __GNUC__
@@ -957,6 +959,14 @@ static __inline int min (int x, int y)
movl %%eax, %0 \n\
movl %%edx, %1 \n\
":"+a"(s), "+d"(dst):"D"(src_width), "g"(stride_diff));
#elif defined(__WATCOMC__)
#define MMX_RESET()
#define MMX_SETUP2(ar, gb, ar1m, gb1m, ar2m, gb2m)
#define MMX_LOOP2(s, dst, src_width, stride_diff)
#define MMX_SETUP4()
#define MMX_LOOP4(s, dst, src_width, stride_diff)
#else
#define MMX_RESET() __asm { _asm emms }
@@ -5415,7 +5425,7 @@ hwcInitVideo(hwcBoardInfo *bInfo, FxBool tiled, FxVideoTimingInfo *vidTiming,
HWC_IO_STORE(bInfo->regInfo, pciInit0, pciInit0);
}
#if defined(__DJGPP__) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
#if (GLIDE_PLATFORM & GLIDE_OS_DOS32) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
HWC_IO_STORE(bInfo->regInfo, vidProcCfg, vidProcCfg | SST_VIDEO_PROCESSOR_EN);
#endif
@@ -6280,6 +6290,7 @@ static void hwcReadRegion565(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
0x00001080, /* a=00000000 r=10000100 */
0x10401080 /* g=10000010 b=10000100 */
);
#elif defined(__WATCOMC__)
#else
__asm {
emms /* mmx */
@@ -6315,6 +6326,7 @@ static void hwcReadRegion565(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
/* This chip owns this scanline. */
#ifdef __GNUC__
MMX_LOOP2(s, dst, src_width, stride_diff);
#elif defined(__WATCOMC__)
#else
__asm {
@@ -6436,6 +6448,7 @@ static void hwcReadRegion1555(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
0x00001080, /* a=0000000000 r=1000010000 */
0x10801080 /* g=1000010000 b=1000010000 */
);
#elif defined(__WATCOMC__)
#else
__asm {
emms /* mmx */
@@ -6471,6 +6484,7 @@ static void hwcReadRegion1555(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
/* This chip owns this scanline. */
#ifdef __GNUC__
MMX_LOOP2(s, dst, src_width, stride_diff);
#elif defined(__WATCOMC__)
#else
__asm {
@@ -6586,6 +6600,7 @@ static void hwcReadRegion8888(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
/* MMX Optimized Loop */
#ifdef __GNUC__
MMX_SETUP4();
#elif defined(__WATCOMC__)
#else
__asm {
emms /* mmx */
@@ -6600,6 +6615,7 @@ static void hwcReadRegion8888(hwcBoardInfo *bInfo, FxU32 src, FxU32 src_x, FxU32
{
#ifdef __GNUC__
MMX_LOOP4(s, dst, src_width, stride_diff);
#elif defined(__WATCOMC__)
#else
/* This chip owns this scanline. */
__asm {
@@ -6975,6 +6991,7 @@ static void hwcCopyBuffer8888Flipped(hwcBoardInfo *bInfo, FxU16 *source, int w,
:
:"a"(src), "d"(dst), "D"(endline), "S"(end), "m"(w)
:"%ebx", "%ecx");
#elif defined(__WATCOMC__)
#else
__asm
{
@@ -7112,6 +7129,7 @@ static void hwcCopyBuffer8888FlippedShifted(hwcBoardInfo *bInfo, FxU16 *source,
:
:"a"(src), "d"(dst), "D"(endline), "S"(end), "m"(w), "m"(aaShift)
:"%ebx", "%ecx");
#elif defined(__WATCOMC__)
#else
__asm
{
@@ -7377,6 +7395,7 @@ static void hwcCopyBuffer8888FlippedDithered(hwcBoardInfo *bInfo, FxU16 *source,
:
:"a"(src), "d"(dst), "D"(endline), "S"(end), "m"(w), "m"(dither_mask), "g"(val_max), "m"(aaShift), "c"(sse_mmxplus)
:"%ebx");
#elif defined(__WATCOMC__)
#else
__asm
{
@@ -7859,6 +7878,7 @@ static void hwcCopyBuffer565Shifted(hwcBoardInfo *bInfo, FxU16 *src, int w, int
:
: "a"(src), "d"(dst), "D"(endline), "S"(end), "m"(stride_dest), "m"(stride_diff), "m"(aaShift)
: "%ebx", "%ecx");
#elif defined(__WATCOMC__)
#else
__asm
{
@@ -9105,7 +9125,7 @@ hwcShareContextData(hwcBoardInfo *bInfo, FxU32 **data)
ctxRes.optData.shareContextDWORDRes.contextDWORD);
}
#endif
#if HWC_GDX_INIT || defined(__DJGPP__) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
#if HWC_GDX_INIT || (GLIDE_PLATFORM & GLIDE_OS_DOS32) || (GLIDE_PLATFORM & GLIDE_OS_UNIX)
*data = &dummyContextDWORD;
#endif
return retVal;