2 Main file for time, timezone, and date shell level 2 and shell level 3 functions.
4 Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #include "UefiShellLevel2CommandsLib.h"
18 Determine if String is a valid representation for a time or date.
20 @param[in] String The pointer to the string to test.
21 @param[in] Char The delimeter character.
22 @param[in] Min The minimum value allowed.
23 @param[in] Max The maximum value allowed.
24 @param[in] MinusOk Whether negative numbers are permitted.
26 @retval TRUE String is a valid representation.
27 @retval FALSE String is invalid.
31 InternalIsTimeLikeString (
32 IN CONST CHAR16
*String
,
36 IN CONST BOOLEAN MinusOk
44 // A single minus is ok.
46 if (*String
== L
'-') {
52 // the first char must be numeric.
54 if (!ShellIsDecimalDigitCharacter(*String
)) {
58 // loop through the characters and use the lib function
60 for ( ; String
!= NULL
&& *String
!= CHAR_NULL
; String
++){
61 if (*String
== Char
) {
68 if (!ShellIsDecimalDigitCharacter(*String
)) {
79 Verify that the DateString is valid and if so set that as the current
82 @param[in] DateString The pointer to a string representation of the date.
84 @retval SHELL_INVALID_PARAMETER DateString was NULL.
85 @retval SHELL_INVALID_PARAMETER DateString was mis-formatted.
86 @retval SHELL_SUCCESS The operation was successful.
91 IN CONST CHAR16
*DateString
96 CHAR16
*DateStringCopy
;
100 if (!InternalIsTimeLikeString(DateString
, L
'/', 2, 2, FALSE
)) {
101 return (SHELL_INVALID_PARAMETER
);
104 Status
= gRT
->GetTime(&TheTime
, NULL
);
105 ASSERT_EFI_ERROR(Status
);
107 DateStringCopy
= NULL
;
108 DateStringCopy
= StrnCatGrow(&DateStringCopy
, NULL
, DateString
, 0);
109 if (DateStringCopy
== NULL
) {
110 return (SHELL_OUT_OF_RESOURCES
);
112 Walker
= DateStringCopy
;
114 TheTime
.Month
= 0xFF;
116 TheTime
.Year
= 0xFFFF;
118 Walker1
= StrStr(Walker
, L
"/");
119 if (Walker1
!= NULL
&& *Walker1
== L
'/') {
120 *Walker1
= CHAR_NULL
;
123 TheTime
.Month
= (UINT8
)ShellStrToUintn (Walker
);
124 if (Walker1
!= NULL
) {
125 Walker
= Walker1
+ 1;
127 Walker1
= StrStr(Walker
, L
"/");
128 if (Walker1
!= NULL
&& *Walker1
== L
'/') {
129 *Walker1
= CHAR_NULL
;
131 if (Walker
!= NULL
&& Walker
[0] != CHAR_NULL
) {
132 TheTime
.Day
= (UINT8
)ShellStrToUintn (Walker
);
133 if (Walker1
!= NULL
) {
134 Walker
= Walker1
+ 1;
136 Walker1
= StrStr(Walker
, L
"/");
137 if (Walker1
!= NULL
&& *Walker1
== L
'/') {
138 *Walker1
= CHAR_NULL
;
140 if (Walker
!= NULL
&& Walker
[0] != CHAR_NULL
) {
141 TheTime
.Year
= (UINT16
)ShellStrToUintn (Walker
);
145 if (TheTime
.Year
< 100) {
146 if (TheTime
.Year
>= 98) {
147 TheTime
.Year
= (UINT16
)(1900 + TheTime
.Year
);
149 TheTime
.Year
= (UINT16
)(2000 + TheTime
.Year
);
153 Status
= gRT
->SetTime(&TheTime
);
155 if (!EFI_ERROR(Status
)){
156 return (SHELL_SUCCESS
);
158 return (SHELL_INVALID_PARAMETER
);
162 Function for 'date' command.
164 @param[in] ImageHandle Handle to the Image (NULL if Internal).
165 @param[in] SystemTable Pointer to the System Table (NULL if Internal).
169 ShellCommandRunDate (
170 IN EFI_HANDLE ImageHandle
,
171 IN EFI_SYSTEM_TABLE
*SystemTable
177 CHAR16
*ProblemParam
;
178 SHELL_STATUS ShellStatus
;
180 ShellStatus
= SHELL_SUCCESS
;
184 // initialize the shell lib (we must be in non-auto-init...)
186 Status
= ShellInitialize();
187 ASSERT_EFI_ERROR(Status
);
190 // parse the command line
192 Status
= ShellCommandLineParse (SfoParamList
, &Package
, &ProblemParam
, TRUE
);
193 if (EFI_ERROR(Status
)) {
194 if (Status
== EFI_VOLUME_CORRUPTED
&& ProblemParam
!= NULL
) {
195 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellLevel2HiiHandle
, ProblemParam
);
196 FreePool(ProblemParam
);
197 ShellStatus
= SHELL_INVALID_PARAMETER
;
205 if (ShellCommandLineGetFlag(Package
, L
"-?")) {
207 } else if (ShellCommandLineGetRawValue(Package
, 2) != NULL
) {
208 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellLevel2HiiHandle
);
209 ShellStatus
= SHELL_INVALID_PARAMETER
;
212 // If there are 0 value parameters, then print the current date
213 // else If there are any value paramerers, then print error
215 if (ShellCommandLineGetRawValue(Package
, 1) == NULL
) {
217 // get the current date
219 Status
= gRT
->GetTime(&TheTime
, NULL
);
220 ASSERT_EFI_ERROR(Status
);
223 // ShellPrintEx the date in SFO or regular format
225 if (ShellCommandLineGetFlag(Package
, L
"-sfo")) {
226 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_DATE_SFO_FORMAT
), gShellLevel2HiiHandle
, TheTime
.Month
, TheTime
.Day
, TheTime
.Year
);
228 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_DATE_FORMAT
), gShellLevel2HiiHandle
, TheTime
.Month
, TheTime
.Day
, TheTime
.Year
);
231 if (PcdGet8(PcdShellSupportLevel
) == 2) {
232 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellLevel2HiiHandle
);
233 ShellStatus
= SHELL_INVALID_PARAMETER
;
236 // perform level 3 operation here.
238 ShellStatus
= CheckAndSetDate(ShellCommandLineGetRawValue(Package
, 1));
239 if (ShellStatus
!= SHELL_SUCCESS
) {
240 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellLevel2HiiHandle
, ShellCommandLineGetRawValue(Package
, 1));
241 ShellStatus
= SHELL_INVALID_PARAMETER
;
248 // free the command line package
250 ShellCommandLineFreeVarList (Package
);
255 return (ShellStatus
);
259 // Note "-tz" is invalid for this (non-interactive) version of 'time'.
261 STATIC CONST SHELL_PARAM_ITEM TimeParamList2
[] = {
266 STATIC CONST SHELL_PARAM_ITEM TimeParamList3
[] = {
273 Verify that the TimeString is valid and if so set that as the current
276 @param[in] TimeString The pointer to a string representation of the time.
277 @param[in] Tz The value to set for TimeZone.
278 @param[in] Daylight The value to set for Daylight.
280 @retval SHELL_INVALID_PARAMETER TimeString was NULL.
281 @retval SHELL_INVALID_PARAMETER TimeString was mis-formatted.
282 @retval SHELL_SUCCESS The operation was successful.
287 IN CONST CHAR16
*TimeString
,
289 IN CONST UINT8 Daylight
294 CHAR16
*TimeStringCopy
;
298 if (TimeString
!= NULL
&& !InternalIsTimeLikeString(TimeString
, L
':', 1, 2, FALSE
)) {
299 return (SHELL_INVALID_PARAMETER
);
302 Status
= gRT
->GetTime(&TheTime
, NULL
);
303 ASSERT_EFI_ERROR(Status
);
304 TimeStringCopy
= NULL
;
305 TimeStringCopy
= StrnCatGrow(&TimeStringCopy
, NULL
, TimeString
, 0);
307 if (TimeString
!= NULL
) {
308 Walker1
= TimeStringCopy
;
310 TheTime
.Minute
= 0xFF;
312 Walker2
= StrStr(Walker1
, L
":");
313 if (Walker2
!= NULL
&& *Walker2
== L
':') {
314 *Walker2
= CHAR_NULL
;
316 TheTime
.Hour
= (UINT8
)ShellStrToUintn (Walker1
);
317 if (Walker2
!= NULL
) {
318 Walker1
= Walker2
+ 1;
320 Walker2
= StrStr(Walker1
, L
":");
321 if (Walker2
!= NULL
&& *Walker2
== L
':') {
322 *Walker2
= CHAR_NULL
;
324 if (Walker1
!= NULL
&& Walker1
[0] != CHAR_NULL
) {
325 TheTime
.Minute
= (UINT8
)ShellStrToUintn (Walker1
);
326 if (Walker2
!= NULL
) {
327 Walker1
= Walker2
+ 1;
329 if (Walker1
!= NULL
&& Walker1
[0] != CHAR_NULL
) {
330 TheTime
.Second
= (UINT8
)ShellStrToUintn (Walker1
);
335 FreePool(TimeStringCopy
);
337 if ((Tz
>= -1440 && Tz
<= 1440)||(Tz
== 0x7FF)) {
338 TheTime
.TimeZone
= Tz
;
340 if (Daylight
<= 3 && Daylight
!= 2) {
341 TheTime
.Daylight
= Daylight
;
343 Status
= gRT
->SetTime(&TheTime
);
345 if (!EFI_ERROR(Status
)){
346 return (SHELL_SUCCESS
);
349 return (SHELL_INVALID_PARAMETER
);
353 Function for 'time' command.
355 @param[in] ImageHandle Handle to the Image (NULL if Internal).
356 @param[in] SystemTable Pointer to the System Table (NULL if Internal).
360 ShellCommandRunTime (
361 IN EFI_HANDLE ImageHandle
,
362 IN EFI_SYSTEM_TABLE
*SystemTable
369 CHAR16
*ProblemParam
;
370 SHELL_STATUS ShellStatus
;
373 CONST CHAR16
*TempLocation
;
376 ShellStatus
= SHELL_SUCCESS
;
380 // Initialize variables
385 // initialize the shell lib (we must be in non-auto-init...)
387 Status
= ShellInitialize();
388 ASSERT_EFI_ERROR(Status
);
391 // parse the command line
393 if (PcdGet8(PcdShellSupportLevel
) == 2) {
394 Status
= ShellCommandLineParseEx (TimeParamList2
, &Package
, &ProblemParam
, TRUE
, TRUE
);
396 ASSERT(PcdGet8(PcdShellSupportLevel
) == 3);
397 Status
= ShellCommandLineParseEx (TimeParamList3
, &Package
, &ProblemParam
, TRUE
, TRUE
);
399 if (EFI_ERROR(Status
)) {
400 if (Status
== EFI_VOLUME_CORRUPTED
&& ProblemParam
!= NULL
) {
401 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellLevel2HiiHandle
, ProblemParam
);
402 FreePool(ProblemParam
);
403 ShellStatus
= SHELL_INVALID_PARAMETER
;
411 Status
= gRT
->GetTime(&TheTime
, NULL
);
412 ASSERT_EFI_ERROR(Status
);
413 if (ShellCommandLineGetFlag(Package
, L
"-?")) {
415 } else if (ShellCommandLineGetRawValue(Package
, 2) != NULL
) {
416 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellLevel2HiiHandle
);
417 ShellStatus
= SHELL_INVALID_PARAMETER
;
420 // If there are no parameters, then print the current time
422 if (ShellCommandLineGetRawValue(Package
, 1) == NULL
423 && !ShellCommandLineGetFlag(Package
, L
"-d")
424 && !ShellCommandLineGetFlag(Package
, L
"-tz")) {
426 // ShellPrintEx the current time
428 if (TheTime
.TimeZone
== 2047) {
431 TzMinutes
= (ABS(TheTime
.TimeZone
)) % 60;
438 STRING_TOKEN (STR_TIME_FORMAT
),
439 gShellLevel2HiiHandle
,
443 TheTime
.TimeZone
==2047?L
" ":(TheTime
.TimeZone
> 0?L
"-":L
"+"),
444 TheTime
.TimeZone
==2047?0:(ABS(TheTime
.TimeZone
)) / 60,
447 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_CRLF
), gShellLevel2HiiHandle
);
448 } else if (ShellCommandLineGetFlag(Package
, L
"-d") && ShellCommandLineGetValue(Package
, L
"-d") == NULL
) {
449 if (TheTime
.TimeZone
== 2047) {
452 TzMinutes
= (ABS(TheTime
.TimeZone
)) % 60;
459 STRING_TOKEN (STR_TIME_FORMAT
),
460 gShellLevel2HiiHandle
,
464 TheTime
.TimeZone
==2047?L
" ":(TheTime
.TimeZone
> 0?L
"-":L
"+"),
465 TheTime
.TimeZone
==2047?0:(ABS(TheTime
.TimeZone
)) / 60,
468 switch (TheTime
.Daylight
) {
469 case EFI_TIME_ADJUST_DAYLIGHT
:
470 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_TIME_DST1
), gShellLevel2HiiHandle
);
472 case EFI_TIME_IN_DAYLIGHT
:
473 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_TIME_DST2
), gShellLevel2HiiHandle
);
475 case EFI_TIME_IN_DAYLIGHT
|EFI_TIME_ADJUST_DAYLIGHT
:
476 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_TIME_DST3
), gShellLevel2HiiHandle
);
479 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_UEFI_FUNC_ERROR
), gShellLevel2HiiHandle
, L
"gRT->GetTime", L
"TheTime.Daylight", TheTime
.Daylight
);
482 if (PcdGet8(PcdShellSupportLevel
) == 2) {
483 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellLevel2HiiHandle
);
484 ShellStatus
= SHELL_INVALID_PARAMETER
;
487 // perform level 3 operation here.
489 if ((TempLocation
= ShellCommandLineGetValue(Package
, L
"-tz")) != NULL
) {
490 if (TempLocation
[0] == L
'-') {
491 Tz
= (INT16
)(0 - ShellStrToUintn(++TempLocation
));
493 Tz
= (INT16
)ShellStrToUintn(TempLocation
);
495 if (!(Tz
>= -1440 && Tz
<= 1440) && Tz
!= 2047) {
496 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellLevel2HiiHandle
, L
"-d");
497 ShellStatus
= SHELL_INVALID_PARAMETER
;
501 // intentionally out of bounds value will prevent changing it...
505 TempLocation
= ShellCommandLineGetValue(Package
, L
"-d");
506 if (TempLocation
!= NULL
) {
507 Daylight
= (UINT8
)ShellStrToUintn(TempLocation
);
508 if (Daylight
!= 0 && Daylight
!= 1 && Daylight
!= 3) {
509 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellLevel2HiiHandle
, L
"-d");
510 ShellStatus
= SHELL_INVALID_PARAMETER
;
514 // invalid = will not use
518 if (ShellStatus
== SHELL_SUCCESS
) {
519 ShellStatus
= CheckAndSetTime(ShellCommandLineGetRawValue(Package
, 1), Tz
, Daylight
);
520 if (ShellStatus
!= SHELL_SUCCESS
) {
521 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellLevel2HiiHandle
, ShellCommandLineGetRawValue(Package
, 1));
522 ShellStatus
= SHELL_INVALID_PARAMETER
;
531 // free the command line package
533 ShellCommandLineFreeVarList (Package
);
538 return (ShellStatus
);
543 EFI_STRING_ID StringId
;
546 STATIC CONST SHELL_PARAM_ITEM TimeZoneParamList2
[] = {
551 STATIC CONST SHELL_PARAM_ITEM TimeZoneParamList3
[] = {
558 STATIC CONST TIME_ZONE_ITEM TimeZoneList
[] = {
559 {720, STRING_TOKEN (STR_TIMEZONE_M12
)},
560 {660, STRING_TOKEN (STR_TIMEZONE_M11
)},
561 {600, STRING_TOKEN (STR_TIMEZONE_M10
)},
562 {540, STRING_TOKEN (STR_TIMEZONE_M9
)},
563 {480, STRING_TOKEN (STR_TIMEZONE_M8
)},
564 {420, STRING_TOKEN (STR_TIMEZONE_M7
)},
565 {360, STRING_TOKEN (STR_TIMEZONE_M6
)},
566 {300, STRING_TOKEN (STR_TIMEZONE_M5
)},
567 {270, STRING_TOKEN (STR_TIMEZONE_M430
)},
568 {240, STRING_TOKEN (STR_TIMEZONE_M4
)},
569 {210, STRING_TOKEN (STR_TIMEZONE_M330
)},
570 {180, STRING_TOKEN (STR_TIMEZONE_M3
)},
571 {120, STRING_TOKEN (STR_TIMEZONE_M2
)},
572 {60 , STRING_TOKEN (STR_TIMEZONE_M1
)},
573 {0 , STRING_TOKEN (STR_TIMEZONE_0
)},
574 {-60 , STRING_TOKEN (STR_TIMEZONE_P1
)},
575 {-120 , STRING_TOKEN (STR_TIMEZONE_P2
)},
576 {-180 , STRING_TOKEN (STR_TIMEZONE_P3
)},
577 {-210 , STRING_TOKEN (STR_TIMEZONE_P330
)},
578 {-240 , STRING_TOKEN (STR_TIMEZONE_P4
)},
579 {-270 , STRING_TOKEN (STR_TIMEZONE_P430
)},
580 {-300 , STRING_TOKEN (STR_TIMEZONE_P5
)},
581 {-330 , STRING_TOKEN (STR_TIMEZONE_P530
)},
582 {-345 , STRING_TOKEN (STR_TIMEZONE_P545
)},
583 {-360 , STRING_TOKEN (STR_TIMEZONE_P6
)},
584 {-390 , STRING_TOKEN (STR_TIMEZONE_P630
)},
585 {-420 , STRING_TOKEN (STR_TIMEZONE_P7
)},
586 {-480 , STRING_TOKEN (STR_TIMEZONE_P8
)},
587 {-540 , STRING_TOKEN (STR_TIMEZONE_P9
)},
588 {-570 , STRING_TOKEN (STR_TIMEZONE_P930
)},
589 {-600 , STRING_TOKEN (STR_TIMEZONE_P10
)},
590 {-660 , STRING_TOKEN (STR_TIMEZONE_P11
)},
591 {-720 , STRING_TOKEN (STR_TIMEZONE_P12
)},
592 {-780 , STRING_TOKEN (STR_TIMEZONE_P13
)},
593 {-840 , STRING_TOKEN (STR_TIMEZONE_P14
)}
597 Verify that the TimeZoneString is valid and if so set that as the current
600 @param[in] TimeZoneString The pointer to a string representation of the timezone.
602 @retval SHELL_INVALID_PARAMETER TimeZoneString was NULL.
603 @retval SHELL_INVALID_PARAMETER TimeZoneString was mis-formatted.
604 @retval SHELL_SUCCESS The operation was successful.
608 CheckAndSetTimeZone (
609 IN CONST CHAR16
*TimeZoneString
614 CHAR16
*TimeZoneCopy
;
619 if (TimeZoneString
== NULL
) {
620 return (SHELL_INVALID_PARAMETER
);
623 if (TimeZoneString
!= NULL
&& !InternalIsTimeLikeString(TimeZoneString
, L
':', 1, 1, TRUE
)) {
624 return (SHELL_INVALID_PARAMETER
);
627 Status
= gRT
->GetTime(&TheTime
, NULL
);
628 ASSERT_EFI_ERROR(Status
);
631 TimeZoneCopy
= StrnCatGrow(&TimeZoneCopy
, NULL
, TimeZoneString
, 0);
632 Walker
= TimeZoneCopy
;
633 Walker2
= StrStr(Walker
, L
":");
634 if (Walker2
!= NULL
&& *Walker2
== L
':') {
635 *Walker2
= CHAR_NULL
;
637 if (*Walker
== L
'-') {
638 TheTime
.TimeZone
= (INT16
)((ShellStrToUintn (++Walker
)) * 60);
640 TheTime
.TimeZone
= (INT16
)((ShellStrToUintn (Walker
)) * -60);
642 if (Walker2
!= NULL
) {
643 Walker
= Walker2
+ 1;
645 if (Walker
!= NULL
&& Walker
[0] != CHAR_NULL
) {
646 if (TheTime
.TimeZone
< 0) {
647 TheTime
.TimeZone
= (INT16
)(TheTime
.TimeZone
- (UINT8
)ShellStrToUintn (Walker
));
649 TheTime
.TimeZone
= (INT16
)(TheTime
.TimeZone
+ (UINT8
)ShellStrToUintn (Walker
));
653 Status
= EFI_INVALID_PARAMETER
;
656 ; LoopVar
< sizeof(TimeZoneList
) / sizeof(TimeZoneList
[0])
659 if (TheTime
.TimeZone
== TimeZoneList
[LoopVar
].TimeZone
) {
660 Status
= gRT
->SetTime(&TheTime
);
665 FreePool(TimeZoneCopy
);
667 if (!EFI_ERROR(Status
)){
668 return (SHELL_SUCCESS
);
670 return (SHELL_INVALID_PARAMETER
);
675 Function for 'timezone' command.
677 @param[in] ImageHandle Handle to the Image (NULL if Internal).
678 @param[in] SystemTable Pointer to the System Table (NULL if Internal).
682 ShellCommandRunTimeZone (
683 IN EFI_HANDLE ImageHandle
,
684 IN EFI_SYSTEM_TABLE
*SystemTable
692 CHAR16
*ProblemParam
;
693 SHELL_STATUS ShellStatus
;
699 ShellStatus
= SHELL_SUCCESS
;
703 // initialize the shell lib (we must be in non-auto-init...)
705 Status
= ShellInitialize();
706 ASSERT_EFI_ERROR(Status
);
709 // parse the command line
711 if (PcdGet8(PcdShellSupportLevel
) == 2) {
712 Status
= ShellCommandLineParse (TimeZoneParamList2
, &Package
, &ProblemParam
, FALSE
);
714 ASSERT(PcdGet8(PcdShellSupportLevel
) == 3);
715 Status
= ShellCommandLineParseEx (TimeZoneParamList3
, &Package
, &ProblemParam
, FALSE
, TRUE
);
717 if (EFI_ERROR(Status
)) {
718 if (Status
== EFI_VOLUME_CORRUPTED
&& ProblemParam
!= NULL
) {
719 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellLevel2HiiHandle
, ProblemParam
);
720 FreePool(ProblemParam
);
721 ShellStatus
= SHELL_INVALID_PARAMETER
;
729 if (ShellCommandLineGetCount(Package
) > 1) {
730 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellLevel2HiiHandle
);
731 ShellStatus
= SHELL_INVALID_PARAMETER
;
732 } else if (ShellCommandLineGetFlag(Package
, L
"-?")) {
734 } else if (ShellCommandLineGetFlag(Package
, L
"-s")) {
735 if ((ShellCommandLineGetFlag(Package
, L
"-l")) || (ShellCommandLineGetFlag(Package
, L
"-f"))) {
736 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellLevel2HiiHandle
, L
"-l or -f");
737 ShellStatus
= SHELL_INVALID_PARAMETER
;
739 ASSERT(PcdGet8(PcdShellSupportLevel
) == 3);
740 if (ShellCommandLineGetValue(Package
, L
"-s") == NULL
) {
741 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_NO_VALUE
), gShellLevel2HiiHandle
, L
"-s");
742 ShellStatus
= SHELL_INVALID_PARAMETER
;
747 ShellStatus
= CheckAndSetTimeZone(ShellCommandLineGetValue(Package
, L
"-s"));
748 if (ShellStatus
!= SHELL_SUCCESS
) {
749 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellLevel2HiiHandle
, ShellCommandLineGetValue(Package
, L
"-s"));
750 ShellStatus
= SHELL_INVALID_PARAMETER
;
754 } else if (ShellCommandLineGetFlag(Package
, L
"-l")) {
756 // Print a list of all time zones
759 ; LoopVar
< sizeof(TimeZoneList
) / sizeof(TimeZoneList
[0])
762 ShellPrintHiiEx (-1, -1, NULL
, TimeZoneList
[LoopVar
].StringId
, gShellLevel2HiiHandle
);
766 // Get Current Time Zone Info
768 Status
= gRT
->GetTime(&TheTime
, NULL
);
769 ASSERT_EFI_ERROR(Status
);
771 if (TheTime
.TimeZone
!= 2047) {
774 ; LoopVar
< sizeof(TimeZoneList
) / sizeof(TimeZoneList
[0])
777 if (TheTime
.TimeZone
== TimeZoneList
[LoopVar
].TimeZone
) {
778 if (ShellCommandLineGetFlag(Package
, L
"-f")) {
780 // Print all info about current time zone
782 ShellPrintHiiEx (-1, -1, NULL
, TimeZoneList
[LoopVar
].StringId
, gShellLevel2HiiHandle
);
785 // Print basic info only
787 if (TheTime
.TimeZone
== 2047) {
790 TzMinutes
= (ABS(TheTime
.TimeZone
)) % 60;
797 STRING_TOKEN(STR_TIMEZONE_SIMPLE
),
798 gShellLevel2HiiHandle
,
799 TheTime
.TimeZone
==2047?0:(TheTime
.TimeZone
> 0?L
"-":L
"+"),
800 TheTime
.TimeZone
==2047?0:(ABS(TheTime
.TimeZone
)) / 60,
809 // Print basic info only
811 if (TheTime
.TimeZone
== 2047) {
814 TzMinutes
= (ABS(TheTime
.TimeZone
)) % 60;
820 STRING_TOKEN(STR_TIMEZONE_SIMPLE
),
821 gShellLevel2HiiHandle
,
822 TheTime
.TimeZone
==2047?0:(TheTime
.TimeZone
> 0?L
"-":L
"+"),
823 TheTime
.TimeZone
==2047?0:(ABS(TheTime
.TimeZone
)) / 60,
825 if (ShellCommandLineGetFlag(Package
, L
"-f")) {
826 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN(STR_TIMEZONE_NI
), gShellLevel2HiiHandle
);
831 // TimeZone was 2047 (unknown) from GetTime()
838 // free the command line package
840 ShellCommandLineFreeVarList (Package
);
842 return (ShellStatus
);