X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=saveresume.c;h=6f570b9aab8a874fe4f0a3aad4b20468ef8ff4da;hp=015b4be88c383440aae845e04715ae2192007416;hb=f862f9f1d508e00bccc208e66b1d31a5e530ab3e;hpb=a0a35d8c7b8ed65230748647ff3c40e8119a643f diff --git a/saveresume.c b/saveresume.c index 015b4be..6f570b9 100644 --- a/saveresume.c +++ b/saveresume.c @@ -32,28 +32,33 @@ struct save_t save; /* Suspend and resume */ int suspend(FILE *input) { + /* Suspend. Offer to save things in a file, but charging + * some points (so can't win by using saved games to retry + * battles or to start over after learning zzword). + * If ADVENT_NOSAVE is defined, do nothing instead. */ + +#ifdef ADVENT_NOSAVE + return GO_UNKNOWN; +#endif long i, k; FILE *fp = NULL; - /* Suspend. Offer to save things in a file, but charging - * some points (so can't win by using saved games to retry - * battles or to start over after learning zzword). */ RSPEAK(SUSPEND_WARNING); - if (!YES(input,THIS_ACCEPTABLE,OK_MAN,OK_MAN)) return GO_CLEAROBJ; - game.saved=game.saved+5; + if (!YES(input, THIS_ACCEPTABLE, OK_MAN, OK_MAN)) return GO_CLEAROBJ; + game.saved = game.saved + 5; while (fp == NULL) { - char* name = linenoise("\nFile name: "); - if (name == NULL) - return GO_TOP; - fp = fopen(name, WRITE_MODE); - if (fp == NULL) - printf("Can't open file %s, try again.\n", name); - linenoiseFree(name); + char* name = linenoise("\nFile name: "); + if (name == NULL) + return GO_TOP; + fp = fopen(name, WRITE_MODE); + if (fp == NULL) + printf("Can't open file %s, try again.\n", name); + linenoiseFree(name); } - DATIME(&i,&k); - k=i+650*k; + DATIME(&i, &k); + k = i + 650 * k; save.savetime = k; save.mode = -1; save.version = VRSION; @@ -68,39 +73,52 @@ int suspend(FILE *input) int resume(FILE *input) { + /* Resume. Read a suspended game back from a file. + * If ADVENT_NOSAVE is defined, do nothing instead. */ + +#ifdef ADVENT_NOSAVE + return GO_UNKNOWN; +#endif FILE *fp = NULL; - - /* Resume. Read a suspended game back from a file. */ + if (game.loc != 1 || game.abbrev[1] != 1) { - RSPEAK(RESUME_ABANDON); - if (!YES(input,THIS_ACCEPTABLE,OK_MAN,OK_MAN)) return GO_CLEAROBJ; + RSPEAK(RESUME_ABANDON); + if (!YES(input, THIS_ACCEPTABLE, OK_MAN, OK_MAN)) return GO_CLEAROBJ; } while (fp == NULL) { - char* name = linenoise("\nFile name: "); - if (name == NULL) - return GO_TOP; - fp = fopen(name, READ_MODE); - if (fp == NULL) - printf("Can't open file %s, try again.\n", name); - linenoiseFree(name); + char* name = linenoise("\nFile name: "); + if (name == NULL) + return GO_TOP; + fp = fopen(name, READ_MODE); + if (fp == NULL) + printf("Can't open file %s, try again.\n", name); + linenoiseFree(name); } - return restore(fp); + return restore(fp); } -int restore(FILE* fp){ +int restore(FILE* fp) +{ + /* Read and restore game state from file, assuming + * sane initial state. + * If ADVENT_NOSAVE is defined, do nothing instead. */ +#ifdef ADVENT_NOSAVE + return GO_UNKNOWN; +#endif + IGNORE(fread(&save, sizeof(struct save_t), 1, fp)); fclose(fp); if (save.version != VRSION) { - SETPRM(1,save.version/10,MOD(save.version,10)); - SETPRM(3,VRSION/10,MOD(VRSION,10)); + SETPRM(1, save.version / 10, MOD(save.version, 10)); + SETPRM(3, VRSION / 10, MOD(VRSION, 10)); RSPEAK(VERSION_SKEW); } else { memcpy(&game, &save.game, sizeof(struct game_t)); OBJSND[BIRD] = save.bird; OBJTXT[OYSTER] = save.bivalve; - game.zzword=RNDVOC(3,game.zzword); + game.zzword = RNDVOC(3, game.zzword); } return GO_TOP; }