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 OriginalBuffer
= Buffer
;
115 if ((Flags
& OUTPUT_UNICODE
) != 0) {
116 BytesPerOutputCharacter
= 2;
118 BytesPerOutputCharacter
= 1;
120 if ((Flags
& FORMAT_UNICODE
) != 0) {
121 BytesPerFormatCharacter
= 2;
124 BytesPerFormatCharacter
= 1;
129 // Reserve space for the Null terminator.
130 // If BufferSize is 0, this will set BufferSize to the max unsigned value
135 // Get the first character from the format string
137 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
140 // Loop until the end of the format string is reached or the output buffer is full
142 while (FormatCharacter
!= 0 && BufferSize
> 0) {
144 // Clear all the flag bits except those that may have been passed in
146 Flags
&= (OUTPUT_UNICODE
| FORMAT_UNICODE
);
149 // Set the default width to zero, and the default precision to 1
159 switch (FormatCharacter
) {
162 // Parse Flags and Width
164 for (Done
= FALSE
; !Done
; ) {
165 Format
+= BytesPerFormatCharacter
;
166 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
167 switch (FormatCharacter
) {
172 Flags
|= LEFT_JUSTIFY
;
175 Flags
|= PREFIX_SIGN
;
178 Flags
|= PREFIX_BLANK
;
188 if ((Flags
& PRECISION
) == 0) {
189 Flags
|= PAD_TO_WIDTH
;
190 Width
= VA_ARG (Marker
, UINTN
);
192 Precision
= VA_ARG (Marker
, UINTN
);
196 if ((Flags
& PRECISION
) == 0) {
197 Flags
|= PREFIX_ZERO
;
208 for (Count
= 0; ((FormatCharacter
>= '0') && (FormatCharacter
<= '9')); ){
209 Count
= (Count
* 10) + FormatCharacter
- '0';
210 Format
+= BytesPerFormatCharacter
;
211 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
213 Format
-= BytesPerFormatCharacter
;
214 if ((Flags
& PRECISION
) == 0) {
215 Flags
|= PAD_TO_WIDTH
;
228 // Limit the maximum field width to the remaining characters in the output buffer
230 if (Width
> BufferSize
) {
235 // Handle each argument type
237 switch (FormatCharacter
) {
239 Flags
|= PREFIX_ZERO
;
241 // break skiped on purpose
246 // break skiped on purpose
249 if ((Flags
& LONG_TYPE
) == 0) {
250 Value
= (VA_ARG (Marker
, INTN
));
252 Value
= VA_ARG (Marker
, INT64
);
254 if ((Flags
& PREFIX_BLANK
) != 0) {
257 if ((Flags
& PREFIX_SIGN
) != 0) {
260 if ((Flags
& COMMA_TYPE
) != 0) {
263 if ((Flags
& RADIX_HEX
) == 0) {
266 Flags
&= (~PREFIX_ZERO
);
270 Flags
|= PREFIX_SIGN
;
277 if ((Flags
& LONG_TYPE
) == 0 && Value
< 0) {
278 Value
= (UINTN
)Value
;
282 // Convert Value to a reversed string
284 Count
= BasePrintLibValueToString (ValueBuffer
, Value
, Radix
);
285 if (Value
== 0 && Precision
== 0) {
288 ArgumentString
= (CHAR8
*)ValueBuffer
+ Count
;
289 Digits
= 3 - (Count
% 3);
290 if (Comma
&& Count
!= 0) {
291 Count
+= ((Count
- 1) / 3);
296 Flags
|= ARGUMENT_REVERSED
;
298 if ((Flags
& PREFIX_ZERO
) != 0) {
299 if ((Flags
& PAD_TO_WIDTH
) != 0) {
300 if ((Flags
& PRECISION
) == 0) {
309 Flags
|= ARGUMENT_UNICODE
;
311 // break skipped on purpose
314 ArgumentString
= (CHAR8
*)VA_ARG (Marker
, CHAR8
*);
315 if (ArgumentString
== NULL
) {
316 Flags
&= (~ARGUMENT_UNICODE
);
317 ArgumentString
= "<null string>";
322 Character
= VA_ARG (Marker
, UINTN
) & 0xffff;
323 ArgumentString
= (CHAR8
*)&Character
;
324 Flags
|= ARGUMENT_UNICODE
;
328 TmpGuid
= VA_ARG (Marker
, GUID
*);
329 if (TmpGuid
== NULL
) {
330 ArgumentString
= "<null guid>";
336 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
349 ArgumentString
= ValueBuffer
;
354 TmpTime
= VA_ARG (Marker
, TIME
*);
355 if (TmpTime
== NULL
) {
356 ArgumentString
= "<null time>";
362 "%02d/%02d/%04d %02d:%02d",
369 ArgumentString
= ValueBuffer
;
374 Status
= VA_ARG (Marker
, RETURN_STATUS
);
375 ArgumentString
= ValueBuffer
;
376 for (Index
= 0; StatusString
[Index
].String
!= NULL
; Index
++) {
377 if (Status
== StatusString
[Index
].Status
) {
378 ArgumentString
= StatusString
[Index
].String
;
381 if (ArgumentString
== ValueBuffer
) {
382 BasePrintLibSPrint ((CHAR8
*) ValueBuffer
, 0, 0, "%08X", Status
);
389 // if the type is '%' or unknown, then print it to the screen
391 ArgumentString
= (CHAR8
*)&FormatCharacter
;
392 Flags
|= ARGUMENT_UNICODE
;
397 ArgumentString
= "\r\n";
400 ArgumentString
= (CHAR8
*)&FormatCharacter
;
401 Flags
|= ARGUMENT_UNICODE
;
406 // Retrieve the ArgumentString attriubutes
408 if ((Flags
& ARGUMENT_UNICODE
) != 0) {
409 ArgumentMask
= 0xffff;
410 BytesPerArgumentCharacter
= 2;
413 BytesPerArgumentCharacter
= 1;
415 if ((Flags
& ARGUMENT_REVERSED
) != 0) {
416 BytesPerArgumentCharacter
= -BytesPerArgumentCharacter
;
419 // Compute the number of characters in ArgumentString and store it in Count
420 // ArgumentString is either null-terminated, or it contains Precision characters
422 for (Count
= 0; Count
< Precision
|| ((Flags
& PRECISION
) == 0); Count
++) {
423 ArgumentCharacter
= ((ArgumentString
[Count
* BytesPerArgumentCharacter
] & 0xff) | ((ArgumentString
[Count
* BytesPerArgumentCharacter
+ 1]) << 8)) & ArgumentMask
;
424 if (ArgumentCharacter
== 0) {
431 // Limit the length of the string to append to the remaining characters in the output buffer
433 if (Count
> BufferSize
) {
436 if (Precision
< Count
) {
441 // Pad before the string
443 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
)) {
444 Buffer
= BasePrintLibFillBuffer (Buffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
449 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, Prefix
, BytesPerOutputCharacter
);
451 Buffer
= BasePrintLibFillBuffer (Buffer
, Precision
- Count
, '0', BytesPerOutputCharacter
);
453 Buffer
= BasePrintLibFillBuffer (Buffer
, Precision
- Count
, ' ', BytesPerOutputCharacter
);
455 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, Prefix
, BytesPerOutputCharacter
);
460 // Output the Prefix character if it is present
468 // Copy the string into the output buffer performing the required type conversions
470 while (Index
< Count
) {
471 ArgumentCharacter
= ((*ArgumentString
& 0xff) | (*(ArgumentString
+ 1) << 8)) & ArgumentMask
;
473 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, ArgumentCharacter
, BytesPerOutputCharacter
);
474 ArgumentString
+= BytesPerArgumentCharacter
;
482 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, ',', BytesPerOutputCharacter
);
489 // Pad after the string
491 if ((Flags
& (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) == (PAD_TO_WIDTH
| LEFT_JUSTIFY
)) {
492 Buffer
= BasePrintLibFillBuffer (Buffer
, Width
- Precision
, ' ', BytesPerOutputCharacter
);
496 // Reduce the number of characters
501 // Get the next character from the format string
503 Format
+= BytesPerFormatCharacter
;
506 // Get the next character from the format string
508 FormatCharacter
= (*Format
| (*(Format
+ 1) << 8)) & FormatMask
;
512 // Null terminate the Unicode or ASCII string
514 Buffer
= BasePrintLibFillBuffer (Buffer
, 1, 0, BytesPerOutputCharacter
);
516 return ((Buffer
- OriginalBuffer
) / BytesPerOutputCharacter
);
520 Worker function that produces a Null-terminated string in an output buffer
521 based on a Null-terminated format string and variable argument list.
523 VSPrint function to process format and place the results in Buffer. Since a
524 VA_LIST is used this rountine allows the nesting of Vararg routines. Thus
525 this is the main print working routine
527 @param Buffer Character buffer to print the results of the parsing
529 @param BufferSize Maximum number of characters to put into buffer.
531 @param Flags Intial flags value.
532 Can only have FORMAT_UNICODE and OUTPUT_UNICODE set
533 @param FormatString Null-terminated format string.
535 @return Number of characters printed.
540 OUT CHAR8
*StartOfBuffer
,
543 IN CONST CHAR8
*FormatString
,
549 VA_START (Marker
, FormatString
);
550 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, Flags
, FormatString
, Marker
);
554 Produces a Null-terminated Unicode string in an output buffer based on
555 a Null-terminated Unicode format string and a VA_LIST argument list
557 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
559 The Unicode string is produced by parsing the format string specified by FormatString.
560 Arguments are pulled from the variable argument list specified by Marker based on the
561 contents of the format string.
562 The length of the produced output buffer is returned.
563 If BufferSize is 0, then no output buffer is produced and 0 is returned.
565 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
566 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
567 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
568 PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
569 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
570 contains more than PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
572 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
574 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
575 @param FormatString Null-terminated Unicode format string.
576 @param Marker VA_LIST marker for the variable argument list.
578 @return return Length of the produced output buffer.
584 OUT CHAR16
*StartOfBuffer
,
586 IN CONST CHAR16
*FormatString
,
590 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, FORMAT_UNICODE
| OUTPUT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
594 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
595 Unicode format string and variable argument list.
597 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
599 The Unicode string is produced by parsing the format string specified by FormatString.
600 Arguments are pulled from the variable argument list based on the 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.
616 @return Length of the produced output buffer.
622 OUT CHAR16
*StartOfBuffer
,
624 IN CONST CHAR16
*FormatString
,
630 VA_START (Marker
, FormatString
);
631 return UnicodeVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
635 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
636 ASCII format string and a VA_LIST argument list
638 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
640 The Unicode string is produced by parsing the format string specified by FormatString.
641 Arguments are pulled from the variable argument list specified by Marker based on the
642 contents of the format string.
643 The length of the produced output buffer is returned.
644 If BufferSize is 0, then no output buffer is produced and 0 is returned.
646 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
647 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
648 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
649 PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
650 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
651 contains more than PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
653 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
655 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
656 @param FormatString Null-terminated Unicode format string.
657 @param Marker VA_LIST marker for the variable argument list.
659 @return Length of the produced output buffer.
664 UnicodeVSPrintAsciiFormat (
665 OUT CHAR16
*StartOfBuffer
,
667 IN CONST CHAR8
*FormatString
,
671 return BasePrintLibVSPrint ((CHAR8
*)StartOfBuffer
, BufferSize
>> 1, OUTPUT_UNICODE
,FormatString
, Marker
);
675 Produces a Null-terminated Unicode string in an output buffer based on a Null-terminated
676 ASCII format string and variable argument list.
678 Produces a Null-terminated Unicode string in the output buffer specified by StartOfBuffer
680 The Unicode string is produced by parsing the format string specified by FormatString.
681 Arguments are pulled from the variable argument list based on the contents of the
683 The length of the produced output buffer is returned.
684 If BufferSize is 0, then no output buffer is produced and 0 is returned.
686 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
687 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
688 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
689 PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
690 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
691 contains more than PcdMaximumUnicodeStringLength Unicode characters, then ASSERT().
693 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
695 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
696 @param FormatString Null-terminated Unicode format string.
698 @return Length of the produced output buffer.
703 UnicodeSPrintAsciiFormat (
704 OUT CHAR16
*StartOfBuffer
,
706 IN CONST CHAR8
*FormatString
,
712 VA_START (Marker
, FormatString
);
713 return UnicodeVSPrintAsciiFormat (StartOfBuffer
, BufferSize
>> 1, FormatString
, Marker
);
717 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
718 ASCII format string and a VA_LIST argument list.
720 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
722 The ASCII string is produced by parsing the format string specified by FormatString.
723 Arguments are pulled from the variable argument list specified by Marker based on
724 the contents of the format string.
725 The length of the produced output buffer is returned.
726 If BufferSize is 0, then no output buffer is produced and 0 is returned.
728 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
729 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
730 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
731 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
732 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
733 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
735 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
737 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
738 @param FormatString Null-terminated Unicode format string.
739 @param Marker VA_LIST marker for the variable argument list.
741 @return Length of the produced output buffer.
747 OUT CHAR8
*StartOfBuffer
,
749 IN CONST CHAR8
*FormatString
,
753 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, 0, FormatString
, Marker
);
757 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
758 ASCII format string and variable argument list.
760 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
762 The ASCII string is produced by parsing the format string specified by FormatString.
763 Arguments are pulled from the variable argument list based on the contents of the
765 The length of the produced output buffer is returned.
766 If BufferSize is 0, then no output buffer is produced and 0 is returned.
768 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
769 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
770 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
771 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
772 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
773 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
775 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
777 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
778 @param FormatString Null-terminated Unicode format string.
780 @return Length of the produced output buffer.
786 OUT CHAR8
*StartOfBuffer
,
788 IN CONST CHAR8
*FormatString
,
794 VA_START (Marker
, FormatString
);
795 return AsciiVSPrint (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
799 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
800 ASCII format string and a VA_LIST argument list.
802 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
804 The ASCII string is produced by parsing the format string specified by FormatString.
805 Arguments are pulled from the variable argument list specified by Marker based on
806 the contents of the format string.
807 The length of the produced output buffer is returned.
808 If BufferSize is 0, then no output buffer is produced and 0 is returned.
810 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
811 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
812 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
813 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
814 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
815 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
817 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
819 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
820 @param FormatString Null-terminated Unicode format string.
821 @param Marker VA_LIST marker for the variable argument list.
823 @return Length of the produced output buffer.
828 AsciiVSPrintUnicodeFormat (
829 OUT CHAR8
*StartOfBuffer
,
831 IN CONST CHAR16
*FormatString
,
835 return BasePrintLibVSPrint (StartOfBuffer
, BufferSize
, FORMAT_UNICODE
, (CHAR8
*)FormatString
, Marker
);
839 Produces a Null-terminated ASCII string in an output buffer based on a Null-terminated
840 ASCII format string and variable argument list.
842 Produces a Null-terminated ASCII string in the output buffer specified by StartOfBuffer
844 The ASCII string is produced by parsing the format string specified by FormatString.
845 Arguments are pulled from the variable argument list based on the contents of the
847 The length of the produced output buffer is returned.
848 If BufferSize is 0, then no output buffer is produced and 0 is returned.
850 If BufferSize is not 0 and StartOfBuffer is NULL, then ASSERT().
851 If BufferSize is not 0 and FormatString is NULL, then ASSERT().
852 If PcdMaximumUnicodeStringLength is not zero, and FormatString contains more than
853 PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
854 If PcdMaximumUnicodeStringLength is not zero, and produced Null-terminated Unicode string
855 contains more than PcdMaximumUnicodeStringLength ASCII characters, then ASSERT().
857 @param StartOfBuffer APointer to the output buffer for the produced Null-terminated
859 @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer.
860 @param FormatString Null-terminated Unicode format string.
862 @return Length of the produced output buffer.
867 AsciiSPrintUnicodeFormat (
868 OUT CHAR8
*StartOfBuffer
,
870 IN CONST CHAR16
*FormatString
,
876 VA_START (Marker
, FormatString
);
877 return AsciiVSPrintUnicodeFormat (StartOfBuffer
, BufferSize
, FormatString
, Marker
);
881 Converts a decimal value to a Null-terminated Unicode string.
883 Converts the decimal number specified by Value to a Null-terminated Unicode
884 string specified by Buffer containing at most Width characters.
885 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
886 The total number of characters placed in Buffer is returned.
887 If the conversion contains more than Width characters, then only the first
888 Width characters are returned, and the total number of characters
889 required to perform the conversion is returned.
890 Additional conversion parameters are specified in Flags.
891 The Flags bit LEFT_JUSTIFY is always ignored.
892 All conversions are left justified in Buffer.
893 If Width is 0, PREFIX_ZERO is ignored in Flags.
894 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
895 are inserted every 3rd digit starting from the right.
896 If Value is < 0, then the fist character in Buffer is a '-'.
897 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored,
898 then Buffer is padded with '0' characters so the combination of the optional '-'
899 sign character, '0' characters, digit characters for Value, and the Null-terminator
900 add up to Width characters.
902 If Buffer is NULL, then ASSERT().
903 If unsupported bits are set in Flags, then ASSERT().
904 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
906 @param Buffer Pointer to the output buffer for the produced Null-terminated
908 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
909 @param Value The 64-bit signed value to convert to a string.
910 @param Width The maximum number of Unicode characters to place in Buffer.
912 @return Total number of characters required to perform the conversion.
917 UnicodeValueToString (
918 IN OUT CHAR16
*Buffer
,
924 return BasePrintLibConvertValueToString ((CHAR8
*)Buffer
, Flags
, Value
, Width
, 2);
928 Converts a decimal value to a Null-terminated ASCII string.
930 Converts the decimal number specified by Value to a Null-terminated ASCII string
931 specified by Buffer containing at most Width characters.
932 If Width is 0 then a width of MAXIMUM_VALUE_CHARACTERS is assumed.
933 The total number of characters placed in Buffer is returned.
934 If the conversion contains more than Width characters, then only the first Width
935 characters are returned, and the total number of characters required to perform
936 the conversion is returned.
937 Additional conversion parameters are specified in Flags.
938 The Flags bit LEFT_JUSTIFY is always ignored.
939 All conversions are left justified in Buffer.
940 If Width is 0, PREFIX_ZERO is ignored in Flags.
941 If COMMA_TYPE is set in Flags, then PREFIX_ZERO is ignored in Flags, and commas
942 are inserted every 3rd digit starting from the right.
943 If Value is < 0, then the fist character in Buffer is a '-'.
944 If PREFIX_ZERO is set in Flags and PREFIX_ZERO is not being ignored, then Buffer
945 is padded with '0' characters so the combination of the optional '-'
946 sign character, '0' characters, digit characters for Value, and the
947 Null-terminator add up to Width characters.
949 If Buffer is NULL, then ASSERT().
950 If unsupported bits are set in Flags, then ASSERT().
951 If Width >= MAXIMUM_VALUE_CHARACTERS, then ASSERT()
953 @param Buffer Pointer to the output buffer for the produced Null-terminated
955 @param Flags The bitmask of flags that specify left justification, zero pad, and commas.
956 @param Value The 64-bit signed value to convert to a string.
957 @param Width The maximum number of ASCII characters to place in Buffer.
959 @return Total number of characters required to perform the conversion.
965 IN OUT CHAR8
*Buffer
,
971 return BasePrintLibConvertValueToString ((CHAR8
*)Buffer
, Flags
, Value
, Width
, 1);