diff options
| author | Russ Cox <rsc@swtch.com> | 2008-10-08 15:00:45 -0700 |
|---|---|---|
| committer | Russ Cox <rsc@swtch.com> | 2008-10-08 15:00:45 -0700 |
| commit | 50e6d00cd375d34820593872709feaa222cd3a53 (patch) | |
| tree | ca502ea502081148c23a553ed3e7c26d018f9bcf /src/cmd/devdraw/mouseswap.c | |
| parent | d69cf634a800f2c05dc7fe96b6fed1eb960b7853 (diff) | |
| download | plan9port-50e6d00cd375d34820593872709feaa222cd3a53.tar.gz plan9port-50e6d00cd375d34820593872709feaa222cd3a53.zip | |
devdraw/OSX: read $mousebuttonmap to allow swapping mouse buttons
Diffstat (limited to 'src/cmd/devdraw/mouseswap.c')
| -rw-r--r-- | src/cmd/devdraw/mouseswap.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/cmd/devdraw/mouseswap.c b/src/cmd/devdraw/mouseswap.c new file mode 100644 index 00000000..e6ece333 --- /dev/null +++ b/src/cmd/devdraw/mouseswap.c @@ -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; +} |
