t9term, win: better \r handling (thanks, git) - 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 0d2dfbc84f42317fab5bc247355868d86613f3b0
 (DIR) parent 8ee5da7cf764bf5685c137264cd4d6a03f12ba89
 (HTM) Author: Russ Cox <rsc@swtch.com>
       Date:   Tue, 10 Nov 2015 10:25:17 -0500
       
       9term, win: better \r handling (thanks, git)
       
       Change-Id: I75563b911b54d8957d2d004b9c27d0a2f8f043b3
       Reviewed-on: https://plan9port-review.googlesource.com/1390
       Reviewed-by: Russ Cox <rsc@google.com>
       
       Diffstat:
         M src/cmd/9term/win.c                 |      30 ++++++++++++++++++++++++++++++
         M src/cmd/9term/wind.c                |       2 +-
       
       2 files changed, 31 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/src/cmd/9term/win.c b/src/cmd/9term/win.c
       t@@ -479,6 +479,32 @@ stdinproc(void *v)
                }
        }
        
       +int
       +dropcr(char *p, int n)
       +{
       +        int i;
       +        char *w, *r;
       +        
       +        r = p;
       +        w = p;
       +        for(i=0; i<n; i++) {
       +                switch(*r) {
       +                case '\b':
       +                        if(w > p)
       +                                w--;
       +                        break;
       +                case '\r':
       +                        *w++ = '\n';
       +                        break;
       +                default:
       +                        *w++ = *r;
       +                        break;
       +                }
       +                r++;
       +        }
       +        return w-p;
       +}
       +
        void
        stdoutproc(void *v)
        {
       t@@ -507,6 +533,10 @@ stdoutproc(void *v)
                        n = dropcrnl(buf+npart, n);
                        if(n == 0)
                                continue;
       +                
       +                n = dropcr(buf+npart, n);
       +                if(n == 0)
       +                        continue;
        
                        /* squash NULs */
                        s = memchr(buf+npart, 0, n);
 (DIR) diff --git a/src/cmd/9term/wind.c b/src/cmd/9term/wind.c
       t@@ -361,7 +361,7 @@ winctl(void *arg)
                                                        if(up == rp)
                                                                initial = wbswidth(w, '\r');
                                                }else if(i == nr-1)
       -                                                *up = '\n';
       +                                                *up++ = '\n';
                                                break;
                                        default:
                                                *up++ = *bp;