Files
2026-09-30 00:23:36 +00:00

126 lines
2.6 KiB
Bash
Executable File

#!/bin/mksh
# Kernel constant definitions.
EV_KEY=1
EV_REL=2
EV_ABS=3
EV_FF=21
BTN_MOUSE=272
ASCII_KEYS="30 48 46 32 18 33 34 35 23 36 37 38 50 49 24 25 16 19 31 20 22 47 17 45 21 44"
INPUT_PROP_POINTER=0
INPUT_PROP_DIRECT=1
# Helper functions
bitmap_contains() {
hexstr="$1"
bitnum="$2"
char_from_right=$(( bitnum / 4 ))
bit_in_char=$(( bitnum % 4 ))
chars_per_group=16
group_index=$(( char_from_right / chars_per_group ))
char_in_group=$(( char_from_right % chars_per_group ))
set -A groups $hexstr
n=${#groups[@]}
idx=$(( n - 1 - group_index ))
if [ "$idx" -lt 0 ] || [ "$idx" -ge "$n" ]; then
return 1
fi
group=${groups[idx]}
while [ ${#group} -lt $chars_per_group ]; do
group="0$group"
done
pos=$(( chars_per_group - 1 - char_in_group ))
ch=${group:$pos:1}
case "$ch" in
0) v=0 ;; 1) v=1 ;; 2) v=2 ;; 3) v=3 ;;
4) v=4 ;; 5) v=5 ;; 6) v=6 ;; 7) v=7 ;;
8) v=8 ;; 9) v=9 ;;
a|A) v=10 ;; b|B) v=11 ;; c|C) v=12 ;; d|D) v=13 ;;
e|E) v=14 ;; f|F) v=15 ;;
*) return 1 ;;
esac
if [ $(( (v >> bit_in_char) & 1 )) -eq 1 ]; then
return 0
else
return 1
fi
}
ev_contains() {
evstr="$1"
evbit="$2"
evstr=$(print "$evstr" | tr -d ' \t\r\n')
val=$(( 16#${evstr} ))
if [ $(( (val >> evbit) & 1 )) -eq 1 ]; then
return 0
else
return 1
fi
}
export "$@"
SYSPATH="/sys/${DEVPATH}"
if [[ "$SYSPATH" = */event* ]]; then
SYSPATH="$SYSPATH/device"
fi
EV=$(cat "$SYSPATH/capabilities/ev")
KEY=$(cat "$SYSPATH/capabilities/key")
ABS=$(cat "$SYSPATH/capabilities/abs")
REL=$(cat "$SYSPATH/capabilities/rel")
PROPS=$(cat "$SYSPATH/properties")
case "$MODE" in
ID_INPUT)
echo 1
;;
ID_INPUT_MOUSE)
if bitmap_contains "$KEY" "$BTN_MOUSE" && ev_contains "$EV" "$EV_REL" ; then
echo 1
else
exit 1
fi
;;
ID_INPUT_KEYBOARD)
for i in $ASCII_KEYS; do
if ! bitmap_contains "$KEY" "$i"; then
exit 1
fi
done
echo 1
;;
ID_INPUT_TOUCHPAD)
if ev_contains "$EV" "$EV_REL" && bitmap_contains "$PROPS" "$INPUT_PROP_POINTER"; then
echo 1
else
exit 1
fi
;;
ID_INPUT_TOUCHSCREEN)
if ev_contains "$EV" "$EV_ABS" && bitmap_contains "$PROPS" "$INPUT_PROP_DIRECT"; then
echo 1
else
exit 1
fi
;;
ID_INPUT_JOYSTICK)
exit 1
;;
*)
exit 1
;;
esac