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"
22 } STATUS_LOOKUP_TABLE_ENTRY
;
24 static CONST STATUS_LOOKUP_TABLE_ENTRY StatusString
[] = {
25 { RETURN_SUCCESS
, "Success" },
26 { RETURN_LOAD_ERROR
, "Load Error" },
27 { RETURN_INVALID_PARAMETER
, "Invalid Parameter" },
28 { RETURN_UNSUPPORTED
, "Unsupported" },
29 { RETURN_BAD_BUFFER_SIZE
, "Bad Buffer Size" },
30 { RETURN_BUFFER_TOO_SMALL
, "Buffer Too Small" },
31 { RETURN_NOT_READY
, "Not Ready" },
32 { RETURN_DEVICE_ERROR
, "Device Error" },
33 { RETURN_WRITE_PROTECTED
, "Write Protected" },
34 { RETURN_OUT_OF_RESOURCES
, "Out of Resources" },
35 { RETURN_VOLUME_CORRUPTED
, "Volume Corrupt" },
36 { RETURN_VOLUME_FULL
, "Volume Full" },
37 { RETURN_NO_MEDIA
, "No Media" },
38 { RETURN_MEDIA_CHANGED
, "Media changed" },
39 { RETURN_NOT_FOUND
, "Not Found" },
40 { RETURN_ACCESS_DENIED
, "Access Denied" },
41 { RETURN_NO_RESPONSE
, "No Response" },
42 { RETURN_NO_MAPPING
, "No mapping" },
43 { RETURN_TIMEOUT
, "Time out" },
44 { RETURN_NOT_STARTED
, "Not started" },
45 { RETURN_ALREADY_STARTED
, "Already started" },
46 { RETURN_ABORTED
, "Aborted" },
47 { RETURN_ICMP_ERROR
, "ICMP Error" },
48 { RETURN_TFTP_ERROR
, "TFTP Error" },
49 { RETURN_PROTOCOL_ERROR
, "Protocol Error" },
50 { RETURN_WARN_UNKNOWN_GLYPH
, "Warning Unknown Glyph" },
51 { RETURN_WARN_DELETE_FAILURE
, "Warning Delete Failure" },
52 { RETURN_WARN_WRITE_FAILURE
, "Warning Write Failure" },
53 { RETURN_WARN_BUFFER_TOO_SMALL
, "Warning Buffer Too Small" },
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.
70 @param Flags Intial flags value.
71 Can only have FORMAT_UNICODE and OUTPUT_UNICODE set
72 @param Format Null-terminated format string.
73 @param Marker Vararg list consumed by processing Format.
75 @return Number of characters printed.
83 IN CONST CHAR8
*Format
,
87 CHAR8
*OriginalBuffer
;
88 CHAR8 ValueBuffer
[MAXIMUM_VALUE_CHARACTERS
];
89 UINTN BytesPerOutputCharacter
;
90 UINTN BytesPerFormatCharacter
;
92 UINTN FormatCharacter
;
96 CHAR8
*ArgumentString
;
102 INTN BytesPerArgumentCharacter
;
103 UINTN ArgumentCharacter
;
111 RETURN_STATUS Status
;
113 ASSERT (Buffer
!= NULL
);
114 ASSERT (Format
!= NULL
);
116 OriginalBuffer
= Buffer
;
118 if ((Flags
& OUTPUT_UNICODE
) != 0) {
119 BytesPerOutputCharacter
= 2;
121 BytesPerOutputCharacter
= 1;
123 if ((Flags
& FORMAT_UNICODE
) != 0) {
124 BytesPerFormatCharacter
= 2;
127 BytesPerFormatCharacter
= 1;
132 // Reserve space for the Null terminator.
133 // If BufferSize is 0, this will set BufferSize to the max unsigned value
138 // Get the first character from the format string
140 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
143 // Loop until the end of the format string is reached or the output buffer is full
145 while (FormatCharacter
!= 0 && BufferSize
> 0) {
147 // Clear all the flag bits except those that may have been passed in
149 Flags
&= (OUTPUT_UNICODE
| FORMAT_UNICODE
);
152 // Set the default width to zero, and the default precision to 1
162 switch (FormatCharacter
) {
165 // Parse Flags and Width
167 for (Done
= FALSE
; !Done
; ) {
168 Format
+= BytesPerFormatCharacter
;
169 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
170 switch (FormatCharacter
) {
175 Flags
|= LEFT_JUSTIFY
;
178 Flags
|= PREFIX_SIGN
;
181 Flags
|= PREFIX_BLANK
;
191 if ((Flags
& PRECISION
) == 0) {
192 Flags
|= PAD_TO_WIDTH
;
193 Width
= VA_ARG (Marker
, UINTN
);
195 Precision
= VA_ARG (Marker
, UINTN
);
199 if ((Flags
& PRECISION
) == 0) {
200 Flags
|= PREFIX_ZERO
;
211 for (Count
= 0; ((FormatCharacter
>= '0') && (FormatCharacter
<= '9')); ){
212 Count
= (Count
* 10) + FormatCharacter
- '0';
213 Format
+= BytesPerFormatCharacter
;
214 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
216 Format
-= BytesPerFormatCharacter
;
217 if ((Flags
& PRECISION
) == 0) {
218 Flags
|= PAD_TO_WIDTH
;
231 // Limit the maximum field width to the remaining characters in the output buffer
233 if (Width
> BufferSize
) {
238 // Handle each argument type
240 switch (FormatCharacter
) {
242 if (sizeof (VOID
*) > 4) {
246 Flags
|= PREFIX_ZERO
;
248 // break skiped on purpose
253 // break skiped on purpose
256 if ((Flags
& LONG_TYPE
) == 0) {
257 Value
= (VA_ARG (Marker
, int));
259 Value
= VA_ARG (Marker
, INT64
);
261 if ((Flags
& PREFIX_BLANK
) != 0) {
264 if ((Flags
& PREFIX_SIGN
) != 0) {
267 if ((Flags
& COMMA_TYPE
) != 0) {
270 if ((Flags
& RADIX_HEX
) == 0) {
273 Flags
&= (~PREFIX_ZERO
);
277 Flags
|= PREFIX_SIGN
;
284 if ((Flags
& LONG_TYPE
) == 0 && Value
< 0) {
285 Value
= (unsigned int)Value
;
289 // Convert Value to a reversed string
291 Count
= BasePrintLibValueToString (ValueBuffer
, Value
, Radix
);
292 if (Value
== 0 && Precision
== 0) {
295 ArgumentString
= (CHAR8
*)ValueBuffer
+ Count
;
296 Digits
= 3 - (Count
% 3);
297 if (Comma
&& Count
!= 0) {
298 Count
+= ((Count
- 1) / 3);
303 Flags
|= ARGUMENT_REVERSED
;
305 if ((Flags
& PREFIX_ZERO
) != 0) {
306 if ((Flags
& PAD_TO_WIDTH
) != 0) {
307 if ((Flags
& PRECISION
) == 0) {
316 Flags
|= ARGUMENT_UNICODE
;
318 // break skipped on purpose
321 ArgumentString
= (CHAR8
*)VA_ARG (Marker
, CHAR8
*);
322 if (ArgumentString
== NULL
) {
323 Flags
&= (~ARGUMENT_UNICODE
);
324 ArgumentString
= "<null string>";
329 Character
= VA_ARG (Marker
, UINTN
) & 0xffff;
330 ArgumentString
= (CHAR8
*)&Character
;
331 Flags
|= ARGUMENT_UNICODE
;
335 TmpGuid
= VA_ARG (Marker
, GUID
*);
336 if (TmpGuid
== NULL
) {
337 ArgumentString
= "<null guid>";
343 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
356 ArgumentString
= ValueBuffer
;
361 TmpTime
= VA_ARG (Marker
, TIME
*);
362 if (TmpTime
== NULL
) {
363 ArgumentString
= "<null time>";
369 "%02d/%02d/%04d %02d:%02d",
376 ArgumentString
= ValueBuffer
;
381 Status
= VA_ARG (Marker
, RETURN_STATUS
);
382 ArgumentString
= ValueBuffer
;
383 for (Index
= 0; StatusString
[Index
].String
!= NULL
; Index
++) {
384 if (Status
== StatusString
[Index
].Status
) {
385 ArgumentString
= StatusString
[Index
].String
;
388 if (ArgumentString
== ValueBuffer
) {
389 BasePrintLibSPrint ((CHAR8
*) ValueBuffer
, 0, 0, "%08X", Status
);
396 // if the type is '%' or unknown, then print it to the screen
398 ArgumentString
= (CHAR8
*)&FormatCharacter
;
399 Flags
|= ARGUMENT_UNICODE
;
404 ArgumentString
= "\r\n";
407 ArgumentString
= (CHAR8
*)&FormatCharacter
;
408 Flags
|= ARGUMENT_UNICODE
;
413 // Retrieve the ArgumentString attriubutes
415 if ((Flags
& ARGUMENT_UNICODE
) != 0) {
416 ArgumentMask
= 0xffff;
417 BytesPerArgumentCharacter
= 2;
420 BytesPerArgumentCharacter
= 1;
422 if ((Flags
& ARGUMENT_REVERSED
) != 0) {
423 BytesPerArgumentCharacter
= -BytesPerArgumentCharacter
;
426 // Compute the number of characters in ArgumentString and store it in Count
427 // ArgumentString is either null-terminated, or it contains Precision characters
429 for (Count
= 0; Count
< Precision
|| ((Flags
& PRECISION
) == 0); Count
++) {
430 ArgumentCharacter
= ((ArgumentString
[Count
* BytesPerArgumentCharacter
] & 0xff) | ((ArgumentString
[Count
* BytesPerArgumentCharacter
+ 1]) << 8)) & ArgumentMask
;
431 if (ArgumentCharacter
== 0) {
438 // Limit the length of the string to append to the remaining characters in the output buffer
440 if (Count
> BufferSize
) {
443 if (Precision
< Count
) {
448 // Pad before the string
450 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
)) {
451 Buffer
= BasePrintLibFillBuffer (Buffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
456 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, Prefix
, BytesPerOutputCharacter
);
458 Buffer
= BasePrintLibFillBuffer (Buffer
, Precision
- Count
, '0', BytesPerOutputCharacter
);
460 Buffer
= BasePrintLibFillBuffer (Buffer
, Precision
- Count
, ' ', BytesPerOutputCharacter
);
462 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, Prefix
, BytesPerOutputCharacter
);
467 // Output the Prefix character if it is present
475 // Copy the string into the output buffer performing the required type conversions
477 while (Index
< Count
) {
478 ArgumentCharacter
= ((*ArgumentString
& 0xff) | (*(ArgumentString
+ 1) << 8)) & ArgumentMask
;
480 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, ArgumentCharacter
, BytesPerOutputCharacter
);
481 ArgumentString
+= BytesPerArgumentCharacter
;
489 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, ',', BytesPerOutputCharacter
);
496 // Pad after the string
498 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) {
499 Buffer
= BasePrintLibFillBuffer (Buffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
503 // Reduce the number of characters
508 // Get the next character from the format string
510 Format
+= BytesPerFormatCharacter
;
513 // Get the next character from the format string
515 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
519 // Null terminate the Unicode or ASCII string
521 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, 0, BytesPerOutputCharacter
);
523 return ((Buffer
- OriginalBuffer
) / BytesPerOutputCharacter
);
527 Worker function that produces a Null-terminated string in an output buffer
528 based on a Null-terminated format string and variable argument list.
530 VSPrint function to process format and place the results in Buffer. Since a
531 VA_LIST is used this rountine allows the nesting of Vararg routines. Thus
532 this is the main print working routine
534 @param Buffer Character buffer to print the results of the parsing
536 @param BufferSize Maximum number of characters to put into buffer.
538 @param Flags Intial flags value.
539 Can only have FORMAT_UNICODE and OUTPUT_UNICODE set
540 @param FormatString Null-terminated format string.
542 @return Number of characters printed.
547 OUT CHAR8
*StartOfBuffer
,
550 IN CONST CHAR8
*FormatString
,
556 VA_START (Marker
, FormatString
);
557 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, Flags
, FormatString
, Marker
);
561 Produces a Null-terminated Unicode string in an output buffer based on
562 a Null-terminated Unicode format string and a VA_LIST argument list
564 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
566 The Unicode string is produced by parsing the format string specified by FormatString.
567 Arguments are pulled from the variable argument list specified by Marker based on the
568 contents of the format string.
569 The length of the produced output buffer is returned.
570 If BufferSize is 0, then no output buffer is produced and 0 is returned.
572 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
573 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
574 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
575 PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
576 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
577 contains more than PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
579 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
581 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
582 @param FormatString Null-terminated Unicode format string.
583 @param Marker VA_LIST marker for the variable argument list.
585 @return return Length of the produced output buffer.
591 OUT CHAR16
*StartOfBuffer
,
593 IN CONST CHAR16
*FormatString
,
597 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, FORMAT_UNICODE
| OUTPUT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
601 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
602 Unicode format string and variable argument list.
604 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
606 The Unicode string is produced by parsing the format string specified by FormatString.
607 Arguments are pulled from the variable argument list based on the contents of the format string.
608 The length of the produced output buffer is returned.
609 If BufferSize is 0, then no output buffer is produced and 0 is returned.
611 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
612 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
613 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
614 PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
615 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
616 contains more than PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
618 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
620 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
621 @param FormatString Null-terminated Unicode format string.
623 @return Length of the produced output buffer.
629 OUT CHAR16
*StartOfBuffer
,
631 IN CONST CHAR16
*FormatString
,
637 VA_START (Marker
, FormatString
);
638 return UnicodeVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
642 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
643 ASCII format string and a VA_LIST argument list
645 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
647 The Unicode string is produced by parsing the format string specified by FormatString.
648 Arguments are pulled from the variable argument list specified by Marker based on the
649 contents of the format string.
650 The length of the produced output buffer is returned.
651 If BufferSize is 0, then no output buffer is produced and 0 is returned.
653 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
654 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
655 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
656 PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
657 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
658 contains more than PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
660 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
662 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
663 @param FormatString Null-terminated Unicode format string.
664 @param Marker VA_LIST marker for the variable argument list.
666 @return Length of the produced output buffer.
671 UnicodeVSPrintAsciiFormat (
672 OUT CHAR16
*StartOfBuffer
,
674 IN CONST CHAR8
*FormatString
,
678 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, OUTPUT_UNICODE
,FormatString
, Marker
);
682 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
683 ASCII format string and variable argument list.
685 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
687 The Unicode string is produced by parsing the format string specified by FormatString.
688 Arguments are pulled from the variable argument list based on the contents of the
690 The length of the produced output buffer is returned.
691 If BufferSize is 0, then no output buffer is produced and 0 is returned.
693 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
694 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
695 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
696 PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
697 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
698 contains more than PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
700 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
702 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
703 @param FormatString Null-terminated Unicode format string.
705 @return Length of the produced output buffer.
710 UnicodeSPrintAsciiFormat (
711 OUT CHAR16
*StartOfBuffer
,
713 IN CONST CHAR8
*FormatString
,
719 VA_START (Marker
, FormatString
);
720 return UnicodeVSPrintAsciiFormat (StartOfBuffer
, BufferSize
>> 1, FormatString
, Marker
);
724 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
725 ASCII format string and a VA_LIST argument list.
727 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
729 The ASCII string is produced by parsing the format string specified by FormatString.
730 Arguments are pulled from the variable argument list specified by Marker based on
731 the contents of the format string.
732 The length of the produced output buffer is returned.
733 If BufferSize is 0, then no output buffer is produced and 0 is returned.
735 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
736 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
737 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
738 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
739 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
740 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
742 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
744 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
745 @param FormatString Null-terminated Unicode format string.
746 @param Marker VA_LIST marker for the variable argument list.
748 @return Length of the produced output buffer.
754 OUT CHAR8
*StartOfBuffer
,
756 IN CONST CHAR8
*FormatString
,
760 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, 0, FormatString
, Marker
);
764 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
765 ASCII format string and variable argument list.
767 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
769 The ASCII string is produced by parsing the format string specified by FormatString.
770 Arguments are pulled from the variable argument list based on the contents of the
772 The length of the produced output buffer is returned.
773 If BufferSize is 0, then no output buffer is produced and 0 is returned.
775 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
776 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
777 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
778 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
779 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
780 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
782 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
784 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
785 @param FormatString Null-terminated Unicode format string.
787 @return Length of the produced output buffer.
793 OUT CHAR8
*StartOfBuffer
,
795 IN CONST CHAR8
*FormatString
,
801 VA_START (Marker
, FormatString
);
802 return AsciiVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
806 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
807 ASCII format string and a VA_LIST argument list.
809 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
811 The ASCII string is produced by parsing the format string specified by FormatString.
812 Arguments are pulled from the variable argument list specified by Marker based on
813 the contents of the format string.
814 The length of the produced output buffer is returned.
815 If BufferSize is 0, then no output buffer is produced and 0 is returned.
817 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
818 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
819 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
820 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
821 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
822 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
824 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
826 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
827 @param FormatString Null-terminated Unicode format string.
828 @param Marker VA_LIST marker for the variable argument list.
830 @return Length of the produced output buffer.
835 AsciiVSPrintUnicodeFormat (
836 OUT CHAR8
*StartOfBuffer
,
838 IN CONST CHAR16
*FormatString
,
842 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, FORMAT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
846 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
847 ASCII format string and variable argument list.
849 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
851 The ASCII string is produced by parsing the format string specified by FormatString.
852 Arguments are pulled from the variable argument list based on the contents of the
854 The length of the produced output buffer is returned.
855 If BufferSize is 0, then no output buffer is produced and 0 is returned.
857 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
858 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
859 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
860 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
861 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
862 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
864 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
866 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
867 @param FormatString Null-terminated Unicode format string.
869 @return Length of the produced output buffer.
874 AsciiSPrintUnicodeFormat (
875 OUT CHAR8
*StartOfBuffer
,
877 IN CONST CHAR16
*FormatString
,
883 VA_START (Marker
, FormatString
);
884 return AsciiVSPrintUnicodeFormat (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
888 Converts a decimal value to a Null-terminated Unicode string.
890 Converts the decimal number specified by Value to a Null-terminated Unicode
891 string specified by Buffer containing at most Width characters.
892 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
893 The total number of characters placed in Buffer is returned.
894 If the conversion contains more than Width characters, then only the first
895 Width characters are returned, and the total number of characters
896 required to perform the conversion is returned.
897 Additional conversion parameters are specified in Flags.
898 The Flags bit LEFT_JUSTIFY is always ignored.
899 All conversions are left justified in Buffer.
900 If Width is 0, PREFIX_ZERO is ignored in Flags.
901 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
902 are inserted every 3rd digit starting from the right.
903 If Value is < 0, then the fist character in Buffer is a '-'.
904 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,
905 then Buffer is padded with '0' characters so the combination of the optional '-'
906 sign character, '0' characters, digit characters for Value, and the Null-terminator
907 add up to Width characters.
909 If Buffer is NULL, then ASSERT().
910 If unsupported bits are set in Flags, then ASSERT().
911 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
913 @param Buffer Pointer to the output buffer for the produced Null-terminated
915 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
916 @param Value The 64-bit signed value to convert to a string.
917 @param Width The maximum number of Unicode characters to place in Buffer.
919 @return Total number of characters required to perform the conversion.
924 UnicodeValueToString (
925 IN OUT CHAR16
*Buffer
,
931 return BasePrintLibConvertValueToString ((CHAR8
*)Buffer
, Flags
, Value
, Width
, 2);
935 Converts a decimal value to a Null-terminated ASCII string.
937 Converts the decimal number specified by Value to a Null-terminated ASCII string
938 specified by Buffer containing at most Width characters.
939 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
940 The total number of characters placed in Buffer is returned.
941 If the conversion contains more than Width characters, then only the first Width
942 characters are returned, and the total number of characters required to perform
943 the conversion is returned.
944 Additional conversion parameters are specified in Flags.
945 The Flags bit LEFT_JUSTIFY is always ignored.
946 All conversions are left justified in Buffer.
947 If Width is 0, PREFIX_ZERO is ignored in Flags.
948 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
949 are inserted every 3rd digit starting from the right.
950 If Value is < 0, then the fist character in Buffer is a '-'.
951 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored, then Buffer
952 is padded with '0' characters so the combination of the optional '-'
953 sign character, '0' characters, digit characters for Value, and the
954 Null-terminator add up to Width characters.
956 If Buffer is NULL, then ASSERT().
957 If unsupported bits are set in Flags, then ASSERT().
958 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
960 @param Buffer Pointer to the output buffer for the produced Null-terminated
962 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
963 @param Value The 64-bit signed value to convert to a string.
964 @param Width The maximum number of ASCII characters to place in Buffer.
966 @return Total number of characters required to perform the conversion.
972 IN OUT CHAR8
*Buffer
,
978 return BasePrintLibConvertValueToString ((CHAR8
*)Buffer
, Flags
, Value
, Width
, 1);