127 lines
3.7 KiB
C
127 lines
3.7 KiB
C
/*-----------------------------------------------------------------------*
|
||
* filename - ssignal.c
|
||
*
|
||
* function(s)
|
||
* ssignal - implements software signals
|
||
* gsignal - implements software signals
|
||
*-----------------------------------------------------------------------*/
|
||
|
||
/*[]---------------------------------------------------[]*/
|
||
/*| |*/
|
||
/*| Turbo C Run Time Library - Version 1.5 |*/
|
||
/*| |*/
|
||
/*| |*/
|
||
/*| Copyright (c) 1987,88 by Borland International |*/
|
||
/*| All Rights Reserved. |*/
|
||
/*| |*/
|
||
/*[]---------------------------------------------------[]*/
|
||
|
||
|
||
#include <signal.h>
|
||
|
||
#pragma warn -sus
|
||
|
||
static int (*Sigtbl[16])() =
|
||
{
|
||
0,
|
||
SIG_DFL, SIG_DFL, SIG_DFL, SIG_DFL, SIG_DFL,
|
||
SIG_DFL, SIG_DFL, SIG_DFL, SIG_DFL, SIG_DFL,
|
||
SIG_DFL, SIG_DFL, SIG_DFL, SIG_DFL, SIG_DFL,
|
||
};
|
||
|
||
#pragma warn .sus
|
||
|
||
/*---------------------------------------------------------------------*
|
||
|
||
Name ssignal - implements software signals
|
||
|
||
Usage int (*ssignal(int sig, int (*action)( ))( );
|
||
|
||
Related
|
||
functions usage int gsignal(int sig);
|
||
|
||
Prototype in signal.h
|
||
|
||
Description ssignal and gsignal implement a software-signalling
|
||
facility. Software signals are associated with integers in the
|
||
range from 1 to 15.
|
||
|
||
gsignal raises the signal given by sig and executes the action
|
||
routine.
|
||
|
||
ssignal is used to establish an action routine for servicing a
|
||
signal. The first argument to ssignal, sig, is a number
|
||
identifying the type of signal for which an action is
|
||
established.
|
||
|
||
The second argument, action, defines the action; it is either
|
||
the name of a user-defined action function or one of the
|
||
constants SIG_DFL (default) or SIG_IGN (ignore). These constants
|
||
are defined in signal.h.
|
||
|
||
If an action function has been established for sig, then that
|
||
action is reset to SIG_DFL, and the action function is entered
|
||
with argument sig.
|
||
|
||
Return value ssignal returns the action previously established
|
||
or, if the signal number is illegal, returns SIG_DFL.
|
||
|
||
gsignal returns the value returned to it by the action
|
||
function. gsignal's return values for actions assigned to sig
|
||
are listed in the following:
|
||
|
||
Action Return
|
||
|
||
SIG_IGN 1
|
||
SIG_DFL 0
|
||
Illegal value or 0
|
||
no action specified
|
||
|
||
In all cases, gsignal takes no action other than returning a
|
||
value.
|
||
|
||
*---------------------------------------------------------------------*/
|
||
int (*ssignal(register int sig, int (*action)()))()
|
||
{
|
||
int (*oldact)();
|
||
|
||
#pragma warn -sus
|
||
if (sig < 1 || sig > 15)
|
||
return (SIG_DFL);
|
||
#pragma warn .sus
|
||
|
||
oldact = Sigtbl[sig];
|
||
Sigtbl[sig] = action;
|
||
|
||
return (oldact);
|
||
}
|
||
|
||
|
||
/*---------------------------------------------------------------------*
|
||
|
||
Name gsignal - implements software signals
|
||
|
||
Usage int gsignal(int sig);
|
||
|
||
Prototype in signal.h
|
||
|
||
Description see ssignal above
|
||
|
||
*---------------------------------------------------------------------*/
|
||
int gsignal(register int sig)
|
||
{
|
||
int (*action)(int);
|
||
|
||
if (sig < 1 || sig > 15)
|
||
return (0);
|
||
#pragma warn -sus
|
||
action = Sigtbl[sig];
|
||
if (action == SIG_IGN)
|
||
return (1);
|
||
if (action == SIG_DFL)
|
||
return (0);
|
||
Sigtbl[sig] = SIG_DFL;
|
||
#pragma warn .sus
|
||
return ((*action)(sig));
|
||
}
|
||
|