2007-06-22 05:21:45 +02:00
|
|
|
/** @file
|
2008-07-15 13:12:43 +02:00
|
|
|
Base Print Library instance Internal Functions definition.
|
2007-06-22 05:21:45 +02:00
|
|
|
|
2018-06-27 15:11:33 +02:00
|
|
|
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
2019-04-04 01:06:00 +02:00
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
2007-06-22 05:21:45 +02:00
|
|
|
|
|
|
|
**/
|
|
|
|
|
2008-07-15 13:12:43 +02:00
|
|
|
#ifndef __PRINT_LIB_INTERNAL_H__
|
|
|
|
#define __PRINT_LIB_INTERNAL_H__
|
2007-06-22 05:21:45 +02:00
|
|
|
|
2007-06-30 01:22:13 +02:00
|
|
|
#include <Base.h>
|
|
|
|
#include <Library/PrintLib.h>
|
|
|
|
#include <Library/BaseLib.h>
|
|
|
|
#include <Library/DebugLib.h>
|
2016-12-19 02:30:57 +01:00
|
|
|
#include <Library/PcdLib.h>
|
2007-06-30 01:22:13 +02:00
|
|
|
|
2007-06-22 05:21:45 +02:00
|
|
|
|
|
|
|
//
|
|
|
|
// Print primitives
|
|
|
|
//
|
2011-08-03 01:33:06 +02:00
|
|
|
#define PREFIX_SIGN BIT1
|
|
|
|
#define PREFIX_BLANK BIT2
|
|
|
|
#define LONG_TYPE BIT4
|
|
|
|
#define OUTPUT_UNICODE BIT6
|
|
|
|
#define FORMAT_UNICODE BIT8
|
|
|
|
#define PAD_TO_WIDTH BIT9
|
|
|
|
#define ARGUMENT_UNICODE BIT10
|
|
|
|
#define PRECISION BIT11
|
|
|
|
#define ARGUMENT_REVERSED BIT12
|
|
|
|
#define COUNT_ONLY_NO_PRINT BIT13
|
2015-06-08 07:37:31 +02:00
|
|
|
#define UNSIGNED_TYPE BIT14
|
2007-06-22 05:21:45 +02:00
|
|
|
|
|
|
|
//
|
|
|
|
// Record date and time information
|
|
|
|
//
|
|
|
|
typedef struct {
|
|
|
|
UINT16 Year;
|
|
|
|
UINT8 Month;
|
|
|
|
UINT8 Day;
|
|
|
|
UINT8 Hour;
|
|
|
|
UINT8 Minute;
|
|
|
|
UINT8 Second;
|
|
|
|
UINT8 Pad1;
|
|
|
|
UINT32 Nanosecond;
|
|
|
|
INT16 TimeZone;
|
|
|
|
UINT8 Daylight;
|
|
|
|
UINT8 Pad2;
|
|
|
|
} TIME;
|
|
|
|
|
|
|
|
/**
|
2018-06-27 15:11:33 +02:00
|
|
|
Worker function that produces a Null-terminated string in an output buffer
|
2007-06-22 05:21:45 +02:00
|
|
|
based on a Null-terminated format string and a VA_LIST argument list.
|
|
|
|
|
2018-06-27 15:11:33 +02:00
|
|
|
VSPrint function to process format and place the results in Buffer. Since a
|
|
|
|
VA_LIST is used this routine allows the nesting of Vararg routines. Thus
|
2007-06-22 05:21:45 +02:00
|
|
|
this is the main print working routine.
|
|
|
|
|
2011-08-03 01:33:06 +02:00
|
|
|
If COUNT_ONLY_NO_PRINT is set in Flags, Buffer will not be modified at all.
|
|
|
|
|
2018-06-27 15:11:33 +02:00
|
|
|
@param[out] Buffer The character buffer to print the results of the
|
2011-08-03 01:33:06 +02:00
|
|
|
parsing of Format into.
|
2018-06-27 15:11:33 +02:00
|
|
|
@param[in] BufferSize The maximum number of characters to put into
|
2011-08-03 01:33:06 +02:00
|
|
|
buffer.
|
|
|
|
@param[in] Flags Initial flags value.
|
2018-06-27 15:11:33 +02:00
|
|
|
Can only have FORMAT_UNICODE, OUTPUT_UNICODE,
|
2011-08-03 01:33:06 +02:00
|
|
|
and COUNT_ONLY_NO_PRINT set.
|
|
|
|
@param[in] Format A Null-terminated format string.
|
|
|
|
@param[in] VaListMarker VA_LIST style variable argument list consumed by
|
|
|
|
processing Format.
|
|
|
|
@param[in] BaseListMarker BASE_LIST style variable argument list consumed
|
|
|
|
by processing Format.
|
2007-06-22 05:21:45 +02:00
|
|
|
|
2010-06-25 23:56:02 +02:00
|
|
|
@return The number of characters printed not including the Null-terminator.
|
2011-08-03 01:33:06 +02:00
|
|
|
If COUNT_ONLY_NO_PRINT was set returns the same, but without any
|
|
|
|
modification to Buffer.
|
2007-06-22 05:21:45 +02:00
|
|
|
|
|
|
|
**/
|
|
|
|
UINTN
|
2009-05-31 01:45:50 +02:00
|
|
|
BasePrintLibSPrintMarker (
|
2007-06-22 05:21:45 +02:00
|
|
|
OUT CHAR8 *Buffer,
|
|
|
|
IN UINTN BufferSize,
|
|
|
|
IN UINTN Flags,
|
|
|
|
IN CONST CHAR8 *Format,
|
2021-12-03 03:00:50 +01:00
|
|
|
IN VA_LIST VaListMarker OPTIONAL,
|
2009-05-31 01:45:50 +02:00
|
|
|
IN BASE_LIST BaseListMarker OPTIONAL
|
2007-06-22 05:21:45 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
2018-06-27 15:11:33 +02:00
|
|
|
Worker function that produces a Null-terminated string in an output buffer
|
2007-06-22 05:21:45 +02:00
|
|
|
based on a Null-terminated format string and variable argument list.
|
|
|
|
|
2018-06-27 15:11:33 +02:00
|
|
|
VSPrint function to process format and place the results in Buffer. Since a
|
|
|
|
VA_LIST is used this routine allows the nesting of Vararg routines. Thus
|
2007-06-22 05:21:45 +02:00
|
|
|
this is the main print working routine
|
|
|
|
|
2010-06-25 23:56:02 +02:00
|
|
|
@param StartOfBuffer The character buffer to print the results of the parsing
|
2007-06-22 05:21:45 +02:00
|
|
|
of Format into.
|
2010-06-25 23:56:02 +02:00
|
|
|
@param BufferSize The maximum number of characters to put into buffer.
|
2007-06-22 05:21:45 +02:00
|
|
|
Zero means no limit.
|
2009-02-04 11:59:54 +01:00
|
|
|
@param Flags Initial flags value.
|
2007-06-22 05:21:45 +02:00
|
|
|
Can only have FORMAT_UNICODE and OUTPUT_UNICODE set
|
|
|
|
@param FormatString Null-terminated format string.
|
2008-07-15 13:12:43 +02:00
|
|
|
@param ... The variable argument list.
|
2007-06-22 05:21:45 +02:00
|
|
|
|
2010-06-25 23:56:02 +02:00
|
|
|
@return The number of characters printed.
|
2007-06-22 05:21:45 +02:00
|
|
|
|
|
|
|
**/
|
|
|
|
UINTN
|
2010-04-29 03:05:44 +02:00
|
|
|
EFIAPI
|
2007-06-22 05:21:45 +02:00
|
|
|
BasePrintLibSPrint (
|
2008-07-15 13:12:43 +02:00
|
|
|
OUT CHAR8 *StartOfBuffer,
|
2007-06-22 05:21:45 +02:00
|
|
|
IN UINTN BufferSize,
|
|
|
|
IN UINTN Flags,
|
|
|
|
IN CONST CHAR8 *FormatString,
|
|
|
|
...
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Internal function that places the character into the Buffer.
|
|
|
|
|
|
|
|
Internal function that places ASCII or Unicode character into the Buffer.
|
|
|
|
|
|
|
|
@param Buffer Buffer to place the Unicode or ASCII string.
|
|
|
|
@param EndBuffer The end of the input Buffer. No characters will be
|
2018-06-27 15:11:33 +02:00
|
|
|
placed after that.
|
2010-06-25 23:56:02 +02:00
|
|
|
@param Length The count of character to be placed into Buffer.
|
2009-01-19 06:18:23 +01:00
|
|
|
(Negative value indicates no buffer fill.)
|
2010-06-25 23:56:02 +02:00
|
|
|
@param Character The character to be placed into Buffer.
|
|
|
|
@param Increment The character increment in Buffer.
|
2007-06-22 05:21:45 +02:00
|
|
|
|
2008-07-15 13:12:43 +02:00
|
|
|
@return Buffer Buffer filled with the input Character.
|
2007-06-22 05:21:45 +02:00
|
|
|
|
|
|
|
**/
|
|
|
|
CHAR8 *
|
|
|
|
BasePrintLibFillBuffer (
|
2008-07-15 13:12:43 +02:00
|
|
|
OUT CHAR8 *Buffer,
|
|
|
|
IN CHAR8 *EndBuffer,
|
|
|
|
IN INTN Length,
|
|
|
|
IN UINTN Character,
|
|
|
|
IN INTN Increment
|
2007-06-22 05:21:45 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
2009-02-04 11:59:54 +01:00
|
|
|
Internal function that convert a number to a string in Buffer.
|
2007-06-22 05:21:45 +02:00
|
|
|
|
2009-02-04 11:59:54 +01:00
|
|
|
Print worker function that converts a decimal or hexadecimal number to an ASCII string in Buffer.
|
2007-06-22 05:21:45 +02:00
|
|
|
|
2009-02-04 11:59:54 +01:00
|
|
|
@param Buffer Location to place the ASCII string of Value.
|
2010-06-25 23:56:02 +02:00
|
|
|
@param Value The value to convert to a Decimal or Hexadecimal string in Buffer.
|
2007-06-22 05:21:45 +02:00
|
|
|
@param Radix Radix of the value
|
|
|
|
|
2009-02-04 11:59:54 +01:00
|
|
|
@return A pointer to the end of buffer filled with ASCII string.
|
2007-06-22 05:21:45 +02:00
|
|
|
|
|
|
|
**/
|
2009-02-04 11:59:54 +01:00
|
|
|
CHAR8 *
|
2007-06-22 05:21:45 +02:00
|
|
|
BasePrintLibValueToString (
|
2018-06-27 15:11:33 +02:00
|
|
|
IN OUT CHAR8 *Buffer,
|
|
|
|
IN INT64 Value,
|
2007-06-22 05:21:45 +02:00
|
|
|
IN UINTN Radix
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Internal function that converts a decimal value to a Null-terminated string.
|
2018-06-27 15:11:33 +02:00
|
|
|
|
|
|
|
Converts the decimal number specified by Value to a Null-terminated
|
2007-06-22 05:21:45 +02:00
|
|
|
string specified by Buffer containing at most Width characters.
|
|
|
|
If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
|
|
|
|
The total number of characters placed in Buffer is returned.
|
|
|
|
If the conversion contains more than Width characters, then only the first
|
2018-06-27 15:11:33 +02:00
|
|
|
Width characters are returned, and the total number of characters
|
2007-06-22 05:21:45 +02:00
|
|
|
required to perform the conversion is returned.
|
2018-06-27 15:11:33 +02:00
|
|
|
Additional conversion parameters are specified in Flags.
|
2007-06-22 05:21:45 +02:00
|
|
|
The Flags bit LEFT_JUSTIFY is always ignored.
|
|
|
|
All conversions are left justified in Buffer.
|
|
|
|
If Width is 0, PREFIX_ZERO is ignored in Flags.
|
|
|
|
If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
|
|
|
|
are inserted every 3rd digit starting from the right.
|
|
|
|
If Value is < 0, then the fist character in Buffer is a '-'.
|
2018-06-27 15:11:33 +02:00
|
|
|
If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,
|
|
|
|
then Buffer is padded with '0' characters so the combination of the optional '-'
|
2007-06-22 05:21:45 +02:00
|
|
|
sign character, '0' characters, digit characters for Value, and the Null-terminator
|
|
|
|
add up to Width characters.
|
|
|
|
|
|
|
|
If Buffer is NULL, then ASSERT().
|
|
|
|
If unsupported bits are set in Flags, then ASSERT().
|
|
|
|
If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
|
|
|
|
|
2010-06-25 23:56:02 +02:00
|
|
|
@param Buffer The pointer to the output buffer for the produced Null-terminated
|
2007-06-22 05:21:45 +02:00
|
|
|
string.
|
|
|
|
@param Flags The bitmask of flags that specify left justification, zero pad,
|
|
|
|
and commas.
|
|
|
|
@param Value The 64-bit signed value to convert to a string.
|
|
|
|
@param Width The maximum number of characters to place in Buffer, not including
|
|
|
|
the Null-terminator.
|
|
|
|
@param Increment Character increment in Buffer.
|
2018-06-27 15:11:33 +02:00
|
|
|
|
2007-06-22 05:21:45 +02:00
|
|
|
@return Total number of characters required to perform the conversion.
|
|
|
|
|
|
|
|
**/
|
|
|
|
UINTN
|
|
|
|
BasePrintLibConvertValueToString (
|
|
|
|
IN OUT CHAR8 *Buffer,
|
|
|
|
IN UINTN Flags,
|
|
|
|
IN INT64 Value,
|
|
|
|
IN UINTN Width,
|
|
|
|
IN UINTN Increment
|
|
|
|
);
|
|
|
|
|
2016-12-23 07:34:26 +01:00
|
|
|
/**
|
|
|
|
Internal function that converts a decimal value to a Null-terminated string.
|
|
|
|
|
|
|
|
Converts the decimal number specified by Value to a Null-terminated string
|
|
|
|
specified by Buffer containing at most Width characters. If Width is 0 then a
|
|
|
|
width of MAXIMUM_VALUE_CHARACTERS is assumed. If the conversion contains more
|
|
|
|
than Width characters, then only the first Width characters are placed in
|
|
|
|
Buffer. Additional conversion parameters are specified in Flags.
|
|
|
|
The Flags bit LEFT_JUSTIFY is always ignored.
|
|
|
|
All conversions are left justified in Buffer.
|
|
|
|
If Width is 0, PREFIX_ZERO is ignored in Flags.
|
|
|
|
If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and
|
|
|
|
commas are inserted every 3rd digit starting from the right.
|
|
|
|
If Value is < 0, then the fist character in Buffer is a '-'.
|
|
|
|
If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,
|
|
|
|
then Buffer is padded with '0' characters so the combination of the optional
|
|
|
|
'-' sign character, '0' characters, digit characters for Value, and the
|
|
|
|
Null-terminator add up to Width characters.
|
|
|
|
|
|
|
|
If an error would be returned, the function will ASSERT().
|
|
|
|
|
|
|
|
@param Buffer The pointer to the output buffer for the produced
|
|
|
|
Null-terminated string.
|
|
|
|
@param BufferSize The size of Buffer in bytes, including the
|
|
|
|
Null-terminator.
|
|
|
|
@param Flags The bitmask of flags that specify left justification,
|
|
|
|
zero pad, and commas.
|
|
|
|
@param Value The 64-bit signed value to convert to a string.
|
|
|
|
@param Width The maximum number of characters to place in Buffer,
|
|
|
|
not including the Null-terminator.
|
|
|
|
@param Increment The character increment in Buffer.
|
|
|
|
|
|
|
|
@retval RETURN_SUCCESS The decimal value is converted.
|
|
|
|
@retval RETURN_BUFFER_TOO_SMALL If BufferSize cannot hold the converted
|
|
|
|
value.
|
|
|
|
@retval RETURN_INVALID_PARAMETER If Buffer is NULL.
|
|
|
|
If Increment is 1 and
|
|
|
|
PcdMaximumAsciiStringLength is not zero,
|
|
|
|
BufferSize is greater than
|
|
|
|
PcdMaximumAsciiStringLength.
|
|
|
|
If Increment is not 1 and
|
|
|
|
PcdMaximumUnicodeStringLength is not zero,
|
|
|
|
BufferSize is greater than
|
|
|
|
(PcdMaximumUnicodeStringLength *
|
|
|
|
sizeof (CHAR16) + 1).
|
|
|
|
If unsupported bits are set in Flags.
|
|
|
|
If both COMMA_TYPE and RADIX_HEX are set in
|
|
|
|
Flags.
|
|
|
|
If Width >= MAXIMUM_VALUE_CHARACTERS.
|
|
|
|
|
|
|
|
**/
|
|
|
|
RETURN_STATUS
|
|
|
|
BasePrintLibConvertValueToStringS (
|
|
|
|
IN OUT CHAR8 *Buffer,
|
|
|
|
IN UINTN BufferSize,
|
|
|
|
IN UINTN Flags,
|
|
|
|
IN INT64 Value,
|
|
|
|
IN UINTN Width,
|
|
|
|
IN UINTN Increment
|
|
|
|
);
|
|
|
|
|
2007-06-22 05:21:45 +02:00
|
|
|
#endif
|