Maybe this is more future-safe?

svn-id: r6602
This commit is contained in:
Marcus Comstedt 2003-02-12 19:28:18 +00:00
parent 7bfc5a34d6
commit 273220b063

View file

@ -144,8 +144,23 @@ struct Dir
static Game the_game;
static bool checkName(const char *base, char *text = 0)
{
const VersionSettings *gnl = version_settings;
do {
if (!scumm_stricmp(base, gnl->filename)) {
if(text != NULL)
strcpy(text, gnl->gamename);
return true;
}
} while ((++gnl)->filename);
return false;
}
static bool isGame(const char *fn, char *base)
{
#if 0
int l = strlen(fn);
if(l>4 && (!strcasecmp(fn+l-4, ".000") ||
!strcasecmp(fn+l-4, ".SM0") ||
@ -155,6 +170,15 @@ static bool isGame(const char *fn, char *base)
base[l-4]='\0';
return true;
}
#else
char *dot;
if((dot = strchr(fn, '.'))!=NULL) {
strcpy(base, fn);
base[dot-fn]='\0';
if(checkName(base))
return true;
}
#endif
if(!strcasecmp(fn, "00.LFL") ||
!strcasecmp(fn, "000.LFL")) {
*base = '\0';
@ -163,19 +187,6 @@ static bool isGame(const char *fn, char *base)
return false;
}
static void checkName(Game &game)
{
const VersionSettings *gnl = version_settings;
do {
if (!scumm_stricmp(game.filename_base, gnl->filename)) {
strcpy(game.text, gnl->gamename);
return;
}
} while ((++gnl)->filename);
strcpy(game.text, game.filename_base);
}
static bool checkExe(const char *dir, const char *f)
{
char fn[520];
@ -218,6 +229,17 @@ static void makeDefIcon(Icon &icon)
icon.load(NULL, 0);
}
static bool uniqueGame(const char *base, const char *dir, Game *games, int cnt)
{
while(cnt--)
if(!strcmp(dir, games->dir) &&
!strcmp(base, games->filename_base))
return false;
else
games++;
return true;
}
static int findGames(Game *games, int max)
{
Dir *dirs = new Dir[MAX_DIR];
@ -242,7 +264,7 @@ static int findGames(Game *games, int max)
if(isIcon(entry->d_name))
strcpy(dirs[curr_dir-1].deficon, entry->d_name);
else if(curr_game < max &&
isGame(entry->d_name, games[curr_game].filename_base)) {
isGame(entry->d_name, games[curr_game].filename_base)) {
strcpy(games[curr_game].dir, dirs[curr_dir-1].name);
if(!*games[curr_game].filename_base) {
int i;
@ -261,14 +283,20 @@ static int findGames(Game *games, int max)
if(checkExe(games[curr_game].dir, "loom"))
strcpy(games[curr_game].filename_base, "loomcd");
}
checkName(games[curr_game]);
if(uniqueGame(games[curr_game].filename_base,
games[curr_game].dir, games, curr_game)) {
if(!checkName(games[curr_game].filename_base,
games[curr_game].text))
strcpy(games[curr_game].text, games[curr_game].filename_base);
#if 0
printf("Registered game <%s> in <%s> <%s> because of <%s> <%s>\n",
games[curr_game].text, games[curr_game].dir,
games[curr_game].filename_base,
dirs[curr_dir-1].name, entry->d_name);
printf("Registered game <%s> in <%s> <%s> because of <%s> <%s>\n",
games[curr_game].text, games[curr_game].dir,
games[curr_game].filename_base,
dirs[curr_dir-1].name, entry->d_name);
#endif
curr_game++;
curr_game++;
}
}
closedir(dirp);
}
@ -411,7 +439,7 @@ int gameMenu(Game *games, int num_games)
float x = 50.0/256.0*(256-fade) + 160.0/256.0*fade;
float scale = 1.0+9.0/256.0*fade;
drawGameLabel(games[selector_pos], 48+(selected_game&15), x, y,
drawGameLabel(games[selected_game], 48+(selected_game&15), x, y,
0xffff00, 0, scale);
ta_commit_frame();