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.
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 PcdMaximumUnicodeStringLength
131 // Ascii characters if PcdMaximumUnicodeStringLength 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
;
237 // Limit the maximum field width to the remaining characters in the output buffer
239 if (Width
> BufferSize
) {
244 // Handle each argument type
246 switch (FormatCharacter
) {
248 if (sizeof (VOID
*) > 4) {
252 Flags
|= PREFIX_ZERO
;
254 // break skiped on purpose
259 // break skiped on purpose
262 if ((Flags
& LONG_TYPE
) == 0) {
263 Value
= (VA_ARG (Marker
, int));
265 Value
= VA_ARG (Marker
, INT64
);
267 if ((Flags
& PREFIX_BLANK
) != 0) {
270 if ((Flags
& PREFIX_SIGN
) != 0) {
273 if ((Flags
& COMMA_TYPE
) != 0) {
276 if ((Flags
& RADIX_HEX
) == 0) {
279 Flags
&= (~PREFIX_ZERO
);
283 Flags
|= PREFIX_SIGN
;
290 if ((Flags
& LONG_TYPE
) == 0 && Value
< 0) {
291 Value
= (unsigned int)Value
;
295 // Convert Value to a reversed string
297 Count
= BasePrintLibValueToString (ValueBuffer
, Value
, Radix
);
298 if (Value
== 0 && Precision
== 0) {
301 ArgumentString
= (CHAR8
*)ValueBuffer
+ Count
;
302 Digits
= 3 - (Count
% 3);
303 if (Comma
&& Count
!= 0) {
304 Count
+= ((Count
- 1) / 3);
309 Flags
|= ARGUMENT_REVERSED
;
311 if ((Flags
& PREFIX_ZERO
) != 0) {
312 if ((Flags
& PAD_TO_WIDTH
) != 0) {
313 if ((Flags
& PRECISION
) == 0) {
322 Flags
|= ARGUMENT_UNICODE
;
324 // break skipped on purpose
327 ArgumentString
= (CHAR8
*)VA_ARG (Marker
, CHAR8
*);
328 if (ArgumentString
== NULL
) {
329 Flags
&= (~ARGUMENT_UNICODE
);
330 ArgumentString
= "<null string>";
335 Character
= VA_ARG (Marker
, UINTN
) & 0xffff;
336 ArgumentString
= (CHAR8
*)&Character
;
337 Flags
|= ARGUMENT_UNICODE
;
341 TmpGuid
= VA_ARG (Marker
, GUID
*);
342 if (TmpGuid
== NULL
) {
343 ArgumentString
= "<null guid>";
347 MAXIMUM_VALUE_CHARACTERS
,
349 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
362 ArgumentString
= ValueBuffer
;
367 TmpTime
= VA_ARG (Marker
, TIME
*);
368 if (TmpTime
== NULL
) {
369 ArgumentString
= "<null time>";
373 MAXIMUM_VALUE_CHARACTERS
,
375 "%02d/%02d/%04d %02d:%02d",
382 ArgumentString
= ValueBuffer
;
387 Status
= VA_ARG (Marker
, RETURN_STATUS
);
388 ArgumentString
= ValueBuffer
;
389 if (RETURN_ERROR (Status
)) {
393 Index
= Status
& ~MAX_BIT
;
394 if (Index
> 0 && Index
<= ERROR_STATUS_NUMBER
) {
395 ArgumentString
= StatusString
[Index
+ WARNING_STATUS_NUMBER
];
399 if (Index
<= WARNING_STATUS_NUMBER
) {
400 ArgumentString
= StatusString
[Index
];
403 if (ArgumentString
== ValueBuffer
) {
404 BasePrintLibSPrint ((CHAR8
*) ValueBuffer
, MAXIMUM_VALUE_CHARACTERS
, 0, "%08X", Status
);
409 ArgumentString
= "\n\r";
415 // if the type is '%' or unknown, then print it to the screen
417 ArgumentString
= (CHAR8
*)&FormatCharacter
;
418 Flags
|= ARGUMENT_UNICODE
;
424 ArgumentString
= "\n\r";
428 ArgumentString
= (CHAR8
*)&FormatCharacter
;
429 Flags
|= ARGUMENT_UNICODE
;
434 // Retrieve the ArgumentString attriubutes
436 if ((Flags
& ARGUMENT_UNICODE
) != 0) {
437 ArgumentMask
= 0xffff;
438 BytesPerArgumentCharacter
= 2;
441 BytesPerArgumentCharacter
= 1;
443 if ((Flags
& ARGUMENT_REVERSED
) != 0) {
444 BytesPerArgumentCharacter
= -BytesPerArgumentCharacter
;
447 // Compute the number of characters in ArgumentString and store it in Count
448 // ArgumentString is either null-terminated, or it contains Precision characters
450 for (Count
= 0; Count
< Precision
|| ((Flags
& PRECISION
) == 0); Count
++) {
451 ArgumentCharacter
= ((ArgumentString
[Count
* BytesPerArgumentCharacter
] & 0xff) | ((ArgumentString
[Count
* BytesPerArgumentCharacter
+ 1]) << 8)) & ArgumentMask
;
452 if (ArgumentCharacter
== 0) {
459 // Limit the length of the string to append to the remaining characters in the output buffer
461 if (Count
> BufferSize
) {
464 if (Precision
< Count
) {
469 // Pad before the string
471 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
)) {
472 Buffer
= BasePrintLibFillBuffer (Buffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
477 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, Prefix
, BytesPerOutputCharacter
);
479 Buffer
= BasePrintLibFillBuffer (Buffer
, Precision
- Count
, '0', BytesPerOutputCharacter
);
481 Buffer
= BasePrintLibFillBuffer (Buffer
, Precision
- Count
, ' ', BytesPerOutputCharacter
);
483 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, Prefix
, BytesPerOutputCharacter
);
488 // Output the Prefix character if it is present
496 // Copy the string into the output buffer performing the required type conversions
498 while (Index
< Count
) {
499 ArgumentCharacter
= ((*ArgumentString
& 0xff) | (*(ArgumentString
+ 1) << 8)) & ArgumentMask
;
501 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, ArgumentCharacter
, BytesPerOutputCharacter
);
502 ArgumentString
+= BytesPerArgumentCharacter
;
510 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, ',', BytesPerOutputCharacter
);
517 // Pad after the string
519 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) {
520 Buffer
= BasePrintLibFillBuffer (Buffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
524 // Reduce the number of characters
529 // Get the next character from the format string
531 Format
+= BytesPerFormatCharacter
;
534 // Get the next character from the format string
536 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
540 // Null terminate the Unicode or ASCII string
542 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, 0, BytesPerOutputCharacter
);
544 // Make sure output buffer cannot contain more than PcdMaximumUnicodeStringLength
545 // Unicode characters if PcdMaximumUnicodeStringLength is not zero.
547 ASSERT ((((Flags
& OUTPUT_UNICODE
) == 0)) || (StrSize ((CHAR16
*) OriginalBuffer
) != 0));
549 // Make sure output buffer cannot contain more than PcdMaximumUnicodeStringLength
550 // Ascii characters if PcdMaximumUnicodeStringLength is not zero.
552 ASSERT ((((Flags
& OUTPUT_UNICODE
) != 0)) || (AsciiStrSize (OriginalBuffer
) != 0));
555 return ((Buffer
- OriginalBuffer
) / BytesPerOutputCharacter
);
559 Worker function that produces a Null-terminated string in an output buffer
560 based on a Null-terminated format string and variable argument list.
562 VSPrint function to process format and place the results in Buffer. Since a
563 VA_LIST is used this rountine allows the nesting of Vararg routines. Thus
564 this is the main print working routine
566 @param Buffer Character buffer to print the results of the parsing
568 @param BufferSize Maximum number of characters to put into buffer.
570 @param Flags Intial flags value.
571 Can only have FORMAT_UNICODE and OUTPUT_UNICODE set
572 @param FormatString Null-terminated format string.
574 @return Number of characters printed.
579 OUT CHAR8
*StartOfBuffer
,
582 IN CONST CHAR8
*FormatString
,
588 VA_START (Marker
, FormatString
);
589 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, Flags
, FormatString
, Marker
);
593 Produces a Null-terminated Unicode string in an output buffer based on
594 a Null-terminated Unicode format string and a VA_LIST argument list
596 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
598 The Unicode string is produced by parsing the format string specified by FormatString.
599 Arguments are pulled from the variable argument list specified by Marker based on the
600 contents of the format string.
601 The length of the produced output buffer is returned.
602 If BufferSize is 0, then no output buffer is produced and 0 is returned.
604 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
605 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
606 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
607 PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
608 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
609 contains more than PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
611 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
613 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
614 @param FormatString Null-terminated Unicode format string.
615 @param Marker VA_LIST marker for the variable argument list.
617 @return return Length of the produced output buffer.
623 OUT CHAR16
*StartOfBuffer
,
625 IN CONST CHAR16
*FormatString
,
629 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, FORMAT_UNICODE
| OUTPUT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
633 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
634 Unicode format string and variable argument list.
636 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
638 The Unicode string is produced by parsing the format string specified by FormatString.
639 Arguments are pulled from the variable argument list based on the contents of the format string.
640 The length of the produced output buffer is returned.
641 If BufferSize is 0, then no output buffer is produced and 0 is returned.
643 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
644 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
645 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
646 PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
647 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
648 contains more than PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
650 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
652 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
653 @param FormatString Null-terminated Unicode format string.
655 @return Length of the produced output buffer.
661 OUT CHAR16
*StartOfBuffer
,
663 IN CONST CHAR16
*FormatString
,
669 VA_START (Marker
, FormatString
);
670 return UnicodeVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
674 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
675 ASCII format string and a VA_LIST argument list
677 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
679 The Unicode string is produced by parsing the format string specified by FormatString.
680 Arguments are pulled from the variable argument list specified by Marker based on the
681 contents of the format string.
682 The length of the produced output buffer is returned.
683 If BufferSize is 0, then no output buffer is produced and 0 is returned.
685 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
686 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
687 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
688 PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
689 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
690 contains more than PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
692 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
694 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
695 @param FormatString Null-terminated Unicode format string.
696 @param Marker VA_LIST marker for the variable argument list.
698 @return Length of the produced output buffer.
703 UnicodeVSPrintAsciiFormat (
704 OUT CHAR16
*StartOfBuffer
,
706 IN CONST CHAR8
*FormatString
,
710 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, OUTPUT_UNICODE
,FormatString
, Marker
);
714 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
715 ASCII format string and variable argument list.
717 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
719 The Unicode string is produced by parsing the format string specified by FormatString.
720 Arguments are pulled from the variable argument list based on the contents of the
722 The length of the produced output buffer is returned.
723 If BufferSize is 0, then no output buffer is produced and 0 is returned.
725 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
726 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
727 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
728 PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
729 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
730 contains more than PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
732 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
734 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
735 @param FormatString Null-terminated Unicode format string.
737 @return Length of the produced output buffer.
742 UnicodeSPrintAsciiFormat (
743 OUT CHAR16
*StartOfBuffer
,
745 IN CONST CHAR8
*FormatString
,
751 VA_START (Marker
, FormatString
);
752 return UnicodeVSPrintAsciiFormat (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
756 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
757 ASCII format string and a VA_LIST argument list.
759 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
761 The ASCII string is produced by parsing the format string specified by FormatString.
762 Arguments are pulled from the variable argument list specified by Marker based on
763 the contents of the format string.
764 The length of the produced output buffer is returned.
765 If BufferSize is 0, then no output buffer is produced and 0 is returned.
767 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
768 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
769 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
770 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
771 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
772 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
774 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
776 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
777 @param FormatString Null-terminated Unicode format string.
778 @param Marker VA_LIST marker for the variable argument list.
780 @return Length of the produced output buffer.
786 OUT CHAR8
*StartOfBuffer
,
788 IN CONST CHAR8
*FormatString
,
792 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, 0, FormatString
, Marker
);
796 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
797 ASCII format string and variable argument list.
799 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
801 The ASCII string is produced by parsing the format string specified by FormatString.
802 Arguments are pulled from the variable argument list based on the contents of the
804 The length of the produced output buffer is returned.
805 If BufferSize is 0, then no output buffer is produced and 0 is returned.
807 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
808 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
809 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
810 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
811 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
812 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
814 @param StartOfBuffer APointer 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.
819 @return Length of the produced output buffer.
825 OUT CHAR8
*StartOfBuffer
,
827 IN CONST CHAR8
*FormatString
,
833 VA_START (Marker
, FormatString
);
834 return AsciiVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
838 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
839 ASCII format string and a VA_LIST argument list.
841 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
843 The ASCII string is produced by parsing the format string specified by FormatString.
844 Arguments are pulled from the variable argument list specified by Marker based on
845 the contents of the format string.
846 The length of the produced output buffer is returned.
847 If BufferSize is 0, then no output buffer is produced and 0 is returned.
849 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
850 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
851 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
852 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
853 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
854 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
856 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
858 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
859 @param FormatString Null-terminated Unicode format string.
860 @param Marker VA_LIST marker for the variable argument list.
862 @return Length of the produced output buffer.
867 AsciiVSPrintUnicodeFormat (
868 OUT CHAR8
*StartOfBuffer
,
870 IN CONST CHAR16
*FormatString
,
874 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, FORMAT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
878 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
879 ASCII format string and variable argument list.
881 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
883 The ASCII string is produced by parsing the format string specified by FormatString.
884 Arguments are pulled from the variable argument list based on the contents of the
886 The length of the produced output buffer is returned.
887 If BufferSize is 0, then no output buffer is produced and 0 is returned.
889 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
890 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
891 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
892 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
893 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
894 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
896 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
898 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
899 @param FormatString Null-terminated Unicode format string.
901 @return Length of the produced output buffer.
906 AsciiSPrintUnicodeFormat (
907 OUT CHAR8
*StartOfBuffer
,
909 IN CONST CHAR16
*FormatString
,
915 VA_START (Marker
, FormatString
);
916 return AsciiVSPrintUnicodeFormat (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
920 Converts a decimal value to a Null-terminated Unicode string.
922 Converts the decimal number specified by Value to a Null-terminated Unicode
923 string specified by Buffer containing at most Width characters.
924 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
925 The total number of characters placed in Buffer is returned.
926 If the conversion contains more than Width characters, then only the first
927 Width characters are returned, and the total number of characters
928 required to perform the conversion is returned.
929 Additional conversion parameters are specified in Flags.
930 The Flags bit LEFT_JUSTIFY is always ignored.
931 All conversions are left justified in Buffer.
932 If Width is 0, PREFIX_ZERO is ignored in Flags.
933 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
934 are inserted every 3rd digit starting from the right.
935 If Value is < 0, then the fist character in Buffer is a '-'.
936 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,
937 then Buffer is padded with '0' characters so the combination of the optional '-'
938 sign character, '0' characters, digit characters for Value, and the Null-terminator
939 add up to Width characters.
941 If Buffer is NULL, then ASSERT().
942 If unsupported bits are set in Flags, then ASSERT().
943 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
945 @param Buffer Pointer to the output buffer for the produced Null-terminated
947 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
948 @param Value The 64-bit signed value to convert to a string.
949 @param Width The maximum number of Unicode characters to place in Buffer.
951 @return Total number of characters required to perform the conversion.
956 UnicodeValueToString (
957 IN OUT CHAR16
*Buffer
,
963 return BasePrintLibConvertValueToString ((CHAR8
*)Buffer
, Flags
, Value
, Width
, 2);
967 Converts a decimal value to a Null-terminated ASCII string.
969 Converts the decimal number specified by Value to a Null-terminated ASCII string
970 specified by Buffer containing at most Width characters.
971 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
972 The total number of characters placed in Buffer is returned.
973 If the conversion contains more than Width characters, then only the first Width
974 characters are returned, and the total number of characters required to perform
975 the conversion is returned.
976 Additional conversion parameters are specified in Flags.
977 The Flags bit LEFT_JUSTIFY is always ignored.
978 All conversions are left justified in Buffer.
979 If Width is 0, PREFIX_ZERO is ignored in Flags.
980 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
981 are inserted every 3rd digit starting from the right.
982 If Value is < 0, then the fist character in Buffer is a '-'.
983 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored, then Buffer
984 is padded with '0' characters so the combination of the optional '-'
985 sign character, '0' characters, digit characters for Value, and the
986 Null-terminator add up to Width characters.
988 If Buffer is NULL, then ASSERT().
989 If unsupported bits are set in Flags, then ASSERT().
990 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
992 @param Buffer Pointer to the output buffer for the produced Null-terminated
994 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
995 @param Value The 64-bit signed value to convert to a string.
996 @param Width The maximum number of ASCII characters to place in Buffer.
998 @return Total number of characters required to perform the conversion.
1003 AsciiValueToString (
1004 IN OUT CHAR8
*Buffer
,
1010 return BasePrintLibConvertValueToString ((CHAR8
*)Buffer
, Flags
, Value
, Width
, 1);