changelog shortlog graph tags branches files raw help

Mercurial > core / changeset: evdev and io/kbd

changeset 684: 29fe829a7ac3
parent 683: c5fe76568de0
child 685: ebe3315b7add
author: Richard Westhaver <ellis@rwest.io>
date: Sun, 29 Sep 2024 00:31:24 -0400
files: lisp/ffi/evdev/constants.lisp lisp/ffi/evdev/dev.lisp lisp/ffi/evdev/evdev.asd lisp/ffi/evdev/input.lisp lisp/ffi/evdev/pkg.lisp lisp/ffi/evdev/tests.lisp lisp/ffi/xkb/constants.lisp lisp/ffi/xkb/pkg.lisp lisp/ffi/xkb/tests.lisp lisp/ffi/xkb/x11.lisp lisp/ffi/xkb/xkb.asd lisp/lib/cli/ed.lisp lisp/lib/io/io.asd lisp/lib/io/kbd.lisp lisp/lib/io/pkg.lisp
description: evdev and io/kbd
     1.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2+++ b/lisp/ffi/evdev/constants.lisp	Sun Sep 29 00:31:24 2024 -0400
     1.3@@ -0,0 +1,860 @@
     1.4+;;; constants.lisp --- evdev constants
     1.5+("sys/time.h" "sys/ioctl.h" "sys/types.h" "linux/types.h" "linux/input-event-codes.h" "linux/input.h")
     1.6+
     1.7+(;; linux/input-event-codes.h
     1.8+ (:integer ~input-prop-pointer~ "INPUT_PROP_POINTER")
     1.9+ (:integer +input-prop-direct+ "INPUT_PROP_DIRECT")
    1.10+ (:integer +input-prop-buttonpad+ "INPUT_PROP_BUTTONPAD")
    1.11+ (:integer +input-prop-semi-mt+ "INPUT_PROP_SEMI_MT")
    1.12+ (:integer +input-prop-topbuttonpad+ "INPUT_PROP_TOPBUTTONPAD")
    1.13+ (:integer +input-prop-pointing-stick+ "INPUT_PROP_POINTING_STICK")
    1.14+ (:integer +input-prop-accelerometer+ "INPUT_PROP_ACCELEROMETER")
    1.15+ (:integer +input-prop-max+ "INPUT_PROP_MAX")
    1.16+ (:integer +input-prop-cnt+ "INPUT_PROP_CNT")
    1.17+ (:integer +ev-syn+ "EV_SYN")
    1.18+ (:integer +ev-key+ "EV_KEY")
    1.19+ (:integer +ev-rel+ "EV_REL")
    1.20+ (:integer +ev-abs+ "EV_ABS")
    1.21+ (:integer +ev-msc+ "EV_MSC")
    1.22+ (:integer +ev-sw+ "EV_SW")
    1.23+ (:integer +ev-led+ "EV_LED")
    1.24+ (:integer +ev-snd+ "EV_SND")
    1.25+ (:integer +ev-rep+ "EV_REP")
    1.26+ (:integer +ev-ff+ "EV_FF")
    1.27+ (:integer +ev-pwr+ "EV_PWR")
    1.28+ (:integer +ev-ff-status+ "EV_FF_STATUS")
    1.29+ (:integer +ev-max+ "EV_MAX")
    1.30+ (:integer +ev-cnt+ "EV_CNT")
    1.31+ (:integer +syn-report+ "SYN_REPORT")
    1.32+ (:integer +syn-config+ "SYN_CONFIG")
    1.33+ (:integer +syn-mt-report+ "SYN_MT_REPORT")
    1.34+ (:integer +syn-dropped+ "SYN_DROPPED")
    1.35+ (:integer +syn-max+ "SYN_MAX")
    1.36+ (:integer +syn-cnt+ "SYN_CNT")
    1.37+ (:integer +key-reserved+ "KEY_RESERVED")
    1.38+ (:integer +key-esc+ "KEY_ESC")
    1.39+ (:integer +key-1+ "KEY_1")
    1.40+ (:integer +key-2+ "KEY_2")
    1.41+ (:integer +key-3+ "KEY_3")
    1.42+ (:integer +key-4+ "KEY_4")
    1.43+ (:integer +key-5+ "KEY_5")
    1.44+ (:integer +key-6+ "KEY_6")
    1.45+ (:integer +key-7+ "KEY_7")
    1.46+ (:integer +key-8+ "KEY_8")
    1.47+ (:integer +key-9+ "KEY_9")
    1.48+ (:integer +key-0+ "KEY_0")
    1.49+ (:integer +key-minus+ "KEY_MINUS")
    1.50+ (:integer +key-equal+ "KEY_EQUAL")
    1.51+ (:integer +key-backspace+ "KEY_BACKSPACE")
    1.52+ (:integer +key-tab+ "KEY_TAB")
    1.53+ (:integer +key-q+ "KEY_Q")
    1.54+ (:integer +key-w+ "KEY_W")
    1.55+ (:integer +key-e+ "KEY_E")
    1.56+ (:integer +key-r+ "KEY_R")
    1.57+ (:integer +key-t+ "KEY_T")
    1.58+ (:integer +key-y+ "KEY_Y")
    1.59+ (:integer +key-u+ "KEY_U")
    1.60+ (:integer +key-i+ "KEY_I")
    1.61+ (:integer +key-o+ "KEY_O")
    1.62+ (:integer +key-p+ "KEY_P")
    1.63+ (:integer +key-leftbrace+ "KEY_LEFTBRACE")
    1.64+ (:integer +key-rightbrace+ "KEY_RIGHTBRACE")
    1.65+ (:integer +key-enter+ "KEY_ENTER")
    1.66+ (:integer +key-leftctrl+ "KEY_LEFTCTRL")
    1.67+ (:integer +key-a+ "KEY_A")
    1.68+ (:integer +key-s+ "KEY_S")
    1.69+ (:integer +key-d+ "KEY_D")
    1.70+ (:integer +key-f+ "KEY_F")
    1.71+ (:integer +key-g+ "KEY_G")
    1.72+ (:integer +key-h+ "KEY_H")
    1.73+ (:integer +key-j+ "KEY_J")
    1.74+ (:integer +key-k+ "KEY_K")
    1.75+ (:integer +key-l+ "KEY_L")
    1.76+ (:integer +key-semicolon+ "KEY_SEMICOLON")
    1.77+ (:integer +key-apostrophe+ "KEY_APOSTROPHE")
    1.78+ (:integer +key-grave+ "KEY_GRAVE")
    1.79+ (:integer +key-leftshift+ "KEY_LEFTSHIFT")
    1.80+ (:integer +key-backslash+ "KEY_BACKSLASH")
    1.81+ (:integer +key-z+ "KEY_Z")
    1.82+ (:integer +key-x+ "KEY_X")
    1.83+ (:integer +key-c+ "KEY_C")
    1.84+ (:integer +key-v+ "KEY_V")
    1.85+ (:integer +key-b+ "KEY_B")
    1.86+ (:integer +key-n+ "KEY_N")
    1.87+ (:integer +key-m+ "KEY_M")
    1.88+ (:integer +key-comma+ "KEY_COMMA")
    1.89+ (:integer +key-dot+ "KEY_DOT")
    1.90+ (:integer +key-slash+ "KEY_SLASH")
    1.91+ (:integer +key-rightshift+ "KEY_RIGHTSHIFT")
    1.92+ (:integer +key-kpasterisk+ "KEY_KPASTERISK")
    1.93+ (:integer +key-leftalt+ "KEY_LEFTALT")
    1.94+ (:integer +key-space+ "KEY_SPACE")
    1.95+ (:integer +key-capslock+ "KEY_CAPSLOCK")
    1.96+ (:integer +key-f1+ "KEY_F1")
    1.97+ (:integer +key-f2+ "KEY_F2")
    1.98+ (:integer +key-f3+ "KEY_F3")
    1.99+ (:integer +key-f4+ "KEY_F4")
   1.100+ (:integer +key-f5+ "KEY_F5")
   1.101+ (:integer +key-f6+ "KEY_F6")
   1.102+ (:integer +key-f7+ "KEY_F7")
   1.103+ (:integer +key-f8+ "KEY_F8")
   1.104+ (:integer +key-f9+ "KEY_F9")
   1.105+ (:integer +key-f10+ "KEY_F10")
   1.106+ (:integer +key-numlock+ "KEY_NUMLOCK")
   1.107+ (:integer +key-scrolllock+ "KEY_SCROLLLOCK")
   1.108+ (:integer +key-kp7+ "KEY_KP7")
   1.109+ (:integer +key-kp8+ "KEY_KP8")
   1.110+ (:integer +key-kp9+ "KEY_KP9")
   1.111+ (:integer +key-kpminus+ "KEY_KPMINUS")
   1.112+ (:integer +key-kp4+ "KEY_KP4")
   1.113+ (:integer +key-kp5+ "KEY_KP5")
   1.114+ (:integer +key-kp6+ "KEY_KP6")
   1.115+ (:integer +key-kpplus+ "KEY_KPPLUS")
   1.116+ (:integer +key-kp1+ "KEY_KP1")
   1.117+ (:integer +key-kp2+ "KEY_KP2")
   1.118+ (:integer +key-kp3+ "KEY_KP3")
   1.119+ (:integer +key-kp0+ "KEY_KP0")
   1.120+ (:integer +key-kpdot+ "KEY_KPDOT")
   1.121+ (:integer +key-zenkakuhankaku+ "KEY_ZENKAKUHANKAKU")
   1.122+ (:integer +key-102nd+ "KEY_102ND")
   1.123+ (:integer +key-f11+ "KEY_F11")
   1.124+ (:integer +key-f12+ "KEY_F12")
   1.125+ (:integer +key-ro+ "KEY_RO")
   1.126+ (:integer +key-katakana+ "KEY_KATAKANA")
   1.127+ (:integer +key-hiragana+ "KEY_HIRAGANA")
   1.128+ (:integer +key-henkan+ "KEY_HENKAN")
   1.129+ (:integer +key-katakanahiragana+ "KEY_KATAKANAHIRAGANA")
   1.130+ (:integer +key-muhenkan+ "KEY_MUHENKAN")
   1.131+ (:integer +key-kpjpcomma+ "KEY_KPJPCOMMA")
   1.132+ (:integer +key-kpenter+ "KEY_KPENTER")
   1.133+ (:integer +key-rightctrl+ "KEY_RIGHTCTRL")
   1.134+ (:integer +key-kpslash+ "KEY_KPSLASH")
   1.135+ (:integer +key-sysrq+ "KEY_SYSRQ")
   1.136+ (:integer +key-rightalt+ "KEY_RIGHTALT")
   1.137+ (:integer +key-linefeed+ "KEY_LINEFEED")
   1.138+ (:integer +key-home+ "KEY_HOME")
   1.139+ (:integer +key-up+ "KEY_UP")
   1.140+ (:integer +key-pageup+ "KEY_PAGEUP")
   1.141+ (:integer +key-left+ "KEY_LEFT")
   1.142+ (:integer +key-right+ "KEY_RIGHT")
   1.143+ (:integer +key-end+ "KEY_END")
   1.144+ (:integer +key-down+ "KEY_DOWN")
   1.145+ (:integer +key-pagedown+ "KEY_PAGEDOWN")
   1.146+ (:integer +key-insert+ "KEY_INSERT")
   1.147+ (:integer +key-delete+ "KEY_DELETE")
   1.148+ (:integer +key-macro+ "KEY_MACRO")
   1.149+ (:integer +key-mute+ "KEY_MUTE")
   1.150+ (:integer +key-volumedown+ "KEY_VOLUMEDOWN")
   1.151+ (:integer +key-volumeup+ "KEY_VOLUMEUP")
   1.152+ (:integer +key-power+ "KEY_POWER")
   1.153+ (:integer +key-kpequal+ "KEY_KPEQUAL")
   1.154+ (:integer +key-kpplusminus+ "KEY_KPPLUSMINUS")
   1.155+ (:integer +key-pause+ "KEY_PAUSE")
   1.156+ (:integer +key-scale+ "KEY_SCALE")
   1.157+ (:integer +key-kpcomma+ "KEY_KPCOMMA")
   1.158+ (:integer +key-hangeul+ "KEY_HANGEUL")
   1.159+ (:integer +key-hanguel+ "KEY_HANGUEL")
   1.160+ (:integer +key-hanja+ "KEY_HANJA")
   1.161+ (:integer +key-yen+ "KEY_YEN")
   1.162+ (:integer +key-leftmeta+ "KEY_LEFTMETA")
   1.163+ (:integer +key-rightmeta+ "KEY_RIGHTMETA")
   1.164+ (:integer +key-compose+ "KEY_COMPOSE")
   1.165+ (:integer +key-stop+ "KEY_STOP")
   1.166+ (:integer +key-again+ "KEY_AGAIN")
   1.167+ (:integer +key-props+ "KEY_PROPS")
   1.168+ (:integer +key-undo+ "KEY_UNDO")
   1.169+ (:integer +key-front+ "KEY_FRONT")
   1.170+ (:integer +key-copy+ "KEY_COPY")
   1.171+ (:integer +key-open+ "KEY_OPEN")
   1.172+ (:integer +key-paste+ "KEY_PASTE")
   1.173+ (:integer +key-find+ "KEY_FIND")
   1.174+ (:integer +key-cut+ "KEY_CUT")
   1.175+ (:integer +key-help+ "KEY_HELP")
   1.176+ (:integer +key-menu+ "KEY_MENU")
   1.177+ (:integer +key-calc+ "KEY_CALC")
   1.178+ (:integer +key-setup+ "KEY_SETUP")
   1.179+ (:integer +key-sleep+ "KEY_SLEEP")
   1.180+ (:integer +key-wakeup+ "KEY_WAKEUP")
   1.181+ (:integer +key-file+ "KEY_FILE")
   1.182+ (:integer +key-sendfile+ "KEY_SENDFILE")
   1.183+ (:integer +key-deletefile+ "KEY_DELETEFILE")
   1.184+ (:integer +key-xfer+ "KEY_XFER")
   1.185+ (:integer +key-prog1+ "KEY_PROG1")
   1.186+ (:integer +key-prog2+ "KEY_PROG2")
   1.187+ (:integer +key-www+ "KEY_WWW")
   1.188+ (:integer +key-msdos+ "KEY_MSDOS")
   1.189+ (:integer +key-coffee+ "KEY_COFFEE")
   1.190+ (:integer +key-screenlock+ "KEY_SCREENLOCK")
   1.191+ (:integer +key-rotate-display+ "KEY_ROTATE_DISPLAY")
   1.192+ (:integer +key-direction+ "KEY_DIRECTION")
   1.193+ (:integer +key-cyclewindows+ "KEY_CYCLEWINDOWS")
   1.194+ (:integer +key-mail+ "KEY_MAIL")
   1.195+ (:integer +key-bookmarks+ "KEY_BOOKMARKS")
   1.196+ (:integer +key-computer+ "KEY_COMPUTER")
   1.197+ (:integer +key-back+ "KEY_BACK")
   1.198+ (:integer +key-forward+ "KEY_FORWARD")
   1.199+ (:integer +key-closecd+ "KEY_CLOSECD")
   1.200+ (:integer +key-ejectcd+ "KEY_EJECTCD")
   1.201+ (:integer +key-ejectclosecd+ "KEY_EJECTCLOSECD")
   1.202+ (:integer +key-nextsong+ "KEY_NEXTSONG")
   1.203+ (:integer +key-playpause+ "KEY_PLAYPAUSE")
   1.204+ (:integer +key-previoussong+ "KEY_PREVIOUSSONG")
   1.205+ (:integer +key-stopcd+ "KEY_STOPCD")
   1.206+ (:integer +key-record+ "KEY_RECORD")
   1.207+ (:integer +key-rewind+ "KEY_REWIND")
   1.208+ (:integer +key-phone+ "KEY_PHONE")
   1.209+ (:integer +key-iso+ "KEY_ISO")
   1.210+ (:integer +key-config+ "KEY_CONFIG")
   1.211+ (:integer +key-homepage+ "KEY_HOMEPAGE")
   1.212+ (:integer +key-refresh+ "KEY_REFRESH")
   1.213+ (:integer +key-exit+ "KEY_EXIT")
   1.214+ (:integer +key-move+ "KEY_MOVE")
   1.215+ (:integer +key-edit+ "KEY_EDIT")
   1.216+ (:integer +key-scrollup+ "KEY_SCROLLUP")
   1.217+ (:integer +key-scrolldown+ "KEY_SCROLLDOWN")
   1.218+ (:integer +key-kpleftparen+ "KEY_KPLEFTPAREN")
   1.219+ (:integer +key-kprightparen+ "KEY_KPRIGHTPAREN")
   1.220+ (:integer +key-new+ "KEY_NEW")
   1.221+ (:integer +key-redo+ "KEY_REDO")
   1.222+ (:integer +key-f13+ "KEY_F13")
   1.223+ (:integer +key-f14+ "KEY_F14")
   1.224+ (:integer +key-f15+ "KEY_F15")
   1.225+ (:integer +key-f16+ "KEY_F16")
   1.226+ (:integer +key-f17+ "KEY_F17")
   1.227+ (:integer +key-f18+ "KEY_F18")
   1.228+ (:integer +key-f19+ "KEY_F19")
   1.229+ (:integer +key-f20+ "KEY_F20")
   1.230+ (:integer +key-f21+ "KEY_F21")
   1.231+ (:integer +key-f22+ "KEY_F22")
   1.232+ (:integer +key-f23+ "KEY_F23")
   1.233+ (:integer +key-f24+ "KEY_F24")
   1.234+ (:integer +key-playcd+ "KEY_PLAYCD")
   1.235+ (:integer +key-pausecd+ "KEY_PAUSECD")
   1.236+ (:integer +key-prog3+ "KEY_PROG3")
   1.237+ (:integer +key-prog4+ "KEY_PROG4")
   1.238+ (:integer +key-all-applications+ "KEY_ALL_APPLICATIONS")
   1.239+ (:integer +key-dashboard+ "KEY_DASHBOARD")
   1.240+ (:integer +key-suspend+ "KEY_SUSPEND")
   1.241+ (:integer +key-close+ "KEY_CLOSE")
   1.242+ (:integer +key-play+ "KEY_PLAY")
   1.243+ (:integer +key-fastforward+ "KEY_FASTFORWARD")
   1.244+ (:integer +key-bassboost+ "KEY_BASSBOOST")
   1.245+ (:integer +key-print+ "KEY_PRINT")
   1.246+ (:integer +key-hp+ "KEY_HP")
   1.247+ (:integer +key-camera+ "KEY_CAMERA")
   1.248+ (:integer +key-sound+ "KEY_SOUND")
   1.249+ (:integer +key-question+ "KEY_QUESTION")
   1.250+ (:integer +key-email+ "KEY_EMAIL")
   1.251+ (:integer +key-chat+ "KEY_CHAT")
   1.252+ (:integer +key-search+ "KEY_SEARCH")
   1.253+ (:integer +key-connect+ "KEY_CONNECT")
   1.254+ (:integer +key-finance+ "KEY_FINANCE")
   1.255+ (:integer +key-sport+ "KEY_SPORT")
   1.256+ (:integer +key-shop+ "KEY_SHOP")
   1.257+ (:integer +key-alterase+ "KEY_ALTERASE")
   1.258+ (:integer +key-cancel+ "KEY_CANCEL")
   1.259+ (:integer +key-brightnessdown+ "KEY_BRIGHTNESSDOWN")
   1.260+ (:integer +key-brightnessup+ "KEY_BRIGHTNESSUP")
   1.261+ (:integer +key-media+ "KEY_MEDIA")
   1.262+ (:integer +key-switchvideomode+ "KEY_SWITCHVIDEOMODE")
   1.263+ (:integer +key-kbdillumtoggle+ "KEY_KBDILLUMTOGGLE")
   1.264+ (:integer +key-kbdillumdown+ "KEY_KBDILLUMDOWN")
   1.265+ (:integer +key-kbdillumup+ "KEY_KBDILLUMUP")
   1.266+ (:integer +key-send+ "KEY_SEND")
   1.267+ (:integer +key-reply+ "KEY_REPLY")
   1.268+ (:integer +key-forwardmail+ "KEY_FORWARDMAIL")
   1.269+ (:integer +key-save+ "KEY_SAVE")
   1.270+ (:integer +key-documents+ "KEY_DOCUMENTS")
   1.271+ (:integer +key-battery+ "KEY_BATTERY")
   1.272+ (:integer +key-bluetooth+ "KEY_BLUETOOTH")
   1.273+ (:integer +key-wlan+ "KEY_WLAN")
   1.274+ (:integer +key-uwb+ "KEY_UWB")
   1.275+ (:integer +key-unknown+ "KEY_UNKNOWN")
   1.276+ (:integer +key-video-next+ "KEY_VIDEO_NEXT")
   1.277+ (:integer +key-video-prev+ "KEY_VIDEO_PREV")
   1.278+ (:integer +key-brightness-cycle+ "KEY_BRIGHTNESS_CYCLE")
   1.279+ (:integer +key-brightness-auto+ "KEY_BRIGHTNESS_AUTO")
   1.280+ (:integer +key-brightness-zero+ "KEY_BRIGHTNESS_ZERO")
   1.281+ (:integer +key-display-off+ "KEY_DISPLAY_OFF")
   1.282+ (:integer +key-wwan+ "KEY_WWAN")
   1.283+ (:integer +key-wimax+ "KEY_WIMAX")
   1.284+ (:integer +key-rfkill+ "KEY_RFKILL")
   1.285+ (:integer +key-micmute+ "KEY_MICMUTE")
   1.286+ (:integer +btn-misc+ "BTN_MISC")
   1.287+ (:integer +btn-0+ "BTN_0")
   1.288+ (:integer +btn-1+ "BTN_1")
   1.289+ (:integer +btn-2+ "BTN_2")
   1.290+ (:integer +btn-3+ "BTN_3")
   1.291+ (:integer +btn-4+ "BTN_4")
   1.292+ (:integer +btn-5+ "BTN_5")
   1.293+ (:integer +btn-6+ "BTN_6")
   1.294+ (:integer +btn-7+ "BTN_7")
   1.295+ (:integer +btn-8+ "BTN_8")
   1.296+ (:integer +btn-9+ "BTN_9")
   1.297+ (:integer +btn-mouse+ "BTN_MOUSE")
   1.298+ (:integer +btn-left+ "BTN_LEFT")
   1.299+ (:integer +btn-right+ "BTN_RIGHT")
   1.300+ (:integer +btn-middle+ "BTN_MIDDLE")
   1.301+ (:integer +btn-side+ "BTN_SIDE")
   1.302+ (:integer +btn-extra+ "BTN_EXTRA")
   1.303+ (:integer +btn-forward+ "BTN_FORWARD")
   1.304+ (:integer +btn-back+ "BTN_BACK")
   1.305+ (:integer +btn-task+ "BTN_TASK")
   1.306+ (:integer +btn-joystick+ "BTN_JOYSTICK")
   1.307+ (:integer +btn-trigger+ "BTN_TRIGGER")
   1.308+ (:integer +btn-thumb+ "BTN_THUMB")
   1.309+ (:integer +btn-thumb2+ "BTN_THUMB2")
   1.310+ (:integer +btn-top+ "BTN_TOP")
   1.311+ (:integer +btn-top2+ "BTN_TOP2")
   1.312+ (:integer +btn-pinkie+ "BTN_PINKIE")
   1.313+ (:integer +btn-base+ "BTN_BASE")
   1.314+ (:integer +btn-base2+ "BTN_BASE2")
   1.315+ (:integer +btn-base3+ "BTN_BASE3")
   1.316+ (:integer +btn-base4+ "BTN_BASE4")
   1.317+ (:integer +btn-base5+ "BTN_BASE5")
   1.318+ (:integer +btn-base6+ "BTN_BASE6")
   1.319+ (:integer +btn-dead+ "BTN_DEAD")
   1.320+ (:integer +btn-gamepad+ "BTN_GAMEPAD")
   1.321+ (:integer +btn-south+ "BTN_SOUTH")
   1.322+ (:integer +btn-a+ "BTN_A")
   1.323+ (:integer +btn-east+ "BTN_EAST")
   1.324+ (:integer +btn-b+ "BTN_B")
   1.325+ (:integer +btn-c+ "BTN_C")
   1.326+ (:integer +btn-north+ "BTN_NORTH")
   1.327+ (:integer +btn-x+ "BTN_X")
   1.328+ (:integer +btn-west+ "BTN_WEST")
   1.329+ (:integer +btn-y+ "BTN_Y")
   1.330+ (:integer +btn-z+ "BTN_Z")
   1.331+ (:integer +btn-tl+ "BTN_TL")
   1.332+ (:integer +btn-tr+ "BTN_TR")
   1.333+ (:integer +btn-tl2+ "BTN_TL2")
   1.334+ (:integer +btn-tr2+ "BTN_TR2")
   1.335+ (:integer +btn-select+ "BTN_SELECT")
   1.336+ (:integer +btn-start+ "BTN_START")
   1.337+ (:integer +btn-mode+ "BTN_MODE")
   1.338+ (:integer +btn-thumbl+ "BTN_THUMBL")
   1.339+ (:integer +btn-thumbr+ "BTN_THUMBR")
   1.340+ (:integer +btn-digi+ "BTN_DIGI")
   1.341+ (:integer +btn-tool-pen+ "BTN_TOOL_PEN")
   1.342+ (:integer +btn-tool-rubber+ "BTN_TOOL_RUBBER")
   1.343+ (:integer +btn-tool-brush+ "BTN_TOOL_BRUSH")
   1.344+ (:integer +btn-tool-pencil+ "BTN_TOOL_PENCIL")
   1.345+ (:integer +btn-tool-airbrush+ "BTN_TOOL_AIRBRUSH")
   1.346+ (:integer +btn-tool-finger+ "BTN_TOOL_FINGER")
   1.347+ (:integer +btn-tool-mouse+ "BTN_TOOL_MOUSE")
   1.348+ (:integer +btn-tool-lens+ "BTN_TOOL_LENS")
   1.349+ (:integer +btn-tool-quinttap+ "BTN_TOOL_QUINTTAP")
   1.350+ (:integer +btn-stylus3+ "BTN_STYLUS3")
   1.351+ (:integer +btn-touch+ "BTN_TOUCH")
   1.352+ (:integer +btn-stylus+ "BTN_STYLUS")
   1.353+ (:integer +btn-stylus2+ "BTN_STYLUS2")
   1.354+ (:integer +btn-tool-doubletap+ "BTN_TOOL_DOUBLETAP")
   1.355+ (:integer +btn-tool-tripletap+ "BTN_TOOL_TRIPLETAP")
   1.356+ (:integer +btn-tool-quadtap+ "BTN_TOOL_QUADTAP")
   1.357+ (:integer +btn-wheel+ "BTN_WHEEL")
   1.358+ (:integer +btn-gear-down+ "BTN_GEAR_DOWN")
   1.359+ (:integer +btn-gear-up+ "BTN_GEAR_UP")
   1.360+ (:integer +key-ok+ "KEY_OK")
   1.361+ (:integer +key-select+ "KEY_SELECT")
   1.362+ (:integer +key-goto+ "KEY_GOTO")
   1.363+ (:integer +key-clear+ "KEY_CLEAR")
   1.364+ (:integer +key-power2+ "KEY_POWER2")
   1.365+ (:integer +key-option+ "KEY_OPTION")
   1.366+ (:integer +key-info+ "KEY_INFO")
   1.367+ (:integer +key-time+ "KEY_TIME")
   1.368+ (:integer +key-vendor+ "KEY_VENDOR")
   1.369+ (:integer +key-archive+ "KEY_ARCHIVE")
   1.370+ (:integer +key-program+ "KEY_PROGRAM")
   1.371+ (:integer +key-channel+ "KEY_CHANNEL")
   1.372+ (:integer +key-favorites+ "KEY_FAVORITES")
   1.373+ (:integer +key-epg+ "KEY_EPG")
   1.374+ (:integer +key-pvr+ "KEY_PVR")
   1.375+ (:integer +key-mhp+ "KEY_MHP")
   1.376+ (:integer +key-language+ "KEY_LANGUAGE")
   1.377+ (:integer +key-title+ "KEY_TITLE")
   1.378+ (:integer +key-subtitle+ "KEY_SUBTITLE")
   1.379+ (:integer +key-angle+ "KEY_ANGLE")
   1.380+ (:integer +key-full-screen+ "KEY_FULL_SCREEN")
   1.381+ (:integer +key-zoom+ "KEY_ZOOM")
   1.382+ (:integer +key-mode+ "KEY_MODE")
   1.383+ (:integer +key-keyboard+ "KEY_KEYBOARD")
   1.384+ (:integer +key-aspect-ratio+ "KEY_ASPECT_RATIO")
   1.385+ (:integer +key-screen+ "KEY_SCREEN")
   1.386+ (:integer +key-pc+ "KEY_PC")
   1.387+ (:integer +key-tv+ "KEY_TV")
   1.388+ (:integer +key-tv2+ "KEY_TV2")
   1.389+ (:integer +key-vcr+ "KEY_VCR")
   1.390+ (:integer +key-vcr2+ "KEY_VCR2")
   1.391+ (:integer +key-sat+ "KEY_SAT")
   1.392+ (:integer +key-sat2+ "KEY_SAT2")
   1.393+ (:integer +key-cd+ "KEY_CD")
   1.394+ (:integer +key-tape+ "KEY_TAPE")
   1.395+ (:integer +key-radio+ "KEY_RADIO")
   1.396+ (:integer +key-tuner+ "KEY_TUNER")
   1.397+ (:integer +key-player+ "KEY_PLAYER")
   1.398+ (:integer +key-text+ "KEY_TEXT")
   1.399+ (:integer +key-dvd+ "KEY_DVD")
   1.400+ (:integer +key-aux+ "KEY_AUX")
   1.401+ (:integer +key-mp3+ "KEY_MP3")
   1.402+ (:integer +key-audio+ "KEY_AUDIO")
   1.403+ (:integer +key-video+ "KEY_VIDEO")
   1.404+ (:integer +key-directory+ "KEY_DIRECTORY")
   1.405+ (:integer +key-list+ "KEY_LIST")
   1.406+ (:integer +key-memo+ "KEY_MEMO")
   1.407+ (:integer +key-calendar+ "KEY_CALENDAR")
   1.408+ (:integer +key-red+ "KEY_RED")
   1.409+ (:integer +key-green+ "KEY_GREEN")
   1.410+ (:integer +key-yellow+ "KEY_YELLOW")
   1.411+ (:integer +key-blue+ "KEY_BLUE")
   1.412+ (:integer +key-channelup+ "KEY_CHANNELUP")
   1.413+ (:integer +key-channeldown+ "KEY_CHANNELDOWN")
   1.414+ (:integer +key-first+ "KEY_FIRST")
   1.415+ (:integer +key-last+ "KEY_LAST")
   1.416+ (:integer +key-ab+ "KEY_AB")
   1.417+ (:integer +key-next+ "KEY_NEXT")
   1.418+ (:integer +key-restart+ "KEY_RESTART")
   1.419+ (:integer +key-slow+ "KEY_SLOW")
   1.420+ (:integer +key-shuffle+ "KEY_SHUFFLE")
   1.421+ (:integer +key-break+ "KEY_BREAK")
   1.422+ (:integer +key-previous+ "KEY_PREVIOUS")
   1.423+ (:integer +key-digits+ "KEY_DIGITS")
   1.424+ (:integer +key-teen+ "KEY_TEEN")
   1.425+ (:integer +key-twen+ "KEY_TWEN")
   1.426+ (:integer +key-videophone+ "KEY_VIDEOPHONE")
   1.427+ (:integer +key-games+ "KEY_GAMES")
   1.428+ (:integer +key-zoomin+ "KEY_ZOOMIN")
   1.429+ (:integer +key-zoomout+ "KEY_ZOOMOUT")
   1.430+ (:integer +key-zoomreset+ "KEY_ZOOMRESET")
   1.431+ (:integer +key-wordprocessor+ "KEY_WORDPROCESSOR")
   1.432+ (:integer +key-editor+ "KEY_EDITOR")
   1.433+ (:integer +key-spreadsheet+ "KEY_SPREADSHEET")
   1.434+ (:integer +key-graphicseditor+ "KEY_GRAPHICSEDITOR")
   1.435+ (:integer +key-presentation+ "KEY_PRESENTATION")
   1.436+ (:integer +key-database+ "KEY_DATABASE")
   1.437+ (:integer +key-news+ "KEY_NEWS")
   1.438+ (:integer +key-voicemail+ "KEY_VOICEMAIL")
   1.439+ (:integer +key-addressbook+ "KEY_ADDRESSBOOK")
   1.440+ (:integer +key-messenger+ "KEY_MESSENGER")
   1.441+ (:integer +key-displaytoggle+ "KEY_DISPLAYTOGGLE")
   1.442+ (:integer +key-brightness-toggle+ "KEY_BRIGHTNESS_TOGGLE")
   1.443+ (:integer +key-spellcheck+ "KEY_SPELLCHECK")
   1.444+ (:integer +key-logoff+ "KEY_LOGOFF")
   1.445+ (:integer +key-dollar+ "KEY_DOLLAR")
   1.446+ (:integer +key-euro+ "KEY_EURO")
   1.447+ (:integer +key-frameback+ "KEY_FRAMEBACK")
   1.448+ (:integer +key-frameforward+ "KEY_FRAMEFORWARD")
   1.449+ (:integer +key-context-menu+ "KEY_CONTEXT_MENU")
   1.450+ (:integer +key-media-repeat+ "KEY_MEDIA_REPEAT")
   1.451+ (:integer +key-10channelsup+ "KEY_10CHANNELSUP")
   1.452+ (:integer +key-10channelsdown+ "KEY_10CHANNELSDOWN")
   1.453+ (:integer +key-images+ "KEY_IMAGES")
   1.454+ (:integer +key-notification-center+ "KEY_NOTIFICATION_CENTER")
   1.455+ (:integer +key-pickup-phone+ "KEY_PICKUP_PHONE")
   1.456+ (:integer +key-hangup-phone+ "KEY_HANGUP_PHONE")
   1.457+ (:integer +key-del-eol+ "KEY_DEL_EOL")
   1.458+ (:integer +key-del-eos+ "KEY_DEL_EOS")
   1.459+ (:integer +key-ins-line+ "KEY_INS_LINE")
   1.460+ (:integer +key-del-line+ "KEY_DEL_LINE")
   1.461+ (:integer +key-fn+ "KEY_FN")
   1.462+ (:integer +key-fn-esc+ "KEY_FN_ESC")
   1.463+ (:integer +key-fn-f1+ "KEY_FN_F1")
   1.464+ (:integer +key-fn-f2+ "KEY_FN_F2")
   1.465+ (:integer +key-fn-f3+ "KEY_FN_F3")
   1.466+ (:integer +key-fn-f4+ "KEY_FN_F4")
   1.467+ (:integer +key-fn-f5+ "KEY_FN_F5")
   1.468+ (:integer +key-fn-f6+ "KEY_FN_F6")
   1.469+ (:integer +key-fn-f7+ "KEY_FN_F7")
   1.470+ (:integer +key-fn-f8+ "KEY_FN_F8")
   1.471+ (:integer +key-fn-f9+ "KEY_FN_F9")
   1.472+ (:integer +key-fn-f10+ "KEY_FN_F10")
   1.473+ (:integer +key-fn-f11+ "KEY_FN_F11")
   1.474+ (:integer +key-fn-f12+ "KEY_FN_F12")
   1.475+ (:integer +key-fn-1+ "KEY_FN_1")
   1.476+ (:integer +key-fn-2+ "KEY_FN_2")
   1.477+ (:integer +key-fn-d+ "KEY_FN_D")
   1.478+ (:integer +key-fn-e+ "KEY_FN_E")
   1.479+ (:integer +key-fn-f+ "KEY_FN_F")
   1.480+ (:integer +key-fn-s+ "KEY_FN_S")
   1.481+ (:integer +key-fn-b+ "KEY_FN_B")
   1.482+ (:integer +key-fn-right-shift+ "KEY_FN_RIGHT_SHIFT")
   1.483+ (:integer +key-brl-dot1+ "KEY_BRL_DOT1")
   1.484+ (:integer +key-brl-dot2+ "KEY_BRL_DOT2")
   1.485+ (:integer +key-brl-dot3+ "KEY_BRL_DOT3")
   1.486+ (:integer +key-brl-dot4+ "KEY_BRL_DOT4")
   1.487+ (:integer +key-brl-dot5+ "KEY_BRL_DOT5")
   1.488+ (:integer +key-brl-dot6+ "KEY_BRL_DOT6")
   1.489+ (:integer +key-brl-dot7+ "KEY_BRL_DOT7")
   1.490+ (:integer +key-brl-dot8+ "KEY_BRL_DOT8")
   1.491+ (:integer +key-brl-dot9+ "KEY_BRL_DOT9")
   1.492+ (:integer +key-brl-dot10+ "KEY_BRL_DOT10")
   1.493+ (:integer +key-numeric-0+ "KEY_NUMERIC_0")
   1.494+ (:integer +key-numeric-1+ "KEY_NUMERIC_1")
   1.495+ (:integer +key-numeric-2+ "KEY_NUMERIC_2")
   1.496+ (:integer +key-numeric-3+ "KEY_NUMERIC_3")
   1.497+ (:integer +key-numeric-4+ "KEY_NUMERIC_4")
   1.498+ (:integer +key-numeric-5+ "KEY_NUMERIC_5")
   1.499+ (:integer +key-numeric-6+ "KEY_NUMERIC_6")
   1.500+ (:integer +key-numeric-7+ "KEY_NUMERIC_7")
   1.501+ (:integer +key-numeric-8+ "KEY_NUMERIC_8")
   1.502+ (:integer +key-numeric-9+ "KEY_NUMERIC_9")
   1.503+ (:integer +key-numeric-star+ "KEY_NUMERIC_STAR")
   1.504+ (:integer +key-numeric-pound+ "KEY_NUMERIC_POUND")
   1.505+ (:integer +key-numeric-a+ "KEY_NUMERIC_A")
   1.506+ (:integer +key-numeric-b+ "KEY_NUMERIC_B")
   1.507+ (:integer +key-numeric-c+ "KEY_NUMERIC_C")
   1.508+ (:integer +key-numeric-d+ "KEY_NUMERIC_D")
   1.509+ (:integer +key-camera-focus+ "KEY_CAMERA_FOCUS")
   1.510+ (:integer +key-wps-button+ "KEY_WPS_BUTTON")
   1.511+ (:integer +key-touchpad-toggle+ "KEY_TOUCHPAD_TOGGLE")
   1.512+ (:integer +key-touchpad-on+ "KEY_TOUCHPAD_ON")
   1.513+ (:integer +key-touchpad-off+ "KEY_TOUCHPAD_OFF")
   1.514+ (:integer +key-camera-zoomin+ "KEY_CAMERA_ZOOMIN")
   1.515+ (:integer +key-camera-zoomout+ "KEY_CAMERA_ZOOMOUT")
   1.516+ (:integer +key-camera-up+ "KEY_CAMERA_UP")
   1.517+ (:integer +key-camera-down+ "KEY_CAMERA_DOWN")
   1.518+ (:integer +key-camera-left+ "KEY_CAMERA_LEFT")
   1.519+ (:integer +key-camera-right+ "KEY_CAMERA_RIGHT")
   1.520+ (:integer +key-attendant-on+ "KEY_ATTENDANT_ON")
   1.521+ (:integer +key-attendant-off+ "KEY_ATTENDANT_OFF")
   1.522+ (:integer +key-attendant-toggle+ "KEY_ATTENDANT_TOGGLE")
   1.523+ (:integer +key-lights-toggle+ "KEY_LIGHTS_TOGGLE")
   1.524+ (:integer +btn-dpad-up+ "BTN_DPAD_UP")
   1.525+ (:integer +btn-dpad-down+ "BTN_DPAD_DOWN")
   1.526+ (:integer +btn-dpad-left+ "BTN_DPAD_LEFT")
   1.527+ (:integer +btn-dpad-right+ "BTN_DPAD_RIGHT")
   1.528+ (:integer +key-als-toggle+ "KEY_ALS_TOGGLE")
   1.529+ (:integer +key-rotate-lock-toggle+ "KEY_ROTATE_LOCK_TOGGLE")
   1.530+ (:integer +key-refresh-rate-toggle+ "KEY_REFRESH_RATE_TOGGLE")
   1.531+ (:integer +key-buttonconfig+ "KEY_BUTTONCONFIG")
   1.532+ (:integer +key-taskmanager+ "KEY_TASKMANAGER")
   1.533+ (:integer +key-journal+ "KEY_JOURNAL")
   1.534+ (:integer +key-controlpanel+ "KEY_CONTROLPANEL")
   1.535+ (:integer +key-appselect+ "KEY_APPSELECT")
   1.536+ (:integer +key-screensaver+ "KEY_SCREENSAVER")
   1.537+ (:integer +key-voicecommand+ "KEY_VOICECOMMAND")
   1.538+ (:integer +key-assistant+ "KEY_ASSISTANT")
   1.539+ (:integer +key-kbd-layout-next+ "KEY_KBD_LAYOUT_NEXT")
   1.540+ (:integer +key-emoji-picker+ "KEY_EMOJI_PICKER")
   1.541+ (:integer +key-dictate+ "KEY_DICTATE")
   1.542+ (:integer +key-camera-access-enable+ "KEY_CAMERA_ACCESS_ENABLE")
   1.543+ (:integer +key-camera-access-disable+ "KEY_CAMERA_ACCESS_DISABLE")
   1.544+ (:integer +key-camera-access-toggle+ "KEY_CAMERA_ACCESS_TOGGLE")
   1.545+ (:integer +key-accessibility+ "KEY_ACCESSIBILITY")
   1.546+ (:integer +key-do-not-disturb+ "KEY_DO_NOT_DISTURB")
   1.547+ (:integer +key-brightness-min+ "KEY_BRIGHTNESS_MIN")
   1.548+ (:integer +key-brightness-max+ "KEY_BRIGHTNESS_MAX")
   1.549+ (:integer +key-kbdinputassist-prev+ "KEY_KBDINPUTASSIST_PREV")
   1.550+ (:integer +key-kbdinputassist-next+ "KEY_KBDINPUTASSIST_NEXT")
   1.551+ (:integer +key-kbdinputassist-prevgroup+ "KEY_KBDINPUTASSIST_PREVGROUP")
   1.552+ (:integer +key-kbdinputassist-nextgroup+ "KEY_KBDINPUTASSIST_NEXTGROUP")
   1.553+ (:integer +key-kbdinputassist-accept+ "KEY_KBDINPUTASSIST_ACCEPT")
   1.554+ (:integer +key-kbdinputassist-cancel+ "KEY_KBDINPUTASSIST_CANCEL")
   1.555+ (:integer +key-right-up+ "KEY_RIGHT_UP")
   1.556+ (:integer +key-right-down+ "KEY_RIGHT_DOWN")
   1.557+ (:integer +key-left-up+ "KEY_LEFT_UP")
   1.558+ (:integer +key-left-down+ "KEY_LEFT_DOWN")
   1.559+ (:integer +key-root-menu+ "KEY_ROOT_MENU")
   1.560+ (:integer +key-media-top-menu+ "KEY_MEDIA_TOP_MENU")
   1.561+ (:integer +key-numeric-11+ "KEY_NUMERIC_11")
   1.562+ (:integer +key-numeric-12+ "KEY_NUMERIC_12")
   1.563+ (:integer +key-audio-desc+ "KEY_AUDIO_DESC")
   1.564+ (:integer +key-3d-mode+ "KEY_3D_MODE")
   1.565+ (:integer +key-next-favorite+ "KEY_NEXT_FAVORITE")
   1.566+ (:integer +key-stop-record+ "KEY_STOP_RECORD")
   1.567+ (:integer +key-pause-record+ "KEY_PAUSE_RECORD")
   1.568+ (:integer +key-vod+ "KEY_VOD")
   1.569+ (:integer +key-unmute+ "KEY_UNMUTE")
   1.570+ (:integer +key-fastreverse+ "KEY_FASTREVERSE")
   1.571+ (:integer +key-slowreverse+ "KEY_SLOWREVERSE")
   1.572+ (:integer +key-data+ "KEY_DATA")
   1.573+ (:integer +key-onscreen-keyboard+ "KEY_ONSCREEN_KEYBOARD")
   1.574+ (:integer +key-privacy-screen-toggle+ "KEY_PRIVACY_SCREEN_TOGGLE")
   1.575+ (:integer +key-selective-screenshot+ "KEY_SELECTIVE_SCREENSHOT")
   1.576+ (:integer +key-next-element+ "KEY_NEXT_ELEMENT")
   1.577+ (:integer +key-previous-element+ "KEY_PREVIOUS_ELEMENT")
   1.578+ (:integer +key-autopilot-engage-toggle+ "KEY_AUTOPILOT_ENGAGE_TOGGLE")
   1.579+ (:integer +key-mark-waypoint+ "KEY_MARK_WAYPOINT")
   1.580+ (:integer +key-sos+ "KEY_SOS")
   1.581+ (:integer +key-nav-chart+ "KEY_NAV_CHART")
   1.582+ (:integer +key-fishing-chart+ "KEY_FISHING_CHART")
   1.583+ (:integer +key-single-range-radar+ "KEY_SINGLE_RANGE_RADAR")
   1.584+ (:integer +key-dual-range-radar+ "KEY_DUAL_RANGE_RADAR")
   1.585+ (:integer +key-radar-overlay+ "KEY_RADAR_OVERLAY")
   1.586+ (:integer +key-traditional-sonar+ "KEY_TRADITIONAL_SONAR")
   1.587+ (:integer +key-clearvu-sonar+ "KEY_CLEARVU_SONAR")
   1.588+ (:integer +key-sidevu-sonar+ "KEY_SIDEVU_SONAR")
   1.589+ (:integer +key-nav-info+ "KEY_NAV_INFO")
   1.590+ (:integer +key-brightness-menu+ "KEY_BRIGHTNESS_MENU")
   1.591+ (:integer +key-macro1+ "KEY_MACRO1")
   1.592+ (:integer +key-macro2+ "KEY_MACRO2")
   1.593+ (:integer +key-macro3+ "KEY_MACRO3")
   1.594+ (:integer +key-macro4+ "KEY_MACRO4")
   1.595+ (:integer +key-macro5+ "KEY_MACRO5")
   1.596+ (:integer +key-macro6+ "KEY_MACRO6")
   1.597+ (:integer +key-macro7+ "KEY_MACRO7")
   1.598+ (:integer +key-macro8+ "KEY_MACRO8")
   1.599+ (:integer +key-macro9+ "KEY_MACRO9")
   1.600+ (:integer +key-macro10+ "KEY_MACRO10")
   1.601+ (:integer +key-macro11+ "KEY_MACRO11")
   1.602+ (:integer +key-macro12+ "KEY_MACRO12")
   1.603+ (:integer +key-macro13+ "KEY_MACRO13")
   1.604+ (:integer +key-macro14+ "KEY_MACRO14")
   1.605+ (:integer +key-macro15+ "KEY_MACRO15")
   1.606+ (:integer +key-macro16+ "KEY_MACRO16")
   1.607+ (:integer +key-macro17+ "KEY_MACRO17")
   1.608+ (:integer +key-macro18+ "KEY_MACRO18")
   1.609+ (:integer +key-macro19+ "KEY_MACRO19")
   1.610+ (:integer +key-macro20+ "KEY_MACRO20")
   1.611+ (:integer +key-macro21+ "KEY_MACRO21")
   1.612+ (:integer +key-macro22+ "KEY_MACRO22")
   1.613+ (:integer +key-macro23+ "KEY_MACRO23")
   1.614+ (:integer +key-macro24+ "KEY_MACRO24")
   1.615+ (:integer +key-macro25+ "KEY_MACRO25")
   1.616+ (:integer +key-macro26+ "KEY_MACRO26")
   1.617+ (:integer +key-macro27+ "KEY_MACRO27")
   1.618+ (:integer +key-macro28+ "KEY_MACRO28")
   1.619+ (:integer +key-macro29+ "KEY_MACRO29")
   1.620+ (:integer +key-macro30+ "KEY_MACRO30")
   1.621+ (:integer +key-macro-record-start+ "KEY_MACRO_RECORD_START")
   1.622+ (:integer +key-macro-record-stop+ "KEY_MACRO_RECORD_STOP")
   1.623+ (:integer +key-macro-preset-cycle+ "KEY_MACRO_PRESET_CYCLE")
   1.624+ (:integer +key-macro-preset1+ "KEY_MACRO_PRESET1")
   1.625+ (:integer +key-macro-preset2+ "KEY_MACRO_PRESET2")
   1.626+ (:integer +key-macro-preset3+ "KEY_MACRO_PRESET3")
   1.627+ (:integer +key-kbd-lcd-menu1+ "KEY_KBD_LCD_MENU1")
   1.628+ (:integer +key-kbd-lcd-menu2+ "KEY_KBD_LCD_MENU2")
   1.629+ (:integer +key-kbd-lcd-menu3+ "KEY_KBD_LCD_MENU3")
   1.630+ (:integer +key-kbd-lcd-menu4+ "KEY_KBD_LCD_MENU4")
   1.631+ (:integer +key-kbd-lcd-menu5+ "KEY_KBD_LCD_MENU5")
   1.632+ (:integer +btn-trigger-happy+ "BTN_TRIGGER_HAPPY")
   1.633+ (:integer +btn-trigger-happy1+ "BTN_TRIGGER_HAPPY1")
   1.634+ (:integer +btn-trigger-happy2+ "BTN_TRIGGER_HAPPY2")
   1.635+ (:integer +btn-trigger-happy3+ "BTN_TRIGGER_HAPPY3")
   1.636+ (:integer +btn-trigger-happy4+ "BTN_TRIGGER_HAPPY4")
   1.637+ (:integer +btn-trigger-happy5+ "BTN_TRIGGER_HAPPY5")
   1.638+ (:integer +btn-trigger-happy6+ "BTN_TRIGGER_HAPPY6")
   1.639+ (:integer +btn-trigger-happy7+ "BTN_TRIGGER_HAPPY7")
   1.640+ (:integer +btn-trigger-happy8+ "BTN_TRIGGER_HAPPY8")
   1.641+ (:integer +btn-trigger-happy9+ "BTN_TRIGGER_HAPPY9")
   1.642+ (:integer +btn-trigger-happy10+ "BTN_TRIGGER_HAPPY10")
   1.643+ (:integer +btn-trigger-happy11+ "BTN_TRIGGER_HAPPY11")
   1.644+ (:integer +btn-trigger-happy12+ "BTN_TRIGGER_HAPPY12")
   1.645+ (:integer +btn-trigger-happy13+ "BTN_TRIGGER_HAPPY13")
   1.646+ (:integer +btn-trigger-happy14+ "BTN_TRIGGER_HAPPY14")
   1.647+ (:integer +btn-trigger-happy15+ "BTN_TRIGGER_HAPPY15")
   1.648+ (:integer +btn-trigger-happy16+ "BTN_TRIGGER_HAPPY16")
   1.649+ (:integer +btn-trigger-happy17+ "BTN_TRIGGER_HAPPY17")
   1.650+ (:integer +btn-trigger-happy18+ "BTN_TRIGGER_HAPPY18")
   1.651+ (:integer +btn-trigger-happy19+ "BTN_TRIGGER_HAPPY19")
   1.652+ (:integer +btn-trigger-happy20+ "BTN_TRIGGER_HAPPY20")
   1.653+ (:integer +btn-trigger-happy21+ "BTN_TRIGGER_HAPPY21")
   1.654+ (:integer +btn-trigger-happy22+ "BTN_TRIGGER_HAPPY22")
   1.655+ (:integer +btn-trigger-happy23+ "BTN_TRIGGER_HAPPY23")
   1.656+ (:integer +btn-trigger-happy24+ "BTN_TRIGGER_HAPPY24")
   1.657+ (:integer +btn-trigger-happy25+ "BTN_TRIGGER_HAPPY25")
   1.658+ (:integer +btn-trigger-happy26+ "BTN_TRIGGER_HAPPY26")
   1.659+ (:integer +btn-trigger-happy27+ "BTN_TRIGGER_HAPPY27")
   1.660+ (:integer +btn-trigger-happy28+ "BTN_TRIGGER_HAPPY28")
   1.661+ (:integer +btn-trigger-happy29+ "BTN_TRIGGER_HAPPY29")
   1.662+ (:integer +btn-trigger-happy30+ "BTN_TRIGGER_HAPPY30")
   1.663+ (:integer +btn-trigger-happy31+ "BTN_TRIGGER_HAPPY31")
   1.664+ (:integer +btn-trigger-happy32+ "BTN_TRIGGER_HAPPY32")
   1.665+ (:integer +btn-trigger-happy33+ "BTN_TRIGGER_HAPPY33")
   1.666+ (:integer +btn-trigger-happy34+ "BTN_TRIGGER_HAPPY34")
   1.667+ (:integer +btn-trigger-happy35+ "BTN_TRIGGER_HAPPY35")
   1.668+ (:integer +btn-trigger-happy36+ "BTN_TRIGGER_HAPPY36")
   1.669+ (:integer +btn-trigger-happy37+ "BTN_TRIGGER_HAPPY37")
   1.670+ (:integer +btn-trigger-happy38+ "BTN_TRIGGER_HAPPY38")
   1.671+ (:integer +btn-trigger-happy39+ "BTN_TRIGGER_HAPPY39")
   1.672+ (:integer +btn-trigger-happy40+ "BTN_TRIGGER_HAPPY40")
   1.673+ (:integer +key-min-interesting+ "KEY_MIN_INTERESTING")
   1.674+ (:integer +key-max+ "KEY_MAX")
   1.675+ (:integer +key-cnt+ "KEY_CNT")
   1.676+ (:integer +rel-x+ "REL_X")
   1.677+ (:integer +rel-y+ "REL_Y")
   1.678+ (:integer +rel-z+ "REL_Z")
   1.679+ (:integer +rel-rx+ "REL_RX")
   1.680+ (:integer +rel-ry+ "REL_RY")
   1.681+ (:integer +rel-rz+ "REL_RZ")
   1.682+ (:integer +rel-hwheel+ "REL_HWHEEL")
   1.683+ (:integer +rel-dial+ "REL_DIAL")
   1.684+ (:integer +rel-wheel+ "REL_WHEEL")
   1.685+ (:integer +rel-misc+ "REL_MISC")
   1.686+ (:integer +rel-reserved+ "REL_RESERVED")
   1.687+ (:integer +rel-wheel-hi-res+ "REL_WHEEL_HI_RES")
   1.688+ (:integer +rel-hwheel-hi-res+ "REL_HWHEEL_HI_RES")
   1.689+ (:integer +rel-max+ "REL_MAX")
   1.690+ (:integer +rel-cnt+ "REL_CNT")
   1.691+ (:integer +abs-x+ "ABS_X")
   1.692+ (:integer +abs-y+ "ABS_Y")
   1.693+ (:integer +abs-z+ "ABS_Z")
   1.694+ (:integer +abs-rx+ "ABS_RX")
   1.695+ (:integer +abs-ry+ "ABS_RY")
   1.696+ (:integer +abs-rz+ "ABS_RZ")
   1.697+ (:integer +abs-throttle+ "ABS_THROTTLE")
   1.698+ (:integer +abs-rudder+ "ABS_RUDDER")
   1.699+ (:integer +abs-wheel+ "ABS_WHEEL")
   1.700+ (:integer +abs-gas+ "ABS_GAS")
   1.701+ (:integer +abs-brake+ "ABS_BRAKE")
   1.702+ (:integer +abs-hat0x+ "ABS_HAT0X")
   1.703+ (:integer +abs-hat0y+ "ABS_HAT0Y")
   1.704+ (:integer +abs-hat1x+ "ABS_HAT1X")
   1.705+ (:integer +abs-hat1y+ "ABS_HAT1Y")
   1.706+ (:integer +abs-hat2x+ "ABS_HAT2X")
   1.707+ (:integer +abs-hat2y+ "ABS_HAT2Y")
   1.708+ (:integer +abs-hat3x+ "ABS_HAT3X")
   1.709+ (:integer +abs-hat3y+ "ABS_HAT3Y")
   1.710+ (:integer +abs-pressure+ "ABS_PRESSURE")
   1.711+ (:integer +abs-distance+ "ABS_DISTANCE")
   1.712+ (:integer +abs-tilt-x+ "ABS_TILT_X")
   1.713+ (:integer +abs-tilt-y+ "ABS_TILT_Y")
   1.714+ (:integer +abs-tool-width+ "ABS_TOOL_WIDTH")
   1.715+ (:integer +abs-volume+ "ABS_VOLUME")
   1.716+ (:integer +abs-profile+ "ABS_PROFILE")
   1.717+ (:integer +abs-misc+ "ABS_MISC")
   1.718+ (:integer +abs-reserved+ "ABS_RESERVED")
   1.719+ (:integer +abs-mt-slot+ "ABS_MT_SLOT")
   1.720+ (:integer +abs-mt-touch-major+ "ABS_MT_TOUCH_MAJOR")
   1.721+ (:integer +abs-mt-touch-minor+ "ABS_MT_TOUCH_MINOR")
   1.722+ (:integer +abs-mt-width-major+ "ABS_MT_WIDTH_MAJOR")
   1.723+ (:integer +abs-mt-width-minor+ "ABS_MT_WIDTH_MINOR")
   1.724+ (:integer +abs-mt-orientation+ "ABS_MT_ORIENTATION")
   1.725+ (:integer +abs-mt-position-x+ "ABS_MT_POSITION_X")
   1.726+ (:integer +abs-mt-position-y+ "ABS_MT_POSITION_Y")
   1.727+ (:integer +abs-mt-tool-type+ "ABS_MT_TOOL_TYPE")
   1.728+ (:integer +abs-mt-blob-id+ "ABS_MT_BLOB_ID")
   1.729+ (:integer +abs-mt-tracking-id+ "ABS_MT_TRACKING_ID")
   1.730+ (:integer +abs-mt-pressure+ "ABS_MT_PRESSURE")
   1.731+ (:integer +abs-mt-distance+ "ABS_MT_DISTANCE")
   1.732+ (:integer +abs-mt-tool-x+ "ABS_MT_TOOL_X")
   1.733+ (:integer +abs-mt-tool-y+ "ABS_MT_TOOL_Y")
   1.734+ (:integer +abs-max+ "ABS_MAX")
   1.735+ (:integer +abs-cnt+ "ABS_CNT")
   1.736+ (:integer +sw-lid+ "SW_LID")
   1.737+ (:integer +sw-tablet-mode+ "SW_TABLET_MODE")
   1.738+ (:integer +sw-headphone-insert+ "SW_HEADPHONE_INSERT")
   1.739+ (:integer +sw-rfkill-all+ "SW_RFKILL_ALL")
   1.740+ (:integer +sw-radio+ "SW_RADIO")
   1.741+ (:integer +sw-microphone-insert+ "SW_MICROPHONE_INSERT")
   1.742+ (:integer +sw-dock+ "SW_DOCK")
   1.743+ (:integer +sw-lineout-insert+ "SW_LINEOUT_INSERT")
   1.744+ (:integer +sw-jack-physical-insert+ "SW_JACK_PHYSICAL_INSERT")
   1.745+ (:integer +sw-videoout-insert+ "SW_VIDEOOUT_INSERT")
   1.746+ (:integer +sw-camera-lens-cover+ "SW_CAMERA_LENS_COVER")
   1.747+ (:integer +sw-keypad-slide+ "SW_KEYPAD_SLIDE")
   1.748+ (:integer +sw-front-proximity+ "SW_FRONT_PROXIMITY")
   1.749+ (:integer +sw-rotate-lock+ "SW_ROTATE_LOCK")
   1.750+ (:integer +sw-linein-insert+ "SW_LINEIN_INSERT")
   1.751+ (:integer +sw-mute-device+ "SW_MUTE_DEVICE")
   1.752+ (:integer +sw-pen-inserted+ "SW_PEN_INSERTED")
   1.753+ (:integer +sw-machine-cover+ "SW_MACHINE_COVER")
   1.754+ (:integer +sw-max+ "SW_MAX")
   1.755+ (:integer +sw-cnt+ "SW_CNT")
   1.756+ (:integer +msc-serial+ "MSC_SERIAL")
   1.757+ (:integer +msc-pulseled+ "MSC_PULSELED")
   1.758+ (:integer +msc-gesture+ "MSC_GESTURE")
   1.759+ (:integer +msc-raw+ "MSC_RAW")
   1.760+ (:integer +msc-scan+ "MSC_SCAN")
   1.761+ (:integer +msc-timestamp+ "MSC_TIMESTAMP")
   1.762+ (:integer +msc-max+ "MSC_MAX")
   1.763+ (:integer +msc-cnt+ "MSC_CNT")
   1.764+ (:integer +led-numl+ "LED_NUML")
   1.765+ (:integer +led-capsl+ "LED_CAPSL")
   1.766+ (:integer +led-scrolll+ "LED_SCROLLL")
   1.767+ (:integer +led-compose+ "LED_COMPOSE")
   1.768+ (:integer +led-kana+ "LED_KANA")
   1.769+ (:integer +led-sleep+ "LED_SLEEP")
   1.770+ (:integer +led-suspend+ "LED_SUSPEND")
   1.771+ (:integer +led-mute+ "LED_MUTE")
   1.772+ (:integer +led-misc+ "LED_MISC")
   1.773+ (:integer +led-mail+ "LED_MAIL")
   1.774+ (:integer +led-charging+ "LED_CHARGING")
   1.775+ (:integer +led-max+ "LED_MAX")
   1.776+ (:integer +led-cnt+ "LED_CNT")
   1.777+ (:integer +rep-delay+ "REP_DELAY")
   1.778+ (:integer +rep-period+ "REP_PERIOD")
   1.779+ (:integer +rep-max+ "REP_MAX")
   1.780+ (:integer +rep-cnt+ "REP_CNT")
   1.781+ (:integer +snd-click+ "SND_CLICK")
   1.782+ (:integer +snd-bell+ "SND_BELL")
   1.783+ (:integer +snd-tone+ "SND_TONE")
   1.784+ (:integer +snd-max+ "SND_MAX")
   1.785+ (:integer +snd-cnt+ "SND_CNT")
   1.786+ ;; linux/event.h
   1.787+ (:integer +ev-version+ "EV_VERSION")
   1.788+ (:integer +eviocgversion+ "EVIOCGVERSION")
   1.789+ (:integer +eviocgid+ "EVIOCGID")
   1.790+ (:integer +eviocgrep+ "EVIOCGREP")
   1.791+ (:integer +eviocsrep+ "EVIOCSREP")
   1.792+ (:integer +eviocgkeycode+ "EVIOCGKEYCODE")
   1.793+ (:integer +eviocgkeycode-v2+ "EVIOCGKEYCODE_V2")
   1.794+ (:integer +eviocskeycode+ "EVIOCSKEYCODE")
   1.795+ (:integer +eviocskeycode-v2+ "EVIOCSKEYCODE_V2")
   1.796+ (:integer +eviocsff+ "EVIOCSFF")
   1.797+ (:integer +eviocrmff "EVIOCRMFF")
   1.798+ (:integer +eviocgeffects+ "EVIOCGEFFECTS")
   1.799+ (:integer +eviocgrab+ "EVIOCGRAB")
   1.800+ (:integer +eviocrevoke+ "EVIOCREVOKE")
   1.801+ (:integer +eviocgmask+ "EVIOCGMASK")
   1.802+ (:integer +eviocsmask+ "EVIOCSMASK")
   1.803+ (:integer +eviocsclockid+ "EVIOCSCLOCKID")
   1.804+ (:integer +id-bus+ "ID_BUS")
   1.805+ (:integer +id-vendor+ "ID_VENDOR")
   1.806+ (:integer +id-product+ "ID_PRODUCT")
   1.807+ (:integer +id-version+ "ID_VERSION")
   1.808+ (:integer +bus-pci+ "BUS_PCI")
   1.809+ (:integer +bus-isapnp+ "BUS_ISAPNP")
   1.810+ (:integer +bus-usb+ "BUS_USB")
   1.811+ (:integer +bus-hil+ "BUS_HIL")
   1.812+ (:integer +bus-bluetooth+ "BUS_BLUETOOTH")
   1.813+ (:integer +bus-virtual+ "BUS_VIRTUAL")
   1.814+ (:integer +bus-isa+ "BUS_ISA")
   1.815+ (:integer +bus-i8042+ "BUS_I8042")
   1.816+ (:integer +bus-xtkbd+ "BUS_XTKBD")
   1.817+ (:integer +bus-rs232+ "BUS_RS232")
   1.818+ (:integer +bus-gameport+ "BUS_GAMEPORT")
   1.819+ (:integer +bus-parport+ "BUS_PARPORT")
   1.820+ (:integer +bus-amiga+ "BUS_AMIGA")
   1.821+ (:integer +bus-adb+ "BUS_ADB")
   1.822+ (:integer +bus-i2c+ "BUS_I2C")
   1.823+ (:integer +bus-host+ "BUS_HOST")
   1.824+ (:integer +bus-gsc+ "BUS_GSC")
   1.825+ (:integer +bus-atari+ "BUS_ATARI")
   1.826+ (:integer +bus-spi+ "BUS_SPI")
   1.827+ (:integer +bus-rmi+ "BUS_RMI")
   1.828+ (:integer +bus-cec+ "BUS_CEC")
   1.829+ (:integer +bus-intel-ishtp+ "BUS_INTEL_ISHTP")
   1.830+ (:integer +bus-amd-sfh+ "BUS_AMD_SFH")
   1.831+ (:integer +mt-tool-finger+ "MT_TOOL_FINGER")
   1.832+ (:integer +mt-tool-pen+ "MT_TOOL_PEN")
   1.833+ (:integer +mt-tool-palm+ "MT_TOOL_PALM")
   1.834+ (:integer +mt-tool-dial+ "MT_TOOL_DIAL")
   1.835+ (:integer +mt-tool-max+ "MT_TOOL_MAX")
   1.836+ (:integer +ff-status-stopped+ "FF_STATUS_STOPPED")
   1.837+ (:integer +ff-status-playing+ "FF_STATUS_PLAYING")
   1.838+ (:integer +ff-status-max+ "FF_STATUS_MAX")
   1.839+ (:integer +ff-rumble+ "FF_RUMBLE")
   1.840+ (:integer +ff-periodic+ "FF_PERIODIC")
   1.841+ (:integer +ff-constant+ "FF_CONSTANT")
   1.842+ (:integer +ff-spring+ "FF_SPRING")
   1.843+ (:integer +ff-friction+ "FF_FRICTION")
   1.844+ (:integer +ff-damper+ "FF_DAMPER")
   1.845+ (:integer +ff-inertia+ "FF_INERTIA")
   1.846+ (:integer +ff-ramp+ "FF_RAMP")
   1.847+ (:integer +ff-effect-min+ "FF_EFFECT_MIN")
   1.848+ (:integer +ff-effect-max+ "FF_EFFECT_MAX")
   1.849+ (:integer +ff-square+ "FF_SQUARE")
   1.850+ (:integer +ff-triangle+ "FF_TRIANGLE")
   1.851+ (:integer +ff-sine+ "FF_SINE")
   1.852+ (:integer +ff-saw-up+ "FF_SAW_UP")
   1.853+ (:integer +ff-saw-down+ "FF_SAW_DOWN")
   1.854+ (:integer +ff-custom+ "FF_CUSTOM")
   1.855+ (:integer +ff-waveform-min+ "FF_WAVEFORM_MIN")
   1.856+ (:integer +ff-waveform-max+ "FF_WAVEFORM_MAX")
   1.857+ (:integer +ff-gain+ "FF_GAIN")
   1.858+ (:integer +ff-autocenter+ "FF_AUTOCENTER")
   1.859+ (:integer +ff-max-effects+ "FF_MAX_EFFECTS")
   1.860+ (:integer +ff-max+ "FF_MAX")
   1.861+ (:integer +ff-cnt+ "FF_CNT"))
   1.862+
   1.863+
     2.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2+++ b/lisp/ffi/evdev/dev.lisp	Sun Sep 29 00:31:24 2024 -0400
     2.3@@ -0,0 +1,301 @@
     2.4+;;; dev.lisp --- Event Device FFI
     2.5+
     2.6+;; 
     2.7+
     2.8+;;; Code:
     2.9+(in-package :evdev)
    2.10+
    2.11+(define-alien-enum (libevdev-read-status unsigned-char)
    2.12+                   :success 0
    2.13+                   :sync 1)
    2.14+
    2.15+(define-alien-routine libevdev-next-event int
    2.16+  (dev (* libevdev))
    2.17+  (flags unsigned-int)
    2.18+  (ev (* input-event)))
    2.19+
    2.20+(define-alien-routine libevdev-has-event-pending int
    2.21+  (dev (* libevdev)))
    2.22+
    2.23+(define-alien-routine libevdev-get-name c-string
    2.24+  (dev (* libevdev)))
    2.25+
    2.26+(define-alien-routine libevdev-set-name void
    2.27+  (dev (* libevdev))
    2.28+  (name c-string))
    2.29+
    2.30+(define-alien-routine libevdev-get-phys c-string
    2.31+  (dev (* libevdev)))
    2.32+
    2.33+(define-alien-routine libevdev-set-phys void
    2.34+  (dev (* libevdev))
    2.35+  (phys c-string))
    2.36+
    2.37+(define-alien-routine libevdev-get-uniq c-string
    2.38+  (dev (* libevdev)))
    2.39+
    2.40+(define-alien-routine libevdev-set-uniq void
    2.41+  (dev (* libevdev))
    2.42+  (uniq c-string))
    2.43+
    2.44+(define-alien-routine libevdev-get-id-product int
    2.45+  (dev (* libevdev)))
    2.46+
    2.47+(define-alien-routine libevdev-set-id-product void
    2.48+  (dev (* libevdev))
    2.49+  (product-id int))
    2.50+
    2.51+(define-alien-routine libevdev-get-id-vendor int
    2.52+  (dev (* libevdev)))
    2.53+
    2.54+(define-alien-routine libevdev-set-id-vendor void
    2.55+  (dev (* libevdev))
    2.56+  (vendor-id int))
    2.57+
    2.58+(define-alien-routine libevdev-get-id-bustype int
    2.59+  (dev (* libevdev)))
    2.60+
    2.61+(define-alien-routine libevdev-set-id-bustype void
    2.62+  (dev (* libevdev))
    2.63+  (bustype int))
    2.64+
    2.65+(define-alien-routine libevdev-get-id-version int
    2.66+  (dev (* libevdev)))
    2.67+
    2.68+(define-alien-routine libevdev-set-id-version void
    2.69+  (dev (* libevdev))
    2.70+  (version int))
    2.71+
    2.72+(define-alien-routine libevdev-get-driver-version int
    2.73+  (dev (* libevdev)))
    2.74+
    2.75+(define-alien-routine libevdev-has-property int
    2.76+  (dev (* libevdev))
    2.77+  (prop unsigned-int))
    2.78+
    2.79+(define-alien-routine libevdev-enable-property int
    2.80+  (dev (* libevdev))
    2.81+  (prop unsigned-int))
    2.82+
    2.83+(define-alien-routine libevdev-disable-property int
    2.84+  (dev (* libevdev))
    2.85+  (prop unsigned-int))
    2.86+
    2.87+(define-alien-routine libevdev-has-event-type int
    2.88+  (dev (* libevdev))
    2.89+  (type unsigned-int))
    2.90+
    2.91+(define-alien-routine libevdev-has-event-code int
    2.92+  (dev (* libevdev))
    2.93+  (type unsigned-int)
    2.94+  (code unsigned-int))
    2.95+
    2.96+(define-alien-routine libevdev-get-abs-minimum int
    2.97+  (dev (* libevdev))
    2.98+  (code unsigned-int))
    2.99+
   2.100+(define-alien-routine libevdev-get-abs-maximum int
   2.101+  (dev (* libevdev))
   2.102+  (code unsigned-int))
   2.103+
   2.104+(define-alien-routine libevdev-get-abs-fuzz int
   2.105+  (dev (* libevdev))
   2.106+  (code unsigned-int))
   2.107+
   2.108+(define-alien-routine libevdev-get-abs-resolution int
   2.109+  (dev (* libevdev))
   2.110+  (code unsigned-int))
   2.111+
   2.112+(define-alien-routine libevdev-get-abs-info (* input-absinfo)
   2.113+  (dev (* libevdev))
   2.114+  (code unsigned-int))
   2.115+
   2.116+(define-alien-routine libevdev-get-event-value int
   2.117+  (dev (* libevdev))
   2.118+  (type unsigned-int)
   2.119+  (code unsigned-int))
   2.120+
   2.121+(define-alien-routine libevdev-set-event-value int
   2.122+  (dev (* libevdev))
   2.123+  (type unsigned-int)
   2.124+  (code unsigned-int)
   2.125+  (value int))
   2.126+
   2.127+(define-alien-routine libevdev-fetch-event-value int
   2.128+  (dev (* libevdev))
   2.129+  (type unsigned-int)
   2.130+  (code unsigned-int)
   2.131+  (value (* int)))
   2.132+
   2.133+(define-alien-routine libevdev-get-slot-value int
   2.134+  (dev (* libevdev))
   2.135+  (slot unsigned-int)
   2.136+  (code unsigned-int))
   2.137+
   2.138+(define-alien-routine libevdev-set-slot-value int
   2.139+  (dev (* libevdev))
   2.140+  (slot unsigned-int)
   2.141+  (code unsigned-int)
   2.142+  (value int))
   2.143+
   2.144+(define-alien-routine libevdev-fetch-slot-value int
   2.145+  (dev (* libevdev))
   2.146+  (slot unsigned-int)
   2.147+  (code unsigned-int)
   2.148+  (value (* int)))
   2.149+
   2.150+(define-alien-routine libevdev-get-num-slots int
   2.151+  (dev (* libevdev)))
   2.152+
   2.153+(define-alien-routine libevdev-get-current-slot int
   2.154+  (dev (* libevdev)))
   2.155+
   2.156+(define-alien-routine libevdev-set-abs-minimum void
   2.157+  (dev (* libevdev))
   2.158+  (code unsigned-int)
   2.159+  (val int))
   2.160+
   2.161+(define-alien-routine libevdev-set-abs-maximum void
   2.162+  (dev (* libevdev))
   2.163+  (code unsigned-int)
   2.164+  (val int))
   2.165+
   2.166+(define-alien-routine libevdev-set-abs-fuzz void
   2.167+  (dev (* libevdev))
   2.168+  (code unsigned-int)
   2.169+  (val int))
   2.170+
   2.171+(define-alien-routine libevdev-set-abs-flat void
   2.172+  (dev (* libevdev))
   2.173+  (code unsigned-int)
   2.174+  (val int))
   2.175+
   2.176+(define-alien-routine libevdev-set-abs-resolution void
   2.177+  (dev (* libevdev))
   2.178+  (code unsigned-int)
   2.179+  (val int))
   2.180+
   2.181+(define-alien-routine libevdev-set-abs-info void
   2.182+  (dev (* libevdev))
   2.183+  (code unsigned-int)
   2.184+  (abs (* input-absinfo)))
   2.185+
   2.186+(define-alien-routine libevdev-enable-event-type int
   2.187+  (dev (* libevdev))
   2.188+  (type unsigned-int))
   2.189+
   2.190+(define-alien-routine libevdev-disable-event-type int
   2.191+  (dev (* libevdev))
   2.192+  (type unsigned-int))
   2.193+
   2.194+(define-alien-routine libevdev-enable-event-code int
   2.195+  (dev (* libevdev))
   2.196+  (type unsigned-int)
   2.197+  (code unsigned-int)
   2.198+  (data (* t)))
   2.199+
   2.200+(define-alien-routine libevdev-disable-event-code int
   2.201+  (dev (* libevdev))
   2.202+  (type unsigned-int)
   2.203+  (code unsigned-int))
   2.204+
   2.205+(define-alien-routine libevdev-kernel-set-abs-info int
   2.206+  (dev (* libevdev))
   2.207+  (code unsigned-int)
   2.208+  (abs (* input-absinfo)))
   2.209+
   2.210+(define-alien-enum (libevdev-led-value unsigned-char)
   2.211+                   :on 3
   2.212+                   :off 4)
   2.213+
   2.214+(define-alien-routine libevdev-kernel-set-led-value int
   2.215+  (dev (* libevdev))
   2.216+  (code unsigned-int)
   2.217+  (value libevdev-led-value))
   2.218+
   2.219+;; (define-alien-routine libevdev-kernel-set-led-values int
   2.220+;;   (dev (* libevdev)))
   2.221+
   2.222+(define-alien-routine libevdev-set-clock-id int
   2.223+  (dev (* libevdev))
   2.224+  (clockid int))
   2.225+
   2.226+(define-alien-routine libevdev-event-is-type int
   2.227+  (ev (* input-event))
   2.228+  (type unsigned-int))
   2.229+
   2.230+(define-alien-routine libevdev-event-is-code int
   2.231+  (ev (* input-event))
   2.232+  (type unsigned-int)
   2.233+  (code unsigned-int))
   2.234+
   2.235+(define-alien-routine libevdev-event-type-get-name c-string
   2.236+  (type unsigned-int))
   2.237+
   2.238+(define-alien-routine libevdev-event-code-get-name c-string
   2.239+  (type unsigned-int)
   2.240+  (code unsigned-int))
   2.241+
   2.242+(define-alien-routine libevdev-event-value-get-name c-string
   2.243+  (type unsigned-int)
   2.244+  (code unsigned-int)
   2.245+  (value int))
   2.246+
   2.247+(define-alien-routine libevdev-property-get-name c-string
   2.248+  (prop unsigned-int))
   2.249+
   2.250+(define-alien-routine libevdev-event-type-get-max int
   2.251+  (type unsigned-int))
   2.252+
   2.253+(define-alien-routine libevdev-event-type-from-name int
   2.254+  (name c-string))
   2.255+
   2.256+(define-alien-routine libevdev-event-type-from-name-n int
   2.257+  (name c-string)
   2.258+  (len size-t))
   2.259+
   2.260+(define-alien-routine libevdev-event-code-from-name int
   2.261+  (type unsigned-int)
   2.262+  (name c-string))
   2.263+
   2.264+(define-alien-routine libevdev-event-code-from-name-n int
   2.265+  (type unsigned-int)
   2.266+  (name c-string)
   2.267+  (len size-t))
   2.268+
   2.269+(define-alien-routine libevdev-event-value-from-name int
   2.270+  (type unsigned-int)
   2.271+  (code unsigned-int)
   2.272+  (name c-string))
   2.273+
   2.274+(define-alien-routine libevdev-event-type-from-code-name int
   2.275+  (name c-string))
   2.276+
   2.277+(define-alien-routine libevdev-event-type-from-code-name-n int
   2.278+  (name c-string)
   2.279+  (len size-t))
   2.280+
   2.281+(define-alien-routine libevdev-event-code-from-code-name int
   2.282+  (name c-string))
   2.283+
   2.284+(define-alien-routine libevdev-event-code-from-code-name-n int
   2.285+  (name c-string)
   2.286+  (len size-t))
   2.287+
   2.288+(define-alien-routine libevdev-event-value-from-name-n int
   2.289+  (type unsigned-int)
   2.290+  (code unsigned-int)
   2.291+  (name c-string)
   2.292+  (len size-t))
   2.293+
   2.294+(define-alien-routine libevdev-property-from-name int
   2.295+  (name c-string))
   2.296+
   2.297+(define-alien-routine libevdev-property-from-name-n int
   2.298+  (name c-string)
   2.299+  (len size-t))
   2.300+
   2.301+(define-alien-routine libevdev-get-repeat int
   2.302+  (dev (* libevdev))
   2.303+  (delay (* int))
   2.304+  (period (* int)))
     3.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2+++ b/lisp/ffi/evdev/evdev.asd	Sun Sep 29 00:31:24 2024 -0400
     3.3@@ -0,0 +1,29 @@
     3.4+;;; evdev.asd --- Evdev Sytem Definitions
     3.5+
     3.6+;; libevdev for lisp.
     3.7+
     3.8+;;; Commentary:
     3.9+
    3.10+;; https://gitlab.freedesktop.org/libevdev/libevdev
    3.11+
    3.12+;;; Code:
    3.13+(eval-when (:compile-toplevel :load-toplevel :execute)
    3.14+  (require :sb-grovel))
    3.15+
    3.16+(defpackage :evdev.sys
    3.17+  (:use :cl :asdf :sb-grovel :sb-alien))
    3.18+
    3.19+(in-package :evdev.sys)
    3.20+
    3.21+(defsystem :evdev
    3.22+  :depends-on (:std :sb-grovel)
    3.23+  :components ((:file "pkg")
    3.24+               (grovel-constants-file "constants" :package :evdev)
    3.25+               (:file "input")
    3.26+               (:file "dev"))
    3.27+  :in-order-to ((test-op (test-op "evdev/tests"))))
    3.28+
    3.29+(defsystem :evdev/tests
    3.30+  :depends-on (:rt :evdev :xkb)
    3.31+  :components ((:file "tests"))
    3.32+  :perform (test-op (op c) (uiop:symbol-call :rt :do-tests :btrfs)))
     4.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2+++ b/lisp/ffi/evdev/input.lisp	Sun Sep 29 00:31:24 2024 -0400
     4.3@@ -0,0 +1,116 @@
     4.4+;;; input.lisp --- Linux Input Subsystem Wrappers
     4.5+
     4.6+;; 
     4.7+
     4.8+;;; Code:
     4.9+(in-package :evdev/input)
    4.10+
    4.11+;; from linux/time.h
    4.12+(define-alien-type timeval
    4.13+    (struct timeval
    4.14+            (tv-sec sb-unix:time-t)
    4.15+            (tv-nsec long)))
    4.16+
    4.17+(define-alien-type input-event
    4.18+    (struct input-event
    4.19+            (time timeval)
    4.20+            (type (unsigned 16))
    4.21+            (code (unsigned 16))
    4.22+            (value (signed 32))))
    4.23+
    4.24+(define-alien-type input-id
    4.25+    (struct input-id
    4.26+            (bustype (unsigned 16))
    4.27+            (vendor (unsigned 16))
    4.28+            (product (unsigned 16))
    4.29+            (version (unsigned 16))))
    4.30+
    4.31+(define-alien-type input-absinfo
    4.32+    (struct input-absinfo
    4.33+            (value signed)
    4.34+            (minimum signed)
    4.35+            (maximum signed)
    4.36+            (fuzz signed)
    4.37+            (flat signed)
    4.38+            (resolution signed)))
    4.39+
    4.40+(define-alien-type input-keymap-entry
    4.41+    (struct input-keymap-entry
    4.42+            (flags unsigned-char)
    4.43+            (len unsigned-char)
    4.44+            (index unsigned-short)
    4.45+            (keycode unsigned)
    4.46+            (scancode (array (unsigned 8) 32))))
    4.47+
    4.48+(define-alien-type input-mask
    4.49+    (struct input-mask
    4.50+            (type unsigned)
    4.51+            (codes-size unsigned)
    4.52+            (codes-ptr (unsigned 64))))
    4.53+
    4.54+(define-alien-type ff-replay
    4.55+    (struct ff-replay
    4.56+            (length unsigned-short)
    4.57+            (delay unsigned-short)))
    4.58+
    4.59+(define-alien-type ff-trigger
    4.60+    (struct ff-trigger
    4.61+            (button unsigned-short)
    4.62+            (interval unsigned-short)))
    4.63+
    4.64+(define-alien-type ff-envelope
    4.65+    (struct ff-envelope
    4.66+            (attack-length unsigned-short)
    4.67+            (attack-level unsigned-short)
    4.68+            (fade-length unsigned-short)
    4.69+            (fade-level unsigned-short)))
    4.70+
    4.71+(define-alien-type ff-constant-effect
    4.72+    (struct ff-constant-effect
    4.73+            (level short)
    4.74+            (envelop ff-envelope)))
    4.75+
    4.76+(define-alien-type ff-ramp-effect
    4.77+    (struct ff-ramp-effect
    4.78+            (start-level short)
    4.79+            (end-level short)
    4.80+            (envelope ff-envelope)))
    4.81+
    4.82+(define-alien-type ff-condition-effect
    4.83+    (struct ff-condition-effect
    4.84+            (right-saturation unsigned-short)
    4.85+            (left-saturation unsigned-short)
    4.86+            (right-coeff short)
    4.87+            (left-coeff short)
    4.88+            (deadband unsigned-short)
    4.89+            (center short)))
    4.90+
    4.91+(define-alien-type ff-periodic-effect
    4.92+    (struct ff-periodic-effect
    4.93+            (waveform unsigned-short)
    4.94+            (period unsigned-short)
    4.95+            (magnitutde short)
    4.96+            (offset short)
    4.97+            (phase unsigned-short)
    4.98+            (envelope ff-envelope)
    4.99+            (custom-len unsigned)
   4.100+            (custom-data (* short))))
   4.101+
   4.102+(define-alien-type ff-rumble-effect
   4.103+    (struct ff-rumble-effect
   4.104+            (strong-magnitutde unsigned-short)
   4.105+            (weak-magnitude unsigned-short)))
   4.106+
   4.107+(define-alien-type ff-effect
   4.108+    (struct ff-effect
   4.109+            (type unsigned-short)
   4.110+            (id short)
   4.111+            (direction unsigned-short)
   4.112+            (trigger ff-trigger)
   4.113+            (replay ff-replay)
   4.114+            (u (sb-alien:union u 
   4.115+                               (constant ff-constant-effect)
   4.116+                               (ramp ff-ramp-effect)
   4.117+                               (periodic ff-periodic-effect)
   4.118+                               (condition (array ff-condition-effect 2))
   4.119+                               (rumble ff-rumble-effect)))))
     5.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2+++ b/lisp/ffi/evdev/pkg.lisp	Sun Sep 29 00:31:24 2024 -0400
     5.3@@ -0,0 +1,103 @@
     5.4+;;; pkg.lisp --- libevdev FFI
     5.5+
     5.6+;; 
     5.7+
     5.8+;;; Commentary:
     5.9+
    5.10+;; note that we also wrap the linux input subsystem linux/input.h which does
    5.11+;; not require loading of the libevdev shared library. See input.lisp.
    5.12+
    5.13+;;; Code:
    5.14+(defpackage :evdev/input
    5.15+  (:use :cl :std :sb-alien)
    5.16+  (:export
    5.17+   #:input-event
    5.18+   #:input-absinfo))
    5.19+
    5.20+(defpackage :evdev
    5.21+  (:use :cl :std :sb-alien :evdev/input)
    5.22+  (:export))
    5.23+
    5.24+(in-package :evdev)
    5.25+(define-alien-loader "evdev" t "/usr/lib/")
    5.26+
    5.27+(define-alien-type libevdev (struct libevdev))
    5.28+
    5.29+(define-alien-enum (libevdev-read-flag unsigned-char)
    5.30+                   :sync 1
    5.31+                   :normal 2
    5.32+                   :force-sync 4
    5.33+                   :blocking 8)
    5.34+
    5.35+(define-alien-routine libevdev-new (* libevdev))
    5.36+
    5.37+(define-alien-routine libevdev-new-from-fd int
    5.38+  (fd int)
    5.39+  (dev (* (* libevdev))))
    5.40+
    5.41+(define-alien-routine libevdev-free void
    5.42+  (dev (* libevdev)))
    5.43+
    5.44+(define-alien-enum (libevdev-log-priority unsigned-char)
    5.45+                   :error 10
    5.46+                   :info 20
    5.47+                   :debug 30)
    5.48+
    5.49+
    5.50+;; close enough
    5.51+(define-alien-type va-list (struct va-list
    5.52+                                   (gp-offset unsigned-int)
    5.53+                                   (fp-offset unsigned-int)
    5.54+                                   (overflow-arg-area (* t))
    5.55+                                   (reg-save-area (* t))))
    5.56+
    5.57+(define-alien-type libevdev-log-function 
    5.58+  (function void
    5.59+            libevdev-log-priority
    5.60+            (* t)
    5.61+            c-string
    5.62+            int
    5.63+            c-string
    5.64+            c-string
    5.65+            va-list))
    5.66+
    5.67+(define-alien-routine libevdev-set-log-function void
    5.68+  (logfunc libevdev-log-function)
    5.69+  (data (* t)))
    5.70+
    5.71+(define-alien-routine libevdev-set-log-priority void
    5.72+  (priority libevdev-log-priority))
    5.73+
    5.74+(define-alien-routine libevdev-get-log-priority libevdev-log-priority)
    5.75+
    5.76+(define-alien-type libevdev-device-log-function
    5.77+  (function void
    5.78+            (* libevdev)
    5.79+            libevdev-log-priority
    5.80+            (* t)
    5.81+            c-string
    5.82+            int
    5.83+            c-string
    5.84+            c-string
    5.85+            va-list))
    5.86+
    5.87+(define-alien-routine libevdev-set-device-log-function void
    5.88+  (dev (* libevdev))
    5.89+  (logfunc libevdev-device-log-function)
    5.90+  (priority libevdev-log-priority)
    5.91+  (data (* t)))
    5.92+
    5.93+(define-alien-enum (libevdev-grab-mode unsigned-char)
    5.94+                   :grab 3
    5.95+                   :ungrab 4)
    5.96+
    5.97+(define-alien-routine libevdev-grab int
    5.98+  (dev (* libevdev))
    5.99+  (grab libevdev-grab-mode))
   5.100+
   5.101+(define-alien-routine libevdev-set-fd int
   5.102+  (dev (* libevdev))
   5.103+  (fd int))
   5.104+
   5.105+(define-alien-routine libevdev-get-fd int
   5.106+  (dev (* libevdev)))
     6.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2+++ b/lisp/ffi/evdev/tests.lisp	Sun Sep 29 00:31:24 2024 -0400
     6.3@@ -0,0 +1,28 @@
     6.4+;;; tests.lisp --- evdev FFI tests
     6.5+
     6.6+;; 
     6.7+
     6.8+;;; Code:
     6.9+(defpackage :evdev/tests
    6.10+  (:use :cl :std :log :rt :sb-alien :evdev))
    6.11+(in-package :evdev/tests)
    6.12+(defsuite :evdev)
    6.13+(in-suite :evdev)
    6.14+(load-evdev nil)
    6.15+(deftest sanity ())
    6.16+  
    6.17+#|
    6.18+struct libevdev *dev;
    6.19+int err;
    6.20+
    6.21+dev = libevdev_new();
    6.22+if (!dev)
    6.23+        return ENOMEM;
    6.24+
    6.25+err = libevdev_set_fd(dev, fd);
    6.26+if (err < 0)
    6.27+        printf("Failed (errno %d): %s\n", -err, strerror(-err));
    6.28+
    6.29+libevdev_free(dev);
    6.30+|#
    6.31+(deftest basic ())
     7.1--- a/lisp/ffi/xkb/constants.lisp	Sat Sep 28 17:48:06 2024 -0400
     7.2+++ b/lisp/ffi/xkb/constants.lisp	Sun Sep 29 00:31:24 2024 -0400
     7.3@@ -1,12 +1,12 @@
     7.4 ("stdint.h" "stdio.h" "stdarg.h" "xkbcommon/xkbcommon-names.h" "xkbcommon/xkbcommon-keysyms.h" "xkbcommon/xkbcommon.h" "xkbcommon/xkbregistry.h" "xkbcommon/xkbcommon-compose.h")
     7.5 
     7.6-((:integer xkb-keycode-invalid "XKB_KEYCODE_INVALID" nil t)
     7.7- (:integer xkb-layout-invalid "XKB_LAYOUT_INVALID" nil t)
     7.8- (:integer xkb-level-invalid "XKB_LEVEL_INVALID" nil t)
     7.9- (:integer xkb-mod-invalid "XKB_MOD_INVALID" nil t)
    7.10- (:integer xkb-led-invalid "XKB_LED_INVALID" nil t)
    7.11- (:integer xkb-keycode-max "XKB_KEYCODE_MAX" nil t)
    7.12- (:integer xkb-keysym-max "XKB_KEYSYM_MAX" nil t)
    7.13+((:integer +xkb-keycode-invalid+ "XKB_KEYCODE_INVALID")
    7.14+ (:integer +xkb-layout-invalid+ "XKB_LAYOUT_INVALID")
    7.15+ (:integer +xkb-level-invalid+ "XKB_LEVEL_INVALID")
    7.16+ (:integer +xkb-mod-invalid+ "XKB_MOD_INVALID")
    7.17+ (:integer +xkb-led-invalid+ "XKB_LED_INVALID")
    7.18+ (:integer +xkb-keycode-max+ "XKB_KEYCODE_MAX")
    7.19+ (:integer +xkb-keysym-max+ "XKB_KEYSYM_MAX")
    7.20  ;; (:enum xkb-keymap-format ((xkb-keymap-format-text-v1 "XKB_KEYMAP_FORMAT_TEXT_V1")))
    7.21  ;; (:enum xkb-log-level ((xkb-log-level-critical "XKB_LOG_LEVEL_CRITICAL")
    7.22  ;;                       (xkb-log-level-error "XKB_LOG_LEVEL_ERROR")
    7.23@@ -14,7 +14,7 @@
    7.24  ;;                       (xkb-log-level-info "XKB_LOG_LEVEL_INFO")
    7.25  ;;                       (xkb-log-level-debug "XKB_LOG_LEVEL_DEBUG")) nil t)
    7.26  ;; (:enum xkb-keymap-compile-flags ((xkb-keymap-compile-no-flags "XKB_KEYMAP_COMPILE_NO_FLAGS")) nil t)
    7.27- (:integer xkb-keymap-use-original-format "XKB_KEYMAP_USE_ORIGINAL_FORMAT" nil t)
    7.28+ (:integer +xkb-keymap-use-original-format+ "XKB_KEYMAP_USE_ORIGINAL_FORMAT")
    7.29  ;; (:enum xkb-key-direction ((xkb-key-up "XKB_KEY_UP")
    7.30  ;;                           (xkb-key-down "XKB_KEY_DOWN")))
    7.31  ;; (:enum xkb-state-component ((xkb-state-mods-depressed "XKB_STATE_MODS_DEPRESSED")
     8.1--- a/lisp/ffi/xkb/pkg.lisp	Sat Sep 28 17:48:06 2024 -0400
     8.2+++ b/lisp/ffi/xkb/pkg.lisp	Sun Sep 29 00:31:24 2024 -0400
     8.3@@ -41,10 +41,18 @@
     8.4 (define-alien-type xkb-mod-mask unsigned-int)
     8.5 (define-alien-type xkb-led-index unsigned-int)
     8.6 (define-alien-type xkb-led-mask unsigned-int)
     8.7-;; TODO 2024-05-09: 
     8.8-;; (define-alien-type xkb-keysym-flags boolean)
     8.9-;; (define-alien-type xkb-context-flags unsigned-char)
    8.10-;; (define-alien-type xkb-keymap-compile-flags boolean)
    8.11+
    8.12+(define-alien-enum (xkb-keysym-flags unsigned-char)
    8.13+                   :no-flags 0
    8.14+                   :case-insensitive (ash 1 0))
    8.15+(define-alien-enum (xkb-context-flags unsigned-char)
    8.16+                   :no-flags 0
    8.17+                   :no-default-includes (ash 1 0)
    8.18+                   :no-environment-names (ash 1 1)
    8.19+                   :no-secure-getenv (ash 1 2))
    8.20+
    8.21+(define-alien-enum (xkb-keymap-compile-flags unsigned-char)
    8.22+                   :no-flags 0)
    8.23 (define-alien-type xkb-keymap-format boolean)
    8.24 
    8.25 (define-alien-type xkb-rule-names
    8.26@@ -55,15 +63,14 @@
    8.27             (variant c-string)
    8.28             (options c-string)))
    8.29 
    8.30-;; TODO 2024-05-09: 
    8.31-;; (define-alien-routine xkb-keysym-get-name int
    8.32-;;   (keysym xkb-keysym-flags)
    8.33-;;   (buffer c-string)
    8.34-;;   (size size-t))
    8.35+(define-alien-routine xkb-keysym-get-name int
    8.36+  (keysym xkb-keysym)
    8.37+  (buffer (* char))
    8.38+  (size size-t))
    8.39 
    8.40-;; (define-alien-routine xkb-keysym-from-name xkb-keysym
    8.41-;;   (name c-string)
    8.42-;;   (flags xkb-keysym-flags))
    8.43+(define-alien-routine xkb-keysym-from-name xkb-keysym
    8.44+  (name c-string)
    8.45+  (flags xkb-keysym-flags))
    8.46 
    8.47 (define-alien-routine xkb-keysym-to-utf8 int
    8.48   (keysym xkb-keysym)
    8.49@@ -82,8 +89,8 @@
    8.50 (define-alien-routine xkb-keysym-to-lower xkb-keysym
    8.51   (ks xkb-keysym))
    8.52 
    8.53-;; (define-alien-routine xkb-context-new (* xkb-context)
    8.54-;;   (flags xkb-context-flags))
    8.55+(define-alien-routine xkb-context-new (* xkb-context)
    8.56+  (flags xkb-context-flags))
    8.57 
    8.58 (define-alien-routine xkb-context-set-user-data void
    8.59   (context (* xkb-context))
    8.60@@ -117,30 +124,29 @@
    8.61 
    8.62 ;;; Keymap Init
    8.63 
    8.64-;; TODO 2024-05-09: 
    8.65-;; (define-alien-routine xkb-keymap-new-from-names (* xkb-keymap)
    8.66-;;   (context (* xkb-context))
    8.67-;;   (names (* xkb-rule-names))
    8.68-;;   (flags xkb-keymap-compile-flags))
    8.69+(define-alien-routine xkb-keymap-new-from-names (* xkb-keymap)
    8.70+  (context (* xkb-context))
    8.71+  (names (* xkb-rule-names))
    8.72+  (flags xkb-keymap-compile-flags))
    8.73 
    8.74-;; (define-alien-routine xkb-keymap-new-from-file (* xkb-keymap)
    8.75-;;   (context (* xkb-context))
    8.76-;;   (file (* t))
    8.77-;;   (fmt xkb-keymap-format)
    8.78-;;   (flags xkb-keymap-compile-flags))
    8.79+(define-alien-routine xkb-keymap-new-from-file (* xkb-keymap)
    8.80+  (context (* xkb-context))
    8.81+  (file (* t))
    8.82+  (fmt xkb-keymap-format)
    8.83+  (flags xkb-keymap-compile-flags))
    8.84 
    8.85-;; (define-alien-routine xkb-keymap-new-from-string (* xkb-keymap)
    8.86-;;   (context (* xkb-context))
    8.87-;;   (str c-string)
    8.88-;;   (fmt xkb-keymap-format)
    8.89-;;   (flags xkb-keymap-compile-flags))
    8.90+(define-alien-routine xkb-keymap-new-from-string (* xkb-keymap)
    8.91+  (context (* xkb-context))
    8.92+  (str c-string)
    8.93+  (fmt xkb-keymap-format)
    8.94+  (flags xkb-keymap-compile-flags))
    8.95 
    8.96-;; (define-alien-routine xkb-keymap-new-from-buffer (* xkb-keymap)
    8.97-;;   (context (* xkb-context))
    8.98-;;   (buffer c-string)
    8.99-;;   (length size-t)
   8.100-;;   (fmt xkb-keymap-format)
   8.101-;;   (flags xkb-keymap-compile-flags))
   8.102+(define-alien-routine xkb-keymap-new-from-buffer (* xkb-keymap)
   8.103+  (context (* xkb-context))
   8.104+  (buffer c-string)
   8.105+  (length size-t)
   8.106+  (fmt xkb-keymap-format)
   8.107+  (flags xkb-keymap-compile-flags))
   8.108 
   8.109 ;;; Keymap Components
   8.110 
   8.111@@ -217,5 +223,249 @@
   8.112   (key xkb-keycode))
   8.113 
   8.114 ;;; TODO Keyboard State
   8.115+(define-alien-routine xkb-state-new (* xkb-state) (keymap (* xkb-keymap)))
   8.116+(define-alien-routine xkb-state-ref (* xkb-state) (state (* xkb-state)))
   8.117+(define-alien-routine xkb-state-unref void (state (* xkb-state)))
   8.118+(define-alien-routine xkb-state-get-keymap (* xkb-keymap) (state (* xkb-state)))
   8.119 
   8.120-;;; TODO Compose/Dead-keys support
   8.121+(define-alien-enum (xkb-key-direction unsigned-char)
   8.122+                   :up 0
   8.123+                   :down 1)
   8.124+
   8.125+(define-alien-enum (xkb-state-component int)
   8.126+                   :mods-depressed (ash 1 0)
   8.127+                   :mods-latched (ash 1 1)
   8.128+                   :mods-locked (ash 1 2)
   8.129+                   :mods-effective (ash 1 3)
   8.130+                   :layout-depressed (ash 1 4)
   8.131+                   :layout-latched (ash 1 5)
   8.132+                   :layout-locked (ash 1 6)
   8.133+                   :layout-effective (ash 1 7)
   8.134+                   :leds (ash 1 8))
   8.135+
   8.136+(define-alien-routine xkb-state-update-key xkb-state-component
   8.137+  (state (* xkb-state))
   8.138+  (key xkb-keycode)
   8.139+  (direction xkb-key-direction))
   8.140+
   8.141+(define-alien-routine xkb-state-update-mask xkb-state-component
   8.142+  (state (* xkb-state))
   8.143+  (depressed-mods xkb-mod-mask)
   8.144+  (latched-mods xkb-mod-mask)
   8.145+  (locked-mods xkb-mod-mask)
   8.146+  (depressed-layout xkb-mod-mask)
   8.147+  (latched-layout xkb-mod-mask)
   8.148+  (locked-layout xkb-mod-mask))
   8.149+
   8.150+(define-alien-routine xkb-state-key-get-syms int
   8.151+  (state (* xkb-state))
   8.152+  (key xkb-keycode)
   8.153+  (syms-out (* (* xkb-keysym))))
   8.154+
   8.155+(define-alien-routine xkb-state-key-get-utf8 int
   8.156+  (state (* xkb-state))
   8.157+  (key xkb-keycode)
   8.158+  (buffer (* char))
   8.159+  (size size-t))
   8.160+
   8.161+(define-alien-routine xkb-state-key-get-utf32 int
   8.162+  (state (* xkb-state))
   8.163+  (key xkb-keycode))
   8.164+
   8.165+(define-alien-routine xkb-state-key-get-one-sym xkb-keysym
   8.166+  (state (* xkb-state))
   8.167+  (key xkb-keycode))
   8.168+
   8.169+(define-alien-routine xkb-state-key-get-layout xkb-layout-index
   8.170+  (state (* xkb-state))
   8.171+  (key xkb-keycode))
   8.172+
   8.173+(define-alien-routine xkb-state-key-get-level xkb-level-index
   8.174+  (state (* xkb-state))
   8.175+  (key xkb-keycode)
   8.176+  (layout xkb-layout-index))
   8.177+
   8.178+(define-alien-enum (xkb-state-match int)
   8.179+                   :any (ash 1 0)
   8.180+                   :all (ash 1 1)
   8.181+                   :non-exclusive (ash 1 16))
   8.182+
   8.183+(define-alien-routine xkb-state-serialize-mods xkb-mod-mask
   8.184+  (state (* xkb-state))
   8.185+  (components xkb-state-component))
   8.186+
   8.187+(define-alien-routine xkb-state-serialize-layout xkb-layout-index
   8.188+  (state (* xkb-state))
   8.189+  (components xkb-state-component))
   8.190+
   8.191+(define-alien-routine xkb-state-mod-name-is-active int
   8.192+  (state (* xkb-state))
   8.193+  (name (* char))
   8.194+  (type xkb-state-component))
   8.195+
   8.196+(define-alien-routine xkb-state-mod-names-are-active int
   8.197+  (state (* xkb-state))
   8.198+  (type xkb-state-component)
   8.199+  (match xkb-state-match)
   8.200+  #+nil ...)
   8.201+
   8.202+(define-alien-routine xkb-state-mod-index-is-active int
   8.203+  (state (* xkb-state))
   8.204+  (idx xkb-mod-index)
   8.205+  (type xkb-state-component))
   8.206+
   8.207+(define-alien-routine xkb-state-mod-indices-are-active int
   8.208+  (state (* xkb-state))
   8.209+  (type xkb-state-component)
   8.210+  (match xkb-state-match)
   8.211+  #+nil ...)
   8.212+
   8.213+(define-alien-enum (xkb-consumed-mode int)
   8.214+                   :xkb 0
   8.215+                   :gtk 1)
   8.216+
   8.217+(define-alien-routine xkb-state-key-get-consumed-mods2 xkb-mod-mask
   8.218+  (state (* xkb-state))
   8.219+  (key xkb-keycode)
   8.220+  (mode xkb-consumed-mode))
   8.221+
   8.222+(define-alien-routine xkb-state-key-get-consumed-mods xkb-mod-mask
   8.223+  (state (* xkb-state))
   8.224+  (key xkb-keycode))
   8.225+
   8.226+(define-alien-routine xkb-state-mod-index-is-consumed2 int
   8.227+  (state (* xkb-state))
   8.228+  (key xkb-keycode)
   8.229+  (idx xkb-mod-index)
   8.230+  (mode xkb-consumed-mode))
   8.231+
   8.232+(define-alien-routine xkb-state-mod-index-is-consumed int
   8.233+  (state (* xkb-state))
   8.234+  (key xkb-keycode)
   8.235+  (idx xkb-mod-index))
   8.236+
   8.237+(define-alien-routine xkb-state-mode-mask-remove-consumed xkb-mod-mask
   8.238+  (state (* xkb-state))
   8.239+  (key xkb-keycode)
   8.240+  (mask xkb-mod-mask))
   8.241+
   8.242+(define-alien-routine xkb-state-layout-name-is-active int
   8.243+  (state (* xkb-state))
   8.244+  (name (* char))
   8.245+  (type xkb-state-component))
   8.246+
   8.247+(define-alien-routine xkb-state-layout-index-is-active int
   8.248+  (state (* xkb-state))
   8.249+  (idx xkb-layout-index)
   8.250+  (type xkb-state-component))
   8.251+
   8.252+(define-alien-routine xkb-state-led-name-is-active int
   8.253+  (state (* xkb-state))
   8.254+  (name (* char)))
   8.255+
   8.256+(define-alien-routine xkb-state-led-index-is-active int
   8.257+  (state (* xkb-state))
   8.258+  (idx xkb-led-index))
   8.259+
   8.260+;;; xkbcommon-compose.h
   8.261+(define-alien-type xkb-compose-table (struct xkb-compose-table))
   8.262+
   8.263+(define-alien-type xkb-compose-state (struct xkb-compose-state))
   8.264+
   8.265+(define-alien-enum (xkb-compose-compile-flags unsigned-char)
   8.266+                   :no-flags 0)
   8.267+
   8.268+(define-alien-enum (xkb-compose-format unsigned-char)
   8.269+                   :text-v1 1)
   8.270+
   8.271+(define-alien-routine xkb-compose-table-new-from-locale (* xkb-compose-table)
   8.272+  (context (* xkb-context))
   8.273+  (locale (* char))
   8.274+  (flags xkb-compose-compile-flags))
   8.275+
   8.276+(define-alien-routine xkb-compose-table-new-from-file (* xkb-compose-table)
   8.277+  (file (* t)) ;;FILE
   8.278+  (locale (* char))
   8.279+  (format xkb-compose-format)
   8.280+  (flags xkb-compose-compile-flags))
   8.281+
   8.282+(define-alien-routine xkb-compose-table-new-from-buffer (* xkb-compose-table)
   8.283+  (context (* xkb-context))
   8.284+  (buffer (* char))
   8.285+  (length size-t)
   8.286+  (locale (* char))
   8.287+  (format xkb-compose-format)
   8.288+  (flags xkb-compose-compile-flags))
   8.289+
   8.290+(define-alien-routine xkb-compose-table-ref (* xkb-compose-table)
   8.291+  (table (* xkb-compose-table)))
   8.292+
   8.293+(define-alien-routine xkb-compose-table-unref void
   8.294+  (table (* xkb-compose-table)))
   8.295+
   8.296+(define-alien-type xkb-compose-table-entry (struct xkb-compose-table-entry))
   8.297+
   8.298+(define-alien-routine xkb-compose-table-entry-sequence (* xkb-keysym)
   8.299+  (entry (* xkb-compose-table-entry))
   8.300+  (sequence-length (* size-t)))
   8.301+
   8.302+(define-alien-routine xkb-compose-table-entry-keysym xkb-keysym
   8.303+  (entry (* xkb-compose-table-entry)))
   8.304+
   8.305+(define-alien-routine xkb-compose-table-entry-utf8 (* char)
   8.306+  (entry (* xkb-compose-table-entry)))
   8.307+
   8.308+(define-alien-type xkb-compose-table-iterator (struct xkb-compose-table-iterator))
   8.309+
   8.310+(define-alien-routine xkb-compose-table-iterator-new (* xkb-compose-table-iterator)
   8.311+  (table (* xkb-compose-table)))
   8.312+
   8.313+(define-alien-routine xkb-compose-table-iterator-free void
   8.314+  (iter (* xkb-compose-table-iterator)))
   8.315+
   8.316+(define-alien-routine xkb-compose-table-iterator-next (* xkb-compose-table-entry)
   8.317+  (iter (* xkb-compose-table-iterator)))
   8.318+
   8.319+(define-alien-enum (xkb-compose-state-flags int)
   8.320+                   :no-flags 0)
   8.321+
   8.322+(define-alien-routine xkb-compose-state-new (* xkb-compose-state)
   8.323+  (table (* xkb-compose-table))
   8.324+  (flags xkb-compose-state-flags))
   8.325+
   8.326+(define-alien-routine xkb-compose-state-ref (* xkb-compose-state)
   8.327+  (state (* xkb-compose-state)))
   8.328+
   8.329+(define-alien-routine xkb-compose-state-unref void
   8.330+  (state (* xkb-compose-state)))
   8.331+
   8.332+(define-alien-routine xkb-compose-state-get-compose-table (* xkb-compose-table)
   8.333+  (state (* xkb-compose-state)))
   8.334+
   8.335+(define-alien-enum (xkb-compose-status unsigned-char)
   8.336+                   :nothing 0
   8.337+                   :composing 1
   8.338+                   :composed 2
   8.339+                   :cancelled 3)
   8.340+
   8.341+(define-alien-enum (xkb-compose-feed-result unsigned-char)
   8.342+                   :ignored 0
   8.343+                   :accepted 1)
   8.344+
   8.345+(define-alien-routine xkb-compose-state-feed xkb-compose-feed-result
   8.346+  (state (* xkb-compose-state))
   8.347+  (keysym xkb-keysym))
   8.348+
   8.349+(define-alien-routine xkb-compose-state-reset void
   8.350+  (state (* xkb-compose-state)))
   8.351+
   8.352+(define-alien-routine xkb-compose-state-get-status xkb-compose-status
   8.353+  (state (* xkb-compose-state)))
   8.354+
   8.355+(define-alien-routine xkb-compose-state-get-utf8 int
   8.356+  (state (* xkb-compose-state))
   8.357+  (buffer (* char))
   8.358+  (size size-t))
   8.359+
   8.360+(define-alien-routine xkb-compose-state-get-one-sym xkb-keysym
   8.361+  (state (* xkb-compose-state)))
     9.1--- a/lisp/ffi/xkb/tests.lisp	Sat Sep 28 17:48:06 2024 -0400
     9.2+++ b/lisp/ffi/xkb/tests.lisp	Sun Sep 29 00:31:24 2024 -0400
     9.3@@ -7,4 +7,14 @@
     9.4 (load-xkbcommon)
     9.5 
     9.6 (deftest xkb-basic ()
     9.7-  (is (= xkb:xkb-keysym-max 536870911)))
     9.8+  (is (= xkb:xkb-keysym-max 536870911))
     9.9+  (let* ((ctx (xkb:xkb-context-new (xkb-context-flags :no-flags)))
    9.10+         (map (xkb::xkb-keymap-new-from-names ctx nil (xkb::xkb-keymap-compile-flags :no-flags)))
    9.11+         (state (xkb::xkb-state-new map)))
    9.12+    (sb-alien:with-alien ((buf (* sb-alien:char) (sb-alien:make-alien char 64)))
    9.13+      (xkb::xkb-keysym-get-name (xkb::xkb-state-key-get-one-sym state 10) buf 64)
    9.14+      (is (string= "1" (sb-alien:cast buf sb-alien:c-string))))
    9.15+    (sb-alien:with-alien ((syms (* (* xkb-keysym)) (sb-alien:make-alien (* xkb-keysym) 20)))
    9.16+      (is (= 1 (xkb::xkb-state-key-get-syms state 10 syms)))
    9.17+      (is (= 49 (sb-alien:deref (sb-alien:deref syms 0)))))))
    9.18+                                
    10.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2+++ b/lisp/ffi/xkb/x11.lisp	Sun Sep 29 00:31:24 2024 -0400
    10.3@@ -0,0 +1,6 @@
    10.4+;;; x11.lisp --- XKB X11-exclusive FFI
    10.5+
    10.6+;; 
    10.7+
    10.8+;;; Code:
    10.9+(in-package :xkb)
    11.1--- a/lisp/ffi/xkb/xkb.asd	Sat Sep 28 17:48:06 2024 -0400
    11.2+++ b/lisp/ffi/xkb/xkb.asd	Sun Sep 29 00:31:24 2024 -0400
    11.3@@ -11,7 +11,8 @@
    11.4   :depends-on (:std)
    11.5   :components ((:file "pkg")
    11.6                (grovel-constants-file "constants"
    11.7-                                      :package :xkb))
    11.8+                                      :package :xkb)
    11.9+               (:file "x11"))
   11.10   :in-order-to ((test-op (test-op :xkb/tests))))
   11.11 
   11.12 (defsystem :xkb/tests
    12.1--- a/lisp/lib/cli/ed.lisp	Sat Sep 28 17:48:06 2024 -0400
    12.2+++ b/lisp/lib/cli/ed.lisp	Sun Sep 29 00:31:24 2024 -0400
    12.3@@ -6,8 +6,8 @@
    12.4 (in-package :cli/ed)
    12.5 
    12.6 (defun run-emacs (&optional file args)
    12.7-  (sb-ext:run-program (find-exe "emacs") `(,@(when file (list file)) ,@args :wait nil :output nil)))
    12.8-
    12.9+  (sb-ext:run-program (find-exe "emacs") `(,@(when file (list file)) ,@args)))
   12.10+  
   12.11 (defun run-emacsclient (&optional (file ".") (create-frame t))
   12.12   (sb-ext:run-program (find-exe "emacsclient")
   12.13                       `(,file ,@(when create-frame (list "-c")) "-a=")
    13.1--- a/lisp/lib/io/io.asd	Sat Sep 28 17:48:06 2024 -0400
    13.2+++ b/lisp/lib/io/io.asd	Sun Sep 29 00:31:24 2024 -0400
    13.3@@ -1,6 +1,11 @@
    13.4 (defsystem :io
    13.5   :description "Lisp IO Interface"
    13.6-  :depends-on (:cl-ppcre :std :obj (:feature :linux :uring) :sb-bsd-sockets :zstd :flexi-streams)
    13.7+  :depends-on (:cl-ppcre 
    13.8+               :std :obj 
    13.9+               (:feature :linux :uring) 
   13.10+               (:feature :linux :xkb) 
   13.11+               (:feature :linux :evdev)
   13.12+               :sb-bsd-sockets :zstd :flexi-streams)
   13.13   :version "0.1.0"
   13.14   :serial t
   13.15   :components ((:file "pkg")
   13.16@@ -11,6 +16,7 @@
   13.17                (:file "flate")
   13.18                (:file "port")
   13.19                (:file "zstd")
   13.20+               (:file "kbd")
   13.21                (:file "xsubseq")
   13.22                (:file "smart-buffer"))
   13.23   :in-order-to ((test-op (test-op "io/tests"))))
    14.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2+++ b/lisp/lib/io/kbd.lisp	Sun Sep 29 00:31:24 2024 -0400
    14.3@@ -0,0 +1,37 @@
    14.4+;;; kbd.lisp --- Keyboard-based IO
    14.5+
    14.6+;; Keyboard-like devices and input
    14.7+
    14.8+;;; Commentary:
    14.9+
   14.10+;; refs:
   14.11+
   14.12+;; - https://www.kernel.org/doc/Documentation/input/event-codes.txt
   14.13+
   14.14+;;; Code:
   14.15+(in-package :io/kbd)
   14.16+(load-xkbcommon)
   14.17+
   14.18+(deferror kbd-error () ())
   14.19+
   14.20+(defstruct keyboard path state compose-state)
   14.21+
   14.22+(defconstant +evdev-offset+ 8)
   14.23+
   14.24+(defun evdev-bit-is-set (array bit))
   14.25+
   14.26+(defun keyboard-device-p (path))
   14.27+  ;; (sb-posix:ioctl (fd path)
   14.28+(defun make-keyboard-from-dev (dev keymap compose-table))
   14.29+
   14.30+(defun get-keyboards (keymap compose-table &optional (dir "/dev/input"))
   14.31+  (let ((devices (directory dir)))
   14.32+    (dolist (dev devices)
   14.33+      (let ((ret (make-keyboard-from-dev dev keymap compose-table)))
   14.34+        ret))))
   14.35+
   14.36+;; (with-open-file (file "/dev/input/event4")
   14.37+;;   (let ((fd (sb-sys:fd-stream-fd file))
   14.38+;;         (evbits))))
   14.39+
   14.40+                         
    15.1--- a/lisp/lib/io/pkg.lisp	Sat Sep 28 17:48:06 2024 -0400
    15.2+++ b/lisp/lib/io/pkg.lisp	Sun Sep 29 00:31:24 2024 -0400
    15.3@@ -41,10 +41,14 @@
    15.4    :compressor :compressing-stream :decompressor :decompressing-stream))
    15.5 
    15.6 (defpackage :io/zstd
    15.7-  (:use :cl :io/proto :io/flate)
    15.8+  (:use :cl :std :io/proto :io/flate)
    15.9   (:import-from :std :deferror :eval-always)
   15.10   (:export :zstd-error :zstd-compressor :zstd-decompressor))
   15.11 
   15.12+(defpackage :io/kbd
   15.13+  (:use :cl :std :io/proto :xkb)
   15.14+  (:export :kbd-error))
   15.15+
   15.16 (pkg:defpkg :io
   15.17   (:use :cl)
   15.18   (:use-reexport :io/proto :io/ring :io/flate :io/zstd :io/stream :io/socket))