2 This is a simple shell application
4 This should be executed with "/Param2 Val1" and "/Param1" as the 2 command line options!
6 Copyright (c) 2008-2009, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 #include <Library/UefiApplicationEntryPoint.h>
19 #include <Library/UefiLib.h>
20 #include <Library/ShellLib.h>
21 #include <Library/DebugLib.h>
22 #include <Library/MemoryAllocationLib.h>
24 SHELL_PARAM_ITEM ParamList
[] = {
25 {L
"/Param1", TypeFlag
},
26 {L
"/Param2", TypeValue
},
27 {L
"/Param3", TypeDoubleValue
},
28 {L
"/Param4", TypeMaxValue
},
32 as the real entry point for the application.
34 @param[in] ImageHandle The firmware allocated handle for the EFI image.
35 @param[in] SystemTable A pointer to the EFI System Table.
37 @retval EFI_SUCCESS The entry point is executed successfully.
38 @retval other Some error occurs when executing this entry point.
44 IN EFI_HANDLE ImageHandle
,
45 IN EFI_SYSTEM_TABLE
*SystemTable
48 EFI_FILE_HANDLE FileHandle
;
54 EFI_FILE_INFO
*pFileInfo
;
57 EFI_SHELL_FILE_INFO
*pShellFileInfo
;
59 // CONST CHAR16 *Tester;
62 StrCpy(FileName
, L
"testfile.txt");
67 pShellFileInfo
= NULL
;
70 // command line param functions
71 Status
= ShellCommandLineParse(ParamList
, &List
, NULL
, FALSE
);
72 // if you put an invalid parameter you SHOULD hit this assert.
73 ASSERT_EFI_ERROR(Status
);
75 ASSERT(ShellCommandLineGetFlag(List
, L
"/Param5") == FALSE
);
76 ASSERT(ShellCommandLineGetFlag(List
, L
"/Param1") != FALSE
);
77 ASSERT(StrCmp(ShellCommandLineGetValue(List
, L
"/Param2"), L
"Val1")==0);
78 ASSERT(StrCmp(ShellCommandLineGetRawValue(List
, 0), L
"SimpleApplication.efi")==0);
79 // Tester = ShellCommandLineGetValue(List, L"/Param3");
80 // Tester = ShellCommandLineGetValue(List, L"/Param4");
82 ShellCommandLineFreeVarList(List
);
84 Print(L
"param checking skipped.\r\n");
87 // return (EFI_SUCCESS);
90 ASSERT(ShellGetExecutionBreakFlag() == FALSE
);
91 ASSERT(StrCmp(ShellGetCurrentDir(NULL
), L
"f10:\\") == 0);
92 Print(L
"execution break and get cur dir - pass\r\n");
94 ShellSetPageBreakMode(TRUE
);
96 Status
= ShellOpenFileByName(FileName
,
98 EFI_FILE_MODE_CREATE
|EFI_FILE_MODE_READ
|EFI_FILE_MODE_WRITE
,
101 ASSERT_EFI_ERROR(Status
);
103 BufferSize
= StrSize(FileName
);
104 Status
= ShellWriteFile(FileHandle
, &BufferSize
, FileName
);
105 ASSERT_EFI_ERROR(Status
);
106 Status
= ShellGetFilePosition(FileHandle
, &Position
);
107 ASSERT_EFI_ERROR(Status
);
108 ASSERT(Position
== 0x1A);
109 Status
= ShellSetFilePosition(FileHandle
, 0);
110 ASSERT_EFI_ERROR(Status
);
111 BufferSize
= sizeof(Buffer
) * sizeof(Buffer
[0]);
112 Status
= ShellReadFile(FileHandle
, &BufferSize
, Buffer
);
113 ASSERT_EFI_ERROR(Status
);
114 ASSERT(BufferSize
== 0x1A);
115 ASSERT(StrCmp((CHAR16
*)Buffer
, FileName
) == 0);
116 pFileInfo
= ShellGetFileInfo(FileHandle
);
117 ASSERT(pFileInfo
!= NULL
);
118 ASSERT(StrCmp(pFileInfo
->FileName
, FileName
) == 0);
119 ASSERT(pFileInfo
->FileSize
== 0x1A);
122 Status
= ShellCloseFile(&FileHandle
);
123 ASSERT_EFI_ERROR(Status
);
124 Print(L
"read, write, create, getinfo - pass\r\n");
126 Status
= ShellOpenFileByName(FileName
,
128 EFI_FILE_MODE_CREATE
|EFI_FILE_MODE_READ
|EFI_FILE_MODE_WRITE
,
131 ASSERT_EFI_ERROR(Status
);
132 pFileInfo
= ShellGetFileInfo(FileHandle
);
133 ASSERT(pFileInfo
!= NULL
);
134 pFileInfo
->FileSize
= 0x20;
135 Status
= ShellSetFileInfo(FileHandle
, pFileInfo
);
138 ASSERT_EFI_ERROR(Status
);
139 pFileInfo
= ShellGetFileInfo(FileHandle
);
140 ASSERT(pFileInfo
!= NULL
);
141 ASSERT(StrCmp(pFileInfo
->FileName
, FileName
) == 0);
142 ASSERT(pFileInfo
->PhysicalSize
== 0x20);
143 ASSERT(pFileInfo
->FileSize
== 0x20);
144 ASSERT((pFileInfo
->Attribute
&EFI_FILE_DIRECTORY
)==0);
146 Status
= ShellGetFileSize(FileHandle
, &Size
);
147 ASSERT(Size
== 0x20);
148 ASSERT_EFI_ERROR(Status
);
149 Status
= ShellCloseFile(&FileHandle
);
150 ASSERT_EFI_ERROR(Status
);
151 Print(L
"setinfo and change size, getsize - pass\r\n");
153 Status
= ShellOpenFileByName(FileName
,
155 EFI_FILE_MODE_CREATE
|EFI_FILE_MODE_READ
|EFI_FILE_MODE_WRITE
,
158 ASSERT_EFI_ERROR(Status
);
160 pFileInfo
= ShellGetFileInfo(FileHandle
);
161 ASSERT(pFileInfo
!= NULL
);
162 ASSERT(StrCmp(pFileInfo
->FileName
, FileName
) == 0);
163 ASSERT(pFileInfo
->PhysicalSize
== 0x20);
164 ASSERT(pFileInfo
->FileSize
== 0x20);
165 ASSERT((pFileInfo
->Attribute
&EFI_FILE_DIRECTORY
)==0);
168 Status
= ShellDeleteFile(&FileHandle
);
169 ASSERT_EFI_ERROR(Status
);
170 Print(L
"reopen file - pass\r\n");
172 Status
= ShellOpenFileByName(FileName
,
174 EFI_FILE_MODE_CREATE
|EFI_FILE_MODE_READ
|EFI_FILE_MODE_WRITE
,
177 ASSERT_EFI_ERROR(Status
);
178 pFileInfo
= ShellGetFileInfo(FileHandle
);
179 ASSERT(pFileInfo
!= NULL
);
180 ASSERT(StrCmp(pFileInfo
->FileName
, FileName
) == 0);
181 ASSERT(pFileInfo
->PhysicalSize
== 0x0);
182 ASSERT(pFileInfo
->FileSize
== 0x0);
183 ASSERT((pFileInfo
->Attribute
&EFI_FILE_DIRECTORY
)==0);
185 Status
= ShellDeleteFile(&FileHandle
);
186 ASSERT_EFI_ERROR(Status
);
187 Print(L
"size of empty - pass\r\n");
189 Status
= ShellOpenFileByName(FileName
,
191 EFI_FILE_MODE_READ
|EFI_FILE_MODE_WRITE
,
194 ASSERT(Status
== EFI_NOT_FOUND
);
195 ASSERT(FileHandle
== NULL
);
197 Status
= ShellCreateDirectory(FileName
, &FileHandle
);
198 ASSERT_EFI_ERROR(Status
);
199 ASSERT(FileHandle
!= NULL
);
200 pFileInfo
= ShellGetFileInfo(FileHandle
);
201 ASSERT(pFileInfo
!= NULL
);
202 ASSERT(StrCmp(pFileInfo
->FileName
, FileName
) == 0);
203 ASSERT(pFileInfo
->Attribute
&EFI_FILE_DIRECTORY
);
204 Status
= ShellDeleteFile(&FileHandle
);
205 ASSERT_EFI_ERROR(Status
);
206 Print(L
"Directory create - pass\r\n");
208 // FindFirst and FindNext
209 StrCpy(FileName
, L
"testDir");
210 Status
= ShellCreateDirectory(FileName
, &FileHandle
);
211 Status
= ShellCloseFile(&FileHandle
);
212 StrCat(FileName
, L
"\\File.txt");
213 Status
= ShellOpenFileByName(FileName
,
215 EFI_FILE_MODE_CREATE
|EFI_FILE_MODE_READ
|EFI_FILE_MODE_WRITE
,
218 ASSERT_EFI_ERROR(Status
);
219 Status
= ShellCloseFile(&FileHandle
);
220 StrCpy(FileName
, L
"testDir");
221 Status
= ShellOpenFileByName(FileName
,
223 EFI_FILE_MODE_CREATE
|EFI_FILE_MODE_READ
|EFI_FILE_MODE_WRITE
,
226 ASSERT_EFI_ERROR(Status
);
227 Status
= ShellFindFirstFile(FileHandle
, &pFileInfo
);
228 ASSERT_EFI_ERROR(Status
);
229 Status
= ShellFindNextFile(FileHandle
, pFileInfo
, &NoFile
);
230 ASSERT_EFI_ERROR(Status
);
231 ASSERT(NoFile
== FALSE
);
232 Status
= ShellFindNextFile(FileHandle
, pFileInfo
, &NoFile
);
233 ASSERT_EFI_ERROR(Status
);
234 ASSERT(NoFile
== FALSE
);
235 Status
= ShellFindNextFile(FileHandle
, pFileInfo
, &NoFile
);
236 ASSERT_EFI_ERROR(Status
);
237 ///@todo - why is NoFile never set? limitation of NT32 file system?
238 Status
= ShellDeleteFile(&FileHandle
);
239 ASSERT(Status
== RETURN_WARN_DELETE_FAILURE
);
240 Print(L
"FindFirst - pass\r\n");
241 Print(L
"FindNext - Verify with real EFI system. Cant verify NoFile under NT32\r\n");
243 // open and close meta arg
244 Status
= ShellOpenFileMetaArg(L
"testDir\\*.*", EFI_FILE_MODE_READ
, &pShellFileInfo
);
245 ASSERT_EFI_ERROR(Status
);
246 ASSERT(pShellFileInfo
->Status
== 0);
247 ASSERT(StrCmp(pShellFileInfo
->FileName
, L
"File.txt") == 0);
248 ASSERT(pShellFileInfo
->Handle
);
249 ASSERT(pShellFileInfo
->Info
);
250 ASSERT(pShellFileInfo
->Info
->FileSize
== 0);
251 ASSERT(StrCmp(pShellFileInfo
->Info
->FileName
, L
"File.txt") == 0);
252 ASSERT(pShellFileInfo
->Info
->Attribute
== 0);
254 Status
= ShellCloseFileMetaArg(&pShellFileInfo
);
255 ASSERT_EFI_ERROR(Status
);
256 Print(L
"Open/Close Meta Arg - pass\r\n");
258 // now delete that file and that directory
259 StrCat(FileName
, L
"\\File.txt");
260 Status
= ShellOpenFileByName(FileName
,
262 EFI_FILE_MODE_CREATE
|EFI_FILE_MODE_READ
|EFI_FILE_MODE_WRITE
,
265 ASSERT_EFI_ERROR(Status
);
266 Status
= ShellDeleteFile(&FileHandle
);
267 StrCpy(FileName
, L
"testDir");
268 ASSERT_EFI_ERROR(Status
);
269 Status
= ShellOpenFileByName(FileName
,
271 EFI_FILE_MODE_CREATE
|EFI_FILE_MODE_READ
|EFI_FILE_MODE_WRITE
,
274 Status
= ShellDeleteFile(&FileHandle
);
275 ASSERT_EFI_ERROR(Status
);
277 // get environment variable
278 // made for testing under nt32
279 ASSERT(StrCmp(ShellGetEnvironmentVariable(L
"path"), L
".;f10:\\efi\\tools;f10:\\efi\\boot;f10:\\;f9:\\efi\\tools;f9:\\efi\\boot;f9:\\") == 0);
280 Print(L
"ShellGetEnvironmentVariable - pass\r\n");
282 // set environment variable
283 Status
= ShellSetEnvironmentVariable(L
"", L
"", FALSE
);
284 ASSERT(Status
== EFI_UNSUPPORTED
);
285 Print(L
"ShellSetEnvironmentVariable - pass\r\n");
288 Status
= ShellExecute(&ImageHandle
, L
"EmptyApplication.efi", TRUE
, NULL
, NULL
);
289 ASSERT_EFI_ERROR(Status
);
290 // the pass printout for this is performed by EmptyApplication
293 // page break mode (done last so we can see the results)
294 // we set this true at the begining of the program
295 // this is enough lines to trigger the page...
296 Print(L
"1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\r\n25\r\n26\r\n27\r\n28\r\n29\r\n30\r\n31\r\n");
297 ShellSetPageBreakMode(FALSE
);
298 Print(L
"1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\r\n25\r\n26\r\n27\r\n28\r\n29\r\n30\r\n31\r\n32\r\n33\r\n34\r\n35\r\n36\r\n37\r\n38\r\n39\r\n40\r\n41\r\n42\r\n43\r\n44\r\n45\r\n46\r\n47\r\n48\r\n49\r\n50\r\n51\r\n52\r\n53\r\n54\r\n55\r\n56\r\n57\r\n58\r\n59\r\n60\r\n");
305 done - ShellGetFileInfo
306 done - ShellSetFileInfo
307 done - ShellOpenFileByDevicePath
308 done - ShellOpenFileByName
309 done - ShellCreateDirectory
311 done - ShellWriteFile
312 done - ShellCloseFile
313 done - ShellDeleteFile
314 done - ShellSetFilePosition
315 done - ShellGetFilePosition
316 ???? - ShellFlushFile
317 done - ShellFindFirstFile
318 done - ShellFindNextFile
319 done - ShellGetFileSize
320 done - ShellGetExecutionBreakFlag
321 done - ShellGetEnvironmentVariable
322 done - ShellSetEnvironmentVariable
324 done - ShellGetCurrentDir
325 done - ShellSetPageBreakMode
326 done - ShellOpenFileMetaArg
327 done - ShellCloseFileMetaArg
328 done - ShellCommandLineParse
329 done - ShellCommandLineFreeVarList
330 done - ShellCommandLineGetFlag
331 done - ShellCommandLineGetValue
332 done - ShellCommandLineGetRawValue