+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2004, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-\r
-Module Name:\r
-\r
- ConsoleOut.c\r
-\r
-Abstract:\r
-\r
- Console based on Posix APIs. \r
-\r
- This file creates an Posix window and attaches a SimpleTextOut protocol.\r
-\r
---*/\r
-\r
-#include "Console.h"\r
-//\r
-// Private worker functions.\r
-//\r
-\r
-#if 0
-STATIC\r
-VOID\r
-UnixSimpleTextOutScrollScreen (\r
- IN OUT UNIX_SIMPLE_TEXT_PRIVATE_DATA *Console\r
- );\r
-\r
-#endif
-STATIC\r
-VOID\r
-UnixSimpleTextOutPutChar (\r
- IN OUT UNIX_SIMPLE_TEXT_PRIVATE_DATA *Console,\r
- IN CHAR16 Char\r
- );\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextOutSetAttribute (\r
- IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,\r
- IN UINTN Attribute\r
- );\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextOutSetMode (\r
- IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,\r
- IN UINTN ModeNumber\r
- );\r
-
-//\r
-// Modeule Global for Simple Text Out Mode.\r
-//\r
-#define MAX_SIMPLE_TEXT_OUT_MODE \\r
- (sizeof(mUnixSimpleTextOutSupportedModes)/sizeof(UNIX_SIMPLE_TEXT_OUT_MODE))\r
-\r
-STATIC UNIX_SIMPLE_TEXT_OUT_MODE mUnixSimpleTextOutSupportedModes[] = {\r
- { 80, 25 }, \r
-#if 0
- { 80, 50 }, \r
- { 80, 43 }, \r
- { 100, 100 }, \r
- { 100, 999 } \r
-#endif
-};\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextOutReset (\r
- IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,\r
- IN BOOLEAN ExtendedVerification\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - TODO: add argument description\r
- ExtendedVerification - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
-\r
- Private = UNIX_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- UnixSimpleTextOutSetAttribute (This, EFI_TEXT_ATTR (This->Mode->Attribute & 0x0F, EFI_BACKGROUND_BLACK));\r
-\r
- UnixSimpleTextOutSetMode (This, 0);\r
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextOutOutputString (\r
- IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,\r
- IN CHAR16 *String\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - TODO: add argument description\r
- String - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
- CHAR16 *Str;\r
-\r
- Private = UNIX_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- for (Str = String; *Str != '\0'; Str++) {\r
- switch (*Str) {\r
-#if 0
- case '\n':\r
- if (Private->Position.Y == (Private->MaxScreenSize.Y - 1)) {\r
- UnixSimpleTextOutScrollScreen (Private);\r
- }\r
-\r
- if (Private->Position.Y < (Private->MaxScreenSize.Y - 1)) {\r
- Private->Position.Y++;\r
- This->Mode->CursorRow++;\r
- }\r
- break;\r
-\r
- case '\r':\r
- Private->Position.X = 0;\r
- This->Mode->CursorColumn = 0;\r
- break;\r
-\r
- case '\b':\r
- if (Private->Position.X > 0) {\r
- Private->Position.X--;\r
- This->Mode->CursorColumn--;\r
- }\r
- break;\r
-\r
-#endif
- default:\r
- UnixSimpleTextOutPutChar (Private, *Str);\r
- }\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-VOID\r
-UnixSimpleTextOutPutChar (\r
- IN OUT UNIX_SIMPLE_TEXT_PRIVATE_DATA *Console,\r
- IN CHAR16 Char\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- Console - TODO: add argument description\r
- Char - TODO: add argument description\r
-\r
-Returns:\r
-\r
- TODO: add return values\r
-\r
---*/\r
-{\r
- char c = Char;
- Console->UnixThunk->Write (1, &c, 1);
-}\r
-\r
-#if 0
-STATIC\r
-VOID\r
-UnixSimpleTextOutScrollScreen (\r
- IN OUT UNIX_SIMPLE_TEXT_PRIVATE_DATA *Console\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- Console - TODO: add argument description\r
-\r
-Returns:\r
-\r
- TODO: add return values\r
-\r
---*/\r
-{\r
-}\r
-#endif
-
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextOutTestString (\r
- IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,\r
- IN CHAR16 *String\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - TODO: add argument description\r
- String - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
-\r
- Private = UNIX_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- //\r
- // BugBug: The correct answer would be a function of what code pages\r
- // are currently loaded? For now we will just return success.\r
- //\r
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextOutQueryMode (\r
- IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,\r
- IN UINTN ModeNumber,\r
- OUT UINTN *Columns,\r
- OUT UINTN *Rows\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - TODO: add argument description\r
- ModeNumber - TODO: add argument description\r
- Columns - TODO: add argument description\r
- Rows - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_INVALID_PARAMETER - TODO: Add description for return value\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
-\r
- Private = UNIX_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- if (ModeNumber > MAX_SIMPLE_TEXT_OUT_MODE) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- *Columns = mUnixSimpleTextOutSupportedModes[ModeNumber].ColumnsX;\r
- *Rows = mUnixSimpleTextOutSupportedModes[ModeNumber].RowsY;\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextOutSetMode (\r
- IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,\r
- IN UINTN ModeNumber\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - TODO: add argument description\r
- ModeNumber - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_INVALID_PARAMETER - TODO: Add description for return value\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
-\r
- Private = UNIX_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- if (ModeNumber > MAX_SIMPLE_TEXT_OUT_MODE) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
-\r
- This->Mode->Mode = (INT32) ModeNumber;\r
-\r
- This->EnableCursor (This, TRUE);\r
- This->ClearScreen (This);\r
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextOutSetAttribute (\r
- IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,\r
- IN UINTN Attribute\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - TODO: add argument description\r
- Attribute - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
-\r
- Private = UNIX_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
-\r
-#if 0
- Private->Attribute = (WORD) Attribute;\r
-#endif
- This->Mode->Attribute = (INT32) Attribute;\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextOutClearScreen (\r
- IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
- // DWORD ConsoleWindow;\r
-\r
- Private = UNIX_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- This->SetCursorPosition (This, 0, 0);\r
- Private->UnixThunk->Write (1, "\e[2J", 4);
-
-\r
-#if 0
- Private->UnixThunk->FillConsoleOutputCharacter (\r
- Private->NtOutHandle,\r
- ' ',\r
- Private->MaxScreenSize.X * Private->MaxScreenSize.Y,\r
- Private->Possition,\r
- &ConsoleWindow\r
- );\r
- Private->UnixThunk->FillConsoleOutputAttribute (\r
- Private->NtOutHandle,\r
- Private->Attribute,\r
- Private->MaxScreenSize.X * Private->MaxScreenSize.Y,\r
- Private->Possition,\r
- &ConsoleWindow\r
- );\r
-#endif
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextOutSetCursorPosition (\r
- IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,\r
- IN UINTN Column,\r
- IN UINTN Row\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - TODO: add argument description\r
- Column - TODO: add argument description\r
- Row - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- char buf[12];
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
-\r
- Private = UNIX_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
-\r
-#if 0
- Private->Position.X = (WORD) Column;\r
-#endif
- This->Mode->CursorColumn = (INT32) Column;\r
-\r
-#if 0
- Private->Position.Y = (WORD) Row;\r
-#endif
- This->Mode->CursorRow = (INT32) Row;\r
-#if 0
- Private->UnixThunk->SetConsoleCursorPosition (Private->NtOutHandle, Private->Possition);\r
-#endif
-\r
- buf[0] = '\e';
- buf[1] = '[';
- buf[2] = '0' + ((Row / 100) % 10);
- buf[3] = '0' + ((Row / 10) % 10);
- buf[4] = '0' + ((Row / 1) % 10);
- buf[5] = ';';
- buf[6] = '0' + ((Column / 100) % 10);
- buf[7] = '0' + ((Column / 10) % 10);
- buf[8] = '0' + ((Column / 1) % 10);
- buf[9] = 'H';
- Private->UnixThunk->Write (1, buf, 10);
-
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-UnixSimpleTextOutEnableCursor (\r
- IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,\r
- IN BOOLEAN Enable\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- This - TODO: add argument description\r
- Enable - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
- UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
-#if 0
- CONSOLE_CURSOR_INFO Info;\r
-#endif
-\r
- Private = UNIX_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
- Private->CursorEnable = Enable;\r
- This->Mode->CursorVisible = Enable;\r
-\r
-#if 0
- Private->UnixThunk->GetConsoleCursorInfo (Private->NtOutHandle, &Info);\r
- Info.bVisible = Enable;\r
- Private->UnixThunk->SetConsoleCursorInfo (Private->NtOutHandle, &Info);\r
-#endif
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-UnixSimpleTextOutOpenWindow (\r
- IN OUT UNIX_SIMPLE_TEXT_PRIVATE_DATA *Private\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- Private - TODO: add argument description\r
-\r
-Returns:\r
-\r
- TODO: add return values\r
-\r
---*/\r
-{\r
- EFI_SIMPLE_TEXT_OUT_PROTOCOL *SimpleTextOut;\r
- CHAR16 *WindowName;\r
-\r
- //WindowName = Private->UnixIo->EnvString;\r
-#if 0
- Private->Attribute = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY;\r
- if (*WindowName == '?') {\r
- Private->Attribute = BACKGROUND_RED | FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN;\r
- WindowName = L"EFI Emulator Error Console";\r
- }\r
-#endif
- WindowName = L"EFI Emulator Error Console";\r
-\r
- AddUnicodeString (\r
- "eng",\r
- gUnixConsoleComponentName.SupportedLanguages,\r
- &Private->ControllerNameTable,\r
- WindowName\r
- );\r
-\r
- //\r
- // Fill in protocol member functions\r
- //\r
- SimpleTextOut = &Private->SimpleTextOut;\r
- SimpleTextOut->Reset = UnixSimpleTextOutReset;\r
- SimpleTextOut->OutputString = UnixSimpleTextOutOutputString;\r
- SimpleTextOut->TestString = UnixSimpleTextOutTestString;\r
- SimpleTextOut->QueryMode = UnixSimpleTextOutQueryMode;\r
- SimpleTextOut->SetMode = UnixSimpleTextOutSetMode;\r
- SimpleTextOut->SetAttribute = UnixSimpleTextOutSetAttribute;\r
- SimpleTextOut->ClearScreen = UnixSimpleTextOutClearScreen;\r
- SimpleTextOut->SetCursorPosition = UnixSimpleTextOutSetCursorPosition;\r
- SimpleTextOut->EnableCursor = UnixSimpleTextOutEnableCursor;\r
-\r
- //\r
- // Initialize SimpleTextOut protocol mode structure\r
- //\r
- SimpleTextOut->Mode = &Private->SimpleTextOutMode;\r
- SimpleTextOut->Mode->MaxMode = MAX_SIMPLE_TEXT_OUT_MODE;\r
- SimpleTextOut->Mode->Attribute = 0; //FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY;\r
-\r
-#if 0
- //\r
- // Open the window an initialize it!\r
- //\r
- Private->NtOutHandle = Private->UnixThunk->CreateConsoleScreenBuffer (\r
- GENERIC_WRITE | GENERIC_READ,\r
- FILE_SHARE_WRITE | FILE_SHARE_READ,\r
- NULL,\r
- CONSOLE_TEXTMODE_BUFFER,\r
- NULL\r
- );\r
- Private->UnixThunk->SetConsoleTitle (WindowName);\r
-#endif
-\r
- return SimpleTextOut->SetMode (SimpleTextOut, 0);\r
-}\r
-\r
-EFI_STATUS\r
-UnixSimpleTextOutCloseWindow (\r
- IN OUT UNIX_SIMPLE_TEXT_PRIVATE_DATA *Console\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- Console - TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - TODO: Add description for return value\r
-\r
---*/\r
-{\r
-#if 0
- Console->UnixThunk->CloseHandle (Console->NtOutHandle);\r
-#endif
- return EFI_SUCCESS;\r
-}\r