aboutsummaryrefslogtreecommitdiff
path: root/engines/glk/glk.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2018-11-17 16:52:47 -0800
committerPaul Gilbert2018-12-08 19:05:59 -0800
commitb05a16a0ad0dcc2881aeda81e0d1a84a752eccab (patch)
treee7f0468357c5c3248591bd334b1a4d42a999b550 /engines/glk/glk.cpp
parent326f69136eb4fee72391a8175ad722a317f84ca6 (diff)
downloadscummvm-rg350-b05a16a0ad0dcc2881aeda81e0d1a84a752eccab.tar.gz
scummvm-rg350-b05a16a0ad0dcc2881aeda81e0d1a84a752eccab.tar.bz2
scummvm-rg350-b05a16a0ad0dcc2881aeda81e0d1a84a752eccab.zip
GLK: Centralizing more of the savegame code in GlkEngine
Diffstat (limited to 'engines/glk/glk.cpp')
-rw-r--r--engines/glk/glk.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/engines/glk/glk.cpp b/engines/glk/glk.cpp
index 987fbc894a..a3cd167ae7 100644
--- a/engines/glk/glk.cpp
+++ b/engines/glk/glk.cpp
@@ -117,4 +117,56 @@ void GlkEngine::GUIError(const char *msg, ...) {
GUIErrorMessage(buffer);
}
+Common::Error GlkEngine::loadGame() {
+ frefid_t ref = _streams->createByPrompt(fileusage_BinaryMode | fileusage_SavedGame,
+ filemode_Read, 0);
+ if (ref == nullptr)
+ return Common::kReadingFailed;
+
+ int slotNumber = ref->_slotNumber;
+ _streams->deleteRef(ref);
+
+ return loadGameState(slotNumber);
+}
+
+Common::Error GlkEngine::saveGame() {
+ frefid_t ref = _streams->createByPrompt(fileusage_BinaryMode | fileusage_SavedGame,
+ filemode_Write, 0);
+ if (ref == nullptr)
+ return Common::kWritingFailed;
+
+ int slot = ref->_slotNumber;
+ Common::String desc = ref->_description;
+ _streams->deleteRef(ref);
+
+ return saveGameState(slot, desc);
+}
+
+Common::Error GlkEngine::loadGameState(int slot) {
+ FileReference ref(slot, "", fileusage_SavedGame | fileusage_TextMode);
+
+ strid_t file = _streams->openFileStream(&ref, filemode_Read);
+ if (file == nullptr)
+ return Common::kReadingFailed;
+
+ Common::Error result = saveGameData(file);
+
+ file->close();
+ return result;
+}
+
+Common::Error GlkEngine::saveGameState(int slot, const Common::String &desc) {
+ Common::String msg;
+ FileReference ref(slot, desc, fileusage_BinaryMode | fileusage_SavedGame);
+
+ strid_t file = _streams->openFileStream(&ref, filemode_Write);
+ if (file == nullptr)
+ return Common::kWritingFailed;
+
+ Common::Error result = loadGameData(file);
+
+ file->close();
+ return result;
+}
+
} // End of namespace Glk