-1

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?

randomuser5215
  • 508
  • 1
  • 9
  • 26

2 Answers2

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.

  • 1
    I 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.