Ignore:
Timestamp:
Mar 6, 2006, 8:13:01 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Use 32 bit integers for the character array. No visible difference for now because we only do ASCII, but that will let us do Unicode later.
File:
1 edited

Legend:

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

    r534 r535  
    5757#   include <inttypes.h>
    5858#else
     59typedef unsigned int uint32_t;
    5960typedef unsigned char uint8_t;
    6061#endif
     
    880881        int x, y;
    881882        uint8_t *attr = kk->qq->attr;
    882         uint8_t *chars = kk->qq->chars;
     883        uint32_t *chars = kk->qq->chars;
    883884        for(y = 0; y < (int)kk->qq->height; y++)
    884885        {
     
    894895                {
    895896                    SLsmg_set_color(slang_assoc[*attr++]);
    896                     SLsmg_write_char(*chars++);
     897                    SLsmg_write_char(*chars++ & 0x7f);
    897898                }
    898899                else
     
    912913#else
    913914                SLsmg_set_color(*attr++);
    914                 SLsmg_write_char(*chars++);
     915                SLsmg_write_char(*chars++ & 0x7f);
    915916#endif
    916917            }
     
    925926        int x, y;
    926927        uint8_t *attr = kk->qq->attr;
    927         uint8_t *chars = kk->qq->chars;
     928        uint32_t *chars = kk->qq->chars;
    928929        for(y = 0; y < (int)kk->qq->height; y++)
    929930        {
     
    932933            {
    933934                attrset(kk->ncurses.attr[*attr++]);
    934                 addch(*chars++);
     935                addch(*chars++ & 0x7f);
    935936            }
    936937        }
     
    945946        char *screen = kk->conio.screen;
    946947        uint8_t *attr = kk->qq->attr;
    947         uint8_t *chars = kk->qq->chars;
     948        uint32_t *chars = kk->qq->chars;
    948949        for(n = kk->qq->height * kk->qq->width; n--; )
    949950        {
    950             *screen++ = *chars++;
     951            *screen++ = *chars++ & 0x7f;
    951952            *screen++ = *attr++;
    952953        }
     
    990991            for(x = 0; x < kk->qq->width; x += len)
    991992            {
     993                char buffer[BUFSIZ]; /* FIXME: use a smaller buffer */
     994                uint32_t *chars = kk->qq->chars + x + y * kk->qq->width;
    992995                uint8_t *attr = kk->qq->attr + x + y * kk->qq->width;
    993996
     
    995998
    996999                /* Skip spaces */
    997                 if(kk->qq->chars[x + y * kk->qq->width] == ' ')
     1000                if(chars[0] == ' ')
    9981001                    continue;
     1002
     1003                buffer[0] = chars[0] & 0x7f;
    9991004
    10001005                while(x + len < kk->qq->width
    10011006                       && (attr[len] & 0xf) == (attr[0] & 0xf))
     1007                {
     1008                    buffer[len] = chars[len] & 0x7f;
    10021009                    len++;
     1010                }
    10031011
    10041012                XSetForeground(kk->x11.dpy, kk->x11.gc, kk->x11.colors[attr[0] & 0xf]);
    1005                 XDrawString(kk->x11.dpy, kk->x11.pixmap, kk->x11.gc, x * kk->x11.font_width,
     1013                XDrawString(kk->x11.dpy, kk->x11.pixmap, kk->x11.gc,
     1014                            x * kk->x11.font_width,
    10061015                            (y + 1) * kk->x11.font_height - kk->x11.font_offset,
    1007                             (char*)(kk->qq->chars + x + y * kk->qq->width), len);
     1016                            buffer, len);
    10081017            }
    10091018        }
     
    10261035        for(i = 0; i < kk->qq->width * kk->qq->height; i++)
    10271036        {
    1028             kk->win32.buffer[i].Char.AsciiChar = kk->qq->chars[i];
     1037            kk->win32.buffer[i].Char.AsciiChar = kk->qq->chars[i] & 0x7f;
    10291038            kk->win32.buffer[i].Attributes =
    10301039                    win32_fg_palette[kk->qq->attr[i] & 0xf]
     
    10811090        {
    10821091            uint8_t *attr = kk->qq->attr + line * kk->qq->width;
    1083             unsigned char *chars = kk->qq->chars + line * kk->qq->width;
     1092            uint32_t *chars = kk->qq->chars + line * kk->qq->width;
    10841093
    10851094            for(x = 0; x < kk->gl.width; x += kk->gl.font_width)
    10861095            {
    1087                 if(chars[0] != ' ')
     1096                if(*chars != (uint32_t)' ')
    10881097                {
    1089                     glBindTexture(GL_TEXTURE_2D, kk->gl.id[chars[0]-32]);
     1098                    char ch = *chars & 0x7f;
     1099
     1100                    /* FIXME: check ch bounds */
     1101                    glBindTexture(GL_TEXTURE_2D, kk->gl.id[ch - 32]);
    10901102                    glColor4bv(gl_bgpal[attr[0] & 0xf]);
    10911103                    glBegin(GL_QUADS);
Note: See TracChangeset for help on using the changeset viewer.