Modified to use the new structured keyboard events. - sam - An updated version of the sam text editor.
 (HTM) git clone git://vernunftzentrum.de/sam.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 6c30b996149947cc5c874fd3dc7e3fea9ac202d3
 (DIR) parent 7dbd2384a6bb71e4f846fd69ce323a43d1bccec6
 (HTM) Author: Rob King <jking@deadpixi.com>
       Date:   Tue, 17 May 2016 17:45:25 -0500
       
       Modified to use the new structured keyboard events.
       
       Diffstat:
         samterm/io.c                        |      34 ++++++++++++++++---------------
         samterm/main.c                      |       4 +++-
         samterm/mesg.c                      |       6 +++---
         samterm/samterm.h                   |       2 +-
       
       4 files changed, 25 insertions(+), 21 deletions(-)
       ---
 (DIR) diff --git a/samterm/io.c b/samterm/io.c
       @@ -10,7 +10,7 @@ int        cursorfd;
        int        input;
        int        got;
        int        block;
       -int        kbdc;
       +Keystroke        keystroke;
        int        reshaped;
        uchar        *hostp;
        uchar        *hoststop;
       @@ -82,7 +82,7 @@ waitforio(void)
                        externload(&e);
                        break;
                case Ekeyboard:
       -                kbdc = e.kbdc;
       +                keystroke = e.keystroke;
                        break;
                case Emouse:
                        mouse = e.mouse;
       @@ -145,37 +145,39 @@ externchar(void)
                return -1;
        }
        
       -int
       +Keystroke
        kbdchar(void)
        {
       -        int c;
       +    Keystroke k = {0};
                static Event e;
        
       -        c = externchar();
       -        if(c > 0)
       -                return c;
       +        k.c = externchar();
       +        if(k.c > 0)
       +                return k;
                if(got & Ekeyboard){
       -                c = kbdc;
       -                kbdc = -1;
       +                k = keystroke;
       +                keystroke.c = -1;
                        got &= ~Ekeyboard;
       -                return c;
       +                return k;
                }
                while(ecanread(Eextern)){
                        eread(Eextern, &e);
                        externload(&e);
       -                c = externchar();
       -                if(c > 0)
       -                        return c;
       +                k.c = externchar();
       +                if(k.c > 0)
       +                        return k;
                }
       -        if(!ecankbd())
       -                return -1;
       +        if(!ecankbd()){
       +        k.c = -1;
       +                return k;
       +    }
                return ekbd();
        }
        
        int
        qpeekc(void)
        {
       -        return kbdc;
       +        return keystroke.c;
        }
        
        void
 (DIR) diff --git a/samterm/main.c b/samterm/main.c
       @@ -483,6 +483,7 @@ type(Flayer *l, int res)        /* what a bloody mess this is */
        {
                Text *t = (Text *)l->user1;
                Rune buf[100];
       +    Keystroke k;
                Rune *p = buf;
                int c, backspacing, moving;
                long a;
       @@ -509,7 +510,8 @@ type(Flayer *l, int res)        /* what a bloody mess this is */
                }
                backspacing = 0;
                moving = 0;
       -        while((c = kbdchar())>0){
       +        while(((k = kbdchar()), k.c) > 0){
       +        c = k.c;
                        if(res == RKeyboard){
                                if(c == UPKEY || c==SCROLLKEY || c==ESC || c==COMMANDKEY)
                                        break;
 (DIR) diff --git a/samterm/mesg.c b/samterm/mesg.c
       @@ -30,9 +30,9 @@ void
        rcv(void)
        {
                int c;
       -        static state = 0;
       -        static count = 0;
       -        static i = 0;
       +        static int state = 0;
       +        static int count = 0;
       +        static int i = 0;
                static int errs = 0;
        
                while((c=rcvchar()) != -1)
 (DIR) diff --git a/samterm/samterm.h b/samterm/samterm.h
       @@ -88,7 +88,7 @@ int        load(char*, int);
        int        waitforio(void);
        int        rcvchar(void);
        int        getch(void);
       -int        kbdchar(void);
       +Keystroke        kbdchar(void);
        int        qpeekc(void);
        void        mouseexit(void);
        void        cut(Text*, int, int, int);