]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/CodeTools/Source/String/PrintLibInternal.c
More renames for Tool Packages
[mirror_edk2.git] / Tools / CodeTools / Source / String / PrintLibInternal.c
CommitLineData
56fe62ce 1/*++\r
cf171110 2\r
3Copyright (c) 2004-2006 Intel Corporation. All rights reserved\r
56fe62ce 4This program and the accompanying materials are licensed and made available\r
5under the terms and conditions of the BSD License which accompanies this\r
6distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12\r
13Module Name:\r
d2ec0d9e 14\r
56fe62ce 15 PrintLibInternal.c\r
d2ec0d9e 16\r
56fe62ce 17Abstract:\r
d2ec0d9e 18\r
56fe62ce 19 Print Library worker functions.\r
20\r
21--*/\r
d2ec0d9e 22\r
ce53a8c3 23#include <Common/UefiBaseTypes.h>\r
24#include <Library/PrintLib.h>\r
25\r
26#include "CommonLib.h"\r
d2ec0d9e 27#include "PrintLibInternal.h"\r
28\r
29static CONST CHAR8 mHexStr[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};\r
30\r
31CHAR8 *\r
32BasePrintLibFillBuffer (\r
33 CHAR8 *Buffer,\r
34 INTN Length,\r
35 UINTN Character,\r
36 INTN Increment\r
37 )\r
38{\r
39 INTN Index;\r
40\r
41 for (Index = 0; Index < Length; Index++) {\r
42 *Buffer = (CHAR8) Character;\r
43 *(Buffer + 1) = (CHAR8) (Character >> 8);\r
44 Buffer += Increment;\r
45 }\r
46 return Buffer;\r
47}\r
48\r
49/**\r
50 Print worker function that prints a Value as a decimal number in Buffer.\r
51\r
52 @param Buffer Location to place the Unicode or ASCII string of Value.\r
56fe62ce 53\r
d2ec0d9e 54 @param Value Value to convert to a Decimal or Hexidecimal string in Buffer.\r
56fe62ce 55\r
d2ec0d9e 56 @param Flags Flags to use in printing string, see file header for details.\r
56fe62ce 57\r
d2ec0d9e 58 @param Precision Minimum number of digits to return in the ASCII string\r
59\r
60 @return Number of characters printed.\r
61\r
62**/\r
63UINTN\r
64EFIAPI\r
65BasePrintLibValueToString (\r
66 IN OUT CHAR8 *Buffer,\r
67 IN INT64 Value,\r
68 IN UINTN Radix\r
69 )\r
70{\r
71 UINTN Digits;\r
72 UINT32 Remainder;\r
73\r
74 //\r
75 // Loop to convert one digit at a time in reverse order\r
76 //\r
77 *(Buffer++) = 0;\r
78 Digits = 0;\r
79 do {\r
80 // Value = (INT64)DivU64x32Remainder ((UINT64)Value, (UINT32)Radix, &Remainder);\r
81 Remainder = (UINT64)Value % (UINT32)Radix;\r
82 Value = (UINT64)Value / (UINT32)Radix;\r
83 *(Buffer++) = mHexStr[Remainder];\r
84 Digits++;\r
85 } while (Value != 0);\r
86 return Digits;\r
87}\r
88\r
89UINTN\r
90BasePrintLibConvertValueToString (\r
91 IN OUT CHAR8 *Buffer,\r
92 IN UINTN Flags,\r
93 IN INT64 Value,\r
94 IN UINTN Width,\r
95 IN UINTN Increment\r
96 )\r
97{\r
98 CHAR8 *OriginalBuffer;\r
99 CHAR8 ValueBuffer[MAXIMUM_VALUE_CHARACTERS];\r
100 UINTN Count;\r
101 UINTN Digits;\r
102 UINTN Index;\r
103\r
104 OriginalBuffer = Buffer;\r
105\r
106 if (Width == 0 || (Flags & COMMA_TYPE) != 0) {\r
107 Flags &= (~PREFIX_ZERO);\r
108 }\r
109\r
110 if (Width == 0 || Width > (MAXIMUM_VALUE_CHARACTERS - 1)) {\r
111 Width = MAXIMUM_VALUE_CHARACTERS - 1;\r
112 }\r
113\r
114 if (Value < 0) {\r
115 Value = -Value;\r
116 Buffer = BasePrintLibFillBuffer (Buffer, 1, '-', Increment);\r
117 }\r
118\r
119 Count = BasePrintLibValueToString (ValueBuffer, Value, 10);\r
120\r
121 if ((Flags & PREFIX_ZERO) != 0) {\r
122 Buffer = BasePrintLibFillBuffer (Buffer, Width - Count, '0', Increment);\r
123 }\r
124\r
125 Digits = 3 - (Count % 3);\r
126 for (Index = 0; Index < Count; Index++) {\r
127 Buffer = BasePrintLibFillBuffer (Buffer, 1, ValueBuffer[Count - Index], Increment);\r
128 if ((Flags & COMMA_TYPE) != 0) {\r
129 Digits++;\r
130 if (Digits == 3) {\r
131 Digits = 0;\r
132 if ((Index + 1) < Count) {\r
133 Buffer = BasePrintLibFillBuffer (Buffer, 1, ',', Increment);\r
134 }\r
135 }\r
136 }\r
137 }\r
138\r
139 Buffer = BasePrintLibFillBuffer (Buffer, 1, 0, Increment);\r
140\r
141 return ((Buffer - OriginalBuffer) / Increment);\r
142}\r