/** @file | |
Base Print Library instance Internal Functions definition. | |
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> | |
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. | |
**/ | |
#ifndef __PRINT_LIB_INTERNAL_H__ | |
#define __PRINT_LIB_INTERNAL_H__ | |
#include <Base.h> | |
#include <Library/PrintLib.h> | |
#include <Library/BaseLib.h> | |
#include <Library/DebugLib.h> | |
// | |
// Print primitives | |
// | |
#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 | |
// | |
// 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; | |
/** | |
Worker function that produces a Null-terminated string in an output buffer | |
based on a Null-terminated format string and a VA_LIST argument list. | |
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 | |
this is the main print working routine. | |
If COUNT_ONLY_NO_PRINT is set in Flags, Buffer will not be modified at all. | |
@param[out] Buffer The character buffer to print the results of the | |
parsing of Format into. | |
@param[in] BufferSize The maximum number of characters to put into | |
buffer. | |
@param[in] Flags Initial flags value. | |
Can only have FORMAT_UNICODE, OUTPUT_UNICODE, | |
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. | |
@return The number of characters printed not including the Null-terminator. | |
If COUNT_ONLY_NO_PRINT was set returns the same, but without any | |
modification to Buffer. | |
**/ | |
UINTN | |
BasePrintLibSPrintMarker ( | |
OUT CHAR8 *Buffer, | |
IN UINTN BufferSize, | |
IN UINTN Flags, | |
IN CONST CHAR8 *Format, | |
IN VA_LIST VaListMarker, OPTIONAL | |
IN BASE_LIST BaseListMarker OPTIONAL | |
); | |
/** | |
Worker function that produces a Null-terminated string in an output buffer | |
based on a Null-terminated format string and variable argument list. | |
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 | |
this is the main print working routine | |
@param StartOfBuffer The character buffer to print the results of the parsing | |
of Format into. | |
@param BufferSize The maximum number of characters to put into buffer. | |
Zero means no limit. | |
@param Flags Initial flags value. | |
Can only have FORMAT_UNICODE and OUTPUT_UNICODE set | |
@param FormatString Null-terminated format string. | |
@param ... The variable argument list. | |
@return The number of characters printed. | |
**/ | |
UINTN | |
EFIAPI | |
BasePrintLibSPrint ( | |
OUT CHAR8 *StartOfBuffer, | |
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 | |
placed after that. | |
@param Length The count of character to be placed into Buffer. | |
(Negative value indicates no buffer fill.) | |
@param Character The character to be placed into Buffer. | |
@param Increment The character increment in Buffer. | |
@return Buffer Buffer filled with the input Character. | |
**/ | |
CHAR8 * | |
BasePrintLibFillBuffer ( | |
OUT CHAR8 *Buffer, | |
IN CHAR8 *EndBuffer, | |
IN INTN Length, | |
IN UINTN Character, | |
IN INTN Increment | |
); | |
/** | |
Internal function that convert a number to a string in Buffer. | |
Print worker function that converts a decimal or hexadecimal number to an ASCII string in Buffer. | |
@param Buffer Location to place the ASCII string of Value. | |
@param Value The value to convert to a Decimal or Hexadecimal string in Buffer. | |
@param Radix Radix of the value | |
@return A pointer to the end of buffer filled with ASCII string. | |
**/ | |
CHAR8 * | |
BasePrintLibValueToString ( | |
IN OUT CHAR8 *Buffer, | |
IN INT64 Value, | |
IN UINTN Radix | |
); | |
/** | |
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. | |
The total number of characters placed in Buffer is returned. | |
If the conversion contains more than Width characters, then only the first | |
Width characters are returned, and the total number of characters | |
required to perform the conversion is returned. | |
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 Buffer is NULL, then ASSERT(). | |
If unsupported bits are set in Flags, then ASSERT(). | |
If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT() | |
@param Buffer The pointer to the output buffer for the produced Null-terminated | |
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. | |
@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 | |
); | |
#endif |