source: trunk/src/winmm/time.cpp@ 5364

Last change on this file since 5364 was 5364, checked in by sandervl, 24 years ago

ported Wine's (snd)PlaySoundA/W + fixed mmsystemGetVersion

File size: 6.5 KB
Line 
1/* $Id: time.cpp,v 1.11 2001-03-24 13:23:48 sandervl Exp $ */
2
3/*
4 * Timer MM apis
5 *
6 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl)
7 * Copyright 1999 Patrick Haller (phaller@gmx.net)
8 *
9 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12
13
14/****************************************************************************
15 * Includes *
16 ****************************************************************************/
17#include <os2win.h>
18#include <odinwrap.h>
19#include <misc.h>
20
21#include "os2timer.h"
22#include "time.h"
23
24#define DBG_LOCALLOG DBG_time
25#include "dbglocal.h"
26
27ODINDEBUGCHANNEL(WINMM-TIME)
28
29
30/*****************************************************************************
31 * Name : mmsystemGetVersion
32 * Purpose : determine version of MM system
33 * Parameters:
34 * Variables :
35 * Result :
36 * Remark :
37 * Status : UNTESTED STUB
38 *
39 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
40 *****************************************************************************/
41
42
43ODINFUNCTION0(UINT, mmsystemGetVersion)
44{
45 //Returned by winmm.dll from NT4, SP6
46 return 0x030A;
47}
48
49/*****************************************************************************
50 * Name :
51 * Purpose :
52 * Parameters:
53 * Variables :
54 * Result :
55 * Remark :
56 * Status : UNTESTED STUB
57 *
58 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
59 *****************************************************************************/
60
61ODINFUNCTION2(MMRESULT, timeGetDevCaps,
62 LPTIMECAPS, ptc,
63 UINT, cbtc)
64{
65 dprintf(("WINMM:timeGetDevCaps Not really Implemented\n"));
66
67 ptc->wPeriodMin = OS2TIMER_RESOLUTION_MINIMUM;
68 ptc->wPeriodMax = OS2TIMER_RESOLUTION_MAXIMUM;
69
70 return TIMERR_NOERROR;
71}
72
73
74/*****************************************************************************
75 * Name :
76 * Purpose :
77 * Parameters:
78 * Variables :
79 * Result :
80 * Remark :
81 * Status : UNTESTED STUB
82 *
83 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
84 *****************************************************************************/
85
86ODINFUNCTION1(MMRESULT, timeBeginPeriod,
87 UINT, cMilliseconds)
88{
89 if (TRUE == OS2TimerResolution::enterResolutionScope(cMilliseconds))
90 return TIMERR_NOERROR;
91 else
92 return TIMERR_NOCANDO;
93}
94
95
96/*****************************************************************************
97 * Name :
98 * Purpose :
99 * Parameters:
100 * Variables :
101 * Result :
102 * Remark :
103 * Status : UNTESTED STUB
104 *
105 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
106 *****************************************************************************/
107
108ODINFUNCTION1(MMRESULT, timeEndPeriod,
109 UINT, cMilliseconds)
110{
111 if (TRUE == OS2TimerResolution::leaveResolutionScope(cMilliseconds))
112 return TIMERR_NOERROR;
113 else
114 {
115 dprintf(("WINMM: timeEndPeriod didn't match timeBeginPeriod.\n"));
116 return TIMERR_NOCANDO;
117 }
118}
119
120
121/*****************************************************************************
122 * Name :
123 * Purpose :
124 * Parameters:
125 * Variables :
126 * Result :
127 * Remark :
128 * Status : UNTESTED STUB
129 *
130 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
131 *****************************************************************************/
132
133ODINFUNCTION1(MMRESULT, timeKillEvent,
134 UINT, IDEvent)
135{
136 dprintf(("WINMM:timeKillEvent\n"));
137
138 // return OS2Timer::killEvent(UINT IDEvent)
139
140 delete((OS2Timer *)IDEvent);
141 return TIMERR_NOERROR;
142}
143
144
145/*****************************************************************************
146 * Name :
147 * Purpose :
148 * Parameters:
149 * Variables :
150 * Result :
151 * Remark :
152 * Status : UNTESTED STUB
153 *
154 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
155 *****************************************************************************/
156
157ODINFUNCTION5(MMRESULT, timeSetEvent,
158 UINT, wDelay,
159 UINT, wResolution,
160 LPTIMECALLBACK, lptc,
161 DWORD, dwUser,
162 UINT, fuEvent)
163{
164 OS2Timer *timer;
165
166// @@@PH 1999/10/26 hack for RA95
167 if (wDelay < OS2TIMER_RESOLUTION_MINIMUM)
168 {
169 dprintf(("WINMM:Time:timeSetEvent - Warning: requested delay too low (%08xh)\n",
170 wDelay));
171 wDelay = OS2TIMER_RESOLUTION_MINIMUM;
172 }
173
174 if (wResolution < OS2TIMER_RESOLUTION_MINIMUM)
175 {
176 dprintf(("WINMM:Time:timeSetEvent - Warning: requested resolution too low (%08xh)\n",
177 wResolution));
178 wResolution = OS2TIMER_RESOLUTION_MINIMUM;
179 }
180
181
182 // check parameters
183 if ((wDelay < OS2TIMER_RESOLUTION_MINIMUM) ||
184 (wDelay > OS2TIMER_RESOLUTION_MAXIMUM))
185 return NULL;
186
187 if (wResolution == 0)
188 wResolution = OS2TIMER_RESOLUTION_MINIMUM;
189 else
190 if ((wResolution < OS2TIMER_RESOLUTION_MINIMUM) ||
191 (wResolution > OS2TIMER_RESOLUTION_MAXIMUM))
192 return NULL;
193
194 timer = new OS2Timer();
195 if(timer == NULL)
196 return(0);
197
198 if(timer->StartTimer(wDelay, wResolution, lptc, dwUser, fuEvent) == FALSE)
199 {
200 dprintf(("WINMM:timeSetEvent: couldn't start timer!\n"));
201 delete(timer);
202 return(0);
203 }
204 return(MMRESULT)timer;
205}
206
207
208/*****************************************************************************
209 * Name :
210 * Purpose :
211 * Parameters:
212 * Variables :
213 * Result :
214 * Remark :
215 * Status : UNTESTED STUB
216 *
217 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
218 *****************************************************************************/
219
220ODINFUNCTION2(MMRESULT, timeGetSystemTime,
221 LPMMTIME, arg1,
222 UINT, arg2)
223{
224 dprintf2(("timeGetSystemTime %x %d", arg1, arg2));
225 return O32_timeGetSystemTime(arg1, arg2);
226}
227
228
229/*****************************************************************************
230 * Name :
231 * Purpose :
232 * Parameters:
233 * Variables :
234 * Result :
235 * Remark :
236 * Status : UNTESTED STUB
237 *
238 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
239 *****************************************************************************/
240
241DWORD WIN32API timeGetTime()
242{
243 DWORD time;
244#if 0
245 LARGE_INTEGER lint;
246 static LARGE_INTEGER freq;
247 static BOOL fInit = FALSE;
248
249 if(fInit == FALSE) {
250 QueryPerformanceFrequency(&freq);
251 freq.LowPart /= 1000;
252 fInit = TRUE;
253 }
254 QueryPerformanceCounter(&lint);
255 time = lint.LowPart/freq.LowPart;
256 dprintf2(("timeGetTime %x (%x:%x)", time, lint.LowPart, lint.HighPart));
257#else
258 //SvL: TODO: Inaccurate
259 time = O32_timeGetTime();
260 dprintf2(("timeGetTime %x", time));
261#endif
262 return time;
263}
264
Note: See TracBrowser for help on using the repository browser.