summaryrefslogtreecommitdiff
path: root/payloads/libpayload/curses/PDCurses-3.4/win32/pdcscrn.c
diff options
context:
space:
mode:
authorStefan Reinauer <stefan.reinauer@coreboot.org>2015-11-10 09:00:41 -0800
committerStefan Reinauer <stefan.reinauer@coreboot.org>2015-11-11 21:38:48 +0100
commit4f85a1eb76d1e7109bcc60ba6f3262a5654ac61b (patch)
treee996818c6aa6b6f702a6c805c447c20724eff265 /payloads/libpayload/curses/PDCurses-3.4/win32/pdcscrn.c
parent2ea24dabd658b8396e0abf79318a538ef0f3a5b8 (diff)
libpayload: Rename PDCurses-3.4 to PDCurses
Change-Id: If881ec130833c7e7e62caa3d31e350a531f5bc8e Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Reviewed-on: http://review.coreboot.org/12398 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'payloads/libpayload/curses/PDCurses-3.4/win32/pdcscrn.c')
-rw-r--r--payloads/libpayload/curses/PDCurses-3.4/win32/pdcscrn.c620
1 files changed, 0 insertions, 620 deletions
diff --git a/payloads/libpayload/curses/PDCurses-3.4/win32/pdcscrn.c b/payloads/libpayload/curses/PDCurses-3.4/win32/pdcscrn.c
deleted file mode 100644
index 12c1ff312e..0000000000
--- a/payloads/libpayload/curses/PDCurses-3.4/win32/pdcscrn.c
+++ /dev/null
@@ -1,620 +0,0 @@
-/* Public Domain Curses */
-
-#include "pdcwin.h"
-
-RCSID("$Id: pdcscrn.c,v 1.92 2008/07/20 20:12:04 wmcbrine Exp $")
-
-#ifdef CHTYPE_LONG
-# define PDC_OFFSET 32
-#else
-# define PDC_OFFSET 8
-#endif
-
-/* COLOR_PAIR to attribute encoding table. */
-
-unsigned char *pdc_atrtab = (unsigned char *)NULL;
-
-HANDLE pdc_con_out = INVALID_HANDLE_VALUE;
-HANDLE pdc_con_in = INVALID_HANDLE_VALUE;
-
-DWORD pdc_quick_edit;
-
-static short curstoreal[16], realtocurs[16] =
-{
- COLOR_BLACK, COLOR_BLUE, COLOR_GREEN, COLOR_CYAN, COLOR_RED,
- COLOR_MAGENTA, COLOR_YELLOW, COLOR_WHITE, COLOR_BLACK + 8,
- COLOR_BLUE + 8, COLOR_GREEN + 8, COLOR_CYAN + 8, COLOR_RED + 8,
- COLOR_MAGENTA + 8, COLOR_YELLOW + 8, COLOR_WHITE + 8
-};
-
-enum { PDC_RESTORE_NONE, PDC_RESTORE_BUFFER, PDC_RESTORE_WINDOW };
-
-/* Struct for storing console registry keys, and for use with the
- undocumented WM_SETCONSOLEINFO message. Originally by James Brown,
- www.catch22.net. */
-
-static struct
-{
- ULONG Length;
- COORD ScreenBufferSize;
- COORD WindowSize;
- ULONG WindowPosX;
- ULONG WindowPosY;
-
- COORD FontSize;
- ULONG FontFamily;
- ULONG FontWeight;
- WCHAR FaceName[32];
-
- ULONG CursorSize;
- ULONG FullScreen;
- ULONG QuickEdit;
- ULONG AutoPosition;
- ULONG InsertMode;
-
- USHORT ScreenColors;
- USHORT PopupColors;
- ULONG HistoryNoDup;
- ULONG HistoryBufferSize;
- ULONG NumberOfHistoryBuffers;
-
- COLORREF ColorTable[16];
-
- ULONG CodePage;
- HWND Hwnd;
-
- WCHAR ConsoleTitle[0x100];
-} console_info;
-
-static CONSOLE_SCREEN_BUFFER_INFO orig_scr;
-
-static CHAR_INFO *ci_save = NULL;
-static DWORD old_console_mode = 0;
-
-static bool is_nt;
-
-static HWND _find_console_handle(void)
-{
- TCHAR orgtitle[1024], temptitle[1024];
- HWND wnd;
-
- GetConsoleTitle(orgtitle, 1024);
-
- wsprintf(temptitle, TEXT("%d/%d"), GetTickCount(), GetCurrentProcessId());
- SetConsoleTitle(temptitle);
-
- Sleep(40);
-
- wnd = FindWindow(NULL, temptitle);
-
- SetConsoleTitle(orgtitle);
-
- return wnd;
-}
-
-/* Undocumented console message */
-
-#define WM_SETCONSOLEINFO (WM_USER + 201)
-
-/* Wrapper around WM_SETCONSOLEINFO. We need to create the necessary
- section (file-mapping) object in the context of the process which
- owns the console, before posting the message. Originally by JB. */
-
-static void _set_console_info(void)
-{
- CONSOLE_SCREEN_BUFFER_INFO csbi;
- CONSOLE_CURSOR_INFO cci;
- DWORD dwConsoleOwnerPid;
- HANDLE hProcess;
- HANDLE hSection, hDupSection;
- PVOID ptrView;
-
- /* Each-time initialization for console_info */
-
- GetConsoleCursorInfo(pdc_con_out, &cci);
- console_info.CursorSize = cci.dwSize;
-
- GetConsoleScreenBufferInfo(pdc_con_out, &csbi);
- console_info.ScreenBufferSize = csbi.dwSize;
-
- console_info.WindowSize.X = csbi.srWindow.Right - csbi.srWindow.Left + 1;
- console_info.WindowSize.Y = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
-
- console_info.WindowPosX = csbi.srWindow.Left;
- console_info.WindowPosY = csbi.srWindow.Top;
-
- /* Open the process which "owns" the console */
-
- GetWindowThreadProcessId(console_info.Hwnd, &dwConsoleOwnerPid);
-
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwConsoleOwnerPid);
-
- /* Create a SECTION object backed by page-file, then map a view of
- this section into the owner process so we can write the contents
- of the CONSOLE_INFO buffer into it */
-
- hSection = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE,
- 0, sizeof(console_info), 0);
-
- /* Copy our console structure into the section-object */
-
- ptrView = MapViewOfFile(hSection, FILE_MAP_WRITE|FILE_MAP_READ,
- 0, 0, sizeof(console_info));
-
- memcpy(ptrView, &console_info, sizeof(console_info));
-
- UnmapViewOfFile(ptrView);
-
- /* Map the memory into owner process */
-
- DuplicateHandle(GetCurrentProcess(), hSection, hProcess, &hDupSection,
- 0, FALSE, DUPLICATE_SAME_ACCESS);
-
- /* Send console window the "update" message */
-
- SendMessage(console_info.Hwnd, WM_SETCONSOLEINFO, (WPARAM)hDupSection, 0);
-
- CloseHandle(hSection);
- CloseHandle(hProcess);
-}
-
-/* One-time initialization for console_info -- color table and font info
- from the registry; other values from functions. */
-
-static void _init_console_info(void)
-{
- DWORD scrnmode, len;
- HKEY reghnd;
- int i;
-
- console_info.Hwnd = _find_console_handle();
- console_info.Length = sizeof(console_info);
-
- GetConsoleMode(pdc_con_in, &scrnmode);
- console_info.QuickEdit = !!(scrnmode & 0x0040);
- console_info.InsertMode = !!(scrnmode & 0x0020);
-
- console_info.FullScreen = FALSE;
- console_info.AutoPosition = 0x10000;
- console_info.ScreenColors = SP->orig_back << 4 | SP->orig_fore;
- console_info.PopupColors = 0xf5;
-
- console_info.HistoryNoDup = FALSE;
- console_info.HistoryBufferSize = 50;
- console_info.NumberOfHistoryBuffers = 4;
-
- console_info.CodePage = GetConsoleOutputCP();
-
- RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Console"), 0,
- KEY_QUERY_VALUE, &reghnd);
-
- len = sizeof(DWORD);
-
- /* Default color table */
-
- for (i = 0; i < 16; i++)
- {
- char tname[13];
-
- sprintf(tname, "ColorTable%02d", i);
- RegQueryValueExA(reghnd, tname, NULL, NULL,
- (LPBYTE)(&(console_info.ColorTable[i])), &len);
- }
-
- /* Font info */
-
- RegQueryValueEx(reghnd, TEXT("FontSize"), NULL, NULL,
- (LPBYTE)(&console_info.FontSize), &len);
- RegQueryValueEx(reghnd, TEXT("FontFamily"), NULL, NULL,
- (LPBYTE)(&console_info.FontFamily), &len);
- RegQueryValueEx(reghnd, TEXT("FontWeight"), NULL, NULL,
- (LPBYTE)(&console_info.FontWeight), &len);
-
- len = sizeof(WCHAR) * 32;
- RegQueryValueExW(reghnd, L"FaceName", NULL, NULL,
- (LPBYTE)(console_info.FaceName), &len);
-
- RegCloseKey(reghnd);
-}
-
-/* close the physical screen -- may restore the screen to its state
- before PDC_scr_open(); miscellaneous cleanup */
-
-void PDC_scr_close(void)
-{
- COORD origin;
- SMALL_RECT rect;
-
- PDC_LOG(("PDC_scr_close() - called\n"));
-
- PDC_reset_shell_mode();
-
- if (SP->_restore != PDC_RESTORE_NONE)
- {
- if (SP->_restore == PDC_RESTORE_WINDOW)
- {
- rect.Top = orig_scr.srWindow.Top;
- rect.Left = orig_scr.srWindow.Left;
- rect.Bottom = orig_scr.srWindow.Bottom;
- rect.Right = orig_scr.srWindow.Right;
- }
- else /* PDC_RESTORE_BUFFER */
- {
- rect.Top = rect.Left = 0;
- rect.Bottom = orig_scr.dwSize.Y - 1;
- rect.Right = orig_scr.dwSize.X - 1;
- }
-
- origin.X = origin.Y = 0;
-
- if (!WriteConsoleOutput(pdc_con_out, ci_save, orig_scr.dwSize,
- origin, &rect))
- return;
- }
-
- if (SP->visibility != 1)
- curs_set(1);
-
- /* Position cursor to the bottom left of the screen. */
-
- PDC_gotoyx(PDC_get_buffer_rows() - 2, 0);
-}
-
-void PDC_scr_free(void)
-{
- if (SP)
- free(SP);
- if (pdc_atrtab)
- free(pdc_atrtab);
-
- pdc_atrtab = (unsigned char *)NULL;
-}
-
-/* open the physical screen -- allocate SP, miscellaneous intialization,
- and may save the existing screen for later restoration */
-
-int PDC_scr_open(int argc, char **argv)
-{
- COORD bufsize, origin;
- SMALL_RECT rect;
- const char *str;
- CONSOLE_SCREEN_BUFFER_INFO csbi;
- int i;
-
- PDC_LOG(("PDC_scr_open() - called\n"));
-
- SP = calloc(1, sizeof(SCREEN));
- pdc_atrtab = calloc(PDC_COLOR_PAIRS * PDC_OFFSET, 1);
-
- if (!SP || !pdc_atrtab)
- return ERR;
-
- for (i = 0; i < 16; i++)
- curstoreal[realtocurs[i]] = i;
-
- pdc_con_out = GetStdHandle(STD_OUTPUT_HANDLE);
- pdc_con_in = GetStdHandle(STD_INPUT_HANDLE);
-
- if (GetFileType(pdc_con_in) != FILE_TYPE_CHAR)
- {
- fprintf(stderr, "\nRedirection is not supported.\n");
- exit(1);
- }
-
- is_nt = !(GetVersion() & 0x80000000);
-
- GetConsoleScreenBufferInfo(pdc_con_out, &csbi);
- GetConsoleScreenBufferInfo(pdc_con_out, &orig_scr);
- GetConsoleMode(pdc_con_in, &old_console_mode);
-
- /* preserve QuickEdit Mode setting for use in PDC_mouse_set() when
- the mouse is not enabled -- other console input settings are
- cleared */
-
- pdc_quick_edit = old_console_mode & 0x0040;
-
- SP->lines = (str = getenv("LINES")) ? atoi(str) : PDC_get_rows();
- SP->cols = (str = getenv("COLS")) ? atoi(str) : PDC_get_columns();
-
- SP->mouse_wait = PDC_CLICK_PERIOD;
- SP->audible = TRUE;
-
- if (SP->lines < 2 || SP->lines > csbi.dwMaximumWindowSize.Y)
- {
- fprintf(stderr, "LINES value must be >= 2 and <= %d: got %d\n",
- csbi.dwMaximumWindowSize.Y, SP->lines);
-
- return ERR;
- }
-
- if (SP->cols < 2 || SP->cols > csbi.dwMaximumWindowSize.X)
- {
- fprintf(stderr, "COLS value must be >= 2 and <= %d: got %d\n",
- csbi.dwMaximumWindowSize.X, SP->cols);
-
- return ERR;
- }
-
- SP->orig_fore = csbi.wAttributes & 0x0f;
- SP->orig_back = (csbi.wAttributes & 0xf0) >> 4;
-
- SP->orig_attr = TRUE;
-
- SP->_restore = PDC_RESTORE_NONE;
-
- if (getenv("PDC_RESTORE_SCREEN"))
- {
- /* Attempt to save the complete console buffer */
-
- ci_save = malloc(orig_scr.dwSize.X * orig_scr.dwSize.Y *
- sizeof(CHAR_INFO));
-
- if (!ci_save)
- {
- PDC_LOG(("PDC_scr_open() - malloc failure (1)\n"));
-
- return ERR;
- }
-
- bufsize.X = orig_scr.dwSize.X;
- bufsize.Y = orig_scr.dwSize.Y;
-
- origin.X = origin.Y = 0;
-
- rect.Top = rect.Left = 0;
- rect.Bottom = orig_scr.dwSize.Y - 1;
- rect.Right = orig_scr.dwSize.X - 1;
-
- if (!ReadConsoleOutput(pdc_con_out, ci_save, bufsize, origin, &rect))
- {
- /* We can't save the complete buffer, so try and save just
- the displayed window */
-
- free(ci_save);
- ci_save = NULL;
-
- bufsize.X = orig_scr.srWindow.Right - orig_scr.srWindow.Left + 1;
- bufsize.Y = orig_scr.srWindow.Bottom - orig_scr.srWindow.Top + 1;
-
- ci_save = malloc(bufsize.X * bufsize.Y * sizeof(CHAR_INFO));
-
- if (!ci_save)
- {
- PDC_LOG(("PDC_scr_open() - malloc failure (2)\n"));
-
- return ERR;
- }
-
- origin.X = origin.Y = 0;
-
- rect.Top = orig_scr.srWindow.Top;
- rect.Left = orig_scr.srWindow.Left;
- rect.Bottom = orig_scr.srWindow.Bottom;
- rect.Right = orig_scr.srWindow.Right;
-
- if (!ReadConsoleOutput(pdc_con_out, ci_save, bufsize,
- origin, &rect))
- {
-#ifdef PDCDEBUG
- CHAR LastError[256];
-
- FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,
- GetLastError(), MAKELANGID(LANG_NEUTRAL,
- SUBLANG_DEFAULT), LastError, 256, NULL);
-
- PDC_LOG(("PDC_scr_open() - %s\n", LastError));
-#endif
- free(ci_save);
- ci_save = NULL;
-
- return ERR;
- }
-
- SP->_restore = PDC_RESTORE_WINDOW;
- }
- else
- SP->_restore = PDC_RESTORE_BUFFER;
- }
-
- SP->_preserve = (getenv("PDC_PRESERVE_SCREEN") != NULL);
-
- PDC_reset_prog_mode();
-
- SP->mono = FALSE;
-
- return OK;
-}
-
- /* Calls SetConsoleWindowInfo with the given parameters, but fits them
- if a scoll bar shrinks the maximum possible value. The rectangle
- must at least fit in a half-sized window. */
-
-static BOOL _fit_console_window(HANDLE con_out, CONST SMALL_RECT *rect)
-{
- SMALL_RECT run;
- SHORT mx, my;
-
- if (SetConsoleWindowInfo(con_out, TRUE, rect))
- return TRUE;
-
- run = *rect;
- run.Right /= 2;
- run.Bottom /= 2;
-
- mx = run.Right;
- my = run.Bottom;
-
- if (!SetConsoleWindowInfo(con_out, TRUE, &run))
- return FALSE;
-
- for (run.Right = rect->Right; run.Right >= mx; run.Right--)
- if (SetConsoleWindowInfo(con_out, TRUE, &run))
- break;
-
- if (run.Right < mx)
- return FALSE;
-
- for (run.Bottom = rect->Bottom; run.Bottom >= my; run.Bottom--)
- if (SetConsoleWindowInfo(con_out, TRUE, &run))
- return TRUE;
-
- return FALSE;
-}
-
-/* the core of resize_term() */
-
-int PDC_resize_screen(int nlines, int ncols)
-{
- SMALL_RECT rect;
- COORD size, max;
-
- if (nlines < 2 || ncols < 2)
- return ERR;
-
- max = GetLargestConsoleWindowSize(pdc_con_out);
-
- rect.Left = rect.Top = 0;
- rect.Right = ncols - 1;
-
- if (rect.Right > max.X)
- rect.Right = max.X;
-
- rect.Bottom = nlines - 1;
-
- if (rect.Bottom > max.Y)
- rect.Bottom = max.Y;
-
- size.X = rect.Right + 1;
- size.Y = rect.Bottom + 1;
-
- _fit_console_window(pdc_con_out, &rect);
- SetConsoleScreenBufferSize(pdc_con_out, size);
- _fit_console_window(pdc_con_out, &rect);
- SetConsoleScreenBufferSize(pdc_con_out, size);
- SetConsoleActiveScreenBuffer(pdc_con_out);
-
- return OK;
-}
-
-void PDC_reset_prog_mode(void)
-{
- PDC_LOG(("PDC_reset_prog_mode() - called.\n"));
-
- if (is_nt)
- {
- COORD bufsize;
- SMALL_RECT rect;
-
- bufsize.X = orig_scr.srWindow.Right - orig_scr.srWindow.Left + 1;
- bufsize.Y = orig_scr.srWindow.Bottom - orig_scr.srWindow.Top + 1;
-
- rect.Top = rect.Left = 0;
- rect.Bottom = bufsize.Y - 1;
- rect.Right = bufsize.X - 1;
-
- SetConsoleScreenBufferSize(pdc_con_out, bufsize);
- SetConsoleWindowInfo(pdc_con_out, TRUE, &rect);
- SetConsoleScreenBufferSize(pdc_con_out, bufsize);
- SetConsoleActiveScreenBuffer(pdc_con_out);
- }
-
- PDC_mouse_set();
-}
-
-void PDC_reset_shell_mode(void)
-{
- PDC_LOG(("PDC_reset_shell_mode() - called.\n"));
-
- if (is_nt)
- {
- SetConsoleScreenBufferSize(pdc_con_out, orig_scr.dwSize);
- SetConsoleWindowInfo(pdc_con_out, TRUE, &orig_scr.srWindow);
- SetConsoleScreenBufferSize(pdc_con_out, orig_scr.dwSize);
- SetConsoleWindowInfo(pdc_con_out, TRUE, &orig_scr.srWindow);
- SetConsoleActiveScreenBuffer(pdc_con_out);
- }
-
- SetConsoleMode(pdc_con_in, old_console_mode);
-}
-
-void PDC_restore_screen_mode(int i)
-{
-}
-
-void PDC_save_screen_mode(int i)
-{
-}
-
-void PDC_init_pair(short pair, short fg, short bg)
-{
- unsigned char att, temp_bg;
- chtype i;
-
- fg = curstoreal[fg];
- bg = curstoreal[bg];
-
- for (i = 0; i < PDC_OFFSET; i++)
- {
- att = fg | (bg << 4);
-
- if (i & (A_REVERSE >> PDC_ATTR_SHIFT))
- att = bg | (fg << 4);
- if (i & (A_UNDERLINE >> PDC_ATTR_SHIFT))
- att = 1;
- if (i & (A_INVIS >> PDC_ATTR_SHIFT))
- {
- temp_bg = att >> 4;
- att = temp_bg << 4 | temp_bg;
- }
- if (i & (A_BOLD >> PDC_ATTR_SHIFT))
- att |= 8;
- if (i & (A_BLINK >> PDC_ATTR_SHIFT))
- att |= 128;
-
- pdc_atrtab[pair * PDC_OFFSET + i] = att;
- }
-}
-
-int PDC_pair_content(short pair, short *fg, short *bg)
-{
- *fg = realtocurs[pdc_atrtab[pair * PDC_OFFSET] & 0x0F];
- *bg = realtocurs[(pdc_atrtab[pair * PDC_OFFSET] & 0xF0) >> 4];
-
- return OK;
-}
-
-bool PDC_can_change_color(void)
-{
- return is_nt;
-}
-
-int PDC_color_content(short color, short *red, short *green, short *blue)
-{
- DWORD col;
-
- if (!console_info.Hwnd)
- _init_console_info();
-
- col = console_info.ColorTable[curstoreal[color]];
-
- *red = DIVROUND(GetRValue(col) * 1000, 255);
- *green = DIVROUND(GetGValue(col) * 1000, 255);
- *blue = DIVROUND(GetBValue(col) * 1000, 255);
-
- return OK;
-}
-
-int PDC_init_color(short color, short red, short green, short blue)
-{
- if (!console_info.Hwnd)
- _init_console_info();
-
- console_info.ColorTable[curstoreal[color]] =
- RGB(DIVROUND(red * 255, 1000),
- DIVROUND(green * 255, 1000),
- DIVROUND(blue * 255, 1000));
-
- _set_console_info();
-
- return OK;
-}