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 skipped 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
) {
260 // Flag space, +, 0, L & l are invalid for type p.
262 Flags
&= ~(PREFIX_BLANK
| PREFIX_SIGN
| PREFIX_ZERO
| LONG_TYPE
);
263 if (sizeof (VOID
*) > 4) {
267 Flags
|= PREFIX_ZERO
;
269 // break skipped on purpose
274 // break skipped on purpose
277 if ((Flags
& LONG_TYPE
) == 0) {
278 Value
= (VA_ARG (Marker
, int));
280 Value
= VA_ARG (Marker
, INT64
);
282 if ((Flags
& PREFIX_BLANK
) != 0) {
285 if ((Flags
& PREFIX_SIGN
) != 0) {
288 if ((Flags
& COMMA_TYPE
) != 0) {
291 if ((Flags
& RADIX_HEX
) == 0) {
294 Flags
&= (~PREFIX_ZERO
);
298 Flags
|= PREFIX_SIGN
;
305 if ((Flags
& LONG_TYPE
) == 0 && Value
< 0) {
306 Value
= (unsigned int)Value
;
310 // Convert Value to a reversed string
312 Count
= BasePrintLibValueToString (ValueBuffer
, Value
, Radix
);
313 if (Value
== 0 && Precision
== 0) {
316 ArgumentString
= (CHAR8
*)ValueBuffer
+ Count
;
322 if (Comma
&& Count
!= 0) {
323 Count
+= ((Count
- 1) / 3);
329 Flags
|= ARGUMENT_REVERSED
;
331 if ((Flags
& PREFIX_ZERO
) != 0) {
332 if ((Flags
& LEFT_JUSTIFY
) == 0) {
333 if ((Flags
& PAD_TO_WIDTH
) != 0) {
334 if ((Flags
& PRECISION
) == 0) {
344 Flags
|= ARGUMENT_UNICODE
;
346 // break skipped on purpose
349 ArgumentString
= (CHAR8
*)VA_ARG (Marker
, CHAR8
*);
350 if (ArgumentString
== NULL
) {
351 Flags
&= (~ARGUMENT_UNICODE
);
352 ArgumentString
= "<null string>";
357 Character
= VA_ARG (Marker
, UINTN
) & 0xffff;
358 ArgumentString
= (CHAR8
*)&Character
;
359 Flags
|= ARGUMENT_UNICODE
;
363 TmpGuid
= VA_ARG (Marker
, GUID
*);
364 if (TmpGuid
== NULL
) {
365 ArgumentString
= "<null guid>";
369 MAXIMUM_VALUE_CHARACTERS
,
371 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
384 ArgumentString
= ValueBuffer
;
389 TmpTime
= VA_ARG (Marker
, TIME
*);
390 if (TmpTime
== NULL
) {
391 ArgumentString
= "<null time>";
395 MAXIMUM_VALUE_CHARACTERS
,
397 "%02d/%02d/%04d %02d:%02d",
404 ArgumentString
= ValueBuffer
;
409 Status
= VA_ARG (Marker
, RETURN_STATUS
);
410 ArgumentString
= ValueBuffer
;
411 if (RETURN_ERROR (Status
)) {
415 Index
= Status
& ~MAX_BIT
;
416 if (Index
> 0 && Index
<= ERROR_STATUS_NUMBER
) {
417 ArgumentString
= StatusString
[Index
+ WARNING_STATUS_NUMBER
];
421 if (Index
<= WARNING_STATUS_NUMBER
) {
422 ArgumentString
= StatusString
[Index
];
425 if (ArgumentString
== ValueBuffer
) {
426 BasePrintLibSPrint ((CHAR8
*) ValueBuffer
, MAXIMUM_VALUE_CHARACTERS
, 0, "%08X", Status
);
431 ArgumentString
= "\n\r";
437 // if the type is '%' or unknown, then print it to the screen
439 ArgumentString
= (CHAR8
*)&FormatCharacter
;
440 Flags
|= ARGUMENT_UNICODE
;
446 ArgumentString
= "\n\r";
450 ArgumentString
= (CHAR8
*)&FormatCharacter
;
451 Flags
|= ARGUMENT_UNICODE
;
456 // Retrieve the ArgumentString attriubutes
458 if ((Flags
& ARGUMENT_UNICODE
) != 0) {
459 ArgumentMask
= 0xffff;
460 BytesPerArgumentCharacter
= 2;
463 BytesPerArgumentCharacter
= 1;
465 if ((Flags
& ARGUMENT_REVERSED
) != 0) {
466 BytesPerArgumentCharacter
= -BytesPerArgumentCharacter
;
469 // Compute the number of characters in ArgumentString and store it in Count
470 // ArgumentString is either null-terminated, or it contains Precision characters
472 for (Count
= 0; Count
< Precision
|| ((Flags
& PRECISION
) == 0); Count
++) {
473 ArgumentCharacter
= ((ArgumentString
[Count
* BytesPerArgumentCharacter
] & 0xff) | ((ArgumentString
[Count
* BytesPerArgumentCharacter
+ 1]) << 8)) & ArgumentMask
;
474 if (ArgumentCharacter
== 0) {
481 // Limit the length of the string to append to the remaining characters in the output buffer
483 if (Count
> BufferSize
) {
486 if (Precision
< Count
) {
491 // Pad before the string
493 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
)) {
494 Buffer
= BasePrintLibFillBuffer (Buffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
499 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, Prefix
, BytesPerOutputCharacter
);
501 Buffer
= BasePrintLibFillBuffer (Buffer
, Precision
- Count
, '0', BytesPerOutputCharacter
);
503 Buffer
= BasePrintLibFillBuffer (Buffer
, Precision
- Count
, ' ', BytesPerOutputCharacter
);
505 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, Prefix
, BytesPerOutputCharacter
);
510 // Output the Prefix character if it is present
518 // Copy the string into the output buffer performing the required type conversions
520 while (Index
< Count
) {
521 ArgumentCharacter
= ((*ArgumentString
& 0xff) | (*(ArgumentString
+ 1) << 8)) & ArgumentMask
;
523 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, ArgumentCharacter
, BytesPerOutputCharacter
);
524 ArgumentString
+= BytesPerArgumentCharacter
;
532 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, ',', BytesPerOutputCharacter
);
539 // Pad after the string
541 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) {
542 Buffer
= BasePrintLibFillBuffer (Buffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
546 // Reduce the number of characters
551 // Get the next character from the format string
553 Format
+= BytesPerFormatCharacter
;
556 // Get the next character from the format string
558 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
562 // Null terminate the Unicode or ASCII string
564 BasePrintLibFillBuffer (Buffer
, 1, 0, BytesPerOutputCharacter
);
566 // Make sure output buffer cannot contain more than PcdMaximumUnicodeStringLength
567 // Unicode characters if PcdMaximumUnicodeStringLength is not zero.
569 ASSERT ((((Flags
& OUTPUT_UNICODE
) == 0)) || (StrSize ((CHAR16
*) OriginalBuffer
) != 0));
571 // Make sure output buffer cannot contain more than PcdMaximumAsciiStringLength
572 // ASCII characters if PcdMaximumAsciiStringLength is not zero.
574 ASSERT ((((Flags
& OUTPUT_UNICODE
) != 0)) || (AsciiStrSize (OriginalBuffer
) != 0));
576 return ((Buffer
- OriginalBuffer
) / BytesPerOutputCharacter
);
580 Worker function that produces a Null-terminated string in an output buffer
581 based on a Null-terminated format string and variable argument list.
583 VSPrint function to process format and place the results in Buffer. Since a
584 VA_LIST is used this rountine allows the nesting of Vararg routines. Thus
585 this is the main print working routine.
587 @param Buffer Character buffer to print the results of the parsing
589 @param BufferSize Maximum number of characters to put into buffer.
591 @param Flags Intial flags value.
592 Can only have FORMAT_UNICODE and OUTPUT_UNICODE set
593 @param FormatString Null-terminated format string.
595 @return Number of characters printed not including the Null-terminator.
600 OUT CHAR8
*StartOfBuffer
,
603 IN CONST CHAR8
*FormatString
,
609 VA_START (Marker
, FormatString
);
610 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, Flags
, FormatString
, Marker
);
614 Produces a Null-terminated Unicode string in an output buffer based on
615 a Null-terminated Unicode format string and a VA_LIST argument list
617 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
619 The Unicode string is produced by parsing the format string specified by FormatString.
620 Arguments are pulled from the variable argument list specified by Marker based on the
621 contents of the format string.
622 The number of Unicode characters in the produced output buffer is returned not including
624 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
626 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT().
627 If BufferSize > 1 and FormatString is NULL, then ASSERT().
628 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
629 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
631 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
632 contains more than PcdMaximumUnicodeStringLength Unicode characters not including the
633 Null-terminator, then ASSERT().
635 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
637 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
638 @param FormatString Null-terminated Unicode format string.
639 @param Marker VA_LIST marker for the variable argument list.
641 @return The number of Unicode characters in the produced output buffer not including the
648 OUT CHAR16
*StartOfBuffer
,
650 IN CONST CHAR16
*FormatString
,
654 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, FORMAT_UNICODE
| OUTPUT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
658 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
659 Unicode format string and variable argument list.
661 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
663 The Unicode string is produced by parsing the format string specified by FormatString.
664 Arguments are pulled from the variable argument list based on the contents of the format string.
665 The number of Unicode characters in the produced output buffer is returned not including
667 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
669 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT().
670 If BufferSize > 1 and FormatString is NULL, then ASSERT().
671 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
672 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
674 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
675 contains more than PcdMaximumUnicodeStringLength Unicode characters not including the
676 Null-terminator, then ASSERT().
678 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
680 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
681 @param FormatString Null-terminated Unicode format string.
683 @return The number of Unicode characters in the produced output buffer not including the
690 OUT CHAR16
*StartOfBuffer
,
692 IN CONST CHAR16
*FormatString
,
698 VA_START (Marker
, FormatString
);
699 return UnicodeVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
703 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
704 ASCII format string and a VA_LIST argument list
706 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
708 The Unicode string is produced by parsing the format string specified by FormatString.
709 Arguments are pulled from the variable argument list specified by Marker based on the
710 contents of the format string.
711 The number of Unicode characters in the produced output buffer is returned not including
713 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
715 If BufferSize > 1 and StartOfBuffer is NULL, 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 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, OUTPUT_UNICODE
,FormatString
, Marker
);
747 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
748 ASCII format string and variable argument list.
750 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
752 The Unicode string is produced by parsing the format string specified by FormatString.
753 Arguments are pulled from the variable argument list based on the contents of the
755 The number of Unicode characters in the produced output buffer is returned not including
757 If BufferSize is 0 or 1, then no output buffer is produced and 0 is returned.
759 If BufferSize > 1 and StartOfBuffer is NULL, then ASSERT().
760 If BufferSize > 1 and FormatString is NULL, then ASSERT().
761 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than
762 PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, then
764 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
765 contains more than PcdMaximumUnicodeStringLength Unicode characters not including the
766 Null-terminator, then ASSERT().
768 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
770 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
771 @param FormatString Null-terminated Unicode format string.
773 @return The number of Unicode characters in the produced output buffer not including the
779 UnicodeSPrintAsciiFormat (
780 OUT CHAR16
*StartOfBuffer
,
782 IN CONST CHAR8
*FormatString
,
788 VA_START (Marker
, FormatString
);
789 return UnicodeVSPrintAsciiFormat (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
793 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
794 ASCII format string and a VA_LIST argument list.
796 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
798 The ASCII string is produced by parsing the format string specified by FormatString.
799 Arguments are pulled from the variable argument list specified by Marker based on
800 the contents of the format string.
801 The number of ASCII characters in the produced output buffer is returned not including
803 If BufferSize is 0, then no output buffer is produced and 0 is returned.
805 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
806 If BufferSize > 0 and FormatString is NULL, then ASSERT().
807 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than
808 PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, then
810 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
811 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
812 Null-terminator, then ASSERT().
814 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
816 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
817 @param FormatString Null-terminated Unicode format string.
818 @param Marker VA_LIST marker for the variable argument list.
820 @return The number of ASCII characters in the produced output buffer not including the
827 OUT CHAR8
*StartOfBuffer
,
829 IN CONST CHAR8
*FormatString
,
833 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, 0, FormatString
, Marker
);
837 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
838 ASCII format string and variable argument list.
840 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
842 The ASCII string is produced by parsing the format string specified by FormatString.
843 Arguments are pulled from the variable argument list based on the contents of the
845 The number of ASCII characters in the produced output buffer is returned not including
847 If BufferSize is 0, then no output buffer is produced and 0 is returned.
849 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
850 If BufferSize > 0 and FormatString is NULL, then ASSERT().
851 If PcdMaximumAsciiStringLength is not zero, and FormatString contains more than
852 PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator, then
854 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
855 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
856 Null-terminator, then ASSERT().
858 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
860 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
861 @param FormatString Null-terminated Unicode format string.
863 @return The number of ASCII characters in the produced output buffer not including the
870 OUT CHAR8
*StartOfBuffer
,
872 IN CONST CHAR8
*FormatString
,
878 VA_START (Marker
, FormatString
);
879 return AsciiVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
883 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
884 ASCII format string and a VA_LIST argument list.
886 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
888 The ASCII string is produced by parsing the format string specified by FormatString.
889 Arguments are pulled from the variable argument list specified by Marker based on
890 the contents of the format string.
891 The number of ASCII characters in the produced output buffer is returned not including
893 If BufferSize is 0, then no output buffer is produced and 0 is returned.
895 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
896 If BufferSize > 0 and FormatString is NULL, then ASSERT().
897 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
898 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
900 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
901 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
902 Null-terminator, then ASSERT().
904 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
906 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
907 @param FormatString Null-terminated Unicode format string.
908 @param Marker VA_LIST marker for the variable argument list.
910 @return The number of ASCII characters in the produced output buffer not including the
916 AsciiVSPrintUnicodeFormat (
917 OUT CHAR8
*StartOfBuffer
,
919 IN CONST CHAR16
*FormatString
,
923 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, FORMAT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
927 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
928 ASCII format string and variable argument list.
930 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
932 The ASCII string is produced by parsing the format string specified by FormatString.
933 Arguments are pulled from the variable argument list based on the contents of the
935 The number of ASCII characters in the produced output buffer is returned not including
937 If BufferSize is 0, then no output buffer is produced and 0 is returned.
939 If BufferSize > 0 and StartOfBuffer is NULL, then ASSERT().
940 If BufferSize > 0 and FormatString is NULL, then ASSERT().
941 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
942 PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator, then
944 If PcdMaximumAsciiStringLength is not zero, and produced Null-terminated ASCII string
945 contains more than PcdMaximumAsciiStringLength ASCII characters not including the
946 Null-terminator, then ASSERT().
948 @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated
950 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
951 @param FormatString Null-terminated Unicode format string.
953 @return The number of ASCII characters in the produced output buffer not including the
959 AsciiSPrintUnicodeFormat (
960 OUT CHAR8
*StartOfBuffer
,
962 IN CONST CHAR16
*FormatString
,
968 VA_START (Marker
, FormatString
);
969 return AsciiVSPrintUnicodeFormat (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
973 Converts a decimal value to a Null-terminated Unicode string.
975 Converts the decimal number specified by Value to a Null-terminated Unicode
976 string specified by Buffer containing at most Width characters.
977 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
978 The number of Unicode characters in Buffer is returned not including the Null-terminator.
979 If the conversion contains more than Width characters, then only the first
980 Width characters are returned, and the total number of characters
981 required to perform the conversion is returned.
982 Additional conversion parameters are specified in Flags.
983 The Flags bit LEFT_JUSTIFY is always ignored.
984 All conversions are left justified in Buffer.
985 If Width is 0, PREFIX_ZERO is ignored in Flags.
986 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
987 are inserted every 3rd digit starting from the right.
988 If Value is < 0, then the fist character in Buffer is a '-'.
989 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,
990 then Buffer is padded with '0' characters so the combination of the optional '-'
991 sign character, '0' characters, digit characters for Value, and the Null-terminator
992 add up to Width characters.
994 If Buffer is NULL, then ASSERT().
995 If unsupported bits are set in Flags, then ASSERT().
996 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
998 @param Buffer Pointer to the output buffer for the produced Null-terminated
1000 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
1001 @param Value The 64-bit signed value to convert to a string.
1002 @param Width The maximum number of Unicode characters to place in Buffer.
1004 @return The number of Unicode characters in Buffer not including the Null-terminator.
1009 UnicodeValueToString (
1010 IN OUT CHAR16
*Buffer
,
1016 return BasePrintLibConvertValueToString ((CHAR8
*)Buffer
, Flags
, Value
, Width
, 2);
1020 Converts a decimal value to a Null-terminated ASCII string.
1022 Converts the decimal number specified by Value to a Null-terminated ASCII string
1023 specified by Buffer containing at most Width characters.
1024 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
1025 The number of ASCII characters in Buffer is returned not including the Null-terminator.
1026 If the conversion contains more than Width characters, then only the first Width
1027 characters are returned, and the total number of characters required to perform
1028 the conversion is returned.
1029 Additional conversion parameters are specified in Flags.
1030 The Flags bit LEFT_JUSTIFY is always ignored.
1031 All conversions are left justified in Buffer.
1032 If Width is 0, PREFIX_ZERO is ignored in Flags.
1033 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
1034 are inserted every 3rd digit starting from the right.
1035 If Value is < 0, then the fist character in Buffer is a '-'.
1036 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored, then Buffer
1037 is padded with '0' characters so the combination of the optional '-'
1038 sign character, '0' characters, digit characters for Value, and the
1039 Null-terminator add up to Width characters.
1041 If Buffer is NULL, then ASSERT().
1042 If unsupported bits are set in Flags, then ASSERT().
1043 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
1045 @param Buffer Pointer to the output buffer for the produced Null-terminated
1047 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
1048 @param Value The 64-bit signed value to convert to a string.
1049 @param Width The maximum number of ASCII characters to place in Buffer.
1051 @return The number of ASCII characters in Buffer not including the Null-terminator.
1056 AsciiValueToString (
1057 IN OUT CHAR8
*Buffer
,
1063 return BasePrintLibConvertValueToString ((CHAR8
*)Buffer
, Flags
, Value
, Width
, 1);