+ ZeroMemory(&DayBitmap, sizeof(DayBitmap));
+ ZeroMemory(HourBitmap, sizeof(HourBitmap));
+
+ ZeroMemory(szBuffer, sizeof(szBuffer));
+ ptr1 = pszParams;
+ ptr2 = szBuffer;
+ prevSep = UNICODE_NULL;
+ nextSep = UNICODE_NULL;
+ for (;;)
+ {
+ if (*ptr1 != L'-' && *ptr1 != L',' && *ptr1 != L';' && *ptr1 != UNICODE_NULL)
+ {
+ *ptr2 = *ptr1;
+ ptr2++;
+ }
+ else
+ {
+ prevSep = nextSep;
+ nextSep = *ptr1;
+
+// printf("Token: '%S'\n", szBuffer);
+ if (*ptr1 != UNICODE_NULL)
+ printf("Separator: '%C'\n", *ptr1);
+
+ if (prevSep != L'-')
+ {
+ // Set first value
+ if (iswdigit(szBuffer[0]))
+ {
+ // parse hour
+ if (!ParseHour(szBuffer, &dwStartHour))
+ {
+ dwError = 3769;
+ break;
+ }
+
+ // FIXME: Check if this is a converion from local timezone to GMT
+ if (dwStartHour > 0)
+ dwStartHour--;
+ else
+ dwStartHour = UNITS_PER_WEEK - 1;
+
+ SetBitValue(HourBitmap, dwStartHour);
+ }
+ else
+ {
+ // parse day
+ if (!ParseDay(szBuffer, &dwStartDay))
+ {
+ dwError = 3768;
+ break;
+ }
+
+ SetBitValue(&DayBitmap, dwStartDay);
+ }
+ }
+ else
+ {
+ // Set second value
+ if (iswdigit(szBuffer[0]))
+ {
+ // parse hour
+ if (!ParseHour(szBuffer, &dwEndHour))
+ {
+ dwError = 3769;
+ break;
+ }
+
+ if (dwEndHour < dwStartHour)
+ dwEndHour += HOURS_PER_DAY;
+ else if (dwEndHour == dwStartHour)
+ dwEndHour = dwStartHour + HOURS_PER_DAY;
+
+ // FIXME: Check if this is a converion from local timezone to GMT
+ if (dwEndHour > 0)
+ dwEndHour--;
+ else
+ dwEndHour = UNITS_PER_WEEK - 1;
+
+ for (i = dwStartHour; i < dwEndHour; i++)
+ SetBitValue(HourBitmap, i);
+ }
+ else
+ {
+ // parse day
+ if (!ParseDay(szBuffer, &dwEndDay))
+ {
+ dwError = 3768;
+ break;
+ }
+
+ if (dwEndDay <= dwStartDay)
+ dwEndDay += DAYS_PER_WEEK;
+
+ for (i = dwStartDay; i <= dwEndDay; i++)
+ SetBitValue(&DayBitmap, i % DAYS_PER_WEEK);
+ }
+ }
+
+ if (*ptr1 == L';' || *ptr1 == UNICODE_NULL)
+ {
+ // Process the data
+// printf("DayBitmap: %02x HourBitmap: %02x%02x%02x%02x%02x%02x\n",
+// DayBitmap, HourBitmap[5], HourBitmap[4], HourBitmap[3], HourBitmap[2], HourBitmap[1], HourBitmap[0]);
+
+ for (i = 0; i < DAYS_PER_WEEK; i++)
+ {
+ if (GetBitValue(&DayBitmap, i))
+ {
+ for (j = 0; j < 48; j++)
+ {
+ if (GetBitValue(HourBitmap, j))
+ SetBitValue(pLogonBitmap, ((i * HOURS_PER_DAY) + j) % UNITS_PER_WEEK);
+ }
+ }
+ }
+
+ // Reset the Bitmaps
+ ZeroMemory(&DayBitmap, sizeof(DayBitmap));
+ ZeroMemory(HourBitmap, sizeof(HourBitmap));
+ }
+
+ if (*ptr1 == UNICODE_NULL)
+ {
+// printf("Done\n");
+ break;
+ }
+
+ ZeroMemory(szBuffer, sizeof(szBuffer));
+ ptr2 = szBuffer;
+ }
+
+ ptr1++;
+ }
+
+#if 0
+ printf("LogonBitmap:\n");
+ for (i = 0; i < DAYS_PER_WEEK; i++)
+ {
+ j = i * 3;
+ printf("%lu: %02x%02x%02x\n", i, pLogonHours[j + 2], pLogonHours[j + 1], pLogonHours[j + 0]);
+ }
+ printf("\n");
+#endif