1 /** @file
2   Main file for NULL named library for level 2 shell command functions.
3 
4   these functions are:
5   attrib,   cd,   cp,   date*,  time*,  rm,   reset,
6   load,     ls,   map,  mkdir,  mv,     parse,  set,  timezone*
7 
8 
9   * functions are non-interactive only
10 
11 
12   Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>
13   This program and the accompanying materials
14   are licensed and made available under the terms and conditions of the BSD License
15   which accompanies this distribution.  The full text of the license may be found at
16   http://opensource.org/licenses/bsd-license.php
17 
18   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
19   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
20 
21 **/
22 
23 #ifndef _UEFI_SHELL_LEVEL2_COMMANDS_LIB_H_
24 #define _UEFI_SHELL_LEVEL2_COMMANDS_LIB_H_
25 
26 #include <Uefi.h>
27 #include <ShellBase.h>
28 
29 #include <Guid/ShellLibHiiGuid.h>
30 
31 #include <Protocol/EfiShell.h>
32 #include <Protocol/EfiShellParameters.h>
33 #include <Protocol/DevicePath.h>
34 #include <Protocol/LoadedImage.h>
35 #include <Protocol/UnicodeCollation.h>
36 
37 #include <Library/BaseLib.h>
38 #include <Library/BaseMemoryLib.h>
39 #include <Library/DebugLib.h>
40 #include <Library/MemoryAllocationLib.h>
41 #include <Library/PcdLib.h>
42 #include <Library/ShellCommandLib.h>
43 #include <Library/ShellLib.h>
44 #include <Library/UefiLib.h>
45 #include <Library/UefiRuntimeServicesTableLib.h>
46 #include <Library/UefiBootServicesTableLib.h>
47 #include <Library/HiiLib.h>
48 #include <Library/SortLib.h>
49 #include <Library/FileHandleLib.h>
50 #include <Library/PathLib.h>
51 
52 extern CONST  CHAR16                            mFileName[];
53 extern        EFI_HANDLE                        gShellLevel2HiiHandle;
54 
55 /**
56   Function for 'attrib' command.
57 
58   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
59   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
60 **/
61 SHELL_STATUS
62 EFIAPI
63 ShellCommandRunAttrib (
64   IN EFI_HANDLE        ImageHandle,
65   IN EFI_SYSTEM_TABLE  *SystemTable
66   );
67 
68 /**
69   Function for 'date' command.
70 
71   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
72   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
73 **/
74 SHELL_STATUS
75 EFIAPI
76 ShellCommandRunDate (
77   IN EFI_HANDLE        ImageHandle,
78   IN EFI_SYSTEM_TABLE  *SystemTable
79   );
80 
81 /**
82   Function for 'time' command.
83 
84   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
85   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
86 **/
87 SHELL_STATUS
88 EFIAPI
89 ShellCommandRunTime (
90   IN EFI_HANDLE        ImageHandle,
91   IN EFI_SYSTEM_TABLE  *SystemTable
92   );
93 
94 /**
95   Function for 'load' command.
96 
97   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
98   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
99 **/
100 SHELL_STATUS
101 EFIAPI
102 ShellCommandRunLoad (
103   IN EFI_HANDLE        ImageHandle,
104   IN EFI_SYSTEM_TABLE  *SystemTable
105   );
106 
107 /**
108   Function for 'ls' command.
109 
110   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
111   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
112 **/
113 SHELL_STATUS
114 EFIAPI
115 ShellCommandRunLs (
116   IN EFI_HANDLE        ImageHandle,
117   IN EFI_SYSTEM_TABLE  *SystemTable
118   );
119 
120 /**
121   Function for 'map' command.
122 
123   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
124   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
125 **/
126 SHELL_STATUS
127 EFIAPI
128 ShellCommandRunMap (
129   IN EFI_HANDLE        ImageHandle,
130   IN EFI_SYSTEM_TABLE  *SystemTable
131   );
132 
133 /**
134   Function for 'reset' command.
135 
136   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
137   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
138 **/
139 SHELL_STATUS
140 EFIAPI
141 ShellCommandRunReset (
142   IN EFI_HANDLE        ImageHandle,
143   IN EFI_SYSTEM_TABLE  *SystemTable
144   );
145 
146 /**
147   Function for 'timezone' command.
148 
149   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
150   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
151 **/
152 SHELL_STATUS
153 EFIAPI
154 ShellCommandRunTimeZone (
155   IN EFI_HANDLE        ImageHandle,
156   IN EFI_SYSTEM_TABLE  *SystemTable
157   );
158 
159 /**
160   Function for 'set' command.
161 
162   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
163   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
164 **/
165 SHELL_STATUS
166 EFIAPI
167 ShellCommandRunSet (
168   IN EFI_HANDLE        ImageHandle,
169   IN EFI_SYSTEM_TABLE  *SystemTable
170   );
171 
172 /**
173   Function for 'mkdir' command.
174 
175   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
176   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
177 **/
178 SHELL_STATUS
179 EFIAPI
180 ShellCommandRunMkDir (
181   IN EFI_HANDLE        ImageHandle,
182   IN EFI_SYSTEM_TABLE  *SystemTable
183   );
184 
185 /**
186   Function for 'cd' command.
187 
188   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
189   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
190 **/
191 SHELL_STATUS
192 EFIAPI
193 ShellCommandRunCd (
194   IN EFI_HANDLE        ImageHandle,
195   IN EFI_SYSTEM_TABLE  *SystemTable
196   );
197 
198 /**
199   Function for 'cp' command.
200 
201   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
202   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
203 **/
204 SHELL_STATUS
205 EFIAPI
206 ShellCommandRunCp (
207   IN EFI_HANDLE        ImageHandle,
208   IN EFI_SYSTEM_TABLE  *SystemTable
209   );
210 
211 /**
212   Function for 'parse' command.
213 
214   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
215   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
216 **/
217 SHELL_STATUS
218 EFIAPI
219 ShellCommandRunParse (
220   IN EFI_HANDLE        ImageHandle,
221   IN EFI_SYSTEM_TABLE  *SystemTable
222   );
223 
224 /**
225   Function for 'rm' command.
226 
227   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
228   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
229 **/
230 SHELL_STATUS
231 EFIAPI
232 ShellCommandRunRm (
233   IN EFI_HANDLE        ImageHandle,
234   IN EFI_SYSTEM_TABLE  *SystemTable
235   );
236 
237 /**
238   Function for 'mv' command.
239 
240   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
241   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
242 **/
243 SHELL_STATUS
244 EFIAPI
245 ShellCommandRunMv (
246   IN EFI_HANDLE        ImageHandle,
247   IN EFI_SYSTEM_TABLE  *SystemTable
248   );
249 
250 /**
251   returns a fully qualified directory (contains a map drive at the begining)
252   path from a unknown directory path.
253 
254   If Path is already fully qualified this will return a duplicat otherwise this
255   will use get the current directory and use that to build the fully qualified
256   version.
257 
258   if the return value is not NULL it must be caller freed.
259 
260   @param[in] Path         The unknown Path Value
261 
262   @retval NULL            A memory allocation failed
263   @retval NULL            a fully qualified path could not be discovered.
264   @retval other           pointer to a fuly qualified path.
265 **/
266 CHAR16*
267 EFIAPI
268 GetFullyQualifiedPath(
269   IN CONST CHAR16* Path
270   );
271 
272 /**
273   Function to verify all intermediate directories in the path.
274 
275   @param[in] Path       The pointer to the path to fix.
276 
277   @retval EFI_SUCCESS   The operation was successful.
278 **/
279 EFI_STATUS
280 EFIAPI
281 VerifyIntermediateDirectories (
282   IN CONST CHAR16 *Path
283   );
284 
285 /**
286   CaseInsensitive length limited string comparison.
287 
288   @param[in] Source   Pointer to first string.
289   @param[in] Target   Pointer to second string.
290   @param[in] Count    Number of characters to compare.
291 
292   @retval 0   The strings are the same.
293   @return     non-zero if the strings are different.
294 **/
295 CONST CHAR16*
296 EFIAPI
297 StrniCmp(
298   IN CONST CHAR16 *Source,
299   IN CONST CHAR16 *Target,
300   IN CONST UINTN  Count
301   );
302 
303 /**
304   Cleans off all the quotes in the string.
305 
306   @param[in]     OriginalString   pointer to the string to be cleaned.
307   @param[out]   CleanString      The new string with all quotes removed.
308                                                   Memory allocated in the function and free
309                                                   by caller.
310 
311   @retval EFI_SUCCESS   The operation was successful.
312 **/
313 EFI_STATUS
314 EFIAPI
315 ShellLevel2StripQuotes (
316   IN  CONST CHAR16     *OriginalString,
317   OUT CHAR16           **CleanString
318   );
319 
320 /**
321   Function for 'Vol' command.
322 
323   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
324   @param[in] SystemTable  Pointer to the System Table (NULL if Internal).
325 **/
326 SHELL_STATUS
327 EFIAPI
328 ShellCommandRunVol (
329   IN EFI_HANDLE        ImageHandle,
330   IN EFI_SYSTEM_TABLE  *SystemTable
331   );
332 
333 #endif
334 
335