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);
|
food_left = (int) (food_left * scale);
|
||||||
|
|
||||||
|
md_onsignal_autosave();
|
||||||
|
|
||||||
/* Set up windows */
|
/* Set up windows */
|
||||||
|
|
||||||
cw = newwin(LINES, COLS, 0, 0);
|
cw = newwin(LINES, COLS, 0, 0);
|
||||||
|
|
@ -272,6 +274,12 @@ fatal(char *s)
|
||||||
exit(100);
|
exit(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
fatal_handler(int sig)
|
||||||
|
{
|
||||||
|
fatal("");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
rnd()
|
rnd()
|
||||||
Pick a very random number.
|
Pick a very random number.
|
||||||
|
|
|
||||||
|
|
@ -1271,3 +1271,43 @@ md_readchar(WINDOW *win)
|
||||||
|
|
||||||
return(ch & 0x7F);
|
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_readchar(WINDOW *win);
|
||||||
int md_getuid(void);
|
int md_getuid(void);
|
||||||
void md_normaluser(void);
|
void md_normaluser(void);
|
||||||
|
void md_onsignal_autosave(void);
|
||||||
|
void md_ignore_signals(void);
|
||||||
|
|
||||||
#define NOOP(x) (x += 0)
|
#define NOOP(x) (x += 0)
|
||||||
#define CCHAR(x) ( (char) (x & A_CHARTEXT) )
|
#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
|
int
|
||||||
restore(char *file)
|
restore(char *file)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue