+++ /dev/null
-/**\r
- * FreeRDP: A Remote Desktop Protocol Implementation\r
- * Time Zone Redirection Table Generator\r
- *\r
- * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-\r
-using System;\r
-using System.IO;\r
-using System.Globalization;\r
-using System.Collections.ObjectModel;\r
-\r
-namespace TimeZones\r
-{\r
- struct SYSTEM_TIME_ENTRY\r
- {\r
- public UInt16 wYear;\r
- public UInt16 wMonth;\r
- public UInt16 wDayOfWeek;\r
- public UInt16 wDay;\r
- public UInt16 wHour;\r
- public UInt16 wMinute;\r
- public UInt16 wSecond;\r
- public UInt16 wMilliseconds;\r
- };\r
-\r
- struct TIME_ZONE_RULE_ENTRY\r
- {\r
- public long TicksStart;\r
- public long TicksEnd;\r
- public Int32 DaylightDelta;\r
- public SYSTEM_TIME_ENTRY StandardDate;\r
- public SYSTEM_TIME_ENTRY DaylightDate;\r
- };\r
-\r
- struct TIME_ZONE_ENTRY\r
- {\r
- public string Id;\r
- public Int32 Bias;\r
- public bool SupportsDST;\r
- public string DisplayName;\r
- public string StandardName;\r
- public string DaylightName;\r
- public string RuleTable;\r
- public UInt32 RuleTableCount;\r
- };\r
-\r
- class TimeZones\r
- {\r
- static void Main(string[] args)\r
- {\r
- int i;\r
- UInt32 index;\r
- const string file = @"TimeZones.txt";\r
- TimeZoneInfo.AdjustmentRule[] rules;\r
- StreamWriter stream = new StreamWriter(file, false);\r
- ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();\r
-\r
- stream.WriteLine();\r
-\r
- stream.WriteLine("struct _TIME_ZONE_RULE_ENTRY");\r
- stream.WriteLine("{");\r
- stream.WriteLine("\tUINT64 TicksStart;");\r
- stream.WriteLine("\tUINT64 TicksEnd;");\r
- stream.WriteLine("\tINT32 DaylightDelta;");\r
- stream.WriteLine("\tSYSTEMTIME StandardDate;");\r
- stream.WriteLine("\tSYSTEMTIME DaylightDate;");\r
- stream.WriteLine("};");\r
- stream.WriteLine("typedef struct _TIME_ZONE_RULE_ENTRY TIME_ZONE_RULE_ENTRY;");\r
- stream.WriteLine();\r
-\r
- stream.WriteLine("struct _TIME_ZONE_ENTRY");\r
- stream.WriteLine("{");\r
- stream.WriteLine("\tconst char* Id;");\r
- stream.WriteLine("\tINT32 Bias;");\r
- stream.WriteLine("\tBOOL SupportsDST;");\r
- stream.WriteLine("\tconst char* DisplayName;");\r
- stream.WriteLine("\tconst char* StandardName;");\r
- stream.WriteLine("\tconst char* DaylightName;");\r
- stream.WriteLine("\tTIME_ZONE_RULE_ENTRY* RuleTable;");\r
- stream.WriteLine("\tUINT32 RuleTableCount;");\r
- stream.WriteLine("};");\r
- stream.WriteLine("typedef struct _TIME_ZONE_ENTRY TIME_ZONE_ENTRY;");\r
- stream.WriteLine();\r
-\r
- index = 0;\r
-\r
- foreach (TimeZoneInfo timeZone in timeZones)\r
- {\r
- rules = timeZone.GetAdjustmentRules();\r
-\r
- if ((!timeZone.SupportsDaylightSavingTime) || (rules.Length < 1))\r
- {\r
- index++;\r
- continue;\r
- }\r
-\r
- stream.WriteLine("static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_{0}[] =", index);\r
- stream.WriteLine("{");\r
-\r
- i = 0;\r
- foreach (TimeZoneInfo.AdjustmentRule rule in rules)\r
- {\r
- DateTime time;\r
- TIME_ZONE_RULE_ENTRY tzr;\r
- TimeZoneInfo.TransitionTime transition;\r
-\r
- tzr.TicksStart = rule.DateEnd.ToUniversalTime().Ticks;\r
- tzr.TicksEnd = rule.DateStart.ToUniversalTime().Ticks;\r
- tzr.DaylightDelta = (Int32)rule.DaylightDelta.TotalMinutes;\r
-\r
- transition = rule.DaylightTransitionEnd;\r
- time = transition.TimeOfDay;\r
-\r
- tzr.StandardDate.wYear = (UInt16)0;\r
- tzr.StandardDate.wMonth = (UInt16)transition.Month;\r
- tzr.StandardDate.wDayOfWeek = (UInt16)transition.DayOfWeek;\r
- tzr.StandardDate.wDay = (UInt16)transition.Week;\r
- tzr.StandardDate.wHour = (UInt16)time.Hour;\r
- tzr.StandardDate.wMinute = (UInt16)time.Minute;\r
- tzr.StandardDate.wSecond = (UInt16)time.Second;\r
- tzr.StandardDate.wMilliseconds = (UInt16)time.Millisecond;\r
-\r
- transition = rule.DaylightTransitionStart;\r
- time = transition.TimeOfDay;\r
-\r
- tzr.DaylightDate.wYear = (UInt16)0;\r
- tzr.DaylightDate.wMonth = (UInt16)transition.Month;\r
- tzr.DaylightDate.wDayOfWeek = (UInt16)transition.DayOfWeek;\r
- tzr.DaylightDate.wDay = (UInt16)transition.Week;\r
- tzr.DaylightDate.wHour = (UInt16)time.Hour;\r
- tzr.DaylightDate.wMinute = (UInt16)time.Minute;\r
- tzr.DaylightDate.wSecond = (UInt16)time.Second;\r
- tzr.DaylightDate.wMilliseconds = (UInt16)time.Millisecond;\r
-\r
- stream.Write("\t{");\r
- stream.Write(" {0}ULL, {1}ULL, {2},", tzr.TicksStart, tzr.TicksEnd, tzr.DaylightDelta);\r
-\r
- stream.Write(" { ");\r
- stream.Write("{0}, {1}, {2}, {3}, {4}, {5}",\r
- tzr.StandardDate.wYear, tzr.StandardDate.wMonth, tzr.StandardDate.wDayOfWeek,\r
- tzr.StandardDate.wDay, tzr.StandardDate.wHour, tzr.StandardDate.wMinute,\r
- tzr.StandardDate.wSecond, tzr.StandardDate.wMilliseconds);\r
- stream.Write(" }, ");\r
-\r
- stream.Write("{ ");\r
- stream.Write("{0}, {1}, {2}, {3}, {4}, {5}",\r
- tzr.DaylightDate.wYear, tzr.DaylightDate.wMonth, tzr.DaylightDate.wDayOfWeek,\r
- tzr.DaylightDate.wDay, tzr.DaylightDate.wHour, tzr.DaylightDate.wMinute,\r
- tzr.DaylightDate.wSecond, tzr.DaylightDate.wMilliseconds);\r
- stream.Write(" },");\r
-\r
- if (++i < rules.Length)\r
- stream.WriteLine(" },");\r
- else\r
- stream.WriteLine(" }");\r
- }\r
-\r
- stream.WriteLine("};");\r
- stream.WriteLine();\r
- index++;\r
- }\r
-\r
- index = 0;\r
- stream.WriteLine("static const TIME_ZONE_ENTRY TimeZoneTable[] =");\r
- stream.WriteLine("{");\r
-\r
- foreach (TimeZoneInfo timeZone in timeZones)\r
- {\r
- TIME_ZONE_ENTRY tz;\r
- TimeSpan offset = timeZone.BaseUtcOffset;\r
-\r
- rules = timeZone.GetAdjustmentRules();\r
-\r
- tz.Id = timeZone.Id;\r
- tz.Bias = -(Int32)offset.TotalMinutes;\r
-\r
- tz.SupportsDST = timeZone.SupportsDaylightSavingTime;\r
-\r
- tz.DisplayName = timeZone.DisplayName;\r
- tz.StandardName = timeZone.StandardName;\r
- tz.DaylightName = timeZone.DaylightName;\r
-\r
- if ((!tz.SupportsDST) || (rules.Length < 1))\r
- {\r
- tz.RuleTableCount = 0;\r
- tz.RuleTable = "NULL";\r
- }\r
- else\r
- {\r
- tz.RuleTableCount = (UInt32)rules.Length;\r
- tz.RuleTable = "&TimeZoneRuleTable_" + index;\r
- tz.RuleTable = "(TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_" + index;\r
- }\r
-\r
- stream.WriteLine("\t{");\r
-\r
- stream.WriteLine("\t\t\"{0}\", {1}, {2}, \"{3}\",",\r
- tz.Id, tz.Bias, tz.SupportsDST ? "TRUE" : "FALSE", tz.DisplayName);\r
-\r
- stream.WriteLine("\t\t\"{0}\", \"{1}\",", tz.StandardName, tz.DaylightName);\r
- stream.WriteLine("\t\t{0}, {1}", tz.RuleTable, tz.RuleTableCount);\r
-\r
- index++;\r
-\r
- if ((int)index < timeZones.Count)\r
- stream.WriteLine("\t},");\r
- else\r
- stream.WriteLine("\t}");\r
- }\r
- stream.WriteLine("};");\r
- stream.WriteLine();\r
-\r
- stream.Close();\r
- }\r
- }\r
-}\r
-\r
--- /dev/null
+/**
+ * FreeRDP: A Remote Desktop Protocol Implementation
+ * Time Zone Redirection Table Generator
+ *
+ * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.IO;
+using System.Globalization;
+using System.Collections.ObjectModel;
+
+struct SYSTEM_TIME_ENTRY
+{
+ public UInt16 wYear;
+ public UInt16 wMonth;
+ public UInt16 wDayOfWeek;
+ public UInt16 wDay;
+ public UInt16 wHour;
+ public UInt16 wMinute;
+ public UInt16 wSecond;
+ public UInt16 wMilliseconds;
+};
+
+struct TIME_ZONE_RULE_ENTRY
+{
+ public long TicksStart;
+ public long TicksEnd;
+ public Int32 DaylightDelta;
+ public SYSTEM_TIME_ENTRY StandardDate;
+ public SYSTEM_TIME_ENTRY DaylightDate;
+};
+
+struct TIME_ZONE_ENTRY
+{
+ public string Id;
+ public Int32 Bias;
+ public bool SupportsDST;
+ public string DisplayName;
+ public string StandardName;
+ public string DaylightName;
+ public string RuleTable;
+ public UInt32 RuleTableCount;
+};
+
+int i;
+UInt32 index;
+const string file = @"TimeZones.txt";
+TimeZoneInfo.AdjustmentRule[] rules;
+StreamWriter stream = new StreamWriter(file, false);
+ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
+
+stream.WriteLine();
+
+stream.WriteLine("struct _TIME_ZONE_RULE_ENTRY");
+stream.WriteLine("{");
+stream.WriteLine("\tUINT64 TicksStart;");
+stream.WriteLine("\tUINT64 TicksEnd;");
+stream.WriteLine("\tINT32 DaylightDelta;");
+stream.WriteLine("\tSYSTEMTIME StandardDate;");
+stream.WriteLine("\tSYSTEMTIME DaylightDate;");
+stream.WriteLine("};");
+stream.WriteLine("typedef struct _TIME_ZONE_RULE_ENTRY TIME_ZONE_RULE_ENTRY;");
+stream.WriteLine();
+
+stream.WriteLine("struct _TIME_ZONE_ENTRY");
+stream.WriteLine("{");
+stream.WriteLine("\tconst char* Id;");
+stream.WriteLine("\tINT32 Bias;");
+stream.WriteLine("\tBOOL SupportsDST;");
+stream.WriteLine("\tconst char* DisplayName;");
+stream.WriteLine("\tconst char* StandardName;");
+stream.WriteLine("\tconst char* DaylightName;");
+stream.WriteLine("\tTIME_ZONE_RULE_ENTRY* RuleTable;");
+stream.WriteLine("\tUINT32 RuleTableCount;");
+stream.WriteLine("};");
+stream.WriteLine("typedef struct _TIME_ZONE_ENTRY TIME_ZONE_ENTRY;");
+stream.WriteLine();
+
+index = 0;
+
+foreach (TimeZoneInfo timeZone in timeZones)
+{
+ rules = timeZone.GetAdjustmentRules();
+
+ if ((!timeZone.SupportsDaylightSavingTime) || (rules.Length < 1))
+ {
+ index++;
+ continue;
+ }
+
+ stream.WriteLine("static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_{0}[] =", index);
+ stream.WriteLine("{");
+
+ i = 0;
+ foreach (TimeZoneInfo.AdjustmentRule rule in rules)
+ {
+ DateTime time;
+ TIME_ZONE_RULE_ENTRY tzr;
+ TimeZoneInfo.TransitionTime transition;
+
+ tzr.TicksStart = rule.DateEnd.ToUniversalTime().Ticks;
+ tzr.TicksEnd = rule.DateStart.ToUniversalTime().Ticks;
+ tzr.DaylightDelta = (Int32)rule.DaylightDelta.TotalMinutes;
+
+ transition = rule.DaylightTransitionEnd;
+ time = transition.TimeOfDay;
+
+ tzr.StandardDate.wYear = (UInt16)0;
+ tzr.StandardDate.wMonth = (UInt16)transition.Month;
+ tzr.StandardDate.wDayOfWeek = (UInt16)transition.DayOfWeek;
+ tzr.StandardDate.wDay = (UInt16)transition.Week;
+ tzr.StandardDate.wHour = (UInt16)time.Hour;
+ tzr.StandardDate.wMinute = (UInt16)time.Minute;
+ tzr.StandardDate.wSecond = (UInt16)time.Second;
+ tzr.StandardDate.wMilliseconds = (UInt16)time.Millisecond;
+
+ transition = rule.DaylightTransitionStart;
+ time = transition.TimeOfDay;
+
+ tzr.DaylightDate.wYear = (UInt16)0;
+ tzr.DaylightDate.wMonth = (UInt16)transition.Month;
+ tzr.DaylightDate.wDayOfWeek = (UInt16)transition.DayOfWeek;
+ tzr.DaylightDate.wDay = (UInt16)transition.Week;
+ tzr.DaylightDate.wHour = (UInt16)time.Hour;
+ tzr.DaylightDate.wMinute = (UInt16)time.Minute;
+ tzr.DaylightDate.wSecond = (UInt16)time.Second;
+ tzr.DaylightDate.wMilliseconds = (UInt16)time.Millisecond;
+
+ stream.Write("\t{");
+ stream.Write(" {0}ULL, {1}ULL, {2},", tzr.TicksStart, tzr.TicksEnd, tzr.DaylightDelta);
+
+ stream.Write(" { ");
+ stream.Write("{0}, {1}, {2}, {3}, {4}, {5}",
+ tzr.StandardDate.wYear, tzr.StandardDate.wMonth, tzr.StandardDate.wDayOfWeek,
+ tzr.StandardDate.wDay, tzr.StandardDate.wHour, tzr.StandardDate.wMinute,
+ tzr.StandardDate.wSecond, tzr.StandardDate.wMilliseconds);
+ stream.Write(" }, ");
+
+ stream.Write("{ ");
+ stream.Write("{0}, {1}, {2}, {3}, {4}, {5}",
+ tzr.DaylightDate.wYear, tzr.DaylightDate.wMonth, tzr.DaylightDate.wDayOfWeek,
+ tzr.DaylightDate.wDay, tzr.DaylightDate.wHour, tzr.DaylightDate.wMinute,
+ tzr.DaylightDate.wSecond, tzr.DaylightDate.wMilliseconds);
+ stream.Write(" },");
+
+ if (++i < rules.Length)
+ stream.WriteLine(" },");
+ else
+ stream.WriteLine(" }");
+ }
+
+ stream.WriteLine("};");
+ stream.WriteLine();
+ index++;
+}
+
+index = 0;
+stream.WriteLine("static const TIME_ZONE_ENTRY TimeZoneTable[] =");
+stream.WriteLine("{");
+
+foreach (TimeZoneInfo timeZone in timeZones)
+{
+ TIME_ZONE_ENTRY tz;
+ TimeSpan offset = timeZone.BaseUtcOffset;
+
+ rules = timeZone.GetAdjustmentRules();
+
+ tz.Id = timeZone.Id;
+ tz.Bias = -(Int32)offset.TotalMinutes;
+
+ tz.SupportsDST = timeZone.SupportsDaylightSavingTime;
+
+ tz.DisplayName = timeZone.DisplayName;
+ tz.StandardName = timeZone.StandardName;
+ tz.DaylightName = timeZone.DaylightName;
+
+ if ((!tz.SupportsDST) || (rules.Length < 1))
+ {
+ tz.RuleTableCount = 0;
+ tz.RuleTable = "NULL";
+ }
+ else
+ {
+ tz.RuleTableCount = (UInt32)rules.Length;
+ tz.RuleTable = "&TimeZoneRuleTable_" + index;
+ tz.RuleTable = "(TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_" + index;
+ }
+
+ stream.WriteLine("\t{");
+
+ stream.WriteLine("\t\t\"{0}\", {1}, {2}, \"{3}\",",
+ tz.Id, tz.Bias, tz.SupportsDST ? "TRUE" : "FALSE", tz.DisplayName);
+
+ stream.WriteLine("\t\t\"{0}\", \"{1}\",", tz.StandardName, tz.DaylightName);
+ stream.WriteLine("\t\t{0}, {1}", tz.RuleTable, tz.RuleTableCount);
+
+ index++;
+
+ if ((int)index < timeZones.Count)
+ stream.WriteLine("\t},");
+ else
+ stream.WriteLine("\t}");
+}
+stream.WriteLine("};");
+stream.WriteLine();
+
+stream.Close();
+