X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FMacCompatibility.cpp;h=4ed303322a9f854cd1348c969978719d1cad4d61;hb=b9a46d8e2b7e7e22c706e7dd3734f31015db4408;hp=86004e08bf093d2b73d423e57c67046c4ee1905b;hpb=2380b6fea047f5a8cafc64d11291798cd30e0515;p=lugaru.git diff --git a/Source/MacCompatibility.cpp b/Source/MacCompatibility.cpp index 86004e0..4ed3033 100644 --- a/Source/MacCompatibility.cpp +++ b/Source/MacCompatibility.cpp @@ -1,132 +1,119 @@ -#if !PLATFORM_MACOSX +/* +Copyright (C) 2003, 2010 - Wolfire Games +Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file) -/**> HEADER FILES <**/ -#include "MacCompatibility.h" +This file is part of Lugaru. + +Lugaru is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +Lugaru is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Lugaru. If not, see . +*/ + +#include "MacCompatibility.hpp" + +#include +#include +#include +#include +#include + +#ifdef WIN32 #include -#include -#include -#include +#endif #if PLATFORM_UNIX +#include +#include +#include +#include + typedef long long __int64; typedef __int64 LARGE_INTEGER; -static int QueryPerformanceFrequency(LARGE_INTEGER *liptr) +static int QueryPerformanceFrequency(LARGE_INTEGER* liptr) { - assert(sizeof (__int64) == 8); - assert(sizeof (LARGE_INTEGER) == 8); + assert(sizeof(__int64) == 8); + assert(sizeof(LARGE_INTEGER) == 8); *liptr = 1000; - return(1); + return (1); } -static void QueryPerformanceCounter(LARGE_INTEGER *liptr) +static int QueryPerformanceCounter(LARGE_INTEGER* liptr) { struct timeval tv; gettimeofday(&tv, NULL); - *liptr = ( (((LARGE_INTEGER) tv.tv_sec) * 1000) + - (((LARGE_INTEGER) tv.tv_usec) / 1000) ); - return(1); + *liptr = ((((LARGE_INTEGER)tv.tv_sec) * 1000) + + (((LARGE_INTEGER)tv.tv_usec) / 1000)); + return (1); } #endif class AppTime { -public: - AppTime() - { - counterRate = 1; - baseCounter = 0; - QueryPerformanceFrequency( (LARGE_INTEGER*)&counterRate); - QueryPerformanceCounter( (LARGE_INTEGER*)&baseCounter); - } - __int64 counterRate; // LARGE_INTEGER type has no math functions so use int64 - __int64 baseCounter; + public: + AppTime() + { + counterRate = 1; + baseCounter = 0; + QueryPerformanceFrequency((LARGE_INTEGER*)&counterRate); + QueryPerformanceCounter((LARGE_INTEGER*)&baseCounter); + } + __int64 counterRate; // LARGE_INTEGER type has no math functions so use int64 + __int64 baseCounter; }; static AppTime g_appTime; - -void CopyCStringToPascal( const char* src, unsigned char dst[256]) -{ - int len = strlen( src); - dst[ 0] = len; - memcpy( dst + 1, src, len); -} - - -void CopyPascalStringToC( const unsigned char* src, char* dst) -{ - int len = src[ 0]; - memcpy( dst, src + 1, len); - dst[ len] = 0; -} - - AbsoluteTime UpTime() { - __int64 counter; - QueryPerformanceCounter( (LARGE_INTEGER*)&counter); - - counter -= g_appTime.baseCounter; - - AbsoluteTime time; - time.lo = (unsigned long)counter; - time.hi = (unsigned long)(counter >> 32); - return time; -} + __int64 counter; + QueryPerformanceCounter((LARGE_INTEGER*)&counter); + counter -= g_appTime.baseCounter; -Duration AbsoluteDeltaToDuration( AbsoluteTime& a, AbsoluteTime& b) -{ - __int64 value = a.hi; - value <<= 32; - value |= a.lo; - __int64 value2 = b.hi; - value2 <<= 32; - value2 |= b.lo; - value -= value2; - - if (value <= 0) - return durationImmediate; - - __int64 frac = value % g_appTime.counterRate; - value /= g_appTime.counterRate; - - Duration time; - - if (value == 0) - { - frac *= -1000000; - frac /= g_appTime.counterRate; - time = (Duration)frac; - } - else - { - frac *= 1000; - frac /= g_appTime.counterRate; - value *= 1000; - value += frac; - time = (Duration)value; - } - - return time; + AbsoluteTime time; + time.lo = (unsigned long)counter; + time.hi = (unsigned long)(counter >> 32); + return time; } - -static char g_filename[ 256]; -char* ConvertFileName( const char* orgfilename) +Duration AbsoluteDeltaToDuration(AbsoluteTime& a, AbsoluteTime& b) { - // translate filename into proper path name - if (orgfilename[ 0] == ':') - orgfilename++; - strcpy( g_filename, orgfilename); - - for (int n = 0; g_filename[ n]; n++) - { - if (g_filename[ n] == ':') - g_filename[ n] = '/'; - } - - return g_filename; + __int64 value = a.hi; + value <<= 32; + value |= a.lo; + __int64 value2 = b.hi; + value2 <<= 32; + value2 |= b.lo; + value -= value2; + + if (value <= 0) { + return durationImmediate; + } + + __int64 frac = value % g_appTime.counterRate; + value /= g_appTime.counterRate; + + Duration time; + + if (value == 0) { + frac *= -1000000; + frac /= g_appTime.counterRate; + time = (Duration)frac; + } else { + frac *= 1000; + frac /= g_appTime.counterRate; + value *= 1000; + value += frac; + time = (Duration)value; + } + + return time; } - -#endif -