Initial import.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
bbahnsen
2006-04-21 22:54:32 +00:00
commit 878ddf1fc3
2651 changed files with 624620 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2006, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-->
<LibraryModuleBuildDescription xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.TianoCore.org/2006/Edk2.0 http://www.TianoCore.org/2006/Edk2.0/SurfaceArea.xsd">
<MbdLibHeader>
<BaseName>BasePrintLib</BaseName>
<Guid>a86fbfca-0183-4eeb-aa8a-762e3b7da1f3</Guid>
<Version>0</Version>
<Description>FIX ME!</Description>
<Copyright>Copyright (c) 2004-2006, Intel Corporation</Copyright>
<License>
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
</License>
<Created>2006-03-09 23:16</Created>
<Modified>2006-03-19 15:17</Modified>
</MbdLibHeader>
</LibraryModuleBuildDescription>

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2006, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-->
<LibraryModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.TianoCore.org/2006/Edk2.0 http://www.TianoCore.org/2006/Edk2.0/SurfaceArea.xsd">
<MsaLibHeader>
<BaseName>BasePrintLib</BaseName>
<ModuleType>BASE</ModuleType>
<ComponentType>LIBRARY</ComponentType>
<Guid>a86fbfca-0183-4eeb-aa8a-762e3b7da1f3</Guid>
<Version>0</Version>
<Abstract>Component description file for the entry point to a EFIDXE Drivers</Abstract>
<Description>FIX ME!</Description>
<Copyright>Copyright (c) 2004-2006, Intel Corporation</Copyright>
<License>
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
</License>
<Specification>0</Specification>
<Created>2006-03-09 23:16</Created>
<Updated>2006-03-19 15:17</Updated>
</MsaLibHeader>
<LibraryClassDefinitions>
<LibraryClass Usage="ALWAYS_PRODUCED">PrintLib</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">BaseLib</LibraryClass>
</LibraryClassDefinitions>
<SourceFiles>
<Filename>PrintLib.c</Filename>
<Filename>PrintLibInternal.c</Filename>
<Filename>PrintLibInternal.h</Filename>
</SourceFiles>
<Includes>
<PackageName>MdePkg</PackageName>
</Includes>
</LibraryModuleSurfaceArea>

View File

@@ -0,0 +1,639 @@
/** @file
Print Library.
Copyright (c) 2006, Intel Corporation<BR>
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name: PrintLib.c
**/
#include "PrintLibInternal.h"
typedef struct {
RETURN_STATUS Status;
CHAR8 *String;
} STATUS_LOOKUP_TABLE_ENTRY;
static CONST STATUS_LOOKUP_TABLE_ENTRY StatusString[] = {
{ RETURN_SUCCESS, "Success" },
{ RETURN_LOAD_ERROR, "Load Error" },
{ RETURN_INVALID_PARAMETER, "Invalid Parameter" },
{ RETURN_UNSUPPORTED, "Unsupported" },
{ RETURN_BAD_BUFFER_SIZE, "Bad Buffer Size" },
{ RETURN_BUFFER_TOO_SMALL, "Buffer Too Small" },
{ RETURN_NOT_READY, "Not Ready" },
{ RETURN_DEVICE_ERROR, "Device Error" },
{ RETURN_WRITE_PROTECTED, "Write Protected" },
{ RETURN_OUT_OF_RESOURCES, "Out of Resources" },
{ RETURN_VOLUME_CORRUPTED, "Volume Corrupt" },
{ RETURN_VOLUME_FULL, "Volume Full" },
{ RETURN_NO_MEDIA, "No Media" },
{ RETURN_MEDIA_CHANGED, "Media changed" },
{ RETURN_NOT_FOUND, "Not Found" },
{ RETURN_ACCESS_DENIED, "Access Denied" },
{ RETURN_NO_RESPONSE, "No Response" },
{ RETURN_NO_MAPPING, "No mapping" },
{ RETURN_TIMEOUT, "Time out" },
{ RETURN_NOT_STARTED, "Not started" },
{ RETURN_ALREADY_STARTED, "Already started" },
{ RETURN_ABORTED, "Aborted" },
{ RETURN_ICMP_ERROR, "ICMP Error" },
{ RETURN_TFTP_ERROR, "TFTP Error" },
{ RETURN_PROTOCOL_ERROR, "Protocol Error" },
{ RETURN_WARN_UNKNOWN_GLYPH, "Warning Unknown Glyph" },
{ RETURN_WARN_DELETE_FAILURE, "Warning Delete Failure" },
{ RETURN_WARN_WRITE_FAILURE, "Warning Write Failure" },
{ RETURN_WARN_BUFFER_TOO_SMALL, "Warning Buffer Too Small" },
{ 0, NULL }
};
/**
VSPrint function to process format and place the results in Buffer. Since a
VA_LIST is used this rountine allows the nesting of Vararg routines. Thus
this is the main print working routine
@param StartOfBuffer Unicode buffer to print the results of the parsing of Format into.
@param BufferSize Maximum number of characters to put into buffer. Zero means
no limit.
@param Flags Intial flags value. Can only have FORMAT_UNICODE and OUTPUT_UNICODE set
@param FormatString Unicode format string see file header for more details.
@param Marker Vararg list consumed by processing Format.
@return Number of characters printed.
**/
UINTN
BasePrintLibVSPrint (
OUT CHAR8 *Buffer,
IN UINTN BufferSize,
IN UINTN Flags,
IN CONST CHAR8 *Format,
IN VA_LIST Marker
)
{
CHAR8 *OriginalBuffer;
CHAR8 ValueBuffer[MAXIMUM_VALUE_CHARACTERS];
UINTN BytesPerOutputCharacter;
UINTN BytesPerFormatCharacter;
UINTN FormatMask;
UINTN FormatCharacter;
UINTN Width;
UINTN Precision;
INT64 Value;
CHAR8 *ArgumentString;
UINTN Character;
GUID *TmpGuid;
TIME *TmpTime;
UINTN Count;
UINTN ArgumentMask;
INTN BytesPerArgumentCharacter;
UINTN ArgumentCharacter;
BOOLEAN Done;
UINTN Index;
CHAR8 Prefix;
BOOLEAN ZeroPad;
BOOLEAN Comma;
UINTN Digits;
UINTN Radix;
RETURN_STATUS Status;
OriginalBuffer = Buffer;
if ((Flags & OUTPUT_UNICODE) != 0) {
BytesPerOutputCharacter = 2;
} else {
BytesPerOutputCharacter = 1;
}
if ((Flags & FORMAT_UNICODE) != 0) {
BytesPerFormatCharacter = 2;
FormatMask = 0xffff;
} else {
BytesPerFormatCharacter = 1;
FormatMask = 0xff;
}
//
// Reserve space for the Null terminator.
// If BufferSize is 0, this will set BufferSize to the max unsigned value
//
BufferSize--;
//
// Get the first character from the format string
//
FormatCharacter = (*Format | (*(Format + 1) << 8)) & FormatMask;
//
// Loop until the end of the format string is reached or the output buffer is full
//
while (FormatCharacter != 0 && BufferSize > 0) {
//
// Clear all the flag bits except those that may have been passed in
//
Flags &= (OUTPUT_UNICODE | FORMAT_UNICODE);
//
// Set the default width to zero, and the default precision to 1
//
Width = 0;
Precision = 1;
Prefix = 0;
Comma = FALSE;
ZeroPad = FALSE;
Count = 0;
Digits = 0;
switch (FormatCharacter) {
case '%':
//
// Parse Flags and Width
//
for (Done = FALSE; !Done; ) {
Format += BytesPerFormatCharacter;
FormatCharacter = (*Format | (*(Format + 1) << 8)) & FormatMask;
switch (FormatCharacter) {
case '.':
Flags |= PRECISION;
break;
case '-':
Flags |= LEFT_JUSTIFY;
break;
case '+':
Flags |= PREFIX_SIGN;
break;
case ' ':
Flags |= PREFIX_BLANK;
break;
case ',':
Flags |= COMMA_TYPE;
break;
case 'L':
case 'l':
Flags |= LONG_TYPE;
break;
case '*':
if ((Flags & PRECISION) == 0) {
Flags |= PAD_TO_WIDTH;
Width = VA_ARG (Marker, UINTN);
} else {
Precision = VA_ARG (Marker, UINTN);
}
break;
case '0':
if ((Flags & PRECISION) == 0) {
Flags |= PREFIX_ZERO;
}
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
for (Count = 0; ((FormatCharacter >= '0') && (FormatCharacter <= '9')); ){
Count = (Count * 10) + FormatCharacter - '0';
Format += BytesPerFormatCharacter;
FormatCharacter = (*Format | (*(Format + 1) << 8)) & FormatMask;
}
Format -= BytesPerFormatCharacter;
if ((Flags & PRECISION) == 0) {
Flags |= PAD_TO_WIDTH;
Width = Count;
} else {
Precision = Count;
}
break;
default:
Done = TRUE;
break;
}
}
//
// Limit the maximum field width to the remaining characters in the output buffer
//
if (Width > BufferSize) {
Width = BufferSize;
}
//
// Handle each argument type
//
switch (FormatCharacter) {
case 'X':
Flags |= PREFIX_ZERO;
//
// break skiped on purpose
//
case 'x':
Flags |= RADIX_HEX;
//
// break skiped on purpose
//
case 'd':
if ((Flags & LONG_TYPE) == 0) {
Value = (VA_ARG (Marker, INTN));
} else {
Value = VA_ARG (Marker, INT64);
}
if ((Flags & PREFIX_BLANK) != 0) {
Prefix = ' ';
}
if ((Flags & PREFIX_SIGN) != 0) {
Prefix = '+';
}
if ((Flags & COMMA_TYPE) != 0) {
Comma = TRUE;
}
if ((Flags & RADIX_HEX) == 0) {
Radix = 10;
if (Comma) {
Flags &= (~PREFIX_ZERO);
Precision = 1;
}
if (Value < 0) {
Flags |= PREFIX_SIGN;
Prefix = '-';
Value = -Value;
}
} else {
Radix = 16;
Comma = FALSE;
if ((Flags & LONG_TYPE) == 0 && Value < 0) {
Value = (UINTN)Value;
}
}
//
// Convert Value to a reversed string
//
Count = BasePrintLibValueToString (ValueBuffer, Value, Radix);
if (Value == 0 && Precision == 0) {
Count = 0;
}
ArgumentString = (CHAR8 *)ValueBuffer + Count;
Digits = 3 - (Count % 3);
if (Comma && Count != 0) {
Count += ((Count - 1) / 3);
}
if (Prefix != 0) {
Count++;
}
Flags |= ARGUMENT_REVERSED;
ZeroPad = TRUE;
if ((Flags & PREFIX_ZERO) != 0) {
if ((Flags & PAD_TO_WIDTH) != 0) {
if ((Flags & PRECISION) == 0) {
Precision = Width;
}
}
}
break;
case 's':
case 'S':
Flags |= ARGUMENT_UNICODE;
//
// break skipped on purpose
//
case 'a':
ArgumentString = (CHAR8 *)VA_ARG (Marker, CHAR8 *);
if (ArgumentString == NULL) {
Flags &= (~ARGUMENT_UNICODE);
ArgumentString = "<null string>";
}
break;
case 'c':
Character = VA_ARG (Marker, UINTN) & 0xffff;
ArgumentString = (CHAR8 *)&Character;
Flags |= ARGUMENT_UNICODE;
break;
case 'g':
TmpGuid = VA_ARG (Marker, GUID *);
if (TmpGuid == NULL) {
ArgumentString = "<null guid>";
} else {
BasePrintLibSPrint (
ValueBuffer,
0,
0,
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
TmpGuid->Data1,
TmpGuid->Data2,
TmpGuid->Data3,
TmpGuid->Data4[0],
TmpGuid->Data4[1],
TmpGuid->Data4[2],
TmpGuid->Data4[3],
TmpGuid->Data4[4],
TmpGuid->Data4[5],
TmpGuid->Data4[6],
TmpGuid->Data4[7]
);
ArgumentString = ValueBuffer;
}
break;
case 't':
TmpTime = VA_ARG (Marker, TIME *);
if (TmpTime == NULL) {
ArgumentString = "<null time>";
} else {
BasePrintLibSPrint (
ValueBuffer,
0,
0,
"%02d/%02d/%04d %02d:%02d",
TmpTime->Month,
TmpTime->Day,
TmpTime->Year,
TmpTime->Hour,
TmpTime->Minute
);
ArgumentString = ValueBuffer;
}
break;
case 'r':
Status = VA_ARG (Marker, RETURN_STATUS);
ArgumentString = ValueBuffer;
for (Index = 0; StatusString[Index].String != NULL; Index++) {
if (Status == StatusString[Index].Status) {
ArgumentString = StatusString[Index].String;
}
}
if (ArgumentString == ValueBuffer) {
BasePrintLibSPrint ((CHAR8 *) ValueBuffer, 0, 0, "%08X", Status);
}
break;
case '%':
default:
//
// if the type is '%' or unknown, then print it to the screen
//
ArgumentString = (CHAR8 *)&FormatCharacter;
Flags |= ARGUMENT_UNICODE;
break;
}
break;
case '\n':
ArgumentString = "\r\n";
break;
default:
ArgumentString = (CHAR8 *)&FormatCharacter;
Flags |= ARGUMENT_UNICODE;
break;
}
//
// Retrieve the ArgumentString attriubutes
//
if ((Flags & ARGUMENT_UNICODE) != 0) {
ArgumentMask = 0xffff;
BytesPerArgumentCharacter = 2;
} else {
ArgumentMask = 0xff;
BytesPerArgumentCharacter = 1;
}
if ((Flags & ARGUMENT_REVERSED) != 0) {
BytesPerArgumentCharacter = -BytesPerArgumentCharacter;
} else {
//
// Compute the number of characters in ArgumentString and store it in Count
// ArgumentString is either null-terminated, or it contains Precision characters
//
for (Count = 0; Count < Precision || ((Flags & PRECISION) == 0); Count++) {
ArgumentCharacter = ((ArgumentString[Count * BytesPerArgumentCharacter] & 0xff) | ((ArgumentString[Count * BytesPerArgumentCharacter + 1]) << 8)) & ArgumentMask;
if (ArgumentCharacter == 0) {
break;
}
}
}
//
// Limit the length of the string to append to the remaining characters in the output buffer
//
if (Count > BufferSize) {
Count = BufferSize;
}
if (Precision < Count) {
Precision = Count;
}
//
// Pad before the string
//
if ((Flags & (PAD_TO_WIDTH | LEFT_JUSTIFY)) == (PAD_TO_WIDTH)) {
Buffer = BasePrintLibFillBuffer (Buffer, Width - Precision, ' ', BytesPerOutputCharacter);
}
if (ZeroPad) {
if (Prefix != 0) {
Buffer = BasePrintLibFillBuffer (Buffer, 1, Prefix, BytesPerOutputCharacter);
}
Buffer = BasePrintLibFillBuffer (Buffer, Precision - Count, '0', BytesPerOutputCharacter);
} else {
Buffer = BasePrintLibFillBuffer (Buffer, Precision - Count, ' ', BytesPerOutputCharacter);
if (Prefix != 0) {
Buffer = BasePrintLibFillBuffer (Buffer, 1, Prefix, BytesPerOutputCharacter);
}
}
//
// Output the Prefix character if it is present
//
Index = 0;
if (Prefix) {
Index++;
}
//
// Copy the string into the output buffer performing the required type conversions
//
while (Index < Count) {
ArgumentCharacter = ((*ArgumentString & 0xff) | (*(ArgumentString + 1) << 8)) & ArgumentMask;
Buffer = BasePrintLibFillBuffer (Buffer, 1, ArgumentCharacter, BytesPerOutputCharacter);
ArgumentString += BytesPerArgumentCharacter;
Index++;
if (Comma) {
Digits++;
if (Digits == 3) {
Digits = 0;
Index++;
if (Index < Count) {
Buffer = BasePrintLibFillBuffer (Buffer, 1, ',', BytesPerOutputCharacter);
}
}
}
}
//
// Pad after the string
//
if ((Flags & (PAD_TO_WIDTH | LEFT_JUSTIFY)) == (PAD_TO_WIDTH | LEFT_JUSTIFY)) {
Buffer = BasePrintLibFillBuffer (Buffer, Width - Precision, ' ', BytesPerOutputCharacter);
}
//
// Reduce the number of characters
//
BufferSize -= Count;
//
// Get the next character from the format string
//
Format += BytesPerFormatCharacter;
//
// Get the next character from the format string
//
FormatCharacter = (*Format | (*(Format + 1) << 8)) & FormatMask;
}
//
// Null terminate the Unicode or ASCII string
//
Buffer = BasePrintLibFillBuffer (Buffer, 1, 0, BytesPerOutputCharacter);
return ((Buffer - OriginalBuffer) / BytesPerOutputCharacter);
}
UINTN
BasePrintLibSPrint (
OUT CHAR8 *StartOfBuffer,
IN UINTN BufferSize,
IN UINTN Flags,
IN CONST CHAR8 *FormatString,
...
)
{
VA_LIST Marker;
VA_START (Marker, FormatString);
return BasePrintLibVSPrint (StartOfBuffer, BufferSize, Flags, FormatString, Marker);
}
UINTN
EFIAPI
UnicodeVSPrint (
OUT CHAR16 *StartOfBuffer,
IN UINTN BufferSize,
IN CONST CHAR16 *FormatString,
IN VA_LIST Marker
)
{
return BasePrintLibVSPrint ((CHAR8 *)StartOfBuffer, BufferSize >> 1, FORMAT_UNICODE | OUTPUT_UNICODE, (CHAR8 *)FormatString, Marker);
}
UINTN
EFIAPI
UnicodeSPrint (
OUT CHAR16 *StartOfBuffer,
IN UINTN BufferSize,
IN CONST CHAR16 *FormatString,
...
)
{
VA_LIST Marker;
VA_START (Marker, FormatString);
return UnicodeVSPrint (StartOfBuffer, BufferSize, FormatString, Marker);
}
UINTN
EFIAPI
UnicodeVSPrintAsciiFormat (
OUT CHAR16 *StartOfBuffer,
IN UINTN BufferSize,
IN CONST CHAR8 *FormatString,
IN VA_LIST Marker
)
{
return BasePrintLibVSPrint ((CHAR8 *)StartOfBuffer, BufferSize >> 1, OUTPUT_UNICODE,FormatString, Marker);
}
UINTN
EFIAPI
UnicodeSPrintAsciiFormat (
OUT CHAR16 *StartOfBuffer,
IN UINTN BufferSize,
IN CONST CHAR8 *FormatString,
...
)
{
VA_LIST Marker;
VA_START (Marker, FormatString);
return UnicodeVSPrintAsciiFormat (StartOfBuffer, BufferSize >> 1, FormatString, Marker);
}
UINTN
EFIAPI
AsciiVSPrint (
OUT CHAR8 *StartOfBuffer,
IN UINTN BufferSize,
IN CONST CHAR8 *FormatString,
IN VA_LIST Marker
)
{
return BasePrintLibVSPrint (StartOfBuffer, BufferSize, 0, FormatString, Marker);
}
UINTN
EFIAPI
AsciiSPrint (
OUT CHAR8 *StartOfBuffer,
IN UINTN BufferSize,
IN CONST CHAR8 *FormatString,
...
)
{
VA_LIST Marker;
VA_START (Marker, FormatString);
return AsciiVSPrint (StartOfBuffer, BufferSize, FormatString, Marker);
}
UINTN
EFIAPI
AsciiVSPrintUnicodeFormat (
OUT CHAR8 *StartOfBuffer,
IN UINTN BufferSize,
IN CONST CHAR16 *FormatString,
IN VA_LIST Marker
)
{
return BasePrintLibVSPrint (StartOfBuffer, BufferSize, FORMAT_UNICODE, (CHAR8 *)FormatString, Marker);
}
UINTN
EFIAPI
AsciiSPrintUnicodeFormat (
OUT CHAR8 *StartOfBuffer,
IN UINTN BufferSize,
IN CONST CHAR16 *FormatString,
...
)
{
VA_LIST Marker;
VA_START (Marker, FormatString);
return AsciiVSPrintUnicodeFormat (StartOfBuffer, BufferSize, FormatString, Marker);
}

View File

@@ -0,0 +1,153 @@
/** @file
Print Library worker functions.
Copyright (c) 2006, Intel Corporation<BR>
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name: PrintLibInternal.c
**/
#include "PrintLibInternal.h"
static CONST CHAR8 mHexStr[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
CHAR8 *
BasePrintLibFillBuffer (
CHAR8 *Buffer,
INTN Length,
UINTN Character,
INTN Increment
)
{
INTN Index;
for (Index = 0; Index < Length; Index++) {
*Buffer = (CHAR8) Character;
*(Buffer + 1) = (CHAR8) (Character >> 8);
Buffer += Increment;
}
return Buffer;
}
/**
Print worker function that prints a Value as a decimal number in Buffer.
@param Buffer Location to place the Unicode or ASCII string of Value.
@param Value Value to convert to a Decimal or Hexidecimal string in Buffer.
@param Flags Flags to use in printing string, see file header for details.
@param Precision Minimum number of digits to return in the ASCII string
@return Number of characters printed.
**/
UINTN
EFIAPI
BasePrintLibValueToString (
IN OUT CHAR8 *Buffer,
IN INT64 Value,
IN UINTN Radix
)
{
UINTN Digits;
UINT32 Remainder;
//
// Loop to convert one digit at a time in reverse order
//
*(Buffer++) = 0;
Digits = 0;
do {
Value = (INT64)DivU64x32Remainder ((UINT64)Value, (UINT32)Radix, &Remainder);
*(Buffer++) = mHexStr[Remainder];
Digits++;
} while (Value != 0);
return Digits;
}
UINTN
BasePrintLibConvertValueToString (
IN OUT CHAR8 *Buffer,
IN UINTN Flags,
IN INT64 Value,
IN UINTN Width,
IN UINTN Increment
)
{
CHAR8 *OriginalBuffer;
CHAR8 ValueBuffer[MAXIMUM_VALUE_CHARACTERS];
UINTN Count;
UINTN Digits;
UINTN Index;
OriginalBuffer = Buffer;
if (Width == 0 || (Flags & COMMA_TYPE) != 0) {
Flags &= (~PREFIX_ZERO);
}
if (Width == 0 || Width > (MAXIMUM_VALUE_CHARACTERS - 1)) {
Width = MAXIMUM_VALUE_CHARACTERS - 1;
}
if (Value < 0) {
Value = -Value;
Buffer = BasePrintLibFillBuffer (Buffer, 1, '-', Increment);
}
Count = BasePrintLibValueToString (ValueBuffer, Value, 10);
if ((Flags & PREFIX_ZERO) != 0) {
Buffer = BasePrintLibFillBuffer (Buffer, Width - Count, '0', Increment);
}
Digits = 3 - (Count % 3);
for (Index = 0; Index < Count; Index++) {
Buffer = BasePrintLibFillBuffer (Buffer, 1, ValueBuffer[Count - Index], Increment);
if ((Flags & COMMA_TYPE) != 0) {
Digits++;
if (Digits == 3) {
Digits = 0;
if ((Index + 1) < Count) {
Buffer = BasePrintLibFillBuffer (Buffer, 1, ',', Increment);
}
}
}
}
Buffer = BasePrintLibFillBuffer (Buffer, 1, 0, Increment);
return ((Buffer - OriginalBuffer) / Increment);
}
UINTN
UnicodeValueToString (
IN OUT CHAR16 *Buffer,
IN UINTN Flags,
IN INT64 Value,
IN UINTN Width
)
{
return BasePrintLibConvertValueToString ((CHAR8 *)Buffer, Flags, Value, Width, 2);
}
UINTN
AsciiValueToString (
IN OUT CHAR8 *Buffer,
IN UINTN Flags,
IN INT64 Value,
IN UINTN Width
)
{
return BasePrintLibConvertValueToString ((CHAR8 *)Buffer, Flags, Value, Width, 1);
}

View File

@@ -0,0 +1,87 @@
/** @file
Print Library.
Copyright (c) 2006, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name: PrintLibInternal.h
**/
//
// Print primitives
//
//#define LEFT_JUSTIFY 0x01
#define PREFIX_SIGN 0x02
#define PREFIX_BLANK 0x04
//#define COMMA_TYPE 0x08
#define LONG_TYPE 0x10
//#define PREFIX_ZERO 0x20
#define OUTPUT_UNICODE 0x40
#define RADIX_HEX 0x80
#define FORMAT_UNICODE 0x100
#define PAD_TO_WIDTH 0x200
#define ARGUMENT_UNICODE 0x400
#define PRECISION 0x800
#define ARGUMENT_REVERSED 0x1000
///
/// Define the maximum number of characters that are required to encode
/// a decimal, hexidecimal, GUID, or TIME value with a Nll terminator.
/// Maximum Length Decimal String = 28 "-9,223,372,036,854,775,808"
/// Maximum Length Hexidecimal String = 17 "FFFFFFFFFFFFFFFF"
/// Maximum Length GUID = 37 "00000000-0000-0000-0000-000000000000"
/// Maximum Length TIME = 17 "12/12/2006 12:12"
///
#define MAXIMUM_VALUE_CHARACTERS 38
//
//
//
typedef struct {
UINT16 Year;
UINT8 Month;
UINT8 Day;
UINT8 Hour;
UINT8 Minute;
UINT8 Second;
UINT8 Pad1;
UINT32 Nanosecond;
INT16 TimeZone;
UINT8 Daylight;
UINT8 Pad2;
} TIME;
UINTN
BasePrintLibSPrint (
OUT CHAR8 *Buffer,
IN UINTN BufferSize,
IN UINTN Flags,
IN CONST CHAR8 *FormatString,
...
);
CHAR8 *
BasePrintLibFillBuffer (
CHAR8 *Buffer,
INTN Length,
UINTN Character,
INTN Increment
);
UINTN
EFIAPI
BasePrintLibValueToString (
IN OUT CHAR8 *Buffer,
IN INT64 Value,
IN UINTN Radix
);

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?><!-- Copyright (c) 2006, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.-->
<project basedir="." default="BasePrintLib"><!--Apply external ANT tasks-->
<taskdef resource="GenBuild.tasks"/>
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<property environment="env"/>
<property name="WORKSPACE_DIR" value="${env.WORKSPACE}"/>
<import file="${WORKSPACE_DIR}\Tools\Conf\BuildMacro.xml"/><!--MODULE_RELATIVE PATH is relative to PACKAGE_DIR-->
<property name="MODULE_RELATIVE_PATH" value="Library\BasePrintLib"/>
<property name="MODULE_DIR" value="${PACKAGE_DIR}\${MODULE_RELATIVE_PATH}"/>
<property name="COMMON_FILE" value="${WORKSPACE_DIR}\Tools\Conf\Common.xml"/>
<target name="BasePrintLib">
<GenBuild baseName="BasePrintLib" mbdFilename="${MODULE_DIR}\BasePrintLib.mbd" msaFilename="${MODULE_DIR}\BasePrintLib.msa"/>
</target>
<target depends="BasePrintLib_clean" name="clean"/>
<target depends="BasePrintLib_cleanall" name="cleanall"/>
<target name="BasePrintLib_clean">
<OutputDirSetup baseName="BasePrintLib" mbdFilename="${MODULE_DIR}\BasePrintLib.mbd" msaFilename="${MODULE_DIR}\BasePrintLib.msa"/>
<if>
<available file="${DEST_DIR_OUTPUT}\BasePrintLib_build.xml"/>
<then>
<ant antfile="${DEST_DIR_OUTPUT}\BasePrintLib_build.xml" target="clean"/>
</then>
</if>
<delete dir="${DEST_DIR_OUTPUT}" excludes="*.xml"/>
</target>
<target name="BasePrintLib_cleanall">
<OutputDirSetup baseName="BasePrintLib" mbdFilename="${MODULE_DIR}\BasePrintLib.mbd" msaFilename="${MODULE_DIR}\BasePrintLib.msa"/>
<if>
<available file="${DEST_DIR_OUTPUT}\BasePrintLib_build.xml"/>
<then>
<ant antfile="${DEST_DIR_OUTPUT}\BasePrintLib_build.xml" target="cleanall"/>
</then>
</if>
<delete dir="${DEST_DIR_OUTPUT}"/>
<delete dir="${DEST_DIR_DEBUG}"/>
<delete>
<fileset dir="${BIN_DIR}" includes="**BasePrintLib*"/>
</delete>
</target>
</project>