I want to print some text to the screen using the Print
function call. Is there any way (or any other function) to set the color of the text?
Asked
Active
Viewed 960 times
-1

randomuser5215
- 508
- 1
- 9
- 26
-
It is no longer too broad. I made it much better. – randomuser5215 Sep 22 '19 at 18:32
2 Answers
0
This will set your print color:
uefi_call_wrapper(SystemTable->ConOut->SetAttribute, 1, SystemTable->ConOut, EFI_YELLOW); //SET TEXT COLOR
Simply EFI_COLORNAME -> red,yellow,green,blue so on. However, it is pretty limited.
In order to set back color again we use code:
`uefi_call_wrapper(SystemTable->ConOut->SetAttribute, 1, SystemTable->ConOut, EFI_BACKGROUND_MAGENTA);` //SET BACK COLOR
Simply EFI_BACKGROUND_COLORNAME -> magneta,black,blue,brown so on. However, it is very limited. I think you may define custom colors like EFI_BACKGROUND_MYSPECIALCOLOR
Also full code based on gnu:
/*
* UEFI:SIMPLE - UEFI development made easy
* Copyright © 2014-2018 Pete Batard <pete@akeo.ie> - Public Domain
* See COPYING for the full licensing terms.
*/
#include <efi.h>
#include <efilib.h>
#include <stdio.h>
// Application entrypoint (must be set to 'efi_main' for gnu-efi crt0 compatibility)
EFI_STATUS efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
UINTN Event;
#if defined(_GNU_EFI)
InitializeLib(ImageHandle, SystemTable);
#endif
/*
* In addition to the standard %-based flags, Print() supports the following:
* %N Set output attribute to normal
* %H Set output attribute to highlight
* %E Set output attribute to error
* %B Set output attribute to blue color
* %V Set output attribute to green color
* %r Human readable version of a status code
*/
uefi_call_wrapper(SystemTable->ConOut->SetAttribute, 1, SystemTable->ConOut, EFI_BACKGROUND_MAGENTA); //SET BACK COLOR
Print(L"\n***DO NOT DISPLAY THIS***%N\n\n");
uefi_call_wrapper(SystemTable->ConOut->ClearScreen, 1, SystemTable->ConOut); //CLEAR SCREEN
uefi_call_wrapper(SystemTable->ConOut->SetAttribute, 1, SystemTable->ConOut, EFI_YELLOW); //SET TEXT COLOR
Print(L"\n*** UEFI:HELLO MY FRIEND, bla bla and some other very necessary messages... ***%N\n\n");
uefi_call_wrapper(SystemTable->ConOut->SetAttribute, 1, SystemTable->ConOut, EFI_RED); //SET TEXT COLOR
Print(L"PRESS ANY KEY TO EXIT.%N\n");
SystemTable->ConIn->Reset(SystemTable->ConIn, FALSE);
SystemTable->BootServices->WaitForEvent(1, &SystemTable->ConIn->WaitForKey, &Event);
#if defined(_DEBUG)
// If running in debug mode, use the EFI shut down call to close QEMU
SystemTable->RuntimeServices->ResetSystem(EfiResetShutdown, EFI_SUCCESS, 0, NULL);
#endif
return EFI_SUCCESS;
}
If you ask how to change print's own cell background. Well, IDK.

Gomi Odabaşıoğlu
- 156
- 1
- 14
-
1I might be missing smth, but AFAIK `libc` isn't supported by UEFI, so you can't include the standard input/output header. – vmemmap Jul 05 '22 at 08:56
0
You can do this (no gnu efi):
system_table->ConOut->SetAttribute(system_table->ConOut, 0x0E);
It will color text to yellow.