Main Page | Alphabetical List | Compound List | File List | Compound Members | File Members

dmodes.h File Reference

#include "basetype.h"

Go to the source code of this file.

Functions

void GetDDrawPixelFormat (DRV_Window *cwnd)
LPDIRECTDRAWSURFACE4 DDrawLoadSurface (U32 dwWidth, U32 dwHeight, const void *pixels, const char *pal)
geBoolean LockDDrawBackBuffer (DRV_Window *cwnd, RECT *wrect)
geBoolean UnlockDDrawBackBuffer (DRV_Window *cwnd, RECT *wrect)
geBoolean RefreshDDraw (DRV_Window *cwnd, VidModeList *cmode, RECT *src, RECT *dst)
void ClearBackBuffer (DRV_Window *cwnd)
geBoolean DDrawBlitDecal (LPDIRECTDRAWSURFACE4 lpDDSDecal, RECT *SRect, S32 x, S32 y)
geBoolean DDrawBlitDecalDelayed (LPDIRECTDRAWSURFACE4 lpDDSDecal, RECT *SRect, S32 x, S32 y)
geBoolean DDrawBlitDecalToFront (LPDIRECTDRAWSURFACE4 lpDDSDecal, RECT *SRect, S32 x, S32 y)
geBoolean DRIVERCC DrvSetActive (geBoolean wParam)
void SetDDrawWindow (HWND hwnd)
geBoolean SetDDrawMode (U32 top, VidEnumInfo *vinfo)
geBoolean DoDDrawInit (HWND hwnd, VidEnumInfo *vinfo)
geBoolean DoModeEnumeration (VidEnumInfo *vinfo)
geBoolean DoEnumeration (VidEnumInfo *vinfo)
void FreeDDraw (VidEnumInfo *vinfo)

Variables

geBoolean bWindowed
geBoolean bActive
geBoolean bBackLocked


Function Documentation

void ClearBackBuffer DRV_Window cwnd  ) 
 

Definition at line 1455 of file dmodes.c.

References bActive, lpDDSBack, and NULL.

Referenced by BeginScene().

01456 {
01457         DDBLTFX                 bfx;
01458 
01459         if(!bActive)
01460         {
01461                 return;
01462         }
01463 
01464         memset(&bfx, 0, sizeof(bfx));
01465         bfx.dwSize              =sizeof(bfx);
01466         bfx.dwFillColor =0;
01467 
01468         lpDDSBack->lpVtbl->Blt(lpDDSBack, NULL, NULL, NULL, DDBLT_COLORFILL, &bfx);
01469 }

geBoolean DDrawBlitDecal LPDIRECTDRAWSURFACE4  lpDDSDecal,
RECT SRect,
S32  x,
S32  y
 

Definition at line 1287 of file dmodes.c.

References tagRECT::bottom, ErrorPrintf(), FALSE, tagRECT::left, lpDDSBack, MyErrorToString(), NULL, RestoreAll(), tagRECT::right, tagRECT::top, TRUE, U32, and y.

01288 {
01289         HRESULT                 ddrval;
01290         DDSURFACEDESC2  ddsd;
01291         RECT                    rDest;
01292         char                    szTemp[256];
01293 
01294         //make sure the back buffer is unlocked (for stretch)
01295 /*      if(bBackLocked)
01296         {
01297                 ddrval  =lpDDSBack->lpVtbl->Unlock(lpDDSBack, NULL);
01298                 if(ddrval!=DD_OK && ddrval!=DDERR_NOTLOCKED)
01299                 {
01300                         ErrorPrintf(MyErrorToString(ddrval));
01301                         return  TRUE;
01302                 }
01303         }
01304         bBackLocked     =FALSE;
01305 */
01306 
01307         if(SRect)
01308         {
01309                 rDest.left      =x;
01310                 rDest.top       =y;
01311                 rDest.right     =x + (SRect->right - SRect->left);
01312                 rDest.bottom=y + (SRect->bottom- SRect->top);
01313         }
01314         else
01315         {
01316                 memset(&ddsd, 0, sizeof(DDSCAPS2));
01317                 ddsd.dwSize     =sizeof(ddsd);
01318                 ddsd.dwFlags=DDSD_HEIGHT | DDSD_WIDTH;
01319                 lpDDSDecal->lpVtbl->GetSurfaceDesc(lpDDSDecal, &ddsd);
01320 
01321                 rDest.left      =x;
01322                 rDest.top       =y;
01323                 rDest.right     =x + ddsd.dwWidth;
01324                 rDest.bottom=y + ddsd.dwHeight;
01325         }
01326 
01327         ddrval  =DD_OK;
01328         while(1)
01329         {
01330                 if(SRect)
01331                 {
01332                         ddrval  =lpDDSBack->lpVtbl->Blt(lpDDSBack, &rDest, lpDDSDecal, SRect, DDBLT_WAIT | DDBLT_KEYSRC, NULL);
01333                 }
01334                 else
01335                 {
01336                         ddrval  =lpDDSBack->lpVtbl->Blt(lpDDSBack, &rDest, lpDDSDecal, NULL, DDBLT_WAIT | DDBLT_KEYSRC, NULL);
01337                 }
01338                 if(ddrval==DD_OK)
01339                         break;
01340 
01341                 if(ddrval==DDERR_SURFACELOST)
01342                 {
01343                         ddrval  =RestoreAll();
01344                         if(ddrval!=DD_OK)
01345                         {
01346                                 ErrorPrintf("Error During Blt() in DDrawBltDecal()...\n");
01347                                 ErrorPrintf("DirectDraw Surfaces were lost and could not be restored : %s\n", MyErrorToString(ddrval));
01348                                 return  FALSE;
01349                         }
01350                 }
01351                 else if(ddrval!=DDERR_WASSTILLDRAWING)
01352                 {
01353                         ErrorPrintf("Error During Blt() in DDrawBltDecal() : %s\n", MyErrorToString(ddrval));
01354                         if(SRect)
01355                         {
01356                                 sprintf(szTemp, "SLeft:%d, STop:%d, SRight:%d, SBottom:%d\n", SRect->left, SRect->top, SRect->right, SRect->bottom);
01357                                 ErrorPrintf(szTemp);
01358                         }
01359                         sprintf(szTemp, "DLeft:%d, DTop:%d, DRight:%d, DBottom:%d\n%x", rDest.left, rDest.top, rDest.right, rDest.bottom, (U32)lpDDSDecal);
01360                         ErrorPrintf(szTemp);
01361                         return  FALSE;
01362                 }
01363         }
01364         return  TRUE;
01365 }

geBoolean DDrawBlitDecalDelayed LPDIRECTDRAWSURFACE4  lpDDSDecal,
RECT SRect,
S32  x,
S32  y
 

Definition at line 1434 of file dmodes.c.

References DecalQ, NumDecalsQd, TRUE, and y.

01435 {
01436         DecalQ[NumDecalsQd].surf        =lpDDSDecal;
01437         if(SRect)
01438         {
01439                 DecalQ[NumDecalsQd].srect       =*SRect;
01440         }
01441         else
01442         {
01443                 DecalQ[NumDecalsQd].srect.left  =-1;
01444         }
01445         DecalQ[NumDecalsQd].x           =x;
01446         DecalQ[NumDecalsQd].y           =y;
01447 
01448         if(NumDecalsQd < 8191)
01449         {
01450                 NumDecalsQd++;
01451         }
01452         return  TRUE;
01453 }

geBoolean DDrawBlitDecalToFront LPDIRECTDRAWSURFACE4  lpDDSDecal,
RECT SRect,
S32  x,
S32  y
 

Definition at line 1367 of file dmodes.c.

References tagRECT::bottom, ErrorPrintf(), FALSE, tagRECT::left, lpDDSPrimary, MyErrorToString(), NULL, RestoreAll(), tagRECT::right, tagRECT::top, TRUE, U32, and y.

01368 {
01369         HRESULT                 ddrval;
01370         DDSURFACEDESC2  ddsd;
01371         RECT                    rDest;
01372         char                    szTemp[256];
01373 
01374         if(SRect)
01375         {
01376                 rDest.left      =x;
01377                 rDest.top       =y;
01378                 rDest.right     =x + (SRect->right - SRect->left);
01379                 rDest.bottom=y + (SRect->bottom- SRect->top);
01380         }
01381         else
01382         {
01383                 memset(&ddsd, 0, sizeof(DDSCAPS2));
01384                 ddsd.dwSize     =sizeof(ddsd);
01385                 ddsd.dwFlags=DDSD_HEIGHT | DDSD_WIDTH;
01386                 lpDDSDecal->lpVtbl->GetSurfaceDesc(lpDDSDecal, &ddsd);
01387 
01388                 rDest.left      =x;
01389                 rDest.top       =y;
01390                 rDest.right     =x + ddsd.dwWidth;
01391                 rDest.bottom=y + ddsd.dwHeight;
01392         }
01393 
01394         ddrval  =DD_OK;
01395         while(1)
01396         {
01397                 if(SRect)
01398                 {
01399                         ddrval  =lpDDSPrimary->lpVtbl->Blt(lpDDSPrimary, &rDest, lpDDSDecal, SRect, DDBLT_WAIT | DDBLT_KEYSRC, NULL);
01400                 }
01401                 else
01402                 {
01403                         ddrval  =lpDDSPrimary->lpVtbl->Blt(lpDDSPrimary, &rDest, lpDDSDecal, NULL, DDBLT_WAIT | DDBLT_KEYSRC, NULL);
01404                 }
01405                 if(ddrval==DD_OK)
01406                         break;
01407 
01408                 if(ddrval==DDERR_SURFACELOST)
01409                 {
01410                         ddrval  =RestoreAll();
01411                         if(ddrval!=DD_OK)
01412                         {
01413                                 ErrorPrintf("Error During Blt() in DDrawBltDecalToFront()...\n");
01414                                 ErrorPrintf("DirectDraw Surfaces were lost and could not be restored : %s\n", MyErrorToString(ddrval));
01415                                 return  FALSE;
01416                         }
01417                 }
01418                 else if(ddrval!=DDERR_WASSTILLDRAWING)
01419                 {
01420                         ErrorPrintf("Error During Blt() in DDrawBltDecalToFront() : %s\n", MyErrorToString(ddrval));
01421                         if(SRect)
01422                         {
01423                                 sprintf(szTemp, "SLeft:%d, STop:%d, SRight:%d, SBottom:%d\n", SRect->left, SRect->top, SRect->right, SRect->bottom);
01424                                 ErrorPrintf(szTemp);
01425                         }
01426                         sprintf(szTemp, "DLeft:%d, DTop:%d, DRight:%d, DBottom:%d\n%x", rDest.left, rDest.top, rDest.right, rDest.bottom, (U32)lpDDSDecal);
01427                         ErrorPrintf(szTemp);
01428                         return  FALSE;
01429                 }
01430         }
01431         return  TRUE;
01432 }

LPDIRECTDRAWSURFACE4 DDrawLoadSurface U32  dwWidth,
U32  dwHeight,
const void *  pixels,
const char *  pal
 

Definition at line 1045 of file dmodes.c.

References lpDD4, NULL, S32, U32, and U8.

01046 {
01047         LPDIRECTDRAWSURFACE4    lpDDS;
01048         DDSURFACEDESC2                  ddsd;
01049         HRESULT                                 ddrval;
01050         int                                             i;
01051         
01052         memset(&ddsd, 0, sizeof(DDSURFACEDESC2));
01053         ddsd.dwSize                     =sizeof(DDSURFACEDESC2);
01054         ddsd.dwFlags            =DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_CKSRCBLT;
01055         ddsd.ddsCaps.dwCaps     =DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
01056         ddsd.dwHeight           =dwHeight;
01057         ddsd.dwWidth            =dwWidth;
01058 
01059         ddsd.ddckCKSrcBlt.dwColorSpaceLowValue  =((((U8 *)pal)[765])<<16)
01060                                                                                         |((((U8 *)pal)[766])<<8)
01061                                                                                         |(((U8 *)pal)[767]);
01062         ddsd.ddckCKSrcBlt.dwColorSpaceHighValue =((((U8 *)pal)[765])<<16)
01063                                                                                         |((((U8 *)pal)[766])<<8)
01064                                                                                         |(((U8 *)pal)[767]);
01065 
01066         
01067         ddrval  =lpDD4->lpVtbl->CreateSurface(lpDD4, &ddsd, &lpDDS, NULL);
01068 
01069         if(ddrval != DD_OK)
01070         {
01071                 return  NULL;
01072         }
01073         
01074         memset(&ddsd, 0, sizeof(DDSURFACEDESC2));
01075         ddsd.dwSize     =sizeof(DDSURFACEDESC2);
01076         ddrval          =lpDDS->lpVtbl->Lock(lpDDS, NULL, &ddsd, DDLOCK_WAIT, NULL);
01077         
01078         if(ddrval != DD_OK)
01079         {
01080                 lpDDS->lpVtbl->Release(lpDDS);
01081                 return  NULL;
01082         }
01083 
01084         for(i=0;i < (S32)(dwHeight * dwWidth);i++)
01085         {
01086                 ((U32 *)ddsd.lpSurface)[i]      =(((U8 *)pal)[(((U8 *)pixels)[i]) * 3])<<16
01087                                                                         |((((U8 *)pal)[((((U8 *)pixels)[i]) * 3)+1])<<8)
01088                                                                         |((((U8 *)pal)[((((U8 *)pixels)[i]) * 3)+2])<<0);
01089         }
01090 
01091         lpDDS->lpVtbl->Unlock(lpDDS, NULL);
01092         
01093         return  lpDDS;
01094 }

geBoolean DoDDrawInit HWND  hwnd,
VidEnumInfo vinfo
 

Definition at line 795 of file dmodes.c.

References bInitDone, ddrawinst, ErrorPrintf(), FALSE, lpDD, lpDD4, LPDIRECTDRAWCREATE, mhWnd, MyErrorToString(), NULL, NumDecalsQd, SetDDrawWindow(), and TRUE.

Referenced by DrvInit().

00796 {
00797         LPDIRECTDRAWCREATE      lpDDCreate;
00798         HRESULT                         ddrval;
00799 
00800         bInitDone       =FALSE;
00801         ddrawinst       =LoadLibrary("ddraw.dll");
00802 
00803         if(!ddrawinst)
00804         {
00805                 return  FALSE;
00806         }
00807         SetDDrawWindow(hwnd);
00808 
00809         lpDDCreate      =(LPDIRECTDRAWCREATE)GetProcAddress(ddrawinst, "DirectDrawCreate");
00810         if(lpDDCreate)
00811         {
00812                 ddrval  =lpDDCreate(NULL, &lpDD, NULL);
00813         }
00814         else
00815         {
00816                 return  DDENUMRET_CANCEL;
00817         }
00818 
00819         if(ddrval!=DD_OK)
00820         {
00821                 ErrorPrintf("Non Fatal Error During DirectDrawCreate() in DoDDrawInit()\n%s\n", MyErrorToString(ddrval));
00822                 return  FALSE;
00823         }
00824 
00825         ddrval = lpDD->lpVtbl->QueryInterface(lpDD, &IID_IDirectDraw4, (LPVOID *)&lpDD4);
00826         if(ddrval!=DD_OK)
00827         {
00828                 ErrorPrintf("Non Fatal Error During QueryInterface() in DoDDrawInit()\n%s\n", MyErrorToString(ddrval));
00829                 return  FALSE;
00830         }
00831         
00832         lpDD->lpVtbl->Release(lpDD);
00833         lpDD    =NULL;
00834 
00835         ddrval  =lpDD4->lpVtbl->SetCooperativeLevel(lpDD4, mhWnd,
00836                         DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
00837         if(ddrval!=DD_OK)
00838         {
00839                 ErrorPrintf("Non Fatal Error During SetCooperativeLevel() in DoDDrawInit()\n%s\n", MyErrorToString(ddrval));
00840                 return  FALSE;
00841         }
00842         FreeLibrary(ddrawinst);
00843 
00844         bInitDone       =TRUE;
00845         NumDecalsQd     =0;
00846         return          TRUE;   
00847 }

geBoolean DoEnumeration VidEnumInfo vinfo  ) 
 

Definition at line 850 of file dmodes.c.

References bInitDone, ddrawinst, VidEnumInfoTag::DeviceGuid, VidEnumInfoTag::DeviceInfo, VidEnumInfoTag::DeviceInfoHost, ErrorPrintf(), FALSE, LPDIRECTDRAWCREATE, MyErrorToString(), NULL, NumDevices, and TRUE.

Referenced by DrvInit().

00851 {
00852         LPDIRECTDRAWCREATE      lpDDCreate;
00853         LPDIRECTDRAW            pDD;
00854         LPDIRECTDRAW4           pDD4    =NULL;
00855         HRESULT                         hRet;
00856         bInitDone                       =FALSE;
00857 
00858 
00859         ddrawinst       =LoadLibrary("ddraw.dll");
00860 
00861         if(!ddrawinst)
00862         {
00863                 return  FALSE;
00864         }
00865 
00866         lpDDCreate      =(LPDIRECTDRAWCREATE)GetProcAddress(ddrawinst, "DirectDrawCreate");
00867         if(lpDDCreate)
00868         {
00869                 hRet    =lpDDCreate(NULL, &pDD, NULL);
00870         }
00871         else
00872         {
00873                 return  DDENUMRET_CANCEL;
00874         }
00875         
00876         vinfo->DeviceGuid       =NULL;
00877         
00878         if(hRet != DD_OK)
00879         {
00880                 ErrorPrintf("Non Fatal Error During DirectDrawCreate() in DoEnumeration()\n%s\n", MyErrorToString(hRet));
00881                 return  DDENUMRET_CANCEL;
00882         }
00883         memset(&vinfo->DeviceInfo, 0, sizeof(vinfo->DeviceInfo));
00884         memset(&vinfo->DeviceInfoHost, 0, sizeof(vinfo->DeviceInfo));
00885 
00886         hRet    =pDD->lpVtbl->QueryInterface(pDD, &IID_IDirectDraw4, (LPVOID *)&pDD4);
00887         if(hRet != DD_OK)
00888         {
00889                 ErrorPrintf("Non Fatal Error During QueryInterface() in DoEnumeration()\n%s\n", MyErrorToString(hRet));
00890                 return  DDENUMRET_CANCEL;
00891         }
00892         
00893         hRet    =pDD4->lpVtbl->GetDeviceIdentifier(pDD4, &vinfo->DeviceInfo,0);
00894         hRet    =pDD4->lpVtbl->GetDeviceIdentifier(pDD4, &vinfo->DeviceInfoHost, DDGDI_GETHOSTIDENTIFIER);
00895         
00896         if(pDD4)
00897         {
00898                 pDD4->lpVtbl->Release(pDD4);
00899         }
00900 
00901         FreeLibrary(ddrawinst);
00902         
00903         if(NumDevices < 16)
00904         {
00905                 NumDevices++;
00906         }
00907         else
00908         {
00909                 return  DDENUMRET_CANCEL;
00910         }
00911         return  DDENUMRET_OK;
00912 
00913         return  TRUE;   
00914 }

geBoolean DoModeEnumeration VidEnumInfo vinfo  ) 
 

Definition at line 916 of file dmodes.c.

References bDMA, bDMAPageLock, bHardBlt, bInitDone, ddrawinst, ErrorPrintf(), FALSE, lpDD, lpDD4, LPDIRECTDRAWCREATE, ModeCallback(), MyErrorToString(), NULL, and TRUE.

Referenced by DrvInit(), and EnumModes().

00917 {
00918         LPDIRECTDRAWCREATE      lpDDCreate;
00919         HRESULT                         ddrval;
00920         DDCAPS                          ddcaps;
00921 
00922         bInitDone               =FALSE;
00923 
00924         ddrawinst       =LoadLibrary("ddraw.dll");
00925 
00926         if(!ddrawinst)
00927         {
00928                 return  FALSE;
00929         }
00930 
00931         lpDDCreate      =(LPDIRECTDRAWCREATE)GetProcAddress(ddrawinst, "DirectDrawCreate");
00932         if(lpDDCreate)
00933         {
00934                 ddrval  =lpDDCreate(NULL, &lpDD, NULL);
00935         }
00936         else
00937         {
00938                 return  DDENUMRET_CANCEL;
00939         }
00940 
00941         if(ddrval != DD_OK)
00942         {
00943                 ErrorPrintf("DirectDrawCreate FAILED : DoModeEnumeration\n%s\n", MyErrorToString(ddrval));
00944                 return 0;
00945         }
00946 
00947         ddrval = lpDD->lpVtbl->QueryInterface(lpDD, &IID_IDirectDraw4, (LPVOID *)&lpDD4);
00948         if(ddrval != DD_OK)
00949         {
00950                 ErrorPrintf("QueryInterface FAILED : DoModeEnumeration\n%s\n", MyErrorToString(ddrval));
00951                 return 0;
00952         }
00953         
00954         lpDD->lpVtbl->Release(lpDD);
00955         lpDD    =NULL;
00956 
00957         //test for general dma support
00958         memset(&ddcaps, 0, sizeof(DDCAPS));
00959         ddcaps.dwSize   =sizeof(ddcaps);
00960         lpDD4->lpVtbl->GetCaps(lpDD4, &ddcaps, NULL);
00961 
00962         if(ddcaps.dwCaps & DDCAPS_CANBLTSYSMEM)
00963         {
00964                 ErrorPrintf("System to video blits supported\n");
00965                 if(ddcaps.dwVSBCaps & DDCAPS_BLTQUEUE)
00966                 {
00967                         ErrorPrintf("DMA Asynch Video to System blits supported\n");
00968                 }
00969                 if(ddcaps.dwSSBCaps & DDCAPS_BLTQUEUE)
00970                 {
00971                         ErrorPrintf("DMA Asynch System to System blits supported\n");
00972                 }
00973                 if(ddcaps.dwSVBCaps & DDCAPS_BLTQUEUE)
00974                 {
00975                         bDMA    =TRUE;
00976 
00977                         ErrorPrintf("DMA Asynch System to Video blits supported\n");
00978                         if(ddcaps.dwCaps & DDCAPS2_NOPAGELOCKREQUIRED)
00979                         {
00980                                 ErrorPrintf("DMA Asynch page lock not required\n");
00981                         }
00982                         else
00983                         {
00984                                 bDMAPageLock    =TRUE;
00985                                 ErrorPrintf("DMA Asynch page lock required\n");
00986                         }
00987                 }
00988         }
00989         if(ddcaps.dwCaps2 & DDCAPS_BLT)
00990         {
00991                 ErrorPrintf("Hardware Blt supported\n");
00992                 bHardBlt        =TRUE;
00993         }
00994 
00995         //commented code below used for heavy mode testing
00996 //      ddrval  =lpDD4->lpVtbl->SetCooperativeLevel(lpDD4, ActiveWnd,
00997 //              DDSCL_ALLOWMODEX | DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
00998 //      if(ddrval != DD_OK)
00999 //      {
01000 //              return 0;
01001 //      }
01002         lpDD4->lpVtbl->EnumDisplayModes(lpDD4, 0, NULL, (LPVOID)vinfo, ModeCallback);
01003 
01004 //      SortDDrawVideoModeList(vinfo);
01005 
01006         lpDD4->lpVtbl->Release(lpDD4);
01007         lpDD4           =NULL;
01008 
01009         FreeLibrary(ddrawinst);
01010 
01011         return          TRUE;   
01012 }

geBoolean DRIVERCC DrvSetActive geBoolean  wParam  ) 
 

Definition at line 186 of file GlideDrv.c.

References bActive, bInitDone, DRIVERCC, ErrorPrintf(), GE_TRUE, geBoolean, lpDDSPrimary, mhWnd, and RestoreAll().

00187 {
00188         return  GE_TRUE;
00189 }

void FreeDDraw VidEnumInfo vinfo  ) 
 

Definition at line 146 of file dmodes.c.

References VidEnumInfoTag::CurrentVidMode, ddrawinst, FLIP, lpDD4, lpDDSBack, lpDDSPrimary, NULL, and VidEnumInfoTag::VidModes.

Referenced by DrvShutdown().

00147 {
00148         int     x       =0;
00149 
00150         if(lpDD4)
00151         {
00152                 if(vinfo->VidModes[vinfo->CurrentVidMode].current & FLIP)
00153                 {
00154                         lpDDSBack       =NULL;
00155                 }
00156                 else
00157                 {
00158                         if(lpDDSBack)
00159                         {
00160                                 lpDDSBack->lpVtbl->Release(lpDDSBack);
00161                                 lpDDSBack       =NULL;
00162                         }
00163                 }
00164                 if(lpDDSPrimary)
00165                 {
00166                         lpDDSPrimary->lpVtbl->Release(lpDDSPrimary);
00167                         lpDDSPrimary    =NULL;
00168                 }
00169                 lpDD4->lpVtbl->Release(lpDD4);
00170                 lpDD4   =NULL;
00171         }
00172         FreeLibrary(ddrawinst);
00173 }

void GetDDrawPixelFormat DRV_Window cwnd  ) 
 

Definition at line 1014 of file dmodes.c.

References DRV_Window::B_mask, DRV_Window::B_shift, DRV_Window::B_width, DRV_Window::BytesPerPixel, DRV_Window::G_mask, DRV_Window::G_shift, DRV_Window::G_width, lpDDSPrimary, DRV_Window::R_mask, DRV_Window::R_shift, DRV_Window::R_width, and U32.

Referenced by SysInit().

01015 {
01016         DDPIXELFORMAT   ddpf;
01017         U32                             i, j;
01018 
01019         ddpf.dwSize     =sizeof(ddpf);
01020         lpDDSPrimary->lpVtbl->GetPixelFormat(lpDDSPrimary, &ddpf);
01021 
01022         if(!(ddpf.dwFlags & DDPF_RGB))
01023         {
01024                 return;
01025         }
01026         cwnd->BytesPerPixel     =ddpf.dwRGBBitCount / 8;
01027         cwnd->R_mask            =ddpf.dwRBitMask;
01028         cwnd->G_mask            =ddpf.dwGBitMask;
01029         cwnd->B_mask            =ddpf.dwBBitMask;
01030 
01031         for(j=0,i=ddpf.dwRBitMask;!(i & 1);i>>=1,j++);
01032         cwnd->R_shift   =j;
01033 
01034         for(j=0,i=ddpf.dwGBitMask;!(i & 1);i>>=1,j++);
01035         cwnd->G_shift   =j;
01036 
01037         for(j=0,i=ddpf.dwBBitMask;!(i & 1);i>>=1,j++);
01038         cwnd->B_shift   =j;
01039 
01040         for(i=(ddpf.dwRBitMask>>cwnd->R_shift),cwnd->R_width=0;i;i >>= 1, cwnd->R_width++);
01041         for(i=(ddpf.dwGBitMask>>cwnd->G_shift),cwnd->G_width=0;i;i >>= 1, cwnd->G_width++);
01042         for(i=(ddpf.dwBBitMask>>cwnd->B_shift),cwnd->B_width=0;i;i >>= 1, cwnd->B_width++);
01043 }

geBoolean LockDDrawBackBuffer DRV_Window cwnd,
RECT wrect
 

Definition at line 206 of file dmodes.c.

00207 {
00208         HRESULT                 ddrval;
00209         DDSURFACEDESC2  ddsd;
00210 
00211         if(!bActive)
00212                 return TRUE;
00213 
00214         memset(&ddsd, 0, sizeof(DDSCAPS2));
00215         ddsd.dwSize     =sizeof(ddsd);
00216         ddsd.dwFlags=DDSD_HEIGHT | DDSD_WIDTH;
00217 
00218         lpDDSBack->lpVtbl->GetSurfaceDesc(lpDDSBack, &ddsd);
00219         if(((int)ddsd.dwWidth < wrect->right) || ((int)ddsd.dwHeight < wrect->bottom))
00220         {
00221                 ErrorPrintf("ERROR:  World render rect passed by the engine is larger than the drawing surface.\n");
00222                 ErrorPrintf("WorldRect: %d, %d, %d, %d\n", wrect->left, wrect->top, wrect->right, wrect->bottom);
00223                 ErrorPrintf("Surface:  %d, %d\n", ddsd.dwWidth, ddsd.dwHeight);
00224                 return  FALSE;
00225         }
00226 
00227         while(1)
00228         {
00229                 ddrval  =lpDDSBack->lpVtbl->Lock(lpDDSBack, wrect, &ddsd, DDLOCK_SURFACEMEMORYPTR, NULL);
00230                 if(ddrval==DD_OK)
00231                 {
00232                         break;
00233                 }
00234 
00235                 if(ddrval==DDERR_SURFACELOST)
00236                 {
00237                         ddrval  =RestoreAll();
00238                         if(ddrval!=DD_OK )
00239                         {
00240                                 ErrorPrintf("Error During Lock() in LockDDrawBackBuffer()...\n");
00241                                 ErrorPrintf("DirectDraw Surfaces were lost and could not be restored : %s\n", MyErrorToString(ddrval));
00242                                 return  FALSE;
00243                         }
00244                 }
00245                 else if(ddrval!=DDERR_WASSTILLDRAWING)
00246                 {
00247                         ErrorPrintf("Error During Lock() in LockDDrawBackBuffer() : %s\n", MyErrorToString(ddrval));
00248                         return  FALSE;
00249                 }
00250                 SleepEx(5, FALSE);
00251         }
00252         cwnd->Buffer    =(U8 *)ddsd.lpSurface;
00253         cwnd->PixelPitch=ddsd.lPitch;
00254         bBackLocked             =TRUE;
00255         return TRUE;
00256 }

geBoolean RefreshDDraw DRV_Window cwnd,
VidModeList cmode,
RECT src,
RECT dst
 

Definition at line 292 of file dmodes.c.

References bActive, tagRECT::bottom, cmode, VidModeListTag::current, ErrorPrintf(), FALSE, FASTBLT, FLIP, tagRECT::left, lpDDSBack, lpDDSPrimary, MyErrorToString(), NULL, RestoreAll(), tagRECT::right, STRETCHMODE, tagRECT::top, TRUE, and VIDEO.

Referenced by EndScene().

00293 {
00294         HRESULT                 ddrval;
00295         DDSURFACEDESC2  ddsd;
00296 //      int                             i;
00297         RECT                    rDest, rSrc;
00298 
00299         if(!bActive)
00300         {
00301                 return  TRUE;
00302         }
00303 
00304         memset(&ddsd, 0, sizeof(DDSCAPS2));
00305         ddsd.dwSize     =sizeof(ddsd);
00306         ddsd.dwFlags=DDSD_HEIGHT | DDSD_WIDTH;
00307 
00308         lpDDSBack->lpVtbl->GetSurfaceDesc(lpDDSBack, &ddsd);
00309         rDest.left      =rDest.top      =0;
00310         rDest.right     =ddsd.dwWidth-1;
00311         rDest.bottom=ddsd.dwHeight-1;
00312 
00313         memset(&ddsd, 0, sizeof(DDSCAPS2));
00314         ddsd.dwSize     =sizeof(ddsd);
00315         ddsd.dwFlags=DDSD_HEIGHT | DDSD_WIDTH;
00316 
00317         lpDDSPrimary->lpVtbl->GetSurfaceDesc(lpDDSPrimary, &ddsd);
00318         rSrc.left       =rSrc.top       =0;
00319         rSrc.right      =ddsd.dwWidth-1;
00320         rSrc.bottom     =ddsd.dwHeight-1;
00321 
00322         ddrval  =DD_OK;
00323         if((cmode->current & VIDEO) && (cmode->current & FASTBLT))
00324         {
00325                 while(1)
00326                 {
00327                         ddrval  =lpDDSPrimary->lpVtbl->BltFast(lpDDSPrimary, 0, 0, lpDDSBack, NULL, 0);
00328                         if(ddrval==DD_OK)
00329                         {
00330                                 break;
00331                         }
00332 
00333                         if(ddrval==DDERR_SURFACELOST)
00334                         {
00335                                 ddrval  =RestoreAll();
00336                                 if(ddrval!=DD_OK)
00337                                 {
00338                                         ErrorPrintf("Error During BltFast() in RefreshDDraw()...\n");
00339                                         ErrorPrintf("DirectDraw Surfaces were lost and could not be restored : %s\n", MyErrorToString(ddrval));
00340                                         return  FALSE;
00341                                 }
00342                         }
00343                         else if(ddrval!=DDERR_WASSTILLDRAWING)
00344                         {
00345                                 ErrorPrintf("Error During BltFast() in RefreshDDraw() : %s\n", MyErrorToString(ddrval));
00346                                 return  FALSE;
00347                         }
00348                         SleepEx(5, FALSE);
00349                 }
00350         }
00351         else if(cmode->current & FLIP)
00352         {
00353                 while(1)
00354                 {
00355                         ddrval  =lpDDSPrimary->lpVtbl->Flip(lpDDSPrimary, lpDDSBack, DDFLIP_NOVSYNC);
00356                         if(ddrval==DD_OK)
00357                         {
00358                                 break;
00359                         }
00360 
00361                         if(ddrval==DDERR_SURFACELOST)
00362                         {
00363                                 ddrval  =RestoreAll();
00364                                 if(ddrval!=DD_OK)
00365                                 {
00366                                         ErrorPrintf("Error During Flip() in RefreshDDraw()...\n");
00367                                         ErrorPrintf("DirectDraw Surfaces were lost and could not be restored : %s\n", MyErrorToString(ddrval));
00368                                         return  FALSE;
00369                                 }
00370                         }
00371                         else if(ddrval!=DDERR_WASSTILLDRAWING)
00372                         {
00373                                 ErrorPrintf("Error During Flip() in RefreshDDraw() : %s\n", MyErrorToString(ddrval));
00374                                 return  FALSE;
00375                         }
00376                         SleepEx(5, FALSE);
00377                 }
00378         }
00379         else    //safe blt
00380         {
00381                 if(cmode->current & STRETCHMODE)
00382                 {
00383                         while(1)
00384                         {
00385                                 ddrval  =lpDDSPrimary->lpVtbl->Blt(lpDDSPrimary, NULL, lpDDSBack, NULL, 0, NULL);
00386                                 if(ddrval==DD_OK)
00387                                         break;
00388 
00389                                 if(ddrval==DDERR_SURFACELOST)
00390                                 {
00391                                         ddrval  =RestoreAll();
00392                                         if(ddrval!=DD_OK)
00393                                         {
00394                                                 ErrorPrintf("Error During StretchMode Blt() in RefreshDDraw()...\n");
00395                                                 ErrorPrintf("DirectDraw Surfaces were lost and could not be restored : %s\n", MyErrorToString(ddrval));
00396                                                 return  FALSE;
00397                                         }
00398                                 }
00399                                 else if(ddrval!=DDERR_WASSTILLDRAWING)
00400                                 {
00401                                         ErrorPrintf("Error During StretchMode Blt() in RefreshDDraw() : %s\n", MyErrorToString(ddrval));
00402                                         return  FALSE;
00403                                 }
00404                                 SleepEx(5, FALSE);
00405                         }
00406                 }
00407                 else
00408                 {
00409                         while(1)
00410                         {
00411                                 ddrval  =lpDDSPrimary->lpVtbl->Blt(lpDDSPrimary, NULL, lpDDSBack, NULL, 0, NULL);
00412                                 if(ddrval==DD_OK)
00413                                         break;
00414 
00415                                 if(ddrval==DDERR_SURFACELOST)
00416                                 {
00417                                         ddrval  =RestoreAll();
00418                                         if(ddrval!=DD_OK)
00419                                         {
00420                                                 ErrorPrintf("Error During Blt() in RefreshDDraw()...\n");
00421                                                 ErrorPrintf("DirectDraw Surfaces were lost and could not be restored : %s\n", MyErrorToString(ddrval));
00422                                                 return  FALSE;
00423                                         }
00424                                 }
00425                                 else if(ddrval!=DDERR_WASSTILLDRAWING)
00426                                 {
00427                                         ErrorPrintf("Error During Blt() in RefreshDDraw() : %s\n", MyErrorToString(ddrval));
00428                                         return  FALSE;
00429                                 }
00430                                 SleepEx(5, FALSE);
00431                         }
00432                 }
00433         }
00434 /*      for(i=0;i < NumDecalsQd;i++)
00435         {
00436                 if(DecalQ[i].srect.left == -1)
00437                 {
00438                         DDrawBlitDecalToFront(DecalQ[i].surf, NULL, DecalQ[i].x, DecalQ[i].y); 
00439                 }
00440                 else
00441                 {
00442                         DDrawBlitDecalToFront(DecalQ[i].surf, &DecalQ[i].srect, DecalQ[i].x, DecalQ[i].y); 
00443                 }
00444         }
00445         NumDecalsQd     =0;*/
00446         return TRUE;
00447 }

geBoolean SetDDrawMode U32  top,
VidEnumInfo vinfo
 

Definition at line 453 of file dmodes.c.

References VidModeListTag::bpp, VidModeListTag::current, CurrentModeDepth, CurrentModeHeight, CurrentModeWidth, FASTBLT, VidModeListTag::flags, FLIP, GE_FALSE, GE_TRUE, geBoolean, VidModeListTag::height, lpDD4, lpDDSBack, lpDDSPrimary, MODEXMODE, NULL, VidModeListTag::pitch, SAFEBLT, STRETCHMODE, SYSTEM, VIDEO, VidEnumInfoTag::VidModes, and VidModeListTag::width.

Referenced by DrvInit().

00454 {
00455         HRESULT                 ddrval;
00456         DDSURFACEDESC2  ddsd;
00457         DDSCAPS2                ddscaps;
00458 
00459         if(vinfo->VidModes[top].flags & STRETCHMODE)
00460         {
00461                 if((vinfo->VidModes[top].width > 640)
00462                         ||((vinfo->VidModes[top].width == 640)
00463                         &&(vinfo->VidModes[top].height > 480)))
00464                 {
00465                         ddrval  =lpDD4->lpVtbl->SetDisplayMode(lpDD4, vinfo->VidModes[top].width, vinfo->VidModes[top].height, vinfo->VidModes[top].bpp, 0, 0);
00466                 }
00467                 else
00468                 {
00469                         ddrval  =lpDD4->lpVtbl->SetDisplayMode(lpDD4, 640, 480, vinfo->VidModes[top].bpp, 0, 0);
00470                 }
00471                 vinfo->VidModes[top].current    |=STRETCHMODE;
00472         }
00473         else
00474         {
00475                 ddrval  =lpDD4->lpVtbl->SetDisplayMode(lpDD4, vinfo->VidModes[top].width, vinfo->VidModes[top].height, vinfo->VidModes[top].bpp, 0, 0);
00476         }
00477         if(ddrval != DD_OK)
00478         {
00479                 return  GE_FALSE;
00480         }
00481         CurrentModeHeight       =vinfo->VidModes[top].height;
00482         CurrentModeWidth        =vinfo->VidModes[top].width;
00483         CurrentModeDepth        =vinfo->VidModes[top].bpp;
00484 
00485         if(!(vinfo->VidModes[top].flags & MODEXMODE))
00486         {
00487                 memset(&ddsd, 0, sizeof(DDSURFACEDESC2));
00488                 ddsd.dwSize                     =sizeof(ddsd);
00489                 ddsd.dwFlags            =DDSD_CAPS;
00490                 ddsd.ddsCaps.dwCaps     =DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY;
00491 
00492                 ddrval  =lpDD4->lpVtbl->CreateSurface(lpDD4, &ddsd, &lpDDSPrimary, NULL);
00493                 if(ddrval==DD_OK)
00494                 {
00495                         memset(&ddsd, 0, sizeof(DDSURFACEDESC2));
00496                         ddsd.dwSize             =sizeof(ddsd);
00497                         ddsd.dwFlags    =DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
00498                         ddsd.ddsCaps.dwCaps     =DDSCAPS_SYSTEMMEMORY;
00499                         if(vinfo->VidModes[top].flags & STRETCHMODE)
00500                         {
00501                                 if((vinfo->VidModes[top].width > 640)
00502                                         ||((vinfo->VidModes[top].width == 640)
00503                                         &&(vinfo->VidModes[top].height > 480)))
00504                                 {
00505                                         ddsd.dwHeight   =640;
00506                                         ddsd.dwWidth    =480;
00507                                 }
00508                                 else
00509                                 {
00510                                         ddsd.dwHeight   =vinfo->VidModes[top].height;
00511                                         ddsd.dwWidth    =vinfo->VidModes[top].width;
00512                                 }
00513                         }
00514                         else
00515                         {
00516                                 ddsd.dwHeight   =vinfo->VidModes[top].height;
00517                                 ddsd.dwWidth    =vinfo->VidModes[top].width;
00518                         }
00519 
00520                         ddrval  =lpDD4->lpVtbl->CreateSurface(lpDD4, &ddsd, &lpDDSBack, NULL);
00521                         if(ddrval==DD_OK)
00522                         {
00523                                 //need to grab pitch here since it can change
00524                                 //depending on where the surface is created
00525                                 memset(&ddsd, 0, sizeof(DDSCAPS2));
00526                                 ddsd.dwSize     =sizeof(ddsd);
00527                                 ddsd.dwFlags=DDSD_HEIGHT | DDSD_WIDTH;
00528                                 lpDDSBack->lpVtbl->GetSurfaceDesc(lpDDSBack, &ddsd);
00529                                 vinfo->VidModes[top].pitch      =ddsd.lPitch;
00530 
00531                                 //both were created, make sure they are in vidram
00532                                 memset(&ddscaps, 0, sizeof(DDSCAPS2));
00533                                 lpDDSPrimary->lpVtbl->GetCaps(lpDDSPrimary, &ddscaps);
00534                                 if(ddscaps.dwCaps & DDSCAPS_VIDEOMEMORY)
00535                                 {
00536                                         memset(&ddscaps, 0, sizeof(DDSCAPS2));
00537                                         lpDDSBack->lpVtbl->GetCaps(lpDDSBack, &ddscaps);
00538                                         if(ddscaps.dwCaps & DDSCAPS_VIDEOMEMORY)
00539                                         {
00540                                                 //both are good to go
00541                                                 vinfo->VidModes[top].current    |=VIDEO;
00542 
00543                                                 //mark fastblt unless it's stretching
00544                                                 if(!(vinfo->VidModes[top].flags & STRETCHMODE))
00545                                                 {
00546                                                         vinfo->VidModes[top].current    |=FASTBLT;
00547                                                 }
00548                                         }
00549                                 }
00550                         }
00551                 }
00552                 else if(!(vinfo->VidModes[top].current & VIDEO)
00553                         && !(vinfo->VidModes[top].current & STRETCHMODE))
00554                 {
00555                         if(lpDDSBack)           lpDDSBack->lpVtbl->Release(lpDDSBack);
00556                         if(lpDDSPrimary)        lpDDSPrimary->lpVtbl->Release(lpDDSPrimary);
00557 
00558                         memset(&ddsd, 0, sizeof(DDSURFACEDESC2));
00559                         ddsd.dwSize                     =sizeof(ddsd);
00560                         ddsd.dwFlags            =DDSD_CAPS;
00561                         ddsd.ddsCaps.dwCaps     =DDSCAPS_PRIMARYSURFACE;
00562 
00563                         ddrval  =lpDD4->lpVtbl->CreateSurface(lpDD4, &ddsd, &lpDDSPrimary, NULL);
00564                         if(ddrval==DD_OK)
00565                         {
00566                                 memset(&ddsd, 0, sizeof(DDSURFACEDESC2));
00567                                 ddsd.dwSize             =sizeof(ddsd);
00568                                 ddsd.dwFlags    =DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
00569                                 ddsd.dwHeight   =vinfo->VidModes[top].height;
00570                                 ddsd.dwWidth    =vinfo->VidModes[top].width;
00571 
00572                                 ddrval  =lpDD4->lpVtbl->CreateSurface(lpDD4, &ddsd, &lpDDSBack, NULL);
00573                                 if(ddrval==DD_OK)
00574                                 {
00575                                         //need to grab pitch here since it can change
00576                                         //depending on where the surface is created
00577                                         memset(&ddsd, 0, sizeof(DDSCAPS2));
00578                                         ddsd.dwSize     =sizeof(ddsd);
00579                                         ddsd.dwFlags=DDSD_HEIGHT | DDSD_WIDTH;
00580                                         lpDDSBack->lpVtbl->GetSurfaceDesc(lpDDSBack, &ddsd);
00581                                         vinfo->VidModes[top].pitch      =ddsd.lPitch;
00582 
00583                                         //both were created good enough
00584                                         vinfo->VidModes[top].current    |=SYSTEM|SAFEBLT;
00585                                 }
00586                         }
00587                 }
00588         }       //flip 
00589         if((vinfo->VidModes[top].flags & MODEXMODE)     || lpDDSBack==NULL)
00590         {
00591                 if(lpDDSBack)           lpDDSBack->lpVtbl->Release(lpDDSBack);
00592                 if(lpDDSPrimary)        lpDDSPrimary->lpVtbl->Release(lpDDSPrimary);
00593 
00594                 //try flip
00595                 memset(&ddsd, 0, sizeof(DDSURFACEDESC2));
00596                 ddsd.dwSize                             =sizeof(ddsd);
00597                 ddsd.dwFlags                    =DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
00598                 ddsd.ddsCaps.dwCaps             =DDSCAPS_PRIMARYSURFACE |
00599                                                                         DDSCAPS_COMPLEX | DDSCAPS_FLIP;
00600                 ddsd.dwBackBufferCount  =1;
00601 
00602                 ddrval  =lpDD4->lpVtbl->CreateSurface(lpDD4, &ddsd, &lpDDSPrimary, NULL);
00603                 if(ddrval==DD_OK)
00604                 {
00605                         memset(&ddscaps, 0, sizeof(DDSCAPS2));
00606                         ddscaps.dwCaps  =DDSCAPS_BACKBUFFER;
00607                         ddrval  =lpDDSPrimary->lpVtbl->GetAttachedSurface(lpDDSPrimary, &ddscaps, &lpDDSBack);
00608                         if(ddrval==DD_OK)
00609                         {
00610                                 //need to grab pitch here since it can change
00611                                 //depending on where the surface is created
00612                                 memset(&ddsd, 0, sizeof(DDSCAPS2));
00613                                 ddsd.dwSize     =sizeof(ddsd);
00614                                 ddsd.dwFlags=DDSD_HEIGHT | DDSD_WIDTH;
00615                                 lpDDSBack->lpVtbl->GetSurfaceDesc(lpDDSBack, &ddsd);
00616                                 vinfo->VidModes[top].pitch      =ddsd.lPitch;
00617 
00618                                 vinfo->VidModes[top].current    |=SYSTEM|FLIP;
00619                         }
00620                 }
00621         }
00622 
00623         return  GE_TRUE;
00624 }

void SetDDrawWindow HWND  hwnd  ) 
 

Definition at line 201 of file dmodes.c.

References mhWnd.

Referenced by DoDDrawInit().

00202 {
00203         mhWnd           =hwnd;
00204 }

geBoolean UnlockDDrawBackBuffer DRV_Window cwnd,
RECT wrect
 

Definition at line 258 of file dmodes.c.

References bActive, bBackLocked, ErrorPrintf(), FALSE, lpDDSBack, MyErrorToString(), NULL, RestoreAll(), and TRUE.

Referenced by EndScene().

00259 {
00260         HRESULT                 ddrval  =DD_OK;
00261 
00262         if(!bActive)
00263                 return TRUE;
00264 
00265         while(1)
00266         {
00267                 ddrval  =lpDDSBack->lpVtbl->Unlock(lpDDSBack, NULL);
00268                 if(ddrval==DD_OK)
00269                         break;
00270 
00271                 if(ddrval==DDERR_SURFACELOST)
00272                 {
00273                         ddrval  =RestoreAll();
00274                         if(ddrval!=DD_OK )
00275                         {
00276                                 ErrorPrintf("Error During Unlock() in UnlockDDrawBackBuffer()...\n");
00277                                 ErrorPrintf("DirectDraw Surfaces were lost and could not be restored : %s\n", MyErrorToString(ddrval));
00278                                 return  FALSE;
00279                         }
00280                 }
00281                 else if(ddrval!=DDERR_WASSTILLDRAWING)
00282                 {
00283                         ErrorPrintf("Error During Unlock() in UnlockDDrawBackBuffer() : %s\n", MyErrorToString(ddrval));
00284                         return  FALSE;
00285                 }
00286                 SleepEx(5, FALSE);
00287         }
00288         bBackLocked     =FALSE;
00289         return TRUE;
00290 }


Variable Documentation

geBoolean bActive
 

Definition at line 42 of file dmodes.h.

Referenced by ClearBackBuffer(), DrawDecal(), DrvSetActive(), geEngine_Activate(), LockDDrawBackBuffer(), RefreshDDraw(), RenderGouraudPoly(), RenderMiscTexturePoly(), RenderWorldPoly(), and UnlockDDrawBackBuffer().

geBoolean bBackLocked
 

Definition at line 42 of file dmodes.h.

geBoolean bWindowed
 

Definition at line 42 of file dmodes.h.

Referenced by BeginScene(), DrvInit(), DrvShutdown(), EndScene(), and SysInit().


Generated on Tue Sep 30 12:37:26 2003 for GTestAndEngine by doxygen 1.3.2