diff options
author | zelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-07-28 05:40:26 +0000 |
---|---|---|
committer | zelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-07-28 05:40:26 +0000 |
commit | 9ce3949248e40302b8474b49a42f778e933b0627 (patch) | |
tree | 94438e6811566834e0d210e3eaa1e71bf266a724 /crawl-ref/source/libunix.h | |
parent | 72c1249ae7f4841dc8b335cb3a0a5ce81cb45887 (diff) | |
download | crawl-ref-9ce3949248e40302b8474b49a42f778e933b0627.tar.gz crawl-ref-9ce3949248e40302b8474b49a42f778e933b0627.zip |
Generalized solution to the "disconnect at --more--" problem (e.g., disconnect
at the more after "You have lost your religion!" to avoid the negative
consequences of excommunication): when a HUP signal is received, instead of
immediately saving the game, close the stdin stream, which will cause all of
the Curses calls which normal block on key-presses to unblock, so that the code
after a more() call will execute before the disconnected game is saved (which
will happen in _input() in acr.cc). This only affects Curses
(non-tiles/console) UNIX builds which have both USE_UNIX_SIGNALS and
SIGHUP_SAVE defined.
Exceptions to the above:
* If HUP is received during a call to yesno() with safeanswer == 0, then
the game will be saved immediately, since there's no way for the
function to tell which answer is safe to give automatically.
* If HUP is received while selecting the target for a controlled teleport
then the teleport will be canceled, since otherwise a target other than
the intended one might be the one under the cursor when the disconnect
happened.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10443 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/libunix.h')
-rw-r--r-- | crawl-ref/source/libunix.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/crawl-ref/source/libunix.h b/crawl-ref/source/libunix.h index 4816e43a87..8e6b2d943b 100644 --- a/crawl-ref/source/libunix.h +++ b/crawl-ref/source/libunix.h @@ -68,6 +68,10 @@ inline bool is_smart_cursor_enabled() { return (false); } void set_mouse_enabled(bool enabled); +#if defined(SIGHUP_SAVE) && defined(USE_UNIX_SIGNALS) +void sighup_save_and_exit(); +#endif + #ifndef _LIBUNIX_IMPLEMENTATION /* Some stuff from curses, to remove compiling warnings.. */ extern "C" |