Advanced Rogue family: fix the "score" option.

Changing the score file (when permitted) now works again, closing the
old score file and opening the new one.
This commit is contained in:
John "Elwin" Edwards 2015-05-20 08:42:17 -04:00
parent ea4244de91
commit e3620a3781
14 changed files with 105 additions and 14 deletions

View file

@ -16,7 +16,6 @@
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <limits.h>
#include <signal.h>
@ -43,8 +42,6 @@ static char *funfruit[] = {
};
#define NFRUIT (sizeof(funfruit) / sizeof (char *))
int scorefd = -1;
FILE *logfile = NULL;
void open_records(void);
main(argc, argv, envp)
@ -255,7 +252,7 @@ void
open_records(void)
{
if (scorefd == -1)
scorefd = open(score_file, O_RDWR | O_CREAT, 0666);
md_reopen_score();
#ifdef LOGFILE
if (logfile == NULL)
logfile = fopen(LOGFILE, "a");

View file

@ -695,6 +695,17 @@ md_flushinp()
#endif
}
extern int scorefd;
extern char score_file[];
void
md_reopen_score(void)
{
if (scorefd > 0)
close(scorefd);
scorefd = open(score_file, O_RDWR | O_CREAT, 0666);
}
/*
Cursor/Keypad Support

View file

@ -40,6 +40,7 @@ int put_bool(),
put_str(),
get_str(),
get_restr(),
get_score(),
put_abil(),
get_abil(),
get_quest(),
@ -65,7 +66,7 @@ OPTION optlist[] = {
{"file", "Save file: ",
(int *) file_name, put_str, get_restr },
{"score", "Score file: ",
(int *) score_file, put_str, get_restr },
(int *) score_file, put_str, get_score },
{"class", "Character class: ",
(int *)&char_type, put_abil, get_abil },
{"quest", "Quest item: ",
@ -87,6 +88,26 @@ int get_restr(char *optstr, WINDOW *win)
return get_str(optstr, win);
}
/* For the score file, which must be opened. */
int get_score(char *optstr, WINDOW *win)
{
char old_score_file[LINELEN];
int status;
if (use_savedir)
return get_restr(optstr, win);
strcpy(old_score_file, optstr);
status = get_str(optstr, win);
if (status != NORM)
return status;
if (strcmp(old_score_file, optstr))
{
md_reopen_score();
}
return status;
}
/*
* The ability field is read-only
*/

View file

@ -64,6 +64,7 @@ int pray_time = 0;
int spell_power = 0;
int turns = 0; /* Number of turns player has taken */
int quest_item = 0; /* Item player is looking for */
int scorefd = -1; /* File descriptor for the scorefile */
char nfloors = -1; /* Number of floors in this dungeon */
char curpurch[LINELEN*2]; /* name of item ready to buy */
char PLAYER = VPLAYER; /* what the player looks like */
@ -123,6 +124,7 @@ char *spacemsg = "--Press space to continue--";
char *morestr = "-- More --";
char *retstr = "[Press return to continue]";
FILE *logfile = NULL;
/*
* NOTE: the ordering of the points in this array is critical. They MUST

View file

@ -1050,6 +1050,7 @@ extern int pray_time; /* Number of prayer points/exp level */
extern int spell_power; /* Spell power left at this level */
extern int turns; /* Number of turns player has taken */
extern int quest_item; /* Item hero is looking for */
extern int scorefd; /* File descriptor for the scorefile */
extern int cur_relic[]; /* Current relics */
extern char take; /* Thing the rogue is taking */
extern char prbuf[]; /* Buffer for sprintfs */
@ -1121,3 +1122,4 @@ extern char *stones[NSTONES];
extern char *metal[NMETAL];
extern char *wood[NWOOD];
extern coord ch_ret;
extern FILE *logfile;