2 * MMSYTEM time functions
4 * Copyright 1993 Martin Ayotte
18 #include "selectors.h"
22 static BOOL mmTimeStarted
= FALSE
;
23 static MMTIME mmSysTimeMS
;
24 static MMTIME mmSysTimeSMPTE
;
26 typedef struct tagTIMERENTRY
{
34 struct tagTIMERENTRY
*Next
;
35 struct tagTIMERENTRY
*Prev
;
36 } TIMERENTRY
, *LPTIMERENTRY
;
38 static LPTIMERENTRY lpTimerList
= NULL
;
40 /**************************************************************************
41 * MMSysTimeCallback [internal]
43 WORD
MMSysTimeCallback(HWND hWnd
, WORD wMsg
, INT nID
, DWORD dwTime
)
45 LPTIMERENTRY lpTimer
= lpTimerList
;
46 mmSysTimeMS
.u
.ms
+= 33;
47 mmSysTimeSMPTE
.u
.smpte
.frame
++;
48 while (lpTimer
!= NULL
) {
50 if (lpTimer
->wCurTime
== 0) {
51 lpTimer
->wCurTime
= lpTimer
->wDelay
;
52 if (lpTimer
->lpFunc
!= (FARPROC
) NULL
) {
53 dprintf_mmtime(stddeb
, "MMSysTimeCallback // before CallBack16 !\n");
54 CallTimeFuncProc(lpTimer
->lpFunc
, lpTimer
->wTimerID
, 0,
55 lpTimer
->dwUser
, 0, 0);
56 dprintf_mmtime(stddeb
, "MMSysTimeCallback // after CallBack16 !\n");
59 if (lpTimer
->wFlags
& TIME_ONESHOT
)
60 timeKillEvent(lpTimer
->wTimerID
);
62 lpTimer
= lpTimer
->Next
;
67 /**************************************************************************
68 * StartMMTime [internal]
74 mmSysTimeMS
.wType
= TIME_MS
;
76 mmSysTimeSMPTE
.wType
= TIME_SMPTE
;
77 mmSysTimeSMPTE
.u
.smpte
.hour
= 0;
78 mmSysTimeSMPTE
.u
.smpte
.min
= 0;
79 mmSysTimeSMPTE
.u
.smpte
.sec
= 0;
80 mmSysTimeSMPTE
.u
.smpte
.frame
= 0;
81 mmSysTimeSMPTE
.u
.smpte
.fps
= 0;
82 mmSysTimeSMPTE
.u
.smpte
.dummy
= 0;
83 SetTimer(0, 1, 33, GetWndProcEntry16("MMSysTimeCallback"));
87 /**************************************************************************
88 * timeGetSystemTime [MMSYSTEM.601]
90 WORD
timeGetSystemTime(LPMMTIME lpTime
, WORD wSize
)
92 dprintf_mmsys(stddeb
, "timeGetSystemTime(%p, %u);\n", lpTime
, wSize
);
98 /**************************************************************************
99 * timeSetEvent [MMSYSTEM.602]
101 WORD
timeSetEvent(WORD wDelay
, WORD wResol
, LPTIMECALLBACK lpFunc
,
102 DWORD dwUser
, WORD wFlags
)
105 LPTIMERENTRY lpNewTimer
;
106 LPTIMERENTRY lpTimer
= lpTimerList
;
107 dprintf_mmsys(stddeb
, "timeSetEvent(%u, %u, %p, %08lX, %04X);\n",
108 wDelay
, wResol
, lpFunc
, dwUser
, wFlags
);
111 lpNewTimer
= (LPTIMERENTRY
) malloc(sizeof(TIMERENTRY
));
112 if (lpNewTimer
== NULL
)
114 while (lpTimer
!= NULL
) {
115 wNewID
= max(wNewID
, lpTimer
->wTimerID
);
116 if (lpTimer
->Next
== NULL
)
118 lpTimer
= lpTimer
->Next
;
120 if (lpTimerList
== NULL
) {
121 lpTimerList
= lpNewTimer
;
122 lpNewTimer
->Prev
= NULL
;
124 lpTimer
->Next
= lpNewTimer
;
125 lpNewTimer
->Prev
= lpTimer
;
127 lpNewTimer
->Next
= NULL
;
128 lpNewTimer
->wTimerID
= wNewID
+ 1;
129 lpNewTimer
->wCurTime
= wDelay
;
130 lpNewTimer
->wDelay
= wDelay
;
131 lpNewTimer
->wResol
= wResol
;
132 lpNewTimer
->lpFunc
= (FARPROC
) lpFunc
;
133 lpNewTimer
->dwUser
= dwUser
;
134 lpNewTimer
->wFlags
= wFlags
;
135 return lpNewTimer
->wTimerID
;
138 /**************************************************************************
139 * timeKillEvent [MMSYSTEM.603]
141 WORD
timeKillEvent(WORD wID
)
143 LPTIMERENTRY lpTimer
= lpTimerList
;
144 while (lpTimer
!= NULL
) {
145 if (wID
== lpTimer
->wTimerID
) {
146 if (lpTimer
->Prev
!= NULL
)
147 lpTimer
->Prev
->Next
= lpTimer
->Next
;
148 if (lpTimer
->Next
!= NULL
)
149 lpTimer
->Next
->Prev
= lpTimer
->Prev
;
153 lpTimer
= lpTimer
->Next
;
158 /**************************************************************************
159 * timeGetDevCaps [MMSYSTEM.604]
161 WORD
timeGetDevCaps(LPTIMECAPS lpCaps
, WORD wSize
)
163 dprintf_mmsys(stddeb
, "timeGetDevCaps(%p, %u) !\n", lpCaps
, wSize
);
167 /**************************************************************************
168 * timeBeginPeriod [MMSYSTEM.605]
170 WORD
timeBeginPeriod(WORD wPeriod
)
172 dprintf_mmsys(stddeb
, "timeBeginPeriod(%u) !\n", wPeriod
);
178 /**************************************************************************
179 * timeEndPeriod [MMSYSTEM.606]
181 WORD
timeEndPeriod(WORD wPeriod
)
183 dprintf_mmsys(stddeb
, "timeEndPeriod(%u) !\n", wPeriod
);
187 /**************************************************************************
188 * timeGetTime [MMSYSTEM.607]
192 dprintf_mmsys(stddeb
, "timeGetTime(); !\n");