Implement printf-alike wide string formatting mechanism, currently without floating point numbers support
This commit is contained in:
parent
8a62a2b367
commit
8dd0e70dd9
@ -12,6 +12,7 @@
|
|||||||
#include <xtdefs.h>
|
#include <xtdefs.h>
|
||||||
#include <xtstruct.h>
|
#include <xtstruct.h>
|
||||||
#include <xttypes.h>
|
#include <xttypes.h>
|
||||||
|
#include <rtltypes.h>
|
||||||
|
|
||||||
|
|
||||||
/* Routines used by XTLDR */
|
/* Routines used by XTLDR */
|
||||||
@ -122,6 +123,12 @@ RtlFillMemory(OUT PVOID Destination,
|
|||||||
IN SIZE_T Length,
|
IN SIZE_T Length,
|
||||||
IN UCHAR Value);
|
IN UCHAR Value);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
XTSTATUS
|
||||||
|
RtlFormatWideString(IN PRTL_PRINT_CONTEXT Context,
|
||||||
|
IN PCWSTR Format,
|
||||||
|
IN VA_LIST ArgumentList);
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
VOID
|
VOID
|
||||||
RtlMoveMemory(OUT PVOID Destination,
|
RtlMoveMemory(OUT PVOID Destination,
|
||||||
|
@ -17,14 +17,33 @@
|
|||||||
#define GUID_STRING_LENGTH 38
|
#define GUID_STRING_LENGTH 38
|
||||||
#define PARTUUID_STRING_LENGTH 13
|
#define PARTUUID_STRING_LENGTH 13
|
||||||
|
|
||||||
|
/* Maximum integer value string length */
|
||||||
|
#define MAX_INTEGER_STRING_SIZE 25
|
||||||
|
|
||||||
/* Floating point definitions */
|
/* Floating point definitions */
|
||||||
#define DOUBLE_EXPONENT_MASK 0x7FF0000000000000ULL
|
#define DOUBLE_EXPONENT_MASK 0x7FF0000000000000ULL
|
||||||
#define DOUBLE_EXPONENT_SHIFT 0x34
|
#define DOUBLE_EXPONENT_SHIFT 0x34
|
||||||
#define DOUBLE_EXPONENT_BIAS 0x3FF
|
#define DOUBLE_EXPONENT_BIAS 0x3FF
|
||||||
|
|
||||||
/* Runtime Library routine callbacks */
|
/* Runtime Library routine callbacks */
|
||||||
typedef VOID (*PWRITE_CHARACTER)(IN CHAR Character);
|
typedef XTSTATUS (*PWRITE_CHARACTER)(IN CHAR Character);
|
||||||
typedef VOID (*PWRITE_WIDE_CHARACTER)(IN WCHAR Character);
|
typedef XTSTATUS (*PWRITE_WIDE_CHARACTER)(IN WCHAR Character);
|
||||||
|
|
||||||
|
/* Variable types enumeration list */
|
||||||
|
typedef enum _RTL_VARIABLE_TYPE
|
||||||
|
{
|
||||||
|
Unknown,
|
||||||
|
AnsiString,
|
||||||
|
Boolean,
|
||||||
|
Char,
|
||||||
|
Float,
|
||||||
|
Guid,
|
||||||
|
Integer,
|
||||||
|
String,
|
||||||
|
UnicodeString,
|
||||||
|
WideChar,
|
||||||
|
WideString
|
||||||
|
} RTL_VARIABLE_TYPE, *PRTL_VARIABLE_TYPE;
|
||||||
|
|
||||||
/* Runtime Library print context structure definition */
|
/* Runtime Library print context structure definition */
|
||||||
typedef struct _RTL_PRINT_CONTEXT
|
typedef struct _RTL_PRINT_CONTEXT
|
||||||
@ -32,7 +51,29 @@ typedef struct _RTL_PRINT_CONTEXT
|
|||||||
PWRITE_CHARACTER WriteCharacter;
|
PWRITE_CHARACTER WriteCharacter;
|
||||||
PWRITE_WIDE_CHARACTER WriteWideCharacter;
|
PWRITE_WIDE_CHARACTER WriteWideCharacter;
|
||||||
ULONG CharactersWritten;
|
ULONG CharactersWritten;
|
||||||
ULONG Limit;
|
|
||||||
} RTL_PRINT_CONTEXT, *PRTL_PRINT_CONTEXT;
|
} RTL_PRINT_CONTEXT, *PRTL_PRINT_CONTEXT;
|
||||||
|
|
||||||
|
/* Runtime Library print format properties structure definition */
|
||||||
|
typedef struct _RTL_PRINT_FORMAT_PROPERTIES
|
||||||
|
{
|
||||||
|
RTL_VARIABLE_TYPE VariableType;
|
||||||
|
ULONG Radix;
|
||||||
|
LONG FieldWidth;
|
||||||
|
LONG IntegerSize;
|
||||||
|
LONG Precision;
|
||||||
|
BOOLEAN AlwaysPrintSign;
|
||||||
|
BOOLEAN LongDouble;
|
||||||
|
BOOLEAN LongInteger;
|
||||||
|
BOOLEAN LeftJustified;
|
||||||
|
BOOLEAN PrintUpperCase;
|
||||||
|
BOOLEAN PrintLeadingZeroes;
|
||||||
|
BOOLEAN PrintRadix;
|
||||||
|
BOOLEAN SpaceForPlus;
|
||||||
|
BOOLEAN ThousandsGrouping;
|
||||||
|
BOOLEAN UnsignedValue;
|
||||||
|
BOOLEAN FloatFormat;
|
||||||
|
BOOLEAN ScientificFormat;
|
||||||
|
BOOLEAN SignificantDigitPrecision;
|
||||||
|
} RTL_PRINT_FORMAT_PROPERTIES, *PRTL_PRINT_FORMAT_PROPERTIES;
|
||||||
|
|
||||||
#endif /* __XTDK_RTLTYPES_H */
|
#endif /* __XTDK_RTLTYPES_H */
|
||||||
|
@ -290,4 +290,46 @@ XTCDECL
|
|||||||
VOID
|
VOID
|
||||||
RtlRemoveEntryList(IN PLIST_ENTRY Entry);
|
RtlRemoveEntryList(IN PLIST_ENTRY Entry);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
XTSTATUS
|
||||||
|
RtlpFormatWideStringArgumentSpecifier(IN PRTL_PRINT_CONTEXT Context,
|
||||||
|
IN PCWSTR Format,
|
||||||
|
IN PVA_LIST ArgumentList,
|
||||||
|
IN OUT PULONG Index);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
ULONGLONG
|
||||||
|
RtlpGetWideStringArgument(IN PVA_LIST ArgumentList,
|
||||||
|
IN ULONG ArgumentNumber,
|
||||||
|
IN LONG ArgumentSize);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
ULONGLONG
|
||||||
|
RtlpGetWideStringSpecifierValue(IN PWCHAR *Format);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
XTSTATUS
|
||||||
|
RtlpWriteWideCharacter(IN PRTL_PRINT_CONTEXT Context,
|
||||||
|
IN WCHAR Character);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
XTSTATUS
|
||||||
|
RtlpWriteWideStringIntegerValue(IN PRTL_PRINT_CONTEXT Context,
|
||||||
|
IN PRTL_PRINT_FORMAT_PROPERTIES FormatProperties,
|
||||||
|
IN ULONGLONG Integer);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
XTSTATUS
|
||||||
|
RtlpWriteWideStringStringValue(PRTL_PRINT_CONTEXT Context,
|
||||||
|
PRTL_PRINT_FORMAT_PROPERTIES FormatProperties,
|
||||||
|
PCHAR String,
|
||||||
|
BOOLEAN Character);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
XTSTATUS
|
||||||
|
RtlpWriteWideStringValue(PRTL_PRINT_CONTEXT Context,
|
||||||
|
PRTL_PRINT_FORMAT_PROPERTIES FormatProperties,
|
||||||
|
PWCHAR String,
|
||||||
|
BOOLEAN Character);
|
||||||
|
|
||||||
#endif /* __XTOSKRNL_RTLI_H */
|
#endif /* __XTOSKRNL_RTLI_H */
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user