+/**\r
+ Check if data is coming from StdIn output.\r
+\r
+ @param[in] None\r
+ \r
+ @retval TRUE StdIn stream data available to parse \r
+ @retval FALSE StdIn stream data is not available to parse. \r
+**/\r
+BOOLEAN\r
+IsStdInDataAvailable (\r
+ VOID\r
+ )\r
+{\r
+ SHELL_FILE_HANDLE FileHandle;\r
+ EFI_STATUS Status;\r
+ CHAR16 CharBuffer; \r
+ UINTN CharSize;\r
+ UINT64 OriginalFilePosition;\r
+\r
+ Status = EFI_SUCCESS; \r
+ FileHandle = NULL;\r
+ OriginalFilePosition = 0;\r
+\r
+ if (ShellOpenFileByName (L">i", &FileHandle, EFI_FILE_MODE_READ, 0) == EFI_SUCCESS) {\r
+ CharSize = sizeof(CHAR16);\r
+ gEfiShellProtocol->GetFilePosition (FileHandle, &OriginalFilePosition);\r
+ Status = gEfiShellProtocol->ReadFile (FileHandle, &CharSize, &CharBuffer);\r
+ if (EFI_ERROR (Status) || (CharSize != sizeof(CHAR16))) {\r
+ return FALSE;\r
+ }\r
+ gEfiShellProtocol->SetFilePosition(FileHandle, OriginalFilePosition);\r
+ }\r
+\r
+ if (FileHandle == NULL) {\r
+ return FALSE;\r
+ } else {\r
+ return TRUE;\r
+ }\r
+}\r
+\r
+/**\r
+ Handle stings for SFO Output with escape character ^ in a string\r
+ 1. Quotation marks in the string must be escaped by using a ^ character (i.e. ^"). \r
+ 2. The ^ character may be inserted using ^^.\r
+\r
+ @param[in] String The Unicode NULL-terminated string.\r
+ \r
+ @retval NewString The new string handled for SFO.\r
+**/\r
+EFI_STRING\r
+HandleStringWithEscapeCharForParse (\r
+ IN CHAR16 *String\r
+ )\r
+{\r
+ EFI_STRING NewStr;\r
+ EFI_STRING StrWalker;\r
+ EFI_STRING ReturnStr;\r
+\r
+ if (String == NULL) {\r
+ return NULL;\r
+ }\r
+ \r
+ //\r
+ // start to parse the input string.\r
+ //\r
+ NewStr = AllocateZeroPool (StrSize (String));\r
+ if (NewStr == NULL) {\r
+ return NULL;\r
+ }\r
+ ReturnStr = NewStr;\r
+ StrWalker = String;\r
+ while (*StrWalker != CHAR_NULL) {\r
+ if (*StrWalker == L'^' && (*(StrWalker + 1) == L'^' || *(StrWalker + 1) == L'"')) {\r
+ *NewStr = *(StrWalker + 1);\r
+ StrWalker++;\r
+ } else {\r
+ *NewStr = *StrWalker;\r
+ }\r
+ StrWalker++;\r
+ NewStr++;\r
+ }\r
+ \r
+ return ReturnStr;\r
+}\r
+\r
+\r
+/**\r
+ Do the actual parsing of the file. the file should be SFO output from a \r
+ shell command or a similar format.\r
+\r
+ @param[in] FileName The filename to open.\r
+ @param[in] TableName The name of the table to find.\r
+ @param[in] ColumnIndex The column number to get.\r
+ @param[in] TableNameInstance Which instance of the table to get (row).\r
+ @param[in] ShellCommandInstance Which instance of the command to get.\r
+ @param[in] StreamingUnicode Indicates Input file is StdIn Unicode streaming data or not\r
+\r
+ @retval SHELL_NOT_FOUND The requested instance was not found.\r
+ @retval SHELL_SUCCESS The operation was successful.\r
+**/\r