想实现一个清屏的功能,刚开始在CLIB中翻了半天没找到,用工具直接搜索了一下 clrscr (应该在 conio.h 中)压根儿没找到。估计是 CLIB没有支持,只好换个方法。想起来Syetem Table中有 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL 拿着SPEC翻了【参考1】一下,发现可以使用它的 ClearScreen 函数。
写一个简单的程序验证之:
//
// ClearScreen
//
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/ShellLib.h>
#include <Library/UefiApplicationEntryPoint.h>
extern EFI_BOOT_SERVICES *gBS;
extern EFI_SYSTEM_TABLE *gST;
extern EFI_RUNTIME_SERVICES *gRT;
//
// Entry point function
//
EFI_STATUS
UefiMain (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
INTN i;
for (i=0;i<1000;i++)
{
Print(L".");
}
Print(L".\n");
gST -> ConOut -> SetAttribute(gST->ConOut,0x1);
gST -> ConOut -> ClearScreen(gST->ConOut);
//SystemTable ->ConOut ->ClearScreen(SystemTable ->ConOut);
//Print(L"%lX\n",SystemTable ->ConOut ->ClearScreen);
//Print(L"%lX\n",gST -> ConOut -> ClearScreen);
//Print(L"%lX\n",gST->ConOut);
return EFI_SUCCESS;
}
工作正常,能够清屏。
程序下载 ClsTest
参考:
1.UEFI Spec 2.4 P459
2.http://biosren.com/viewthread.php?tid=3050&highlight=clearscreen 关于SHELL下面修改(前)背景色
