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
;
74 NewCol
= ShellStrToUintn(Temp
);
75 Temp
= ShellCommandLineGetRawValue(Package
, 2);
76 if (!ShellIsHexOrDecimalNumber(Temp
, FALSE
, FALSE
)) {
77 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PARAM_INV
), gShellDebug1HiiHandle
, L
"mode", Temp
);
78 ShellStatus
= SHELL_INVALID_PARAMETER
;
80 NewRow
= ShellStrToUintn(Temp
);
82 for (LoopVar
= 0, Done
= FALSE
; LoopVar
< gST
->ConOut
->Mode
->MaxMode
&& ShellStatus
== SHELL_SUCCESS
; LoopVar
++) {
83 Status
= gST
->ConOut
->QueryMode(gST
->ConOut
, LoopVar
, &Col
, &Row
);
84 if (EFI_ERROR(Status
)) {
87 if (Col
== NewCol
&& Row
== NewRow
) {
88 Status
= gST
->ConOut
->SetMode(gST
->ConOut
, LoopVar
);
89 if (EFI_ERROR(Status
)) {
90 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MODE_SET_FAIL
), gShellDebug1HiiHandle
, L
"mode");
91 ShellStatus
= SHELL_DEVICE_ERROR
;
101 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MODE_NO_MATCH
), gShellDebug1HiiHandle
, L
"mode");
102 ShellStatus
= SHELL_INVALID_PARAMETER
;
105 } else if (ShellCommandLineGetCount(Package
) == 1) {
109 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MODE_LIST_HEAD
), gShellDebug1HiiHandle
);
110 for (LoopVar
= 0, Done
= FALSE
; LoopVar
< gST
->ConOut
->Mode
->MaxMode
&& ShellStatus
== SHELL_SUCCESS
; LoopVar
++) {
111 Status
= gST
->ConOut
->QueryMode(gST
->ConOut
, LoopVar
, &Col
, &Row
);
112 if (EFI_ERROR(Status
)) {
115 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MODE_LIST_ITEM
), gShellDebug1HiiHandle
, Col
, Row
, LoopVar
== gST
->ConOut
->Mode
->Mode
?L
'*':L
' ');
118 ShellCommandLineFreeVarList (Package
);
121 return (ShellStatus
);