4 Copyright (c) 2006 - 2007, Intel Corporation<BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 // Include common header file for this module.
20 #include "PrintLibInternal.h"
22 #define WARNING_STATUS_NUMBER 4
23 #define ERROR_STATUS_NUMBER 24
24 #define ASSERT_UNICODE_BUFFER(Buffer) ASSERT ((((UINTN) (Buffer)) & 0x01) == 0)
26 GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8
*StatusString
[] = {
27 "Success", // RETURN_SUCCESS = 0
28 "Warning Unknown Glyph", // RETURN_WARN_UNKNOWN_GLYPH = 1
29 "Warning Delete Failure", // RETURN_WARN_DELETE_FAILURE = 2
30 "Warning Write Failure", // RETURN_WARN_WRITE_FAILURE = 3
31 "Warning Buffer Too Small", // RETURN_WARN_BUFFER_TOO_SMALL = 4
32 "Load Error", // RETURN_LOAD_ERROR = 1 | MAX_BIT
33 "Invalid Parameter", // RETURN_INVALID_PARAMETER = 2 | MAX_BIT
34 "Unsupported", // RETURN_UNSUPPORTED = 3 | MAX_BIT
35 "Bad Buffer Size", // RETURN_BAD_BUFFER_SIZE = 4 | MAX_BIT
36 "Buffer Too Small", // RETURN_BUFFER_TOO_SMALL, = 5 | MAX_BIT
37 "Not Ready", // RETURN_NOT_READY = 6 | MAX_BIT
38 "Device Error", // RETURN_DEVICE_ERROR = 7 | MAX_BIT
39 "Write Protected", // RETURN_WRITE_PROTECTED = 8 | MAX_BIT
40 "Out of Resources", // RETURN_OUT_OF_RESOURCES = 9 | MAX_BIT
41 "Volume Corrupt", // RETURN_VOLUME_CORRUPTED = 10 | MAX_BIT
42 "Volume Full", // RETURN_VOLUME_FULL = 11 | MAX_BIT
43 "No Media", // RETURN_NO_MEDIA = 12 | MAX_BIT
44 "Media changed", // RETURN_MEDIA_CHANGED = 13 | MAX_BIT
45 "Not Found", // RETURN_NOT_FOUND = 14 | MAX_BIT
46 "Access Denied", // RETURN_ACCESS_DENIED = 15 | MAX_BIT
47 "No Response", // RETURN_NO_RESPONSE = 16 | MAX_BIT
48 "No mapping", // RETURN_NO_MAPPING = 17 | MAX_BIT
49 "Time out", // RETURN_TIMEOUT = 18 | MAX_BIT
50 "Not started", // RETURN_NOT_STARTED = 19 | MAX_BIT
51 "Already started", // RETURN_ALREADY_STARTED = 20 | MAX_BIT
52 "Aborted", // RETURN_ABORTED = 21 | MAX_BIT
53 "ICMP Error", // RETURN_ICMP_ERROR = 22 | MAX_BIT
54 "TFTP Error", // RETURN_TFTP_ERROR = 23 | MAX_BIT
55 "Protocol Error" // RETURN_PROTOCOL_ERROR = 24 | MAX_BIT
59 Worker function that produces a Null-terminated string in an output buffer
60 based on a Null-terminated format string and a VA_LIST argument list.
62 VSPrint function to process format and place the results in Buffer. Since a
63 VA_LIST is used this rountine allows the nesting of Vararg routines. Thus
64 this is the main print working routine.
66 @param Buffer Character buffer to print the results of the parsing
68 @param BufferSize Maximum number of characters to put into buffer.
69 @param Flags Intial flags value.
70 Can only have FORMAT_UNICODE and OUTPUT_UNICODE set.
71 @param Format Null-terminated format string.
72 @param Marker Vararg list consumed by processing Format.
74 @return Number of characters printed not including the Null-terminator.
82 IN CONST CHAR8
*Format
,
86 CHAR8
*OriginalBuffer
;
88 CHAR8 ValueBuffer
[MAXIMUM_VALUE_CHARACTERS
];
89 UINTN BytesPerOutputCharacter
;
90 UINTN BytesPerFormatCharacter
;
92 UINTN FormatCharacter
;
96 CONST CHAR8
*ArgumentString
;
102 INTN BytesPerArgumentCharacter
;
103 UINTN ArgumentCharacter
;
111 RETURN_STATUS Status
;
113 if (BufferSize
== 0) {
116 ASSERT (Buffer
!= NULL
);
118 if ((Flags
& OUTPUT_UNICODE
) != 0) {
119 BytesPerOutputCharacter
= 2;
121 BytesPerOutputCharacter
= 1;
125 // Reserve space for the Null terminator.
128 OriginalBuffer
= Buffer
;
130 // Set the tag for the end of the input Buffer.
132 EndBuffer
= Buffer
+ BufferSize
* BytesPerOutputCharacter
;
134 if ((Flags
& FORMAT_UNICODE
) != 0) {
136 // Make sure format string cannot contain more than PcdMaximumUnicodeStringLength
137 // Unicode characters if PcdMaximumUnicodeStringLength is not zero.
139 ASSERT (StrSize ((CHAR16
*) Format
) != 0);
140 BytesPerFormatCharacter
= 2;
144 // Make sure format string cannot contain more than PcdMaximumAsciiStringLength
145 // Ascii characters if PcdMaximumAsciiStringLength is not zero.
147 ASSERT (AsciiStrSize (Format
) != 0);
148 BytesPerFormatCharacter
= 1;
155 // Get the first character from the format string
157 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
160 // Loop until the end of the format string is reached or the output buffer is full
162 while (FormatCharacter
!= 0 && Buffer
< EndBuffer
) {
164 // Clear all the flag bits except those that may have been passed in
166 Flags
&= (OUTPUT_UNICODE
| FORMAT_UNICODE
);
169 // Set the default width to zero, and the default precision to 1
179 switch (FormatCharacter
) {
182 // Parse Flags and Width
184 for (Done
= FALSE
; !Done
; ) {
185 Format
+= BytesPerFormatCharacter
;
186 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
187 switch (FormatCharacter
) {
192 Flags
|= LEFT_JUSTIFY
;
195 Flags
|= PREFIX_SIGN
;
198 Flags
|= PREFIX_BLANK
;
208 if ((Flags
& PRECISION
) == 0) {
209 Flags
|= PAD_TO_WIDTH
;
210 Width
= VA_ARG (Marker
, UINTN
);
212 Precision
= VA_ARG (Marker
, UINTN
);
216 if ((Flags
& PRECISION
) == 0) {
217 Flags
|= PREFIX_ZERO
;
228 for (Count
= 0; ((FormatCharacter
>= '0') && (FormatCharacter
<= '9')); ){
229 Count
= (Count
* 10) + FormatCharacter
- '0';
230 Format
+= BytesPerFormatCharacter
;
231 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
233 Format
-= BytesPerFormatCharacter
;
234 if ((Flags
& PRECISION
) == 0) {
235 Flags
|= PAD_TO_WIDTH
;
244 // Make no output if Format string terminates unexpectedly when
245 // looking up for flag, width, precision and type.
247 Format
-= BytesPerFormatCharacter
;
250 // break skipped on purpose.
259 // Handle each argument type
261 switch (FormatCharacter
) {
264 // Flag space, +, 0, L & l are invalid for type p.
266 Flags
&= ~(PREFIX_BLANK
| PREFIX_SIGN
| PREFIX_ZERO
| LONG_TYPE
);
267 if (sizeof (VOID
*) > 4) {
271 Flags
|= PREFIX_ZERO
;
273 // break skipped on purpose
278 // break skipped on purpose
281 if ((Flags
& LONG_TYPE
) == 0) {
282 Value
= (VA_ARG (Marker
, int));
284 Value
= VA_ARG (Marker
, INT64
);
286 if ((Flags
& PREFIX_BLANK
) != 0) {
289 if ((Flags
& PREFIX_SIGN
) != 0) {
292 if ((Flags
& COMMA_TYPE
) != 0) {
295 if ((Flags
& RADIX_HEX
) == 0) {
298 Flags
&= (~PREFIX_ZERO
);
302 Flags
|= PREFIX_SIGN
;
309 if ((Flags
& LONG_TYPE
) == 0 && Value
< 0) {
310 Value
= (unsigned int)Value
;
314 // Convert Value to a reversed string
316 Count
= BasePrintLibValueToString (ValueBuffer
, Value
, Radix
);
317 if (Value
== 0 && Precision
== 0) {
320 ArgumentString
= (CHAR8
*)ValueBuffer
+ Count
;
326 if (Comma
&& Count
!= 0) {
327 Count
+= ((Count
- 1) / 3);
333 Flags
|= ARGUMENT_REVERSED
;
335 if ((Flags
& PREFIX_ZERO
) != 0) {
336 if ((Flags
& LEFT_JUSTIFY
) == 0) {
337 if ((Flags
& PAD_TO_WIDTH
) != 0) {
338 if ((Flags
& PRECISION
) == 0) {
348 Flags
|= ARGUMENT_UNICODE
;
350 // break skipped on purpose
353 ArgumentString
= (CHAR8
*)VA_ARG (Marker
, CHAR8
*);
354 if (ArgumentString
== NULL
) {
355 Flags
&= (~ARGUMENT_UNICODE
);
356 ArgumentString
= "<null string>";
361 Character
= VA_ARG (Marker
, UINTN
) & 0xffff;
362 ArgumentString
= (CHAR8
*)&Character
;
363 Flags
|= ARGUMENT_UNICODE
;
367 TmpGuid
= VA_ARG (Marker
, GUID
*);
368 if (TmpGuid
== NULL
) {
369 ArgumentString
= "<null guid>";
373 MAXIMUM_VALUE_CHARACTERS
,
375 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
388 ArgumentString
= ValueBuffer
;
393 TmpTime
= VA_ARG (Marker
, TIME
*);
394 if (TmpTime
== NULL
) {
395 ArgumentString
= "<null time>";
399 MAXIMUM_VALUE_CHARACTERS
,
401 "%02d/%02d/%04d %02d:%02d",
408 ArgumentString
= ValueBuffer
;
413 Status
= VA_ARG (Marker
, RETURN_STATUS
);
414 ArgumentString
= ValueBuffer
;
415 if (RETURN_ERROR (Status
)) {
419 Index
= Status
& ~MAX_BIT
;
420 if (Index
> 0 && Index
<= ERROR_STATUS_NUMBER
) {
421 ArgumentString
= StatusString
[Index
+ WARNING_STATUS_NUMBER
];
425 if (Index
<= WARNING_STATUS_NUMBER
) {
426 ArgumentString
= StatusString
[Index
];
429 if (ArgumentString
== ValueBuffer
) {
430 BasePrintLibSPrint ((CHAR8
*) ValueBuffer
, MAXIMUM_VALUE_CHARACTERS
, 0, "%08X", Status
);
435 ArgumentString
= "\n\r";
441 // if the type is '%' or unknown, then print it to the screen
443 ArgumentString
= (CHAR8
*)&FormatCharacter
;
444 Flags
|= ARGUMENT_UNICODE
;
450 ArgumentString
= "\n\r";
454 ArgumentString
= (CHAR8
*)&FormatCharacter
;
455 Flags
|= ARGUMENT_UNICODE
;
460 // Retrieve the ArgumentString attriubutes
462 if ((Flags
& ARGUMENT_UNICODE
) != 0) {
463 ArgumentMask
= 0xffff;
464 BytesPerArgumentCharacter
= 2;
467 BytesPerArgumentCharacter
= 1;
469 if ((Flags
& ARGUMENT_REVERSED
) != 0) {
470 BytesPerArgumentCharacter
= -BytesPerArgumentCharacter
;
473 // Compute the number of characters in ArgumentString and store it in Count
474 // ArgumentString is either null-terminated, or it contains Precision characters
476 for (Count
= 0; Count
< Precision
|| ((Flags
& PRECISION
) == 0); Count
++) {
477 ArgumentCharacter
= ((ArgumentString
[Count
* BytesPerArgumentCharacter
] & 0xff) | ((ArgumentString
[Count
* BytesPerArgumentCharacter
+ 1]) << 8)) & ArgumentMask
;
478 if (ArgumentCharacter
== 0) {
484 if (Precision
< Count
) {
489 // Pad before the string
491 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
)) {
492 Buffer
= BasePrintLibFillBuffer (Buffer
, EndBuffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
497 Buffer
= BasePrintLibFillBuffer (Buffer
, EndBuffer
, 1, Prefix
, BytesPerOutputCharacter
);
499 Buffer
= BasePrintLibFillBuffer (Buffer
, EndBuffer
, Precision
- Count
, '0', BytesPerOutputCharacter
);
501 Buffer
= BasePrintLibFillBuffer (Buffer
, EndBuffer
, Precision
- Count
, ' ', BytesPerOutputCharacter
);
503 Buffer
= BasePrintLibFillBuffer (Buffer
, EndBuffer
, 1, Prefix
, BytesPerOutputCharacter
);
508 // Output the Prefix character if it is present
516 // Copy the string into the output buffer performing the required type conversions
518 while (Index
< Count
) {
519 ArgumentCharacter
= ((*ArgumentString
& 0xff) | (*(ArgumentString
+ 1) << 8)) & ArgumentMask
;
521 Buffer
= BasePrintLibFillBuffer (Buffer
, EndBuffer
, 1, ArgumentCharacter
, BytesPerOutputCharacter
);
522 ArgumentString
+= BytesPerArgumentCharacter
;
530 Buffer
= BasePrintLibFillBuffer (Buffer
, EndBuffer
, 1, ',', BytesPerOutputCharacter
);
537 // Pad after the string
539 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) {
540 Buffer
= BasePrintLibFillBuffer (Buffer
, EndBuffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
544 // Get the next character from the format string
546 Format
+= BytesPerFormatCharacter
;
549 // Get the next character from the format string
551 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
555 // Null terminate the Unicode or ASCII string
557 BasePrintLibFillBuffer (Buffer
, EndBuffer
+ BytesPerOutputCharacter
, 1, 0, BytesPerOutputCharacter
);
559 // Make sure output buffer cannot contain more than PcdMaximumUnicodeStringLength
560 // Unicode characters if PcdMaximumUnicodeStringLength is not zero.
562 ASSERT ((((Flags
& OUTPUT_UNICODE
) == 0)) || (StrSize ((CHAR16
*) OriginalBuffer
) != 0));
564 // Make sure output buffer cannot contain more than PcdMaximumAsciiStringLength
565 // ASCII characters if PcdMaximumAsciiStringLength is not zero.
567 ASSERT ((((Flags
& OUTPUT_UNICODE
) != 0)) || (AsciiStrSize (OriginalBuffer
) != 0));
569 return ((Buffer
- OriginalBuffer
) / BytesPerOutputCharacter
);
573 Worker function that produces a Null-terminated string in an output buffer
574 based on a Null-terminated format string and variable argument list.
576 VSPrint function to process format and place the results in Buffer. Since a
577 VA_LIST is used this rountine allows the nesting of Vararg routines. Thus
578 this is the main print working routine.
580 @param Buffer Character buffer to print the results of the parsing
582 @param BufferSize Maximum number of characters to put into buffer.
584 @param Flags Intial flags value.
585 Can only have FORMAT_UNICODE and OUTPUT_UNICODE set
586 @param FormatString Null-terminated format string.
588 @return Number of characters printed not including the Null-terminator.
593 OUT CHAR8
*StartOfBuffer
,
596 IN CONST CHAR8
*FormatString
,
602 VA_START (Marker
, FormatString
);
603 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, Flags
, FormatString
, Marker
);
607 Produces a Null-terminated Unicode string in an output buffer based on
608 a Null-terminated Unicode format string and a VA_LIST argument list
610 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
612 The Unicode string is produced by parsing the format string specified by FormatString.
613 Arguments are pulled from the variable argument list specified by Marker based on the
614 contents of the format string.
615 The number of Unicode characters in the produced output buffer is returned not including
617 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
619 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT().
620 If BufferSize > 1 and StartOfBuffer is not aligned on a 16-bit boundary, then ASSERT().
621 If BufferSize > 1 and FormatString is NULL, then ASSERT().
622 If BufferSize > 1 and FormatString is not aligned on a 16-bit boundary, then ASSERT().
623 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
624 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
626 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
627 contains more than PcdMaximumUnicodeStringLength Unicode characters not including the
628 Null-terminator, then ASSERT().
630 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
632 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
633 @param FormatString Null-terminated Unicode format string.
634 @param Marker VA_LIST marker for the variable argument list.
636 @return The number of Unicode characters in the produced output buffer not including the
643 OUT CHAR16
*StartOfBuffer
,
645 IN CONST CHAR16
*FormatString
,
649 ASSERT_UNICODE_BUFFER(StartOfBuffer
);
650 ASSERT_UNICODE_BUFFER(FormatString
);
651 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, FORMAT_UNICODE
| OUTPUT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
655 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
656 Unicode format string and variable argument list.
658 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
660 The Unicode string is produced by parsing the format string specified by FormatString.
661 Arguments are pulled from the variable argument list based on the contents of the format string.
662 The number of Unicode characters in the produced output buffer is returned not including
664 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
666 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT().
667 If BufferSize > 1 and StartOfBuffer is not aligned on a 16-bit boundary, then ASSERT().
668 If BufferSize > 1 and FormatString is NULL, then ASSERT().
669 If BufferSize > 1 and FormatString is not aligned on a 16-bit boundary, then ASSERT().
670 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
671 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
673 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
674 contains more than PcdMaximumUnicodeStringLength Unicode characters not including the
675 Null-terminator, then ASSERT().
677 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
679 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
680 @param FormatString Null-terminated Unicode format string.
682 @return The number of Unicode characters in the produced output buffer not including the
689 OUT CHAR16
*StartOfBuffer
,
691 IN CONST CHAR16
*FormatString
,
697 VA_START (Marker
, FormatString
);
698 return UnicodeVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
702 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
703 ASCII format string and a VA_LIST argument list
705 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
707 The Unicode string is produced by parsing the format string specified by FormatString.
708 Arguments are pulled from the variable argument list specified by Marker based on the
709 contents of the format string.
710 The number of Unicode characters in the produced output buffer is returned not including
712 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
714 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT().
715 If BufferSize > 1 and StartOfBuffer is not aligned on a 16-bit boundary, then ASSERT().
716 If BufferSize > 1 and FormatString is NULL, then ASSERT().
717 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than
718 PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, then
720 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
721 contains more than PcdMaximumUnicodeStringLength Unicode characters not including the
722 Null-terminator, then ASSERT().
724 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
726 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
727 @param FormatString Null-terminated Unicode format string.
728 @param Marker VA_LIST marker for the variable argument list.
730 @return The number of Unicode characters in the produced output buffer not including the
736 UnicodeVSPrintAsciiFormat (
737 OUT CHAR16
*StartOfBuffer
,
739 IN CONST CHAR8
*FormatString
,
743 ASSERT_UNICODE_BUFFER(StartOfBuffer
);
744 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, OUTPUT_UNICODE
,FormatString
, Marker
);
748 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
749 ASCII format string and variable argument list.
751 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
753 The Unicode string is produced by parsing the format string specified by FormatString.
754 Arguments are pulled from the variable argument list based on the contents of the
756 The number of Unicode characters in the produced output buffer is returned not including
758 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
760 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT().
761 If BufferSize > 1 and StartOfBuffer is not aligned on a 16-bit boundary, then ASSERT().
762 If BufferSize > 1 and FormatString is NULL, then ASSERT().
763 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than
764 PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, then
766 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
767 contains more than PcdMaximumUnicodeStringLength Unicode characters not including the
768 Null-terminator, then ASSERT().
770 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
772 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
773 @param FormatString Null-terminated Unicode format string.
775 @return The number of Unicode characters in the produced output buffer not including the
781 UnicodeSPrintAsciiFormat (
782 OUT CHAR16
*StartOfBuffer
,
784 IN CONST CHAR8
*FormatString
,
790 VA_START (Marker
, FormatString
);
791 return UnicodeVSPrintAsciiFormat (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
795 Converts a decimal value to a Null-terminated Unicode string.
797 Converts the decimal number specified by Value to a Null-terminated Unicode
798 string specified by Buffer containing at most Width characters. No padding of spaces
799 is ever performed. If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
800 The number of Unicode characters in Buffer is returned not including the Null-terminator.
801 If the conversion contains more than Width characters, then only the first
802 Width characters are returned, and the total number of characters
803 required to perform the conversion is returned.
804 Additional conversion parameters are specified in Flags.
806 The Flags bit LEFT_JUSTIFY is always ignored.
807 All conversions are left justified in Buffer.
808 If Width is 0, PREFIX_ZERO is ignored in Flags.
809 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
810 are inserted every 3rd digit starting from the right.
811 If HEX_RADIX is set in Flags, then the output buffer will be
812 formatted in hexadecimal format.
813 If Value is < 0 and HEX_RADIX is not set in Flags, then the fist character in Buffer is a '-'.
814 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,
815 then Buffer is padded with '0' characters so the combination of the optional '-'
816 sign character, '0' characters, digit characters for Value, and the Null-terminator
817 add up to Width characters.
818 If both COMMA_TYPE and HEX_RADIX are set in Flags, then ASSERT().
819 If Buffer is NULL, then ASSERT().
820 If Buffer is not aligned on a 16-bit boundary, then ASSERT().
821 If unsupported bits are set in Flags, then ASSERT().
822 If both COMMA_TYPE and HEX_RADIX are set in Flags, then ASSERT().
823 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
825 @param Buffer Pointer to the output buffer for the produced Null-terminated
827 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
828 @param Value The 64-bit signed value to convert to a string.
829 @param Width The maximum number of Unicode characters to place in Buffer, not including
832 @return The number of Unicode characters in Buffer not including the Null-terminator.
837 UnicodeValueToString (
838 IN OUT CHAR16
*Buffer
,
844 ASSERT_UNICODE_BUFFER(Buffer
);
845 return BasePrintLibConvertValueToString ((CHAR8
*)Buffer
, Flags
, Value
, Width
, 2);
849 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
850 ASCII format string and a VA_LIST argument list.
852 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
854 The ASCII string is produced by parsing the format string specified by FormatString.
855 Arguments are pulled from the variable argument list specified by Marker based on
856 the contents of the format string.
857 The number of ASCII characters in the produced output buffer is returned not including
859 If BufferSize is 0, then no output buffer is produced and 0 is returned.
861 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
862 If BufferSize > 0 and FormatString is NULL, then ASSERT().
863 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than
864 PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, then
866 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
867 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
868 Null-terminator, then ASSERT().
870 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
872 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
873 @param FormatString Null-terminated Unicode format string.
874 @param Marker VA_LIST marker for the variable argument list.
876 @return The number of ASCII characters in the produced output buffer not including the
883 OUT CHAR8
*StartOfBuffer
,
885 IN CONST CHAR8
*FormatString
,
889 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, 0, FormatString
, Marker
);
893 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
894 ASCII format string and variable argument list.
896 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
898 The ASCII string is produced by parsing the format string specified by FormatString.
899 Arguments are pulled from the variable argument list based on the contents of the
901 The number of ASCII characters in the produced output buffer is returned not including
903 If BufferSize is 0, then no output buffer is produced and 0 is returned.
905 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
906 If BufferSize > 0 and FormatString is NULL, then ASSERT().
907 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than
908 PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, then
910 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
911 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
912 Null-terminator, then ASSERT().
914 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
916 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
917 @param FormatString Null-terminated Unicode format string.
919 @return The number of ASCII characters in the produced output buffer not including the
926 OUT CHAR8
*StartOfBuffer
,
928 IN CONST CHAR8
*FormatString
,
934 VA_START (Marker
, FormatString
);
935 return AsciiVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
939 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
940 ASCII format string and a VA_LIST argument list.
942 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
944 The ASCII string is produced by parsing the format string specified by FormatString.
945 Arguments are pulled from the variable argument list specified by Marker based on
946 the contents of the format string.
947 The number of ASCII characters in the produced output buffer is returned not including
949 If BufferSize is 0, then no output buffer is produced and 0 is returned.
951 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
952 If BufferSize > 0 and FormatString is NULL, then ASSERT().
953 If BufferSize > 0 and FormatString is not aligned on a 16-bit boundary, then ASSERT().
954 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
955 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
957 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
958 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
959 Null-terminator, then ASSERT().
961 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
963 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
964 @param FormatString Null-terminated Unicode format string.
965 @param Marker VA_LIST marker for the variable argument list.
967 @return The number of ASCII characters in the produced output buffer not including the
973 AsciiVSPrintUnicodeFormat (
974 OUT CHAR8
*StartOfBuffer
,
976 IN CONST CHAR16
*FormatString
,
980 ASSERT_UNICODE_BUFFER (FormatString
);
981 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, FORMAT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
985 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
986 ASCII format string and variable argument list.
988 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
990 The ASCII string is produced by parsing the format string specified by FormatString.
991 Arguments are pulled from the variable argument list based on the contents of the
993 The number of ASCII characters in the produced output buffer is returned not including
995 If BufferSize is 0, then no output buffer is produced and 0 is returned.
997 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
998 If BufferSize > 0 and FormatString is NULL, then ASSERT().
999 If BufferSize > 0 and FormatString is not aligned on a 16-bit boundary, then ASSERT().
1000 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
1001 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
1003 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
1004 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
1005 Null-terminator, then ASSERT().
1007 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
1009 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
1010 @param FormatString Null-terminated Unicode format string.
1012 @return The number of ASCII characters in the produced output buffer not including the
1018 AsciiSPrintUnicodeFormat (
1019 OUT CHAR8
*StartOfBuffer
,
1020 IN UINTN BufferSize
,
1021 IN CONST CHAR16
*FormatString
,
1027 VA_START (Marker
, FormatString
);
1028 return AsciiVSPrintUnicodeFormat (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
1033 Converts a decimal value to a Null-terminated ASCII string.
1035 Converts the decimal number specified by Value to a Null-terminated ASCII string
1036 specified by Buffer containing at most Width characters. No padding of spaces
1038 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
1039 The number of ASCII characters in Buffer is returned not including the Null-terminator.
1040 If the conversion contains more than Width characters, then only the first Width
1041 characters are returned, and the total number of characters required to perform
1042 the conversion is returned.
1043 Additional conversion parameters are specified in Flags.
1044 The Flags bit LEFT_JUSTIFY is always ignored.
1045 All conversions are left justified in Buffer.
1046 If Width is 0, PREFIX_ZERO is ignored in Flags.
1047 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
1048 are inserted every 3rd digit starting from the right.
1049 If HEX_RADIX is set in Flags, then the output buffer will be
1050 formatted in hexadecimal format.
1051 If Value is < 0 and HEX_RADIX is not set in Flags, then the fist character in Buffer is a '-'.
1052 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,
1053 then Buffer is padded with '0' characters so the combination of the optional '-'
1054 sign character, '0' characters, digit characters for Value, and the Null-terminator
1055 add up to Width characters.
1057 If Buffer is NULL, then ASSERT().
1058 If unsupported bits are set in Flags, then ASSERT().
1059 If both COMMA_TYPE and HEX_RADIX are set in Flags, then ASSERT().
1060 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
1062 @param Buffer Pointer to the output buffer for the produced Null-terminated
1064 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
1065 @param Value The 64-bit signed value to convert to a string.
1066 @param Width The maximum number of ASCII characters to place in Buffer, not including
1067 the Null-terminator.
1069 @return The number of ASCII characters in Buffer not including the Null-terminator.
1074 AsciiValueToString (
1075 IN OUT CHAR8
*Buffer
,
1081 return BasePrintLibConvertValueToString (Buffer
, Flags
, Value
, Width
, 1);