| @@ -18,10 +18,17 @@ AC_ARG_ENABLE(slang, | |||
| [ --enable-slang slang graphics support (default enabled)]) | |||
| AC_ARG_ENABLE(ncurses, | |||
| [ --enable-ncurses ncurses graphics support (default disabled)]) | |||
| AC_ARG_ENABLE(conio, | |||
| [ --enable-conio DOS conio.h graphics support (default disabled)]) | |||
| USE_SLANG=false | |||
| USE_NCURSES=false | |||
| if test "${enable_ncurses}" = "yes"; then | |||
| USE_CONIO=false | |||
| if test "${enable_conio}" = "yes"; then | |||
| AC_CHECK_HEADER(conio.h,:,AC_MSG_ERROR([cannot find conio.h header])) | |||
| AC_DEFINE(USE_CONIO, 1, Define if the backend driver is conio.h) | |||
| USE_CONIO=: | |||
| elif test "${enable_ncurses}" = "yes"; then | |||
| AC_CHECK_HEADER(ncurses.h,:,AC_MSG_ERROR([cannot find ncurses headers])) | |||
| AC_CHECK_LIB(ncurses,initscr,:,AC_MSG_ERROR([cannot find ncurses library])) | |||
| AC_DEFINE(USE_NCURSES, 1, Define if the backend driver is ncurses) | |||
| @@ -28,8 +28,13 @@ | |||
| # include <curses.h> | |||
| #endif | |||
| #ifdef HAVE_INTTYPES_H | |||
| # include <inttypes.h> | |||
| #else | |||
| typedef unsigned char uint8_t; | |||
| #endif | |||
| #include <stdlib.h> | |||
| #include <inttypes.h> | |||
| #include "ee.h" | |||
| @@ -26,6 +26,10 @@ | |||
| # include <slang.h> | |||
| #elif USE_NCURSES | |||
| # include <curses.h> | |||
| #elif USE_CONIO | |||
| # include <conio.h> | |||
| #else | |||
| # error "no graphics library detected" | |||
| #endif | |||
| #include <stdlib.h> | |||
| @@ -37,6 +41,9 @@ | |||
| #include "ee.h" | |||
| static int _ee_delay; | |||
| #ifdef USE_CONIO | |||
| static struct text_info ti; | |||
| #endif | |||
| int ee_init(void) | |||
| { | |||
| @@ -97,8 +104,12 @@ int ee_init(void) | |||
| init_pair(EE_CYAN, COLOR_CYAN, COLOR_BLACK); | |||
| init_pair(EE_MAGENTA, COLOR_MAGENTA, COLOR_BLACK); | |||
| #else | |||
| /* Dummy driver */ | |||
| #elif USE_CONIO | |||
| _wscroll = 0; | |||
| _setcursortype(_NOCURSOR); | |||
| clrscr(); | |||
| gettextinfo(&ti); | |||
| //window(2, 2, 20, 20); | |||
| #endif | |||
| _ee_delay = 0; | |||
| @@ -117,8 +128,8 @@ int ee_get_width(void) | |||
| return SLtt_Screen_Cols; | |||
| #elif USE_NCURSES | |||
| return COLS; | |||
| #else | |||
| return 80; | |||
| #elif USE_CONIO | |||
| return ti.screenwidth; | |||
| #endif | |||
| } | |||
| @@ -129,10 +140,11 @@ int ee_get_height(void) | |||
| #elif USE_NCURSES | |||
| return LINES; | |||
| #else | |||
| return 25; | |||
| return ti.screenheight; | |||
| #endif | |||
| } | |||
| #ifndef USE_CONIO | |||
| static int64_t local_time(void) | |||
| { | |||
| struct timeval tv; | |||
| @@ -144,9 +156,11 @@ static int64_t local_time(void) | |||
| now += tv.tv_usec; | |||
| return now; | |||
| } | |||
| #endif | |||
| void ee_refresh(void) | |||
| { | |||
| #ifndef USE_CONIO | |||
| static int64_t local_clock = 0; | |||
| int64_t now; | |||
| @@ -160,15 +174,17 @@ void ee_refresh(void) | |||
| { | |||
| /* If we are late, we shouldn't display anything */ | |||
| } | |||
| #endif | |||
| #ifdef USE_SLANG | |||
| SLsmg_refresh(); | |||
| #elif USE_NCURSES | |||
| refresh(); | |||
| #else | |||
| /* Use dummy driver */ | |||
| #elif USE_CONIO | |||
| /* Do nothing? */ | |||
| #endif | |||
| #ifndef USE_CONIO | |||
| now = local_time(); | |||
| if(now < local_clock + _ee_delay - 10000) | |||
| @@ -177,6 +193,7 @@ void ee_refresh(void) | |||
| } | |||
| local_clock += _ee_delay; | |||
| #endif | |||
| } | |||
| void ee_end(void) | |||
| @@ -188,8 +205,11 @@ void ee_end(void) | |||
| #elif USE_NCURSES | |||
| curs_set(1); | |||
| endwin(); | |||
| #else | |||
| /* Use dummy driver */ | |||
| #elif USE_CONIO | |||
| _wscroll = 1; | |||
| ee_set_color(EE_WHITE); | |||
| ee_putstr(ee_get_width(), ee_get_height()-1, "\r\n"); | |||
| _setcursortype(_NORMALCURSOR); | |||
| #endif | |||
| } | |||
| @@ -26,6 +26,10 @@ | |||
| # include <slang.h> | |||
| #elif USE_NCURSES | |||
| # include <curses.h> | |||
| #elif USE_CONIO | |||
| # include <conio.h> | |||
| #else | |||
| # error "no graphics library detected" | |||
| #endif | |||
| #include <string.h> | |||
| @@ -34,6 +38,21 @@ | |||
| #include "ee.h" | |||
| static int ee_color = 0; | |||
| #ifdef USE_CONIO | |||
| static enum COLORS dos_colors[] = { | |||
| 0, | |||
| BLACK, | |||
| GREEN, | |||
| YELLOW, | |||
| WHITE, | |||
| RED, | |||
| DARKGRAY, | |||
| LIGHTGRAY, | |||
| BLUE, | |||
| CYAN, | |||
| MAGENTA | |||
| }; | |||
| #endif | |||
| void ee_set_color(int color) | |||
| { | |||
| @@ -42,8 +61,9 @@ void ee_set_color(int color) | |||
| SLsmg_set_color(color); | |||
| #elif USE_NCURSES | |||
| attrset(COLOR_PAIR(color)); | |||
| #else | |||
| /* Use dummy driver */ | |||
| #elif USE_CONIO | |||
| if(color >= 1 && color <= 10) | |||
| textcolor(dos_colors[color]); | |||
| #endif | |||
| } | |||
| @@ -60,8 +80,9 @@ void ee_putchar(int x, int y, char c) | |||
| #elif USE_NCURSES | |||
| move(y,x); | |||
| addch(c); | |||
| #else | |||
| /* Use dummy driver */ | |||
| #elif USE_CONIO | |||
| gotoxy(x+1,y+1); | |||
| putch(c); | |||
| #endif | |||
| } | |||
| @@ -73,15 +94,15 @@ void ee_putstr(int x, int y, char *s) | |||
| #elif USE_NCURSES | |||
| move(y,x); | |||
| addstr(s); | |||
| #else | |||
| /* Use dummy driver */ | |||
| #elif USE_CONIO | |||
| gotoxy(x+1,y+1); | |||
| cputs(s); | |||
| #endif | |||
| } | |||
| void ee_clear(void) | |||
| { | |||
| #if defined(USE_SLANG) || defined(USE_NCURSES) | |||
| /* We could use SLsmg_cls(), but drawing empty lines is much faster */ | |||
| /* We could use SLsmg_cls() etc., but drawing empty lines is much faster */ | |||
| int x = ee_get_width(), y = ee_get_height(); | |||
| char *empty_line = malloc((x + 1) * sizeof(char)); | |||
| @@ -94,8 +115,5 @@ void ee_clear(void) | |||
| } | |||
| free(empty_line); | |||
| #else | |||
| /* Use dummy driver */ | |||
| #endif | |||
| } | |||
| @@ -26,6 +26,10 @@ | |||
| # include <slang.h> | |||
| #elif USE_NCURSES | |||
| # include <curses.h> | |||
| #elif USE_CONIO | |||
| # include <conio.h> | |||
| #else | |||
| # error "no graphics library detected" | |||
| #endif | |||
| #include "ee.h" | |||
| @@ -44,8 +48,8 @@ char ee_get_key(void) | |||
| { | |||
| return key; | |||
| } | |||
| #else | |||
| return 0; | |||
| #elif USE_CONIO | |||
| return _conio_kbhit() ? getch() : 0; | |||
| #endif | |||
| @@ -28,7 +28,12 @@ | |||
| # include <curses.h> | |||
| #endif | |||
| #include <inttypes.h> | |||
| #ifdef HAVE_INTTYPES_H | |||
| # include <inttypes.h> | |||
| #else | |||
| typedef unsigned char uint8_t; | |||
| #endif | |||
| #include <stdlib.h> | |||
| #include "ee.h" | |||