UltraRogue: add the autosave feature.
UltraRogue now automatically saves the game when SIGHUP or SIGTERM is received.
This commit is contained in:
parent
8c77aafa62
commit
6c46840eab
4 changed files with 62 additions and 0 deletions
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) )
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue