9fans.net/go@v0.0.7/cmd/devdraw/mouseswap.go (about) 1 // #include <u.h> 2 // #include <libc.h> 3 // #include <draw.h> 4 // #include <memdraw.h> 5 // #include <memlayer.h> 6 // #include <mouse.h> 7 // #include <cursor.h> 8 // #include <keyboard.h> 9 // #include <drawfcall.h> 10 // #include "devdraw.h" 11 12 package main 13 14 import ( 15 "fmt" 16 "os" 17 "strconv" 18 ) 19 20 const ( 21 Nbutton = 10 22 ) 23 24 var debug int 25 26 var mousemap struct { 27 b [Nbutton]int 28 init bool 29 } 30 31 func initmap() { 32 p := os.Getenv("mousedebug") 33 if p != "" { 34 debug, _ = strconv.Atoi(p) 35 } 36 var i int 37 for i = 0; i < Nbutton; i++ { 38 mousemap.b[i] = i 39 } 40 mousemap.init = true 41 p = os.Getenv("mousebuttonmap") 42 if p != "" { 43 for i := 0; i < Nbutton && i < len(p); i++ { 44 if '0' <= p[i] && p[i] <= '9' { 45 mousemap.b[i] = int(p[i]) - '1' 46 } 47 } 48 } 49 if debug != 0 { 50 fmt.Fprintf(os.Stderr, "mousemap: ") 51 for i := 0; i < Nbutton; i++ { 52 fmt.Fprintf(os.Stderr, " %d", 1+mousemap.b[i]) 53 } 54 fmt.Fprintf(os.Stderr, "\n") 55 } 56 } 57 58 func mouseswap(but int) int { 59 if !mousemap.init { 60 initmap() 61 } 62 63 nbut := 0 64 for i := 0; i < Nbutton; i++ { 65 if but&(1<<i) != 0 && mousemap.b[i] >= 0 { 66 nbut |= 1 << mousemap.b[i] 67 } 68 } 69 if debug != 0 { 70 fmt.Fprintf(os.Stderr, "swap %#b -> %#b\n", but, nbut) 71 } 72 return nbut 73 }