]> gitweb.factorcode.org Git - factor.git/commitdiff
Merge branch 'master' of git://github.com/william42/factor
authorJoe Groff <arcata@gmail.com>
Sat, 27 Feb 2010 02:14:10 +0000 (18:14 -0800)
committerJoe Groff <arcata@gmail.com>
Sat, 27 Feb 2010 02:14:10 +0000 (18:14 -0800)
basis/game/input/linux/linux.factor

index 0d451e96f0fdd87bdeb9a8889f77a91c7110176a..07889c8298ac2dde30401bc64c7874b8911c4014 100644 (file)
@@ -1,8 +1,12 @@
 ! Copyright (C) 2010 Erik Charlebois.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel game.input namespaces classes bit-arrays vectors ;
+USING: alien.c-types alien.syntax arrays kernel game.input namespaces
+classes bit-arrays sequences vectors x11 x11.xlib ;
 IN: game.input.linux
 
+LIBRARY: xlib
+FUNCTION: int XQueryKeymap ( Display* display, char[32] keys_return ) ;
+
 SINGLETON: linux-game-input-backend
 
 linux-game-input-backend game-input-backend set-global
@@ -36,9 +40,51 @@ M: linux-game-input-backend calibrate-controller
      
 M: linux-game-input-backend vibrate-controller
     3drop ;
+
+CONSTANT: x>hid-bit-order {
+
+0 0 0 0 0 0 0 0 
+0 41 30 31 32 33 34 35 
+36 37 38 39 45 46 42 43 
+20 26 8 21 23 28 24 12 
+18 19 47 48 40 224 4 22 
+7 9 10 11 13 14 15 51 
+52 53 225 49 29 27 6 25 
+5 17 16 54 55 56 229 85 
+226 44 57 58 59 60 61 62 
+63 64 65 66 67 83 71 95 
+96 97 86 92 93 94 87 91 
+90 89 98 99 0 0 0 68 
+69 0 0 0 0 0 0 0 
+88 228 84 70 0 0 74 82 
+75 80 79 77 81 78 73 76 
+127 129 128 102 103 0 72 0 
+0 0 0 227 231 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 
+}
      
+: x-bits>hid-bits ( bit-array -- bit-array )
+        256 iota [ 2array ] { } 2map-as [ first ] filter [ second ] map
+        x>hid-bit-order [ nth ] curry map
+        256 <bit-array> swap [ t swap pick set-nth ] each ;
+        
 M: linux-game-input-backend read-keyboard
-    256 <bit-array> keyboard-state boa ;
+        dpy get 256 <bit-array> [ XQueryKeymap drop ] keep
+        x-bits>hid-bits keyboard-state boa ;
      
 M: linux-game-input-backend read-mouse
     0 0 0 0 2 <vector> mouse-state boa ;