2 * DATE.C - date internal command.
7 * 08 Jul 1998 (John P. Price)
10 * 20 Jul 1998 (John P. Price)
11 * corrected number of days for December from 30 to 31.
12 * (Thanx to Steffen Kaiser for bug report)
14 * 27-Jul-1998 (John P Price <linux-guru@gcfl.net>)
15 * added config.h include
17 * 29-Jul-1998 (Rob Lake)
18 * fixed stand-alone mode.
19 * Added Pacific C compatible dos_getdate functions
21 * 09-Jan-1999 (Eric Kohl)
22 * Added locale support
24 * 23-Jan-1999 (Eric Kohl)
25 * Unicode and redirection safe!
27 * 04-Feb-1999 (Eric Kohl)
28 * Fixed date input bug.
30 * 03-Apr-2005 (Magnus Olsen <magnus@greatlord.com>)
31 * Remove all hardcoded strings in En.rc
36 #ifdef INCLUDE_CMD_DATE
39 static WORD awMonths
[2][13] =
41 {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
42 {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
47 PrintDateString (VOID
)
53 ConOutResPrintf(STRING_DATE_HELP1
, cDateSeparator
, cDateSeparator
);
57 ConOutResPrintf(STRING_DATE_HELP2
, cDateSeparator
, cDateSeparator
);
61 ConOutResPrintf(STRING_DATE_HELP3
, cDateSeparator
, cDateSeparator
);
67 ReadNumber (LPTSTR
*s
, LPWORD lpwValue
)
71 while (_istdigit (**s
))
73 *lpwValue
= *lpwValue
* 10 + **s
- _T('0');
82 ReadSeparator (LPTSTR
*s
)
84 if (**s
== _T('/') || **s
== _T('-') || **s
== cDateSeparator
)
112 if (!ReadNumber (&p
, &d
.wMonth
))
114 if (!ReadSeparator (&p
))
116 if (!ReadNumber (&p
, &d
.wDay
))
118 if (!ReadSeparator (&p
))
120 if (!ReadNumber (&p
, &d
.wYear
))
125 if (!ReadNumber (&p
, &d
.wDay
))
127 if (!ReadSeparator (&p
))
129 if (!ReadNumber (&p
, &d
.wMonth
))
131 if (!ReadSeparator (&p
))
133 if (!ReadNumber (&p
, &d
.wYear
))
138 if (!ReadNumber (&p
, &d
.wYear
))
140 if (!ReadSeparator (&p
))
142 if (!ReadNumber (&p
, &d
.wMonth
))
144 if (!ReadSeparator (&p
))
146 if (!ReadNumber (&p
, &d
.wDay
))
151 /* if only entered two digits: */
152 /* assume 2000's if value less than 80 */
153 /* assume 1900's if value greater or equal 80 */
157 d
.wYear
= 1900 + d
.wYear
;
159 d
.wYear
= 2000 + d
.wYear
;
162 leap
= (!(d
.wYear
% 4) && (d
.wYear
% 100)) || !(d
.wYear
% 400);
164 if ((d
.wMonth
>= 1 && d
.wMonth
<= 12) &&
165 (d
.wDay
>= 1 && d
.wDay
<= awMonths
[leap
][d
.wMonth
]) &&
166 (d
.wYear
>= 1980 && d
.wYear
<= 2099))
176 INT
cmd_date (LPTSTR param
)
182 INT nDateString
= -1;
184 if (!_tcsncmp (param
, _T("/?"), 2))
186 ConOutResPaging(TRUE
,STRING_DATE_HELP4
);
192 /* build parameter array */
193 arg
= split (param
, &argc
, FALSE
, FALSE
);
195 /* check for options */
196 for (i
= 0; i
< argc
; i
++)
198 if (_tcsicmp (arg
[i
], _T("/t")) == 0)
200 if ((*arg
[i
] != _T('/')) && (nDateString
== -1))
204 if (nDateString
== -1)
205 ConOutPrintf(_T("%s"), GetDateString());
213 if (nDateString
== -1)
215 while (TRUE
) /* forever loop */
221 TRACE ("\'%s\'\n", debugstr_aw(s
));
222 while (*s
&& s
[_tcslen (s
) - 1] < _T(' '))
223 s
[_tcslen (s
) - 1] = _T('\0');
229 ConErrResPuts(STRING_DATE_ERROR
);
234 if (!ParseDate (arg
[nDateString
]))
236 while (TRUE
) /* forever loop */
239 ConErrResPuts(STRING_DATE_ERROR
);
244 while (*s
&& s
[_tcslen (s
) - 1] < _T(' '))
245 s
[_tcslen (s
) - 1] = _T('\0');
258 #endif /* INCLUDE_CMD_DATE */