#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) |
| ModeList * | ModeList_Create (geEngine *Engine, int *ListLength) |
Variables | |
| char * | ModeList_640WindowString = "640x480 Window" |
| char * | ModeList_320WindowString = "320x240 Window" |
| char * | ModeList_800WindowString = "800x600 Window" |
|
|
Definition at line 23 of file modelist.c. Referenced by ModeList_Create(). |
|
|
Definition at line 22 of file modelist.c. Referenced by ModeList_Create(). |
|
||||||||||||
|
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 }
|
|
|
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 }
|
|
|
Definition at line 26 of file modelist.c. Referenced by ModeList_Create(). |
|
|
Definition at line 25 of file modelist.c. Referenced by ModeList_Create(). |
|
|
Definition at line 27 of file modelist.c. Referenced by ModeList_Create(). |
1.3.2