fix windows compilation after : https://codereview.scilab.org/#/c/17927
[scilab.git] / scilab / modules / time / sci_gateway / c / sci_sleep.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 /*--------------------------------------------------------------------------*/
18 #ifdef _MSC_VER
19 #include <Windows.h>
20 #endif
21 #include "machine.h"
22 #ifdef HAVE_USLEEP
23 #include <unistd.h>
24 #endif
25 #include "gw_time.h"
26 #include "api_scilab.h"
27 #include "Scierror.h"
28 #include "localization.h"
29 /*--------------------------------------------------------------------------*/
30 int sci_sleep(char *fname, void* pvApiCtx)
31 {
32     SciErr sciErr;
33     int m1 = 0, n1 = 0 , iRows = 0, iCols = 0, option = 0;
34     double sec = 0;
35     char * opt = NULL;
36     int * p1_in_address = NULL;
37     int * p2_in_address = NULL;
38     double * pDblReal = NULL;
39
40
41     CheckLhs(0, 1);
42     CheckRhs(1, 2);
43
44     if (Rhs >= 1)
45     {
46         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &p1_in_address);
47         sciErr = getMatrixOfDouble(pvApiCtx, p1_in_address, &m1, &n1, &pDblReal);
48
49         if (isScalar(pvApiCtx, p1_in_address) == 0)
50         {
51             Scierror(999, _("%s: Wrong type for input argument #%d: A real scalar expected.\n"), fname, 1);
52             return 0;
53         }
54         sec = (double)  * pDblReal;
55
56         if (sec <= 0)
57         {
58             Scierror(999, _("%s: Wrong values for input argument #%d: Non-negative integers expected.\n"), fname, 1);
59             return 0;
60         }
61
62         if (Rhs == 2)
63         {
64             sciErr = getVarAddressFromPosition(pvApiCtx, 2, &p2_in_address);
65             getAllocatedSingleString(pvApiCtx, p2_in_address, &opt);
66
67             if (strcmp("s", opt) != 0)
68             {
69                 Scierror(999, _("%s: Wrong value for input argument #%d: 's' expected.\n"), fname, 2);
70                 return 0;
71             }
72             if (strcmp("s", opt) == 0)
73             {
74                 option = 1;
75             }
76         }
77
78
79 #ifdef _MSC_VER
80         {
81             double ms = 0;
82             if (option == 1)
83             {
84                 ms = sec * 1000; /* convert seconds into milliseconds */
85             }
86             else
87             {
88                 ms = sec;
89             }
90
91             if (ms > 0)
92             {
93                 Sleep((DWORD)ms);    /* Number of milliseconds to sleep. */
94             }
95         }
96 #else
97         {
98             unsigned useconds;
99             useconds = (unsigned) sec;
100             if (option == 1)
101             {
102                 useconds = useconds * 1000;
103             }
104             if (useconds != 0)
105 #ifdef HAVE_USLEEP
106             {
107                 usleep(useconds * 1000);
108             }
109 #else
110 #ifdef HAVE_SLEEP
111             {
112                 sleep(useconds * 1000);
113             }
114 #endif
115 #endif
116         }
117 #endif
118     }
119     LhsVar(1) = 0;
120     PutLhsVar();
121
122     return 0;
123 }
124 /*--------------------------------------------------------------------------*/
125