-/* SCCS Id: @(#)os2conf.h 3.5 1996/10/29 */
+/* SCCS Id: @(#)os2conf.h 3.5 2007/01/08 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* Copyright (c) Timo Hakulinen, 1990, 1991, 1992, 1993, 1996. */
/* NetHack may be freely redistributed. See license for details. */
#ifdef __EMX__
#include <unistd.h>
+#define sethanguphandler(foo) (void)signal(SIGHUP, (SIG_RET_TYPE)foo)
#endif
#ifndef REDO
int sig;
{
program_state.done_hup++;
- (void)signal(SIGHUP, SIG_IGN);
+ sethanguphandler((void FDECL((*),(int)))SIG_IGN);
done_intr(sig);
return;
}
(void) signal(SIGINT, (SIG_RET_TYPE) done_intr);
# if defined(UNIX) || defined(VMS) || defined (__EMX__)
(void) signal(SIGQUIT, (SIG_RET_TYPE) done_intr);
- (void) signal(SIGHUP, (SIG_RET_TYPE) done_hangup);
+ sethanguphandler(done_hangup);
# endif
#endif /* NO_SIGNAL */
dlb_cleanup();
}
+#ifdef VMS
+ /* don't call exit() if already executing within an exit handler;
+ that would cancel any other pending user-mode handlers */
+ if (program_state.exiting) return;
+#endif
nethack_exit(status);
}
-/* SCCS Id: @(#)files.c 3.5 2006/12/09 */
+/* SCCS Id: @(#)files.c 3.5 2007/01/08 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
register int x;
# if defined(UNIX) || defined(VMS)
- (void) signal(SIGHUP, SIG_IGN);
+ sethanguphandler((void FDECL((*),(int)))SIG_IGN);
# endif
/* can't access maxledgerno() before dungeons are created -dlc */
for (x = (n_dgns ? maxledgerno() : 0); x >= 0; x--)
-/* SCCS Id: @(#)save.c 3.5 2006/04/14 */
+/* SCCS Id: @(#)save.c 3.5 2007/01/08 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
# ifdef NOSAVEONHANGUP
(void) signal(SIGINT, SIG_IGN);
clearlocks();
-# ifndef VMS
terminate(EXIT_FAILURE);
-# endif
# else /* SAVEONHANGUP */
if (!program_state.done_hup++) {
# ifndef SAFERHANGUP
* against losing objects in the process of being thrown. */
if (program_state.something_worth_saving)
(void) dosave0();
-# ifdef VMS
- /* don't call exit when already within an exit handler;
- that would cancel any other pending user-mode handlers */
- if (!program_state.exiting)
-# endif
- {
- clearlocks();
- terminate(EXIT_FAILURE);
- }
+
+ clearlocks();
+ terminate(EXIT_FAILURE);
# endif /* !SAFERHANGUP */
}
-# endif
+# endif /* !NOSAVEONHANGUP */
}
#endif
fq_save = fqname(SAVEF, SAVEPREFIX, 1); /* level files take 0 */
#if defined(UNIX) || defined(VMS)
- (void) signal(SIGHUP, SIG_IGN);
+ sethanguphandler((void FDECL((*),(int)))SIG_IGN);
#endif
#ifndef NO_SIGNAL
(void) signal(SIGINT, SIG_IGN);
-/* SCCS Id: @(#)unixmain.c 3.5 2006/04/01 */
+/* SCCS Id: @(#)unixmain.c 3.5 2007/01/08 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
* It seems you really want to play.
*/
u.uhp = 1; /* prevent RIP on early quits */
-#ifdef SA_RESTART
- /* don't want reads to restart. If SA_RESTART is defined, we know
- * sigaction exists and can be used to ensure reads won't restart.
- * If it's not defined, assume reads do not restart. If reads restart
- * and a signal occurs, the game won't do anything until the read
- * succeeds (or the stream returns EOF, which might not happen if
- * reading from, say, a window manager). */
- {
- struct sigaction sact;
-
- (void) memset((char*) &sact, 0, sizeof(struct sigaction));
- sact.sa_handler = (SIG_RET_TYPE)hangup;
- (void) sigaction(SIGHUP, &sact, (struct sigaction*)0);
-#ifdef SIGXCPU
- (void) sigaction(SIGXCPU, &sact, (struct sigaction*)0);
-#endif
- }
-#else
- (void) signal(SIGHUP, (SIG_RET_TYPE) hangup);
-#ifdef SIGXCPU
- (void) signal(SIGXCPU, (SIG_RET_TYPE) hangup);
-#endif
-#endif
+ sethanguphandler((SIG_RET_TYPE)hangup);
process_options(argc, argv); /* command line options */
init_nhwindows(&argc, argv); /* now we can set up window system */
return TRUE;
}
+void
+sethanguphandler(handler)
+void FDECL((*handler), (int));
+{
+#ifdef SA_RESTART
+ /* don't want reads to restart. If SA_RESTART is defined, we know
+ * sigaction exists and can be used to ensure reads won't restart.
+ * If it's not defined, assume reads do not restart. If reads restart
+ * and a signal occurs, the game won't do anything until the read
+ * succeeds (or the stream returns EOF, which might not happen if
+ * reading from, say, a window manager). */
+ struct sigaction sact;
+
+ (void) memset((genericptr_t)&sact, 0, sizeof sact);
+ sact.sa_handler = (SIG_RET_TYPE)handler;
+ (void) sigaction(SIGHUP, &sact, (struct sigaction *)0);
+# ifdef SIGXCPU
+ (void) sigaction(SIGXCPU, &sact, (struct sigaction *)0);
+# endif
+#else /* !SA_RESTART */
+ (void) signal(SIGHUP, (SIG_RET_TYPE)handler);
+# ifdef SIGXCPU
+ (void) signal(SIGXCPU, (SIG_RET_TYPE)handler);
+# endif
+#endif /* ?SA_RESTART */
+}
+
#ifdef PORT_HELP
void
port_help()
/* used to clear hangup stuff while still giving standard traceback */
VAXC$ESTABLISH(vms_handler);
#endif
- (void) signal(SIGHUP, (SIG_RET_TYPE) hangup);
+ sethanguphandler(hangup);
process_options(argc, argv); /* command line options */
extern unsigned long FDECL(sys$delprc,(unsigned long *,const genericptr_t));
/* clean up any subprocess we've spawned that may still be hanging around */
- if (dosh_pid) (void) sys$delprc(&dosh_pid, 0), dosh_pid = 0;
- if (mail_pid) (void) sys$delprc(&mail_pid, 0), mail_pid = 0;
+ if (dosh_pid) (void) sys$delprc(&dosh_pid, (genericptr_t)0), dosh_pid = 0;
+ if (mail_pid) (void) sys$delprc(&mail_pid, (genericptr_t)0), mail_pid = 0;
#endif
/* SIGHUP doesn't seem to do anything on VMS, so we fudge it here... */
}
#endif
+void
+sethanguphandler(handler)
+void FDECL((*handler), (int));
+{
+ (void)signal(SIGHUP, (SIG_RET_TYPE)handler);
+}
+
#ifdef PORT_HELP
void
port_help()
-/* SCCS Id: @(#)vmstty.c 3.5 2005/11/19 */
+/* SCCS Id: @(#)vmstty.c 3.5 2007/01/08 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
/* tty.c - (VMS) version */
error VA_DECL(const char *,s)
VA_START(s);
VA_INIT(s, const char *);
- if(settty_needed)
+
+ if (settty_needed)
settty((char *)0);
Vprintf(s,VA_ARGS);
(void) putchar('\n');
VA_END();
#ifndef SAVE_ON_FATAL_ERROR
/* prevent vmsmain's exit handler byebye() from calling hangup() */
- (void)signal(SIGHUP, SIG_DFL);
+ sethanguphandler((void FDECL((*),(int)))SIG_DFL);
#endif
exit(EXIT_FAILURE);
}