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 7*219b2ee8SDavid du Colombier /* 8*219b2ee8SDavid du Colombier * We don't give arg types for signal handlers, in spite of ANSI requirement 9*219b2ee8SDavid du Colombier * that it be 'int' (the signal number), because some programs need an 10*219b2ee8SDavid du Colombier * additional context argument. So the real type of signal handlers is 11*219b2ee8SDavid du Colombier * void handler(int sig, char *, struct Ureg *) 12*219b2ee8SDavid du Colombier * where the char * is the Plan 9 message and Ureg is defined in <ureg.h> 13*219b2ee8SDavid du Colombier */ 14*219b2ee8SDavid du Colombier #define SIG_DFL ((void (*)())0) 15*219b2ee8SDavid du Colombier #define SIG_ERR ((void (*)())-1) 16*219b2ee8SDavid 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 */ 313e12c5d1SDavid du Colombier 323e12c5d1SDavid du Colombier /* The following symbols must be defined, but the signals needn't be supported */ 333e12c5d1SDavid du Colombier #define SIGCHLD 14 /* child process terminated or stopped */ 343e12c5d1SDavid du Colombier #define SIGCONT 15 /* continue if stopped */ 353e12c5d1SDavid du Colombier #define SIGSTOP 16 /* stop */ 36bd389b36SDavid du Colombier #define SIGTSTP 17 /* interactive stop */ 373e12c5d1SDavid du Colombier #define SIGTTIN 18 /* read from ctl tty by member of background */ 383e12c5d1SDavid du Colombier #define SIGTTOU 19 /* write to ctl tty by member of background */ 393e12c5d1SDavid du Colombier 40*219b2ee8SDavid du Colombier #ifdef _BSD_EXTENSION 41*219b2ee8SDavid du Colombier #define NSIG 20 42*219b2ee8SDavid du Colombier #endif 43*219b2ee8SDavid du Colombier 443e12c5d1SDavid du Colombier #ifdef __cplusplus 453e12c5d1SDavid du Colombier extern "C" { 463e12c5d1SDavid du Colombier #endif 473e12c5d1SDavid du Colombier 48*219b2ee8SDavid du Colombier extern void (*signal(int, void (*)()))(); 493e12c5d1SDavid du Colombier extern int raise(int); 503e12c5d1SDavid du Colombier 513e12c5d1SDavid du Colombier #ifdef __cplusplus 523e12c5d1SDavid du Colombier } 533e12c5d1SDavid du Colombier #endif 543e12c5d1SDavid du Colombier 553e12c5d1SDavid du Colombier #ifdef _POSIX_SOURCE 563e12c5d1SDavid du Colombier 573e12c5d1SDavid du Colombier typedef long sigset_t; 583e12c5d1SDavid du Colombier struct sigaction { 59*219b2ee8SDavid du Colombier void (*sa_handler)(); 603e12c5d1SDavid du Colombier sigset_t sa_mask; 613e12c5d1SDavid du Colombier int sa_flags; 62*219b2ee8SDavid du Colombier }; 633e12c5d1SDavid du Colombier /* values for sa_flags */ 643e12c5d1SDavid du Colombier #define SA_NOCLDSTOP 1 653e12c5d1SDavid du Colombier 663e12c5d1SDavid du Colombier /* first argument to sigprocmask */ 673e12c5d1SDavid du Colombier #define SIG_BLOCK 1 683e12c5d1SDavid du Colombier #define SIG_UNBLOCK 2 693e12c5d1SDavid du Colombier #define SIG_SETMASK 3 703e12c5d1SDavid du Colombier 713e12c5d1SDavid du Colombier #ifdef __cplusplus 723e12c5d1SDavid du Colombier extern "C" { 733e12c5d1SDavid du Colombier #endif 743e12c5d1SDavid du Colombier 753e12c5d1SDavid du Colombier #ifdef __TYPES_H 763e12c5d1SDavid du Colombier extern int kill(pid_t, int); 773e12c5d1SDavid du Colombier #endif 783e12c5d1SDavid du Colombier extern int sigemptyset(sigset_t *); 793e12c5d1SDavid du Colombier extern int sigfillset(sigset_t *); 803e12c5d1SDavid du Colombier extern int sigaddset(sigset_t *, int); 813e12c5d1SDavid du Colombier extern int sigdelset(sigset_t *, int); 823e12c5d1SDavid du Colombier extern int sigismember(const sigset_t *, int); 833e12c5d1SDavid du Colombier extern int sigaction(int, const struct sigaction *, struct sigaction *); 843e12c5d1SDavid du Colombier extern int sigprocmask(int, sigset_t *, sigset_t *); 853e12c5d1SDavid du Colombier extern int sigpending(sigset_t *); 863e12c5d1SDavid du Colombier extern int sigsuspend(const sigset_t *); 873e12c5d1SDavid du Colombier 883e12c5d1SDavid du Colombier #ifdef __cplusplus 893e12c5d1SDavid du Colombier } 903e12c5d1SDavid du Colombier #endif 913e12c5d1SDavid du Colombier 923e12c5d1SDavid du Colombier #endif /* _POSIX_SOURCE */ 933e12c5d1SDavid du Colombier 943e12c5d1SDavid du Colombier #endif /* __SIGNAL_H */ 95