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

modelist.c File Reference

#include <string.h>
#include <assert.h>
#include "modelist.h"
#include "ram.h"
#include "errorlog.h"

Go to the source code of this file.

Defines

#define MODELIST_MAX_NAME   (1000)
#define MODELIST_ALLOCATION_BLOCK_SIZE   (10)

Functions

void ModeList_Destroy (ModeList *List)
ModeListModeList_Create (geEngine *Engine, int *ListLength)

Variables

char * ModeList_640WindowString = "640x480 Window"
char * ModeList_320WindowString = "320x240 Window"
char * ModeList_800WindowString = "800x600 Window"


Define Documentation

#define MODELIST_ALLOCATION_BLOCK_SIZE   (10)
 

Definition at line 23 of file modelist.c.

Referenced by ModeList_Create().

#define MODELIST_MAX_NAME   (1000)
 

Definition at line 22 of file modelist.c.

Referenced by ModeList_Create().


Function Documentation

ModeList* ModeList_Create geEngine Engine,
int *  ListLength
 

Definition at line 37 of file modelist.c.

References ModeList::Driver, ModeList::DriverNamePtr, ModeList::DriverType, Engine, ModeList::Evaluation, GE_FALSE, GE_TRUE, geDriver_GetName(), geDriver_GetNextMode(), geDriver_ModeGetName(), geDriver_ModeGetWidthHeight(), geDriver_System, geDriver_SystemGetNextDriver(), geEngine_GetDriverSystem(), geErrorLog_AddString, geRam_Realloc, ModeList::Height, ModeList::InAWindow, ModeList::Mode, ModeList_320WindowString, ModeList_640WindowString, ModeList_800WindowString, MODELIST_ALLOCATION_BLOCK_SIZE, ModeList_Destroy(), ModeList_DriverType, MODELIST_EVALUATED_OK, MODELIST_EVALUATED_TRIED_FAILED, MODELIST_EVALUATED_UNDESIRABLE, MODELIST_MAX_NAME, MODELIST_TYPE_D3D_3DFX, MODELIST_TYPE_D3D_PRIMARY, MODELIST_TYPE_D3D_SECONDARY, MODELIST_TYPE_GLIDE, MODELIST_TYPE_SOFTWARE, MODELIST_TYPE_UNKNOWN, ModeList::ModeNamePtr, NULL, and ModeList::Width.

Referenced by WinMain().

00038 {
00039         geDriver_System *DriverSystem;
00040         geDriver                *Driver;
00041         geDriver_Mode   *Mode;
00042         ModeList                *DriverList=NULL;
00043         ModeList                *NewDriverList;
00044         int                              Allocated = 0;
00045         int                              Needed    = 0;
00046         const char              *DriverNamePtr;
00047         const char              *ModeNamePtr;
00048         char                     DriverName[MODELIST_MAX_NAME];
00049         char                     ModeName[MODELIST_MAX_NAME];
00050 
00051         *ListLength = 0;
00052         DriverSystem = geEngine_GetDriverSystem(Engine);
00053         if      (DriverSystem == NULL)
00054                 {
00055                         geErrorLog_AddString(-1,"AutoSelect: Failed to get driver system",NULL);
00056                         goto ModeList_Exit;
00057                 }
00058                 
00059         Driver = geDriver_SystemGetNextDriver(DriverSystem, NULL);
00060         while   (Driver != NULL)
00061         {
00062                 ModeList *      dinfo;
00063                 ModeList_DriverType DriverType;
00064 
00065                 if (geDriver_GetName(Driver, &DriverNamePtr)==GE_FALSE)
00066                         {
00067                                 geErrorLog_AddString(-1,"AutoSelect: Failed to get driver name",NULL);
00068                                 goto ModeList_Exit;
00069                         }
00070                 strncpy(DriverName,DriverNamePtr,MODELIST_MAX_NAME);
00071                 DriverName[MODELIST_MAX_NAME-1]=0;              // just in case
00072                 strupr(DriverName);
00073                 if (strstr(DriverName,"D3D")!=NULL)
00074                         {
00075                                 /*
00076                                 if (  (strstr(DriverName,"3DFX")!=NULL) || (strstr(DriverName,"VOODOO")!=NULL) )
00077                                         {
00078                                                 DriverType = MODELIST_TYPE_D3D_3DFX;
00079                                         }
00080                                 else
00081                                 */
00082                                         {
00083                                                 if (strstr(DriverName,"PRIMARY")!=NULL)
00084                                                         DriverType = MODELIST_TYPE_D3D_PRIMARY;
00085                                                 else
00086                                                         DriverType = MODELIST_TYPE_D3D_SECONDARY;
00087                                         }
00088                         }
00089                 else if (strstr(DriverName,"GLIDE")!=NULL)
00090                         {
00091                                 DriverType = MODELIST_TYPE_GLIDE;
00092                         }
00093                 else if (strstr(DriverName,"SOFT") != NULL)
00094                         {
00095                                 DriverType = MODELIST_TYPE_SOFTWARE;
00096                         }
00097                 else 
00098                         {
00099                                 DriverType = MODELIST_TYPE_UNKNOWN;
00100                         }
00101                 
00102 
00103                 Mode = geDriver_GetNextMode(Driver, NULL);
00104                 while   (Mode != NULL)
00105                 {
00106                         if (geDriver_ModeGetName(Mode, &ModeNamePtr)==GE_FALSE)
00107                                 {
00108                                         geErrorLog_AddString(-1,"AutoSelect: Failed to get mode name",NULL);
00109                                         goto ModeList_Exit;
00110                                 }
00111 
00112                         Needed++;
00113                         if (Allocated<Needed)
00114                                 {
00115                                         Allocated += MODELIST_ALLOCATION_BLOCK_SIZE;
00116                                         NewDriverList = geRam_Realloc(DriverList,sizeof(ModeList) * Allocated);
00117                                         if (NewDriverList == NULL)
00118                                                 {
00119                                                         geErrorLog_AddString(-1,"AutoSelect: Memory allocation failed",NULL);
00120                                                         goto ModeList_Exit;
00121                                                 }
00122                                         DriverList = NewDriverList;
00123                                 }
00124                         dinfo = &(DriverList[Needed-1]);
00125                         dinfo->DriverNamePtr = DriverNamePtr;
00126                         dinfo->ModeNamePtr   = ModeNamePtr;
00127                         dinfo->Driver = Driver;
00128                         dinfo->Mode = Mode;
00129                         dinfo->DriverType = DriverType;
00130                         if (!geDriver_ModeGetWidthHeight(Mode, &(dinfo->Width), &(dinfo->Height)))
00131                                 {
00132                                         geErrorLog_AddString(-1,"AutoSelect: Failed to get mode width & height.  (recovering)",ModeNamePtr);
00133                                         dinfo->Evaluation = MODELIST_EVALUATED_TRIED_FAILED;
00134                                 }
00135                         if ((dinfo->Width<=640) && (dinfo->Height<=480))
00136                                 {
00137                                         dinfo->Evaluation = MODELIST_EVALUATED_OK;
00138                                 }
00139                         else
00140                                 {
00141                                         dinfo->Evaluation = MODELIST_EVALUATED_UNDESIRABLE;
00142                                 }
00143                         if (dinfo->DriverType == MODELIST_TYPE_D3D_3DFX)
00144                                 {
00145                                         dinfo->Evaluation = MODELIST_EVALUATED_UNDESIRABLE;
00146                                 }
00147 
00148                         if ((dinfo->Width == -1) && (dinfo->Height==-1))
00149                                 {
00150                                         // add some 'virtual modes'  for software window preselected resolutions
00151                                         
00152                                         dinfo->InAWindow = GE_TRUE;
00153                                         dinfo->ModeNamePtr   = ModeList_800WindowString;
00154                                         dinfo->Width = 800;
00155                                         dinfo->Height = 600;
00156                                         dinfo->Evaluation = MODELIST_EVALUATED_UNDESIRABLE;
00157                         
00158                                         Needed++;
00159                                         if (Allocated<Needed)
00160                                                 {
00161                                                         Allocated += MODELIST_ALLOCATION_BLOCK_SIZE;
00162                                                         NewDriverList = geRam_Realloc(DriverList,sizeof(ModeList) * Allocated);
00163                                                         if (NewDriverList == NULL)
00164                                                                 {
00165                                                                         geErrorLog_AddString(-1,"AutoSelect: Memory allocation failed",NULL);
00166                                                                         goto ModeList_Exit;
00167                                                                 }
00168                                                         DriverList = NewDriverList;
00169                                                 }
00170                                         dinfo = &(DriverList[Needed-1]);
00171                                         dinfo->InAWindow = GE_TRUE;
00172                                         dinfo->DriverNamePtr = DriverNamePtr;
00173                                         dinfo->ModeNamePtr   = ModeList_640WindowString;
00174                                         dinfo->Driver = Driver;
00175                                         dinfo->Mode = Mode;
00176                                         dinfo->DriverType = DriverType;
00177                                         dinfo->Width = 640;
00178                                         dinfo->Height = 480;
00179                                         dinfo->Evaluation = MODELIST_EVALUATED_OK;
00180 
00181                                         Needed++;
00182                                         if (Allocated<Needed)
00183                                                 {
00184                                                         Allocated += MODELIST_ALLOCATION_BLOCK_SIZE;
00185                                                         NewDriverList = geRam_Realloc(DriverList,sizeof(ModeList) * Allocated);
00186                                                         if (NewDriverList == NULL)
00187                                                                 {
00188                                                                         geErrorLog_AddString(-1,"AutoSelect: Memory allocation failed",NULL);
00189                                                                         goto ModeList_Exit;
00190                                                                 }
00191                                                         DriverList = NewDriverList;
00192                                                 }
00193                                         dinfo = &(DriverList[Needed-1]);
00194                                         dinfo->InAWindow = GE_TRUE;
00195                                         dinfo->DriverNamePtr = DriverNamePtr;
00196                                         dinfo->ModeNamePtr   = ModeList_320WindowString;
00197                                         dinfo->Driver = Driver;
00198                                         dinfo->Mode = Mode;
00199                                         dinfo->DriverType = DriverType;
00200                                         dinfo->Width = 320;
00201                                         dinfo->Height = 240;
00202                                         dinfo->Evaluation = MODELIST_EVALUATED_OK;
00203 
00204                                 }
00205                         else
00206                                 {
00207                                         strncpy(ModeName,ModeNamePtr,MODELIST_MAX_NAME);
00208                                         ModeName[MODELIST_MAX_NAME-1]=0;                // just in case
00209                                         strupr(ModeName);
00210                                         if (strstr(ModeName,"WIN")!=NULL)
00211                                                 {
00212                                                         dinfo->InAWindow = GE_TRUE;
00213                                                 }
00214                                         else
00215                                                 {
00216                                                         dinfo->InAWindow = GE_FALSE;
00217                                                 }
00218                                 }
00219 
00220                         
00221                         Mode = geDriver_GetNextMode(Driver, Mode);
00222                 }
00223                 Driver = geDriver_SystemGetNextDriver(DriverSystem, Driver);
00224         }
00225 
00226         
00227         *ListLength = Needed;
00228         return DriverList;
00229         
00230         ModeList_Exit:
00231         
00232         if (DriverList!=NULL)
00233                 {
00234                         ModeList_Destroy(DriverList);
00235                 }
00236                         
00237         return NULL;
00238 }

void ModeList_Destroy ModeList List  ) 
 

Definition at line 30 of file modelist.c.

References geRam_Free, and List.

Referenced by ModeList_Create().

00031 {
00032         assert( List );
00033         geRam_Free( List );
00034 }


Variable Documentation

char* ModeList_320WindowString = "320x240 Window" [static]
 

Definition at line 26 of file modelist.c.

Referenced by ModeList_Create().

char* ModeList_640WindowString = "640x480 Window" [static]
 

Definition at line 25 of file modelist.c.

Referenced by ModeList_Create().

char* ModeList_800WindowString = "800x600 Window" [static]
 

Definition at line 27 of file modelist.c.

Referenced by ModeList_Create().


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