tattempt at \r - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit f535642f304ebfec5182ab97be53e1fbf23056dc
 (DIR) parent 69555c0e28ad207b5f7e9ca63232cab474580c65
 (HTM) Author: rsc <devnull@localhost>
       Date:   Thu, 10 Nov 2005 22:53:38 +0000
       
       attempt at \r
       
       Diffstat:
         M src/cmd/9term/wind.c                |      69 ++++++++++++++++++-------------
       
       1 file changed, 40 insertions(+), 29 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/9term/wind.c b/src/cmd/9term/wind.c
       t@@ -190,7 +190,7 @@ wclose(Window *w)
        void
        winctl(void *arg)
        {
       -        Rune *rp, *bp, *tp, *up, *kbdr;
       +        Rune *rp, *bp, *up, *kbdr;
                uint qh;
                int nr, nb, c, wid, i, npart, initial, lastb;
                char *s, *t, part[3];
       t@@ -328,37 +328,48 @@ winctl(void *arg)
                                recv(cwm.cw, &pair);
                                rp = pair.s;
                                nr = pair.ns;
       -                        bp = rp;
       -                        for(i=0; i<nr; i++)
       -                                if(*bp++ == '\b'){
       -                                        --bp;
       -                                        initial = 0;
       -                                        tp = runemalloc(nr);
       -                                        runemove(tp, rp, i);
       -                                        up = tp+i;
       -                                        for(; i<nr; i++){
       -                                                *up = *bp++;
       -                                                if(*up == '\b')
       -                                                        if(up == tp)
       -                                                                initial++;
       -                                                        else
       -                                                                --up;
       -                                                else
       -                                                        up++;
       -                                        }
       -                                        if(initial){
       -                                                if(initial > w->qh)
       -                                                        initial = w->qh;
       -                                                qh = w->qh-initial;
       -                                                wdelete(w, qh, qh+initial);
       -                                                w->qh = qh;
       +                        up = bp = rp;
       +                        initial = 0;
       +                        for(i=0; i<nr; i++){
       +                                switch(*bp){
       +                                case 0:
       +                                        break;
       +                                case '\b':
       +                                        if(up == rp)
       +                                                initial++;
       +                                        else
       +                                                --up;
       +                                        break;
       +/*
       +                                case '\r':
       +                                        while(i<nr-1 && *(bp+1) == '\r'){
       +                                                bp++;
       +                                                i++;
                                                }
       -                                        free(rp);
       -                                        rp = tp;
       -                                        nr = up-tp;
       -                                        rp[nr] = 0;
       +                                        if(i<nr-1 && *(bp+1) != '\n'){
       +                                                while(up > rp && *(up-1) != '\n')
       +                                                        up--;
       +                                                if(up == rp)
       +                                                        initial = wbswidth(w, 0x15);
       +                                        }else if(i == nr-1)
       +                                                *up = '\n';
       +                                        break;
       +*/
       +                                default:
       +                                        *up++ = *bp;
                                                break;
                                        }
       +                                bp++;
       +                        }
       +                        if(initial){
       +                                if(initial > w->qh)
       +                                        initial = w->qh;
       +                                qh = w->qh - initial;
       +                                wdelete(w, qh, qh+initial);
       +                                w->qh = qh;
       +                        }
       +                        nr = rp - up;
       +                        rp[nr] = 0;
                                w->qh = winsert(w, rp, nr, w->qh)+nr;
                                if(w->scrolling || w->mouseopen)
                                        wshow(w, w->qh);