first try to load idf games
This commit is contained in:
parent
921f1a96a1
commit
984d47fa59
|
@ -47,10 +47,15 @@ void game_err_msg(const char *s)
|
|||
static int is_game(const char *path, const char *n)
|
||||
{
|
||||
int rc = 0;
|
||||
char *p = getpath(path, n);
|
||||
char *p = getfilepath(path, n);
|
||||
char *pp;
|
||||
if (!p)
|
||||
return 0;
|
||||
if (idf_magic(p)) {
|
||||
free(p);
|
||||
return 1;
|
||||
}
|
||||
strcat(p, "/");
|
||||
pp = malloc(strlen(p) + strlen(MAIN_FILE) + 1);
|
||||
if (pp) {
|
||||
strcpy(pp, p);
|
||||
|
@ -124,12 +129,21 @@ int game_select(const char *name)
|
|||
curgame_dir = oldgame;
|
||||
return -1;
|
||||
}
|
||||
if (setdir(g->path)) {
|
||||
|
||||
if (g->idf) {
|
||||
setdir(game_cwd);
|
||||
if (oldgame != curgame_dir) {
|
||||
idf_done(game_idf);
|
||||
game_idf = idf_init(g->path);
|
||||
}
|
||||
}
|
||||
|
||||
if ((!g->idf && setdir(g->path)) || (g->idf && !game_idf)) {
|
||||
curgame_dir = oldgame;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (oldgame != curgame_dir) {
|
||||
if (oldgame != curgame_dir && !g->idf) {
|
||||
idf_done(game_idf);
|
||||
game_idf = idf_init(DATA_IDF);
|
||||
}
|
||||
|
@ -200,14 +214,20 @@ static void games_sort()
|
|||
{
|
||||
qsort(games, games_nr, sizeof(struct game), cmp_game);
|
||||
}
|
||||
|
||||
static int games_add(const char *path, const char *dir)
|
||||
{
|
||||
char *p;
|
||||
if (!is_game(path, dir))
|
||||
return -1;
|
||||
p = getpath(path, dir);
|
||||
p = getfilepath(path, dir);
|
||||
if (!p)
|
||||
return -1;
|
||||
if (!idf_magic(p)) {
|
||||
strcat(p, "/");
|
||||
games[games_nr].idf = 0;
|
||||
} else
|
||||
games[games_nr].idf = 1;
|
||||
games[games_nr].path = p;
|
||||
games[games_nr].dir = strdup(dir);
|
||||
games[games_nr].name = game_name(p, dir);
|
||||
|
|
|
@ -103,6 +103,7 @@ struct game {
|
|||
char *path;
|
||||
char *name;
|
||||
char *dir;
|
||||
int idf;
|
||||
};
|
||||
|
||||
extern struct game *games;
|
||||
|
|
|
@ -69,6 +69,22 @@ static int write_word(FILE *fd, unsigned long w)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int idf_magic(const char *fname)
|
||||
{
|
||||
char sign[4];
|
||||
FILE *fd = fopen(dirpath(fname), "rb");
|
||||
if (!fd)
|
||||
return 0;
|
||||
if (fread(sign, 1, 4, fd) != 4) {
|
||||
fclose(fd);
|
||||
return 0;
|
||||
}
|
||||
fclose(fd);
|
||||
if (!memcmp(sign, "IDF\n", 4))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
idf_t idf_init(const char *fname)
|
||||
{
|
||||
char sign[4];
|
||||
|
|
|
@ -23,5 +23,6 @@ extern int idf_eof(idff_t idf);
|
|||
extern int idf_error(idff_t idf);
|
||||
extern int idf_access(idf_t idf, const char *fname);
|
||||
extern char *idf_gets(idff_t idf, char *b, int size);
|
||||
extern int idf_magic(const char *fname);
|
||||
|
||||
#endif
|
|
@ -737,7 +737,10 @@ int game_theme_init(void)
|
|||
|
||||
static int theme_parse(const char *path)
|
||||
{
|
||||
idff_t idf = idf_open(game_idf, path);
|
||||
idff_t idf = NULL;
|
||||
|
||||
if (theme_relative)
|
||||
idf = idf_open(game_idf, path);
|
||||
|
||||
if (idf) {
|
||||
int rc = parse_idff(idf, path, cmd_parser);
|
||||
|
|
Loading…
Reference in a new issue