]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MINICERN/packlib/kernlib/kerngen/ccgen/irtgs/signalf.c
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / MINICERN / packlib / kernlib / kerngen / ccgen / irtgs / signalf.c
1 /*
2  * $Id$
3  *
4  * $Log$
5  * Revision 1.1.1.1  1996/02/15 17:49:33  mclareni
6  * Kernlib
7  *
8  */
9 /*>    ROUTINE SIGNALF
10   CERN PROGLIB#         SIGNALF         .VERSION KERNIRT  1.03  910314
11   ORIG. 12/03/91, JZ
12   FORTRAN interface routine to sigaction    */
13 #include <stdio.h>
14 #include <signal.h>
15 #include <errno.h>
16 #if defined(CERNLIB_IBMRT)&&defined(CERNLIB_QXNO_SC)
17 int signalf(signum,funct,flag)
18 #else
19 int signalf_(signum,funct,flag)
20 #endif
21       long *signum, *flag;
22       long  *funct;
23 {
24       int  sigaction();
25       int  istat, signo;
26
27       struct mysig {
28           int       sa_handler;
29           sigset_t  sa_mask;
30           int       sa_flags;
31          };
32
33       struct mysig newbuf;
34       struct mysig oldbuf;
35
36       signo = *signum;
37
38       if        (*flag < 0)    newbuf.sa_handler = funct;
39         else if (*flag == 0)   newbuf.sa_handler = SIG_DFL;
40         else if (*flag == 1)   newbuf.sa_handler = SIG_IGN;
41         else                   newbuf.sa_handler = *flag;
42
43       newbuf.sa_flags   = 0;
44       sigemptyset(&newbuf.sa_mask);
45
46       istat = sigaction(signo,&newbuf,&oldbuf);
47       if (istat == 0)        return oldbuf.sa_handler;
48       return -errno;
49 }
50 /*> END <----------------------------------------------------------*/