From 10aaf7e24e94ed2533c57433506a13258bb91aa8 Mon Sep 17 00:00:00 2001 From: Rafal Kupiec Date: Sat, 23 Dec 2023 10:01:28 +0100 Subject: [PATCH] Implement BlClearConsoleLine() routine --- sdk/xtdk/bltypes.h | 2 ++ xtldr2/console.c | 28 ++++++++++++++++++++++++++++ xtldr2/includes/bootman.h | 4 ++++ xtldr2/protocol.c | 1 + 4 files changed, 35 insertions(+) diff --git a/sdk/xtdk/bltypes.h b/sdk/xtdk/bltypes.h index f28f763..7cdf24a 100644 --- a/sdk/xtdk/bltypes.h +++ b/sdk/xtdk/bltypes.h @@ -47,6 +47,7 @@ typedef EFI_STATUS (*PBL_ALLOCATE_PAGES)(IN UINT64 Size, OUT PEFI_PHYSICAL_ADDRE typedef EFI_STATUS (*PBL_ALLOCATE_POOL)(IN UINT_PTR Size, OUT PVOID *Memory); typedef VOID (*PBL_BOOTMENU_INITIALIZE_OS_LIST)(OUT PXTBL_BOOTMENU_ITEM MenuEntries, OUT PULONG EntriesCount, OUT PULONG DefaultId); typedef EFI_STATUS (*PBL_CLOSE_VOLUME)(IN PEFI_HANDLE VolumeHandle); +typedef VOID (*PBL_CLEAR_CONSOLE_LINE)(IN ULONGLONG LineNo); typedef VOID (*PBL_CONSOLE_CLEAR_SCREEN)(); typedef VOID (*PBL_CONSOLE_DISABLE_CURSOR)(); typedef VOID (*PBL_CONSOLE_ENABLE_CURSOR)(); @@ -114,6 +115,7 @@ typedef struct _XTBL_LOADER_PROTOCOL { struct { + PBL_CLEAR_CONSOLE_LINE ClearLine; PBL_CONSOLE_CLEAR_SCREEN ClearScreen; PBL_CONSOLE_DISABLE_CURSOR DisableCursor; PBL_CONSOLE_ENABLE_CURSOR EnableCursor; diff --git a/xtldr2/console.c b/xtldr2/console.c index 0703d8a..e41b8ce 100644 --- a/xtldr2/console.c +++ b/xtldr2/console.c @@ -9,6 +9,34 @@ #include +/** + * Clears a specified line on the UEFI text console. + * + * @param LineNo + * Supplies a line number to clear. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTCDECL +VOID +BlClearConsoleLine(IN ULONGLONG LineNo) +{ + UINT_PTR Index, ResX, ResY; + + /* Query console mode */ + BlQueryConsoleMode(&ResX, &ResY); + + /* Set cursor position and clear line */ + BlSetCursorPosition(0, LineNo); + for(Index = 0; Index < ResX; Index++) + { + /* Clear line */ + BlConsoleWrite(L" "); + } +} + /** * This routine clears the UEFI console screen. * diff --git a/xtldr2/includes/bootman.h b/xtldr2/includes/bootman.h index e81566a..6655df5 100644 --- a/xtldr2/includes/bootman.h +++ b/xtldr2/includes/bootman.h @@ -16,6 +16,10 @@ typedef VOID (BMPRINTCHAR)(IN USHORT Character); /* XTLDR routines forward references */ +XTCDECL +VOID +BlClearConsoleLine(IN ULONGLONG LineNo); + XTCDECL VOID BlClearConsoleScreen(); diff --git a/xtldr2/protocol.c b/xtldr2/protocol.c index e7f133e..8b1b5fd 100644 --- a/xtldr2/protocol.c +++ b/xtldr2/protocol.c @@ -90,6 +90,7 @@ BlpRegisterXtLoaderProtocol() EFI_HANDLE Handle = NULL; /* Set all routines available via loader protocol */ + LdrProtocol.Console.ClearLine = BlClearConsoleLine; LdrProtocol.Console.ClearScreen = BlClearConsoleScreen; LdrProtocol.Console.DisableCursor = BlDisableConsoleCursor; LdrProtocol.Console.EnableCursor = BlEnableConsoleCursor;