/*
Copyright (c) 1993 Xerox Corporation.  All rights reserved.
*/
/*
$Id$

$Date$
*/

#ifndef ←←PCR←SigPvt←h
#   define ←←PCR←SigPvt←h 1

#include <config/PCR←StdTypes.h>
#include <sig/PCR←SigTypes.h>
#include <th/PCR←ThData.h>
#include <th/PCR←ThTypes.h>
#include <th/PCR←ThPvt.h>

#ifndef PCR←NO←RENAME
#   ifdef NSIG
#       error
#   endif
#else
#   ifndef NSIG
#       include <host/signal.h>
#   endif
#endif

/*
 * Mapping between host and PCR signal numbers
 */

typedef unsigned long PCR←SigPvt←ST;	/* signal type */

/* resumable or terminal */
# define PCR←SigPvt←ST←rMask	0x1
#   define PCR←SigPvt←ST←rBit	0x1	/* resumable */

/* trap or interrupt */
# define PCR←SigPvt←ST←sMask	0x2
#   define PCR←SigPvt←ST←sBit	0x2	/* synchronous */

/* Unix default action */
# define PCR←SigPvt←ST←dMask	0xc
#   define PCR←SigPvt←ST←de	0x0	/* default is exit */
#   define PCR←SigPvt←ST←di	0x4	/* default is ignore */
#   define PCR←SigPvt←ST←dp	0x8	/* default is pause */
#   define PCR←SigPvt←ST←dc	0xc	/* default is continue */

/* can sig be caught/ignored? */
# define PCR←SigPvt←ST←ncMask	0x10
#   define PCR←SigPvt←ST←ncBit	0x10	/* not catchable */


struct PCR←SigPvt←SigMapEntryRep {
    int sme←pcr;		/* PCR sig num */
    int sme←host;		/* host sig num */
    PCR←SigPvt←ST sme←st;	/* sig type (see above) */
};

typedef struct PCR←SigPvt←SigMapEntryRep PCR←SigPvt←SigMapEntry;

extern PCR←SigPvt←SigMapEntry PCR←SigPvt←sigMap[];

extern PCR←SigPvt←SigMapEntry *(PCR←SigPvt←pcrToMapEntry[1+PCR←NSIG]);

extern PCR←SigPvt←SigMapEntry *(PCR←SigPvt←hostToMapEntry[1+NSIG]);

/*
 * Per-thread signal info 
 */

struct PCR←SigPvt←ThSigInfoRep {
    struct PCR←Th←CVRep tsi←contCV; /* SIGSTOP/SIGCONT */
    PCR←sigset←t tsi←shrActionSet;
    struct PCR←Sig←ActionRep tsi←shrAction;
    struct PCR←Sig←ActionRep tsi←action[1+PCR←NSIG];
};

typedef struct PCR←SigPvt←ThSigInfoRep PCR←SigPvt←ThSigInfo;

#define PCR←SigPvt←currThreadSigInfo (*( (PCR←SigPvt←ThSigInfo **) \
	(&( PCR←ThData←Get()->td←←sigData )) ))


/*
 * Host signal handlers ... wizards only!
 */

extern void PCR←SigPvtImpl←InstallHostSigHandler(int hostsig);

extern void PCR←SigPvtImpl←InstallHostSigIgnorer(int hostsig);

extern void PCR←SigPvtImpl←InstallHostSigDefault(int hostsig);

#endif /* !←←PCR←SigPvt←h */
/*
$Log$
*/