{785, 5103}, // Arabic
{972, 5104} }; // Hebrew
-//static PWSTR DaysArray[] = {L"So", L"Mo", L"Di", L"Mi", L"Do", L"Fr", L"Sa"};
-static PWSTR DaysArray[] = {L"Sun", L"Mon", L"Tue", L"Wed", L"Thu", L"Fri", L"Sat"};
static
int
BOOL
ParseHour(
PWSTR pszString,
+ PWSTR *AmPmArray,
PLONG plHour)
{
PWCHAR pChar;
(lHour >= 1) &&
(lHour <= 12))
{
- if ((_wcsicmp(pChar, L"am") == 0) ||
- (_wcsicmp(pChar, L"a.m.") == 0))
+ if ((_wcsicmp(pChar, AmPmArray[0]) == 0) ||
+ (_wcsicmp(pChar, AmPmArray[1]) == 0))
{
if (lHour == 12)
lHour = 0;
}
- else if ((_wcsicmp(pChar, L"pm") == 0) ||
- (_wcsicmp(pChar, L"p.m.") == 0))
+ else if ((_wcsicmp(pChar, AmPmArray[2]) == 0) ||
+ (_wcsicmp(pChar, AmPmArray[3]) == 0))
{
if (lHour != 12)
lHour += 12;
BOOL
ParseDay(
PWSTR pszString,
+ PWSTR *ShortDays,
+ PWSTR *LongDays,
PDWORD pdwDay)
{
DWORD i;
- for (i = 0; i < ARRAYSIZE(DaysArray); i++)
+ for (i = 0; i < 7; i++)
{
- if (_wcsicmp(pszString, DaysArray[i]) == 0)
+ if (_wcsicmp(pszString, ShortDays[i]) == 0 ||
+ _wcsicmp(pszString, LongDays[i]) == 0)
{
*pdwDay = i;
return TRUE;
}
+static
+DWORD
+LocalToGmtHour(
+ LONG lLocalHour,
+ LONG lBias)
+{
+ LONG lGmtHour;
+
+ lGmtHour = lLocalHour + lBias;
+ if (lGmtHour < 0)
+ lGmtHour += UNITS_PER_WEEK;
+ else if (lGmtHour > UNITS_PER_WEEK)
+ lGmtHour -= UNITS_PER_WEEK;
+
+ return (DWORD)lGmtHour;
+}
+
+
static
DWORD
ParseLogonHours(
LONG lStartHour, lEndHour, lBias;
BYTE DayBitmap;
BYTE HourBitmap[6];
+ LPWSTR ShortDays[7] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+ LPWSTR LongDays[7] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+ LPWSTR AmPmArray[4] = {NULL, NULL, NULL, NULL};
GetTimeZoneInformation(&TimeZoneInformation);
lBias = TimeZoneInformation.Bias / 60;
goto done;
}
+ for (i = 0; i < 7; i++)
+ {
+ FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_HMODULE |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ hModuleNetMsg,
+ 4314 + i,
+ LANG_USER_DEFAULT,
+ (LPWSTR)&ShortDays[i],
+ 0,
+ NULL);
+
+ FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_HMODULE |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ hModuleNetMsg,
+ 4307 + i,
+ LANG_USER_DEFAULT,
+ (LPWSTR)&LongDays[i],
+ 0,
+ NULL);
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_HMODULE |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ hModuleNetMsg,
+ 4322 + i,
+ LANG_USER_DEFAULT,
+ (LPWSTR)&AmPmArray[i],
+ 0,
+ NULL);
+ }
+
ZeroMemory(&DayBitmap, sizeof(DayBitmap));
ZeroMemory(HourBitmap, sizeof(HourBitmap));
if (iswdigit(szBuffer[0]))
{
/* Parse hour */
- if (!ParseHour(szBuffer, &lStartHour))
+ if (!ParseHour(szBuffer, AmPmArray, &lStartHour))
{
dwError = 3769;
break;
}
- /* Convert from local timezone to GMT */
- lStartHour += lBias;
- if (lStartHour < 0)
- lStartHour += UNITS_PER_WEEK;
- else if (lStartHour > UNITS_PER_WEEK)
- lStartHour -= UNITS_PER_WEEK;
-
- SetBitValue(HourBitmap, (DWORD)lStartHour);
+ SetBitValue(HourBitmap, LocalToGmtHour(lStartHour, lBias));
}
else
{
/* Parse day */
- if (!ParseDay(szBuffer, &dwStartDay))
+ if (!ParseDay(szBuffer, ShortDays, LongDays, &dwStartDay))
{
dwError = 3768;
break;
if (iswdigit(szBuffer[0]))
{
/* Parse hour */
- if (!ParseHour(szBuffer, &lEndHour))
+ if (!ParseHour(szBuffer, AmPmArray, &lEndHour))
{
dwError = 3769;
break;
}
- if (lEndHour < lStartHour)
+ if (lEndHour <= lStartHour)
lEndHour += HOURS_PER_DAY;
- else if (lEndHour == lStartHour)
- lEndHour = lStartHour + HOURS_PER_DAY;
- /* Convert from local timezone to GMT */
- lEndHour += lBias;
- if (lEndHour < 0)
- lEndHour += UNITS_PER_WEEK;
- else if (lEndHour > UNITS_PER_WEEK)
- lEndHour -= UNITS_PER_WEEK;
-
- for (i = (DWORD)lStartHour; i < (DWORD)lEndHour; i++)
+ for (i = LocalToGmtHour(lStartHour, lBias); i < LocalToGmtHour(lEndHour, lBias); i++)
SetBitValue(HourBitmap, i);
}
else
{
/* Parse day */
- if (!ParseDay(szBuffer, &dwEndDay))
+ if (!ParseDay(szBuffer, ShortDays, LongDays, &dwEndDay))
{
dwError = 3768;
break;
ptr1++;
}
-#if 0
- printf("LogonBitmap:\n");
- for (i = 0; i < DAYS_PER_WEEK; i++)
+done:
+ for (i = 0; i < 7; i++)
{
- j = i * 3;
- printf("%lu: %02x%02x%02x\n", i, pLogonHours[j + 2], pLogonHours[j + 1], pLogonHours[j + 0]);
+ LocalFree(ShortDays[i]);
+ LocalFree(LongDays[i]);
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ LocalFree(AmPmArray[i]);
}
- printf("\n");
-#endif
-done:
if (dwError == ERROR_SUCCESS)
{
*ppLogonBitmap = pLogonBitmap;