rnd-20100315-3-src
[rocksndiamonds.git] / src / game_sp / TickCountObject.c
1 // ----------------------------------------------------------------------------
2 // TickCountObject.c
3 // ----------------------------------------------------------------------------
4
5 #include "TickCountObject.h"
6
7 // --- VERSION 1.0 CLASS
8 // --- BEGIN
9 // ---   MultiUse = -1  'True  // True
10 // ---   Persistable = 0  'NotPersistable  // NotPersistable
11 // ---   DataBindingBehavior = 0  'vbNone  // vbNone
12 // ---   DataSourceBehavior  = 0  'vbNone  // vbNone
13 // ---   MTSTransactionMode  = 0  'NotAnMTSObject  // NotAnMTSObject
14 // --- END
15
16 // static char *VB_Name = "TickCountObject";
17 // static boolean VB_GlobalNameSpace = False;
18 // static boolean VB_Creatable = True;
19 // static boolean VB_PredeclaredId = False;
20 // static boolean VB_Exposed = False;
21 // --- Option Explicit
22
23 #define LongMin                         (-(double)2147483648UL) // the "#" sign is a bug of the VB environment AutoFormat function but causes no real problems; don't  worry 'bout it!
24 #define LongMax                         (2147483647UL)
25
26 #if 0
27
28 long MyGetTickCount();
29 long QueryPerformanceCounter(currency lpPerformanceCount);
30 long QueryPerformanceFrequency(currency lpFrequency);
31
32 #endif
33
34 boolean DelayLoopActive;
35
36 boolean MPause, bHighPerf;
37 currency PFreq; // LARGE_INTEGER
38 double sFactor, msFactor, usFactor;
39
40 #if 0
41
42 boolean TickCountObject_Get_Active()
43 {
44   boolean Active;
45
46   Active = DelayLoopActive;
47
48   return Active;
49 }
50
51 boolean TickCountObject_Get_Pause()
52 {
53   boolean Pause;
54
55   Pause = MPause;
56
57   return Pause;
58 }
59
60 void TickCountObject_Let_Pause(boolean NewVal)
61 {
62   MPause = NewVal;
63 }
64
65 currency TickCountObject_Get_TickNow()
66 {
67   currency TickNow;
68
69   if (bHighPerf)
70   {
71     QueryPerformanceCounter(TickNow);
72   }
73   else
74   {
75     TickNow = MyGetTickCount();
76   }
77
78   return TickNow;
79 }
80
81 long TickCountObject_TickDiffS(currency TickStart)
82 {
83   long TickDiffS;
84
85   currency NewTick, TD;
86
87   if (bHighPerf)
88   {
89     QueryPerformanceCounter(NewTick);
90     TD = (NewTick - TickStart);
91     TickDiffS = sFactor * TD;
92   }
93   else
94   {
95     NewTick = MyGetTickCount();
96     if (NewTick < TickStart)
97     {
98       // Overflow occured and needs to be handled
99       TickDiffS = (LongMax - TickStart) + (NewTick - LongMin) + 1;
100     }
101     else
102     {
103       TickDiffS = NewTick - TickStart;
104     }
105
106     TickDiffS = (int)(TickDiffS / 1000);
107   }
108
109   return TickDiffS;
110 }
111
112 long TickCountObject_TickDiffMS(currency TickStart)
113 {
114   long TickDiffMS;
115
116   currency NewTick, TD;
117
118   if (bHighPerf)
119   {
120     QueryPerformanceCounter(NewTick);
121     TD = (NewTick - TickStart);
122     TickDiffMS = msFactor * TD;
123   }
124   else
125   {
126     NewTick = MyGetTickCount();
127     if (NewTick < TickStart)
128     {
129       // Overflow occured and needs to be handled
130       TickDiffMS = (LongMax - TickStart) + (NewTick - LongMin) + 1;
131     }
132     else
133     {
134       TickDiffMS = NewTick - TickStart;
135     }
136   }
137
138   return TickDiffMS;
139 }
140
141 currency TickCountObject_TickDiffUS(currency TickStart)
142 {
143   currency TickDiffUS;
144
145   currency NewTick, TD;
146
147   if (bHighPerf)
148   {
149     QueryPerformanceCounter(NewTick);
150     TD = (NewTick - TickStart);
151     TickDiffUS = usFactor * TD;
152   }
153   else
154   {
155     NewTick = MyGetTickCount();
156     if (NewTick < TickStart)
157     {
158       // Overflow occured and needs to be handled
159       TickDiffUS = ((LongMax - TickStart) + (NewTick - LongMin) + 1) * (currency)1000;
160     }
161     else
162     {
163       TickDiffUS = (NewTick - TickStart) * (currency)1000;
164     }
165   }
166
167   return TickDiffUS;
168 }
169
170 #endif
171
172 #if 0
173
174 static void Class_Initialize()
175 {
176   long L;
177
178   bHighPerf = (0 != QueryPerformanceFrequency(PFreq));
179   if (bHighPerf)
180   {
181     sFactor = (double)1 / PFreq;
182     msFactor = (double)1000 / PFreq;
183     usFactor = (double)1000000 / PFreq;
184   }
185
186   DelayLoopActive = False;
187   TickCountObject_Let_Pause(False);
188 }
189
190 #endif