2 Main file for Mode shell Debug1 function.
4 (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
5 Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #include "UefiShellDebug1CommandsLib.h"
13 Function for 'mode' command.
15 @param[in] ImageHandle Handle to the Image (NULL if Internal).
16 @param[in] SystemTable Pointer to the System Table (NULL if Internal).
21 IN EFI_HANDLE ImageHandle
,
22 IN EFI_SYSTEM_TABLE
*SystemTable
28 SHELL_STATUS ShellStatus
;
37 ShellStatus
= SHELL_SUCCESS
;
41 // initialize the shell lib (we must be in non-auto-init...)
43 Status
= ShellInitialize ();
44 ASSERT_EFI_ERROR (Status
);
46 Status
= CommandInit ();
47 ASSERT_EFI_ERROR (Status
);
50 // parse the command line
52 Status
= ShellCommandLineParse (EmptyParamList
, &Package
, &ProblemParam
, TRUE
);
53 if (EFI_ERROR (Status
)) {
54 if ((Status
== EFI_VOLUME_CORRUPTED
) && (ProblemParam
!= NULL
)) {
55 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellDebug1HiiHandle
, L
"mode", ProblemParam
);
56 FreePool (ProblemParam
);
57 ShellStatus
= SHELL_INVALID_PARAMETER
;
62 if (ShellCommandLineGetCount (Package
) > 3) {
63 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellDebug1HiiHandle
, L
"mode");
64 ShellStatus
= SHELL_INVALID_PARAMETER
;
65 } else if (ShellCommandLineGetCount (Package
) == 2) {
66 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_FEW
), gShellDebug1HiiHandle
, L
"mode");
67 ShellStatus
= SHELL_INVALID_PARAMETER
;
68 } else if (ShellCommandLineGetCount (Package
) == 3) {
69 Temp
= ShellCommandLineGetRawValue (Package
, 1);
70 if (!ShellIsHexOrDecimalNumber (Temp
, FALSE
, FALSE
)) {
71 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_GEN_PARAM_INV
), gShellDebug1HiiHandle
, L
"mode", Temp
);
72 ShellStatus
= SHELL_INVALID_PARAMETER
;
75 NewCol
= ShellStrToUintn (Temp
);
76 Temp
= ShellCommandLineGetRawValue (Package
, 2);
77 if (!ShellIsHexOrDecimalNumber (Temp
, FALSE
, FALSE
)) {
78 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_GEN_PARAM_INV
), gShellDebug1HiiHandle
, L
"mode", Temp
);
79 ShellStatus
= SHELL_INVALID_PARAMETER
;
82 NewRow
= ShellStrToUintn (Temp
);
84 for (LoopVar
= 0, Done
= FALSE
; LoopVar
< gST
->ConOut
->Mode
->MaxMode
&& ShellStatus
== SHELL_SUCCESS
; LoopVar
++) {
85 Status
= gST
->ConOut
->QueryMode (gST
->ConOut
, LoopVar
, &Col
, &Row
);
86 if (EFI_ERROR (Status
)) {
90 if ((Col
== NewCol
) && (Row
== NewRow
)) {
91 Status
= gST
->ConOut
->SetMode (gST
->ConOut
, LoopVar
);
92 if (EFI_ERROR (Status
)) {
93 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_MODE_SET_FAIL
), gShellDebug1HiiHandle
, L
"mode");
94 ShellStatus
= SHELL_DEVICE_ERROR
;
105 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_MODE_NO_MATCH
), gShellDebug1HiiHandle
, L
"mode");
106 ShellStatus
= SHELL_INVALID_PARAMETER
;
108 } else if (ShellCommandLineGetCount (Package
) == 1) {
112 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_MODE_LIST_HEAD
), gShellDebug1HiiHandle
);
113 for (LoopVar
= 0, Done
= FALSE
; LoopVar
< gST
->ConOut
->Mode
->MaxMode
&& ShellStatus
== SHELL_SUCCESS
; LoopVar
++) {
114 Status
= gST
->ConOut
->QueryMode (gST
->ConOut
, LoopVar
, &Col
, &Row
);
115 if (EFI_ERROR (Status
)) {
119 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_MODE_LIST_ITEM
), gShellDebug1HiiHandle
, Col
, Row
, LoopVar
== gST
->ConOut
->Mode
->Mode
? L
'*' : L
' ');
123 ShellCommandLineFreeVarList (Package
);
126 return (ShellStatus
);