X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkNt32Pkg%2FDxe%2FWinNtThunk%2FBus%2FConsole%2FConsoleOut.c;fp=EdkNt32Pkg%2FDxe%2FWinNtThunk%2FBus%2FConsole%2FConsoleOut.c;h=0000000000000000000000000000000000000000;hp=cab3768b1cf6d1483e0f35235672e48b82cd57b3;hb=808def96aa4589fba9c2d0ea55837754a3b7a4f7;hpb=9216450d1143056a50a5f916984a2d7faf590488 diff --git a/EdkNt32Pkg/Dxe/WinNtThunk/Bus/Console/ConsoleOut.c b/EdkNt32Pkg/Dxe/WinNtThunk/Bus/Console/ConsoleOut.c deleted file mode 100644 index cab3768b1c..0000000000 --- a/EdkNt32Pkg/Dxe/WinNtThunk/Bus/Console/ConsoleOut.c +++ /dev/null @@ -1,638 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - ConsoleOut.c - -Abstract: - - Console based on Win32 APIs. - - This file creates an Win32 window and attaches a SimpleTextOut protocol. - ---*/ - -#include "Console.h" -// -// Private worker functions. -// - -STATIC -VOID -WinNtSimpleTextOutScrollScreen ( - IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Console - ); - -STATIC -VOID -WinNtSimpleTextOutPutChar ( - IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Console, - IN CHAR16 Char - ); - -// -// Modeule Global for Simple Text Out Mode. -// -#define MAX_SIMPLE_TEXT_OUT_MODE \ - (sizeof(mWinNtSimpleTextOutSupportedModes)/sizeof(WIN_NT_SIMPLE_TEXT_OUT_MODE)) - -STATIC WIN_NT_SIMPLE_TEXT_OUT_MODE mWinNtSimpleTextOutSupportedModes[] = { - { 80, 25 }, - { 80, 50 }, - { 80, 43 }, - { 100, 100 }, - { 100, 999 } -}; - -STATIC -EFI_STATUS -EFIAPI -WinNtSimpleTextOutReset ( - IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This, - IN BOOLEAN ExtendedVerification - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - This - TODO: add argument description - ExtendedVerification - TODO: add argument description - -Returns: - - EFI_SUCCESS - TODO: Add description for return value - ---*/ -{ - WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private; - - Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This); - - WinNtSimpleTextOutSetAttribute (This, EFI_TEXT_ATTR (This->Mode->Attribute & 0x0F, EFI_BACKGROUND_BLACK)); - - WinNtSimpleTextOutSetMode (This, 0); - return EFI_SUCCESS; -} - -STATIC -EFI_STATUS -EFIAPI -WinNtSimpleTextOutOutputString ( - IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This, - IN CHAR16 *String - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - This - TODO: add argument description - String - TODO: add argument description - -Returns: - - EFI_SUCCESS - TODO: Add description for return value - ---*/ -{ - WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private; - CHAR16 *Str; - - Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This); - - for (Str = String; *Str != '\0'; Str++) { - switch (*Str) { - case '\n': - if (Private->Possition.Y == (Private->MaxScreenSize.Y - 1)) { - WinNtSimpleTextOutScrollScreen (Private); - } - - if (Private->Possition.Y < (Private->MaxScreenSize.Y - 1)) { - Private->Possition.Y++; - This->Mode->CursorRow++; - } - break; - - case '\r': - Private->Possition.X = 0; - This->Mode->CursorColumn = 0; - break; - - case '\b': - if (Private->Possition.X > 0) { - Private->Possition.X--; - This->Mode->CursorColumn--; - } - break; - - default: - WinNtSimpleTextOutPutChar (Private, *Str); - } - } - - return EFI_SUCCESS; -} - -STATIC -VOID -WinNtSimpleTextOutPutChar ( - IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Console, - IN CHAR16 Char - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - Console - TODO: add argument description - Char - TODO: add argument description - -Returns: - - TODO: add return values - ---*/ -{ - SMALL_RECT Region; - COORD StrCoordinate; - COORD StrSize; - CHAR_INFO CharInfo; - BOOL Flag; - - CharInfo.Char.UnicodeChar = Char; - CharInfo.Attributes = Console->Attribute; - - StrSize.X = 1; - StrSize.Y = 1; - StrCoordinate.X = 0; - StrCoordinate.Y = 0; - - Region.Left = (INT16) Console->Possition.X; - Region.Top = (INT16) Console->Possition.Y; - Region.Right = (INT16) (Console->Possition.X + 1); - Region.Bottom = (INT16) Console->Possition.Y; - - Console->WinNtThunk->WriteConsoleOutput ( - Console->NtOutHandle, - &CharInfo, - StrSize, - StrCoordinate, - &Region - ); - - if (Console->Possition.X >= (Console->MaxScreenSize.X - 1)) { - // - // If you print off the end wrap around - // - Console->SimpleTextOut.OutputString (&Console->SimpleTextOut, L"\n\r"); - } else { - Console->Possition.X++; - Console->SimpleTextOut.Mode->CursorColumn++; - } - - Flag = Console->WinNtThunk->SetConsoleCursorPosition (Console->NtOutHandle, Console->Possition); -} - -STATIC -VOID -WinNtSimpleTextOutScrollScreen ( - IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Console - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - Console - TODO: add argument description - -Returns: - - TODO: add return values - ---*/ -{ - SMALL_RECT Scroll; - CHAR_INFO CharInfo; - COORD Origin; - - CharInfo.Char.UnicodeChar = ' '; - CharInfo.Attributes = Console->Attribute; - - Origin.X = 0; - Origin.Y = 0; - - Scroll.Top = 1; - Scroll.Left = 0; - Scroll.Right = (INT16) Console->MaxScreenSize.X; - Scroll.Bottom = (INT16) Console->MaxScreenSize.Y; - - Console->WinNtThunk->ScrollConsoleScreenBuffer ( - Console->NtOutHandle, - &Scroll, - NULL, - Origin, - &CharInfo - ); -} - -STATIC -EFI_STATUS -EFIAPI -WinNtSimpleTextOutTestString ( - IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This, - IN CHAR16 *String - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - This - TODO: add argument description - String - TODO: add argument description - -Returns: - - EFI_SUCCESS - TODO: Add description for return value - ---*/ -{ - WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private; - - Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This); - - // - // BugBug: The correct answer would be a function of what code pages - // are currently loaded? For now we will just return success. - // - return EFI_SUCCESS; -} - -STATIC -EFI_STATUS -EFIAPI -WinNtSimpleTextOutQueryMode ( - IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This, - IN UINTN ModeNumber, - OUT UINTN *Columns, - OUT UINTN *Rows - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - This - TODO: add argument description - ModeNumber - TODO: add argument description - Columns - TODO: add argument description - Rows - TODO: add argument description - -Returns: - - EFI_INVALID_PARAMETER - TODO: Add description for return value - EFI_SUCCESS - TODO: Add description for return value - ---*/ -{ - WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private; - - Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This); - - if (ModeNumber > MAX_SIMPLE_TEXT_OUT_MODE) { - return EFI_INVALID_PARAMETER; - } - - *Columns = mWinNtSimpleTextOutSupportedModes[ModeNumber].ColumnsX; - *Rows = mWinNtSimpleTextOutSupportedModes[ModeNumber].RowsY; - - return EFI_SUCCESS; -} - -STATIC -EFI_STATUS -EFIAPI -WinNtSimpleTextOutSetMode ( - IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This, - IN UINTN ModeNumber - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - This - TODO: add argument description - ModeNumber - TODO: add argument description - -Returns: - - EFI_INVALID_PARAMETER - TODO: Add description for return value - EFI_SUCCESS - TODO: Add description for return value - ---*/ -{ - WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private; - - Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This); - - if (ModeNumber > MAX_SIMPLE_TEXT_OUT_MODE) { - return EFI_INVALID_PARAMETER; - } - - Private->MaxScreenSize.X = (WORD) mWinNtSimpleTextOutSupportedModes[ModeNumber].ColumnsX; - Private->MaxScreenSize.Y = (WORD) mWinNtSimpleTextOutSupportedModes[ModeNumber].RowsY; - - Private->WinNtThunk->SetConsoleScreenBufferSize (Private->NtOutHandle, Private->MaxScreenSize); - Private->WinNtThunk->SetConsoleActiveScreenBuffer (Private->NtOutHandle); - - This->Mode->Mode = (INT32) ModeNumber; - - This->EnableCursor (This, TRUE); - This->ClearScreen (This); - return EFI_SUCCESS; -} - -STATIC -EFI_STATUS -EFIAPI -WinNtSimpleTextOutSetAttribute ( - IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This, - IN UINTN Attribute - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - This - TODO: add argument description - Attribute - TODO: add argument description - -Returns: - - EFI_SUCCESS - TODO: Add description for return value - ---*/ -{ - WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private; - - Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This); - - Private->Attribute = (WORD) Attribute; - This->Mode->Attribute = (INT32) Attribute; - - return EFI_SUCCESS; -} - -STATIC -EFI_STATUS -EFIAPI -WinNtSimpleTextOutClearScreen ( - IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - This - TODO: add argument description - -Returns: - - EFI_SUCCESS - TODO: Add description for return value - ---*/ -{ - WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private; - DWORD ConsoleWindow; - - Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This); - - This->SetCursorPosition (This, 0, 0); - - Private->WinNtThunk->FillConsoleOutputCharacter ( - Private->NtOutHandle, - ' ', - Private->MaxScreenSize.X * Private->MaxScreenSize.Y, - Private->Possition, - &ConsoleWindow - ); - Private->WinNtThunk->FillConsoleOutputAttribute ( - Private->NtOutHandle, - Private->Attribute, - Private->MaxScreenSize.X * Private->MaxScreenSize.Y, - Private->Possition, - &ConsoleWindow - ); - - return EFI_SUCCESS; -} - -STATIC -EFI_STATUS -EFIAPI -WinNtSimpleTextOutSetCursorPosition ( - IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This, - IN UINTN Column, - IN UINTN Row - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - This - TODO: add argument description - Column - TODO: add argument description - Row - TODO: add argument description - -Returns: - - EFI_SUCCESS - TODO: Add description for return value - ---*/ -{ - WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private; - - Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This); - - Private->Possition.X = (WORD) Column; - This->Mode->CursorColumn = (INT32) Column; - - Private->Possition.Y = (WORD) Row; - This->Mode->CursorRow = (INT32) Row; - Private->WinNtThunk->SetConsoleCursorPosition (Private->NtOutHandle, Private->Possition); - - return EFI_SUCCESS; -} - -STATIC -EFI_STATUS -EFIAPI -WinNtSimpleTextOutEnableCursor ( - IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This, - IN BOOLEAN Enable - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - This - TODO: add argument description - Enable - TODO: add argument description - -Returns: - - EFI_SUCCESS - TODO: Add description for return value - ---*/ -{ - WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private; - CONSOLE_CURSOR_INFO Info; - - Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This); - Private->CursorEnable = Enable; - This->Mode->CursorVisible = Enable; - - Private->WinNtThunk->GetConsoleCursorInfo (Private->NtOutHandle, &Info); - Info.bVisible = Enable; - Private->WinNtThunk->SetConsoleCursorInfo (Private->NtOutHandle, &Info); - - return EFI_SUCCESS; -} - -EFI_STATUS -WinNtSimpleTextOutOpenWindow ( - IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - Private - TODO: add argument description - -Returns: - - TODO: add return values - ---*/ -{ - EFI_SIMPLE_TEXT_OUT_PROTOCOL *SimpleTextOut; - CHAR16 *WindowName; - - WindowName = Private->WinNtIo->EnvString; - Private->Attribute = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY; - if (*WindowName == '?') { - Private->Attribute = BACKGROUND_RED | FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN; - WindowName = L"EFI Emulator Error Console"; - } - - AddUnicodeString ( - "eng", - gWinNtConsoleComponentName.SupportedLanguages, - &Private->ControllerNameTable, - WindowName - ); - - // - // Fill in protocol member functions - // - SimpleTextOut = &Private->SimpleTextOut; - SimpleTextOut->Reset = WinNtSimpleTextOutReset; - SimpleTextOut->OutputString = WinNtSimpleTextOutOutputString; - SimpleTextOut->TestString = WinNtSimpleTextOutTestString; - SimpleTextOut->QueryMode = WinNtSimpleTextOutQueryMode; - SimpleTextOut->SetMode = WinNtSimpleTextOutSetMode; - SimpleTextOut->SetAttribute = WinNtSimpleTextOutSetAttribute; - SimpleTextOut->ClearScreen = WinNtSimpleTextOutClearScreen; - SimpleTextOut->SetCursorPosition = WinNtSimpleTextOutSetCursorPosition; - SimpleTextOut->EnableCursor = WinNtSimpleTextOutEnableCursor; - - // - // Initialize SimpleTextOut protocol mode structure - // - SimpleTextOut->Mode = &Private->SimpleTextOutMode; - SimpleTextOut->Mode->MaxMode = MAX_SIMPLE_TEXT_OUT_MODE; - SimpleTextOut->Mode->Attribute = (INT32) Private->Attribute; - - // - // Open the window an initialize it! - // - Private->NtOutHandle = Private->WinNtThunk->CreateConsoleScreenBuffer ( - GENERIC_WRITE | GENERIC_READ, - FILE_SHARE_WRITE | FILE_SHARE_READ, - NULL, - CONSOLE_TEXTMODE_BUFFER, - NULL - ); - Private->WinNtThunk->SetConsoleTitle (WindowName); - - return SimpleTextOut->SetMode (SimpleTextOut, 0); -} - -EFI_STATUS -WinNtSimpleTextOutCloseWindow ( - IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Console - ) -/*++ - -Routine Description: - - TODO: Add function description - -Arguments: - - Console - TODO: add argument description - -Returns: - - EFI_SUCCESS - TODO: Add description for return value - ---*/ -{ - Console->WinNtThunk->CloseHandle (Console->NtOutHandle); - return EFI_SUCCESS; -}