/*
Copyright (c) 1993 Xerox Corporation. All rights reserved.
*/
/*
$Id$
$Date$
*
* PCR sigs
*/
#ifndef ←←PCR←Sig←h
#define ←←PCR←Sig←h 1
#include <config/PCR←StdTypes.h>
#include <config/PCR←OS.h>
#include <sig/PCR←SigTypes.h>
/*
*
* TODO: Fix this comment ???
* Unix/POSIX signals fall into two classes:
*
* - asynchronous signals, or "interrupts".
* - synchronous signals, or "traps".
*
* In addition, every signal
*
* - is either resumable or not.
* - has a default action.
*
* A trap is delivered to the thread that caused it.
* An externally-generated interrupt (sent from another POSIX
* process using kill(2)) is simply recorded; it is available
* to any thread calling PCR←Sig←GetExternalInterrupts().
* The procedure PCR←Th←T←SendSigs (in th/PCR←Th.h) can be used to
* deliver signals to individual threads.
* Unlike POSIX, PCR allows any signal or (resumable) trap to be ignored
* or blocked. This feature is admittedly dangerous. The POSIX
* signal handling emulation enforces the standard semantics.
* The meaning of SIG←DFL is as in POSIX (or the host OS, for non-POSIX
* signals).
*/
/*
* Signal Ops
*/
#undef PCR←sigset←t←Add
extern int PCR←sigset←t←Add(PCR←sigset←t *mask, int signo);
#define PCR←sigset←t←Add PCR←sigset←t←←Add
#undef PCR←sigset←t←Del
extern int PCR←sigset←t←Del(PCR←sigset←t *mask, int signo);
#define PCR←sigset←t←Del PCR←sigset←t←←Del
#undef PCR←sigset←t←SetEmpty
extern int PCR←sigset←t←SetEmpty(PCR←sigset←t *mask);
#define PCR←sigset←t←SetEmpty PCR←sigset←t←←SetEmpty
#undef PCR←sigset←t←SetFull
extern int PCR←sigset←t←SetFull(PCR←sigset←t *mask);
#define PCR←sigset←t←SetFull PCR←sigset←t←←SetFull
#undef PCR←sigset←t←IsMember
extern int PCR←sigset←t←IsMember(PCR←sigset←t *mask, int signo);
#define PCR←sigset←t←IsMember PCR←sigset←t←←IsMember
/*
* Useful signal sets
*/
extern const PCR←sigset←t PCR←sigset←t←readonlyFull;
extern const PCR←sigset←t PCR←sigset←t←readonlyEmpty;
extern /* const */ PCR←sigset←t PCR←Sig←sigsTrap;
extern /* const */ PCR←sigset←t PCR←Sig←sigsInt;
extern /* const */ PCR←sigset←t PCR←Sig←sigsResumable;
extern /* const */ PCR←sigset←t PCR←Sig←sigsNotCatchable;
extern /* const */ PCR←sigset←t PCR←Sig←sigsDefaultExit;
extern /* const */ PCR←sigset←t PCR←Sig←sigsDefaultIgnore;
extern /* const */ PCR←sigset←t PCR←Sig←sigsDefaultPause;
extern /* const */ PCR←sigset←t PCR←Sig←sigsDefaultContinue;
/*
* PCR signal handling
*/
extern PCR←Sig←Handler * const PCR←Sig←Handler←default;
extern PCR←Sig←Handler * const PCR←Sig←Handler←ignore;
/*
* Externally Generated Signals (from another POSIX process).
*/
extern PCR←ERes
PCR←Sig←GetExternalInterrupts(
PCR←sigset←t *newInterruptsRecvd,
const PCR←sigset←t *sigMask,
PCR←Msec wakeup
);
/*
Block until a new interrupt may have been received by the ppcr process;
then atomically copy all received interrupts into *newInterruptsRecvd
and clear the pending interrupts.
*/
#endif /* !←←PCR←Sig←h */
/*
$Log$
*/