tdevdraw/OSX: read $mousebuttonmap to allow swapping mouse buttons - 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 50e6d00cd375d34820593872709feaa222cd3a53
 (DIR) parent d69cf634a800f2c05dc7fe96b6fed1eb960b7853
 (HTM) Author: Russ Cox <rsc@swtch.com>
       Date:   Wed,  8 Oct 2008 15:00:45 -0700
       
       devdraw/OSX: read $mousebuttonmap to allow swapping mouse buttons
       
       Diffstat:
         M src/cmd/devdraw/devdraw.h           |       1 +
         M src/cmd/devdraw/mkfile              |       1 +
         A src/cmd/devdraw/mouseswap.c         |      62 +++++++++++++++++++++++++++++++
       
       3 files changed, 64 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/devdraw/devdraw.h b/src/cmd/devdraw/devdraw.h
       t@@ -3,4 +3,5 @@ int _drawmsgwrite(void*, int);
        void _initdisplaymemimage(Memimage*);
        int _latin1(Rune*, int);
        int parsewinsize(char*, Rectangle*, int*);
       +int mouseswap(int);
        
 (DIR) diff --git a/src/cmd/devdraw/mkfile b/src/cmd/devdraw/mkfile
       t@@ -5,6 +5,7 @@ TARG=devdraw
        WSYSOFILES=\
                devdraw.$O\
                latin1.$O\
       +        mouseswap.$O\
                winsize.$O\
                
        <|sh ./mkwsysrules.sh
 (DIR) diff --git a/src/cmd/devdraw/mouseswap.c b/src/cmd/devdraw/mouseswap.c
       t@@ -0,0 +1,62 @@
       +#include <u.h>
       +#include <libc.h>
       +#include <draw.h>
       +#include <memdraw.h>
       +#include "devdraw.h"
       +
       +enum
       +{
       +        Nbutton = 10
       +};
       +
       +static int debug;
       +
       +static struct
       +{
       +        int b[Nbutton];
       +        int init;
       +} map;
       +
       +static void
       +initmap(void)
       +{
       +        char *p;
       +        int i;
       +
       +        p = getenv("mousedebug");
       +        if(p && p[0])
       +                debug = atoi(p);
       +
       +        for(i=0; i<Nbutton; i++)
       +                map.b[i] = i;
       +        map.init = 1;
       +        p = getenv("mousebuttonmap");
       +        if(p)
       +                for(i=0; i<Nbutton && p[i]; i++)
       +                        if('0' <= p[i] && p[i] <= '9')
       +                                map.b[i] = p[i] - '1';
       +        if(debug){
       +                fprint(2, "mousemap: ");
       +                for(i=0; i<Nbutton; i++)
       +                        fprint(2, " %d", 1+map.b[i]);
       +                fprint(2, "\n");
       +        }
       +}
       +
       +int
       +mouseswap(int but)
       +{
       +        int i;
       +        int nbut;
       +
       +        if(!map.init)
       +                initmap();
       +        
       +        nbut = 0;
       +        for(i=0; i<Nbutton; i++)
       +                if((but&(1<<i)) && map.b[i] >= 0)
       +                        nbut |= 1<<map.b[i];
       +        if(debug)
       +                fprint(2, "swap %#b -> %#b\n", but, nbut);
       +        return nbut;
       +}