]> git.jsancho.org Git - lugaru.git/blob - Source/WinDefs.cpp
License: Update GPLv2+ header to match current FSF recommendation
[lugaru.git] / Source / WinDefs.cpp
1 /*
2 Copyright (C) 2003, 2010 - Wolfire Games
3
4 This file is part of Lugaru.
5
6 Lugaru is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 Lugaru is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 /**> HEADER FILES <**/
21 #include "WinDefs.h"
22 #include <windows.h>
23 #include <errno.h>
24 #include <time.h>
25 #include <stdio.h>
26
27
28 class AppTime
29 {
30 public:
31     AppTime() {
32         counterRate = 1;
33         baseCounter = 0;
34         QueryPerformanceFrequency( (LARGE_INTEGER*)&counterRate);
35         QueryPerformanceCounter( (LARGE_INTEGER*)&baseCounter);
36     }
37     __int64 counterRate; // LARGE_INTEGER type has no math functions so use int64
38     __int64 baseCounter;
39 };
40 static AppTime g_appTime;
41
42
43
44 void CopyCStringToPascal( const char* src, unsigned char dst[256])
45 {
46     int len = strlen( src);
47     dst[0] = len;
48     memcpy( dst + 1, src, len);
49 }
50
51
52 void CopyPascalStringToC( const unsigned char* src, char* dst)
53 {
54     int len = src[0];
55     memcpy( dst, src + 1, len);
56     dst[len] = 0;
57 }
58
59
60 AbsoluteTime UpTime()
61 {
62     __int64 counter;
63     QueryPerformanceCounter( (LARGE_INTEGER*)&counter);
64
65     counter -= g_appTime.baseCounter;
66
67     AbsoluteTime time;
68     time.lo = (unsigned long)counter;
69     time.hi = (unsigned long)(counter >> 32);
70     return time;
71 }
72
73
74 Duration AbsoluteDeltaToDuration( AbsoluteTime& a, AbsoluteTime& b)
75 {
76     __int64 value = a.hi;
77     value <<= 32;
78     value |= a.lo;
79     __int64 value2 = b.hi;
80     value2 <<= 32;
81     value2 |= b.lo;
82     value -= value2;
83
84     if (value <= 0)
85         return durationImmediate;
86
87     __int64 frac = value % g_appTime.counterRate;
88     value /= g_appTime.counterRate;
89
90     Duration time;
91
92     if (value == 0) {
93         frac *= -1000000;
94         frac /= g_appTime.counterRate;
95         time = (Duration)frac;
96     } else {
97         frac *= 1000;
98         frac /= g_appTime.counterRate;
99         value *= 1000;
100         value += frac;
101         time = (Duration)value;
102     }
103
104     return time;
105 }
106
107
108 static char g_filename[ 256];
109 char* ConvertFileName( const char* orgfilename)
110 {
111     // translate filename into proper path name
112     if (orgfilename[ 0] == ':')
113         orgfilename++;
114     strcpy( g_filename, orgfilename);
115
116     for (int n = 0; g_filename[ n]; n++) {
117         if (g_filename[ n] == ':')
118             g_filename[ n] = '/';
119     }
120
121     return g_filename;
122 }
123
124 char* ConvertFileName( const char* orgfilename, const char* junk)
125 {
126     return ConvertFileName(orgfilename);
127 }