470{
471 SYSTEMTIME CurrentSystemTime, StartSystemTime;
473 WORD wDaysOffset, wTempOffset,
i, wJobDayOfWeek, wJobDayOfMonth;
475 BOOL bDaysOffsetValid;
477
478 TRACE(
"CalculateNextStartTime(%p)\n", pJob);
479 TRACE(
"JobTime: %lu\n", pJob->JobTime);
480 TRACE(
"DaysOfWeek: 0x%x\n", pJob->DaysOfWeek);
481 TRACE(
"DaysOfMonth: 0x%x\n", pJob->DaysOfMonth);
482
484
487
488 bDaysOffsetValid =
FALSE;
489 wDaysOffset = 0;
490 if ((pJob->DaysOfWeek == 0) && (pJob->DaysOfMonth == 0))
491 {
492 if (CurrentTimeMs >= pJob->JobTime)
493 {
494 TRACE(
"Tomorrow!\n");
495 wDaysOffset = 1;
496 }
497
498 bDaysOffsetValid =
TRUE;
499 }
500 else
501 {
502 if (pJob->DaysOfWeek != 0)
503 {
504 TRACE(
"DaysOfWeek!\n");
505 for (
i = 0;
i < 7;
i++)
506 {
507 if (pJob->DaysOfWeek & (1 <<
i))
508 {
509
510 wJobDayOfWeek = (
i + 1) % 7;
511 TRACE(
"wJobDayOfWeek: %hu\n", wJobDayOfWeek);
512 TRACE(
"CurrentSystemTime.wDayOfWeek: %hu\n", CurrentSystemTime.
wDayOfWeek);
513
514
515 if ((CurrentSystemTime.
wDayOfWeek > wJobDayOfWeek ) ||
516 ((CurrentSystemTime.
wDayOfWeek == wJobDayOfWeek) && (CurrentTimeMs >= pJob->JobTime)))
517 {
518 wTempOffset = 7 - CurrentSystemTime.
wDayOfWeek + wJobDayOfWeek;
519 TRACE(
"wTempOffset: %hu\n", wTempOffset);
520 }
521 else
522 {
523 wTempOffset = wJobDayOfWeek - CurrentSystemTime.
wDayOfWeek;
524 TRACE(
"wTempOffset: %hu\n", wTempOffset);
525 }
526
527
528 if (bDaysOffsetValid ==
FALSE)
529 {
530 wDaysOffset = wTempOffset;
531 bDaysOffsetValid =
TRUE;
532 }
533 else
534 {
535 if (wTempOffset < wDaysOffset)
536 wDaysOffset = wTempOffset;
537 }
538 }
539 }
540 }
541
542 if (pJob->DaysOfMonth != 0)
543 {
544 FIXME(
"Support DaysOfMonth!\n");
545 for (
i = 0;
i < 31;
i++)
546 {
547 if (pJob->DaysOfMonth & (1 <<
i))
548 {
549
550 wJobDayOfMonth =
i + 1;
551 FIXME(
"wJobDayOfMonth: %hu\n", wJobDayOfMonth);
552 FIXME(
"CurrentSystemTime.wDay: %hu\n", CurrentSystemTime.
wDay);
553
554 if ((CurrentSystemTime.
wDay > wJobDayOfMonth) ||
555 ((CurrentSystemTime.
wDay == wJobDayOfMonth) && (CurrentTimeMs >= pJob->JobTime)))
556 {
558 CurrentSystemTime.
wDay + wJobDayOfMonth;
559 FIXME(
"wTempOffset: %hu\n", wTempOffset);
560 }
561 else
562 {
563 wTempOffset = wJobDayOfMonth - CurrentSystemTime.
wDay;
564 FIXME(
"wTempOffset: %hu\n", wTempOffset);
565 }
566
567
568 if (bDaysOffsetValid ==
FALSE)
569 {
570 wDaysOffset = wTempOffset;
571 bDaysOffsetValid =
TRUE;
572 }
573 else
574 {
575 if (wTempOffset < wDaysOffset)
576 wDaysOffset = wTempOffset;
577 }
578 }
579 }
580 }
581 }
582
583 TRACE(
"wDaysOffset: %hu\n", wDaysOffset);
584
586
589 StartSystemTime.
wHour = (
WORD)(pJob->JobTime / 3600000);
590 StartSystemTime.
wMinute = (
WORD)((pJob->JobTime % 3600000) / 60000);
591
593
596 if (bDaysOffsetValid && wDaysOffset != 0)
597 {
599 }
600
601 pJob->StartTime.dwLowDateTime = LocalStartTime.
u.LowPart;
602 pJob->StartTime.dwHighDateTime = LocalStartTime.
u.HighPart;
603}
static WORD DaysOfMonth(WORD wMonth, WORD wYear)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
struct _ULARGE_INTEGER::@4390 u