32 for (
i = 0;
i < 7;
i++)
46 for (
i = 0;
i < 7;
i++)
80 WCHAR szHour[3], szMinute[3], szAmPm[5];
81 PWSTR startPtr, endPtr;
82 ULONG ulHour = 0, ulMinute = 0;
92 while (*startPtr !=
L'\0' &&
iswdigit(*startPtr))
105 if (*startPtr !=
L':')
113 while (*startPtr !=
L'\0' &&
iswdigit(*startPtr))
127 while (*startPtr !=
L'\0')
143 ulHour =
wcstoul(szHour, &endPtr, 10);
148 ulMinute =
wcstoul(szMinute, &endPtr, 10);
171 if (ulHour == 0 || ulHour > 12)
183 if (ulHour >= 1 && ulHour <= 11)
196 if (pulJobHour !=
NULL)
197 *pulJobHour = ulHour;
199 if (pulJobMinute !=
NULL)
200 *pulJobMinute = ulMinute;
212 PWSTR startPtr, endPtr;
218 ulId =
wcstoul(startPtr, &endPtr, 10);
237 PWSTR startPtr, endPtr;
240 if (
wcslen(pszBuffer) == 0)
243 startPtr = pszBuffer;
247 ulValue =
wcstoul(startPtr, &endPtr, 10);
251 if (ulValue > 0 && ulValue <= 31)
252 *pulDaysOfMonth |= (1 << (ulValue - 1));
257 startPtr = endPtr + 1;
271 PWSTR startPtr, endPtr;
275 if (
wcslen(pszBuffer) == 0)
278 startPtr = pszBuffer;
282 endPtr =
wcschr(startPtr,
L',');
288 for (
i = 0;
i < 7;
i++)
293 *pucDaysOfWeek |= (1 <<
i);
301 startPtr = endPtr + 1;
325 for (
i = 0;
i < 79;
i++)
337 WCHAR szYesBuffer[8];
362 if (szInput[0] == szYesBuffer[0])
367 else if (szInput[0] == 13 || szInput[0] == szNoBuffer[0])
406 return 1UL << (
Time.wDay - 1);
421 Time.wMinute = wMinute;
435 PWSTR pszComputerName,
440 WCHAR szStatusBuffer[16];
441 WCHAR szScheduleBuffer[60];
442 WCHAR szTimeBuffer[16];
443 WCHAR szInteractiveBuffer[16];
444 WCHAR szDateBuffer[8];
445 size_t nDateLength, nScheduleLength;
470 nScheduleLength =
wcslen(szScheduleBuffer);
471 for (
i = 0;
i < 31;
i++)
473 if (
pBuffer->DaysOfMonth & (1 <<
i))
476 nDateLength =
wcslen(szDateBuffer);
477 if (nScheduleLength + nDateLength <= 55)
479 wcscat(szScheduleBuffer, szDateBuffer);
480 nScheduleLength += nDateLength;
484 wcscat(szScheduleBuffer,
L"...");
490 else if (
pBuffer->DaysOfWeek != 0)
497 nScheduleLength =
wcslen(szScheduleBuffer);
498 for (
i = 0;
i < 7;
i++)
503 nDateLength =
wcslen(szDateBuffer);
504 if (nScheduleLength + nDateLength <= 55)
506 wcscat(szScheduleBuffer, szDateBuffer);
507 nScheduleLength += nDateLength;
511 wcscat(szScheduleBuffer,
L"...");
520 if (CurrentTime >
pBuffer->JobTime)
552 PWSTR pszComputerName)
555 DWORD dwRead = 0, dwTotal = 0;
559 WCHAR szScheduleBuffer[32];
560 WCHAR szTimeBuffer[16];
561 WCHAR szDateBuffer[8];
562 size_t nDateLength, nScheduleLength;
586 for (
i = 0;
i < dwRead;
i++)
595 nScheduleLength =
wcslen(szScheduleBuffer);
596 for (
j = 0;
j < 31;
j++)
601 nDateLength =
wcslen(szDateBuffer);
602 if (nScheduleLength + nDateLength <= 19)
604 wcscat(szScheduleBuffer, szDateBuffer);
605 nScheduleLength += nDateLength;
609 wcscat(szScheduleBuffer,
L"...");
615 else if (
pBuffer[
i].DaysOfWeek != 0)
622 nScheduleLength =
wcslen(szScheduleBuffer);
623 for (
j = 0;
j < 7;
j++)
628 nDateLength =
wcslen(szDateBuffer);
629 if (nScheduleLength + nDateLength <= 55)
631 wcscat(szScheduleBuffer, szDateBuffer);
632 nScheduleLength += nDateLength;
636 wcscat(szScheduleBuffer,
L"...");
645 if (CurrentTime >
pBuffer[
i].JobTime)
657 L" %6lu %-21s %-11s %s\n",
673 PWSTR pszComputerName,
678 BOOL bInteractiveJob,
692 InfoBuffer.
Command = pszCommand;
712 PWSTR pszComputerName,
718 if (ulJobId == (
ULONG)-1 && bForceDelete ==
FALSE)
726 (ulJobId == (
ULONG)-1) ? 0 : ulJobId,
727 (ulJobId == (
ULONG)-1) ? -1 : ulJobId);
748 ULONG ulDaysOfMonth = 0;
749 UCHAR ucDaysOfWeek = 0;
766 pszComputerName =
argv[
i];
806 bInteractiveJob =
TRUE;
821 bPeriodicJob =
FALSE;
845 if (bDeleteJob ==
TRUE)
848 if (bInteractiveJob ==
TRUE ||
849 ulJobHour != (
ULONG)-1 ||
850 ulJobMinute != (
ULONG)-1 ||
851 ulDaysOfMonth != 0 ||
866 if (ulJobHour != (
ULONG)-1 && ulJobMinute != (
ULONG)-1)
869 if (bForceDelete ==
TRUE ||
877 nResult =
AddJob(pszComputerName,
889 if (bForceDelete ==
TRUE ||
890 bInteractiveJob ==
TRUE ||
891 ulDaysOfMonth != 0 ||
900 if (ulJobId == (
ULONG)-1)
915 if (bPrintUsage ==
TRUE)
static DWORD_PTR GetTimeAsJobTime(VOID)
static BOOL ParseId(PWSTR pszId, PULONG pulId)
static BOOL ParseTime(PWSTR pszTime, PULONG pulJobHour, PULONG pulJobMinute)
static INT PrintJobDetails(PWSTR pszComputerName, ULONG ulJobId)
static INT PrintAllJobs(PWSTR pszComputerName)
static BOOL ParseDaysOfWeek(PWSTR pszBuffer, PUCHAR pucDaysOfWeek)
static VOID JobTimeToTimeString(PWSTR pszBuffer, INT cchBuffer, WORD wHour, WORD wMinute)
static BOOL Confirm(VOID)
static VOID PrintHorizontalLine(VOID)
static VOID PrintErrorMessage(DWORD dwError)
static BOOL ParseDaysOfMonth(PWSTR pszBuffer, PULONG pulDaysOfMonth)
static ULONG GetCurrentDayOfMonth(VOID)
static VOID FreeDaysOfWeekArray(VOID)
static INT DeleteJob(PWSTR pszComputerName, ULONG ulJobId, BOOL bForceDelete)
static BOOL InitDaysOfWeekArray(VOID)
PWSTR pszDaysOfWeekArray[7]
#define IDS_CONFIRM_QUESTION
#define IDS_CONFIRM_INVALID
static WORD DaysOfMonth(WORD wMonth, WORD wYear)
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
#define ConInitStdStreams()
void ConPrintf(FILE *fp, LPCWSTR psz,...)
void ConResPrintf(FILE *fp, UINT nID,...)
void ConResPuts(FILE *fp, UINT nID)
#define HeapFree(x, y, z)
BOOL WINAPI GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode)
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode)
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleW(IN HANDLE hConsoleInput, OUT LPVOID lpBuffer, IN DWORD nNumberOfCharsToRead, OUT LPDWORD lpNumberOfCharsRead, IN PCONSOLE_READCONSOLE_CONTROL pInputControl OPTIONAL)
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
_ACRTIMP __msvcrt_ulong __cdecl wcstoul(const wchar_t *, wchar_t **, int)
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer)
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
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 GLint GLint j
#define JOB_NONINTERACTIVE
#define JOB_RUN_PERIODICALLY
#define MAX_PREFERRED_LENGTH
static PLARGE_INTEGER Time
#define LOCALE_USER_DEFAULT
INT ConMsgPuts(IN PCON_STREAM Stream, IN DWORD dwFlags, IN LPCVOID lpSource OPTIONAL, IN DWORD dwMessageId, IN DWORD dwLanguageId)
NET_API_STATUS WINAPI NetScheduleJobGetInfo(LPCWSTR ServerName, DWORD JobId, LPBYTE *PointerToBuffer)
NET_API_STATUS WINAPI NetScheduleJobAdd(LPCWSTR ServerName, LPBYTE Buffer, LPDWORD JobId)
NET_API_STATUS WINAPI NetScheduleJobDel(LPCWSTR ServerName, DWORD MinJobId, DWORD MaxJobId)
NET_API_STATUS WINAPI NetScheduleJobEnum(LPCWSTR ServerName, LPBYTE *PointerToBuffer, DWORD PreferredMaximumLength, LPDWORD EntriesRead, LPDWORD TotalEntries, LPDWORD ResumeHandle)
#define FORMAT_MESSAGE_FROM_SYSTEM
#define ENABLE_ECHO_INPUT
#define ENABLE_LINE_INPUT
WINBASEAPI _In_ DWORD nLength
#define LOCALE_SABBREVDAYNAME1
_Must_inspect_result_ _In_ ULONG Flags