Atlas - SDL_systime.cpp
Home / ext / SDL / src / time / ngage Lines: 1 | Size: 5630 bytes [Download] [Show on GitHub] [Search similar files] [Raw] [Raw (proxy)][FILE BEGIN]1/* 2 Simple DirectMedia Layer 3 Copyright (C) 1997-2024 Sam Lantinga <[email protected]> 4 5 This software is provided 'as-is', without any express or implied 6 warranty. In no event will the authors be held liable for any damages 7 arising from the use of this software. 8 9 Permission is granted to anyone to use this software for any purpose, 10 including commercial applications, and to alter it and redistribute it 11 freely, subject to the following restrictions: 12 13 1. The origin of this software must not be misrepresented; you must not 14 claim that you wrote the original software. If you use this software 15 in a product, an acknowledgment in the product documentation would be 16 appreciated but is not required. 17 2. Altered source versions must be plainly marked as such, and must not be 18 misrepresented as being the original software. 19 3. This notice may not be removed or altered from any source distribution. 20*/ 21#include "SDL_internal.h" 22 23#ifdef SDL_TIME_NGAGE 24 25#include <bautils.h> 26#include <e32base.h> 27#include <e32cons.h> 28#include <e32std.h> 29 30#ifdef __cplusplus 31extern "C" { 32#endif 33 34static TTime UnixEpoch(); 35 36void SDL_GetSystemTimeLocalePreferences(SDL_DateFormat *df, SDL_TimeFormat *tf) 37{ 38 TLanguage language = User::Language(); 39 40 switch (language) { 41 case ELangFrench: 42 case ELangSwissFrench: 43 case ELangBelgianFrench: 44 case ELangInternationalFrench: 45 case ELangGerman: 46 case ELangSwissGerman: 47 case ELangAustrian: 48 case ELangSpanish: 49 case ELangInternationalSpanish: 50 case ELangLatinAmericanSpanish: 51 case ELangItalian: 52 case ELangSwissItalian: 53 case ELangSwedish: 54 case ELangFinlandSwedish: 55 case ELangDanish: 56 case ELangNorwegian: 57 case ELangNorwegianNynorsk: 58 case ELangFinnish: 59 case ELangPortuguese: 60 case ELangBrazilianPortuguese: 61 case ELangTurkish: 62 case ELangCyprusTurkish: 63 case ELangIcelandic: 64 case ELangRussian: 65 case ELangHungarian: 66 case ELangDutch: 67 case ELangBelgianFlemish: 68 case ELangCzech: 69 case ELangSlovak: 70 case ELangPolish: 71 case ELangSlovenian: 72 case ELangTaiwanChinese: 73 case ELangHongKongChinese: 74 case ELangPrcChinese: 75 case ELangJapanese: 76 case ELangThai: 77 case ELangAfrikaans: 78 case ELangAlbanian: 79 case ELangAmharic: 80 case ELangArabic: 81 case ELangArmenian: 82 case ELangAzerbaijani: 83 case ELangBelarussian: 84 case ELangBengali: 85 case ELangBulgarian: 86 case ELangBurmese: 87 case ELangCatalan: 88 case ELangCroatian: 89 case ELangEstonian: 90 case ELangFarsi: 91 case ELangScotsGaelic: 92 case ELangGeorgian: 93 case ELangGreek: 94 case ELangCyprusGreek: 95 case ELangGujarati: 96 case ELangHebrew: 97 case ELangHindi: 98 case ELangIndonesian: 99 case ELangIrish: 100 case ELangKannada: 101 case ELangKazakh: 102 case ELangKhmer: 103 case ELangKorean: 104 case ELangLao: 105 case ELangLatvian: 106 case ELangLithuanian: 107 case ELangMacedonian: 108 case ELangMalay: 109 case ELangMalayalam: 110 case ELangMarathi: 111 case ELangMoldavian: 112 case ELangMongolian: 113 case ELangPunjabi: 114 case ELangRomanian: 115 case ELangSerbian: 116 case ELangSinhalese: 117 case ELangSomali: 118 case ELangSwahili: 119 case ELangTajik: 120 case ELangTamil: 121 case ELangTelugu: 122 case ELangTibetan: 123 case ELangTigrinya: 124 case ELangTurkmen: 125 case ELangUkrainian: 126 case ELangUrdu: 127 case ELangUzbek: 128 case ELangVietnamese: 129 case ELangWelsh: 130 case ELangZulu: 131 *df = SDL_DATE_FORMAT_DDMMYYYY; 132 *tf = SDL_TIME_FORMAT_24HR; 133 break; 134 case ELangAmerican: 135 case ELangCanadianEnglish: 136 case ELangInternationalEnglish: 137 case ELangSouthAfricanEnglish: 138 case ELangAustralian: 139 case ELangNewZealand: 140 case ELangCanadianFrench: 141 *df = SDL_DATE_FORMAT_MMDDYYYY; 142 *tf = SDL_TIME_FORMAT_12HR; 143 break; 144 case ELangEnglish: 145 case ELangOther: 146 default: 147 *df = SDL_DATE_FORMAT_DDMMYYYY; 148 *tf = SDL_TIME_FORMAT_24HR; 149 break; 150 } 151} 152 153bool SDL_GetCurrentTime(SDL_Time *ticks) 154{ 155 CHECK_PARAM(!ticks) 156 { 157 return SDL_InvalidParamError("ticks"); 158 } 159 160 TTime now; 161 now.UniversalTime(); 162 163 TTimeIntervalMicroSeconds interval = now.MicroSecondsFrom(UnixEpoch()); 164 TInt64 interval_ns = interval.Int64() * 1000; 165 Uint32 ns_low = interval_ns.Low(); 166 Uint32 ns_high = interval_ns.High(); 167 168 *ticks = ((Uint64)ns_high << 32) | ns_low; 169 170 return true; 171} 172 173#define SYMBIAN_UNIX_EPOCH_OFFSET_US 62135596800000000LL 174 175bool SDL_TimeToDateTime(SDL_Time ticks, SDL_DateTime *dt, bool localTime) 176{ 177 CHECK_PARAM(!dt) 178 { 179 return SDL_InvalidParamError("dt"); 180 } 181 182 long long unixMicros = ticks / 1000LL; 183 184 unixMicros += SYMBIAN_UNIX_EPOCH_OFFSET_US; 185 186 TInt32 high = (TInt32)(unixMicros >> 32); 187 TUint32 low = (TUint32)(unixMicros & 0xFFFFFFFFu); 188 TInt64 symbianTime(high, low); 189 190 TTime s60Time(symbianTime); 191 192 if (localTime) { 193 s60Time.HomeTime(); 194 } 195 196 TDateTime dtSym = s60Time.DateTime(); 197 198 dt->year = dtSym.Year(); 199 dt->month = dtSym.Month() + 1; // Months are 0-11 200 dt->day = dtSym.Day() + 1; // Days are 0-30 201 dt->hour = dtSym.Hour(); 202 dt->minute = dtSym.Minute(); 203 dt->second = dtSym.Second(); 204 dt->nanosecond = (int)(ticks % 1000000000LL); 205 dt->day_of_week = s60Time.DayNoInWeek(); 206 dt->utc_offset = 0; 207 208 return true; 209} 210 211static TTime UnixEpoch() 212{ 213 _LIT(KUnixEpoch, "19700101:000000.000000"); 214 TTime epochTime; 215 epochTime.Set(KUnixEpoch); 216 return epochTime; 217} 218 219#ifdef __cplusplus 220} 221#endif 222 223#endif // SDL_TIME_NGAGE 224[FILE END](C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.