diff --git a/console/.cvsignore b/console/.cvsignore deleted file mode 100644 index f3c7a7c5da68804a1bdf391127ba34aed33c3cca..0000000000000000000000000000000000000000 --- a/console/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -Makefile diff --git a/console/Makefile.in b/console/Makefile.in deleted file mode 100644 index 77399288e4d2c8e9ba8537cebed3115343da747b..0000000000000000000000000000000000000000 --- a/console/Makefile.in +++ /dev/null @@ -1,22 +0,0 @@ -DEFS = @DLLFLAGS@ -D__WINE__ -TOPSRCDIR = @top_srcdir@ -TOPOBJDIR = .. -SRCDIR = @srcdir@ -VPATH = @srcdir@ -MODULE = console - -C_SRCS = \ - generic.c \ - interface.c \ - ncurses.c \ - tty.c \ - xterm.c - -all: $(MODULE).o - -@MAKE_RULES@ - -$(MODULE).o: $(OBJS) Makefile.in $(TOPSRCDIR)/Make.rules.in - $(LDCOMBINE) $(OBJS) -o $@ - -### Dependencies: diff --git a/console/generic.c b/console/generic.c deleted file mode 100644 index effa6eaae335a830b75ebbc702f88cd758748823..0000000000000000000000000000000000000000 --- a/console/generic.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright 1999 - Joseph Pranevich - * - * This is a driver to implement, when possible, "high-level" - * routines using only low level calls. This is to make it possible - * to have accelerated functions for the individual drivers... - * or to simply not bother with them. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* When creating new drivers, you need to assign all the functions that - that driver supports into the driver struct. If it is a supplementary - driver, it should make sure to preserve the old values. */ - -#include "config.h" - -#include <stdio.h> - -#include "console.h" -#include "wine/debug.h" - -WINE_DEFAULT_DEBUG_CHANNEL(console); - -static void GENERIC_MoveLine(char row1, char row2, char col1, char col2); -static void GENERIC_ClearLine(char row, char col1, char col2, int bgcolor, - int attribute); -void GENERIC_Start(void) -{ - /* Here, we only want to add a driver if there is not one already - defined. */ - - TRACE("GENERIC_Start\n"); - - if (!driver.clearWindow) - driver.clearWindow = GENERIC_ClearWindow; - - if (!driver.scrollUpWindow) - driver.scrollUpWindow = GENERIC_ScrollUpWindow; - - if (!driver.scrollDownWindow) - driver.scrollDownWindow = GENERIC_ScrollDownWindow; - - if (!driver.getCharacter) - driver.getCharacter = GENERIC_GetCharacter; -} - -void GENERIC_ClearWindow(char row1, char col1, char row2, char col2, - int bg_color, int attribute) -{ - char trow, tcol, x; - int old_refresh; - - /* Abort if we have only partial functionality */ - if (!(driver.getCursorPosition && driver.moveCursor && driver.write)) - return; - - old_refresh = CONSOLE_GetRefresh(); - CONSOLE_SetRefresh(FALSE); - - CONSOLE_GetCursorPosition(&trow, &tcol); - - for (x = row1; x <= row2; x++) - GENERIC_ClearLine(x, col1, col2, bg_color, attribute); - - CONSOLE_MoveCursor(trow, tcol); - - CONSOLE_SetRefresh(old_refresh); -} - -void GENERIC_ScrollUpWindow(char row1, char col1, char row2, char col2, - char lines, int bg_color, int attribute) -{ - /* Scroll Up Window: Characters go down */ - - char trow, tcol, x; - int old_refresh; - - TRACE("Scroll Up %d lines from %d to %d.\n", lines, row1, - row2); - - /* Abort if we have only partial functionality */ - if (!(driver.getCursorPosition && driver.moveCursor && driver.write - && driver.getCharacterAtCursor && driver.clearWindow)) - return; - - /* Save initial state... */ - old_refresh = CONSOLE_GetRefresh(); - CONSOLE_SetRefresh(FALSE); - CONSOLE_GetCursorPosition(&trow, &tcol); - - for (x = row1 + lines; x <= row2; x++) - { - GENERIC_MoveLine(x, x - lines, col1, col2); - GENERIC_ClearLine(x, col1, col2, bg_color, attribute); - } - - /* Restore State */ - CONSOLE_MoveCursor(trow, tcol); - CONSOLE_SetRefresh(old_refresh); -} - -void GENERIC_ScrollDownWindow(char row1, char col1, char row2, char col2, - char lines, int bg_color, int attribute) -{ - /* Scroll Down Window: Characters go up */ - - char trow, tcol, x; - int old_refresh; - - /* Abort if we have only partial functionality */ - if (!(driver.getCursorPosition && driver.moveCursor && driver.write - && driver.getCharacterAtCursor && driver.clearWindow)) - return; - - /* Save initial state... */ - old_refresh = CONSOLE_GetRefresh(); - CONSOLE_SetRefresh(FALSE); - CONSOLE_GetCursorPosition(&trow, &tcol); - - for (x = row2; x >= row1 + lines; x--) - { - GENERIC_MoveLine(x, x + lines, col1, col2); - GENERIC_ClearLine(x, col1, col1, bg_color, attribute); - } - - /* Restore State */ - CONSOLE_MoveCursor(trow, tcol); - CONSOLE_SetRefresh(old_refresh); -} - -char GENERIC_GetCharacter() -{ - /* Keep getting keys until we get one with a char value */ - char ch = (char) 0, scan; - - while (!ch) - { - CONSOLE_GetKeystroke(&scan, &ch); - } - return ch; -} - -static void GENERIC_ClearLine(char row, char col1, char col2, int bgcolor, - int attribute) -{ - /* This function is here to simplify the logic of the scroll and clear - functions but may be useful elsewhere. If it can be used from - outside here, it should be made non-static */ - - char x; - - TRACE("Clear Line: %d from %d to %d (unused: bgcolor %d, attrib %d).\n", row, col1, col2, bgcolor, attribute); - - for (x = col1; x <= col2; x++) - { - CONSOLE_MoveCursor(row, x); - CONSOLE_Write(' ', 0, 0, 0); - } - - /* Assume that the calling function will make sure that the cursor is - repositioned properly. If this becomes non-static, that will need to be - changed. */ -} - -static void GENERIC_MoveLine(char row1, char row2, char col1, char col2) -{ - /* This function is here to simplify the logic of the scroll and clear - functions but may be useful elsewhere. If it can be used from - outside here, it should be made non-static */ - - char x; - int bg_color, fg_color, attribute; - char ch; - - TRACE("Move Line: Move %d to %d.\n", row1, row2); - - for (x = col1; x <= col2; x++) - { - CONSOLE_MoveCursor(row1, x); - CONSOLE_GetCharacterAtCursor(&ch, &fg_color, &bg_color, &attribute); - CONSOLE_MoveCursor(row2, x); - CONSOLE_Write(ch, fg_color, bg_color, attribute); - } - - /* Assume that the calling function will make sure that the cursor is - repositioned properly. If this becomes non-static, that will need to be - changed. */ -} diff --git a/console/interface.c b/console/interface.c deleted file mode 100644 index 8d64e0cfcea30b33453b78f6163e828118574e06..0000000000000000000000000000000000000000 --- a/console/interface.c +++ /dev/null @@ -1,376 +0,0 @@ -/* - * Copyright 1999 - Joseph Pranevich - * - * The primary purpose of this function is to provide CONSOLE_* - * routines that immediately call the appropriate driver handler. - * This cleans up code in the individual modules considerably. - * This could be done using a macro, but additional functionality - * may be provided here in the future. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "config.h" - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "windef.h" -#include "console.h" -#include "options.h" - -CONSOLE_device driver; - -static int pop_driver(char **, char **, int *); - -static int console_initialized = FALSE; - -static int CONSOLE_Init(void) -{ - char buffer[256]; - char *single, *drivers = buffer; - int length; - char initial_rows[5]; - char initial_columns[5]; - - /* Suitable defaults... */ - driver.console_out = stdout; - driver.console_in = stdin; - - /* drivers should be a string that consists of driver names - followed by plus (+) signs to denote additions. - - For example: - drivers = tty Load just the tty driver - drivers = ncurses+xterm Load ncurses then xterm - - The "default" value is just tty. - */ - PROFILE_GetWineIniString( "console", "Drivers", CONSOLE_DEFAULT_DRIVER, - buffer, sizeof(buffer) ); - - while (pop_driver(&drivers, &single, &length)) - { - if (!strncmp(single, "tty", length)) - TTY_Start(); -#ifdef WINE_NCURSES - else if (!strncmp(single, "ncurses", length)) - NCURSES_Start(); -#endif /* WINE_NCURSES */ - else if (!strncmp(single, "xterm", length)) - XTERM_Start(); - } - - /* Read in generic configuration */ - /* This is primarily to work around a limitation in nxterm where - this information is not correctly passed to the ncurses layer - through the terminal. At least, I'm not doing it correctly if there - is a way. But this serves as a generic way to do the same anyway. */ - - /* We are setting this to 80x25 here which is *not* the default for - most xterm variants... It is however the standard VGA resolution */ - - /* FIXME: We need to be able to be able to specify that the window's - dimensions should be used. This is required for correct emulation - of Win32's console and Win32's DOS emulation */ - - PROFILE_GetWineIniString("console", "InitialRows", - "24", initial_rows, 5); - PROFILE_GetWineIniString("console", "InitialColumns", - "80", initial_columns, 5); - - sscanf(initial_rows, "%d", &driver.y_res); - sscanf(initial_columns, "%d", &driver.x_res); - - GENERIC_Start(); - - if (driver.init) - driver.init(); - - /* Not all terminals let our programs know the proper resolution - if the resolution is set on the command-line... */ - CONSOLE_NotifyResizeScreen(driver.x_res, driver.y_res); - - atexit(CONSOLE_Close); - - /* For now, always return TRUE */ - return TRUE; -} - -void CONSOLE_Write(char out, int fg_color, int bg_color, int attribute) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.write) - { - driver.write(out, fg_color, bg_color, attribute); - if (!driver.norefresh) - CONSOLE_Refresh(); - } -} - -void CONSOLE_Close(void) -{ - if (driver.close) - driver.close(); -} - -void CONSOLE_MoveCursor(char row, char col) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.moveCursor) - { - driver.moveCursor(row, col); - if (!driver.norefresh) - CONSOLE_Refresh(); - } -} - -void CONSOLE_ClearWindow(char row1, char col1, char row2, char col2, - int bg_color, int attribute) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.clearWindow) - { - driver.clearWindow(row1, col1, row2, col2, bg_color, attribute); - if (!driver.norefresh) - CONSOLE_Refresh(); - } -} - -void CONSOLE_ScrollUpWindow(char row1, char col1, char row2, char col2, - char lines, int bg_color, int attribute) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.scrollUpWindow) - { - driver.scrollUpWindow(row1, col1, row2, col2, lines, bg_color, - attribute); - if (!driver.norefresh) - CONSOLE_Refresh(); - } -} - -void CONSOLE_ScrollDownWindow(char row1, char col1, char row2, char col2, - char lines, int bg_color, int attribute) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.scrollDownWindow) - { - driver.scrollDownWindow(row1, col1, row2, col2, lines, bg_color, - attribute); - if (!driver.norefresh) - CONSOLE_Refresh(); - } -} - -int CONSOLE_CheckForKeystroke(char *scan, char *ascii) -/* These functions need to go through a conversion layer. Scancodes - should *not* be determined by the driver, rather they should have - a conv_* function in int16.c. Yuck. */ -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.checkForKeystroke) - return driver.checkForKeystroke(scan, ascii); - else - return FALSE; -} - -void CONSOLE_GetKeystroke(char *scan, char *ascii) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.getKeystroke) - driver.getKeystroke(scan, ascii); -} - -void CONSOLE_GetCursorPosition(char *row, char *col) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.getCursorPosition) - driver.getCursorPosition(row, col); -} - -void CONSOLE_GetCharacterAtCursor(char *ch, int *fg, int *bg, int *a) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.getCharacterAtCursor) - driver.getCharacterAtCursor(ch, fg, bg, a); -} - -void CONSOLE_Refresh() -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.refresh) - driver.refresh(); -} - -int CONSOLE_AllocColor(int color) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.allocColor) - return driver.allocColor(color); - else - return 0; -} - -void CONSOLE_ClearScreen() -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.clearScreen) - { - driver.clearScreen(); - if (!driver.norefresh) - CONSOLE_Refresh(); - } -} - -char CONSOLE_GetCharacter() -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - /* I'm not sure if we need this really. This is a function that can be - accelerated that returns the next *non extended* keystroke */ - if (driver.getCharacter) - return driver.getCharacter(); - else - return (char) 0; /* Sure, this will probably break programs... */ -} - -void CONSOLE_ResizeScreen(int x, int y) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.resizeScreen) - driver.resizeScreen(x, y); -} - -void CONSOLE_NotifyResizeScreen(int x, int y) -{ - if (driver.notifyResizeScreen) - driver.notifyResizeScreen(x, y); -} - -void CONSOLE_SetBackgroundColor(int fg, int bg) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.setBackgroundColor) - driver.setBackgroundColor(fg, bg); -} - -void CONSOLE_GetBackgroundColor(int *fg, int *bg) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - if (driver.getBackgroundColor) - driver.getBackgroundColor(fg, bg); -} - -void CONSOLE_WriteRawString(char *str) -{ - if (!console_initialized) - console_initialized = CONSOLE_Init(); - - /* This is a special function that is only for internal use and - does not actually call any of the console drivers. It's - primary purpose is to provide a way for higher-level drivers - to write directly to the underlying terminal without worry that - there will be any retranslation done by the assorted drivers. Care - should be taken to ensure that this only gets called when the thing - written does not actually produce any output or a CONSOLE_Redraw() - is called immediately afterwards. - CONSOLE_Redraw() is not yet implemented. - */ - fprintf(driver.console_out, "%s", str); -} - -/* This function is only at the CONSOLE level. */ -/* Admittably, calling the variable norefresh might be a bit dumb...*/ -void CONSOLE_SetRefresh(int setting) -{ - if (setting) - driver.norefresh = FALSE; - else - driver.norefresh = TRUE; -} - -/* This function is only at the CONSOLE level. */ -int CONSOLE_GetRefresh() -{ - if (driver.norefresh) - return FALSE; - else - return TRUE; -} - - -/* Utility functions... */ - -int pop_driver(char **drivers, char **single, int *length) -{ - /* Take the string in drivers and extract the first "driver" entry */ - /* Advance the pointer in drivers to the next entry, put the origional - pointer in single, and put the length in length. */ - /* Return TRUE if we found one */ - - if (!*drivers) - return FALSE; - - *single = *drivers; - *length = 0; - - while ((*drivers[0] != '\0') && (*drivers[0] != '+')) - { - (*drivers)++; - (*length)++; - } - - while (*drivers[0] == '+') - (*drivers)++; - - if (*length) - return TRUE; - else - return FALSE; - -} diff --git a/console/ncurses.c b/console/ncurses.c deleted file mode 100644 index 72b073d738d0fda7c2465456983fecfe9fc4d69c..0000000000000000000000000000000000000000 --- a/console/ncurses.c +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright 1999 - Joseph Pranevich - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "config.h" - -#include <stdio.h> - -#include "console.h" /* Must define WINE_NCURSES */ - -#ifdef WINE_NCURSES - -/* This is the console driver for systems that support the ncurses - interface. -*/ - -/* Actually, this should work for curses, as well. But there may be - individual functions that are unsupported in plain curses or other - variants. Those should be detected and special-cased by autoconf. -*/ - -/* When creating new drivers, you need to assign all the functions that - that driver supports into the driver struct. If it is a supplementary - driver, it should make sure to perserve the old values. -*/ - -#include "wine/debug.h" -#include "options.h" - -WINE_DEFAULT_DEBUG_CHANNEL(console); - -#undef ERR /* Use ncurses's err() */ -#ifdef HAVE_NCURSES_H -# include <ncurses.h> -#else -# ifdef HAVE_CURSES_H -# include <curses.h> -# endif -#endif - -SCREEN *ncurses_screen; - -static int get_color_pair(int fg_color, int bg_color); - -const char *color_names[] = {"null", "black", "blue", "green", - "cyan", "magenta", "brown", "red", "light gray", "dark gray", - "light blue", "light green", "light red", "light magenta", - "light cyan", "yellow", "white"}; - -void NCURSES_Start() -{ - /* This should be the root driver so we can ignore anything - already in the struct. */ - - driver.norefresh = FALSE; - - driver.init = NCURSES_Init; - driver.write = NCURSES_Write; - driver.close = NCURSES_Close; - driver.moveCursor = NCURSES_MoveCursor; - driver.getCursorPosition = NCURSES_GetCursorPosition; - driver.getCharacterAtCursor = NCURSES_GetCharacterAtCursor; - driver.clearScreen = NCURSES_ClearScreen; - driver.allocColor = NCURSES_AllocColor; -#ifdef HAVE_GETBKGD - driver.setBackgroundColor = NCURSES_SetBackgroundColor; -#endif -#ifdef HAVE_RESIZETERM - driver.notifyResizeScreen = NCURSES_NotifyResizeScreen; -#endif /* HAVE_RESIZETERM */ - - driver.checkForKeystroke = NCURSES_CheckForKeystroke; - driver.getKeystroke = NCURSES_GetKeystroke; - - driver.refresh = NCURSES_Refresh; -} - -void NCURSES_Init() -{ - char terminal_type[80]; - - PROFILE_GetWineIniString("console", "TerminalType", - "xterm", terminal_type, 79); - - ncurses_screen = newterm(terminal_type, driver.console_out, - driver.console_in); - set_term(ncurses_screen); - start_color(); - raw(); - noecho(); - nonl(); - intrflush(stdscr, FALSE); - keypad(stdscr, TRUE); - nodelay(stdscr, TRUE); -} - -void NCURSES_Write(char output, int fg, int bg, int attribute) -{ - char row, col; - int pair; - - if (!fg) - fg = COLOR_WHITE; /* Default */ - - if (!bg) - bg = COLOR_BLACK; /* Default */ - - pair = get_color_pair(fg, bg); - - if (waddch(stdscr, output | COLOR_PAIR(pair)) == ERR) - { - NCURSES_GetCursorPosition(&row, &col); - FIXME("NCURSES: waddch() failed at %d, %d.\n", row, col); - } -} - -void NCURSES_Close() -{ - endwin(); -} - -void NCURSES_GetKeystroke(char *scan, char *ascii) -{ - while (!NCURSES_CheckForKeystroke(scan, ascii)) - {} /* Wait until keystroke is detected */ - - /* When it is detected, we will already have the right value - in scan and ascii, but we need to take this keystroke - out of the buffer. */ - wgetch(stdscr); -} - -int NCURSES_CheckForKeystroke(char *scan, char *ascii) -{ - /* We don't currently support scan codes here */ - /* FIXME */ - int temp; - temp = wgetch(stdscr); - if (temp == ERR) - { - return FALSE; - } - else - { - ungetch(temp); /* Keystroke not removed from buffer */ - *ascii = (char) temp; - return TRUE; - } -} - -void NCURSES_MoveCursor(char row, char col) -{ - if (wmove(stdscr, row, col) == ERR) - FIXME("NCURSES: wmove() failed to %d, %d.\n", row, col); -} - -void NCURSES_GetCursorPosition(char *row, char *col) -{ - int trow, tcol; - - getyx(stdscr, trow, tcol); /* MACRO, no need to pass pointer */ - - *row = (char) trow; - *col = (char) tcol; -} - -void NCURSES_GetCharacterAtCursor(char *ch, int *fg_color, int - *bg_color, int *attribute) -{ - /* If any of the pointers are NULL, ignore them */ - /* We will eventually have to convert the color data */ - if (ch) - *ch = (char) winch(stdscr); - if (fg_color) - *fg_color = WINE_WHITE; - if (bg_color) - *bg_color = WINE_BLACK; - if (attribute) - *attribute = 0; -} - -void NCURSES_Refresh() -{ - wrefresh(stdscr); -} - -void NCURSES_ClearScreen() -{ - werase(stdscr); -} - -int NCURSES_AllocColor(int color) -{ - /* Currently support only internal colors */ - switch (color) - { - case WINE_BLACK: return COLOR_BLACK; - case WINE_WHITE: return COLOR_WHITE; - case WINE_RED: return COLOR_RED; - case WINE_GREEN: return COLOR_GREEN; - case WINE_YELLOW: return COLOR_YELLOW; - case WINE_BLUE: return COLOR_BLUE; - case WINE_MAGENTA: return COLOR_MAGENTA; - case WINE_CYAN: return COLOR_CYAN; - } - - FIXME("Unable to allocate color %d (%s)\n", color, - color_names[color]); - - /* Don't allocate a color... yet */ - return 0; -} - -void NCURSES_SetBackgroundColor(int fg, int bg) -{ - int pair; - - pair = get_color_pair(fg, bg); - - wbkgd(stdscr, COLOR_PAIR(pair)); -} - -#ifdef HAVE_GETBKGD -void NCURSES_GetBackgroundColor(int *fg, int *bg) -{ - chtype background; - short pair, sfg, sbg; - - background = getbkgd(stdscr); - - pair = (!A_CHARTEXT & background); - - pair_content(pair, &sfg, &sbg); - - *fg = sfg; - *bg = sbg; -} -#endif /* HAVE_GETBKGD */ - -#ifdef HAVE_RESIZETERM - -void NCURSES_NotifyResizeScreen(int x, int y) -{ - /* Note: This function gets called *after* another driver in the chain - calls ResizeScreen(). It is meant to resize the ncurses internal - data structures to know about the new window dimensions. */ - - TRACE("Terminal resized to y: %d, x: %d\n", y, x); - - resizeterm(y, x); -} - -#endif /* HAVE_RESIZETERM */ - -static int get_color_pair(int fg_color, int bg_color) -{ - /* ncurses internally uses "color pairs" in addition to the "pallet" */ - /* This isn't the best way to do this. Or even close */ - - static int current = 0; - static int fg[255]; /* 16 x 16 is enough */ - static int bg[255]; - int x; - - /* The first pair is hardwired into ncurses */ - fg[0] = COLOR_WHITE; - bg[0] = COLOR_BLACK; - - for (x = 0; x <= current; x++) - { - if ((fg_color == fg[x]) && (bg_color == bg[x])) - { - TRACE("Color pair: already allocated\n"); - return x; - } - } - - /* Need to allocate new color */ - current++; - fg[current] = fg_color; - bg[current] = bg_color; - TRACE("Color pair: allocated.\n"); - return init_pair(current, fg_color, bg_color); -} - -#endif /* WINE_NCURSES */ diff --git a/console/tty.c b/console/tty.c deleted file mode 100644 index 278d5f85fbf12cbbd9cdf5e8ce1409590bfa6ab8..0000000000000000000000000000000000000000 --- a/console/tty.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 1999 - Joseph Pranevich - * - * This is the console driver for TTY-based consoles, i.e. consoles - * without cursor placement, etc. It's also a pretty decent starting - * point for other drivers. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* When creating new drivers, you need to assign all the functions that - that driver supports into the driver struct. If it is a supplementary - driver, it should make sure to perserve the old values. */ - -#include "config.h" - -#include <stdio.h> - -#include "console.h" -#include "windef.h" -void TTY_Start() -{ - /* This should be the root driver so we can ignore anything - already in the struct. */ - - driver.norefresh = FALSE; - - driver.write = TTY_Write; - driver.getKeystroke = TTY_GetKeystroke; -} - -void TTY_Write(char output, int fg, int bg, int attribute) -{ - /* We can discard all extended information. */ - fprintf(driver.console_out, "%c", output); -} - -void TTY_GetKeystroke(char *scan, char *ch) -{ - /* All we have are character input things, nothing for extended */ - /* This is just the TTY driver, after all. We'll cope. */ - *ch = fgetc(driver.console_in); -} - - diff --git a/console/xterm.c b/console/xterm.c deleted file mode 100644 index d74d9caf20fd7494ba9131423462363860da9a4c..0000000000000000000000000000000000000000 --- a/console/xterm.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright 1999 - Joseph Pranevich - * - * This "driver" is designed to go on top of an existing driver - * to provide support for features only present if using an - * xterm or compatible program for your console output. - * Currently, it supports resizing and separating debug messages from - * program output. - * It does not currently support changing the title bar. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "config.h" -#include "wine/port.h" - -#include <stdlib.h> -#include <stdio.h> -#include <signal.h> -#include <sys/ioctl.h> -#include <fcntl.h> -#include <unistd.h> -#include <termios.h> -#ifdef HAVE_LIBUTIL_H -# include <libutil.h> -#endif -#ifdef HAVE_PTY_H -# include <pty.h> -#endif - -#include "console.h" -#include "options.h" -#include "wine/debug.h" - -WINE_DEFAULT_DEBUG_CHANNEL(console); - -char console_xterm_prog[80]; - -static BOOL wine_create_console(FILE **master, FILE **slave, pid_t *pid); - -/* The console -- I chose to keep the master and slave - * (UNIX) file descriptors around in case they are needed for - * ioctls later. The pid is needed to destroy the xterm on close - */ -typedef struct _XTERM_CONSOLE { - FILE *master; /* xterm side of pty */ - FILE *slave; /* wine side of pty */ - pid_t pid; /* xterm's pid, -1 if no xterm */ -} XTERM_CONSOLE; - -static XTERM_CONSOLE xterm_console; - -CONSOLE_device chain; -FILE *old_in, *old_out; - -void XTERM_Start(void) -{ - /* Here, this is a supplementary driver so we should remember to call - the chain. */ - chain.init = driver.init; - driver.init = XTERM_Init; - - chain.close = driver.close; - driver.close = XTERM_Close; - - chain.resizeScreen = driver.resizeScreen; - driver.resizeScreen = XTERM_ResizeScreen; - - /* Read in driver configuration */ - PROFILE_GetWineIniString("console", "XtermProg", - "xterm", console_xterm_prog, 79); - -} - -void XTERM_Init() -{ - wine_create_console(&xterm_console.master, &xterm_console.slave, - &xterm_console.pid); - - old_in = driver.console_in; - driver.console_in = xterm_console.slave; - - old_out = driver.console_out; - driver.console_out = xterm_console.slave; - - /* Then call the chain... */ - if (chain.init) - chain.init(); -} - -void XTERM_Close() -{ - /* Call the chain first... */ - if (chain.close) - chain.close(); - - driver.console_in = old_in; - driver.console_out = old_out; - - /* make sure a xterm exists to kill */ - if (xterm_console.pid != -1) { - kill(xterm_console.pid, SIGTERM); - } -} - -void XTERM_ResizeScreen(int x, int y) -{ - char temp[100]; - - /* Call the chain first, there shoudln't be any... */ - if (chain.resizeScreen) - chain.resizeScreen(x, y); - - sprintf(temp, "\x1b[8;%d;%dt", y, x); - CONSOLE_WriteRawString(temp); - - CONSOLE_NotifyResizeScreen(x, y); -} - - -static BOOL wine_create_console(FILE **master, FILE **slave, pid_t *pid) -{ - /* There is definately a bug in this routine that causes a lot - of garbage to be written to the screen, but I can't find it... - */ - struct termios term; - char buf[1024]; - char c = '\0'; - int status = 0; - int i; - int tmaster, tslave; - char xterm_resolution[10]; - - sprintf(xterm_resolution, "%dx%d", driver.x_res, - driver.y_res); - - if (tcgetattr(0, &term) < 0) return FALSE; - term.c_lflag |= ICANON; - term.c_lflag &= ~ECHO; - if (openpty(&tmaster, &tslave, NULL, &term, NULL) < 0) - return FALSE; - *master = fdopen(tmaster, "r+"); - *slave = fdopen(tslave, "r+"); - - if ((*pid=fork()) == 0) { - tcsetattr(fileno(*slave), TCSADRAIN, &term); - sprintf(buf, "-Sxx%d", fileno(*master)); - execlp(console_xterm_prog, console_xterm_prog, buf, "-fg", - "white", "-bg", "black", "-g", - xterm_resolution, NULL); - ERR("error creating xterm (file not found?)\n"); - exit(1); - } - - /* most xterms like to print their window ID when used with -S; - * read it and continue before the user has a chance... - * NOTE: this is the reason we started xterm with ECHO off, - * we'll turn it back on below - */ - - for (i=0; c!='\n'; (status=fread(&c, 1, 1, *slave)), i++) { - if (status == -1 && c == '\0') { - /* wait for xterm to be created */ - usleep(100); - } - if (i > 10000) { - WARN("can't read xterm WID\n"); - kill(*pid, SIGKILL); - return FALSE; - } - } - term.c_lflag |= ECHO; - tcsetattr(fileno(*master), TCSADRAIN, &term); - - return TRUE; -} diff --git a/dlls/winedos/Makefile.in b/dlls/winedos/Makefile.in index 963f707280d162836b60d4ad7bd4ebd6f606a0c7..168e76b13c54ee4c0f0d15c3db4a3c3c7804d161 100644 --- a/dlls/winedos/Makefile.in +++ b/dlls/winedos/Makefile.in @@ -4,7 +4,6 @@ SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = winedos.dll IMPORTS = user32.dll kernel32.dll ntdll.dll -EXTRALIBS = @CURSESLIBS@ @UTILLIBS@ C_SRCS = \ dosaspi.c \ @@ -26,15 +25,6 @@ C_SRCS = \ vga.c \ xms.c -EXTRA_OBJS = \ - $(TOPOBJDIR)/console/console.o - -SUBDIRS = \ - $(TOPOBJDIR)/console - @MAKE_DLL_RULES@ -$(EXTRA_OBJS): dummy - @cd `dirname $@` && $(MAKE) `basename $@` - ### Dependencies: diff --git a/dlls/winedos/int10.c b/dlls/winedos/int10.c index 3526c38f2a40c49c796be77eb3f91aeda5be6505..5cc56cfc9632943479e5da6d618fa2053f33d7bd 100644 --- a/dlls/winedos/int10.c +++ b/dlls/winedos/int10.c @@ -26,7 +26,6 @@ #include "miscemu.h" #include "vga.h" #include "wine/debug.h" -#include "console.h" #include "dosexe.h" WINE_DEFAULT_DEBUG_CHANNEL(int); diff --git a/dlls/winedos/int21.c b/dlls/winedos/int21.c index d6ff053ef2c46ccd2f4222b1eb2878eed1bb7d60..b4ea1c0e8d4d1658bfdc3bacbc5065ab0a84f700 100644 --- a/dlls/winedos/int21.c +++ b/dlls/winedos/int21.c @@ -31,7 +31,6 @@ #include "dosexe.h" #include "miscemu.h" #include "msdos.h" -#include "console.h" #include "file.h" #include "wine/debug.h" diff --git a/dlls/winedos/int29.c b/dlls/winedos/int29.c index 97dfedac3f08a43c42a8ab476d1822e8485311d2..4b9f7777768d459cb0973871af4e9ae8f4b3d3d3 100644 --- a/dlls/winedos/int29.c +++ b/dlls/winedos/int29.c @@ -22,7 +22,6 @@ #include "winnt.h" -#include "console.h" #include "miscemu.h" #include "dosexe.h" diff --git a/include/console.h b/include/console.h deleted file mode 100644 index 9c8589798ed89bbaa0bcd52ebd2a8e87748b4c56..0000000000000000000000000000000000000000 --- a/include/console.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Include file for definitions pertaining to Wine's text-console - * interface. - * - * Copyright 1998 - Joseph Pranevich - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __WINE_CONSOLE_H -#define __WINE_CONSOLE_H - -#ifndef __WINE_CONFIG_H -# error You must include config.h to use this header -#endif - -#include <stdio.h> - -/* Can we compile with curses/ncurses? */ -#if ( (defined(HAVE_LIBNCURSES) || defined(HAVE_LIBCURSES)) && \ - (defined(HAVE_CURSES_H) || defined(HAVE_NCURSES_H)) \ -) -# define WINE_NCURSES -#else -# undef WINE_NCURSES -#endif - -#define CONSOLE_DEFAULT_DRIVER "tty" - -typedef struct CONSOLE_DRIVER -{ - void (*init)(void); - void (*close)(void); - void (*write)(char, int, int, int); - void (*moveCursor)(char, char); - void (*getCursorPosition)(char *, char *); - void (*getCharacterAtCursor)(char *, int *, int *, int *); - void (*clearScreen)(void); - - /* Color-control functions */ - int (*allocColor)(int color); - void (*setBackgroundColor)(int fg, int bg); - void (*getBackgroundColor)(int *fg, int *bg); - - /* Keyboard Functions */ - int (*checkForKeystroke)(char *, char *); - void (*getKeystroke)(char *, char *); - - /* Windowing Functions */ - void (*resizeScreen)(int, int); - void (*notifyResizeScreen)(int, int); /* May be rethought later... */ - - /* Accelerator Functions (Screen) */ - void (*clearWindow)(char, char, char, char, int, int); - void (*scrollUpWindow)(char, char, char, char, char, int, int); - void (*scrollDownWindow)(char, char, char, char, char, int, int); - - /* Accelerator Functions (Keyboard) */ - char (*getCharacter)(void); - - /* Other functions */ - void (*refresh)(void); - - /* Other data */ - int norefresh; - FILE *console_out; - FILE *console_in; - int x_res; - int y_res; - -} CONSOLE_device; - -extern CONSOLE_device driver; /* Global driver struct */ - -/* Generic defines */ -void CONSOLE_Close(void); -void CONSOLE_Write(char out, int fg_color, int bg_color, int attribute); -void CONSOLE_MoveCursor(char row, char col); -void CONSOLE_ClearWindow(char, char, char, char, int, int); -void CONSOLE_ScrollUpWindow(char, char, char, char, char, int, int); -void CONSOLE_ScrollDownWindow(char, char, char, char, char, int, int); -int CONSOLE_CheckForKeystroke(char *, char*); -void CONSOLE_GetKeystroke(char *, char *); -void CONSOLE_GetCursorPosition(char *, char *); -void CONSOLE_GetCharacterAtCursor(char *, int *, int *, int *); -void CONSOLE_Refresh(void); -void CONSOLE_SetRefresh(int); -int CONSOLE_GetRefresh(void); -void CONSOLE_ClearScreen(void); -char CONSOLE_GetCharacter(void); -void CONSOLE_ResizeScreen(int, int); -void CONSOLE_NotifyResizeScreen(int, int); -void CONSOLE_WriteRawString(char *); -int CONSOLE_AllocColor(int); -void CONSOLE_SetBackgroundColor(int fg, int bg); -void CONSOLE_GetBackgroundColor(int *fg, int *bg); - -/* Generic Defines */ -void GENERIC_Start(void); -void GENERIC_ClearWindow(char, char, char, char, int, int); -void GENERIC_ScrollUpWindow(char, char, char, char, char, int, int); -void GENERIC_ScrollDownWindow(char, char, char, char, char, int, int); -char GENERIC_GetCharacter(void); - -/* TTY specific defines */ -void TTY_Write(char out, int fg_color, int bg_color, int attribute); -void TTY_Start(void); -void TTY_GetKeystroke(char *, char *); - -#ifdef WINE_NCURSES - -/* ncurses defines */ -void NCURSES_Write(char out, int fg_color, int bg_color, int attribute); -void NCURSES_Start(void); -void NCURSES_Init(void); -void NCURSES_Close(void); -int NCURSES_CheckForKeystroke(char *, char *); -void NCURSES_GetKeystroke(char *, char *); -void NCURSES_MoveCursor(char ,char); -void NCURSES_GetCursorPosition(char *, char *); -void NCURSES_GetCharacterAtCursor(char *, int *, int *, int *); -void NCURSES_Refresh(void); -void NCURSES_ClearScreen(void); -void NCURSES_NotifyResizeScreen(int x, int y); -int NCURSES_AllocColor(int); -void NCURSES_SetBackgroundColor(int fg, int bg); -void NCURSES_GetBackgroundColor(int *fg, int *bg); - -#endif /* WINE_NCURSES */ - -/* Xterm specific defines */ -void XTERM_Start(void); -void XTERM_Close(void); -void XTERM_Init(void); -void XTERM_ResizeScreen(int x, int y); - -/* Color defines */ -/* These will eventually be hex triples for dynamic allocation */ -/* Triplets added by A.C. and commented out until the support */ -/* code can be written into the console routines. */ -#define WINE_BLACK 1 /* 0x000000 */ -#define WINE_BLUE 2 /* 0x0000ff */ -#define WINE_GREEN 3 /* 0x008000 */ -#define WINE_CYAN 4 /* 0x00eeee */ -#define WINE_MAGENTA 5 /* 0xcd00cd */ -#define WINE_BROWN 6 /* 0xcd3333 */ -#define WINE_RED 7 /* 0xff0000 */ -#define WINE_LIGHT_GRAY 8 /* 0xc0c0c0 */ -#define WINE_DARK_GRAY 9 /* 0x808080 */ -#define WINE_LIGHT_BLUE 10 /* 0x98f5ff */ -#define WINE_LIGHT_GREEN 11 /* 0x00ff00 */ -#define WINE_LIGHT_RED 12 /* 0xee6363 */ -#define WINE_LIGHT_MAGENTA 13 /* 0xff00ff */ -#define WINE_LIGHT_CYAN 14 /* 0x00ffff */ -#define WINE_YELLOW 15 /* 0xffff00 */ -#define WINE_WHITE 16 /* 0xffffff */ - -#endif /* CONSOLE_H */