Ignore:
Timestamp:
Nov 27, 2003, 10:56:30 PM (19 years ago)
Author:
Sam Hocevar
Message:
  • NOTES: + Added setab/setaf quotes from the XTerm terminfo. + Proposed a workaround for bright colours on any terminal.
  • src/caca.c: + 16 colour support for ncurses and conio.
  • src/graphics.c: + Ported to 16 colour support. + Added a missing <stdio.h> for BUFSIZ. + Disabled vsnprintf under DOS (only vsprintf exists).
  • examples/: + Don't abort if the caca.txt sprite was not found. + Ported to 16 colour support.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/src/caca.c

    r213 r226  
    6262#if defined(USE_NCURSES)
    6363static mmask_t oldmask;
    64 int _caca_attr[16];
     64int _caca_attr[16*16];
    6565#endif
    6666
     
    7373{
    7474#if defined(USE_SLANG)
     75    /* See SLang ref., 5.4.4. */
    7576    static char *slang_colors[16] =
    7677    {
     
    9394    };
    9495
    95     int i;
     96    int fg, bg;
    9697
    9798    /* Initialize slang library */
     
    121122    SLsmg_refresh();
    122123
    123     for(i = 0; i < 16; i++)
    124         SLtt_set_color(i + 1, NULL, slang_colors[i], "black");
    125 
    126 #elif defined(USE_NCURSES)
    127     int i;
     124    for(bg = 0; bg < 16; bg++)
     125        for(fg = 0; fg < 16; fg++)
     126        {
     127            int i = fg + 16 * bg;
     128            SLtt_set_color(i, NULL, slang_colors[fg], slang_colors[bg]);
     129        }
     130
     131#elif defined(USE_NCURSES)
     132    static int curses_colors[] =
     133    {
     134        COLOR_BLACK,
     135        COLOR_BLUE,
     136        COLOR_GREEN,
     137        COLOR_CYAN,
     138        COLOR_RED,
     139        COLOR_MAGENTA,
     140        COLOR_YELLOW,
     141        COLOR_WHITE,
     142        /* Extra values for xterm-16color */
     143        COLOR_BLACK + 8,
     144        COLOR_BLUE + 8,
     145        COLOR_GREEN + 8,
     146        COLOR_CYAN + 8,
     147        COLOR_RED + 8,
     148        COLOR_MAGENTA + 8,
     149        COLOR_YELLOW + 8,
     150        COLOR_WHITE + 8
     151    };
     152
     153    int fg, bg, max;
    128154    mmask_t newmask;
    129155
     
    136162    curs_set(0);
    137163
     164    /* Activate mouse */
    138165    newmask = ALL_MOUSE_EVENTS;
    139166    mousemask(newmask, &oldmask);
    140167
     168    /* Activate colour */
    141169    start_color();
    142170
    143     init_pair(1 + CACA_COLOR_BLACK,        COLOR_BLACK,   COLOR_BLACK);
    144     init_pair(1 + CACA_COLOR_BLUE,         COLOR_BLUE,    COLOR_BLACK);
    145     init_pair(1 + CACA_COLOR_GREEN,        COLOR_GREEN,   COLOR_BLACK);
    146     init_pair(1 + CACA_COLOR_CYAN,         COLOR_CYAN,    COLOR_BLACK);
    147     init_pair(1 + CACA_COLOR_RED,          COLOR_RED,     COLOR_BLACK);
    148     init_pair(1 + CACA_COLOR_MAGENTA,      COLOR_MAGENTA, COLOR_BLACK);
    149     init_pair(1 + CACA_COLOR_BROWN,        COLOR_YELLOW,  COLOR_BLACK);
    150     init_pair(1 + CACA_COLOR_LIGHTGRAY,    COLOR_WHITE,   COLOR_BLACK);
    151     init_pair(1 + CACA_COLOR_DARKGRAY,     COLOR_BLACK,   COLOR_BLACK);
    152     init_pair(1 + CACA_COLOR_LIGHTBLUE,    COLOR_BLUE,    COLOR_BLACK);
    153     init_pair(1 + CACA_COLOR_LIGHTGREEN,   COLOR_GREEN,   COLOR_BLACK);
    154     init_pair(1 + CACA_COLOR_LIGHTCYAN,    COLOR_CYAN,    COLOR_BLACK);
    155     init_pair(1 + CACA_COLOR_LIGHTRED,     COLOR_RED,     COLOR_BLACK);
    156     init_pair(1 + CACA_COLOR_LIGHTMAGENTA, COLOR_MAGENTA, COLOR_BLACK);
    157     init_pair(1 + CACA_COLOR_YELLOW,       COLOR_YELLOW,  COLOR_BLACK);
    158     init_pair(1 + CACA_COLOR_WHITE,        COLOR_WHITE,   COLOR_BLACK);
    159 
    160     for(i = 0; i < 8; i++)
    161     {
    162         _caca_attr[i] = COLOR_PAIR(1 + i);
    163         _caca_attr[i + 8] = A_BOLD | COLOR_PAIR(1 + i);
    164     }
     171    max = COLORS >= 16 ? 16 : 8;
     172
     173    for(bg = 0; bg < max; bg++)
     174        for(fg = 0; fg < max; fg++)
     175        {
     176            /* Use ((max + 7 - fg) % max) instead of fg so that colour 0
     177             * is light gray on black, since some terminals don't like
     178             * this colour pair to be redefined. */
     179            int col = ((max + 7 - fg) % max) + max * bg;
     180            init_pair(col, curses_colors[fg], curses_colors[bg]);
     181            _caca_attr[fg + 16 * bg] = COLOR_PAIR(col);
     182
     183            if(max == 8)
     184            {
     185                /* Bright fg on simple bg */
     186                _caca_attr[fg + 8 + 16 * bg] = A_BOLD | COLOR_PAIR(col);
     187                /* Simple fg on bright bg */
     188                _caca_attr[fg + 16 * (bg + 8)] = A_BLINK | COLOR_PAIR(col);
     189                /* Bright fg on bright bg */
     190                _caca_attr[fg + 8 + 16 * (bg + 8)] = A_BLINK | A_BOLD | COLOR_PAIR(col);
     191            }
     192        }
    165193
    166194#elif defined(USE_CONIO)
Note: See TracChangeset for help on using the changeset viewer.