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 | 112 +++++++++++++++++++++++++++++++++++++------------- 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, 99 insertions(+), 44 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,57 +151,56 @@ 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; } -/* 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; -} - void CONSOLE_ClearScreen() { + if (!console_initialized) + console_initialized = CONSOLE_Init(driver.driver_list); + if (driver.clearScreen) { driver.clearScreen(); @@ -189,6 +211,9 @@ void CONSOLE_ClearScreen() 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) @@ -199,6 +224,9 @@ char CONSOLE_GetCharacter() void CONSOLE_ResizeScreen(int x, int y) { + if (!console_initialized) + console_initialized = CONSOLE_Init(driver.driver_list); + if (driver.resizeScreen) driver.resizeScreen(x, y); } @@ -211,12 +239,18 @@ void CONSOLE_NotifyResizeScreen(int x, int 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 @@ -230,6 +264,26 @@ void CONSOLE_WriteRawString(char *str) 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) 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; } /*********************************************************************** -- 2.11.4.GIT