mirror of https://github.com/acidanthera/audk.git
155 lines
4.1 KiB
C
155 lines
4.1 KiB
C
/*++
|
|
|
|
Copyright (c) 2004 - 2007, Intel Corporation
|
|
All rights reserved. This program and the accompanying materials
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
Module Name:
|
|
|
|
Print.c
|
|
|
|
Abstract:
|
|
|
|
Basic Ascii AvSPrintf() function named VSPrint(). VSPrint() enables very
|
|
simple implemenation of SPrint() and Print() to support debug.
|
|
|
|
You can not Print more than EFI_DRIVER_LIB_MAX_PRINT_BUFFER characters at a
|
|
time. This makes the implementation very simple.
|
|
|
|
VSPrint, Print, SPrint format specification has the follwoing form
|
|
|
|
%[flags][width]type
|
|
|
|
flags:
|
|
'-' - Left justify
|
|
'+' - Prefix a sign
|
|
' ' - Prefix a blank
|
|
',' - Place commas in numberss
|
|
'0' - Prefix for width with zeros
|
|
'l' - UINT64
|
|
'L' - UINT64
|
|
|
|
width:
|
|
'*' - Get width from a UINTN argumnet from the argument list
|
|
Decimal number that represents width of print
|
|
|
|
type:
|
|
'X' - argument is a UINTN hex number, prefix '0'
|
|
'x' - argument is a hex number
|
|
'd' - argument is a decimal number
|
|
'a' - argument is an ascii string
|
|
'S','s' - argument is an Unicode string
|
|
'g' - argument is a pointer to an EFI_GUID
|
|
't' - argument is a pointer to an EFI_TIME structure
|
|
'c' - argument is an ascii character
|
|
'r' - argument is EFI_STATUS
|
|
'%' - Print a %
|
|
|
|
--*/
|
|
|
|
#include "Tiano.h"
|
|
#include "EfiDriverLib.h"
|
|
#include "TianoCommon.h"
|
|
#include "EfiCommonLib.h"
|
|
#include "PrintWidth.h"
|
|
#include "EfiPrintLib.h"
|
|
#include "Print.h"
|
|
|
|
UINTN
|
|
SPrint (
|
|
OUT CHAR_W *Buffer,
|
|
IN UINTN BufferSize,
|
|
IN CONST CHAR_W *Format,
|
|
...
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
SPrint function to process format and place the results in Buffer.
|
|
|
|
Arguments:
|
|
|
|
Buffer - Wide char buffer to print the results of the parsing of Format into.
|
|
|
|
BufferSize - Maximum number of characters to put into buffer. Zero means no
|
|
limit.
|
|
|
|
Format - Format string see file header for more details.
|
|
|
|
... - Vararg list consumed by processing Format.
|
|
|
|
Returns:
|
|
|
|
Number of characters printed.
|
|
|
|
--*/
|
|
{
|
|
UINTN Return;
|
|
VA_LIST Marker;
|
|
|
|
VA_START (Marker, Format);
|
|
Return = VSPrint (Buffer, BufferSize, Format, Marker);
|
|
VA_END (Marker);
|
|
|
|
return Return;
|
|
}
|
|
|
|
UINTN
|
|
EFIAPI
|
|
VSPrint (
|
|
OUT CHAR_W *StartOfBuffer,
|
|
IN UINTN BufferSize,
|
|
IN CONST CHAR_W *FormatString,
|
|
IN VA_LIST Marker
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
VSPrint function to process format and place the results in Buffer. Since a
|
|
VA_LIST is used this rountine allows the nesting of Vararg routines. Thus
|
|
this is the main print working routine
|
|
|
|
Arguments:
|
|
|
|
StartOfBuffer - Unicode buffer to print the results of the parsing of Format into.
|
|
|
|
BufferSize - Maximum number of characters to put into buffer. Zero means
|
|
no limit.
|
|
|
|
FormatString - Unicode format string see file header for more details.
|
|
|
|
Marker - Vararg list consumed by processing Format.
|
|
|
|
Returns:
|
|
|
|
Number of characters printed.
|
|
|
|
--*/
|
|
{
|
|
EFI_STATUS Status;
|
|
EFI_PRINT_PROTOCOL *PrintProtocol;
|
|
|
|
Status = gBS->LocateProtocol (
|
|
&gEfiPrintProtocolGuid,
|
|
NULL,
|
|
(VOID*)&PrintProtocol
|
|
);
|
|
if (EFI_ERROR (Status)) {
|
|
return 0;
|
|
} else {
|
|
return PrintProtocol->VSPrint (
|
|
StartOfBuffer,
|
|
BufferSize,
|
|
FormatString,
|
|
Marker
|
|
);
|
|
}
|
|
}
|