diff --git a/sdk/xtdk/bltypes.h b/sdk/xtdk/bltypes.h index d78b9cf..bb8267f 100644 --- a/sdk/xtdk/bltypes.h +++ b/sdk/xtdk/bltypes.h @@ -36,6 +36,8 @@ typedef VOID (*PBL_CONSOLE_CLEAR_SCREEN)(); typedef VOID (*PBL_CONSOLE_DISABLE_CURSOR)(); typedef VOID (*PBL_CONSOLE_ENABLE_CURSOR)(); typedef VOID (*PBL_CONSOLE_PRINT)(IN PUINT16 Format, IN ...); +typedef VOID (*PBL_CONSOLE_QUERY_MODE)(OUT PUINT_PTR ResX, OUT PUINT_PTR ResY); +typedef VOID (*PBL_CONSOLE_SET_CURSOR_POSITION)(IN ULONGLONG PosX, IN ULONGLONG PosY); typedef VOID (*PBL_CONSOLE_WRITE)(IN PUSHORT String); typedef VOID (*PBL_DEBUG_PRINT)(IN PUINT16 Format, IN ...); typedef EFI_STATUS (*PBL_EXIT_BOOT_SERVICES)(IN UINT_PTR MapKey); @@ -78,8 +80,10 @@ typedef struct _XTBL_LOADER_PROTOCOL PBL_CONSOLE_CLEAR_SCREEN ClearScreen; PBL_CONSOLE_DISABLE_CURSOR DisableCursor; PBL_CONSOLE_ENABLE_CURSOR EnableCursor; - PBL_CONSOLE_WRITE Write; PBL_CONSOLE_PRINT Print; + PBL_CONSOLE_QUERY_MODE QueryMode; + PBL_CONSOLE_SET_CURSOR_POSITION SetCursorPosition; + PBL_CONSOLE_WRITE Write; } Console; struct { diff --git a/xtldr2/console.c b/xtldr2/console.c index 782810f..6caf0bc 100644 --- a/xtldr2/console.c +++ b/xtldr2/console.c @@ -93,6 +93,48 @@ BlConsolePrint(IN PUINT16 Format, VA_END(Arguments); } +/** + * Queries information concerning the output device’s supported text mode. + * + * @param ResX + * Supplies a buffer to receive the horizontal resolution. + * + * @param ResY + * Supplies a buffer to receive the vertical resolution. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTCDECL +VOID +BlConsoleQueryMode(OUT PUINT_PTR ResX, + OUT PUINT_PTR ResY) +{ + EfiSystemTable->ConOut->QueryMode(EfiSystemTable->ConOut, EfiSystemTable->ConOut->Mode->Mode, ResX, ResY); +} + +/** + * Sets new coordinates of the console cursor position. + * + * @param PosX + * Specifies the new X coordinate of the cursor. + * + * @param PosY + * Specifies the new Y coordinate of the cursor. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTCDECL +VOID +BlSetCursorPosition(IN ULONGLONG PosX, + IN ULONGLONG PosY) +{ + EfiSystemTable->ConOut->SetCursorPosition(EfiSystemTable->ConOut, PosX, PosY); +} + /** * Displays the string on the device at the current cursor location. * diff --git a/xtldr2/includes/bootman.h b/xtldr2/includes/bootman.h index d8ebedb..ffdf282 100644 --- a/xtldr2/includes/bootman.h +++ b/xtldr2/includes/bootman.h @@ -37,6 +37,11 @@ VOID BlConsolePrint(IN PUINT16 Format, IN ...); +XTCDECL +VOID +BlConsoleQueryMode(OUT PUINT_PTR ResX, + OUT PUINT_PTR ResY); + XTCDECL VOID BlConsoleWrite(IN PUSHORT String); @@ -113,6 +118,11 @@ EFI_STATUS BlSetConfigValue(IN CONST PWCHAR ConfigName, IN CONST PWCHAR ConfigValue); +XTCDECL +VOID +BlSetCursorPosition(IN ULONGLONG PosX, + IN ULONGLONG PosY); + XTCDECL VOID BlSleepExecution(IN ULONG_PTR Milliseconds); diff --git a/xtldr2/protocol.c b/xtldr2/protocol.c index 069818f..7dfb459 100644 --- a/xtldr2/protocol.c +++ b/xtldr2/protocol.c @@ -94,6 +94,8 @@ BlpRegisterXtLoaderProtocol() LdrProtocol.Console.DisableCursor = BlConsoleDisableCursor; LdrProtocol.Console.EnableCursor = BlConsoleEnableCursor; LdrProtocol.Console.Print = BlConsolePrint; + LdrProtocol.Console.QueryMode = BlConsoleQueryMode; + LdrProtocol.Console.SetCursorPosition = BlSetCursorPosition; LdrProtocol.Console.Write = BlConsoleWrite; LdrProtocol.Debug.Print = BlDebugPrint; LdrProtocol.Disk.CloseVolume = BlCloseVolume;