Changeset 3988 for neercs/trunk


Ignore:
Timestamp:
Nov 21, 2009, 1:06:46 PM (11 years ago)
Author:
Jean-Yves Lamoureux
Message:
  • Added ESC#8 private command, fixed EL and ED behaviours
File:
1 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/term.c

    r3978 r3988  
    134134    int x = 0, y = 0, save_x = 0, save_y = 0;
    135135
     136
     137    debug("ansi : import_term\n");
     138
    136139    width = caca_get_canvas_width(sc->cv);
    137140    height = caca_get_canvas_height(sc->cv);
     
    220223        else if (buffer[i] == '\033' && buffer[i + 1] == 'M')
    221224        {
    222             /* FIXME : not sure about the meaning of 'go up one line' and 'if 
     225            /* FIXME : not sure about the meaning of 'go up one line' and 'if
    223226               necessary' words. Implemented as a scroller only. */
    224227            for (j = bottom - 1; j > top; j--)
     
    385388            skip += 3;
    386389        }
    387 
     390        else if (buffer[i] == '\033' && buffer[i + 1] == '#')
     391        {
     392            debug("ansi private '#' sequence\n");
     393
     394            switch (buffer[i + 2])
     395            {
     396            case '8':          /* DECALN Fills the entire screen area with
     397                                   uppercase Es for screen focus and
     398                                   alignment. */
     399                for (j = 0; j < height; j++)
     400                {
     401                    for (k = 0; k < width; k++)
     402                    {
     403                        caca_put_char(sc->cv, k, j, 'E');
     404                    }
     405                }
     406                skip += 2;
     407                break;
     408
     409            default:
     410                debug("Unknow private sequence 'ESC#%c'\n", buffer[i + 2]);
     411                continue;
     412            }
     413
     414        }
    388415        /* Interpret escape commands, as per Standard ECMA-48 "Control
    389416           Functions for Coded Character Sets", 5.4. Control sequences. */
     
    473500                x = (argc > 1 && argv[1] > 0) ? argv[1] - 1 : 0;
    474501                y = (argc > 0 && argv[0] > 0) ? argv[0] - 1 : 0;
     502                debug("ansi CUP : Cursor at %dx%d\n", x, y);
    475503                break;
    476504            case 'J':          /* ED (0x4a) - Erase In Page */
     
    479507                if (!argc || argv[0] == 0)
    480508                {
    481                     caca_draw_line(sc->cv, x, y, width - 1, y, ' ');
    482                     caca_fill_box(sc->cv, 0, y + 1, width - 1, height - 1,
    483                                   ' ');
     509                    caca_draw_line(sc->cv, x, y, width, y, ' ');
     510                    caca_fill_box(sc->cv, 0, y + 1, width, height - 1, ' ');
    484511                }
    485512                else if (argv[0] == 1)
    486513                {
    487                     caca_fill_box(sc->cv, 0, 0, width - 1, y - 1, ' ');
     514                    caca_fill_box(sc->cv, 0, 0, width, y, ' ');
    488515                    caca_draw_line(sc->cv, 0, y, x, y, ' ');
    489516                }
     
    496523                break;
    497524            case 'K':          /* EL (0x4b) - Erase In Line */
     525                debug("ansi EL : cursor at %dx%d\n", x, y);
    498526                if (!argc || argv[0] == 0)
    499527                {
    500                     caca_draw_line(sc->cv, x, y, width - 1, y, ' ');
     528                    caca_draw_line(sc->cv, x, y, width, y, ' ');
    501529                }
    502530                else if (argv[0] == 1)
     
    506534                else if (argv[0] == 2)
    507535                {
    508                     caca_draw_line(sc->cv, 0, y, width - 1, y, ' ');
     536                    caca_draw_line(sc->cv, 0, y, width, y, ' ');
    509537                }
    510538                break;
     
    512540                {
    513541                    unsigned int nb_lines = argc ? argv[0] : 1;
    514                     debug("IL %d %d", argc, nb_lines);
    515542                    for (j = bottom - 1; j >= (unsigned int)y + nb_lines; j--)
    516543                    {
Note: See TracChangeset for help on using the changeset viewer.