Ignore:
Timestamp:
Apr 25, 2006, 7:43:16 PM (15 years ago)
Author:
Sam Hocevar
Message:
  • A few fixes in the ANSI interpreter.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/cucul/import.c

    r879 r880  
    197197
    198198#define IS_ALPHA(x) (x>='A' && x<='z')
     199#define END_TUP 0x1337
    199200unsigned char _get_ansi_command(unsigned char const *buffer, int size);
    200201int _parse_tuple(unsigned int *ret, unsigned char const *buffer, int size);
    201 void _manage_modifiers(char c, int *fg, int *bg, int *old_fg, int *old_bg);
     202void _manage_modifiers(char c, int *fg, int *bg, int *save_fg, int *save_bg);
    202203
    203204static cucul_canvas_t *import_ansi(void const *data, unsigned int size)
     
    212213    int save_x = 0, save_y = 0;
    213214    unsigned int j, add = 0;
    214     int fg, bg, old_fg, old_bg;
    215 
    216     fg = old_fg = CUCUL_COLOR_LIGHTGRAY;
    217     bg = old_bg = CUCUL_COLOR_BLACK;
     215    int fg, bg, save_fg, save_bg;
     216
     217    fg = save_fg = CUCUL_COLOR_LIGHTGRAY;
     218    bg = save_bg = CUCUL_COLOR_BLACK;
    218219
    219220    cv = cucul_create_canvas(width, height);
     
    230231            count = 0;
    231232
    232             while(tuple[count] != 0x1337)
     233            while(tuple[count] != END_TUP)
    233234                count++;  /* Gruik */
    234235
     
    237238            case 'f':
    238239            case 'H':
    239                 if(tuple[0] != 0x1337)
     240                if(tuple[0] != END_TUP)
    240241                {
    241                     x = tuple[0];
    242                     if(tuple[1] != 0x1337)
    243                         y = tuple[1];
     242                    y = tuple[0] - 1;
     243                    x = tuple[1] == END_TUP ? 0 : tuple[1] - 1;
    244244                }
    245245                else
    246246                {
     247                    y = 0;
    247248                    x = 0;
     249                }
     250                break;
     251            case 'A':
     252                y -= tuple[0] == END_TUP ? 1 : tuple[0];
     253                if(y < 0)
    248254                    y = 0;
    249                 }
    250                 break;
    251             case 'A':
    252                 if(tuple[0] == 0x1337)
    253                     y -= 1;
    254                 else
    255                     y -= tuple[0];
    256                 if(y < 0) y = 0;
    257255                break;
    258256            case 'B':
    259                 if(tuple[0] == 0x1337)
    260                     y++;
    261                 else
    262                     y += tuple[0];
     257                y += tuple[0] == END_TUP ? 1 : tuple[0];
    263258                break;
    264259            case 'C':
    265                 if(tuple[0] == 0x1337)
    266                     x++;
    267                 else
    268                     x += tuple[0];
     260                x += tuple[0] == END_TUP ? 1 : tuple[0];
    269261                break;
    270262            case 'D':
    271                 if(tuple[0] == 0x1337)
    272                     x--;
    273                 else
    274                     x -= tuple[0];
    275                 if(x < 0) x = 0;
     263                x -= tuple[0] == END_TUP ? 1 : tuple[0];
     264                if(x < 0)
     265                    x = 0;
    276266                break;
    277267            case 's':
     
    295285            case 'm':
    296286                for(j = 0; j < count; j++)
    297                     _manage_modifiers(tuple[j], &fg, &bg, &old_fg, &old_bg);
     287                    _manage_modifiers(tuple[j], &fg, &bg, &save_fg, &save_bg);
    298288                cucul_set_color(cv, fg, bg);
    299289                break;
     
    366356    unsigned char nbr[1024];
    367357
    368     ret[0] = 0x1337;
     358    ret[0] = END_TUP;
    369359
    370360    for(i = 0; i < size; i++)
     
    377367                t++;
    378368            }
    379             ret[t] = 0x1337;
     369            ret[t] = END_TUP;
    380370            j = 0;
    381371            return i;
     
    392382            ret[t] = atoi((char*)nbr);
    393383            t++;
    394             ret[t] = 0x1337;
     384            ret[t] = END_TUP;
    395385            j = 0;
    396386        }
     
    401391
    402392
    403 void _manage_modifiers(char c, int *fg, int *bg, int *old_fg, int *old_bg)
     393void _manage_modifiers(char c, int *fg, int *bg, int *save_fg, int *save_bg)
    404394{
    405395    switch(c)
     
    420410        break;
    421411    case 8: // invisible
    422         *old_fg = *fg;
    423         *old_bg = *bg;
     412        *save_fg = *fg;
     413        *save_bg = *bg;
    424414        *fg = CUCUL_COLOR_TRANSPARENT;
    425415        *bg = CUCUL_COLOR_TRANSPARENT;
    426416        break;
    427417    case 28: // not invisible
    428         *fg = *old_fg;
    429         *bg = *old_bg;
     418        *fg = *save_fg;
     419        *bg = *save_bg;
    430420        break;
    431421    case 30: *fg = CUCUL_COLOR_BLACK; break;
Note: See TracChangeset for help on using the changeset viewer.