summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-03-20 16:04:27 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-03-20 16:14:17 (EDT)
commitc61639e4ee50c5394003d135c05469240fcd62fe (patch)
tree562cac3e9d527b7de111d4be289711975099b537
parentf087754cccb3c2b8b4b820b683ef09483e73de82 (diff)
downloaddodge-balls-c61639e4ee50c5394003d135c05469240fcd62fe.zip
dodge-balls-c61639e4ee50c5394003d135c05469240fcd62fe.tar.gz
dodge-balls-c61639e4ee50c5394003d135c05469240fcd62fe.tar.bz2
db_level_new(): New function
-rw-r--r--src/game.c18
-rw-r--r--src/level.c49
-rw-r--r--src/level.h28
-rw-r--r--src/local.mk2
4 files changed, 91 insertions, 6 deletions
diff --git a/src/game.c b/src/game.c
index a8ab3e4..0cab8e5 100644
--- a/src/game.c
+++ b/src/game.c
@@ -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 \