aboutsummaryrefslogtreecommitdiff
path: root/engines/glk/alan3/save.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/glk/alan3/save.cpp')
-rw-r--r--engines/glk/alan3/save.cpp373
1 files changed, 185 insertions, 188 deletions
diff --git a/engines/glk/alan3/save.cpp b/engines/glk/alan3/save.cpp
index 170cfd4a7d..f1b7d0df4c 100644
--- a/engines/glk/alan3/save.cpp
+++ b/engines/glk/alan3/save.cpp
@@ -25,335 +25,332 @@
/*----------------------------------------------------------------------*/
static void saveStrings(AFILE saveFile) {
- StringInitEntry *initEntry;
-
- if (header->stringInitTable != 0)
- for (initEntry = (StringInitEntry *)pointerTo(header->stringInitTable);
- !isEndOfArray(initEntry); initEntry++) {
- char *attr = (char *)getInstanceStringAttribute(initEntry->instanceCode, initEntry->attributeCode);
- Aint length = strlen(attr) + 1;
- fwrite((void *)&length, sizeof(length), 1, saveFile);
- fwrite((void *)attr, 1, length, saveFile);
- }
+ StringInitEntry *initEntry;
+
+ if (header->stringInitTable != 0)
+ for (initEntry = (StringInitEntry *)pointerTo(header->stringInitTable);
+ !isEndOfArray(initEntry); initEntry++) {
+ char *attr = (char *)getInstanceStringAttribute(initEntry->instanceCode, initEntry->attributeCode);
+ Aint length = strlen(attr) + 1;
+ fwrite((void *)&length, sizeof(length), 1, saveFile);
+ fwrite((void *)attr, 1, length, saveFile);
+ }
}
/*----------------------------------------------------------------------*/
static void saveSets(AFILE saveFile) {
- SetInitEntry *initEntry;
-
- if (header->setInitTable != 0)
- for (initEntry = (SetInitEntry *)pointerTo(header->setInitTable);
- !isEndOfArray(initEntry); initEntry++) {
- Set *attr = (Set *)getInstanceSetAttribute(initEntry->instanceCode, initEntry->attributeCode);
- fwrite((void *)&attr->size, sizeof(attr->size), 1, saveFile);
- fwrite((void *)attr->members, sizeof(attr->members[0]), attr->size, saveFile);
- }
+ SetInitEntry *initEntry;
+
+ if (header->setInitTable != 0)
+ for (initEntry = (SetInitEntry *)pointerTo(header->setInitTable);
+ !isEndOfArray(initEntry); initEntry++) {
+ Set *attr = (Set *)getInstanceSetAttribute(initEntry->instanceCode, initEntry->attributeCode);
+ fwrite((void *)&attr->size, sizeof(attr->size), 1, saveFile);
+ fwrite((void *)attr->members, sizeof(attr->members[0]), attr->size, saveFile);
+ }
}
/*----------------------------------------------------------------------*/
static void saveGameInfo(AFILE saveFile) {
- fwrite((void *)"ASAV", 1, 4, saveFile);
- fwrite((void *)&header->version, 1, sizeof(Aword), saveFile);
- fwrite((void *)adventureName, 1, strlen(adventureName)+1, saveFile);
- fwrite((void *)&header->uid, 1, sizeof(Aword), saveFile);
+ fwrite((void *)"ASAV", 1, 4, saveFile);
+ fwrite((void *)&header->version, 1, sizeof(Aword), saveFile);
+ fwrite((void *)adventureName, 1, strlen(adventureName) + 1, saveFile);
+ fwrite((void *)&header->uid, 1, sizeof(Aword), saveFile);
}
/*----------------------------------------------------------------------*/
static void saveAdmin(AFILE saveFile) {
- fwrite((void *)&admin[1], sizeof(AdminEntry), header->instanceMax, saveFile);
+ fwrite((void *)&admin[1], sizeof(AdminEntry), header->instanceMax, saveFile);
}
/*----------------------------------------------------------------------*/
static void saveAttributeArea(AFILE saveFile) {
- fwrite((void*)attributes, header->attributesAreaSize, sizeof(Aword), saveFile);
+ fwrite((void *)attributes, header->attributesAreaSize, sizeof(Aword), saveFile);
}
/*----------------------------------------------------------------------*/
static void saveEventQueue(AFILE saveFile) {
- fwrite((void *)&eventQueueTop, sizeof(eventQueueTop), 1, saveFile);
- fwrite((void *)&eventQueue[0], sizeof(eventQueue[0]), eventQueueTop, saveFile);
+ fwrite((void *)&eventQueueTop, sizeof(eventQueueTop), 1, saveFile);
+ fwrite((void *)&eventQueue[0], sizeof(eventQueue[0]), eventQueueTop, saveFile);
}
/*----------------------------------------------------------------------*/
static void saveCurrentValues(AFILE saveFile) {
- fwrite((void *)&current, sizeof(current), 1, saveFile);
+ fwrite((void *)&current, sizeof(current), 1, saveFile);
}
/*----------------------------------------------------------------------*/
static void saveScores(AFILE saveFile) {
- fwrite((void *)scores, sizeof(Aword), header->scoreCount, saveFile);
+ fwrite((void *)scores, sizeof(Aword), header->scoreCount, saveFile);
}
/*----------------------------------------------------------------------*/
static void saveGame(AFILE saveFile) {
- /* Save tag, version of interpreter, name and uid of game */
- saveGameInfo(saveFile);
+ /* Save tag, version of interpreter, name and uid of game */
+ saveGameInfo(saveFile);
- /* Save current values */
- saveCurrentValues(saveFile);
+ /* Save current values */
+ saveCurrentValues(saveFile);
- saveAttributeArea(saveFile);
- saveAdmin(saveFile);
+ saveAttributeArea(saveFile);
+ saveAdmin(saveFile);
- saveEventQueue(saveFile);
+ saveEventQueue(saveFile);
- saveScores(saveFile);
+ saveScores(saveFile);
- saveStrings(saveFile);
- saveSets(saveFile);
+ saveStrings(saveFile);
+ saveSets(saveFile);
}
/*======================================================================*/
-void save(void)
-{
+void save(void) {
#ifdef HAVE_GLK
- frefid_t saveFileRef;
- strid_t saveFile;
- saveFileRef = glk_fileref_create_by_prompt(fileusage_SavedGame, filemode_Write, 0);
- if (saveFileRef == NULL)
- error(M_SAVEFAILED);
- saveFile = glk_stream_open_file(saveFileRef, filemode_Write, 0);
+ frefid_t saveFileRef;
+ strid_t saveFile;
+ saveFileRef = glk_fileref_create_by_prompt(fileusage_SavedGame, filemode_Write, 0);
+ if (saveFileRef == NULL)
+ error(M_SAVEFAILED);
+ saveFile = glk_stream_open_file(saveFileRef, filemode_Write, 0);
#else
- FILE *saveFile;
- char str[256];
-
- current.location = where(HERO, DIRECT);
- /* First save ? */
- if (saveFileName[0] == '\0') {
- strcpy(saveFileName, adventureName);
- strcat(saveFileName, ".sav");
- }
- printMessage(M_SAVEWHERE);
- sprintf(str, "(%s) : ", saveFileName);
- output(str);
+ FILE *saveFile;
+ char str[256];
+
+ current.location = where(HERO, DIRECT);
+ /* First save ? */
+ if (saveFileName[0] == '\0') {
+ strcpy(saveFileName, adventureName);
+ strcat(saveFileName, ".sav");
+ }
+ printMessage(M_SAVEWHERE);
+ sprintf(str, "(%s) : ", saveFileName);
+ output(str);
#ifdef USE_READLINE
- readline(str);
+ readline(str);
#else
- gets(str);
+ gets(str);
#endif
- if (str[0] == '\0')
- strcpy(str, saveFileName);
- col = 1;
- if ((saveFile = fopen(str, READ_MODE)) != NULL)
- /* It already existed */
- if (!regressionTestOption) {
- /* Ask for overwrite confirmation */
- if (!confirm(M_SAVEOVERWRITE))
- abortPlayerCommand(); /* Return to player without saying anything */
- }
- strcpy(saveFileName, str);
- if ((saveFile = fopen(saveFileName, WRITE_MODE)) == NULL)
- error(M_SAVEFAILED);
+ if (str[0] == '\0')
+ strcpy(str, saveFileName);
+ col = 1;
+ if ((saveFile = fopen(str, READ_MODE)) != NULL)
+ /* It already existed */
+ if (!regressionTestOption) {
+ /* Ask for overwrite confirmation */
+ if (!confirm(M_SAVEOVERWRITE))
+ abortPlayerCommand(); /* Return to player without saying anything */
+ }
+ strcpy(saveFileName, str);
+ if ((saveFile = fopen(saveFileName, WRITE_MODE)) == NULL)
+ error(M_SAVEFAILED);
#endif
- saveGame(saveFile);
+ saveGame(saveFile);
- fclose(saveFile);
+ fclose(saveFile);
}
/*----------------------------------------------------------------------*/
static void restoreStrings(AFILE saveFile) {
- StringInitEntry *initEntry;
-
- if (header->stringInitTable != 0)
- for (initEntry = (StringInitEntry *)pointerTo(header->stringInitTable);
- !isEndOfArray(initEntry); initEntry++) {
- Aint length;
- char *string;
- fread((void *)&length, sizeof(Aint), 1, saveFile);
- string = allocate(length+1);
- fread((void *)string, 1, length, saveFile);
- setInstanceAttribute(initEntry->instanceCode, initEntry->attributeCode, toAptr(string));
- }
+ StringInitEntry *initEntry;
+
+ if (header->stringInitTable != 0)
+ for (initEntry = (StringInitEntry *)pointerTo(header->stringInitTable);
+ !isEndOfArray(initEntry); initEntry++) {
+ Aint length;
+ char *string;
+ fread((void *)&length, sizeof(Aint), 1, saveFile);
+ string = allocate(length + 1);
+ fread((void *)string, 1, length, saveFile);
+ setInstanceAttribute(initEntry->instanceCode, initEntry->attributeCode, toAptr(string));
+ }
}
/*----------------------------------------------------------------------*/
static void restoreSets(AFILE saveFile) {
- SetInitEntry *initEntry;
-
- if (header->setInitTable != 0)
- for (initEntry = (SetInitEntry *)pointerTo(header->setInitTable);
- !isEndOfArray(initEntry); initEntry++) {
- Aint setSize;
- Set *set;
- int i;
-
- fread((void *)&setSize, sizeof(setSize), 1, saveFile);
- set = newSet(setSize);
- for (i = 0; i < setSize; i++) {
- Aword member;
- fread((void *)&member, sizeof(member), 1, saveFile);
- addToSet(set, member);
- }
- setInstanceAttribute(initEntry->instanceCode, initEntry->attributeCode, toAptr(set));
- }
+ SetInitEntry *initEntry;
+
+ if (header->setInitTable != 0)
+ for (initEntry = (SetInitEntry *)pointerTo(header->setInitTable);
+ !isEndOfArray(initEntry); initEntry++) {
+ Aint setSize;
+ Set *set;
+ int i;
+
+ fread((void *)&setSize, sizeof(setSize), 1, saveFile);
+ set = newSet(setSize);
+ for (i = 0; i < setSize; i++) {
+ Aword member;
+ fread((void *)&member, sizeof(member), 1, saveFile);
+ addToSet(set, member);
+ }
+ setInstanceAttribute(initEntry->instanceCode, initEntry->attributeCode, toAptr(set));
+ }
}
/*----------------------------------------------------------------------*/
static void restoreScores(AFILE saveFile) {
- fread((void *)scores, sizeof(Aword), header->scoreCount, saveFile);
+ fread((void *)scores, sizeof(Aword), header->scoreCount, saveFile);
}
/*----------------------------------------------------------------------*/
static void restoreEventQueue(AFILE saveFile) {
- fread((void *)&eventQueueTop, sizeof(eventQueueTop), 1, saveFile);
- if (eventQueueTop > eventQueueSize) {
- deallocate(eventQueue);
- eventQueue = allocate(eventQueueTop*sizeof(eventQueue[0]));
- }
- fread((void *)&eventQueue[0], sizeof(eventQueue[0]), eventQueueTop, saveFile);
+ fread((void *)&eventQueueTop, sizeof(eventQueueTop), 1, saveFile);
+ if (eventQueueTop > eventQueueSize) {
+ deallocate(eventQueue);
+ eventQueue = allocate(eventQueueTop * sizeof(eventQueue[0]));
+ }
+ fread((void *)&eventQueue[0], sizeof(eventQueue[0]), eventQueueTop, saveFile);
}
/*----------------------------------------------------------------------*/
static void restoreAdmin(AFILE saveFile) {
- /* Restore admin for instances, remember to reset attribute area pointer */
- int i;
- for (i = 1; i <= header->instanceMax; i++) {
- AttributeEntry *currentAttributesArea = admin[i].attributes;
- fread((void *)&admin[i], sizeof(AdminEntry), 1, saveFile);
- admin[i].attributes = currentAttributesArea;
- }
+ /* Restore admin for instances, remember to reset attribute area pointer */
+ int i;
+ for (i = 1; i <= header->instanceMax; i++) {
+ AttributeEntry *currentAttributesArea = admin[i].attributes;
+ fread((void *)&admin[i], sizeof(AdminEntry), 1, saveFile);
+ admin[i].attributes = currentAttributesArea;
+ }
}
/*----------------------------------------------------------------------*/
static void restoreAttributeArea(AFILE saveFile) {
- fread((void *)attributes, header->attributesAreaSize, sizeof(Aword), saveFile);
+ fread((void *)attributes, header->attributesAreaSize, sizeof(Aword), saveFile);
}
/*----------------------------------------------------------------------*/
static void restoreCurrentValues(AFILE saveFile) {
- fread((void *)&current, sizeof(current), 1, saveFile);
+ fread((void *)&current, sizeof(current), 1, saveFile);
}
/*----------------------------------------------------------------------*/
static void verifyGameId(AFILE saveFile) {
- Aword savedUid;
+ Aword savedUid;
- fread((void *)&savedUid, sizeof(Aword), 1, saveFile);
- if (!ignoreErrorOption && savedUid != header->uid)
- error(M_SAVEVERS);
+ fread((void *)&savedUid, sizeof(Aword), 1, saveFile);
+ if (!ignoreErrorOption && savedUid != header->uid)
+ error(M_SAVEVERS);
}
/*----------------------------------------------------------------------*/
static void verifyGameName(AFILE saveFile) {
- char savedName[256];
- int i = 0;
+ char savedName[256];
+ int i = 0;
- while ((savedName[i++] = fgetc(saveFile)) != '\0');
- if (strcmp(savedName, adventureName) != 0)
- error(M_SAVENAME);
+ while ((savedName[i++] = fgetc(saveFile)) != '\0');
+ if (strcmp(savedName, adventureName) != 0)
+ error(M_SAVENAME);
}
/*----------------------------------------------------------------------*/
static void verifyCompilerVersion(AFILE saveFile) {
- char savedVersion[4];
+ char savedVersion[4];
- fread((void *)&savedVersion, sizeof(Aword), 1, saveFile);
- if (!ignoreErrorOption && strncmp(savedVersion, header->version, 4))
- error(M_SAVEVERS);
+ fread((void *)&savedVersion, sizeof(Aword), 1, saveFile);
+ if (!ignoreErrorOption && strncmp(savedVersion, header->version, 4))
+ error(M_SAVEVERS);
}
/*----------------------------------------------------------------------*/
static void verifySaveFile(AFILE saveFile) {
- char string[256];
+ char string[256];
- fread((void *)&string, 1, 4, saveFile);
- string[4] = '\0';
- if (strcmp(string, "ASAV") != 0)
- error(M_NOTASAVEFILE);
+ fread((void *)&string, 1, 4, saveFile);
+ string[4] = '\0';
+ if (strcmp(string, "ASAV") != 0)
+ error(M_NOTASAVEFILE);
}
/*----------------------------------------------------------------------*/
-static void restoreGame(AFILE saveFile)
-{
- if (saveFile == NULL) syserr("'restoreGame()' from a null fileref");
+static void restoreGame(AFILE saveFile) {
+ if (saveFile == NULL) syserr("'restoreGame()' from a null fileref");
- verifySaveFile(saveFile);
+ verifySaveFile(saveFile);
- /* Verify version of compiler/interpreter of saved game with us */
- verifyCompilerVersion(saveFile);
+ /* Verify version of compiler/interpreter of saved game with us */
+ verifyCompilerVersion(saveFile);
- /* Verify name of game */
- verifyGameName(saveFile);
+ /* Verify name of game */
+ verifyGameName(saveFile);
- /* Verify unique id of game */
- verifyGameId(saveFile);
+ /* Verify unique id of game */
+ verifyGameId(saveFile);
- restoreCurrentValues(saveFile);
- restoreAttributeArea(saveFile);
- restoreAdmin(saveFile);
- restoreEventQueue(saveFile);
- restoreScores(saveFile);
- restoreStrings(saveFile);
- restoreSets(saveFile);
+ restoreCurrentValues(saveFile);
+ restoreAttributeArea(saveFile);
+ restoreAdmin(saveFile);
+ restoreEventQueue(saveFile);
+ restoreScores(saveFile);
+ restoreStrings(saveFile);
+ restoreSets(saveFile);
}
/*======================================================================*/
-void restore(void)
-{
+void restore(void) {
#ifdef HAVE_GLK
- frefid_t saveFileRef;
- strid_t saveFile;
- saveFileRef = glk_fileref_create_by_prompt(fileusage_SavedGame, filemode_Read, 0);
- if (saveFileRef == NULL) return;
- saveFile = glk_stream_open_file(saveFileRef, filemode_Read, 0);
- if (saveFile == NULL) return;
+ frefid_t saveFileRef;
+ strid_t saveFile;
+ saveFileRef = glk_fileref_create_by_prompt(fileusage_SavedGame, filemode_Read, 0);
+ if (saveFileRef == NULL) return;
+ saveFile = glk_stream_open_file(saveFileRef, filemode_Read, 0);
+ if (saveFile == NULL) return;
#else
- char str[1000];
- FILE *saveFile;
-
- current.location = where(HERO, DIRECT);
- /* First save ? */
- if (saveFileName[0] == '\0') {
- strcpy(saveFileName, adventureName);
- strcat(saveFileName, ".sav");
- }
- printMessage(M_RESTOREFROM);
- sprintf(str, "(%s) : ", saveFileName);
- output(str);
+ char str[1000];
+ FILE *saveFile;
+
+ current.location = where(HERO, DIRECT);
+ /* First save ? */
+ if (saveFileName[0] == '\0') {
+ strcpy(saveFileName, adventureName);
+ strcat(saveFileName, ".sav");
+ }
+ printMessage(M_RESTOREFROM);
+ sprintf(str, "(%s) : ", saveFileName);
+ output(str);
#ifdef USE_READLINE
- readline(str);
+ readline(str);
#else
- gets(str);
+ gets(str);
#endif
- col = 1;
- if (str[0] == '\0') {
- strcpy(str, saveFileName);
- }
- if ((saveFile = fopen(str, READ_MODE)) == NULL)
- error(M_SAVEMISSING);
- strcpy(saveFileName, str); /* Save it for future use */
+ col = 1;
+ if (str[0] == '\0') {
+ strcpy(str, saveFileName);
+ }
+ if ((saveFile = fopen(str, READ_MODE)) == NULL)
+ error(M_SAVEMISSING);
+ strcpy(saveFileName, str); /* Save it for future use */
#endif
- restoreGame(saveFile);
+ restoreGame(saveFile);
- fclose(saveFile);
+ fclose(saveFile);
}
#endif