Mercurial > hg > early-roguelike
diff urogue/options.c @ 293:9dcf3344d3fd
UltraRogue: fix changing the score option.
Changing the score file now works again, if use_savedir is not set. If
it is, an error message is shown.
author | John "Elwin" Edwards |
---|---|
date | Fri, 29 Dec 2017 17:38:08 -0500 |
parents | 2b452dbf0138 |
children | 0250220d8cdd |
line wrap: on
line diff
--- a/urogue/options.c Fri Dec 29 14:16:24 2017 -0500 +++ b/urogue/options.c Fri Dec 29 17:38:08 2017 -0500 @@ -24,6 +24,7 @@ #define EQSTR(a, b, c) (strncmp(a, b, c) == 0) int get_restr(opt_arg *opt, WINDOW *win); +int get_score(opt_arg *opt, WINDOW *win); /* description of an option and what to do with it */ static OPTION optlist[] = @@ -35,7 +36,7 @@ {"name", "Name (name): ", &whoami, put_str, get_restr}, {"fruit", "Fruit (fruit): ", &fruit, put_str, get_str}, {"file", "Save file (file): ", &file_name, put_str, get_restr}, -{"score", "Score file (score): ", &score_file, put_str, get_restr}, +{"score", "Score file (score): ", &score_file, put_str, get_score}, {"class", "Character class (class): ",&char_type, put_abil, get_abil} }; @@ -583,3 +584,24 @@ return(NORM); } + +int +get_score(opt_arg *opt, WINDOW *win) +{ + char old_score_file[2*LINELEN]; + int status; + + if (use_savedir) + return get_restr(opt, win); + + strncpy(old_score_file, opt->str, 2*LINELEN); + old_score_file[2*LINELEN - 1] = '\0'; + status = get_str(opt, win); + if (status == NORM && strcmp(old_score_file, opt->str)) { + fclose(fd_score); + fd_score = fopen(score_file, "r+"); + if (fd_score == NULL) + fd_score = fopen(score_file, "a+"); + } + return status; +}