4 Copyright (c) 2006, 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.
13 Module Name: PrintLib.c
17 #include "PrintLibInternal.h"
19 #define WARNING_STATUS_NUMBER 4
20 #define ERROR_STATUS_NUMBER 24
22 STATIC CONST CHAR8
*StatusString
[] = {
23 "Success", // RETURN_SUCCESS = 0
24 "Warning Unknown Glyph", // RETURN_WARN_UNKNOWN_GLYPH = 1
25 "Warning Delete Failure", // RETURN_WARN_DELETE_FAILURE = 2
26 "Warning Write Failure", // RETURN_WARN_WRITE_FAILURE = 3
27 "Warning Buffer Too Small", // RETURN_WARN_BUFFER_TOO_SMALL = 4
28 "Load Error", // RETURN_LOAD_ERROR = 1 | MAX_BIT
29 "Invalid Parameter", // RETURN_INVALID_PARAMETER = 2 | MAX_BIT
30 "Unsupported", // RETURN_UNSUPPORTED = 3 | MAX_BIT
31 "Bad Buffer Size", // RETURN_BAD_BUFFER_SIZE = 4 | MAX_BIT
32 "Buffer Too Small", // RETURN_BUFFER_TOO_SMALL, = 5 | MAX_BIT
33 "Not Ready", // RETURN_NOT_READY = 6 | MAX_BIT
34 "Device Error", // RETURN_DEVICE_ERROR = 7 | MAX_BIT
35 "Write Protected", // RETURN_WRITE_PROTECTED = 8 | MAX_BIT
36 "Out of Resources", // RETURN_OUT_OF_RESOURCES = 9 | MAX_BIT
37 "Volume Corrupt", // RETURN_VOLUME_CORRUPTED = 10 | MAX_BIT
38 "Volume Full", // RETURN_VOLUME_FULL = 11 | MAX_BIT
39 "No Media", // RETURN_NO_MEDIA = 12 | MAX_BIT
40 "Media changed", // RETURN_MEDIA_CHANGED = 13 | MAX_BIT
41 "Not Found", // RETURN_NOT_FOUND = 14 | MAX_BIT
42 "Access Denied", // RETURN_ACCESS_DENIED = 15 | MAX_BIT
43 "No Response", // RETURN_NO_RESPONSE = 16 | MAX_BIT
44 "No mapping", // RETURN_NO_MAPPING = 17 | MAX_BIT
45 "Time out", // RETURN_TIMEOUT = 18 | MAX_BIT
46 "Not started", // RETURN_NOT_STARTED = 19 | MAX_BIT
47 "Already started", // RETURN_ALREADY_STARTED = 20 | MAX_BIT
48 "Aborted", // RETURN_ABORTED = 21 | MAX_BIT
49 "ICMP Error", // RETURN_ICMP_ERROR = 22 | MAX_BIT
50 "TFTP Error", // RETURN_TFTP_ERROR = 23 | MAX_BIT
51 "Protocol Error" // RETURN_PROTOCOL_ERROR = 24 | MAX_BIT
55 Worker function that produces a Null-terminated string in an output buffer
56 based on a Null-terminated format string and a VA_LIST argument list.
58 VSPrint function to process format and place the results in Buffer. Since a
59 VA_LIST is used this rountine allows the nesting of Vararg routines. Thus
60 this is the main print working routine.
62 @param Buffer Character buffer to print the results of the parsing
64 @param BufferSize Maximum number of characters to put into buffer.
65 @param Flags Intial flags value.
66 Can only have FORMAT_UNICODE and OUTPUT_UNICODE set.
67 @param Format Null-terminated format string.
68 @param Marker Vararg list consumed by processing Format.
70 @return Number of characters printed not including the Null-terminator.
78 IN CONST CHAR8
*Format
,
82 CHAR8
*OriginalBuffer
;
83 CHAR8 ValueBuffer
[MAXIMUM_VALUE_CHARACTERS
];
84 UINTN BytesPerOutputCharacter
;
85 UINTN BytesPerFormatCharacter
;
87 UINTN FormatCharacter
;
91 CONST CHAR8
*ArgumentString
;
97 INTN BytesPerArgumentCharacter
;
98 UINTN ArgumentCharacter
;
106 RETURN_STATUS Status
;
108 if (BufferSize
== 0) {
111 ASSERT (Buffer
!= NULL
);
113 OriginalBuffer
= Buffer
;
115 if ((Flags
& OUTPUT_UNICODE
) != 0) {
116 BytesPerOutputCharacter
= 2;
118 BytesPerOutputCharacter
= 1;
120 if ((Flags
& FORMAT_UNICODE
) != 0) {
122 // Make sure format string cannot contain more than PcdMaximumUnicodeStringLength
123 // Unicode characters if PcdMaximumUnicodeStringLength is not zero.
125 ASSERT (StrSize ((CHAR16
*) Format
) != 0);
126 BytesPerFormatCharacter
= 2;
130 // Make sure format string cannot contain more than PcdMaximumAsciiStringLength
131 // Ascii characters if PcdMaximumAsciiStringLength is not zero.
133 ASSERT (AsciiStrSize (Format
) != 0);
134 BytesPerFormatCharacter
= 1;
139 // Reserve space for the Null terminator.
144 // Get the first character from the format string
146 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
149 // Loop until the end of the format string is reached or the output buffer is full
151 while (FormatCharacter
!= 0 && BufferSize
> 0) {
153 // Clear all the flag bits except those that may have been passed in
155 Flags
&= (OUTPUT_UNICODE
| FORMAT_UNICODE
);
158 // Set the default width to zero, and the default precision to 1
168 switch (FormatCharacter
) {
171 // Parse Flags and Width
173 for (Done
= FALSE
; !Done
; ) {
174 Format
+= BytesPerFormatCharacter
;
175 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
176 switch (FormatCharacter
) {
181 Flags
|= LEFT_JUSTIFY
;
184 Flags
|= PREFIX_SIGN
;
187 Flags
|= PREFIX_BLANK
;
197 if ((Flags
& PRECISION
) == 0) {
198 Flags
|= PAD_TO_WIDTH
;
199 Width
= VA_ARG (Marker
, UINTN
);
201 Precision
= VA_ARG (Marker
, UINTN
);
205 if ((Flags
& PRECISION
) == 0) {
206 Flags
|= PREFIX_ZERO
;
217 for (Count
= 0; ((FormatCharacter
>= '0') && (FormatCharacter
<= '9')); ){
218 Count
= (Count
* 10) + FormatCharacter
- '0';
219 Format
+= BytesPerFormatCharacter
;
220 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
222 Format
-= BytesPerFormatCharacter
;
223 if ((Flags
& PRECISION
) == 0) {
224 Flags
|= PAD_TO_WIDTH
;
233 // Make no output if Format string terminates unexpectedly when
234 // looking up for flag, width, precision and type.
236 Format
-= BytesPerFormatCharacter
;
239 // break skiped on purpose.
248 // Limit the maximum field width to the remaining characters in the output buffer
250 if (Width
> BufferSize
) {
255 // Handle each argument type
257 switch (FormatCharacter
) {
259 if (sizeof (VOID
*) > 4) {
263 Flags
|= PREFIX_ZERO
;
265 // break skiped on purpose
270 // break skiped on purpose
273 if ((Flags
& LONG_TYPE
) == 0) {
274 Value
= (VA_ARG (Marker
, int));
276 Value
= VA_ARG (Marker
, INT64
);
278 if ((Flags
& PREFIX_BLANK
) != 0) {
281 if ((Flags
& PREFIX_SIGN
) != 0) {
284 if ((Flags
& COMMA_TYPE
) != 0) {
287 if ((Flags
& RADIX_HEX
) == 0) {
290 Flags
&= (~PREFIX_ZERO
);
294 Flags
|= PREFIX_SIGN
;
301 if ((Flags
& LONG_TYPE
) == 0 && Value
< 0) {
302 Value
= (unsigned int)Value
;
306 // Convert Value to a reversed string
308 Count
= BasePrintLibValueToString (ValueBuffer
, Value
, Radix
);
309 if (Value
== 0 && Precision
== 0) {
312 ArgumentString
= (CHAR8
*)ValueBuffer
+ Count
;
318 if (Comma
&& Count
!= 0) {
319 Count
+= ((Count
- 1) / 3);
325 Flags
|= ARGUMENT_REVERSED
;
327 if ((Flags
& PREFIX_ZERO
) != 0) {
328 if ((Flags
& LEFT_JUSTIFY
) == 0) {
329 if ((Flags
& PAD_TO_WIDTH
) != 0) {
330 if ((Flags
& PRECISION
) == 0) {
340 Flags
|= ARGUMENT_UNICODE
;
342 // break skipped on purpose
345 ArgumentString
= (CHAR8
*)VA_ARG (Marker
, CHAR8
*);
346 if (ArgumentString
== NULL
) {
347 Flags
&= (~ARGUMENT_UNICODE
);
348 ArgumentString
= "<null string>";
353 Character
= VA_ARG (Marker
, UINTN
) & 0xffff;
354 ArgumentString
= (CHAR8
*)&Character
;
355 Flags
|= ARGUMENT_UNICODE
;
359 TmpGuid
= VA_ARG (Marker
, GUID
*);
360 if (TmpGuid
== NULL
) {
361 ArgumentString
= "<null guid>";
365 MAXIMUM_VALUE_CHARACTERS
,
367 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
380 ArgumentString
= ValueBuffer
;
385 TmpTime
= VA_ARG (Marker
, TIME
*);
386 if (TmpTime
== NULL
) {
387 ArgumentString
= "<null time>";
391 MAXIMUM_VALUE_CHARACTERS
,
393 "%02d/%02d/%04d %02d:%02d",
400 ArgumentString
= ValueBuffer
;
405 Status
= VA_ARG (Marker
, RETURN_STATUS
);
406 ArgumentString
= ValueBuffer
;
407 if (RETURN_ERROR (Status
)) {
411 Index
= Status
& ~MAX_BIT
;
412 if (Index
> 0 && Index
<= ERROR_STATUS_NUMBER
) {
413 ArgumentString
= StatusString
[Index
+ WARNING_STATUS_NUMBER
];
417 if (Index
<= WARNING_STATUS_NUMBER
) {
418 ArgumentString
= StatusString
[Index
];
421 if (ArgumentString
== ValueBuffer
) {
422 BasePrintLibSPrint ((CHAR8
*) ValueBuffer
, MAXIMUM_VALUE_CHARACTERS
, 0, "%08X", Status
);
427 ArgumentString
= "\n\r";
433 // if the type is '%' or unknown, then print it to the screen
435 ArgumentString
= (CHAR8
*)&FormatCharacter
;
436 Flags
|= ARGUMENT_UNICODE
;
442 ArgumentString
= "\n\r";
446 ArgumentString
= (CHAR8
*)&FormatCharacter
;
447 Flags
|= ARGUMENT_UNICODE
;
452 // Retrieve the ArgumentString attriubutes
454 if ((Flags
& ARGUMENT_UNICODE
) != 0) {
455 ArgumentMask
= 0xffff;
456 BytesPerArgumentCharacter
= 2;
459 BytesPerArgumentCharacter
= 1;
461 if ((Flags
& ARGUMENT_REVERSED
) != 0) {
462 BytesPerArgumentCharacter
= -BytesPerArgumentCharacter
;
465 // Compute the number of characters in ArgumentString and store it in Count
466 // ArgumentString is either null-terminated, or it contains Precision characters
468 for (Count
= 0; Count
< Precision
|| ((Flags
& PRECISION
) == 0); Count
++) {
469 ArgumentCharacter
= ((ArgumentString
[Count
* BytesPerArgumentCharacter
] & 0xff) | ((ArgumentString
[Count
* BytesPerArgumentCharacter
+ 1]) << 8)) & ArgumentMask
;
470 if (ArgumentCharacter
== 0) {
477 // Limit the length of the string to append to the remaining characters in the output buffer
479 if (Count
> BufferSize
) {
482 if (Precision
< Count
) {
487 // Pad before the string
489 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
)) {
490 Buffer
= BasePrintLibFillBuffer (Buffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
495 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, Prefix
, BytesPerOutputCharacter
);
497 Buffer
= BasePrintLibFillBuffer (Buffer
, Precision
- Count
, '0', BytesPerOutputCharacter
);
499 Buffer
= BasePrintLibFillBuffer (Buffer
, Precision
- Count
, ' ', BytesPerOutputCharacter
);
501 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, Prefix
, BytesPerOutputCharacter
);
506 // Output the Prefix character if it is present
514 // Copy the string into the output buffer performing the required type conversions
516 while (Index
< Count
) {
517 ArgumentCharacter
= ((*ArgumentString
& 0xff) | (*(ArgumentString
+ 1) << 8)) & ArgumentMask
;
519 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, ArgumentCharacter
, BytesPerOutputCharacter
);
520 ArgumentString
+= BytesPerArgumentCharacter
;
528 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, ',', BytesPerOutputCharacter
);
535 // Pad after the string
537 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) {
538 Buffer
= BasePrintLibFillBuffer (Buffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
542 // Reduce the number of characters
547 // Get the next character from the format string
549 Format
+= BytesPerFormatCharacter
;
552 // Get the next character from the format string
554 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
558 // Null terminate the Unicode or ASCII string
560 BasePrintLibFillBuffer (Buffer
, 1, 0, BytesPerOutputCharacter
);
562 // Make sure output buffer cannot contain more than PcdMaximumUnicodeStringLength
563 // Unicode characters if PcdMaximumUnicodeStringLength is not zero.
565 ASSERT ((((Flags
& OUTPUT_UNICODE
) == 0)) || (StrSize ((CHAR16
*) OriginalBuffer
) != 0));
567 // Make sure output buffer cannot contain more than PcdMaximumAsciiStringLength
568 // ASCII characters if PcdMaximumAsciiStringLength is not zero.
570 ASSERT ((((Flags
& OUTPUT_UNICODE
) != 0)) || (AsciiStrSize (OriginalBuffer
) != 0));
572 return ((Buffer
- OriginalBuffer
) / BytesPerOutputCharacter
);
576 Worker function that produces a Null-terminated string in an output buffer
577 based on a Null-terminated format string and variable argument list.
579 VSPrint function to process format and place the results in Buffer. Since a
580 VA_LIST is used this rountine allows the nesting of Vararg routines. Thus
581 this is the main print working routine.
583 @param Buffer Character buffer to print the results of the parsing
585 @param BufferSize Maximum number of characters to put into buffer.
587 @param Flags Intial flags value.
588 Can only have FORMAT_UNICODE and OUTPUT_UNICODE set
589 @param FormatString Null-terminated format string.
591 @return Number of characters printed not including the Null-terminator.
596 OUT CHAR8
*StartOfBuffer
,
599 IN CONST CHAR8
*FormatString
,
605 VA_START (Marker
, FormatString
);
606 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, Flags
, FormatString
, Marker
);
610 Produces a Null-terminated Unicode string in an output buffer based on
611 a Null-terminated Unicode format string and a VA_LIST argument list
613 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
615 The Unicode string is produced by parsing the format string specified by FormatString.
616 Arguments are pulled from the variable argument list specified by Marker based on the
617 contents of the format string.
618 The number of Unicode characters in the produced output buffer is returned not including
620 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
622 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT().
623 If BufferSize > 1 and FormatString is NULL, then ASSERT().
624 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
625 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
627 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
628 contains more than PcdMaximumUnicodeStringLength Unicode characters not including the
629 Null-terminator, then ASSERT().
631 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
633 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
634 @param FormatString Null-terminated Unicode format string.
635 @param Marker VA_LIST marker for the variable argument list.
637 @return The number of Unicode characters in the produced output buffer not including the
644 OUT CHAR16
*StartOfBuffer
,
646 IN CONST CHAR16
*FormatString
,
650 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, FORMAT_UNICODE
| OUTPUT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
654 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
655 Unicode format string and variable argument list.
657 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
659 The Unicode string is produced by parsing the format string specified by FormatString.
660 Arguments are pulled from the variable argument list based on the contents of the format string.
661 The number of Unicode characters in the produced output buffer is returned not including
663 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
665 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT().
666 If BufferSize > 1 and FormatString is NULL, then ASSERT().
667 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
668 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
670 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
671 contains more than PcdMaximumUnicodeStringLength Unicode characters not including the
672 Null-terminator, then ASSERT().
674 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
676 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
677 @param FormatString Null-terminated Unicode format string.
679 @return The number of Unicode characters in the produced output buffer not including the
686 OUT CHAR16
*StartOfBuffer
,
688 IN CONST CHAR16
*FormatString
,
694 VA_START (Marker
, FormatString
);
695 return UnicodeVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
699 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
700 ASCII format string and a VA_LIST argument list
702 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
704 The Unicode string is produced by parsing the format string specified by FormatString.
705 Arguments are pulled from the variable argument list specified by Marker based on the
706 contents of the format string.
707 The number of Unicode characters in the produced output buffer is returned not including
709 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
711 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT().
712 If BufferSize > 1 and FormatString is NULL, then ASSERT().
713 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than
714 PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, then
716 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
717 contains more than PcdMaximumUnicodeStringLength Unicode characters not including the
718 Null-terminator, then ASSERT().
720 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
722 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
723 @param FormatString Null-terminated Unicode format string.
724 @param Marker VA_LIST marker for the variable argument list.
726 @return The number of Unicode characters in the produced output buffer not including the
732 UnicodeVSPrintAsciiFormat (
733 OUT CHAR16
*StartOfBuffer
,
735 IN CONST CHAR8
*FormatString
,
739 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, OUTPUT_UNICODE
,FormatString
, Marker
);
743 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
744 ASCII format string and variable argument list.
746 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
748 The Unicode string is produced by parsing the format string specified by FormatString.
749 Arguments are pulled from the variable argument list based on the contents of the
751 The number of Unicode characters in the produced output buffer is returned not including
753 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
755 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT().
756 If BufferSize > 1 and FormatString is NULL, then ASSERT().
757 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than
758 PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, then
760 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
761 contains more than PcdMaximumUnicodeStringLength Unicode characters not including the
762 Null-terminator, then ASSERT().
764 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
766 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
767 @param FormatString Null-terminated Unicode format string.
769 @return The number of Unicode characters in the produced output buffer not including the
775 UnicodeSPrintAsciiFormat (
776 OUT CHAR16
*StartOfBuffer
,
778 IN CONST CHAR8
*FormatString
,
784 VA_START (Marker
, FormatString
);
785 return UnicodeVSPrintAsciiFormat (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
789 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
790 ASCII format string and a VA_LIST argument list.
792 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
794 The ASCII string is produced by parsing the format string specified by FormatString.
795 Arguments are pulled from the variable argument list specified by Marker based on
796 the contents of the format string.
797 The number of ASCII characters in the produced output buffer is returned not including
799 If BufferSize is 0, then no output buffer is produced and 0 is returned.
801 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
802 If BufferSize > 0 and FormatString is NULL, then ASSERT().
803 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than
804 PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, then
806 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
807 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
808 Null-terminator, then ASSERT().
810 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
812 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
813 @param FormatString Null-terminated Unicode format string.
814 @param Marker VA_LIST marker for the variable argument list.
816 @return The number of ASCII characters in the produced output buffer not including the
823 OUT CHAR8
*StartOfBuffer
,
825 IN CONST CHAR8
*FormatString
,
829 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, 0, FormatString
, Marker
);
833 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
834 ASCII format string and variable argument list.
836 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
838 The ASCII string is produced by parsing the format string specified by FormatString.
839 Arguments are pulled from the variable argument list based on the contents of the
841 The number of ASCII characters in the produced output buffer is returned not including
843 If BufferSize is 0, then no output buffer is produced and 0 is returned.
845 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
846 If BufferSize > 0 and FormatString is NULL, then ASSERT().
847 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than
848 PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, then
850 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
851 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
852 Null-terminator, then ASSERT().
854 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
856 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
857 @param FormatString Null-terminated Unicode format string.
859 @return The number of ASCII characters in the produced output buffer not including the
866 OUT CHAR8
*StartOfBuffer
,
868 IN CONST CHAR8
*FormatString
,
874 VA_START (Marker
, FormatString
);
875 return AsciiVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
879 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
880 ASCII format string and a VA_LIST argument list.
882 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
884 The ASCII string is produced by parsing the format string specified by FormatString.
885 Arguments are pulled from the variable argument list specified by Marker based on
886 the contents of the format string.
887 The number of ASCII characters in the produced output buffer is returned not including
889 If BufferSize is 0, then no output buffer is produced and 0 is returned.
891 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
892 If BufferSize > 0 and FormatString is NULL, then ASSERT().
893 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
894 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
896 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
897 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
898 Null-terminator, then ASSERT().
900 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
902 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
903 @param FormatString Null-terminated Unicode format string.
904 @param Marker VA_LIST marker for the variable argument list.
906 @return The number of ASCII characters in the produced output buffer not including the
912 AsciiVSPrintUnicodeFormat (
913 OUT CHAR8
*StartOfBuffer
,
915 IN CONST CHAR16
*FormatString
,
919 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, FORMAT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
923 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
924 ASCII format string and variable argument list.
926 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
928 The ASCII string is produced by parsing the format string specified by FormatString.
929 Arguments are pulled from the variable argument list based on the contents of the
931 The number of ASCII characters in the produced output buffer is returned not including
933 If BufferSize is 0, then no output buffer is produced and 0 is returned.
935 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
936 If BufferSize > 0 and FormatString is NULL, then ASSERT().
937 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
938 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
940 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
941 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
942 Null-terminator, then ASSERT().
944 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
946 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
947 @param FormatString Null-terminated Unicode format string.
949 @return The number of ASCII characters in the produced output buffer not including the
955 AsciiSPrintUnicodeFormat (
956 OUT CHAR8
*StartOfBuffer
,
958 IN CONST CHAR16
*FormatString
,
964 VA_START (Marker
, FormatString
);
965 return AsciiVSPrintUnicodeFormat (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
969 Converts a decimal value to a Null-terminated Unicode string.
971 Converts the decimal number specified by Value to a Null-terminated Unicode
972 string specified by Buffer containing at most Width characters.
973 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
974 The number of Unicode characters in Buffer is returned not including the Null-terminator.
975 If the conversion contains more than Width characters, then only the first
976 Width characters are returned, and the total number of characters
977 required to perform the conversion is returned.
978 Additional conversion parameters are specified in Flags.
979 The Flags bit LEFT_JUSTIFY is always ignored.
980 All conversions are left justified in Buffer.
981 If Width is 0, PREFIX_ZERO is ignored in Flags.
982 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
983 are inserted every 3rd digit starting from the right.
984 If Value is < 0, then the fist character in Buffer is a '-'.
985 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,
986 then Buffer is padded with '0' characters so the combination of the optional '-'
987 sign character, '0' characters, digit characters for Value, and the Null-terminator
988 add up to Width characters.
990 If Buffer is NULL, then ASSERT().
991 If unsupported bits are set in Flags, then ASSERT().
992 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
994 @param Buffer Pointer to the output buffer for the produced Null-terminated
996 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
997 @param Value The 64-bit signed value to convert to a string.
998 @param Width The maximum number of Unicode characters to place in Buffer.
1000 @return The number of Unicode characters in Buffer not including the Null-terminator.
1005 UnicodeValueToString (
1006 IN OUT CHAR16
*Buffer
,
1012 return BasePrintLibConvertValueToString ((CHAR8
*)Buffer
, Flags
, Value
, Width
, 2);
1016 Converts a decimal value to a Null-terminated ASCII string.
1018 Converts the decimal number specified by Value to a Null-terminated ASCII string
1019 specified by Buffer containing at most Width characters.
1020 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
1021 The number of ASCII characters in Buffer is returned not including the Null-terminator.
1022 If the conversion contains more than Width characters, then only the first Width
1023 characters are returned, and the total number of characters required to perform
1024 the conversion is returned.
1025 Additional conversion parameters are specified in Flags.
1026 The Flags bit LEFT_JUSTIFY is always ignored.
1027 All conversions are left justified in Buffer.
1028 If Width is 0, PREFIX_ZERO is ignored in Flags.
1029 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
1030 are inserted every 3rd digit starting from the right.
1031 If Value is < 0, then the fist character in Buffer is a '-'.
1032 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored, then Buffer
1033 is padded with '0' characters so the combination of the optional '-'
1034 sign character, '0' characters, digit characters for Value, and the
1035 Null-terminator add up to Width characters.
1037 If Buffer is NULL, then ASSERT().
1038 If unsupported bits are set in Flags, then ASSERT().
1039 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
1041 @param Buffer Pointer to the output buffer for the produced Null-terminated
1043 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
1044 @param Value The 64-bit signed value to convert to a string.
1045 @param Width The maximum number of ASCII characters to place in Buffer.
1047 @return The number of ASCII characters in Buffer not including the Null-terminator.
1052 AsciiValueToString (
1053 IN OUT CHAR8
*Buffer
,
1059 return BasePrintLibConvertValueToString ((CHAR8
*)Buffer
, Flags
, Value
, Width
, 1);