diff options
author | sje <sje@4f64403b-2f21-0410-a795-97e2b3489a10> | 2006-11-01 14:57:13 +0000 |
---|---|---|
committer | sje <sje@4f64403b-2f21-0410-a795-97e2b3489a10> | 2006-11-01 14:57:13 +0000 |
commit | 610f48f080c6ae8c298a032cd92bb2ca9948aded (patch) | |
tree | fc8f9cdd046fa5219776dc2a9fc74cb6ed700e6a /worldtime/timezone.cpp | |
parent | 75c65a6f461f71e2c94aac46d3e08e4475e4a450 (diff) |
git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@23 4f64403b-2f21-0410-a795-97e2b3489a10
Diffstat (limited to 'worldtime/timezone.cpp')
-rw-r--r-- | worldtime/timezone.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/worldtime/timezone.cpp b/worldtime/timezone.cpp new file mode 100644 index 0000000..ee4a8ed --- /dev/null +++ b/worldtime/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;
+}
+
|