aboutsummaryrefslogtreecommitdiff
path: root/engines/glk/jacl/glk_saver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/glk/jacl/glk_saver.cpp')
-rw-r--r--engines/glk/jacl/glk_saver.cpp138
1 files changed, 52 insertions, 86 deletions
diff --git a/engines/glk/jacl/glk_saver.cpp b/engines/glk/jacl/glk_saver.cpp
index abd718fceb..54739d8222 100644
--- a/engines/glk/jacl/glk_saver.cpp
+++ b/engines/glk/jacl/glk_saver.cpp
@@ -52,38 +52,25 @@ extern int parent;
extern int noun[];
-int save_game(frefid_t saveref) {
- struct integer_type *current_integer = integer_table;
- struct function_type *current_function = function_table;
- struct string_type *current_string = string_table;
-
- int index, counter;
- strid_t bookmark = NULL;
-
- bookmark = g_vm->glk_stream_open_file(saveref, filemode_Write, 0);
-
- if (bookmark == NULL) {
- return (FALSE);
- }
-
- /* WE'RE DONE WITH THE FILE REFERENCE NOW THAT THE STREAM
- * HAS BEEN SUCCESSFULLY OPENED */
- g_vm->glk_fileref_destroy(saveref);
-
- /* THIS IS WRITTEN TO HELP VALIDATE THE SAVED GAME
- * BEFORE CONTINUING TO LOAD IT */
- write_integer(bookmark, objects);
- write_integer(bookmark, integers);
- write_integer(bookmark, functions);
- write_integer(bookmark, strings);
+bool save_game(strid_t save) {
+ integer_type *current_integer = integer_table;
+ function_type *current_function = function_table;
+ string_type *current_string = string_table;
+ int index, counter;
+
+ // This is written to help validate the saved game when it's loaded
+ write_integer(save, objects);
+ write_integer(save, integers);
+ write_integer(save, functions);
+ write_integer(save, strings);
while (current_integer != NULL) {
- write_integer(bookmark, current_integer->value);
+ write_integer(save, current_integer->value);
current_integer = current_integer->next_integer;
}
while (current_function != NULL) {
- write_integer(bookmark, current_function->call_count);
+ write_integer(save, current_function->call_count);
current_function = current_function->next_function;
}
@@ -92,68 +79,50 @@ int save_game(frefid_t saveref) {
continue;
for (counter = 0; counter < 16; counter++) {
- write_integer(bookmark, object[index]->integer[counter]);
+ write_integer(save, object[index]->integer[counter]);
}
- write_long(bookmark, object[index]->attributes);
- write_long(bookmark, object[index]->user_attributes);
+ write_long(save, object[index]->attributes);
+ write_long(save, object[index]->user_attributes);
}
- /* WRITE OUT ALL THE CURRENT VALUES OF THE STRING VARIABLES */
+ // Write out all the current values of the string variables
while (current_string != NULL) {
for (index = 0; index < 255; index++) {
- g_vm->glk_put_char_stream(bookmark, current_string->value[index]);
+ g_vm->glk_put_char_stream(save, current_string->value[index]);
}
current_string = current_string->next_string;
}
- write_integer(bookmark, player);
- write_integer(bookmark, noun[3]);
+ write_integer(save, player);
+ write_integer(save, noun[3]);
- /* SAVE THE CURRENT VOLUME OF EACH OF THE SOUND CHANNELS */
+ // Save the current volume of each of the sound channels
for (index = 0; index < 8; index++) {
sprintf(temp_buffer, "volume[%d]", index);
- write_integer(bookmark, cinteger_resolve(temp_buffer)->value);
+ write_integer(save, cinteger_resolve(temp_buffer)->value);
}
- /* SAVE THE CURRENT VALUE OF THE GLK TIMER */
- write_integer(bookmark, cinteger_resolve("timer")->value);
-
- /* CLOSE THE STREAM */
- g_vm->glk_stream_close(bookmark, NULL);
+ // Save the current value of the GLK timer
+ write_integer(save, cinteger_resolve("timer")->value);
TIME->value = FALSE;
- return (TRUE);
+ return true;
}
-int restore_game(frefid_t saveref, int warn) {
- struct integer_type *current_integer = integer_table;
- struct function_type *current_function = function_table;
- struct string_type *current_string = string_table;
-
- int index, counter;
- int file_objects,
- file_integers,
- file_functions,
- file_strings;
- strid_t bookmark;
+bool restore_game(strid_t save, bool warn) {
+ integer_type *current_integer = integer_table;
+ function_type *current_function = function_table;
+ string_type *current_string = string_table;
- bookmark = g_vm->glk_stream_open_file(saveref, filemode_Read, 0);
+ int index, counter;
+ int file_objects, file_integers, file_functions, file_strings;
- if (!bookmark) {
- return (FALSE);
- }
-
- /* WE'RE DONE WITH THE FILE REFERENCE NOW THAT THE STREAM
- * HAS BEEN SUCCESSFULLY OPENED */
- g_vm->glk_fileref_destroy(saveref);
-
- /* THIS IS WRITTEN TO HELP VALIDATE THE SAVED GAME
- * BEFORE CONTINUING TO LOAD IT */
- file_objects = read_integer(bookmark);
- file_integers = read_integer(bookmark);
- file_functions = read_integer(bookmark);
- file_strings = read_integer(bookmark);
+ // Read properties to validate the savegame is for this game
+ file_objects = read_integer(save);
+ file_integers = read_integer(save);
+ file_functions = read_integer(save);
+ file_strings = read_integer(save);
if (file_objects != objects
|| file_integers != integers
@@ -162,17 +131,17 @@ int restore_game(frefid_t saveref, int warn) {
if (warn == FALSE) {
log_error(cstring_resolve("BAD_SAVED_GAME")->value, PLUS_STDOUT);
}
- g_vm->glk_stream_close(bookmark, NULL);
+ g_vm->glk_stream_close(save, NULL);
return (FALSE);
}
while (current_integer != NULL) {
- current_integer->value = read_integer(bookmark);
+ current_integer->value = read_integer(save);
current_integer = current_integer->next_integer;
}
while (current_function != NULL) {
- current_function->call_count = read_integer(bookmark);
+ current_function->call_count = read_integer(save);
current_function = current_function->next_function;
}
@@ -181,47 +150,44 @@ int restore_game(frefid_t saveref, int warn) {
continue;
for (counter = 0; counter < 16; counter++) {
- object[index]->integer[counter] = read_integer(bookmark);
+ object[index]->integer[counter] = read_integer(save);
}
- object[index]->attributes = read_integer(bookmark);
- object[index]->user_attributes = read_integer(bookmark);
+ object[index]->attributes = read_integer(save);
+ object[index]->user_attributes = read_integer(save);
}
while (current_string != NULL) {
for (index = 0; index < 255; index++) {
- current_string->value[index] = g_vm->glk_get_char_stream(bookmark);
+ current_string->value[index] = g_vm->glk_get_char_stream(save);
}
current_string = current_string->next_string;
}
- player = read_integer(bookmark);
- noun[3] = read_integer(bookmark);
+ player = read_integer(save);
+ noun[3] = read_integer(save);
- /* RESTORE THE CURRENT VOLUME OF EACH OF THE SOUND CHANNELS */
+ // Restore the current volume of each of the sound channels
for (index = 0; index < 8; index++) {
sprintf(temp_buffer, "volume[%d]", index);
- counter = read_integer(bookmark);
+ counter = read_integer(save);
cinteger_resolve(temp_buffer)->value = counter;
if (SOUND_SUPPORTED->value) {
- /* SET THE GLK VOLUME */
+ // Set the GLK volume
g_vm->glk_schannel_set_volume(sound_channel[index], (glui32) counter);
}
}
- /* RESTORE THE CURRENT VALUE OF THE GLK TIMER */
- counter = read_integer(bookmark);
+ // Restore the current value of the GLK timer
+ counter = read_integer(save);
cinteger_resolve("timer")->value = counter;
- /* SET THE GLK TIMER */
+ // Set the GLK timer
g_vm->glk_request_timer_events((glui32) counter);
- /* CLOSE THE STREAM */
- g_vm->glk_stream_close(bookmark, NULL);
-
TIME->value = FALSE;
- return (TRUE);
+ return true;
}
void write_integer(strid_t stream, int x) {