From 950f437d5cdd6e85c3ee03210dd6026e78690bf1 Mon Sep 17 00:00:00 2001 From: olivier Date: Fri, 11 May 2018 15:29:12 +0000 Subject: * Complete SIMPLE_TEXT_OUTPUT_PROTOCOL declarations. git-svn-id: https://svn.freepascal.org/svn/fpc/branches/olivier@38974 3ad0048d-3df7-0310-abae-a5850022a9f2 --- uefi/rtl/uefi/system.pp | 87 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/uefi/rtl/uefi/system.pp b/uefi/rtl/uefi/system.pp index 9dc3158e64..7ae025a5cc 100644 --- a/uefi/rtl/uefi/system.pp +++ b/uefi/rtl/uefi/system.pp @@ -479,11 +479,60 @@ procedure PascalMain;stdcall;external name 'PASCALMAIN'; procedure Debugger(s : WideString); procedure Debugger(); +//******************************************************* +// Attributes +//******************************************************* +const + EFI_BLACK = $00; + EFI_BLUE = $01; + EFI_GREEN = $02; + EFI_CYAN = $03; + EFI_RED = $04; + EFI_MAGENTA = $05; + EFI_BROWN = $06; + EFI_LIGHTGRAY = $07; + EFI_BRIGHT = $08; + EFI_DARKGRAY = $08; // (EFI_BLACK | EFI_BRIGHT) + EFI_LIGHTBLUE = $09; + EFI_LIGHTGREEN = $0A; + EFI_LIGHTCYAN = $0B; + EFI_LIGHTRED = $0C; + EFI_LIGHTMAGENTA = $0D; + EFI_YELLOW = $0E; + EFI_WHITE = $0F; + EFI_BACKGROUND_BLACK = $00; + EFI_BACKGROUND_BLUE = $10; + EFI_BACKGROUND_GREEN = $20; + EFI_BACKGROUND_CYAN = $30; + EFI_BACKGROUND_RED = $40; + EFI_BACKGROUND_MAGENTA = $50; + EFI_BACKGROUND_BROWN = $60; + EFI_BACKGROUND_LIGHTGRAY = $70; +// +// Macro to accept color values in their raw form to create +// a value that represents both a foreground and background +// color in a single byte. +// For Foreground, and EFI_* value is valid from EFI_BLACK(0x00) +// to EFI_WHITE (0x0F). +// For Background, only EFI_BLACK, EFI_BLUE, EFI_GREEN, +// EFI_CYAN, EFI_RED, EFI_MAGENTA, EFI_BROWN, and EFI_LIGHTGRAY +// are acceptable. +// +// Do not use EFI_BACKGROUND_xxx values with this macro. +//#define EFI_TEXT_ATTR(Foreground,Background) \ +//((Foreground) | ((Background) << 4)) +function EFI_TEXT_ATTR(Foreground, Background : integer) : integer; + implementation { include system independent routines } {$I system.inc} +function EFI_TEXT_ATTR(Foreground, Background : integer) : integer; +begin + Result := Foreground or (Background shl 4); +end; + function paramcount : longint; begin Result := 0; @@ -639,6 +688,30 @@ begin {$endif} end; +procedure TestQueryMode; +var + x, y : integer; +begin + SysTable.ConOut^.QueryMode(SysTable.ConOut, 0, @x, @y); + WriteLn(HexStr(x, 8) + ', ' + HexStr(y, 8)); + SysTable.ConOut^.QueryMode(SysTable.ConOut, 1, @x, @y); + WriteLn(HexStr(x, 8) + ', ' + HexStr(y, 8)); + SysTable.ConOut^.QueryMode(SysTable.ConOut, 2, @x, @y); + WriteLn(HexStr(x, 8) + ', ' + HexStr(y, 8)); + SysTable.ConOut^.QueryMode(SysTable.ConOut, 3, @x, @y); + WriteLn(HexStr(x, 8) + ', ' + HexStr(y, 8)); + SysTable.ConOut^.QueryMode(SysTable.ConOut, 4, @x, @y); + WriteLn(HexStr(x, 8) + ', ' + HexStr(y, 8)); + SysTable.ConOut^.QueryMode(SysTable.ConOut, 5, @x, @y); + WriteLn(HexStr(x, 8) + ', ' + HexStr(y, 8)); + SysTable.ConOut^.SetMode(SysTable.ConOut, 2); + + WriteLn(HexStr(SysTable.ConOut^.Mode^.MaxMode, 8)); + + SysTable.ConOut^.SetCursorPosition(SysTable.ConOut, 10, 10); + SysTable.ConOut^.EnableCursor(SysTable.ConOut, False); +end; + var s : WideString; s1 : string; @@ -746,9 +819,21 @@ begin Debugger('Error in HandleProtocol'); end; + SysTable.ConOut^.Reset(SysTable.ConOut, False); + PascalMain; WriteLn('End of EFI_MAIN...'); - //except + +// SysTable.ConOut^.Reset(SysTable.ConOut, True); + SysTable.ConOut^.SetAttribute(SysTable.ConOut, EFI_TEXT_ATTR(EFI_GREEN, EFI_BLACK) ); + if SysTable.ConOut^.TestString(SysTable.ConOut, 'Text to test...') = EFI_SUCCESS then + begin + WriteLn('TestString OK'); + end; + + TestQueryMode; + +//except // Result := EFI_INVALID_PARAMETER; // WriteLn('Exception in EFI_MAIN'); //end; -- cgit v1.2.1