3 # eventrun [<options>] <config filename> <command to run evdev-manip>
6 upvar #0 evmap($key) em
7 if {[info exists em]} {
16 global evgen evmap state scancode
17 if {[gets $evgen l] < 0} {
18 if {![eof $evgen]} return
21 if {[regexp {^\S+ (?:opened|0) } $l]} return
22 if {![regexp {^\S+ 1 (.*)$} $l dummy key]} {
23 puts stderr "unknown >$l<"
31 lappend cmdl 2>@ stderr --stdin-monitor
32 set evgen [open |$cmdl r+]
33 fconfigure $evgen -blocking no
34 fileevent $evgen readable onevgen
39 global errorInfo errorCode
40 puts stderr "$m\n$errorCode\n$errorInfo"
47 proc parsespecinput {fn} {
50 while {[gets $f l] >= 0} {
51 set l [string trim $l]
52 if {[regexp {^\#} $l]} {
54 } elseif {![regexp {\S} $l]} {
56 } elseif {![regexp {^(\S+)\s*(.*)$} $l dummy k action]} {
57 error "bad spec line $l"
59 if {[regexp {^([A-Z][A-Z0-9_]+)$} $k dummy key]} {
60 set key "EV KEY KEY $key"
61 } elseif {[regexp {^([A-Z]+)\-([A-Z][A-Z0-9_]+)} $k dummy type key]} {
62 set key "EV KEY $type $key"
63 } elseif {[regexp {^([0-9a-f]+)-(\w+)-(\w*)-(\w+)} $k dummy \
65 if {![string length $fp]} { set fp $ap }
66 set key "0x$ap $au 0x$fp $fu"
67 } elseif {[regexp {^0x|^[A-Z]} $k] && [llength [split $k -]] > 2} {
68 set key [join [split $k -] " "]
69 } elseif {[regexp {^\@init$} $k]} {
73 error "unknown key syntax $l"
75 set evmap($key) $action
79 set specfile [lindex $argv 0]
80 if {[string match -* $specfile]} { error "no options understood" }
81 set evgenerator [lrange $argv 1 end]
82 if {![llength $evgenerator]} { error "no event generator specified" }
84 parsespecinput $specfile