diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game.c | 18 | ||||
-rw-r--r-- | src/level.c | 49 | ||||
-rw-r--r-- | src/level.h | 28 | ||||
-rw-r--r-- | src/local.mk | 2 |
4 files changed, 91 insertions, 6 deletions
@@ -23,16 +23,19 @@ #include <stdlib.h> #include <string.h> #include "game.h" +#include "level.h" #include "locale.h" #include "output.h" #include "xml.h" struct db_game { - char *id; - int best_name_match; - int best_desc_match; - char *name; - char *desc; + char *id; + int best_name_match; + int best_desc_match; + char *name; + char *desc; + struct db_level *level_head; + struct db_level *level_tail; enum { DB_GAME_XML_PARSING_NAME, DB_GAME_XML_PARSING_DESCRIPTION, @@ -186,7 +189,10 @@ _db_game_xml_levels_el_start(void *pv, const char *name, const char **attr) return; } db_dbg(" id=\"%s\"", id); - /* TODO */ + game->level_tail = db_level_new(game->id, id, game->level_tail); + if (game->level_head == NULL) { + game->level_head = game->level_tail; + } free(id); db_xml_node_push(p, game, _db_game_xml_invalid_start, _db_game_xml_level_end, NULL); diff --git a/src/level.c b/src/level.c new file mode 100644 index 0000000..70c7748 --- /dev/null +++ b/src/level.c @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2021 P. J. McDermott + * + * This file is part of Dodge Balls + * + * Dodge Balls is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Dodge Balls is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Dodge Balls. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <stdlib.h> +#include "level.h" +#include "output.h" + +struct db_level { + char *game_id; + char *level_id; + struct db_level *next; +}; + +struct db_level * +db_level_new(const char *game_id, const char *level_id, struct db_level *prev) +{ + struct db_level *level; + + level = calloc(1, sizeof(*level)); + if (level == NULL) { + db_err("Failed to allocate memory"); + return NULL; + } + + level->game_id = strdup(game_id); + level->level_id = strdup(level_id); + + if (prev != NULL) { + prev->next = level; + } + + return level; +} diff --git a/src/level.h b/src/level.h new file mode 100644 index 0000000..5d1ce64 --- /dev/null +++ b/src/level.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2021 P. J. McDermott + * + * This file is part of Dodge Balls + * + * Dodge Balls is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Dodge Balls is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Dodge Balls. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef DB_LEVEL_H_ +#define DB_LEVEL_H_ + +struct db_level; + +struct db_level *db_level_new(const char *game_id, const char *level_id, + struct db_level *prev); + +#endif /* DB_LEVEL_H_ */ diff --git a/src/local.mk b/src/local.mk index 7bc031d..4097da4 100644 --- a/src/local.mk +++ b/src/local.mk @@ -8,6 +8,8 @@ dodge_balls_SOURCES += \ %reldir%/game.h \ %reldir%/help.c \ %reldir%/help.h \ + %reldir%/level.c \ + %reldir%/level.h \ %reldir%/locale.c \ %reldir%/locale.h \ %reldir%/main-menu.c \ |