X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=saveresume.c;h=a0fa8a86ffcb023b47484843dbcd2ab0eeee837e;hp=015b4be88c383440aae845e04715ae2192007416;hb=c2df849dade5bb7d8214c6abb6c0856b84d0d1d1;hpb=a0a35d8c7b8ed65230748647ff3c40e8119a643f diff --git a/saveresume.c b/saveresume.c index 015b4be..a0fa8a8 100644 --- a/saveresume.c +++ b/saveresume.c @@ -30,30 +30,35 @@ struct save_t { struct save_t save; /* Suspend and resume */ -int suspend(FILE *input) +int suspend(void) { + /* 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(arbitrary_messages[THIS_ACCEPTABLE], arbitrary_messages[OK_MAN], arbitrary_messages[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; @@ -66,43 +71,56 @@ int suspend(FILE *input) exit(0); } -int resume(FILE *input) +int resume(void) { + /* 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(arbitrary_messages[THIS_ACCEPTABLE], arbitrary_messages[OK_MAN], arbitrary_messages[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; } -/* end */ \ No newline at end of file +/* end */