|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 3294 (0xcde)
Types: TextFile
Names: »signals.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦4fd8323b9⟧ »EurOpenD3/mail/elm2.3.tar.Z«
└─⟦698c4f91f⟧
└─⟦this⟧ »src/signals.c«
static char rcsid[] = "@(#)$Id: signals.c,v 4.1 90/04/28 22:44:10 syd Exp $";
/*******************************************************************************
* The Elm Mail System - $Revision: 4.1 $ $State: Exp $
*
* Copyright (c) 1986, 1987 Dave Taylor
* Copyright (c) 1988, 1989, 1990 USENET Community Trust
*******************************************************************************
* Bug reports, patches, comments, suggestions should be sent to:
*
* Syd Weinstein, Elm Coordinator
* elm@DSI.COM dsinc!elm
*
*******************************************************************************
* $Log: signals.c,v $
* Revision 4.1 90/04/28 22:44:10 syd
* checkin of Elm 2.3 as of Release PL0
*
*
******************************************************************************/
/** This set of routines traps various signals and informs the
user of the error, leaving the program in a nice, graceful
manner.
**/
#include "headers.h"
#include <signal.h>
#ifdef VOIDSIG
typedef void sighan_type;
#else
typedef int sighan_type;
#endif
extern int pipe_abort; /* set to TRUE if receive SIGPIPE */
sighan_type
quit_signal()
{
dprint(1, (debugfile, "\n\n** Received SIGQUIT **\n\n\n\n"));
leave();
}
sighan_type
hup_signal()
{
dprint(1, (debugfile, "\n\n** Received SIGHUP **\n\n\n\n"));
leave();
}
sighan_type
term_signal()
{
dprint(1, (debugfile, "\n\n** Received SIGTERM **\n\n\n\n"));
leave();
}
sighan_type
ill_signal()
{
dprint(1, (debugfile, "\n\n** Received SIGILL **\n\n\n\n"));
PutLine0(LINES, 0, "\n\nIllegal Instruction signal!\n\n");
emergency_exit();
}
sighan_type
fpe_signal()
{
dprint(1, (debugfile, "\n\n** Received SIGFPE **\n\n\n\n"));
PutLine0(LINES, 0,"\n\nFloating Point Exception signal!\n\n");
emergency_exit();
}
sighan_type
bus_signal()
{
dprint(1, (debugfile, "\n\n** Received SIGBUS **\n\n\n\n"));
PutLine0(LINES, 0,"\n\nBus Error signal!\n\n");
emergency_exit();
}
sighan_type
segv_signal()
{
dprint(1, (debugfile,"\n\n** Received SIGSEGV **\n\n\n\n"));
PutLine0(LINES, 0,"\n\nSegment Violation signal!\n\n");
emergency_exit();
}
sighan_type
alarm_signal()
{
/** silently process alarm signal for timeouts... **/
#ifdef BSD
if (InGetPrompt)
longjmp(GetPromptBuf, 1);
#else
signal(SIGALRM, alarm_signal);
#endif
}
sighan_type
pipe_signal()
{
/** silently process pipe signal... **/
dprint(2, (debugfile, "*** received SIGPIPE ***\n\n"));
pipe_abort = TRUE; /* internal signal ... wheeee! */
signal(SIGPIPE, pipe_signal);
}
#ifdef SIGTSTP
int was_in_raw_state;
sighan_type
sig_user_stop()
{
/* This is called when the user presses a ^Z to stop the
process within BSD
*/
if (signal(SIGTSTP, SIG_DFL) != SIG_DFL)
signal(SIGTSTP, SIG_DFL);
was_in_raw_state = RawState();
Raw(OFF); /* turn it off regardless */
printf("\n\nStopped. Use \"fg\" to return to ELM\n\n");
kill(0, SIGSTOP);
}
sighan_type
sig_return_from_user_stop()
{
/** this is called when returning from a ^Z stop **/
if (signal(SIGTSTP, sig_user_stop) == SIG_DFL)
signal(SIGTSTP, sig_user_stop);
printf(
"\nBack in ELM. (You might need to explicitly request a redraw.)\n\n");
if (was_in_raw_state)
Raw(ON);
#ifdef BSD
if (InGetPrompt)
longjmp(GetPromptBuf, 1);
#endif
}
#endif