From d513db102812c5dd83f94084e979bb7e24345498 Mon Sep 17 00:00:00 2001 From: sje Date: Wed, 1 Nov 2006 14:57:42 +0000 Subject: git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@24 4f64403b-2f21-0410-a795-97e2b3489a10 --- worldtime_protocol/timezone.cpp | 70 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 worldtime_protocol/timezone.cpp (limited to 'worldtime_protocol/timezone.cpp') diff --git a/worldtime_protocol/timezone.cpp b/worldtime_protocol/timezone.cpp new file mode 100644 index 0000000..ee4a8ed --- /dev/null +++ b/worldtime_protocol/timezone.cpp @@ -0,0 +1,70 @@ +#include "common.h" +#include "timezone.h" + +TimeList timezone_list, geo_timezone_list; + +bool LS_TZREG::operator<(const LS_TZREG &other) { + //return Index < other.Index; + return TZI.Bias < other.TZI.Bias; +} + +bool build_timezone_list() { + HKEY HKlmtz; + HKEY KKtz; + DWORD dwIndex = 0; + CHAR tcName[MAX_SIZE]; + DWORD dwcbName = MAX_SIZE; + DWORD dwcbValue; + DWORD dwcbSTD; + DWORD dwcbDLT; + LS_TZREG Temp; + FILETIME ftLastWrite; + unsigned int list_index = 0; + bool win9x = false; + + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, TZREG, 0, KEY_ENUMERATE_SUB_KEYS, &HKlmtz) != ERROR_SUCCESS) { + win9x = true; + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, TZREG_9X, 0, KEY_ENUMERATE_SUB_KEYS, &HKlmtz) != ERROR_SUCCESS) + return false; + } + + while(RegEnumKeyEx(HKlmtz, dwIndex++, tcName, &dwcbName, NULL, NULL, NULL, &ftLastWrite) != ERROR_NO_MORE_ITEMS) { + + if(RegOpenKeyEx(HKlmtz, tcName, 0,KEY_QUERY_VALUE, &KKtz) != ERROR_SUCCESS) { + RegCloseKey(HKlmtz); + return false; + } + + strncpy(Temp.tcName, tcName, MAX_SIZE); + dwcbValue = MAX_SIZE; + RegQueryValueEx(KKtz,"Display",NULL,NULL,(BYTE*)Temp.tcDisp,&dwcbValue); + dwcbDLT = MAX_SIZE; + RegQueryValueEx(KKtz,"Dlt",NULL,NULL,(BYTE*)Temp.tcDLT,&dwcbDLT); + dwcbSTD = MAX_SIZE; + RegQueryValueEx(KKtz,"Std",NULL,NULL,(BYTE*)Temp.tcSTD,&dwcbSTD); + dwcbValue = MAX_SIZE; + RegQueryValueEx(KKtz,"MapID",NULL,NULL,(BYTE*)Temp.MapID,&dwcbValue); + if(!win9x) { + dwcbValue = sizeof(DWORD); + RegQueryValueEx(KKtz,"Index",NULL,NULL,(BYTE*)&Temp.Index,&dwcbValue); + } + dwcbValue = sizeof(Temp.TZI); + RegQueryValueEx(KKtz,"TZI",NULL,NULL,(BYTE*)&Temp.TZI,&dwcbValue); + + RegCloseKey(KKtz); + + Temp.list_index = list_index; + timezone_list.push_back(Temp); + + dwcbName = MAX_SIZE; + list_index++; + } + + RegCloseKey(HKlmtz); + + geo_timezone_list = timezone_list; + std::sort(geo_timezone_list.begin(), geo_timezone_list.end()); + + return true; +} + -- cgit v1.2.3