+ 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: | |||
| 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 | |||
| 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. | |||
| AC_EGREP_CPP(foo,foo) | |||
| AC_ARG_ENABLE(slang, | |||
| [ --enable-slang slang graphics support (default enabled)]) | |||
| 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, | |||
| [ --enable-conio DOS conio.h graphics support (default disabled)]) | |||
| @@ -40,16 +40,16 @@ if test "${enable_conio}" = "yes"; then | |||
| AC_MSG_RESULT(no)]) | |||
| 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) | |||
| 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_LIB(slang,SLkp_init,:,AC_MSG_ERROR([cannot find slang library])) | |||
| AC_DEFINE(USE_SLANG, 1, Define if the backend driver is 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 | |||
| AC_MSG_ERROR([could not find any terminal graphics interface]) | |||
| fi | |||
| @@ -97,6 +97,10 @@ int caca_init(void) | |||
| SLtt_set_mouse_mode(1, 0); | |||
| 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) | |||
| mmask_t newmask; | |||
| @@ -39,6 +39,10 @@ | |||
| # error "no graphics library detected" | |||
| #endif | |||
| #ifdef HAVE_INTTYPES_H | |||
| # include <inttypes.h> | |||
| #endif | |||
| #include <stdio.h> /* BUFSIZ */ | |||
| #include <string.h> | |||
| #include <stdlib.h> | |||
| @@ -64,7 +68,7 @@ void caca_set_color(enum caca_color fgcolor, enum caca_color bgcolor) | |||
| _caca_fgcolor = fgcolor; | |||
| _caca_bgcolor = bgcolor; | |||
| #if defined(USE_SLANG) | |||
| SLsmg_set_color(fgcolor + 16 * bgcolor); | |||
| SLsmg_set_color((bgcolor + 16 * fgcolor) /*% 128*/); | |||
| #elif defined(USE_NCURSES) | |||
| attrset(_caca_attr[fgcolor + 16 * bgcolor]); | |||
| #elif defined(USE_CONIO) | |||
| @@ -134,7 +138,7 @@ void caca_putstr(int x, int y, const char *s) | |||
| #if defined(USE_SLANG) | |||
| SLsmg_gotorc(y, x); | |||
| SLsmg_write_string(s); | |||
| SLsmg_write_string((char *)(intptr_t)s); | |||
| #elif defined(USE_NCURSES) | |||
| move(y, x); | |||
| addstr(s); | |||
| @@ -198,6 +202,7 @@ int _caca_init_graphics(void) | |||
| /* See SLang ref., 5.4.4. */ | |||
| static char *slang_colors[16] = | |||
| { | |||
| /* Standard colours */ | |||
| "black", | |||
| "blue", | |||
| "green", | |||
| @@ -206,6 +211,7 @@ int _caca_init_graphics(void) | |||
| "magenta", | |||
| "brown", | |||
| "lightgray", | |||
| /* Bright colours */ | |||
| "gray", | |||
| "brightblue", | |||
| "brightgreen", | |||
| @@ -218,16 +224,20 @@ int _caca_init_graphics(void) | |||
| 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]); | |||
| } | |||
| /* Disable alt charset support so that we get all 256 colour pairs */ | |||
| SLtt_Has_Alt_Charset = 0; | |||
| #elif defined(USE_NCURSES) | |||
| static int curses_colors[] = | |||
| { | |||
| /* Standard curses colours */ | |||
| COLOR_BLACK, | |||
| COLOR_BLUE, | |||
| COLOR_GREEN, | |||
| @@ -252,6 +262,12 @@ int _caca_init_graphics(void) | |||
| /* Activate colour */ | |||
| 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; | |||
| for(bg = 0; bg < max; bg++) | |||
| @@ -271,7 +287,8 @@ int _caca_init_graphics(void) | |||
| /* Simple fg on bright bg */ | |||
| _caca_attr[fg + 16 * (bg + 8)] = A_BLINK | COLOR_PAIR(col); | |||
| /* 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); | |||
| } | |||
| } | |||