diff --git a/.gitignore b/.gitignore index f9c2bb203..450666e51 100644 --- a/.gitignore +++ b/.gitignore @@ -108,6 +108,7 @@ build/ !default.mode2v3 !default.perspectivev3 xcuserdata/ +xcshareddata/ # Translation files CloverUpdater.strings diff --git a/BaseTools/Scripts/GccBase.lds b/BaseTools/Scripts/GccBase.lds index a9dd2138d..f0d8f3ff5 100755 --- a/BaseTools/Scripts/GccBase.lds +++ b/BaseTools/Scripts/GccBase.lds @@ -51,6 +51,12 @@ SECTIONS { KEEP (*(.eh_frame)) } + .ctorss ALIGN(CONSTANT(COMMONPAGESIZE)) : { + __beginning_of_section_ctors = .; /* create symbol for start of section */ + KEEP (*(.ctors)) + __end_of_section_ctors = .; /* create symbol for end of section */ + } + .rela (INFO) : { *(.rela .rela.*) } diff --git a/CloverApp/Lang.bundle/Contents/Resources/ru.strings b/CloverApp/Lang.bundle/Contents/Resources/ru.strings index ad5a3aeb5..aeb21c710 100644 --- a/CloverApp/Lang.bundle/Contents/Resources/ru.strings +++ b/CloverApp/Lang.bundle/Contents/Resources/ru.strings @@ -50,11 +50,11 @@ "false" = "ложь"; "Theme:" = "Тема:"; -"Themes" = "Themes"; // window title -"No themes found" = "No themes found"; -"Manager" = "Manager"; // Theme manager -"Can't remove the theme" = "Can't remove the theme"; -"Show installed" = "Show installed"; +"Themes" = "Темы"; // window title +"No themes found" = "Темы не найдены"; +"Manager" = "Менеджер"; // Theme manager +"Can't remove the theme" = "Не возможно удалить тему"; +"Show installed" = "Показать установленные"; "Sound:" = "Звук:"; "*Make filesystem read-write" = "*Открыть файловую систему на запись"; "*Disable Sleep Proxy Client" = "*Отключение Sleep Proxy Client"; diff --git a/CloverEFI/BiosVideo/BiosVideo.c b/CloverEFI/BiosVideo/BiosVideo.c index db83d843f..6928c20ad 100644 --- a/CloverEFI/BiosVideo/BiosVideo.c +++ b/CloverEFI/BiosVideo/BiosVideo.c @@ -1421,7 +1421,7 @@ BiosVideoCheckForVbe ( } if (ModeNumber > 1) { - gBS->CopyMem ( + CopyMem ( ModeBuffer, BiosVideoPrivate->ModeData, (ModeNumber - 1) * sizeof (BIOS_VIDEO_MODE_DATA) @@ -2121,7 +2121,7 @@ BiosVideoGraphicsOutputVbeBlt ( VbeBuffer = ((UINT8 *) VbeFrameBuffer + DstY * BytesPerScanLine + DestinationX * VbePixelWidth); VbeBuffer1 = ((UINT8 *) VbeFrameBuffer + SrcY * BytesPerScanLine + SourceX * VbePixelWidth); - gBS->CopyMem ( + CopyMem ( VbeBuffer, VbeBuffer1, TotalBytes @@ -2157,7 +2157,7 @@ BiosVideoGraphicsOutputVbeBlt ( ((Blt->Blue & Mode->Blue.Mask) << Mode->Blue.Position); for (Index = 0; Index < Width; Index++) { - gBS->CopyMem ( + CopyMem ( VbeBuffer, &Pixel, VbePixelWidth @@ -2167,7 +2167,7 @@ BiosVideoGraphicsOutputVbeBlt ( VbeBuffer = (UINT8 *) ((UINTN) VbeFrameBuffer + (DestinationY * BytesPerScanLine) + DestinationX * VbePixelWidth); for (DstY = DestinationY + 1; DstY < (Height + DestinationY); DstY++) { - gBS->CopyMem ( + CopyMem ( (VOID *) ((UINTN) VbeFrameBuffer + (DstY * BytesPerScanLine) + DestinationX * VbePixelWidth), VbeBuffer, TotalBytes @@ -2201,7 +2201,7 @@ BiosVideoGraphicsOutputVbeBlt ( Pixel = ((Blt->Red & Mode->Red.Mask) << Mode->Red.Position) | ((Blt->Green & Mode->Green.Mask) << Mode->Green.Position) | ((Blt->Blue & Mode->Blue.Mask) << Mode->Blue.Position); - gBS->CopyMem ( + CopyMem ( VbeBuffer, &Pixel, VbePixelWidth diff --git a/CloverEFI/BiosVideo/LegacyBiosThunk.c b/CloverEFI/BiosVideo/LegacyBiosThunk.c index 0b21c3cc9..ff92eed19 100644 --- a/CloverEFI/BiosVideo/LegacyBiosThunk.c +++ b/CloverEFI/BiosVideo/LegacyBiosThunk.c @@ -107,7 +107,7 @@ InitializeInterruptRedirection ( // // Copy code to legacy region // - gBS->CopyMem ((VOID *)(UINTN)LegacyRegionBase, (VOID *)&InterruptRedirectionCode[0], sizeof (InterruptRedirectionCode)); + CopyMem ((VOID *)(UINTN)LegacyRegionBase, (VOID *)&InterruptRedirectionCode[0], sizeof (InterruptRedirectionCode)); // // Get VectorBase, it should be 0x68 diff --git a/Conf/build_rule.txt b/Conf/build_rule.txt index 7dd51066a..0d7f9beab 100644 --- a/Conf/build_rule.txt +++ b/Conf/build_rule.txt @@ -106,15 +106,36 @@ # build_rule_version=0.1 # +[Cxx-Code-File] + + ?.cpp + ?.Cpp + ?.CPP + + + $(MAKE_FILE) + + + $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj + + + "$(CC)" /Fo${dst} $(CC_FLAGS) $(INC) ${src} + + + # For RVCTCYGWIN CC_FLAGS must be first to work around pathing issues + @"$(CC)" $(CXX_FLAGS) -c -o ${dst} $(INC) ${src} + @"echo" [CC] ${s_base} + + + @"$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src} + @"echo" [CC] ${s_base} + [C-Code-File] ?.c ?.C ?.cc ?.CC - ?.cpp - ?.Cpp - ?.CPP $(MAKE_FILE) diff --git a/Conf/tools_def.txt b/Conf/tools_def.txt index 879c98d21..020e6bcb3 100644 --- a/Conf/tools_def.txt +++ b/Conf/tools_def.txt @@ -2408,6 +2408,7 @@ RELEASE_GCC48_AARCH64_CC_FLAGS = DEF(GCC48_AARCH64_CC_FLAGS) -Wno-unused-but-s *_GCC53_X64_ASLDLINK_FLAGS = DEF(GCC48_IA32_X64_ASLDLINK_FLAGS),-m,elf_x86_64 *_GCC53_X64_ASM_FLAGS = DEF(GCC53_ASM_FLAGS) -m64 *_GCC53_X64_CC_FLAGS = DEF(GCC53_X64_CC_FLAGS) ENV(GCC53_X64_EXTRA_CC_FLAGS) +*_GCC53_X64_CXX_FLAGS = DEF(GCC53_X64_CC_FLAGS) ENV(GCC53_X64_EXTRA_CC_FLAGS) *_GCC53_X64_DLINK_FLAGS = DEF(GCC53_X64_DLINK_FLAGS) DEF(GCC53_X64_CC_FLAGS) ENV(GCC53_X64_EXTRA_CC_FLAGS) *_GCC53_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS) *_GCC53_X64_OBJCOPY_FLAGS = diff --git a/Drivers/AudioDxe/HdaController/HdaController.c b/Drivers/AudioDxe/HdaController/HdaController.c index 78bacb9e2..39eb6a452 100644 --- a/Drivers/AudioDxe/HdaController/HdaController.c +++ b/Drivers/AudioDxe/HdaController/HdaController.c @@ -77,7 +77,7 @@ HdaControllerStreamPollTimerHandler( // Have we reached the end of the source buffer? If so the stream will stop on the next block. if (HdaStream->BufferSourcePosition >= HdaStream->BufferSourceLength) { // Zero out next block. - gBS->SetMem(HdaStream->BufferData + (HdaNextBlock * HDA_BDL_BLOCKSIZE), HDA_BDL_BLOCKSIZE, 0); + SetMem(HdaStream->BufferData + (HdaNextBlock * HDA_BDL_BLOCKSIZE), HDA_BDL_BLOCKSIZE, 0); // Set flag to stop stream on the next block. HdaStream->BufferSourceDone = TRUE; @@ -95,7 +95,7 @@ HdaControllerStreamPollTimerHandler( if (HdaStream->Output) { // Copy data to DMA buffer. if (HdaSourceLength < HDA_BDL_BLOCKSIZE) - gBS->SetMem(HdaStream->BufferData + (HdaNextBlock * HDA_BDL_BLOCKSIZE), HDA_BDL_BLOCKSIZE, 0); + SetMem(HdaStream->BufferData + (HdaNextBlock * HDA_BDL_BLOCKSIZE), HDA_BDL_BLOCKSIZE, 0); CopyMem(HdaStream->BufferData + (HdaNextBlock * HDA_BDL_BLOCKSIZE), HdaStream->BufferSource + HdaStream->BufferSourcePosition, HdaSourceLength); } else { // Input stream (copy data from). // Copy data from DMA buffer. @@ -294,7 +294,7 @@ HdaControllerScanCodecs( // Create verb list with single item. VendorVerb = HDA_CODEC_VERB(HDA_VERB_GET_PARAMETER, HDA_PARAMETER_VENDOR_ID); - gBS->SetMem(&HdaCodecVerbList, sizeof(EFI_HDA_IO_VERB_LIST), 0); + SetMem(&HdaCodecVerbList, sizeof(EFI_HDA_IO_VERB_LIST), 0); HdaCodecVerbList.Count = 1; HdaCodecVerbList.Verbs = &VendorVerb; HdaCodecVerbList.Responses = &VendorResponse; diff --git a/Drivers/AudioDxe/HdaController/HdaControllerHdaIo.c b/Drivers/AudioDxe/HdaController/HdaControllerHdaIo.c index b3273d82a..ad3c99983 100644 --- a/Drivers/AudioDxe/HdaController/HdaControllerHdaIo.c +++ b/Drivers/AudioDxe/HdaController/HdaControllerHdaIo.c @@ -400,7 +400,7 @@ HdaControllerHdaIoStartStream( HdaStream->CallbackContext3 = Context3; // Zero out buffer. - gBS->SetMem(HdaStream->BufferData, HDA_STREAM_BUF_SIZE, 0); + SetMem(HdaStream->BufferData, HDA_STREAM_BUF_SIZE, 0); // Fill rest of current block. HdaStreamDmaRemainingLength = HDA_BDL_BLOCKSIZE - (HdaStreamDmaPos - (HdaStreamCurrentBlock * HDA_BDL_BLOCKSIZE)); diff --git a/Drivers/AudioDxe/HdaController/HdaControllerMem.c b/Drivers/AudioDxe/HdaController/HdaControllerMem.c index b9dad4e20..51e7367ec 100644 --- a/Drivers/AudioDxe/HdaController/HdaControllerMem.c +++ b/Drivers/AudioDxe/HdaController/HdaControllerMem.c @@ -75,7 +75,7 @@ HdaControllerInitCorb( Status = PciIo->AllocateBuffer(PciIo, AllocateAnyPages, EfiBootServicesData, EFI_SIZE_TO_PAGES(CorbLength), &CorbBuffer, 0); if (EFI_ERROR(Status)) return Status; - gBS->SetMem(CorbBuffer, CorbLength, 0); + SetMem(CorbBuffer, CorbLength, 0); // Map outbound buffer. CorbLengthActual = CorbLength; @@ -464,7 +464,7 @@ HdaControllerInitStreams( (VOID**)&HdaStream->BufferList, 0); if (EFI_ERROR(Status)) goto FREE_BUFFER; - gBS->SetMem(HdaStream->BufferList, HDA_BDL_SIZE, 0); + SetMem(HdaStream->BufferList, HDA_BDL_SIZE, 0); // Map buffer descriptor list. BdlLengthActual = HDA_BDL_SIZE; @@ -487,7 +487,7 @@ HdaControllerInitStreams( (VOID**)&HdaStream->BufferData, 0); if (EFI_ERROR(Status)) goto FREE_BUFFER; - gBS->SetMem(HdaStream->BufferData, HDA_STREAM_BUF_SIZE, 0); + SetMem(HdaStream->BufferData, HDA_STREAM_BUF_SIZE, 0); // Map buffer descriptor list. DataLengthActual = HDA_STREAM_BUF_SIZE; @@ -517,7 +517,7 @@ HdaControllerInitStreams( EFI_SIZE_TO_PAGES(HdaControllerDev->DmaPositionsSize), (VOID**)&HdaControllerDev->DmaPositions, 0); if (EFI_ERROR(Status)) goto FREE_BUFFER; - gBS->SetMem(HdaControllerDev->DmaPositions, HdaControllerDev->DmaPositionsSize, 0); + SetMem(HdaControllerDev->DmaPositions, HdaControllerDev->DmaPositionsSize, 0); // Map buffer descriptor list. DmaPositionsLengthActual = HdaControllerDev->DmaPositionsSize; diff --git a/Library/OcGuardLib/Ubsan.h b/Library/OcGuardLib/Ubsan.h index 0d8bb6788..4d8c1733c 100644 --- a/Library/OcGuardLib/Ubsan.h +++ b/Library/OcGuardLib/Ubsan.h @@ -197,7 +197,7 @@ int EFIAPI tfp_sprintf(char *str, const char *fmt, ...) __printflike(2, 3); do { vprintf (f, v); do { } while (1); } while (0) // Avoid implementing memcpy as a function to avoid LTO conflicts. -#define memcpy(Dst, Src, Size) do { gBS->CopyMem(Dst, Src, Size); } while (0) +#define memcpy(Dst, Src, Size) do { CopyMem(Dst, Src, Size); } while (0) // Forcing VOID for those as the return types actually differ. #define strlcpy(Dst, Src, Size) do { AsciiStrnCpyS (Dst, Size, Src, AsciiStrLen (Src)); } while (0) diff --git a/MdePkg/Include/Base.h b/MdePkg/Include/Base.h index ce20b5f01..7854e9f05 100644 --- a/MdePkg/Include/Base.h +++ b/MdePkg/Include/Base.h @@ -370,7 +370,11 @@ struct _LIST_ENTRY { /// /// NULL pointer (VOID *) /// +#ifdef __cplusplus +#define NULL nullptr +#else #define NULL ((VOID *) 0) +#endif // // Null character diff --git a/MdePkg/Include/X64/ProcessorBind.h b/MdePkg/Include/X64/ProcessorBind.h index 6f65acd60..141bb2dbd 100644 --- a/MdePkg/Include/X64/ProcessorBind.h +++ b/MdePkg/Include/X64/ProcessorBind.h @@ -200,7 +200,11 @@ /// 2-byte Character. Unless otherwise specified all strings are stored in the /// UTF-16 encoding format as defined by Unicode 2.1 and ISO/IEC 10646 standards. /// +#ifdef __cplusplus + #define CHAR16 wchar_t +#else typedef unsigned short CHAR16; +#endif /// /// 2-byte signed value /// diff --git a/Protocols/AppleImageCodec/AppleImageCodec.c b/Protocols/AppleImageCodec/AppleImageCodec.c index 13b033898..0d6f0972f 100644 --- a/Protocols/AppleImageCodec/AppleImageCodec.c +++ b/Protocols/AppleImageCodec/AppleImageCodec.c @@ -150,8 +150,6 @@ DecodeImageData (//IN APPLE_IMAGE_CODEC_PROTOCOL* This, EFI_STATUS Status; EG_IMAGE *Image; INTN Index; -// UINT32 ImageDataSize; - //automatic choose format if (!RawImageData || !RawImageDataSize) { return EFI_INVALID_PARAMETER; diff --git a/Protocols/MsgLog/MsgLog.c b/Protocols/MsgLog/MsgLog.c index 35ba924b3..aaa5934ca 100644 --- a/Protocols/MsgLog/MsgLog.c +++ b/Protocols/MsgLog/MsgLog.c @@ -8,8 +8,13 @@ */ #include -#include +#include +#include +#include +#include #include +#include +#include MESSAGE_LOG_PROTOCOL MsgLogProtocol; EFI_HANDLE mHandle = NULL; diff --git a/Protocols/OsxFatBinaryDrv/OsxFatBinaryDrv.c b/Protocols/OsxFatBinaryDrv/OsxFatBinaryDrv.c index f7b1f2fa9..196f026ac 100644 --- a/Protocols/OsxFatBinaryDrv/OsxFatBinaryDrv.c +++ b/Protocols/OsxFatBinaryDrv/OsxFatBinaryDrv.c @@ -18,9 +18,9 @@ #include #include +#include #include #include -#include #include #include #include @@ -310,6 +310,10 @@ OvrLoadImage(IN BOOLEAN BootPolicy, gBS->FreePool(SourceBuffer); } + if (FileInfo) { + gBS->FreePool(FileInfo); + } + // // dmazar: some boards do not put device handle to EfiLoadedImageProtocol->DeviceHandle // when image is loaded from SrcBuffer, and then boot.efi fails. diff --git a/hebuild.sh b/hebuild.sh index 74988c480..af1bab28d 100755 --- a/hebuild.sh +++ b/hebuild.sh @@ -393,7 +393,7 @@ checkCmdlineArguments() { done # Update variables - PLATFORMFILE="${PLATFORMFILE:-Clover.dsc}" + PLATFORMFILE="${PLATFORMFILE:-Clover_cpp.dsc}" if [ ! -z "${MODULEFILE}" ]; then MODULEFILE=" -m $MODULEFILE" fi diff --git a/rEFIt_UEFI/Platform/Platform.h b/rEFIt_UEFI/Platform/Platform.h index fa6aee4ab..546b16544 100644 --- a/rEFIt_UEFI/Platform/Platform.h +++ b/rEFIt_UEFI/Platform/Platform.h @@ -10,6 +10,9 @@ Headers collection for procedures // Comment to use source debug options //#define DEBUG_ALL 2 +#ifdef __cplusplus +extern "C" { +#endif #include @@ -2541,4 +2544,8 @@ YesNoMessage ( IN CHAR16 *Message); +#ifdef __cplusplus +} +#endif + #endif diff --git a/rEFIt_UEFI/Platform/platformdata.c b/rEFIt_UEFI/Platform/platformdata.c index 4caaf309d..4592e8e68 100644 --- a/rEFIt_UEFI/Platform/platformdata.c +++ b/rEFIt_UEFI/Platform/platformdata.c @@ -679,9 +679,6 @@ VOID SetDMISettingsForModel(MACHINE_TYPES Model, BOOLEAN Redefine) case iMac143: gFwFeatures = 0xE00FE137; break; - case MacPro61: - gFwFeatures = 0xE80FE176; - break; case MacBookPro111: case MacBookPro112: case MacBookPro113: @@ -718,24 +715,17 @@ VOID SetDMISettingsForModel(MACHINE_TYPES Model, BOOLEAN Redefine) case iMac192: gFwFeatures = 0xFD8FF576; break; - case MacPro71: - gFwFeatures = 0xFDAFF066; - break; // Verified list from Users - case MacBookPro61: - case MacBookPro62: - case MacBookPro71: - case MacBookPro81: - case MacBookPro82: - case MacBookPro83: - gFwFeatures = 0xC00DE137; - break; case MacBookAir31: case MacBookAir32: case MacMini41: gFwFeatures = 0xD00DE137; break; + case MacBookAir71: + case MacBookAir72: + gFwFeatures = 0xE00FE137; + break; case iMac101: case iMac111: case iMac112: @@ -745,13 +735,23 @@ VOID SetDMISettingsForModel(MACHINE_TYPES Model, BOOLEAN Redefine) case MacMini71: gFwFeatures = 0xE00DE137; break; - case MacBookAir71: - case MacBookAir72: - gFwFeatures = 0xE00FE137; - break; case MacPro51: gFwFeatures = 0xE80FE137; break; + case MacPro61: + gFwFeatures = 0xE80FE176; + break; + case MacPro71: + gFwFeatures = 0xFD8FF53F; + break; + case MacBookPro61: + case MacBookPro62: + case MacBookPro71: + case MacBookPro81: + case MacBookPro82: + case MacBookPro83: + gFwFeatures = 0xC00DE137; + break; case MacBookPro121: case MacBookPro151: case MacBookPro152: @@ -832,9 +832,6 @@ VOID SetDMISettingsForModel(MACHINE_TYPES Model, BOOLEAN Redefine) case MacMini81: gFwFeaturesMask = 0xFFDFFF7F; break; - case MacPro71: - gFwFeaturesMask = 0xFFFFFF7F; - break; // Verified list from Users case MacBook61: @@ -872,6 +869,10 @@ VOID SetDMISettingsForModel(MACHINE_TYPES Model, BOOLEAN Redefine) gFwFeaturesMask = 0xFF1FFF3F; break; + case MacPro71: + gFwFeaturesMask = 0xFF9FFF3F; + break; + default: gFwFeaturesMask = 0xFFFFFFFF; //unknown - use oem SMBIOS value to be default break; diff --git a/rEFIt_UEFI/libeg/lodepng.c b/rEFIt_UEFI/libeg/lodepng.c index d621e63d4..9a186a1cc 100644 --- a/rEFIt_UEFI/libeg/lodepng.c +++ b/rEFIt_UEFI/libeg/lodepng.c @@ -90,7 +90,6 @@ void* lodepng_realloc(void* ptr, size_t new_size) #define memset(dest,ch,count) SetMem(dest,(UINTN)(count),(UINT8)(ch)) - //MODSNI ^ diff --git a/rEFIt_UEFI/refit/IO.c b/rEFIt_UEFI/refit/IO.c index 2535d4fc6..2cb6d3306 100644 --- a/rEFIt_UEFI/refit/IO.c +++ b/rEFIt_UEFI/refit/IO.c @@ -28,61 +28,6 @@ Revision History #define PRINT_ITEM_BUFFER_LEN 100 #define PRINT_JOINT_BUFFER_LEN 4 -typedef struct { - BOOLEAN Ascii; - UINTN Index; - union { - CONST CHAR16 *pw; - CHAR8 *pc; - } u; -} POINTER; - -typedef struct _pitem { - - POINTER Item; - CHAR16 *Scratch; - UINTN Width; - UINTN FieldWidth; - UINTN *WidthParse; - CHAR16 Pad; - BOOLEAN PadBefore; - BOOLEAN Comma; - BOOLEAN Long; -} PRINT_ITEM; - -typedef struct _pstate { - // - // Input - // - POINTER fmt; - VA_LIST args; - - // - // Output - // - CHAR16 *Buffer; - CHAR16 *End; - CHAR16 *Pos; - UINTN Len; - - UINTN Attr; - UINTN RestoreAttr; - - UINTN AttrNorm; - UINTN AttrHighlight; - UINTN AttrError; - UINTN AttrBlueColor; - UINTN AttrGreenColor; - - EFI_STATUS (EFIAPI *Output) (VOID *context, CHAR16 *str); - EFI_STATUS (EFIAPI *SetAttr) (VOID *context, UINTN attr); - VOID *Context; - - // - // Current item being formatted - // - struct _pitem *Item; -} PRINT_STATE; typedef struct { BOOLEAN PageBreak; diff --git a/rEFIt_UEFI/refit/IO.h b/rEFIt_UEFI/refit/IO.h index c8cad2b94..4a2c1cfb5 100644 --- a/rEFIt_UEFI/refit/IO.h +++ b/rEFIt_UEFI/refit/IO.h @@ -47,6 +47,86 @@ Revision History #define IS_PUNCT(x) ((x == '.') || (x == '-')) + +// jief move struct definition to here to be accessible from XStringW +typedef struct { + BOOLEAN Ascii; + UINTN Index; + union { + CONST CHAR16 *pw; + CHAR8 *pc; + } u; +} POINTER; + +typedef struct _pitem { + + POINTER Item; + CHAR16 *Scratch; + UINTN Width; + UINTN FieldWidth; + UINTN *WidthParse; + CHAR16 Pad; + BOOLEAN PadBefore; + BOOLEAN Comma; + BOOLEAN Long; +} PRINT_ITEM; + +typedef struct _pstate { + // + // Input + // + POINTER fmt; + VA_LIST args; + + // + // Output + // + CHAR16 *Buffer; + CHAR16 *End; + CHAR16 *Pos; + UINTN Len; + + UINTN Attr; + UINTN RestoreAttr; + + UINTN AttrNorm; + UINTN AttrHighlight; + UINTN AttrError; + UINTN AttrBlueColor; + UINTN AttrGreenColor; + + EFI_STATUS (EFIAPI *Output) (VOID *context, CHAR16 *str); + EFI_STATUS (EFIAPI *SetAttr) (VOID *context, UINTN attr); + VOID *Context; + + // + // Current item being formatted + // + struct _pitem *Item; +} PRINT_STATE; + + +extern +EFI_STATUS +EFIAPI +_PoolPrint ( + IN POOL_PRINT *Context, + IN CHAR16 *Buffer + ); + +extern +UINTN +_PPrint ( + IN PRINT_STATE *ps + ); + +// jief + + + + + + /* typedef struct { CHAR16 *Str;