tools/installer/GamesList.cpp
author David Anderson <dvander@alliedmods.net>
Sun Oct 28 20:15:51 2007 +0000 (2007-10-28)
changeset 1651 077571ea8942
child 1723 befc8cfb4f3c
permissions -rw-r--r--
initial import of incomplete installer
dvander@1651
     1
#include "GamesList.h"
dvander@1651
     2
#include "InstallerUtil.h"
dvander@1651
     3
#include "InstallerMain.h"
dvander@1651
     4
#include <stdio.h>
dvander@1651
     5
dvander@1651
     6
mod_info_t *g_mod_list = NULL;
dvander@1651
     7
unsigned int g_mod_count = 0;
dvander@1651
     8
dvander@1651
     9
int IsValidFolder(const TCHAR *path)
dvander@1651
    10
{
dvander@1651
    11
	DWORD attr;
dvander@1651
    12
	TCHAR gameinfo_file[MAX_PATH];
dvander@1651
    13
dvander@1651
    14
	UTIL_PathFormat(gameinfo_file, sizeof(gameinfo_file), _T("%s\\gameinfo.txt"), path);
dvander@1651
    15
dvander@1651
    16
	if ((attr = GetFileAttributes(gameinfo_file)) == INVALID_FILE_ATTRIBUTES)
dvander@1651
    17
	{
dvander@1651
    18
		return GAMEINFO_DOES_NOT_EXIST;
dvander@1651
    19
	}
dvander@1651
    20
dvander@1651
    21
	if ((attr & FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY)
dvander@1651
    22
	{
dvander@1651
    23
		return GAMEINFO_IS_READ_ONLY;
dvander@1651
    24
	}
dvander@1651
    25
dvander@1651
    26
	if ((attr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
dvander@1651
    27
	{
dvander@1651
    28
		return GAMEINFO_DOES_NOT_EXIST;
dvander@1651
    29
	}
dvander@1651
    30
dvander@1651
    31
	return GAMEINFO_IS_USABLE;
dvander@1651
    32
}
dvander@1651
    33
dvander@1651
    34
void DisplayBadFolderDialog(HWND hDlg, int reason)
dvander@1651
    35
{
dvander@1651
    36
	TCHAR message_string[255];
dvander@1651
    37
	UINT resource;
dvander@1651
    38
dvander@1651
    39
	if (reason == GAMEINFO_DOES_NOT_EXIST)
dvander@1651
    40
	{
dvander@1651
    41
		resource = IDS_NO_GAMEINFO;
dvander@1651
    42
	}
dvander@1651
    43
	else if (reason == GAMEINFO_IS_READ_ONLY)
dvander@1651
    44
	{
dvander@1651
    45
		resource = IDS_READONLY_GAMEINFO;
dvander@1651
    46
	}
dvander@1651
    47
	else
dvander@1651
    48
	{
dvander@1651
    49
		return;
dvander@1651
    50
	}
dvander@1651
    51
dvander@1651
    52
	if (LoadString(g_hInstance,
dvander@1651
    53
		resource,
dvander@1651
    54
		message_string,
dvander@1651
    55
		sizeof(message_string) / sizeof(TCHAR)
dvander@1651
    56
		) == 0)
dvander@1651
    57
	{
dvander@1651
    58
		return;
dvander@1651
    59
	}
dvander@1651
    60
dvander@1651
    61
	MessageBox(hDlg, 
dvander@1651
    62
		message_string, 
dvander@1651
    63
		_T("SourceMod Installer"),
dvander@1651
    64
		MB_OK|MB_ICONWARNING);
dvander@1651
    65
}
dvander@1651
    66
dvander@1651
    67
void AddModToList(mod_info_t **mod_list,
dvander@1651
    68
				  unsigned int *total_mods,
dvander@1651
    69
				  const mod_info_t *mod_info)
dvander@1651
    70
{
dvander@1651
    71
	mod_info_t *mods = *mod_list;
dvander@1651
    72
	unsigned int total = *total_mods;
dvander@1651
    73
dvander@1651
    74
	if (mods == NULL)
dvander@1651
    75
	{
dvander@1651
    76
		mods = (mod_info_t *)malloc(sizeof(mod_info_t));
dvander@1651
    77
	}
dvander@1651
    78
	else
dvander@1651
    79
	{
dvander@1651
    80
		mods = (mod_info_t *)realloc(mods, sizeof(mod_info_t) * (total + 1));
dvander@1651
    81
	}
dvander@1651
    82
dvander@1651
    83
	memcpy(&mods[total], mod_info, sizeof(mod_info_t));
dvander@1651
    84
	total++;
dvander@1651
    85
dvander@1651
    86
	*mod_list = mods;
dvander@1651
    87
	*total_mods = total;
dvander@1651
    88
}
dvander@1651
    89
dvander@1651
    90
void TryToAddMod(const TCHAR *path, int eng_type, mod_info_t **mod_list, unsigned *total_mods)
dvander@1651
    91
{
dvander@1651
    92
	FILE *fp;
dvander@1651
    93
	TCHAR gameinfo_path[MAX_PATH];
dvander@1651
    94
dvander@1651
    95
	UTIL_PathFormat(gameinfo_path,
dvander@1651
    96
		sizeof(gameinfo_path),
dvander@1651
    97
		_T("%s\\gameinfo.txt"),
dvander@1651
    98
		path);
dvander@1651
    99
dvander@1651
   100
	if ((fp = _tfopen(gameinfo_path, _T("rt"))) == NULL)
dvander@1651
   101
	{
dvander@1651
   102
		return;
dvander@1651
   103
	}
dvander@1651
   104
dvander@1651
   105
	int pos;
dvander@1651
   106
	char buffer[512];
dvander@1651
   107
	char key[256], value[256];
dvander@1651
   108
	while (!feof(fp) && fgets(buffer, sizeof(buffer), fp) != NULL)
dvander@1651
   109
	{
dvander@1651
   110
		if ((pos = BreakStringA(buffer, key, sizeof(key))) == -1)
dvander@1651
   111
		{
dvander@1651
   112
			continue;
dvander@1651
   113
		}
dvander@1651
   114
		if ((pos = BreakStringA(&buffer[pos], value, sizeof(value))) == -1)
dvander@1651
   115
		{
dvander@1651
   116
			continue;
dvander@1651
   117
		}
dvander@1651
   118
		if (strcmp(key, "game") == 0)
dvander@1651
   119
		{
dvander@1651
   120
			mod_info_t mod;
dvander@1651
   121
			AnsiToUnicode(value, mod.name, sizeof(mod.name));
dvander@1651
   122
			UTIL_Format(mod.mod_path, sizeof(mod.mod_path), _T("%s"), path);
dvander@1651
   123
			mod.source_engine = eng_type;
dvander@1651
   124
			AddModToList(mod_list, total_mods, &mod);
dvander@1651
   125
		}
dvander@1651
   126
	}
dvander@1651
   127
dvander@1651
   128
	fclose(fp);
dvander@1651
   129
}
dvander@1651
   130
dvander@1651
   131
void AddModsFromFolder(const TCHAR *path, int eng_type, mod_info_t **mod_list, unsigned int *total_mods)
dvander@1651
   132
{
dvander@1651
   133
	HANDLE hFind;
dvander@1651
   134
	WIN32_FIND_DATA fd;
dvander@1651
   135
	TCHAR temp_path[MAX_PATH];
dvander@1651
   136
	TCHAR search_path[MAX_PATH];
dvander@1651
   137
dvander@1651
   138
	UTIL_Format(search_path,
dvander@1651
   139
		sizeof(search_path),
dvander@1651
   140
		_T("%s\\*.*"),
dvander@1651
   141
		path);
dvander@1651
   142
dvander@1651
   143
	if ((hFind = FindFirstFile(search_path, &fd)) == INVALID_HANDLE_VALUE)
dvander@1651
   144
	{
dvander@1651
   145
		return;
dvander@1651
   146
	}
dvander@1651
   147
dvander@1651
   148
	do 
dvander@1651
   149
	{
dvander@1651
   150
		if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
dvander@1651
   151
		{
dvander@1651
   152
			continue;
dvander@1651
   153
		}
dvander@1651
   154
dvander@1651
   155
		if (tstrcasecmp(fd.cFileName, _T(".")) == 0
dvander@1651
   156
			|| tstrcasecmp(fd.cFileName, _T("..")) == 0)
dvander@1651
   157
		{
dvander@1651
   158
			continue;
dvander@1651
   159
		}
dvander@1651
   160
dvander@1651
   161
		UTIL_PathFormat(temp_path,
dvander@1651
   162
			sizeof(temp_path),
dvander@1651
   163
			_T("%s\\%s"),
dvander@1651
   164
			path,
dvander@1651
   165
			fd.cFileName);
dvander@1651
   166
		TryToAddMod(temp_path, eng_type, mod_list, total_mods);
dvander@1651
   167
dvander@1651
   168
	} while (FindNextFile(hFind, &fd));
dvander@1651
   169
dvander@1651
   170
	FindClose(hFind);
dvander@1651
   171
}
dvander@1651
   172
dvander@1651
   173
void AddValveModsFromFolder(const TCHAR *path,
dvander@1651
   174
							unsigned int game_type,
dvander@1651
   175
							mod_info_t **mod_list,
dvander@1651
   176
							unsigned int *total_mods)
dvander@1651
   177
{
dvander@1651
   178
	HANDLE hFind;
dvander@1651
   179
	WIN32_FIND_DATA fd;
dvander@1651
   180
	TCHAR temp_path[MAX_PATH];
dvander@1651
   181
	TCHAR search_path[MAX_PATH];
dvander@1651
   182
dvander@1651
   183
	UTIL_PathFormat(search_path,
dvander@1651
   184
		sizeof(search_path) / sizeof(TCHAR),
dvander@1651
   185
		_T("%s\\*.*"),
dvander@1651
   186
		path);
dvander@1651
   187
dvander@1651
   188
	if ((hFind = FindFirstFile(search_path, &fd)) == INVALID_HANDLE_VALUE)
dvander@1651
   189
	{
dvander@1651
   190
		return;
dvander@1651
   191
	}
dvander@1651
   192
dvander@1651
   193
	do 
dvander@1651
   194
	{
dvander@1651
   195
		if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
dvander@1651
   196
		{
dvander@1651
   197
			continue;
dvander@1651
   198
		}
dvander@1651
   199
dvander@1651
   200
		if (tstrcasecmp(fd.cFileName, _T(".")) == 0
dvander@1651
   201
			|| tstrcasecmp(fd.cFileName, _T("..")) == 0)
dvander@1651
   202
		{
dvander@1651
   203
			continue;
dvander@1651
   204
		}
dvander@1651
   205
dvander@1651
   206
		TCHAR *mod_folder = NULL;
dvander@1651
   207
		int eng_type = SOURCE_ENGINE_UNKNOWN;
dvander@1651
   208
dvander@1651
   209
		if (game_type == GAMES_LISTEN)
dvander@1651
   210
		{
dvander@1651
   211
			if (tstrcasecmp(fd.cFileName, _T( "counter-strike source")) == 0)
dvander@1651
   212
			{
dvander@1651
   213
				mod_folder = _T("cstrike");
dvander@1651
   214
			}
dvander@1651
   215
			else if (tstrcasecmp(fd.cFileName, _T("day of defeat source")) == 0)
dvander@1651
   216
			{
dvander@1651
   217
				mod_folder = _T("dod");
dvander@1651
   218
			}
dvander@1651
   219
			else if (tstrcasecmp(fd.cFileName, _T("half-life 2 deathmatch")) == 0)
dvander@1651
   220
			{
dvander@1651
   221
				mod_folder = _T("hl2mp");
dvander@1651
   222
			}
dvander@1651
   223
			else if (tstrcasecmp(fd.cFileName, _T("half-life deathmatch source")) == 0)
dvander@1651
   224
			{
dvander@1651
   225
				mod_folder = _T("hl1mp");
dvander@1651
   226
			}
dvander@1651
   227
			else if (tstrcasecmp(fd.cFileName, _T("team fortress 2")) == 0)
dvander@1651
   228
			{
dvander@1651
   229
				mod_folder = _T("tf");
dvander@1651
   230
				eng_type = SOURCE_ENGINE_2007;
dvander@1651
   231
			}
dvander@1651
   232
		}
dvander@1651
   233
		else if (game_type == GAMES_DEDICATED)
dvander@1651
   234
		{
dvander@1651
   235
			if (tstrcasecmp(fd.cFileName, _T("source dedicated server")) == 0)
dvander@1651
   236
			{
dvander@1651
   237
				UTIL_PathFormat(temp_path,
dvander@1651
   238
					sizeof(temp_path) / sizeof(TCHAR),
dvander@1651
   239
					_T("%s\\%s"),
dvander@1651
   240
					path,
dvander@1651
   241
					fd.cFileName);
dvander@1651
   242
				AddModsFromFolder(temp_path, SOURCE_ENGINE_2004, mod_list, total_mods);
dvander@1651
   243
			}
dvander@1651
   244
			else if (tstrcasecmp(fd.cFileName, _T("source 2007 dedicated server")) == 0)
dvander@1651
   245
			{
dvander@1651
   246
				UTIL_PathFormat(temp_path,
dvander@1651
   247
					sizeof(temp_path) / sizeof(TCHAR),
dvander@1651
   248
					_T("%s\\%s"),
dvander@1651
   249
					path,
dvander@1651
   250
					fd.cFileName);
dvander@1651
   251
				AddModsFromFolder(temp_path, SOURCE_ENGINE_2007, mod_list, total_mods);
dvander@1651
   252
			}
dvander@1651
   253
		}
dvander@1651
   254
dvander@1651
   255
		if (mod_folder != NULL)
dvander@1651
   256
		{
dvander@1651
   257
			UTIL_PathFormat(temp_path,
dvander@1651
   258
				sizeof(temp_path) / sizeof(TCHAR),
dvander@1651
   259
				_T("%s\\%s\\%s"),
dvander@1651
   260
				path,
dvander@1651
   261
				fd.cFileName,
dvander@1651
   262
				mod_folder);
dvander@1651
   263
			TryToAddMod(temp_path, eng_type, mod_list, total_mods);
dvander@1651
   264
		}
dvander@1651
   265
dvander@1651
   266
	} while (FindNextFile(hFind, &fd));
dvander@1651
   267
dvander@1651
   268
	FindClose(hFind);
dvander@1651
   269
}
dvander@1651
   270
dvander@1651
   271
int BuildGameList(unsigned int game_type, mod_info_t **mod_list)
dvander@1651
   272
{
dvander@1651
   273
	unsigned int total_mods = 0;
dvander@1651
   274
	
dvander@1651
   275
	if (game_type == GAMES_LISTEN
dvander@1651
   276
		|| game_type == GAMES_DEDICATED)
dvander@1651
   277
	{
dvander@1651
   278
		HKEY hkPath;
dvander@1651
   279
		DWORD dwLen, dwType;
dvander@1651
   280
		HANDLE hFind;
dvander@1651
   281
		WIN32_FIND_DATA fd;
dvander@1651
   282
		TCHAR temp_path[MAX_PATH];
dvander@1651
   283
		TCHAR steam_path[MAX_PATH];
dvander@1651
   284
		TCHAR steamapps_path[MAX_PATH];
dvander@1651
   285
dvander@1651
   286
		if (RegOpenKeyEx(HKEY_CURRENT_USER,
dvander@1651
   287
			_T("Software\\Valve\\Steam"),
dvander@1651
   288
			0,
dvander@1651
   289
			KEY_READ,
dvander@1651
   290
			&hkPath) != ERROR_SUCCESS)
dvander@1651
   291
		{
dvander@1651
   292
			DWORD err = GetLastError();
dvander@1651
   293
			return GAME_LIST_CANT_READ;
dvander@1651
   294
		}
dvander@1651
   295
dvander@1651
   296
		dwLen = sizeof(steam_path) / sizeof(TCHAR);
dvander@1651
   297
		if (RegQueryValueEx(hkPath,
dvander@1651
   298
			_T("SteamPath"),
dvander@1651
   299
			NULL,
dvander@1651
   300
			&dwType,
dvander@1651
   301
			(LPBYTE)steam_path,
dvander@1651
   302
			&dwLen) != ERROR_SUCCESS)
dvander@1651
   303
		{
dvander@1651
   304
			RegCloseKey(hkPath);
dvander@1651
   305
			return GAME_LIST_CANT_READ;
dvander@1651
   306
		}
dvander@1651
   307
dvander@1651
   308
		UTIL_PathFormat(steamapps_path,
dvander@1651
   309
			sizeof(steamapps_path) / sizeof(TCHAR),
dvander@1651
   310
			_T("%s\\steamapps\\*.*"),
dvander@1651
   311
			steam_path);
dvander@1651
   312
dvander@1651
   313
		if ((hFind = FindFirstFile(steamapps_path, &fd)) == INVALID_HANDLE_VALUE)
dvander@1651
   314
		{
dvander@1651
   315
			RegCloseKey(hkPath);
dvander@1651
   316
			return GAME_LIST_CANT_READ;
dvander@1651
   317
		}
dvander@1651
   318
dvander@1651
   319
		do 
dvander@1651
   320
		{
dvander@1651
   321
			if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
dvander@1651
   322
			{
dvander@1651
   323
				continue;
dvander@1651
   324
			}
dvander@1651
   325
dvander@1651
   326
			if (tstrcasecmp(fd.cFileName, _T(".")) == 0
dvander@1651
   327
				|| tstrcasecmp(fd.cFileName, _T("..")) == 0)
dvander@1651
   328
			{
dvander@1651
   329
				continue;
dvander@1651
   330
			}
dvander@1651
   331
dvander@1651
   332
			/* If we get a folder called "SourceMods," look for third party mods */
dvander@1651
   333
			if (game_type == GAMES_LISTEN 
dvander@1651
   334
				&& tstrcasecmp(fd.cFileName, _T("SourceMods")) == 0)
dvander@1651
   335
			{
dvander@1651
   336
				UTIL_PathFormat(temp_path,
dvander@1651
   337
					sizeof(temp_path) / sizeof(TCHAR),
dvander@1651
   338
					_T("%s\\steamapps\\%s"),
dvander@1651
   339
					steam_path,
dvander@1651
   340
					fd.cFileName);
dvander@1651
   341
				AddModsFromFolder(temp_path, SOURCE_ENGINE_UNKNOWN, mod_list, &total_mods);
dvander@1651
   342
			}
dvander@1651
   343
			else
dvander@1651
   344
			{
dvander@1651
   345
				UTIL_PathFormat(temp_path,
dvander@1651
   346
					sizeof(temp_path) / sizeof(TCHAR),
dvander@1651
   347
					_T("%s\\steamapps\\%s"),
dvander@1651
   348
					steam_path,
dvander@1651
   349
					fd.cFileName);
dvander@1651
   350
				AddValveModsFromFolder(temp_path, game_type, mod_list, &total_mods);
dvander@1651
   351
			}
dvander@1651
   352
dvander@1651
   353
		} while (FindNextFile(hFind, &fd));
dvander@1651
   354
dvander@1651
   355
		FindClose(hFind);
dvander@1651
   356
		RegCloseKey(hkPath);
dvander@1651
   357
	}
dvander@1651
   358
	else if (game_type == GAMES_STANDALONE)
dvander@1651
   359
	{
dvander@1651
   360
		HKEY hkPath;
dvander@1651
   361
		int eng_type = SOURCE_ENGINE_UNKNOWN;
dvander@1651
   362
		DWORD dwLen, dwType, dwAttr;
dvander@1651
   363
		TCHAR temp_path[MAX_PATH];
dvander@1651
   364
		TCHAR hlds_path[MAX_PATH];
dvander@1651
   365
dvander@1651
   366
		if (RegOpenKeyEx(HKEY_CURRENT_USER,
dvander@1651
   367
			_T("Software\\Valve\\HLServer"),
dvander@1651
   368
			0,
dvander@1651
   369
			KEY_READ,
dvander@1651
   370
			&hkPath) != ERROR_SUCCESS)
dvander@1651
   371
		{
dvander@1651
   372
			return GAME_LIST_CANT_READ;
dvander@1651
   373
		}
dvander@1651
   374
dvander@1651
   375
		dwLen = sizeof(hlds_path) / sizeof(TCHAR);
dvander@1651
   376
		if (RegQueryValueEx(hkPath,
dvander@1651
   377
			_T("InstallPath"),
dvander@1651
   378
			NULL,
dvander@1651
   379
			&dwType,
dvander@1651
   380
			(LPBYTE)hlds_path,
dvander@1651
   381
			&dwLen) != ERROR_SUCCESS)
dvander@1651
   382
		{
dvander@1651
   383
			RegCloseKey(hkPath);
dvander@1651
   384
			return GAME_LIST_CANT_READ;
dvander@1651
   385
		}
dvander@1651
   386
dvander@1651
   387
		/* Make sure there is a "srcds.exe" file */
dvander@1651
   388
		UTIL_PathFormat(temp_path,
dvander@1651
   389
			sizeof(temp_path) / sizeof(TCHAR), 
dvander@1651
   390
			_T("%s\\srcds.exe"), 
dvander@1651
   391
			hlds_path);
dvander@1651
   392
		dwAttr = GetFileAttributes(temp_path);
dvander@1651
   393
		if (dwAttr == INVALID_FILE_ATTRIBUTES)
dvander@1651
   394
		{
dvander@1651
   395
			return GAME_LIST_HALFLIFE1;
dvander@1651
   396
		}
dvander@1651
   397
dvander@1651
   398
		/* If there is an "orangebox" sub folder, we can make a better guess 
dvander@1651
   399
		 * at the engine state.
dvander@1651
   400
		 */
dvander@1651
   401
		UTIL_PathFormat(temp_path,
dvander@1651
   402
			sizeof(temp_path) / sizeof(TCHAR), 
dvander@1651
   403
			_T("%s\\orangebox"), 
dvander@1651
   404
			hlds_path);
dvander@1651
   405
		dwAttr = GetFileAttributes(temp_path);
dvander@1651
   406
		if (dwAttr != INVALID_FILE_ATTRIBUTES
dvander@1651
   407
			&& ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY))
dvander@1651
   408
		{
dvander@1651
   409
			eng_type = SOURCE_ENGINE_2004;
dvander@1651
   410
			AddModsFromFolder(temp_path, SOURCE_ENGINE_2007, mod_list, &total_mods);
dvander@1651
   411
		}
dvander@1651
   412
dvander@1651
   413
		/* Add everything from the server */
dvander@1651
   414
		AddModsFromFolder(hlds_path, eng_type, mod_list, &total_mods);
dvander@1651
   415
dvander@1651
   416
		RegCloseKey(hkPath);
dvander@1651
   417
	}
dvander@1651
   418
dvander@1651
   419
	return (g_mod_list == NULL) ? GAME_LIST_NO_GAMES : (int)total_mods;
dvander@1651
   420
}
dvander@1651
   421
dvander@1651
   422
void FreeGameList(mod_info_t *mod_list)
dvander@1651
   423
{
dvander@1651
   424
	free(mod_list);
dvander@1651
   425
}
dvander@1651
   426
dvander@1651
   427
int _SortModList(const void *item1, const void *item2)
dvander@1651
   428
{
dvander@1651
   429
	const mod_info_t *mod1 = (const mod_info_t *)item1;
dvander@1651
   430
	const mod_info_t *mod2 = (const mod_info_t *)item2;
dvander@1651
   431
dvander@1651
   432
	return tstrcasecmp(mod1->name, mod2->name);
dvander@1651
   433
}
dvander@1651
   434
dvander@1651
   435
int FindGames(unsigned int game_type)
dvander@1651
   436
{
dvander@1651
   437
	int reason;
dvander@1651
   438
dvander@1651
   439
	ReleaseGamesList();
dvander@1651
   440
dvander@1651
   441
	if ((reason = BuildGameList(game_type, &g_mod_list)) > 0)
dvander@1651
   442
	{
dvander@1651
   443
		g_mod_count = (unsigned)reason;
dvander@1651
   444
		qsort(g_mod_list, g_mod_count, sizeof(mod_info_t), _SortModList);
dvander@1651
   445
	}
dvander@1651
   446
dvander@1651
   447
	return reason;
dvander@1651
   448
}
dvander@1651
   449
dvander@1651
   450
void ReleaseGamesList()
dvander@1651
   451
{
dvander@1651
   452
	if (g_mod_list == NULL)
dvander@1651
   453
	{
dvander@1651
   454
		return;
dvander@1651
   455
	}
dvander@1651
   456
dvander@1651
   457
	free(g_mod_list);
dvander@1651
   458
	g_mod_list = NULL;
dvander@1651
   459
	g_mod_count = 0;
dvander@1651
   460
}
dvander@1651
   461
dvander@1651
   462
void DisplayBadGamesDialog(HWND hWnd, unsigned int game_type, int reason)
dvander@1651
   463
{
dvander@1651
   464
	TCHAR message[256];
dvander@1651
   465
	UINT idc = 0;
dvander@1651
   466
dvander@1651
   467
	if (reason == GAME_LIST_CANT_READ)
dvander@1651
   468
	{
dvander@1651
   469
		idc = IDS_GAME_FAIL_READ;
dvander@1651
   470
	}
dvander@1651
   471
	else if (reason == GAME_LIST_HALFLIFE1)
dvander@1651
   472
	{
dvander@1651
   473
		idc = IDS_GAME_FAIL_HL1;
dvander@1651
   474
	}
dvander@1651
   475
	else if (reason == GAME_LIST_NO_GAMES)
dvander@1651
   476
	{
dvander@1651
   477
		idc = IDS_GAME_FAIL_NONE;
dvander@1651
   478
	}
dvander@1651
   479
	else
dvander@1651
   480
	{
dvander@1651
   481
		return;
dvander@1651
   482
	}
dvander@1651
   483
dvander@1651
   484
	if (LoadString(g_hInstance,
dvander@1651
   485
		idc,
dvander@1651
   486
		message,
dvander@1651
   487
		sizeof(message) / sizeof(TCHAR)) == 0)
dvander@1651
   488
	{
dvander@1651
   489
		return;
dvander@1651
   490
	}
dvander@1651
   491
dvander@1651
   492
	MessageBox(hWnd, 
dvander@1651
   493
		message, 
dvander@1651
   494
		_T("SourceMod Installer"),
dvander@1651
   495
		MB_OK|MB_ICONWARNING);
dvander@1651
   496
}