15#include "lcf/lsd/reader.h"
16#include "lcf/lsd/chunks.h"
17#include "lcf/rpg/save.h"
18#include "lcf/reader_util.h"
23double LSD_Reader::ToTDateTime(std::time_t t) {
25 return(
t / 86400.0 + 25569.0);
28std::time_t LSD_Reader::ToUnixTimestamp(
double ms) {
29 return(std::time_t(
ms * 86400.0 - 25569.0 * 86400.0 + 0.5));
32double LSD_Reader::GenerateTimestamp(std::time_t t) {
36void LSD_Reader::PrepareSave(rpg::Save& save, int32_t version, int32_t codepage) {
37 ++
save.system.save_count;
38 save.title.timestamp = LSD_Reader::GenerateTimestamp();
43std::unique_ptr<rpg::Save> LSD_Reader::Load(StringView filename, StringView encoding) {
52bool LSD_Reader::Save(StringView filename,
const rpg::Save& save, EngineVersion engine, StringView encoding) {
61bool LSD_Reader::SaveXml(StringView filename,
const rpg::Save& save, EngineVersion engine) {
70std::unique_ptr<rpg::Save> LSD_Reader::LoadXml(StringView filename) {
76 return LSD_Reader::LoadXml(
stream);
79std::unique_ptr<rpg::Save> LSD_Reader::Load(std::istream& filestream, StringView encoding) {
83 LcfReader::SetError(
"Couldn't parse save file.\n");
84 return std::unique_ptr<rpg::Save>();
88 if (
header.length() != 11) {
89 LcfReader::SetError(
"This is not a valid RPG2000 save.\n");
90 return std::unique_ptr<rpg::Save>();
92 if (
header !=
"LcfSaveData") {
93 fprintf(
stderr,
"Warning: This header is not LcfSaveData and might not be a valid RPG2000 save.\n");
98 std::unique_ptr<rpg::Save>
save(
new rpg::Save());
101 if (
save->easyrpg_data.codepage > 0) {
106 LcfReader::SetError(
"Couldn't parse save file.\n");
107 return std::unique_ptr<rpg::Save>();
109 save.reset(
new rpg::Save());
116bool LSD_Reader::Save(std::ostream& filestream,
const rpg::Save& save, EngineVersion engine, StringView encoding) {
119 if (
save.easyrpg_data.codepage > 0) {
120 enc = std::to_string(
save.easyrpg_data.codepage);
127 LcfReader::SetError(
"Couldn't parse save file.\n");
130 const std::string
header(
"LcfSaveData");
138bool LSD_Reader::SaveXml(std::ostream& filestream,
const rpg::Save& save, EngineVersion engine) {
141 LcfReader::SetError(
"Couldn't parse save file.\n");
145 writer.BeginElement(
"LSD");
151std::unique_ptr<rpg::Save> LSD_Reader::LoadXml(std::istream& filestream) {
154 LcfReader::SetError(
"Couldn't parse save file.\n");
155 return std::unique_ptr<rpg::Save>();
158 rpg::Save*
save =
new rpg::Save();
161 return std::unique_ptr<rpg::Save>(
save);
RootXmlHandler(S &ref, const char *const name)
static void WriteXml(const S &obj, XmlWriter &stream)
static void WriteLcf(const S &obj, LcfWriter &stream)
static void ReadLcf(S &obj, LcfReader &stream)