想实现一个清屏的功能,刚开始在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下面修改(前)背景色