+++ /dev/null
-/** @file\r
- This is a simple shell application\r
-\r
- This should be executed with "/Param2 Val1" and "/Param1" as the 2 command line options!\r
-\r
- Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include <Uefi.h>\r
-#include <Guid/FileInfo.h>\r
-#include <Protocol/SimpleFileSystem.h>\r
-#include <Protocol/LoadedImage.h>\r
-#include <Protocol/EfiShellInterface.h>\r
-#include <Protocol/EfiShellEnvironment2.h>\r
-#include <Protocol/EfiShell.h>\r
-#include <Protocol/EfiShellParameters.h>\r
-#include <Library/UefiApplicationEntryPoint.h>\r
-#include <Library/UefiLib.h>\r
-#include <Library/ShellLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-\r
-SHELL_PARAM_ITEM ParamList[] = {\r
- {L"/Param1", TypeFlag},\r
- {L"/Param2", TypeValue},\r
- {L"/Param3", TypeDoubleValue},\r
- {L"/Param4", TypeMaxValue},\r
- {NULL, TypeMax}};\r
-\r
-/**\r
- as the real entry point for the application.\r
-\r
- @param[in] ImageHandle The firmware allocated handle for the EFI image.\r
- @param[in] SystemTable A pointer to the EFI System Table.\r
-\r
- @retval EFI_SUCCESS The entry point is executed successfully.\r
- @retval other Some error occurs when executing this entry point.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-UefiMain (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- )\r
-{\r
- SHELL_FILE_HANDLE FileHandle;\r
- EFI_STATUS Status;\r
- CHAR16 FileName[100];\r
- UINTN BufferSize;\r
- UINT64 Position;\r
- UINT8 Buffer[200];\r
- EFI_FILE_INFO *pFileInfo;\r
- UINT64 Size;\r
- BOOLEAN NoFile;\r
- EFI_SHELL_FILE_INFO *pShellFileInfo;\r
- LIST_ENTRY *List;\r
- // CONST CHAR16 *Tester;\r
-\r
- FileHandle = NULL;\r
- StrCpy(FileName, L"testfile.txt");\r
-// Position = 0;\r
- pFileInfo = NULL;\r
- Size = 0;\r
- NoFile = FALSE;\r
- pShellFileInfo = NULL;\r
- List = NULL;\r
-\r
- // command line param functions\r
- Status = ShellCommandLineParse(ParamList, &List, NULL, FALSE);\r
- // if you put an invalid parameter you SHOULD hit this assert.\r
- ASSERT_EFI_ERROR(Status);\r
- if (List) {\r
- ASSERT(ShellCommandLineGetFlag(List, L"/Param5") == FALSE);\r
- ASSERT(ShellCommandLineGetFlag(List, L"/Param1") != FALSE);\r
- ASSERT(StrCmp(ShellCommandLineGetValue(List, L"/Param2"), L"Val1")==0);\r
- ASSERT(StrCmp(ShellCommandLineGetRawValue(List, 0), L"SimpleApplication.efi")==0);\r
- // Tester = ShellCommandLineGetValue(List, L"/Param3");\r
- // Tester = ShellCommandLineGetValue(List, L"/Param4");\r
-\r
- ShellCommandLineFreeVarList(List);\r
- } else {\r
- Print(L"param checking skipped.\r\n");\r
- }\r
-\r
-// return (EFI_SUCCESS);\r
-\r
-\r
- ASSERT(ShellGetExecutionBreakFlag() == FALSE);\r
- ASSERT(StrCmp(ShellGetCurrentDir(NULL), L"f10:\\") == 0);\r
- Print(L"execution break and get cur dir - pass\r\n");\r
-\r
- ShellSetPageBreakMode(TRUE);\r
-\r
- Status = ShellOpenFileByName(FileName,\r
- &FileHandle,\r
- EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,\r
- 0\r
- );\r
- ASSERT_EFI_ERROR(Status);\r
-\r
- BufferSize = StrSize(FileName);\r
- Status = ShellWriteFile(FileHandle, &BufferSize, FileName);\r
- ASSERT_EFI_ERROR(Status);\r
- Status = ShellGetFilePosition(FileHandle, &Position);\r
- ASSERT_EFI_ERROR(Status);\r
- ASSERT(Position == 0x1A);\r
- Status = ShellSetFilePosition(FileHandle, 0);\r
- ASSERT_EFI_ERROR(Status);\r
- BufferSize = sizeof(Buffer) * sizeof(Buffer[0]);\r
- Status = ShellReadFile(FileHandle, &BufferSize, Buffer);\r
- ASSERT_EFI_ERROR(Status);\r
- ASSERT(BufferSize == 0x1A);\r
- ASSERT(StrCmp((CHAR16*)Buffer, FileName) == 0);\r
- pFileInfo = ShellGetFileInfo(FileHandle);\r
- ASSERT(pFileInfo != NULL);\r
- ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);\r
- ASSERT(pFileInfo->FileSize == 0x1A);\r
- FreePool(pFileInfo);\r
- pFileInfo = NULL;\r
- Status = ShellCloseFile(&FileHandle);\r
- ASSERT_EFI_ERROR(Status);\r
- Print(L"read, write, create, getinfo - pass\r\n");\r
-\r
- Status = ShellOpenFileByName(FileName,\r
- &FileHandle,\r
- EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,\r
- 0\r
- );\r
- ASSERT_EFI_ERROR(Status);\r
- pFileInfo = ShellGetFileInfo(FileHandle);\r
- ASSERT(pFileInfo != NULL);\r
- pFileInfo->FileSize = 0x20;\r
- Status = ShellSetFileInfo(FileHandle, pFileInfo);\r
- FreePool(pFileInfo);\r
- pFileInfo = NULL;\r
- ASSERT_EFI_ERROR(Status);\r
- pFileInfo = ShellGetFileInfo(FileHandle);\r
- ASSERT(pFileInfo != NULL);\r
- ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);\r
- ASSERT(pFileInfo->PhysicalSize == 0x20);\r
- ASSERT(pFileInfo->FileSize == 0x20);\r
- ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);\r
- FreePool(pFileInfo);\r
- Status = ShellGetFileSize(FileHandle, &Size);\r
- ASSERT(Size == 0x20);\r
- ASSERT_EFI_ERROR(Status);\r
- Status = ShellCloseFile(&FileHandle);\r
- ASSERT_EFI_ERROR(Status);\r
- Print(L"setinfo and change size, getsize - pass\r\n");\r
-\r
- Status = ShellOpenFileByName(FileName,\r
- &FileHandle,\r
- EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,\r
- 0\r
- );\r
- ASSERT_EFI_ERROR(Status);\r
-\r
- pFileInfo = ShellGetFileInfo(FileHandle);\r
- ASSERT(pFileInfo != NULL);\r
- ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);\r
- ASSERT(pFileInfo->PhysicalSize == 0x20);\r
- ASSERT(pFileInfo->FileSize == 0x20);\r
- ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);\r
- FreePool(pFileInfo);\r
- pFileInfo = NULL;\r
- Status = ShellDeleteFile(&FileHandle);\r
- ASSERT_EFI_ERROR(Status);\r
- Print(L"reopen file - pass\r\n");\r
-\r
- Status = ShellOpenFileByName(FileName,\r
- &FileHandle,\r
- EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,\r
- 0\r
- );\r
- ASSERT_EFI_ERROR(Status);\r
- pFileInfo = ShellGetFileInfo(FileHandle);\r
- ASSERT(pFileInfo != NULL);\r
- ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);\r
- ASSERT(pFileInfo->PhysicalSize == 0x0);\r
- ASSERT(pFileInfo->FileSize == 0x0);\r
- ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);\r
- FreePool(pFileInfo);\r
- Status = ShellDeleteFile(&FileHandle);\r
- ASSERT_EFI_ERROR(Status);\r
- Print(L"size of empty - pass\r\n");\r
-\r
- Status = ShellOpenFileByName(FileName,\r
- &FileHandle,\r
- EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,\r
- 0\r
- );\r
- ASSERT(Status == EFI_NOT_FOUND);\r
- ASSERT(FileHandle == NULL);\r
-\r
- Status = ShellCreateDirectory(FileName, &FileHandle);\r
- ASSERT_EFI_ERROR(Status);\r
- ASSERT(FileHandle != NULL);\r
- pFileInfo = ShellGetFileInfo(FileHandle);\r
- ASSERT(pFileInfo != NULL);\r
- ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);\r
- ASSERT(pFileInfo->Attribute&EFI_FILE_DIRECTORY);\r
- Status = ShellDeleteFile(&FileHandle);\r
- ASSERT_EFI_ERROR(Status);\r
- Print(L"Directory create - pass\r\n");\r
-\r
- // FindFirst and FindNext\r
- StrCpy(FileName, L"testDir");\r
- Status = ShellCreateDirectory(FileName, &FileHandle);\r
- Status = ShellCloseFile(&FileHandle);\r
- StrCat(FileName, L"\\File.txt");\r
- Status = ShellOpenFileByName(FileName,\r
- &FileHandle,\r
- EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,\r
- 0\r
- );\r
- ASSERT_EFI_ERROR(Status);\r
- Status = ShellCloseFile(&FileHandle);\r
- StrCpy(FileName, L"testDir");\r
- Status = ShellOpenFileByName(FileName,\r
- &FileHandle,\r
- EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,\r
- 0\r
- );\r
- ASSERT_EFI_ERROR(Status);\r
- Status = ShellFindFirstFile(FileHandle, &pFileInfo);\r
- ASSERT_EFI_ERROR(Status);\r
- Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);\r
- ASSERT_EFI_ERROR(Status);\r
- ASSERT(NoFile == FALSE);\r
- Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);\r
- ASSERT_EFI_ERROR(Status);\r
- ASSERT(NoFile == FALSE);\r
- Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);\r
- ASSERT_EFI_ERROR(Status);\r
- ///@todo - why is NoFile never set? limitation of NT32 file system?\r
- Status = ShellDeleteFile(&FileHandle);\r
- ASSERT(Status == RETURN_WARN_DELETE_FAILURE);\r
- Print(L"FindFirst - pass\r\n");\r
- Print(L"FindNext - Verify with real EFI system. Cant verify NoFile under NT32\r\n");\r
-\r
- // open and close meta arg\r
- Status = ShellOpenFileMetaArg(L"testDir\\*.*", EFI_FILE_MODE_READ, &pShellFileInfo);\r
- ASSERT_EFI_ERROR(Status);\r
- ASSERT(pShellFileInfo->Status == 0);\r
- ASSERT(StrCmp(pShellFileInfo->FileName, L"File.txt") == 0);\r
- ASSERT(pShellFileInfo->Handle);\r
- ASSERT(pShellFileInfo->Info);\r
- ASSERT(pShellFileInfo->Info->FileSize == 0);\r
- ASSERT(StrCmp(pShellFileInfo->Info->FileName, L"File.txt") == 0);\r
- ASSERT(pShellFileInfo->Info->Attribute == 0);\r
-\r
- Status = ShellCloseFileMetaArg(&pShellFileInfo);\r
- ASSERT_EFI_ERROR(Status);\r
- Print(L"Open/Close Meta Arg - pass\r\n");\r
-\r
- // now delete that file and that directory\r
- StrCat(FileName, L"\\File.txt");\r
- Status = ShellOpenFileByName(FileName,\r
- &FileHandle,\r
- EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,\r
- 0\r
- );\r
- ASSERT_EFI_ERROR(Status);\r
- Status = ShellDeleteFile(&FileHandle);\r
- StrCpy(FileName, L"testDir");\r
- ASSERT_EFI_ERROR(Status);\r
- Status = ShellOpenFileByName(FileName,\r
- &FileHandle,\r
- EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,\r
- 0\r
- );\r
- Status = ShellDeleteFile(&FileHandle);\r
- ASSERT_EFI_ERROR(Status);\r
-\r
- // get environment variable\r
- // made for testing under nt32\r
- ASSERT(StrCmp(ShellGetEnvironmentVariable(L"path"), L".;f10:\\efi\\tools;f10:\\efi\\boot;f10:\\;f9:\\efi\\tools;f9:\\efi\\boot;f9:\\") == 0);\r
- Print(L"ShellGetEnvironmentVariable - pass\r\n");\r
-\r
- // set environment variable\r
- Status = ShellSetEnvironmentVariable(L"", L"", FALSE);\r
- ASSERT(Status == EFI_UNSUPPORTED);\r
- Print(L"ShellSetEnvironmentVariable - pass\r\n");\r
-\r
- // ShellExecute\r
- Status = ShellExecute(&ImageHandle, L"EmptyApplication.efi", TRUE, NULL, NULL);\r
- ASSERT_EFI_ERROR(Status);\r
- // the pass printout for this is performed by EmptyApplication\r
- Print(L"\r\n");\r
-\r
- // page break mode (done last so we can see the results)\r
- // we set this true at the begining of the program\r
- // this is enough lines to trigger the page...\r
- 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");\r
- ShellSetPageBreakMode(FALSE);\r
- 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");\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-\r
-/*\r
-done - ShellGetFileInfo\r
-done - ShellSetFileInfo\r
-done - ShellOpenFileByDevicePath\r
-done - ShellOpenFileByName\r
-done - ShellCreateDirectory\r
-done - ShellReadFile\r
-done - ShellWriteFile\r
-done - ShellCloseFile\r
-done - ShellDeleteFile\r
-done - ShellSetFilePosition\r
-done - ShellGetFilePosition\r
-???? - ShellFlushFile\r
-done - ShellFindFirstFile\r
-done - ShellFindNextFile\r
-done - ShellGetFileSize\r
-done - ShellGetExecutionBreakFlag\r
-done - ShellGetEnvironmentVariable\r
-done - ShellSetEnvironmentVariable\r
-done - ShellExecute\r
-done - ShellGetCurrentDir\r
-done - ShellSetPageBreakMode\r
-done - ShellOpenFileMetaArg\r
-done - ShellCloseFileMetaArg\r
-done - ShellCommandLineParse\r
-done - ShellCommandLineFreeVarList\r
-done - ShellCommandLineGetFlag\r
-done - ShellCommandLineGetValue\r
-done - ShellCommandLineGetRawValue\r
-*/\r