added macro to test flags, removed tmovecursor(). - st - Simple Terminal
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 5d611cd5476b56884077120bc2a6ba9727fcdd2c
 (DIR) parent 4db3df312ada9d92564d5580fb4e67f7704efff8
 (HTM) Author: Aurélien Aptel <aurelien.aptel@gmail.com>
       Date:   Thu, 26 Aug 2010 23:43:08 +0200
       
       added macro to test flags, removed tmovecursor().
       
       Diffstat:
         st.c                                |      42 +++++++++++--------------------
       
       1 file changed, 15 insertions(+), 27 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -34,6 +34,7 @@
        #define BETWEEN(x, a, b)  ((a) <= (x) && (x) <= (b))
        #define LIMIT(x, a, b)    (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x)
        #define ATTRCMP(a, b) ((a).mode != (b).mode || (a).fg != (b).fg || (a).bg != (b).bg)
       +#define IS_SET(flag) (term.mode & flag)
        
        /* Attribute, Cursor, Character state, Terminal mode, Screen draw mode */
        enum { ATTR_NULL=0 , ATTR_REVERSE=1 , ATTR_UNDERLINE=2, ATTR_BOLD=4, ATTR_GFX=8 };
       @@ -128,7 +129,7 @@ static void csireset(void);
        
        static void tclearregion(int, int, int, int);
        static void tcursor(int);
       -static void tmovecursor(int);
       +static void twrapcursor(void);
        static void tdeletechar(int);
        static void tdeleteline(int);
        static void tinsertblank(int);
       @@ -437,29 +438,13 @@ tmoveto(int x, int y) {
        }
        
        void
       -ttmovecursor(int dir) {
       -        int xf = term.c.x, yf = term.c.y;
       -        
       -        switch(dir) {
       -        case CURSOR_UP:
       -                yf--;
       -                break;
       -        case CURSOR_DOWN:
       -                yf++;
       -                break;
       -        case CURSOR_LEFT:
       -                xf--;
       -                break;
       -        case CURSOR_RIGHT:
       -                xf++;
       -                if(term.mode & MODE_WRAP && xf >= term.col) {
       -                        xf = 0, yf++;
       -                        if(yf > term.bot)
       -                                yf = term.bot, tscroll();
       -                }
       -                break;
       -        }
       -        tmoveto(xf, yf);
       +ttwrapcursor(void) {
       +        int y = term.c.y+1;
       +    if(y > term.bot) {
       +        tmoveto(0, term.bot);
       +        tscroll();
       +    } else 
       +        tmoveto(0, y);
        }
                
        void
       @@ -969,7 +954,7 @@ tputc(char c) {
                                tputtab();
                                break;
                        case '\b':
       -                        tmovecursor(CURSOR_LEFT);
       +                        tmoveto(term.c.x-1, term.c.y);
                                break;
                        case '\r':
                                tmoveto(0, term.c.y);
       @@ -986,7 +971,10 @@ tputc(char c) {
                                break;
                        default:
                                tsetchar(c);
       -                        tmovecursor(CURSOR_RIGHT);
       +            if(term.c.x+1 < term.col) {
       +                tmoveto(term.c.x+1, term.c.y);
       +            } else if(IS_SET(MODE_WRAP))
       +                twrapcursor();
                                break;
                        }
                }
       @@ -1282,7 +1270,7 @@ kpress(XEvent *ev) {
                        case XK_Down:
                        case XK_Left:
                        case XK_Right:
       -                        sprintf(buf, "\033%c%c", term.mode & MODE_APPKEYPAD ? 'O' : '[', "DACB"[ksym - XK_Left]);
       +                        sprintf(buf, "\033%c%c", IS_SET(MODE_APPKEYPAD) ? 'O' : '[', "DACB"[ksym - XK_Left]);
                                ttywrite(buf, 3);
                                break;
                        case XK_Insert: