Xcos setup: fix an IndexOutOfBoundsException after 22ee913d
[scilab.git] / scilab / modules / time / sci_gateway / c / sci_xpause.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) INRIA - Allan CORNET
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 /*--------------------------------------------------------------------------*/
17 #ifdef _MSC_VER
18 #include <Windows.h>
19 #endif
20 #include "machine.h"
21 #ifdef HAVE_USLEEP
22 #include <unistd.h>
23 #endif
24 #include "gw_time.h"
25 #include "api_scilab.h"
26 #include "Scierror.h"
27 #include "localization.h"
28 /*--------------------------------------------------------------------------*/
29 int sci_xpause(char *fname, void* pvApiCtx)
30 {
31     SciErr sciErr;
32     int m1 = 0, n1 = 0, sec = 0;
33     int * p1_in_address = NULL;
34     double * pDblReal = NULL;
35
36     CheckLhs(0, 1);
37     CheckRhs(1, 1);
38
39     if (Rhs == 1)
40     {
41         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &p1_in_address);
42         sciErr = getMatrixOfDouble(pvApiCtx, p1_in_address, &m1, &n1, &pDblReal);
43
44         if (isScalar(pvApiCtx, p1_in_address) == 0)
45         {
46             Scierror(999, _("%s: Wrong type for input argument #%d: A real scalar expected.\n"), fname, 1);
47             return 0;
48         }
49
50         sec = (int)  * pDblReal;
51
52         if (sec <= 0)
53         {
54             Scierror(999, _("%s: Wrong values for input argument #%d: Non-negative integers expected.\n"), fname, 1);
55             return 0;
56         }
57 #ifdef _MSC_VER
58         {
59             int ms = (sec) / 1000; /** time is specified in milliseconds in scilab**/
60             if (ms > 0)
61             {
62                 Sleep(ms);    /* Number of milliseconds to sleep. */
63             }
64         }
65 #else
66         {
67             unsigned useconds;
68             useconds = (unsigned) sec;
69             if (useconds != 0)
70 #ifdef HAVE_USLEEP
71             {
72                 usleep(useconds);
73             }
74 #else
75 #ifdef HAVE_SLEEP
76             {
77                 sleep(useconds);
78             }
79 #endif
80 #endif
81         }
82 #endif
83     }
84
85     LhsVar(1) = 0;
86     PutLhsVar();
87
88     return 0;
89
90 }
91 /*--------------------------------------------------------------------------*/