157 lines
3.6 KiB
C
157 lines
3.6 KiB
C
|
/* interface.c */
|
||
|
|
||
|
/* The primary purpose of this function is to provide CONSOLE_*
|
||
|
reotines that immediately call the appropiate 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. */
|
||
|
|
||
|
#include "windows.h"
|
||
|
#include "console.h"
|
||
|
#include "config.h"
|
||
|
|
||
|
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();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CONSOLE_Init()
|
||
|
{
|
||
|
/* Eventually, this will be a command-line choice */
|
||
|
#ifndef WINE_NCURSES
|
||
|
TTY_Start();
|
||
|
#else
|
||
|
NCURSES_Start();
|
||
|
#endif
|
||
|
GENERIC_Start();
|
||
|
|
||
|
if (driver.init)
|
||
|
driver.init();
|
||
|
}
|
||
|
|
||
|
void CONSOLE_Close()
|
||
|
{
|
||
|
if (driver.close)
|
||
|
driver.close();
|
||
|
}
|
||
|
|
||
|
void CONSOLE_MoveCursor(char row, char col)
|
||
|
{
|
||
|
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 (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 (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 (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 (driver.checkForKeystroke)
|
||
|
return driver.checkForKeystroke(scan, ascii);
|
||
|
else
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
void CONSOLE_GetKeystroke(char *scan, char *ascii)
|
||
|
{
|
||
|
if (driver.getKeystroke)
|
||
|
return driver.getKeystroke(scan, ascii);
|
||
|
}
|
||
|
|
||
|
void CONSOLE_GetCursorPosition(char *row, char *col)
|
||
|
{
|
||
|
if (driver.getCursorPosition)
|
||
|
return driver.getCursorPosition(row, col);
|
||
|
}
|
||
|
|
||
|
void CONSOLE_GetCharacterAtCursor(char *ch, int *fg, int *bg, int *a)
|
||
|
{
|
||
|
if (driver.getCharacterAtCursor)
|
||
|
return driver.getCharacterAtCursor(ch, fg, bg, a);
|
||
|
}
|
||
|
|
||
|
void CONSOLE_Refresh()
|
||
|
{
|
||
|
if (driver.refresh)
|
||
|
return driver.refresh();
|
||
|
}
|
||
|
|
||
|
/* 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 (driver.clearScreen)
|
||
|
return driver.clearScreen();
|
||
|
}
|
||
|
|
||
|
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... */
|
||
|
}
|