UltraRogue: add the autosave feature.

UltraRogue now automatically saves the game when SIGHUP or SIGTERM is
received.
This commit is contained in:
John "Elwin" Edwards 2017-09-03 19:58:22 -04:00
parent 8c77aafa62
commit 6c46840eab
4 changed files with 62 additions and 0 deletions

View file

@ -197,6 +197,8 @@ main(int argc, char *argv[])
food_left = (int) (food_left * scale);
md_onsignal_autosave();
/* Set up windows */
cw = newwin(LINES, COLS, 0, 0);
@ -272,6 +274,12 @@ fatal(char *s)
exit(100);
}
void
fatal_handler(int sig)
{
fatal("");
}
/*
rnd()
Pick a very random number.

View file

@ -1271,3 +1271,43 @@ md_readchar(WINDOW *win)
return(ch & 0x7F);
}
extern void auto_save(int sig);
extern void fatal_handler(int sig);
extern void quit_handler(int sig);
void
md_onsignal_autosave(void)
{
#ifdef SIGHUP
signal(SIGHUP, auto_save);
#endif
#ifdef SIGQUIT
signal(SIGQUIT, fatal_handler);
#endif
#ifdef SIGTERM
signal(SIGTERM, auto_save);
#endif
#ifdef SIGINT
signal(SIGINT, quit_handler);
#endif
return;
}
void
md_ignore_signals(void)
{
#ifdef SIGHUP
signal(SIGHUP, SIG_IGN);
#endif
#ifdef SIGQUIT
signal(SIGQUIT, SIG_IGN);
#endif
#ifdef SIGTERM
signal(SIGTERM, SIG_IGN);
#endif
#ifdef SIGINT
signal(SIGINT, SIG_IGN);
#endif
return;
}

View file

@ -1813,6 +1813,8 @@ void md_srandom(long seed);
int md_readchar(WINDOW *win);
int md_getuid(void);
void md_normaluser(void);
void md_onsignal_autosave(void);
void md_ignore_signals(void);
#define NOOP(x) (x += 0)
#define CCHAR(x) ( (char) (x & A_CHARTEXT) )

View file

@ -115,6 +115,18 @@ save_savedir_game(void)
}
}
void
auto_save(int sig)
{
FILE *savef;
md_ignore_signals();
if (file_name[0] && (savef = fopen(file_name, "w"))) {
save_file(savef);
}
exit(0);
}
int
restore(char *file)
{