13e12c5d1SDavid du Colombier #ifndef __SIGNAL_H 23e12c5d1SDavid du Colombier #define __SIGNAL_H 33e12c5d1SDavid du Colombier #pragma lib "/$M/lib/ape/libap.a" 43e12c5d1SDavid du Colombier 53e12c5d1SDavid du Colombier typedef int sig_atomic_t; 63e12c5d1SDavid du Colombier 7219b2ee8SDavid du Colombier /* 8219b2ee8SDavid du Colombier * We don't give arg types for signal handlers, in spite of ANSI requirement 9219b2ee8SDavid du Colombier * that it be 'int' (the signal number), because some programs need an 10219b2ee8SDavid du Colombier * additional context argument. So the real type of signal handlers is 11219b2ee8SDavid du Colombier * void handler(int sig, char *, struct Ureg *) 12219b2ee8SDavid du Colombier * where the char * is the Plan 9 message and Ureg is defined in <ureg.h> 13219b2ee8SDavid du Colombier */ 14219b2ee8SDavid du Colombier #define SIG_DFL ((void (*)())0) 15219b2ee8SDavid du Colombier #define SIG_ERR ((void (*)())-1) 16219b2ee8SDavid du Colombier #define SIG_IGN ((void (*)())1) 173e12c5d1SDavid du Colombier 183e12c5d1SDavid du Colombier #define SIGHUP 1 /* hangup */ 193e12c5d1SDavid du Colombier #define SIGINT 2 /* interrupt */ 203e12c5d1SDavid du Colombier #define SIGQUIT 3 /* quit */ 213e12c5d1SDavid du Colombier #define SIGILL 4 /* illegal instruction (not reset when caught)*/ 223e12c5d1SDavid du Colombier #define SIGABRT 5 /* used by abort */ 233e12c5d1SDavid du Colombier #define SIGFPE 6 /* floating point exception */ 243e12c5d1SDavid du Colombier #define SIGKILL 7 /* kill (cannot be caught or ignored) */ 253e12c5d1SDavid du Colombier #define SIGSEGV 8 /* segmentation violation */ 263e12c5d1SDavid du Colombier #define SIGPIPE 9 /* write on a pipe with no one to read it */ 273e12c5d1SDavid du Colombier #define SIGALRM 10 /* alarm clock */ 283e12c5d1SDavid du Colombier #define SIGTERM 11 /* software termination signal from kill */ 293e12c5d1SDavid du Colombier #define SIGUSR1 12 /* user defined signal 1 */ 303e12c5d1SDavid du Colombier #define SIGUSR2 13 /* user defined signal 2 */ 31*7dd7cddfSDavid du Colombier #define SIGBUS 14 /* bus error */ 323e12c5d1SDavid du Colombier 333e12c5d1SDavid du Colombier /* The following symbols must be defined, but the signals needn't be supported */ 34*7dd7cddfSDavid du Colombier #define SIGCHLD 15 /* child process terminated or stopped */ 35*7dd7cddfSDavid du Colombier #define SIGCONT 16 /* continue if stopped */ 36*7dd7cddfSDavid du Colombier #define SIGSTOP 17 /* stop */ 37*7dd7cddfSDavid du Colombier #define SIGTSTP 18 /* interactive stop */ 38*7dd7cddfSDavid du Colombier #define SIGTTIN 19 /* read from ctl tty by member of background */ 39*7dd7cddfSDavid du Colombier #define SIGTTOU 20 /* write to ctl tty by member of background */ 403e12c5d1SDavid du Colombier 41219b2ee8SDavid du Colombier #ifdef _BSD_EXTENSION 42*7dd7cddfSDavid du Colombier #define NSIG 21 43219b2ee8SDavid du Colombier #endif 44219b2ee8SDavid du Colombier 453e12c5d1SDavid du Colombier #ifdef __cplusplus 463e12c5d1SDavid du Colombier extern "C" { 473e12c5d1SDavid du Colombier #endif 483e12c5d1SDavid du Colombier 49219b2ee8SDavid du Colombier extern void (*signal(int, void (*)()))(); 503e12c5d1SDavid du Colombier extern int raise(int); 513e12c5d1SDavid du Colombier 523e12c5d1SDavid du Colombier #ifdef __cplusplus 533e12c5d1SDavid du Colombier } 543e12c5d1SDavid du Colombier #endif 553e12c5d1SDavid du Colombier 563e12c5d1SDavid du Colombier #ifdef _POSIX_SOURCE 573e12c5d1SDavid du Colombier 583e12c5d1SDavid du Colombier typedef long sigset_t; 593e12c5d1SDavid du Colombier struct sigaction { 60219b2ee8SDavid du Colombier void (*sa_handler)(); 613e12c5d1SDavid du Colombier sigset_t sa_mask; 623e12c5d1SDavid du Colombier int sa_flags; 63219b2ee8SDavid du Colombier }; 643e12c5d1SDavid du Colombier /* values for sa_flags */ 653e12c5d1SDavid du Colombier #define SA_NOCLDSTOP 1 663e12c5d1SDavid du Colombier 673e12c5d1SDavid du Colombier /* first argument to sigprocmask */ 683e12c5d1SDavid du Colombier #define SIG_BLOCK 1 693e12c5d1SDavid du Colombier #define SIG_UNBLOCK 2 703e12c5d1SDavid du Colombier #define SIG_SETMASK 3 713e12c5d1SDavid du Colombier 723e12c5d1SDavid du Colombier #ifdef __cplusplus 733e12c5d1SDavid du Colombier extern "C" { 743e12c5d1SDavid du Colombier #endif 753e12c5d1SDavid du Colombier 763e12c5d1SDavid du Colombier #ifdef __TYPES_H 773e12c5d1SDavid du Colombier extern int kill(pid_t, int); 783e12c5d1SDavid du Colombier #endif 793e12c5d1SDavid du Colombier extern int sigemptyset(sigset_t *); 803e12c5d1SDavid du Colombier extern int sigfillset(sigset_t *); 813e12c5d1SDavid du Colombier extern int sigaddset(sigset_t *, int); 823e12c5d1SDavid du Colombier extern int sigdelset(sigset_t *, int); 833e12c5d1SDavid du Colombier extern int sigismember(const sigset_t *, int); 843e12c5d1SDavid du Colombier extern int sigaction(int, const struct sigaction *, struct sigaction *); 853e12c5d1SDavid du Colombier extern int sigprocmask(int, sigset_t *, sigset_t *); 863e12c5d1SDavid du Colombier extern int sigpending(sigset_t *); 873e12c5d1SDavid du Colombier extern int sigsuspend(const sigset_t *); 883e12c5d1SDavid du Colombier 893e12c5d1SDavid du Colombier #ifdef __cplusplus 903e12c5d1SDavid du Colombier } 913e12c5d1SDavid du Colombier #endif 923e12c5d1SDavid du Colombier 933e12c5d1SDavid du Colombier #endif /* _POSIX_SOURCE */ 943e12c5d1SDavid du Colombier 953e12c5d1SDavid du Colombier #endif /* __SIGNAL_H */ 96