]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellDebug1CommandsLib/Mode.c
Add "Debug1" profile (all but Edit and HexEdit commands)
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / Mode.c
CommitLineData
5d73d92f 1/** @file\r
2 Main file for Mode shell Debug1 function.\r
3\r
4 Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
5 This program and the acModeanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which acModeanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#include "UefiShellDebug1CommandsLib.h"\r
16\r
17SHELL_STATUS\r
18EFIAPI\r
19ShellCommandRunMode (\r
20 IN EFI_HANDLE ImageHandle,\r
21 IN EFI_SYSTEM_TABLE *SystemTable\r
22 )\r
23{\r
24 EFI_STATUS Status;\r
25 LIST_ENTRY *Package;\r
26 CHAR16 *ProblemParam;\r
27 SHELL_STATUS ShellStatus;\r
28 UINTN NewCol;\r
29 UINTN NewRow;\r
30 UINTN Col;\r
31 UINTN Row;\r
32 CONST CHAR16 *Temp;\r
33 BOOLEAN Done;\r
34 INT32 LoopVar;\r
35\r
36 ShellStatus = SHELL_SUCCESS;\r
37 Status = EFI_SUCCESS;\r
38\r
39 //\r
40 // initialize the shell lib (we must be in non-auto-init...)\r
41 //\r
42 Status = ShellInitialize();\r
43 ASSERT_EFI_ERROR(Status);\r
44\r
45 Status = CommandInit();\r
46 ASSERT_EFI_ERROR(Status);\r
47\r
48 //\r
49 // parse the command line\r
50 //\r
51 Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE);\r
52 if (EFI_ERROR(Status)) {\r
53 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
54 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, ProblemParam);\r
55 FreePool(ProblemParam);\r
56 ShellStatus = SHELL_INVALID_PARAMETER;\r
57 } else {\r
58 ASSERT(FALSE);\r
59 }\r
60 } else {\r
61 if (ShellCommandLineGetCount(Package) > 3) {\r
62 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
63 ShellStatus = SHELL_INVALID_PARAMETER;\r
64 } else if (ShellCommandLineGetCount(Package) == 2) {\r
65 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
66 ShellStatus = SHELL_INVALID_PARAMETER;\r
67 } else if (ShellCommandLineGetCount(Package) == 3) {\r
68 Temp = ShellCommandLineGetRawValue(Package, 1);\r
69 if (!ShellIsHexOrDecimalNumber(Temp, FALSE, FALSE)) {\r
70 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
71 ShellStatus = SHELL_INVALID_PARAMETER;\r
72 }\r
73 NewCol = ShellStrToUintn(Temp);\r
74 Temp = ShellCommandLineGetRawValue(Package, 2);\r
75 if (!ShellIsHexOrDecimalNumber(Temp, FALSE, FALSE)) {\r
76 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
77 ShellStatus = SHELL_INVALID_PARAMETER;\r
78 }\r
79 NewRow = ShellStrToUintn(Temp);\r
80\r
81 for (LoopVar = 0, Done = FALSE; LoopVar < gST->ConOut->Mode->MaxMode && ShellStatus == SHELL_SUCCESS ; LoopVar++) {\r
82 Status = gST->ConOut->QueryMode(gST->ConOut, LoopVar, &Col, &Row);\r
83 if (EFI_ERROR(Status)) {\r
84 continue;\r
85 }\r
86 if (Col == NewCol && Row == NewRow) {\r
87 Status = gST->ConOut->SetMode(gST->ConOut, LoopVar);\r
88 if (EFI_ERROR(Status)) {\r
89 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MODE_SET_FAIL), gShellDebug1HiiHandle, Status);\r
90 ShellStatus = SHELL_DEVICE_ERROR;\r
91 } else {\r
92 // worked fine...\r
93 Done = TRUE;\r
94 }\r
95 break;\r
96 }\r
97 }\r
98\r
99 if (!Done) {\r
100 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MODE_NO_MATCH), gShellDebug1HiiHandle);\r
101 ShellStatus = SHELL_INVALID_PARAMETER;\r
102 }\r
103\r
104 } else if (ShellCommandLineGetCount(Package) == 1) {\r
105 //\r
106 // print out valid\r
107 //\r
108 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MODE_LIST_HEAD), gShellDebug1HiiHandle);\r
109 for (LoopVar = 0, Done = FALSE; LoopVar < gST->ConOut->Mode->MaxMode && ShellStatus == SHELL_SUCCESS ; LoopVar++) {\r
110 Status = gST->ConOut->QueryMode(gST->ConOut, LoopVar, &Col, &Row);\r
111 if (EFI_ERROR(Status)) {\r
112 continue;\r
113 }\r
114 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MODE_LIST_ITEM), gShellDebug1HiiHandle, Col, Row, LoopVar == gST->ConOut->Mode->Mode?L'*':L' ');\r
115 }\r
116 }\r
117 ShellCommandLineFreeVarList (Package);\r
118 }\r
119\r
120 return (ShellStatus);\r
121}\r