+ Default to ncurses, not slang, because slang only has 128 colour pairs.
* src/caca.c:
+ Disable scrolling to avoid hashmap scrolling optimization code.
* src/graphics.c:
+ Swap fg and bg in the colour pair indexing, so that bg is always
right.
+ Disable alt charset support to exploit my patched slang.
tags/v0.99.beta14
| @@ -117,6 +117,11 @@ $Id$ | |||||
| o S-Lang: | o S-Lang: | ||||
| 256 character pairs are definable, but only 128 can be used. This is | |||||
| because slsmg.c's This_Color variable uses its 8th bit to indicate an | |||||
| alternate character set. Replacing a few 0x7F with 0xFF in sldisply.c | |||||
| works around the problem but gets rid of the alternate charset. | |||||
| o MS-DOS: all bright colours, bright backgrounds, and bright combinations | o MS-DOS: all bright colours, bright backgrounds, and bright combinations | ||||
| work using <conio.h>. No need to kludge anything. | work using <conio.h>. No need to kludge anything. | ||||
| @@ -17,10 +17,10 @@ dnl AC_PROG_EGREP only exists in autoconf 2.54+, so we use AC_EGREP_CPP right | |||||
| dnl now otherwise it might be set in an obscure if statement. | dnl now otherwise it might be set in an obscure if statement. | ||||
| AC_EGREP_CPP(foo,foo) | AC_EGREP_CPP(foo,foo) | ||||
| AC_ARG_ENABLE(slang, | |||||
| [ --enable-slang slang graphics support (default enabled)]) | |||||
| AC_ARG_ENABLE(ncurses, | AC_ARG_ENABLE(ncurses, | ||||
| [ --enable-ncurses ncurses graphics support (default disabled)]) | |||||
| [ --enable-ncurses ncurses graphics support (default enabled)]) | |||||
| AC_ARG_ENABLE(slang, | |||||
| [ --enable-slang slang graphics support (default disabled)]) | |||||
| AC_ARG_ENABLE(conio, | AC_ARG_ENABLE(conio, | ||||
| [ --enable-conio DOS conio.h graphics support (default disabled)]) | [ --enable-conio DOS conio.h graphics support (default disabled)]) | ||||
| @@ -40,16 +40,16 @@ if test "${enable_conio}" = "yes"; then | |||||
| AC_MSG_RESULT(no)]) | AC_MSG_RESULT(no)]) | ||||
| AC_DEFINE(USE_CONIO, 1, Define if the backend driver is conio.h) | AC_DEFINE(USE_CONIO, 1, Define if the backend driver is conio.h) | ||||
| USE_CONIO=: | 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) | |||||
| USE_NCURSES=: | |||||
| elif test "${enable_slang}" != "no"; then | |||||
| elif test "${enable_slang}" = "yes"; then | |||||
| AC_CHECK_HEADER(slang.h,:,AC_MSG_ERROR([cannot find slang headers])) | AC_CHECK_HEADER(slang.h,:,AC_MSG_ERROR([cannot find slang headers])) | ||||
| AC_CHECK_LIB(slang,SLkp_init,:,AC_MSG_ERROR([cannot find slang library])) | AC_CHECK_LIB(slang,SLkp_init,:,AC_MSG_ERROR([cannot find slang library])) | ||||
| AC_DEFINE(USE_SLANG, 1, Define if the backend driver is slang) | AC_DEFINE(USE_SLANG, 1, Define if the backend driver is slang) | ||||
| USE_SLANG=: | USE_SLANG=: | ||||
| elif test "${enable_ncurses}" != "no"; 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) | |||||
| USE_NCURSES=: | |||||
| else | else | ||||
| AC_MSG_ERROR([could not find any terminal graphics interface]) | AC_MSG_ERROR([could not find any terminal graphics interface]) | ||||
| fi | fi | ||||
| @@ -97,6 +97,10 @@ int caca_init(void) | |||||
| SLtt_set_mouse_mode(1, 0); | SLtt_set_mouse_mode(1, 0); | ||||
| SLsmg_refresh(); | SLsmg_refresh(); | ||||
| /* Disable scrolling so that hashmap scrolling optimization code | |||||
| * does not cause ugly refreshes due to slow terminals */ | |||||
| SLtt_Term_Cannot_Scroll = 1; | |||||
| #elif defined(USE_NCURSES) | #elif defined(USE_NCURSES) | ||||
| mmask_t newmask; | mmask_t newmask; | ||||
| @@ -39,6 +39,10 @@ | |||||
| # error "no graphics library detected" | # error "no graphics library detected" | ||||
| #endif | #endif | ||||
| #ifdef HAVE_INTTYPES_H | |||||
| # include <inttypes.h> | |||||
| #endif | |||||
| #include <stdio.h> /* BUFSIZ */ | #include <stdio.h> /* BUFSIZ */ | ||||
| #include <string.h> | #include <string.h> | ||||
| #include <stdlib.h> | #include <stdlib.h> | ||||
| @@ -64,7 +68,7 @@ void caca_set_color(enum caca_color fgcolor, enum caca_color bgcolor) | |||||
| _caca_fgcolor = fgcolor; | _caca_fgcolor = fgcolor; | ||||
| _caca_bgcolor = bgcolor; | _caca_bgcolor = bgcolor; | ||||
| #if defined(USE_SLANG) | #if defined(USE_SLANG) | ||||
| SLsmg_set_color(fgcolor + 16 * bgcolor); | |||||
| SLsmg_set_color((bgcolor + 16 * fgcolor) /*% 128*/); | |||||
| #elif defined(USE_NCURSES) | #elif defined(USE_NCURSES) | ||||
| attrset(_caca_attr[fgcolor + 16 * bgcolor]); | attrset(_caca_attr[fgcolor + 16 * bgcolor]); | ||||
| #elif defined(USE_CONIO) | #elif defined(USE_CONIO) | ||||
| @@ -134,7 +138,7 @@ void caca_putstr(int x, int y, const char *s) | |||||
| #if defined(USE_SLANG) | #if defined(USE_SLANG) | ||||
| SLsmg_gotorc(y, x); | SLsmg_gotorc(y, x); | ||||
| SLsmg_write_string(s); | |||||
| SLsmg_write_string((char *)(intptr_t)s); | |||||
| #elif defined(USE_NCURSES) | #elif defined(USE_NCURSES) | ||||
| move(y, x); | move(y, x); | ||||
| addstr(s); | addstr(s); | ||||
| @@ -198,6 +202,7 @@ int _caca_init_graphics(void) | |||||
| /* See SLang ref., 5.4.4. */ | /* See SLang ref., 5.4.4. */ | ||||
| static char *slang_colors[16] = | static char *slang_colors[16] = | ||||
| { | { | ||||
| /* Standard colours */ | |||||
| "black", | "black", | ||||
| "blue", | "blue", | ||||
| "green", | "green", | ||||
| @@ -206,6 +211,7 @@ int _caca_init_graphics(void) | |||||
| "magenta", | "magenta", | ||||
| "brown", | "brown", | ||||
| "lightgray", | "lightgray", | ||||
| /* Bright colours */ | |||||
| "gray", | "gray", | ||||
| "brightblue", | "brightblue", | ||||
| "brightgreen", | "brightgreen", | ||||
| @@ -218,16 +224,20 @@ int _caca_init_graphics(void) | |||||
| int fg, bg; | int fg, bg; | ||||
| for(bg = 0; bg < 16; bg++) | |||||
| for(fg = 0; fg < 16; fg++) | |||||
| for(fg = 0; fg < 16; fg++) | |||||
| for(bg = 0; bg < 16; bg++) | |||||
| { | { | ||||
| int i = fg + 16 * bg; | |||||
| int i = bg + 16 * fg; | |||||
| SLtt_set_color(i, NULL, slang_colors[fg], slang_colors[bg]); | SLtt_set_color(i, NULL, slang_colors[fg], slang_colors[bg]); | ||||
| } | } | ||||
| /* Disable alt charset support so that we get all 256 colour pairs */ | |||||
| SLtt_Has_Alt_Charset = 0; | |||||
| #elif defined(USE_NCURSES) | #elif defined(USE_NCURSES) | ||||
| static int curses_colors[] = | static int curses_colors[] = | ||||
| { | { | ||||
| /* Standard curses colours */ | |||||
| COLOR_BLACK, | COLOR_BLACK, | ||||
| COLOR_BLUE, | COLOR_BLUE, | ||||
| COLOR_GREEN, | COLOR_GREEN, | ||||
| @@ -252,6 +262,12 @@ int _caca_init_graphics(void) | |||||
| /* Activate colour */ | /* Activate colour */ | ||||
| start_color(); | start_color(); | ||||
| /* If COLORS == 16, it means the terminal supports full bright colours | |||||
| * using setab and setaf (will use \e[90m \e[91m etc. for colours >= 8), | |||||
| * we can build 16*16 colour pairs. | |||||
| * If COLORS == 8, it means the terminal does not know about bright | |||||
| * colours and we need to get them through A_BOLD and A_BLINK (\e[1m | |||||
| * and \e[5m). We can only build 8*8 colour pairs. */ | |||||
| max = COLORS >= 16 ? 16 : 8; | max = COLORS >= 16 ? 16 : 8; | ||||
| for(bg = 0; bg < max; bg++) | for(bg = 0; bg < max; bg++) | ||||
| @@ -271,7 +287,8 @@ int _caca_init_graphics(void) | |||||
| /* Simple fg on bright bg */ | /* Simple fg on bright bg */ | ||||
| _caca_attr[fg + 16 * (bg + 8)] = A_BLINK | COLOR_PAIR(col); | _caca_attr[fg + 16 * (bg + 8)] = A_BLINK | COLOR_PAIR(col); | ||||
| /* Bright fg on bright bg */ | /* Bright fg on bright bg */ | ||||
| _caca_attr[fg + 8 + 16 * (bg + 8)] = A_BLINK | A_BOLD | COLOR_PAIR(col); | |||||
| _caca_attr[fg + 8 + 16 * (bg + 8)] = A_BLINK | A_BOLD | |||||
| | COLOR_PAIR(col); | |||||
| } | } | ||||
| } | } | ||||