1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13 
14 
15 #pragma off (unreferenced)
16 static char rcsid[] = "$Id: timer.c,v 1.1.1.1 2001/01/19 03:30:15 bradleyb Exp $";
17 #pragma on (unreferenced)
18 
19 #include "types.h"
20 #include "fix.h"
21 #include "error.h"
22 #include "mono.h"
23 
24 #define _WIN32
25 #define WIN32_LEAN_AND_MEAN
26 #include<windows.h>
27 #include<mmsystem.h>
28 
29 #define TARGET_RESOLUTION 1
30 
31 //@@ static UINT TimerResolution = 0;
32 //@@ static UINT GameTimer = 0;
33 //@@ #define GAME_TIMER_RESOLUTION (TimerResolution<<1)
34 
35 
36 int timer_initialized=0;
37 
38 static UINT GameSystemTime = 0;
39 static UINT GameStartTime = 0;
40 
41 
42 void timer_normalize();
43 
44 //@@ void PASCAL timer_callback(UINT wTimerID, UINT msg, DWORD dwUser,
45 //@@					DWORD dw1, DWORD dw2)
46 //@@{
47 //@@	static int last_time = 0;
48 //@@	UINT time;
49 //@@
50 //@@
51 //@@	time = timeGetTime()-GameStartTime;
52 //@@
53 //@@	if (timeGetTime() < GameStartTime)
54 //@@		GameStartTime = GameStartTime - timeGetTime();
55 //@@
56 //@@}
57 
timer_normalize()58 void timer_normalize()
59 {
60 	DWORD new_time;
61 
62 	new_time = timeGetTime();
63 
64 	if (new_time < GameStartTime) {
65 		GameStartTime = new_time;
66 		return;
67 	}
68 
69 	if ((new_time - GameStartTime) > 0x01808580)  	// 7 hours
70 		GameStartTime = new_time;
71 }
72 
73 
74 void timer_close();
75 
timer_init(int i)76 void timer_init(int i)
77 {
78 	TIMECAPS tc;
79 
80 	Assert(GameStartTime == 0);
81 
82 	timer_initialized = 1;
83 
84 	GameSystemTime = 0;
85 	GameStartTime = timeGetTime();
86 
87 	atexit(timer_close);
88 }
89 
90 
timer_close()91 void timer_close()
92 {
93 	Assert(GameStartTime > 0);
94 
95 	timer_initialized = 0;
96 
97 	GameSystemTime = 0;
98 	GameStartTime= 0;
99 }
100 
101 
timer_get_fixed_seconds()102 fix timer_get_fixed_seconds()
103 {
104 	fix val;
105 	DWORD time;
106 
107 	timer_normalize();
108 
109 	time = timeGetTime() - GameStartTime;
110 
111 	val = fixdiv(time,1000);
112 
113 	return val;
114 }
115 
timer_get_fixed_secondsX()116 fix timer_get_fixed_secondsX()
117 {
118 	fix val;
119 	DWORD time;
120 
121 	timer_normalize();
122 
123 	time = timeGetTime() - GameStartTime;
124 
125 	val = fixdiv(time,1000);
126 
127 	return val;
128 }
129 
timer_get_approx_seconds()130 fix timer_get_approx_seconds()
131 {
132 	fix val;
133 	DWORD time;
134 
135 	timer_normalize();
136 
137 	time = timeGetTime() - GameStartTime;
138 
139 	val = fixdiv(time,1000);
140 
141 	return val;
142 }
143 
timer_set_function(void _far * function)144 void timer_set_function( void _far * function ) {}
145 
146 
timer_delay(fix seconds)147 void timer_delay(fix seconds)
148 {
149 	unsigned int numticks = timeGetTime() + (seconds>>16)*1000 +
150 					(((seconds & 0x0000ffff)*1000)/65535);
151 	while (GetTickCount() < numticks);
152 }
153