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  }