+++ /dev/null
-/** @file\r
- Mde UEFI library API implementation.\r
- Print to StdErr or ConOut defined in EFI_SYSTEM_TABLE\r
-\r
- Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include "UefiLibInternal.h"\r
-\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_GRAPHICS_OUTPUT_BLT_PIXEL mEfiColors[16] = {\r
- { 0x00, 0x00, 0x00, 0x00 },\r
- { 0x98, 0x00, 0x00, 0x00 },\r
- { 0x00, 0x98, 0x00, 0x00 },\r
- { 0x98, 0x98, 0x00, 0x00 },\r
- { 0x00, 0x00, 0x98, 0x00 },\r
- { 0x98, 0x00, 0x98, 0x00 },\r
- { 0x00, 0x98, 0x98, 0x00 },\r
- { 0x98, 0x98, 0x98, 0x00 },\r
- { 0x10, 0x10, 0x10, 0x00 },\r
- { 0xff, 0x10, 0x10, 0x00 },\r
- { 0x10, 0xff, 0x10, 0x00 },\r
- { 0xff, 0xff, 0x10, 0x00 },\r
- { 0x10, 0x10, 0xff, 0x00 },\r
- { 0xf0, 0x10, 0xff, 0x00 },\r
- { 0x10, 0xff, 0xff, 0x00 },\r
- { 0xff, 0xff, 0xff, 0x00 }\r
-};\r
-\r
-/**\r
- Internal function which prints a formatted Unicode string to the console output device\r
- specified by Console\r
-\r
- This function prints a formatted Unicode string to the console output device\r
- specified by Console and returns the number of Unicode characters that printed\r
- to it. If the length of the formatted Unicode string is greater than PcdUefiLibMaxPrintBufferSize,\r
- then only the first PcdUefiLibMaxPrintBufferSize characters are sent to Console.\r
- If Format is NULL, then ASSERT().\r
- If Format is not aligned on a 16-bit boundary, then ASSERT().\r
-\r
- @param Format Null-terminated Unicode format string.\r
- @param Console The output console.\r
- @param Marker VA_LIST marker for the variable argument list.\r
-\r
- @return The number of Unicode characters in the produced\r
- output buffer not including the Null-terminator.\r
-**/\r
-UINTN\r
-InternalPrint (\r
- IN CONST CHAR16 *Format,\r
- IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Console,\r
- IN VA_LIST Marker\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINTN Return;\r
- CHAR16 *Buffer;\r
- UINTN BufferSize;\r
-\r
- ASSERT (Format != NULL);\r
- ASSERT (((UINTN) Format & BIT0) == 0);\r
- ASSERT (Console != NULL);\r
-\r
- BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);\r
-\r
- Buffer = (CHAR16 *) AllocatePool(BufferSize);\r
- ASSERT (Buffer != NULL);\r
-\r
- Return = UnicodeVSPrint (Buffer, BufferSize, Format, Marker);\r
-\r
- if (Console != NULL && Return > 0) {\r
- //\r
- // To be extra safe make sure Console has been initialized\r
- //\r
- Status = Console->OutputString (Console, Buffer);\r
- if (EFI_ERROR (Status)) {\r
- Return = 0;\r
- }\r
- }\r
-\r
- FreePool (Buffer);\r
-\r
- return Return;\r
-}\r
-\r
-/**\r
- Prints a formatted Unicode string to the console output device specified by\r
- ConOut defined in the EFI_SYSTEM_TABLE.\r
-\r
- This function prints a formatted Unicode string to the console output device\r
- specified by ConOut in EFI_SYSTEM_TABLE and returns the number of Unicode\r
- characters that printed to ConOut. If the length of the formatted Unicode\r
- string is greater than PcdUefiLibMaxPrintBufferSize, then only the first\r
- PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.\r
- If Format is NULL, then ASSERT().\r
- If Format is not aligned on a 16-bit boundary, then ASSERT().\r
- If gST->ConOut is NULL, then ASSERT().\r
-\r
- @param Format Null-terminated Unicode format string.\r
- @param ... Variable argument list whose contents are accessed based\r
- on the format string specified by Format.\r
-\r
- @return Number of Unicode characters printed to ConOut.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-Print (\r
- IN CONST CHAR16 *Format,\r
- ...\r
- )\r
-{\r
- VA_LIST Marker;\r
- UINTN Return;\r
-\r
- VA_START (Marker, Format);\r
-\r
- Return = InternalPrint (Format, gST->ConOut, Marker);\r
-\r
- VA_END (Marker);\r
-\r
- return Return;\r
-}\r
-\r
-/**\r
- Prints a formatted Unicode string to the console output device specified by\r
- StdErr defined in the EFI_SYSTEM_TABLE.\r
-\r
- This function prints a formatted Unicode string to the console output device\r
- specified by StdErr in EFI_SYSTEM_TABLE and returns the number of Unicode\r
- characters that printed to StdErr. If the length of the formatted Unicode\r
- string is greater than PcdUefiLibMaxPrintBufferSize, then only the first\r
- PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.\r
- If Format is NULL, then ASSERT().\r
- If Format is not aligned on a 16-bit boundary, then ASSERT().\r
- If gST->StdErr is NULL, then ASSERT().\r
-\r
- @param Format Null-terminated Unicode format string.\r
- @param ... Variable argument list whose contents are accessed based\r
- on the format string specified by Format.\r
-\r
- @return Number of Unicode characters printed to StdErr.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-ErrorPrint (\r
- IN CONST CHAR16 *Format,\r
- ...\r
- )\r
-{\r
- VA_LIST Marker;\r
- UINTN Return;\r
-\r
- VA_START (Marker, Format);\r
-\r
- Return = InternalPrint( Format, gST->StdErr, Marker);\r
-\r
- VA_END (Marker);\r
-\r
- return Return;\r
-}\r
-\r
-\r
-/**\r
- Internal function which prints a formatted ASCII string to the console output device\r
- specified by Console\r
-\r
- This function prints a formatted ASCII string to the console output device\r
- specified by Console and returns the number of ASCII characters that printed\r
- to it. If the length of the formatted ASCII string is greater than PcdUefiLibMaxPrintBufferSize,\r
- then only the first PcdUefiLibMaxPrintBufferSize characters are sent to Console.\r
-\r
- If Format is NULL, then ASSERT().\r
-\r
- @param Format Null-terminated ASCII format string.\r
- @param Console The output console.\r
- @param Marker VA_LIST marker for the variable argument list.\r
-\r
- @return The number of Unicode characters in the produced\r
- output buffer not including the Null-terminator.\r
-\r
-**/\r
-UINTN\r
-AsciiInternalPrint (\r
- IN CONST CHAR8 *Format,\r
- IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Console,\r
- IN VA_LIST Marker\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINTN Return;\r
- CHAR16 *Buffer;\r
- UINTN BufferSize;\r
-\r
- ASSERT (Format != NULL);\r
- ASSERT (Console != NULL);\r
-\r
- BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);\r
-\r
- Buffer = (CHAR16 *) AllocatePool(BufferSize);\r
- ASSERT (Buffer != NULL);\r
-\r
- Return = UnicodeVSPrintAsciiFormat (Buffer, BufferSize, Format, Marker);\r
-\r
- if (Console != NULL) {\r
- //\r
- // To be extra safe make sure Console has been initialized\r
- //\r
- Status = Console->OutputString (Console, Buffer);\r
- if (EFI_ERROR (Status)) {\r
- Return = 0;\r
- }\r
- }\r
-\r
- FreePool (Buffer);\r
-\r
- return Return;\r
-}\r
-\r
-/**\r
- Prints a formatted ASCII string to the console output device specified by\r
- ConOut defined in the EFI_SYSTEM_TABLE.\r
-\r
- This function prints a formatted ASCII string to the console output device\r
- specified by ConOut in EFI_SYSTEM_TABLE and returns the number of ASCII\r
- characters that printed to ConOut. If the length of the formatted ASCII\r
- string is greater than PcdUefiLibMaxPrintBufferSize, then only the first\r
- PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.\r
- If Format is NULL, then ASSERT().\r
- If gST->ConOut is NULL, then ASSERT().\r
-\r
- @param Format Null-terminated ASCII format string.\r
- @param ... Variable argument list whose contents are accessed based\r
- on the format string specified by Format.\r
-\r
- @return Number of ASCII characters printed to ConOut.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-AsciiPrint (\r
- IN CONST CHAR8 *Format,\r
- ...\r
- )\r
-{\r
- VA_LIST Marker;\r
- UINTN Return;\r
- ASSERT (Format != NULL);\r
-\r
- VA_START (Marker, Format);\r
-\r
- Return = AsciiInternalPrint( Format, gST->ConOut, Marker);\r
-\r
- VA_END (Marker);\r
-\r
- return Return;\r
-}\r
-\r
-/**\r
- Prints a formatted ASCII string to the console output device specified by\r
- StdErr defined in the EFI_SYSTEM_TABLE.\r
-\r
- This function prints a formatted ASCII string to the console output device\r
- specified by StdErr in EFI_SYSTEM_TABLE and returns the number of ASCII\r
- characters that printed to StdErr. If the length of the formatted ASCII\r
- string is greater than PcdUefiLibMaxPrintBufferSize, then only the first\r
- PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.\r
- If Format is NULL, then ASSERT().\r
- If gST->StdErr is NULL, then ASSERT().\r
-\r
- @param Format Null-terminated ASCII format string.\r
- @param ... Variable argument list whose contents are accessed based\r
- on the format string specified by Format.\r
-\r
- @return Number of ASCII characters printed to ConErr.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-AsciiErrorPrint (\r
- IN CONST CHAR8 *Format,\r
- ...\r
- )\r
-{\r
- VA_LIST Marker;\r
- UINTN Return;\r
-\r
- ASSERT (Format != NULL);\r
-\r
- VA_START (Marker, Format);\r
-\r
- Return = AsciiInternalPrint( Format, gST->StdErr, Marker);\r
-\r
- VA_END (Marker);\r
-\r
- return Return;\r
-}\r
-\r
-/**\r
- Internal function to print a formatted Unicode string to a graphics console device specified by\r
- ConsoleOutputHandle defined in the EFI_SYSTEM_TABLE at the given (X,Y) coordinates.\r
-\r
- This function prints a formatted Unicode string to the graphics console device\r
- specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of\r
- Unicode characters printed. The EFI_HII_FONT_PROTOCOL is used to convert the\r
- string to a bitmap using the glyphs registered with the\r
- HII database. No wrapping is performed, so any portions of the string the fall\r
- outside the active display region will not be displayed.\r
-\r
- If a graphics console device is not associated with the ConsoleOutputHandle\r
- defined in the EFI_SYSTEM_TABLE then no string is printed, and 0 is returned.\r
- If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no\r
- string is printed, and 0 is returned.\r
-\r
- @param PointX X coordinate to print the string.\r
- @param PointY Y coordinate to print the string.\r
- @param Foreground The foreground color of the string being printed. This is\r
- an optional parameter that may be NULL. If it is NULL,\r
- then the foreground color of the current ConOut device\r
- in the EFI_SYSTEM_TABLE is used.\r
- @param Background The background color of the string being printed. This is\r
- an optional parameter that may be NULL. If it is NULL,\r
- then the background color of the current ConOut device\r
- in the EFI_SYSTEM_TABLE is used.\r
- @param Buffer Null-terminated Unicode formatted string.\r
- @param PrintNum The number of Unicode formatted string to be printed.\r
-\r
- @return Number of Unicode Characters printed. Zero means no any character\r
- displayed successfully.\r
-\r
-**/\r
-UINTN\r
-InternalPrintGraphic (\r
- IN UINTN PointX,\r
- IN UINTN PointY,\r
- IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Foreground,\r
- IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Background,\r
- IN CHAR16 *Buffer,\r
- IN UINTN PrintNum\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINT32 HorizontalResolution;\r
- UINT32 VerticalResolution;\r
- UINT32 ColorDepth;\r
- UINT32 RefreshRate;\r
- EFI_HII_FONT_PROTOCOL *HiiFont;\r
- EFI_IMAGE_OUTPUT *Blt;\r
- EFI_FONT_DISPLAY_INFO FontInfo;\r
- EFI_HII_ROW_INFO *RowInfoArray;\r
- UINTN RowInfoArraySize;\r
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
- EFI_UGA_DRAW_PROTOCOL *UgaDraw;\r
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Sto;\r
- EFI_HANDLE ConsoleHandle;\r
- UINTN Width;\r
- UINTN Height;\r
- UINTN Delta;\r
-\r
- HorizontalResolution = 0;\r
- VerticalResolution = 0;\r
- Blt = NULL;\r
- RowInfoArray = NULL;\r
-\r
- ConsoleHandle = gST->ConsoleOutHandle;\r
-\r
- ASSERT( ConsoleHandle != NULL);\r
-\r
- Status = gBS->HandleProtocol (\r
- ConsoleHandle,\r
- &gEfiGraphicsOutputProtocolGuid,\r
- (VOID **) &GraphicsOutput\r
- );\r
-\r
- UgaDraw = NULL;\r
- if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
- //\r
- // If no GOP available, try to open UGA Draw protocol if supported.\r
- //\r
- GraphicsOutput = NULL;\r
-\r
- Status = gBS->HandleProtocol (\r
- ConsoleHandle,\r
- &gEfiUgaDrawProtocolGuid,\r
- (VOID **) &UgaDraw\r
- );\r
- }\r
- if (EFI_ERROR (Status)) {\r
- goto Error;\r
- }\r
-\r
- Status = gBS->HandleProtocol (\r
- ConsoleHandle,\r
- &gEfiSimpleTextOutProtocolGuid,\r
- (VOID **) &Sto\r
- );\r
-\r
- if (EFI_ERROR (Status)) {\r
- goto Error;\r
- }\r
-\r
- if (GraphicsOutput != NULL) {\r
- HorizontalResolution = GraphicsOutput->Mode->Info->HorizontalResolution;\r
- VerticalResolution = GraphicsOutput->Mode->Info->VerticalResolution;\r
- } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
- UgaDraw->GetMode (UgaDraw, &HorizontalResolution, &VerticalResolution, &ColorDepth, &RefreshRate);\r
- } else {\r
- goto Error;\r
- }\r
-\r
- ASSERT ((HorizontalResolution != 0) && (VerticalResolution !=0));\r
-\r
- Status = gBS->LocateProtocol (&gEfiHiiFontProtocolGuid, NULL, (VOID **) &HiiFont);\r
- if (EFI_ERROR (Status)) {\r
- goto Error;\r
- }\r
-\r
- Blt = (EFI_IMAGE_OUTPUT *) AllocateZeroPool (sizeof (EFI_IMAGE_OUTPUT));\r
- ASSERT (Blt != NULL);\r
-\r
- Blt->Width = (UINT16) (HorizontalResolution);\r
- Blt->Height = (UINT16) (VerticalResolution);\r
-\r
- ZeroMem (&FontInfo, sizeof (EFI_FONT_DISPLAY_INFO));\r
-\r
- if (Foreground != NULL) {\r
- CopyMem (&FontInfo.ForegroundColor, Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));\r
- } else {\r
- CopyMem (\r
- &FontInfo.ForegroundColor,\r
- &mEfiColors[Sto->Mode->Attribute & 0x0f],\r
- sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)\r
- );\r
- }\r
- if (Background != NULL) {\r
- CopyMem (&FontInfo.BackgroundColor, Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));\r
- } else {\r
- CopyMem (\r
- &FontInfo.BackgroundColor,\r
- &mEfiColors[Sto->Mode->Attribute >> 4],\r
- sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)\r
- );\r
- }\r
-\r
- if (GraphicsOutput != NULL) {\r
- Blt->Image.Screen = GraphicsOutput;\r
-\r
- Status = HiiFont->StringToImage (\r
- HiiFont,\r
- EFI_HII_IGNORE_IF_NO_GLYPH | EFI_HII_OUT_FLAG_CLIP |\r
- EFI_HII_OUT_FLAG_CLIP_CLEAN_X | EFI_HII_OUT_FLAG_CLIP_CLEAN_Y |\r
- EFI_HII_IGNORE_LINE_BREAK | EFI_HII_DIRECT_TO_SCREEN,\r
- Buffer,\r
- &FontInfo,\r
- &Blt,\r
- PointX,\r
- PointY,\r
- &RowInfoArray,\r
- &RowInfoArraySize,\r
- NULL\r
- );\r
- if (EFI_ERROR (Status)) {\r
- goto Error;\r
- }\r
-\r
- } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
- ASSERT (UgaDraw!= NULL);\r
-\r
- //\r
- // Ensure Width * Height * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) doesn't overflow.\r
- //\r
- if (Blt->Width > DivU64x32 (MAX_UINTN, Blt->Height * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL))) {\r
- goto Error;\r
- }\r
-\r
- Blt->Image.Bitmap = AllocateZeroPool ((UINT32) Blt->Width * Blt->Height * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));\r
- ASSERT (Blt->Image.Bitmap != NULL);\r
-\r
- //\r
- // StringToImage only support blt'ing image to device using GOP protocol. If GOP is not supported in this platform,\r
- // we ask StringToImage to print the string to blt buffer, then blt to device using UgaDraw.\r
- //\r
- Status = HiiFont->StringToImage (\r
- HiiFont,\r
- EFI_HII_IGNORE_IF_NO_GLYPH | EFI_HII_OUT_FLAG_CLIP |\r
- EFI_HII_OUT_FLAG_CLIP_CLEAN_X | EFI_HII_OUT_FLAG_CLIP_CLEAN_Y |\r
- EFI_HII_IGNORE_LINE_BREAK,\r
- Buffer,\r
- &FontInfo,\r
- &Blt,\r
- PointX,\r
- PointY,\r
- &RowInfoArray,\r
- &RowInfoArraySize,\r
- NULL\r
- );\r
-\r
- if (!EFI_ERROR (Status)) {\r
- ASSERT (RowInfoArray != NULL);\r
- //\r
- // Explicit Line break characters are ignored, so the updated parameter RowInfoArraySize by StringToImage will\r
- // always be 1 or 0 (if there is no valid Unicode Char can be printed). ASSERT here to make sure.\r
- //\r
- ASSERT (RowInfoArraySize <= 1);\r
-\r
- if (RowInfoArraySize != 0) {\r
- Width = RowInfoArray[0].LineWidth;\r
- Height = RowInfoArray[0].LineHeight;\r
- Delta = Blt->Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);\r
- } else {\r
- Width = 0;\r
- Height = 0;\r
- Delta = 0;\r
- }\r
- Status = UgaDraw->Blt (\r
- UgaDraw,\r
- (EFI_UGA_PIXEL *) Blt->Image.Bitmap,\r
- EfiUgaBltBufferToVideo,\r
- PointX,\r
- PointY,\r
- PointX,\r
- PointY,\r
- Width,\r
- Height,\r
- Delta\r
- );\r
- } else {\r
- goto Error;\r
- }\r
- FreePool (Blt->Image.Bitmap);\r
- } else {\r
- goto Error;\r
- }\r
- //\r
- // Calculate the number of actual printed characters\r
- //\r
- if (RowInfoArraySize != 0) {\r
- PrintNum = RowInfoArray[0].EndIndex - RowInfoArray[0].StartIndex + 1;\r
- } else {\r
- PrintNum = 0;\r
- }\r
-\r
- FreePool (RowInfoArray);\r
- FreePool (Blt);\r
- return PrintNum;\r
-\r
-Error:\r
- if (Blt != NULL) {\r
- FreePool (Blt);\r
- }\r
- return 0;\r
-}\r
-\r
-/**\r
- Prints a formatted Unicode string to a graphics console device specified by\r
- ConsoleOutputHandle defined in the EFI_SYSTEM_TABLE at the given (X,Y) coordinates.\r
-\r
- This function prints a formatted Unicode string to the graphics console device\r
- specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of\r
- Unicode characters displayed, not including partial characters that may be clipped\r
- by the right edge of the display. If the length of the formatted Unicode string is\r
- greater than PcdUefiLibMaxPrintBufferSize, then at most the first\r
- PcdUefiLibMaxPrintBufferSize characters are printed.The EFI_HII_FONT_PROTOCOL\r
- StringToImage() service is used to convert the string to a bitmap using the glyphs\r
- registered with the HII database. No wrapping is performed, so any portions of the\r
- string the fall outside the active display region will not be displayed. Please see\r
- Section 27.2.6 of the UEFI Specification for a description of the supported string\r
- format including the set of control codes supported by the StringToImage() service.\r
-\r
- If a graphics console device is not associated with the ConsoleOutputHandle\r
- defined in the EFI_SYSTEM_TABLE then no string is printed, and 0 is returned.\r
- If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no\r
- string is printed, and 0 is returned.\r
- If Format is NULL, then ASSERT().\r
- If Format is not aligned on a 16-bit boundary, then ASSERT().\r
- If gST->ConsoleOutputHandle is NULL, then ASSERT().\r
-\r
- @param PointX X coordinate to print the string.\r
- @param PointY Y coordinate to print the string.\r
- @param ForeGround The foreground color of the string being printed. This is\r
- an optional parameter that may be NULL. If it is NULL,\r
- then the foreground color of the current ConOut device\r
- in the EFI_SYSTEM_TABLE is used.\r
- @param BackGround The background color of the string being printed. This is\r
- an optional parameter that may be NULL. If it is NULL,\r
- then the background color of the current ConOut device\r
- in the EFI_SYSTEM_TABLE is used.\r
- @param Format Null-terminated Unicode format string. See Print Library\r
- for the supported format string syntax.\r
- @param ... Variable argument list whose contents are accessed based on\r
- the format string specified by Format.\r
-\r
- @return The number of Unicode characters printed.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-PrintXY (\r
- IN UINTN PointX,\r
- IN UINTN PointY,\r
- IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *ForeGround, OPTIONAL\r
- IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackGround, OPTIONAL\r
- IN CONST CHAR16 *Format,\r
- ...\r
- )\r
-{\r
- VA_LIST Marker;\r
- CHAR16 *Buffer;\r
- UINTN BufferSize;\r
- UINTN PrintNum;\r
- UINTN ReturnNum;\r
-\r
- ASSERT (Format != NULL);\r
- ASSERT (((UINTN) Format & BIT0) == 0);\r
-\r
- VA_START (Marker, Format);\r
-\r
- BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);\r
-\r
- Buffer = (CHAR16 *) AllocatePool (BufferSize);\r
- ASSERT (Buffer != NULL);\r
-\r
- PrintNum = UnicodeVSPrint (Buffer, BufferSize, Format, Marker);\r
-\r
- VA_END (Marker);\r
-\r
- ReturnNum = InternalPrintGraphic (PointX, PointY, ForeGround, BackGround, Buffer, PrintNum);\r
-\r
- FreePool (Buffer);\r
-\r
- return ReturnNum;\r
-}\r
-\r
-/**\r
- Prints a formatted ASCII string to a graphics console device specified by\r
- ConsoleOutputHandle defined in the EFI_SYSTEM_TABLE at the given (X,Y) coordinates.\r
-\r
- This function prints a formatted ASCII string to the graphics console device\r
- specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of\r
- ASCII characters displayed, not including partial characters that may be clipped\r
- by the right edge of the display. If the length of the formatted ASCII string is\r
- greater than PcdUefiLibMaxPrintBufferSize, then at most the first\r
- PcdUefiLibMaxPrintBufferSize characters are printed.The EFI_HII_FONT_PROTOCOL\r
- StringToImage() service is used to convert the string to a bitmap using the glyphs\r
- registered with the HII database. No wrapping is performed, so any portions of the\r
- string the fall outside the active display region will not be displayed. Please see\r
- Section 27.2.6 of the UEFI Specification for a description of the supported string\r
- format including the set of control codes supported by the StringToImage() service.\r
-\r
- If a graphics console device is not associated with the ConsoleOutputHandle\r
- defined in the EFI_SYSTEM_TABLE then no string is printed, and 0 is returned.\r
- If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no\r
- string is printed, and 0 is returned.\r
- If Format is NULL, then ASSERT().\r
- If gST->ConsoleOutputHandle is NULL, then ASSERT().\r
-\r
- @param PointX X coordinate to print the string.\r
- @param PointY Y coordinate to print the string.\r
- @param ForeGround The foreground color of the string being printed. This is\r
- an optional parameter that may be NULL. If it is NULL,\r
- then the foreground color of the current ConOut device\r
- in the EFI_SYSTEM_TABLE is used.\r
- @param BackGround The background color of the string being printed. This is\r
- an optional parameter that may be NULL. If it is NULL,\r
- then the background color of the current ConOut device\r
- in the EFI_SYSTEM_TABLE is used.\r
- @param Format Null-terminated ASCII format string. See Print Library\r
- for the supported format string syntax.\r
- @param ... Variable argument list whose contents are accessed based on\r
- the format string specified by Format.\r
-\r
- @return The number of ASCII characters printed.\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-AsciiPrintXY (\r
- IN UINTN PointX,\r
- IN UINTN PointY,\r
- IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *ForeGround, OPTIONAL\r
- IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BackGround, OPTIONAL\r
- IN CONST CHAR8 *Format,\r
- ...\r
- )\r
-{\r
- VA_LIST Marker;\r
- CHAR16 *Buffer;\r
- UINTN BufferSize;\r
- UINTN PrintNum;\r
- UINTN ReturnNum;\r
-\r
- ASSERT (Format != NULL);\r
-\r
- VA_START (Marker, Format);\r
-\r
- BufferSize = (PcdGet32 (PcdUefiLibMaxPrintBufferSize) + 1) * sizeof (CHAR16);\r
-\r
- Buffer = (CHAR16 *) AllocatePool (BufferSize);\r
- ASSERT (Buffer != NULL);\r
-\r
- PrintNum = UnicodeSPrintAsciiFormat (Buffer, BufferSize, Format, Marker);\r
-\r
- VA_END (Marker);\r
-\r
- ReturnNum = InternalPrintGraphic (PointX, PointY, ForeGround, BackGround, Buffer, PrintNum);\r
-\r
- FreePool (Buffer);\r
-\r
- return ReturnNum;\r
-}\r
-\r
-/**\r
- Appends a formatted Unicode string to a Null-terminated Unicode string\r
-\r
- This function appends a formatted Unicode string to the Null-terminated\r
- Unicode string specified by String. String is optional and may be NULL.\r
- Storage for the formatted Unicode string returned is allocated using\r
- AllocatePool(). The pointer to the appended string is returned. The caller\r
- is responsible for freeing the returned string.\r
-\r
- If String is not NULL and not aligned on a 16-bit boundary, then ASSERT().\r
- If FormatString is NULL, then ASSERT().\r
- If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
-\r
- @param[in] String A Null-terminated Unicode string.\r
- @param[in] FormatString A Null-terminated Unicode format string.\r
- @param[in] Marker VA_LIST marker for the variable argument list.\r
-\r
- @retval NULL There was not enough available memory.\r
- @return Null-terminated Unicode string is that is the formatted\r
- string appended to String.\r
-**/\r
-CHAR16*\r
-EFIAPI\r
-CatVSPrint (\r
- IN CHAR16 *String, OPTIONAL\r
- IN CONST CHAR16 *FormatString,\r
- IN VA_LIST Marker\r
- )\r
-{\r
- UINTN CharactersRequired;\r
- UINTN SizeRequired;\r
- CHAR16 *BufferToReturn;\r
- VA_LIST ExtraMarker;\r
-\r
- VA_COPY (ExtraMarker, Marker);\r
- CharactersRequired = SPrintLength(FormatString, ExtraMarker);\r
- VA_END (ExtraMarker);\r
-\r
- if (String != NULL) {\r
- SizeRequired = StrSize(String) + (CharactersRequired * sizeof(CHAR16));\r
- } else {\r
- SizeRequired = sizeof(CHAR16) + (CharactersRequired * sizeof(CHAR16));\r
- }\r
-\r
- BufferToReturn = AllocatePool(SizeRequired);\r
-\r
- if (BufferToReturn == NULL) {\r
- return NULL;\r
- } else {\r
- BufferToReturn[0] = L'\0';\r
- }\r
-\r
- if (String != NULL) {\r
- StrCpyS(BufferToReturn, SizeRequired / sizeof(CHAR16), String);\r
- }\r
-\r
- UnicodeVSPrint(BufferToReturn + StrLen(BufferToReturn), (CharactersRequired+1) * sizeof(CHAR16), FormatString, Marker);\r
-\r
- ASSERT(StrSize(BufferToReturn)==SizeRequired);\r
-\r
- return (BufferToReturn);\r
-}\r
-\r
-/**\r
- Appends a formatted Unicode string to a Null-terminated Unicode string\r
-\r
- This function appends a formatted Unicode string to the Null-terminated\r
- Unicode string specified by String. String is optional and may be NULL.\r
- Storage for the formatted Unicode string returned is allocated using\r
- AllocatePool(). The pointer to the appended string is returned. The caller\r
- is responsible for freeing the returned string.\r
-\r
- If String is not NULL and not aligned on a 16-bit boundary, then ASSERT().\r
- If FormatString is NULL, then ASSERT().\r
- If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
-\r
- @param[in] String A Null-terminated Unicode string.\r
- @param[in] FormatString A Null-terminated Unicode format string.\r
- @param[in] ... The variable argument list whose contents are\r
- accessed based on the format string specified by\r
- FormatString.\r
-\r
- @retval NULL There was not enough available memory.\r
- @return Null-terminated Unicode string is that is the formatted\r
- string appended to String.\r
-**/\r
-CHAR16 *\r
-EFIAPI\r
-CatSPrint (\r
- IN CHAR16 *String, OPTIONAL\r
- IN CONST CHAR16 *FormatString,\r
- ...\r
- )\r
-{\r
- VA_LIST Marker;\r
- CHAR16 *NewString;\r
-\r
- VA_START (Marker, FormatString);\r
- NewString = CatVSPrint(String, FormatString, Marker);\r
- VA_END (Marker);\r
- return NewString;\r
-}\r
-\r