thandle interrupts - 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 10ab06a791c2ed5cccd8ab7e24fb435997b7a47a
 (DIR) parent e830a908498c8f0270948fd08c50f6d773315880
 (HTM) Author: rsc <devnull@localhost>
       Date:   Sun,  6 Nov 2005 22:22:54 +0000
       
       handle interrupts
       
       Diffstat:
         M src/cmd/9term/9term.c               |      10 ++++++++++
         M src/cmd/9term/fns.h                 |       1 +
         M src/cmd/9term/wind.c                |      12 ++----------
       
       3 files changed, 13 insertions(+), 10 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/9term/9term.c b/src/cmd/9term/9term.c
       t@@ -419,6 +419,16 @@ rcoutputproc(void *arg)
                }
        }
        
       +void
       +winterrupt(Window *w)
       +{
       +        char rubout[1];
       +        
       +        USED(w);
       +        rubout[0] = getintr(sfd);
       +        write(rcfd, rubout, 1);
       +}
       +
        /*
         * Process in-band messages about window title changes.
         * The messages are of the form:
 (DIR) diff --git a/src/cmd/9term/fns.h b/src/cmd/9term/fns.h
       t@@ -30,6 +30,7 @@ char* runetobyte(Rune*, int, int*);
        void        timerinit(void);
        int        goodrect(Rectangle);
        int        rawon(void);
       +void        winterrupt(Window*);
        
        #define        runemalloc(n)                malloc((n)*sizeof(Rune))
        #define        runerealloc(a, n)        realloc(a, (n)*sizeof(Rune))
 (DIR) diff --git a/src/cmd/9term/wind.c b/src/cmd/9term/wind.c
       t@@ -563,7 +563,6 @@ wkeyctl(Window *w, Rune r)
                uint q0 ,q1;
                int n, nb, nr;
                Rune *rp;
       -        int *notefd;
        
                if(r == 0)
                        return;
       t@@ -665,9 +664,7 @@ wkeyctl(Window *w, Rune r)
                case 0x7F:                /* send interrupt */
                        w->qh = w->nr;
                        wshow(w, w->qh);
       -                notefd = emalloc(sizeof(int));
       -                *notefd = w->notefd;
       -                proccreate(interruptproc, notefd, 4096);
       +                winterrupt(w);
                        return;
                case 0x06:        /* ^F: file name completion */
                case Kins:                /* Insert: file name completion */
       t@@ -1294,19 +1291,14 @@ void
        wsetpid(Window *w, int pid, int dolabel)
        {
                char buf[128];
       -        int fd;
        
                w->pid = pid;
                if(dolabel){
                        sprint(buf, "rc %d", pid);
                        free(w->label);
                        w->label = estrdup(buf);
       +                drawsetlabel(w->label);
                }
       -        sprint(buf, "/proc/%d/notepg", pid);
       -        fd = open(buf, OWRITE|OCEXEC);
       -        if(w->notefd > 0)
       -                close(w->notefd);
       -        w->notefd = fd;
        }
        
        static Rune left1[] =  { '{', '[', '(', '<', 0xAB, 0 };