Commit Diff


commit - d69cf634a800f2c05dc7fe96b6fed1eb960b7853
commit + 50e6d00cd375d34820593872709feaa222cd3a53
blob - 498bd5aaef7faf594630f4893a79239629e5d1d2
blob + 074cf0d7666530039402888dc8fdab233481828e
--- src/cmd/devdraw/devdraw.h
+++ src/cmd/devdraw/devdraw.h
@@ -3,4 +3,5 @@ int _drawmsgwrite(void*, int);
 void _initdisplaymemimage(Memimage*);
 int _latin1(Rune*, int);
 int parsewinsize(char*, Rectangle*, int*);
+int mouseswap(int);
 
blob - 66bea8972b52ee1fe9190fe2a6b0c87594bc5015
blob + 8e4af44352c2e5dbd49457045e8d5178a694a778
--- src/cmd/devdraw/mkfile
+++ src/cmd/devdraw/mkfile
@@ -5,6 +5,7 @@ TARG=devdraw
 WSYSOFILES=\
 	devdraw.$O\
 	latin1.$O\
+	mouseswap.$O\
 	winsize.$O\
 	
 <|sh ./mkwsysrules.sh
blob - /dev/null
blob + e6ece33399007e8d27b1013ef23c828e10407623 (mode 644)
--- /dev/null
+++ 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;
+}