0730774fc4ef0566da2e32b5da664491d16d42e5
[scilab.git] / scilab / modules / core / src / c / csignal.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) INRIA
4  * Copyright (C) ENPC
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16 #include <stdio.h>
17 #include <string.h>
18 #include <wchar.h>
19 #include "csignal.h"
20 #include "configvariable_interface.h"
21 #include "getKey.h"
22 /* If CTRL-C was pressed. */
23 void controlC_handler(int sig)
24 {
25     setTokenInteruptExecution(DO_NOT_SEND_COMMAND);
26     setExecutionBreak();
27 }
28
29 int csignal(void)
30 {
31
32 #ifdef _MSC_VER
33     if (signal(SIGINT, controlC_handler) == SIG_ERR)
34     {
35         fprintf(stderr, "Could not set the signal SIGINT to the handler.\n");
36         return -1;
37     }
38 #else
39     struct sigaction act_controlC;
40
41     memset(&act_controlC, 0, sizeof(act_controlC));
42     act_controlC.sa_sigaction = controlC_handler;
43     if (sigaction(SIGINT, &act_controlC, NULL) != 0)
44     {
45         fprintf(stderr, "Could not set the signal SIGINT to the handler.\n");
46         return -1;
47     }
48 #endif
49     return 0;
50 }