Changeset 4076 for neercs


Ignore:
Timestamp:
Nov 30, 2009, 12:06:45 PM (10 years ago)
Author:
Jean-Yves Lamoureux
Message:
  • Moved ANSI duplets (\x0bN) to handle_duplet()
File:
1 edited

Legend:

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

    r4075 r4076  
    1818#include <caca.h>
    1919#include "neercs.h"
     20
    2021
    2122/* DEC ACS with common extensions */
     
    112113                            unsigned int, unsigned int const *);
    113114
    114 static int handle_single_char(unsigned char c, int *x, int *y,
     115inline int handle_single_char(unsigned char c, int *x, int *y,
    115116                              struct screen_list *screen_list,
    116117                              struct screen *sc);
    117 
    118 static int handle_single_char(unsigned char c, int *x, int *y,
     118inline int handle_duplet(unsigned char const *buffer, struct screen *sc,
     119                         unsigned int *skip, int top, int bottom, int width, int height);
     120
     121
     122inline int handle_single_char(unsigned char c, int *x, int *y,
    119123                              struct screen_list *screen_list,
    120124                              struct screen *sc)
     
    172176    }
    173177    return 0;
    174    
    175178}
     179
     180inline int handle_duplet(unsigned char const *buffer, struct screen *sc, unsigned int *skip,
     181                  int top, int bottom, int width, int height)
     182{
     183    int i = 0, j, k;
     184    unsigned int dummy=0;
     185   
     186    /* Single Shift Select of G2 Character Set (SS2: 0x8e): affects next
     187     character only */
     188    if (buffer[i] == '\033' && buffer[i + 1] == 'N')
     189    {
     190        sc->conv_state.ss = 2;
     191        *skip += 1;
     192    }
     193    /* Reverse Index (RI) go up one line, reverse scroll if necessary */
     194    else if (buffer[i] == '\033' && buffer[i + 1] == 'M')
     195    {
     196        /* FIXME : not sure about the meaning of 'go up one line' and 'if
     197         necessary' words. Implemented as a scroller only. */
     198        for (j = bottom - 1; j > top; j--)
     199        {
     200            for (k = 0; k < width; k++)
     201            {
     202                caca_put_char(sc->cv, k, j,
     203                              caca_get_char(sc->cv, k, j - 1));
     204                caca_put_attr(sc->cv, k, j,
     205                              caca_get_attr(sc->cv, k, j - 1));
     206            }
     207        }
     208        caca_draw_line(sc->cv, 0, top - 1, width - 1, top - 1, ' ');
     209        *skip += 1;
     210    }
     211   
     212    /* Single Shift Select of G3 Character Set (SS2: 0x8f): affects next
     213     character only */
     214    else if (buffer[i] == '\033' && buffer[i + 1] == 'O')
     215    {
     216        sc->conv_state.ss = 3;
     217        *skip += 1;
     218    }
     219   
     220    /* LOCKING-SHIFT TWO (LS2), ISO 2022, ECMA-48 (1986), ISO 6429 : 1988 */
     221    else if (buffer[i] == '\033' && buffer[i + 1] == 'n')
     222    {
     223        sc->conv_state.glr[0] = 2;
     224        *skip += 1;
     225    }
     226   
     227    /* LOCKING-SHIFT THREE (LS3) ISO 2022, ECMA-48 (1986), ISO 6429 : 1988
     228     */
     229    else if (buffer[i] == '\033' && buffer[i + 1] == 'o')
     230    {
     231        sc->conv_state.glr[0] = 3;
     232        *skip += 1;
     233    }
     234   
     235    /* RESET TO INITIAL STATE (RIS), ECMA-48 (1986), ISO 6429 : 1988 */
     236    else if (buffer[i] == '\033' && buffer[i + 1] == 'c')
     237    {
     238        sc->dfg = CACA_DEFAULT;
     239        sc->dbg = CACA_DEFAULT;
     240       
     241        caca_set_color_ansi(sc->cv, sc->dfg, sc->dbg);
     242        sc->clearattr = caca_get_attr(sc->cv, -1, -1);
     243        ansi_parse_grcm(sc, 1, &dummy);
     244       
     245        reset_conv_state(sc);
     246        *skip += 1;
     247    }
     248   
     249    /* Coding Method Delimiter (CMD), ECMA-48 (1991), ISO/IEC 6429:1992
     250     (ISO IR 189) */
     251    else if (buffer[i] == '\033' && buffer[i + 1] == 'd')
     252    {
     253        reset_conv_state(sc);
     254        *skip += 1;
     255    }
     256    else
     257    {
     258        return 1;   
     259    }
     260
     261    return 0;
     262}
     263
    176264
    177265long int import_term(struct screen_list *screen_list, struct screen *sc,
     
    226314        else if (buffer[i] == '\033' && i + 2 >= size)
    227315            break;
    228        
    229         /* Single Shift Select of G2 Character Set (SS2: 0x8e): affects next
    230          character only */
    231         else if (buffer[i] == '\033' && buffer[i + 1] == 'N')
    232         {
    233             sc->conv_state.ss = 2;
    234             skip += 1;
    235         }
    236         /* Reverse Index (RI) go up one line, reverse scroll if necessary */
    237         else if (buffer[i] == '\033' && buffer[i + 1] == 'M')
    238         {
    239             /* FIXME : not sure about the meaning of 'go up one line' and 'if
    240              necessary' words. Implemented as a scroller only. */
    241             for (j = bottom - 1; j > top; j--)
    242             {
    243                 for (k = 0; k < width; k++)
    244                 {
    245                     caca_put_char(sc->cv, k, j,
    246                                   caca_get_char(sc->cv, k, j - 1));
    247                     caca_put_attr(sc->cv, k, j,
    248                                   caca_get_attr(sc->cv, k, j - 1));
    249                 }
    250             }
    251             caca_draw_line(sc->cv, 0, top - 1, width - 1, top - 1, ' ');
    252             skip += 1;
    253         }
    254        
    255         /* Single Shift Select of G3 Character Set (SS2: 0x8f): affects next
    256          character only */
    257         else if (buffer[i] == '\033' && buffer[i + 1] == 'O')
    258         {
    259             sc->conv_state.ss = 3;
    260             skip += 1;
    261         }
    262        
    263         /* LOCKING-SHIFT TWO (LS2), ISO 2022, ECMA-48 (1986), ISO 6429 : 1988 */
    264         else if (buffer[i] == '\033' && buffer[i + 1] == 'n')
    265         {
    266             sc->conv_state.glr[0] = 2;
    267             skip += 1;
    268         }
    269        
    270         /* LOCKING-SHIFT THREE (LS3) ISO 2022, ECMA-48 (1986), ISO 6429 : 1988
    271          */
    272         else if (buffer[i] == '\033' && buffer[i + 1] == 'o')
    273         {
    274             sc->conv_state.glr[0] = 3;
    275             skip += 1;
    276         }
    277        
    278         /* RESET TO INITIAL STATE (RIS), ECMA-48 (1986), ISO 6429 : 1988 */
    279         else if (buffer[i] == '\033' && buffer[i + 1] == 'c')
    280         {
    281             sc->dfg = CACA_DEFAULT;
    282             sc->dbg = CACA_DEFAULT;
    283            
    284             caca_set_color_ansi(sc->cv, sc->dfg, sc->dbg);
    285             sc->clearattr = caca_get_attr(sc->cv, -1, -1);
    286             ansi_parse_grcm(sc, 1, &dummy);
    287            
    288             reset_conv_state(sc);
    289             skip += 1;
    290         }
    291        
    292         /* Coding Method Delimiter (CMD), ECMA-48 (1991), ISO/IEC 6429:1992
    293          (ISO IR 189) */
    294         else if (buffer[i] == '\033' && buffer[i + 1] == 'd')
    295         {
    296             reset_conv_state(sc);
    297             skip += 1;
    298         }
     316
     317       
     318        else if(!handle_duplet(&buffer[i], sc, &skip, top, bottom, width, height))
     319        {
     320           
     321        }
     322       
    299323       
    300324        /* GZDM4, G0-Designators, multi, 94^n chars [grandfathered short form
Note: See TracChangeset for help on using the changeset viewer.