aboutsummaryrefslogtreecommitdiff
path: root/engines/glk/glk.cpp
diff options
context:
space:
mode:
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