#endif
int something_worth_saving; /* in case of panic */
int panicking; /* `panic' is in progress */
-#if defined(VMS) || defined(WIN32)
int exiting; /* an exit handler is executing */
-#endif
+ int in_moveloop;
int in_impossible;
#ifdef PANICLOG
int in_paniclog;
youmonst.movement = NORMAL_SPEED; /* give the hero some movement points */
context.move = 0;
+ program_state.in_moveloop = 1;
for(;;) {
#ifdef SAFERHANGUP
if (program_state.done_hup) end_of_input();
hangup(sig_unused) /* called as signal() handler, so sent at least one arg */
int sig_unused;
{
+ if (program_state.exiting) program_state.in_moveloop = 0;
nhwindows_hangup();
# ifdef SAFERHANGUP
/* When using SAFERHANGUP, the done_hup flag it tested in rhack
must continue running longer before attempting a hangup save. */
program_state.done_hup++;
/* defer hangup iff game appears to be in progress */
- if (program_state.something_worth_saving) return;
+ if (program_state.in_moveloop && program_state.something_worth_saving)
+ return;
# endif /* SAFERHANGUP */
end_of_input();
}
-/* SCCS Id: @(#)end.c 3.5 2007/01/02 */
+/* SCCS Id: @(#)end.c 3.5 2007/02/28 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
terminate(status)
int status;
{
+ program_state.in_moveloop = 0; /* won't be returning to normal play */
#ifdef MAC
getreturn("to exit");
#endif
that would cancel any other pending user-mode handlers */
if (program_state.exiting) return;
#endif
+ program_state.exiting = 1;
nethack_exit(status);
}
hup != (void FDECL((*),(int))) SIG_DFL &&
hup != (void FDECL((*),(int))) SIG_IGN) {
(*hup)(SIGHUP);
-#ifdef SAFERHANGUP
- end_of_input();
-#endif
}
#ifdef CHDIR