Avoid overloading of a Windows API function making compilation fail under Windows
[scilab.git] / scilab / modules / scicos_blocks / src / c / scoGetProperty.c
1 /*  Scicos
2 *
3 *  Copyright (C) INRIA - METALAU Project <scicos@inria.fr>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 *
19 * See the file ./license.txt
20 */
21 /*--------------------------------------------------------------------------*/
22 /**
23 \file scoGetProperty.c
24 \author Benoit Bayol
25 \version 1.0
26 \date September 2006 - January 2007
27 \brief Source code of all accessors for ScopeMemory structure
28 */
29 /*--------------------------------------------------------------------------*/
30 #include <stdlib.h>
31 #include "scoGetProperty.h"
32 #include "HandleManagement.h"
33 /*--------------------------------------------------------------------------*/
34 //** Added for real time functions
35 //**
36 //** This function return back the system time in seconds with a resolution, on my Linux machine, of
37 //** one micro seconds. It is not important if the time is the "asbolute" Linux time, the uptime, or
38 //** how many seconds after the last Bill Gates birthday, becase the use is strictly differential.
39 //** For our application, any resolution better than one milli second is accetable.
40 //** Due to finite precision (53 bit, 16 decimal, this rapresentation fail the minimum require accuracy
41 //** (one millisecond) after 317,097 years (enough, I suppose).
42 //**
43 //** for the Windows version
44 //**
45
46 //** -------------------- LINUX VERSION ------------------------------------------------------------------
47 #ifndef _MSC_VER
48
49 #ifdef HAVE_CLOCK_GETTIME
50
51 #include <time.h>
52 #include <sched.h>
53
54 #define NSEC_PER_SEC    1000000000
55
56 //** BEWARE : this code is higly LINUX specific !
57
58 /* the struct timespec consists of nanoseconds
59 * and seconds. if the nanoseconds are getting
60 * bigger than 1000000000 (= 1 second) the
61 * variable containing seconds has to be
62 * incremented and the nanoseconds decremented
63 * by 1000000000.
64 */
65
66 double scoGetRealTime(void)
67 {
68         struct timespec t_crt      ; //** the current real time as "timespec" (32+32 bit) data structure
69
70         clock_gettime(0, &t_crt); /* get current time */
71         return (double) t_crt.tv_sec + (double)1.0E-9 * (double) t_crt.tv_nsec; //** the current real time in seconds as double (52 bit resolution)
72 }
73 #else
74 /* not clock gettime on the systemà... Macosx case? */
75 #ifdef __APPLE__
76 /**
77 * @TODO add the mac os case here
78 * maybe http://www.wand.net.nz/~smr26/wordpress/2009/01/19/monotonic-time-in-mac-os-x/
79 * could help
80 */
81 double scoGetRealTime(void)
82 {
83         /* @TODO Fill the blank */
84         return 0;
85 }
86 #else
87 #error "Could not find clock_gettime equivalent on this platform, please submit a bug report on http://bugzilla.scilab.org/"
88 #endif
89 #endif /* have clock_gettime */
90 #else
91 //** -------------------- WINDOWS VERSION ------------------------------------------------------------------
92 #include <windows.h>
93 #include <winbase.h>
94
95 double scoGetRealTime(void)
96 {
97         ULARGE_INTEGER ctime;
98         FILETIME ftFileTime;
99         double d_current_real_time ; //** the current real time in seconds as double (52 bit resolution)
100
101         GetSystemTimeAsFileTime(&ftFileTime);     /* Resolution 100 nsec = 0.1 us */
102         ctime.LowPart = ftFileTime.dwLowDateTime  ;
103         ctime.HighPart = ftFileTime.dwHighDateTime;
104
105         d_current_real_time = (double)(ctime.QuadPart) * (double) 0.1E-6 ;
106         return d_current_real_time ;
107 }
108
109 #endif
110 //** ------------------- Ends of the add ons for real time function ----------------------------------------
111 //** -------- Ends of the add ons for real time function -------------
112 /*--------------------------------------------------------------------------*/
113 scoLongInteger scoGetHandleScopeWindow(ScopeMemory * pScopeMemory)
114 {
115         return pScopeMemory->hScopeWindow;
116 }
117 /*--------------------------------------------------------------------------*/
118 scoLongInteger scoGetHandleAxes(ScopeMemory * pScopeMemory, int i)
119 {
120         return pScopeMemory->hAxes[i];
121 }
122 /*--------------------------------------------------------------------------*/
123 scoLongInteger scoGetHandleShortDraw(ScopeMemory * pScopeMemory, int i, int j)
124 {
125         return pScopeMemory->hShortDraw[i][j];
126 }
127 /*--------------------------------------------------------------------------*/
128 scoLongInteger scoGetHandleLongDraw(ScopeMemory * pScopeMemory, int i, int j)
129 {
130         return pScopeMemory->hLongDraw[i][j];
131 }
132 /*--------------------------------------------------------------------------*/
133 scoGraphicalObject scoGetPointerScopeWindow(ScopeMemory * pScopeMemory)
134 {
135         return  sciGetPointerFromHandle(scoGetHandleScopeWindow(pScopeMemory));
136 }
137 /*--------------------------------------------------------------------------*/
138 scoGraphicalObject scoGetPointerAxes(ScopeMemory * pScopeMemory, int i)
139 {
140         return sciGetPointerFromHandle(scoGetHandleAxes(pScopeMemory,i));
141 }
142 /*--------------------------------------------------------------------------*/
143 scoGraphicalObject scoGetPointerShortDraw(ScopeMemory * pScopeMemory, int i, int j)
144 {
145         return sciGetPointerFromHandle(scoGetHandleShortDraw(pScopeMemory,i,j));
146 }
147 /*--------------------------------------------------------------------------*/
148 scoGraphicalObject scoGetPointerLongDraw(ScopeMemory * pScopeMemory, int i, int j)
149 {
150         return sciGetPointerFromHandle(scoGetHandleLongDraw(pScopeMemory,i,j));
151 }
152 /*--------------------------------------------------------------------------*/
153 scoInteger scoGetNumberOfSubwin(ScopeMemory * pScopeMemory)
154 {
155         return pScopeMemory->number_of_subwin;
156 }
157 /*--------------------------------------------------------------------------*/
158 scoInteger scoGetNumberOfCurvesBySubwin(ScopeMemory * pScopeMemory,int i)
159 {
160         return pScopeMemory->number_of_curves_by_subwin[i];
161 }
162 /*--------------------------------------------------------------------------*/
163 scoInteger scoGetPeriodCounter(ScopeMemory * pScopeMemory, int i)
164 {
165         return pScopeMemory->period_counter[i];
166 }
167 /*--------------------------------------------------------------------------*/
168 scoInteger scoGetNewDraw(ScopeMemory * pScopeMemory, int i)
169 {
170         return pScopeMemory->new_draw[i];
171 }
172 /*--------------------------------------------------------------------------*/
173 scoInteger scoGetLongDrawSize(ScopeMemory * pScopeMemory, int i)
174 {
175         return  pScopeMemory->longdraw_size[i];
176 }
177 /*--------------------------------------------------------------------------*/
178 scoInteger scoGetWindowID(ScopeMemory * pScopeMemory)
179 {
180         return pScopeMemory->win_id;
181 }
182 /*--------------------------------------------------------------------------*/
183 scoInteger scoGetShortDrawSize(ScopeMemory * pScopeMemory, int i)
184 {
185         return pScopeMemory->shortdraw_size[i];
186 }
187 /*--------------------------------------------------------------------------*/
188 scoDouble scoGetPeriod(ScopeMemory * pScopeMemory, int i)
189 {
190         return pScopeMemory->period[i];
191 }
192 /*--------------------------------------------------------------------------*/
193 scoInteger scoGetScopeActivation(ScopeMemory * pScopeMemory)
194 {
195         if (pScopeMemory==NULL)
196         {
197                 return 0;
198         }
199         else
200         {
201                 return pScopeMemory->activated;
202         }
203 }
204 /*--------------------------------------------------------------------------*/