From ebc0e5e0a447996f982b66f29e691b519eaf499a Mon Sep 17 00:00:00 2001 From: Joseph Pranevich Date: Sun, 14 Feb 1999 11:15:47 +0000 Subject: [PATCH] Moved initialization until later. Also moved around code a bit to be consistant. --- console/generic.c | 1 + console/interface.c | 178 +++++++++++++++++++++++++++--------------- console/ncurses.c | 14 +++- console/tty.c | 1 + include/console.h | 3 +- include/options.h | 1 - loader/main.c | 4 - misc/main.c | 3 - windows/x11drv/main.c | 4 +- 9 files changed, 132 insertions(+), 77 deletions(-) diff --git a/console/generic.c b/console/generic.c index 8502b272c47..eb54d70c416 100644 --- a/console/generic.c +++ b/console/generic.c @@ -1,4 +1,5 @@ /* generic.c */ +/* 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 diff --git a/console/interface.c b/console/interface.c index 1cfb1a9e027..e1d8ed03ab6 100644 --- a/console/interface.c +++ b/console/interface.c @@ -16,17 +16,9 @@ static int pop_driver(char **, char **, int *); -void CONSOLE_Write(char out, int fg_color, int bg_color, int attribute) -{ - if (driver.write) - { - driver.write(out, fg_color, bg_color, attribute); - if (!driver.norefresh) - CONSOLE_Refresh(); - } -} +static int console_initialized = FALSE; -void CONSOLE_Init(char *drivers) +int CONSOLE_Init(char *drivers) { /* When this function is called drivers should be a string that consists of driver names followed by plus (+) signs @@ -62,6 +54,22 @@ void CONSOLE_Init(char *drivers) if (driver.init) driver.init(); + + /* 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(driver.driver_list); + + if (driver.write) + { + driver.write(out, fg_color, bg_color, attribute); + if (!driver.norefresh) + CONSOLE_Refresh(); + } } void CONSOLE_Close() @@ -72,6 +80,9 @@ void CONSOLE_Close() void CONSOLE_MoveCursor(char row, char col) { + if (!console_initialized) + console_initialized = CONSOLE_Init(driver.driver_list); + if (driver.moveCursor) { driver.moveCursor(row, col); @@ -83,6 +94,9 @@ void CONSOLE_MoveCursor(char row, char col) void CONSOLE_ClearWindow(char row1, char col1, char row2, char col2, int bg_color, int attribute) { + if (!console_initialized) + console_initialized = CONSOLE_Init(driver.driver_list); + if (driver.clearWindow) { driver.clearWindow(row1, col1, row2, col2, bg_color, attribute); @@ -94,6 +108,9 @@ void CONSOLE_ClearWindow(char row1, char col1, char row2, char col2, 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(driver.driver_list); + if (driver.scrollUpWindow) { driver.scrollUpWindow(row1, col1, row2, col2, lines, bg_color, @@ -106,6 +123,9 @@ void CONSOLE_ScrollUpWindow(char row1, char col1, char row2, char col2, 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(driver.driver_list); + if (driver.scrollDownWindow) { driver.scrollDownWindow(row1, col1, row2, col2, lines, bg_color, @@ -120,6 +140,9 @@ int CONSOLE_CheckForKeystroke(char *scan, char *ascii) 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(driver.driver_list); + if (driver.checkForKeystroke) return driver.checkForKeystroke(scan, ascii); else @@ -128,36 +151,119 @@ int CONSOLE_CheckForKeystroke(char *scan, char *ascii) void CONSOLE_GetKeystroke(char *scan, char *ascii) { + if (!console_initialized) + console_initialized = CONSOLE_Init(driver.driver_list); + if (driver.getKeystroke) driver.getKeystroke(scan, ascii); } void CONSOLE_GetCursorPosition(char *row, char *col) { + if (!console_initialized) + console_initialized = CONSOLE_Init(driver.driver_list); + 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(driver.driver_list); + if (driver.getCharacterAtCursor) driver.getCharacterAtCursor(ch, fg, bg, a); } void CONSOLE_Refresh() { + if (!console_initialized) + console_initialized = CONSOLE_Init(driver.driver_list); + if (driver.refresh) driver.refresh(); } int CONSOLE_AllocColor(int color) { + if (!console_initialized) + console_initialized = CONSOLE_Init(driver.driver_list); + if (driver.allocColor) return driver.allocColor(color); else return 0; } +void CONSOLE_ClearScreen() +{ + if (!console_initialized) + console_initialized = CONSOLE_Init(driver.driver_list); + + if (driver.clearScreen) + { + driver.clearScreen(); + if (!driver.norefresh) + CONSOLE_Refresh(); + } +} + +char CONSOLE_GetCharacter() +{ + if (!console_initialized) + console_initialized = CONSOLE_Init(driver.driver_list); + + /* 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(driver.driver_list); + + 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(driver.driver_list); + + if (driver.setBackgroundColor) + driver.setBackgroundColor(fg, bg); +} + +void CONSOLE_WriteRawString(char *str) +{ + if (!console_initialized) + console_initialized = CONSOLE_Init(driver.driver_list); + + /* 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) @@ -177,58 +283,6 @@ int CONSOLE_GetRefresh() return TRUE; } -void CONSOLE_ClearScreen() -{ - if (driver.clearScreen) - { - driver.clearScreen(); - if (!driver.norefresh) - CONSOLE_Refresh(); - } -} - -char CONSOLE_GetCharacter() -{ - /* 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 (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 (driver.setBackgroundColor) - driver.setBackgroundColor(fg, bg); -} - -void CONSOLE_WriteRawString(char *str) -{ - /* 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); -} /* Utility functions... */ diff --git a/console/ncurses.c b/console/ncurses.c index 868127d06ae..af1fafd76fb 100644 --- a/console/ncurses.c +++ b/console/ncurses.c @@ -1,4 +1,5 @@ /* ncurses.c */ +/* Copyright 1999 - Joseph Pranevich */ #include "config.h" #include "console.h" @@ -146,11 +147,16 @@ void NCURSES_GetCursorPosition(char *row, char *col) 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 */ - *ch = (char) winch(stdscr); - *fg_color = 0; - *bg_color = 0; - *attribute = 0; + 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() diff --git a/console/tty.c b/console/tty.c index 09ac061b9ae..2dc7feceb10 100644 --- a/console/tty.c +++ b/console/tty.c @@ -1,4 +1,5 @@ /* tty.c */ +/* 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 diff --git a/include/console.h b/include/console.h index da96d6fabb7..037c6f30d1f 100644 --- a/include/console.h +++ b/include/console.h @@ -60,6 +60,7 @@ typedef struct CONSOLE_DRIVER /* Other data */ int norefresh; + char *driver_list; FILE *console_out; FILE *console_in; @@ -68,7 +69,7 @@ typedef struct CONSOLE_DRIVER CONSOLE_device driver; /* Global driver struct */ /* Generic defines */ -void CONSOLE_Init(char *drivers); +int CONSOLE_Init(char *drivers); void CONSOLE_Close(); void CONSOLE_Write(char out, int fg_color, int bg_color, int attribute); void CONSOLE_MoveCursor(char row, char col); diff --git a/include/options.h b/include/options.h index 17cf62a7e7f..99b7c3c8c2f 100644 --- a/include/options.h +++ b/include/options.h @@ -73,7 +73,6 @@ struct options int perfectGraphics; /* Favor correctness over speed for graphics */ int noDGA; /* Disable XFree86 DGA extensions */ char * configFileName; /* Command line config file */ - char * consoleDrivers; /* Console driver list */ int screenDepth; }; diff --git a/loader/main.c b/loader/main.c index fe12ef68a84..fd32ab27af5 100644 --- a/loader/main.c +++ b/loader/main.c @@ -43,7 +43,6 @@ #include "debug.h" #include "psdrv.h" #include "server.h" -#include "console.h" int __winelib = 1; /* Winelib run-time flag */ @@ -86,9 +85,6 @@ BOOL32 MAIN_MainInit(void) /* registry initialisation */ SHELL_LoadRegistry(); - /* Set up text-mode stuff */ - CONSOLE_ResizeScreen(80, 25); - /* Read DOS config.sys */ if (!DOSCONF_ReadConfig()) return FALSE; diff --git a/misc/main.c b/misc/main.c index d6756b08c2a..0b61c3d3269 100644 --- a/misc/main.c +++ b/misc/main.c @@ -93,7 +93,6 @@ struct options Options = FALSE, /* Perfect graphics */ FALSE, /* No DGA */ NULL, /* Alternate config file name */ - NULL, /* Console driver list */ 0 /* screenDepth */ }; @@ -742,8 +741,6 @@ static void MAIN_ParseOptions( int *argc, char *argv[] ) #else /* X_DISPLAY_MISSING */ TTYDRV_MAIN_ParseOptions(argc,argv); #endif /* X_DISPLAY_MISSING */ - - CONSOLE_Init(Options.consoleDrivers); } /*********************************************************************** diff --git a/windows/x11drv/main.c b/windows/x11drv/main.c index 60f6eeb58d3..244e54eecc8 100644 --- a/windows/x11drv/main.c +++ b/windows/x11drv/main.c @@ -245,9 +245,9 @@ void X11DRV_MAIN_ParseOptions(int *argc, char *argv[]) if (X11DRV_MAIN_GetResource( db, ".nodga", &value)) Options.noDGA = TRUE; if (X11DRV_MAIN_GetResource( db, ".console", &value)) - Options.consoleDrivers = xstrdup((char *)value.addr); + driver.driver_list = xstrdup((char *)value.addr); else - Options.consoleDrivers = CONSOLE_DEFAULT_DRIVER; + driver.driver_list = CONSOLE_DEFAULT_DRIVER; } /***********************************************************************