From bb48d5ac234c0b68efb1aa566424d28aadfa03f4 Mon Sep 17 00:00:00 2001
From: Allanis <allanis@saracraft.net>
Date: Wed, 8 May 2013 19:45:38 +0100
Subject: [PATCH] [Add] Missions save code. Global save functions.

---
 src/mission.c | 31 +++++++++++++++++++++++++++++++
 src/save.c    | 37 +++++++++++++++++++++++++++++++++++++
 src/save.h    |  4 ++++
 3 files changed, 72 insertions(+)
 create mode 100644 src/save.c
 create mode 100644 src/save.h

diff --git a/src/mission.c b/src/mission.c
index 02a1c8b..ccfd8ac 100644
--- a/src/mission.c
+++ b/src/mission.c
@@ -401,3 +401,34 @@ void missions_cleanup(void) {
     mission_cleanup(&player_missions[i]);
 }
 
+int missions_save(xmlTextWriterPtr writer) {
+  int i, j;
+
+  xmlw_startElem(writer, "missions");
+
+  for(i = 0; i < MISSION_MAX; i++) {
+    if(player_missions[i].id != 0) {
+      xmlw_startElem(writer, "mission");
+
+      xmlw_elem(writer, "data", player_missions[i].data->name);
+      xmlw_elem(writer, "id", "%u", player_missions[i].id);
+
+      xmlw_elem(writer, "title", player_missions[i].title);
+      xmlw_elem(writer, "desc", player_missions[i].desc);
+      xmlw_elem(writer, "reward", player_missions[i].reward);
+
+      xmlw_startElem(writer, "cargos");
+      for(j = 0; j < player_missions[i].ncargo; j++)
+        xmlw_elem(writer, "cargo", "%u", player_missions[i].cargo[j]);
+      xmlw_endElem(writer); // Cargo.
+
+      // TODO: Save lua data.
+      
+      xmlw_endElem(writer); // Mission.
+    }
+  }
+  xmlw_endElem(writer); // Missions.
+
+  return 0;
+}
+
diff --git a/src/save.c b/src/save.c
new file mode 100644
index 0000000..cc4bd5d
--- /dev/null
+++ b/src/save.c
@@ -0,0 +1,37 @@
+#include "lephisto.h"
+#include "log.h"
+#include "xml.h"
+#include "save.h"
+
+// Externs.
+extern int player_save(xmlTextWriterPtr writer);
+extern int missions_save(xmlTextWriterPtr writer);
+
+int save_all(void) {
+  char* file;
+  xmlDocPtr doc;
+  xmlTextWriterPtr writer;
+
+  writer = xmlNewTextWriterDoc(&doc, 0);
+  if(writer == NULL) {
+    ERR("testXmlwriterDoc: Error creating the xml writer.");
+    return -1;
+  }
+
+  xmlw_start(writer);
+
+  // The data itself.
+  player_save(writer);
+  missions_save(writer);
+
+  xmlw_done(writer);
+
+  file = "test.xml";
+
+  xmlFreeTextWriter(writer);
+  xmlSaveFileEnc(file, doc, "UTF-8");
+  xmlFreeDoc(doc);
+
+  return 0;
+}
+
diff --git a/src/save.h b/src/save.h
new file mode 100644
index 0000000..5a4d80d
--- /dev/null
+++ b/src/save.h
@@ -0,0 +1,4 @@
+#pragma once
+
+int save_all(void);
+