diff options
Diffstat (limited to 'x11vnc/misc/qt_tslib_inject.pl')
-rwxr-xr-x | x11vnc/misc/qt_tslib_inject.pl | 1064 |
1 files changed, 0 insertions, 1064 deletions
diff --git a/x11vnc/misc/qt_tslib_inject.pl b/x11vnc/misc/qt_tslib_inject.pl deleted file mode 100755 index d69d174..0000000 --- a/x11vnc/misc/qt_tslib_inject.pl +++ /dev/null @@ -1,1064 +0,0 @@ -#!/usr/bin/perl -# -# qt_tslib_inject.pl: -# -# touch screen input injection tool for use with x11vnc. -# -# example usage: -# -# x11vnc ... -rawfb console -pipeinput ./qt_tslib_inject_input.pl -env INJECT_OPTIONS=cal=/etc/pointercal -# -# See options below. -# -# tested on qtmoko (neo freerunner) with tslib. - -# -# Copyright (c) 2010 by Karl J. Runge <runge@karlrunge.com> -# -# qt_tslib_inject.pl is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# qt_tslib_inject.pl is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with qt_tslib_inject.pl; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA -# or see <http://www.gnu.org/licenses/>. -# - -set_constants(); - -# one can set these env. vars. before running: - -# the device file to inject the events into: -# -$dev = $ENV{INJECT_DEV}; -$dev = "/dev/input/event1" unless $dev; - -# options, see below. useful: cal=/etc/pointercal -# -$options = $ENV{INJECT_OPTIONS}; -$options = '' unless $options ne ''; - -$debug = 0; # enable debugging output: -$pressure = 1; # level of touch pad pressure for click. -$btn_touch = 0; # send BTN_TOUCH on clicks instead of pressure changes. -$absalways = 0; # send a zero pressure absolute position event whenever mouse moves. -$dragskip = 0; # how often to skip injecting motion event while dragging. - -$a_xform = ''; # tslib's calibration coefficients. -@a = (); - -%keycmds = (); # user defined hotkeys to run external commands. - -# separate the options by comma, e.g. pressure=5,cal=/etc/pointercal - -if ($options =~ /absalways/i) { - # set to always send a zero pressure ABS event when mouse moves - $absalways = 1; -} -if ($options =~ /btn_touch/i) { - # send BTN_TOUCH on clicks. - $btn_touch = 1; -} -if ($options =~ /pressure=(\d+)/i) { - # level of touchpad pressure to use on a touch. - $pressure = $1; -} -if ($options =~ /dragskip=(\d+)/i) { - # when dragging with pressure, skip this many events. - $dragskip = $1; -} -if ($options =~ /cal=([^,]+)/i) { - # tslib's /etc/pointercal linear transform: - $a_xform = $1; - if (-f $a_xform) { - $a_xform = `head -n 1 '$a_xform'`; - chomp $a_xform; - $a_xform =~ s/^\s*//; - $a_xform =~ s/\s*$//; - } -} -if ($options =~ /keycmds=([^,]+)/i) { - # format: keysym1:command1+keysym2:command2+... - # e.g.: keycmds=F6:date+F7:'./x11vnc-0.9.10 -connect ./ctl.txt -R reset' - my $str = $1; - if (-f $str && open(F, "<$str")) { - $str = ''; - while (<F>) { - chomp; - $_ =~ s/^\s*//; - $_ =~ s/\s*$//; - next if /^#/; - next if $_ eq ""; - $str .= '+' if $str ne ''; - $str .= $_; - } - close F; - } - foreach my $part (split(/\+/, $str)) { - my ($key, $cmd) = split(/:/, $part, 2); - if ($key !~ /^\s*$/) { - $keycmds{$key} = $cmd; - } - } -} -if ($options =~ /debug=(\d+)/i) { - # debug printout - $debug = $1; -} elsif ($options =~ /debug/i) { - $debug = 1; -} - -# end of the top part that user should read and understand -# for setting options, etc. -###################################################################### - -$start = time(); - -# open the device for writing: -# -$modes = $O_WRONLY; -printf("open modes: 0x%x\n", $modes) if $debug; - -sysopen(FD, $dev, $modes) || die "$dev: $!"; - -my $curr_mask = 0; -my $curr_x = 0; -my $curr_y = 0; -my $down_count = 0; - -# read input events from x11vnc through STDIN: -# -while (<>) { - chomp; - if (/^Pointer/) { - my ($p, $client, $x, $y, $mask, $hint) = split(' ', $_, 6); - do_pointer($client, $x, $y, $mask, $hint); - } elsif (/^Keysym/) { - my ($k, $client, $down, $keysym, $name, $hint) = split(' ', $_, 6); - do_keysym($client, $down, $keysym, $name, $hint); - } -} - -close(FD); - -exit(0); - -sub do_keysym { - # qtmoko/neo does not support keystroke input. so these will be ignored. - # (one possibility would to be enable qtmoko to read from /dev/tty0. - # but the injection mechanism would need to be modified.) - my ($client, $down, $keysym, $name, $hint) = @_; - - $ENV{DO_KEYSYM} = "$client $down $keysym $name $hint"; - - # one could implement his own 'hot keys' here. - - # process any keycmds: - if (%keycmds && (exists $keycmds{$name} || exists $keycmds{ALL})) { - my $cmd = $keycmds{$name}; - if (!exists $keycmds{$name}) { - $cmd = $keycmds{ALL}; - print STDERR "keycmds: $name/ALL: running: $cmd\n"; - system("$cmd"); - } elsif ($down) { - print STDERR "keycmds: $name: running: $cmd\n"; - system("$cmd"); - } - return; - } - - $name = "XK_$name"; - my $nolookup = 0; - if (! exists $key_lookup{$name}) { - $nolookup = 1; - } elsif (! defined $key_lookup{$name}) { - $nolookup = 2; - } elsif ($key_lookup{$name} =~ /^\s*$/) { - $nolookup = 3; - } - if ($nolookup) { - print STDERR "do_keysym: key not implemented-$nolookup $down $keysym $name $hint.\n" if $debug; - return; - } - - print STDERR gettime() . " do_keysym: $name\n" if $debug; - do_key($key_lookup{$name}, $down); -} - -sub do_pointer { - my ($client, $x, $y, $mask, $hint) = @_; - my $x2 = $x; - my $y2 = $y; - if ($a_xform ne '') { - # this is tslib's /etc/pointercal format. - if (! @a) { - # -528 33408 -3417516 -44200 408 40292028 56541 - @a = split(' ', $a_xform); - foreach my $a (@a) { - $a += 0.0; - } - } - # this is the inverse of the tslib transformation: - # - $x2 = ( $a[4] * ($a[6] * $x - $a[2]) - $a[1] * ($a[6] * $y - $a[5]) ) - / ( $a[4] * $a[0] - $a[1] * $a[3]); - $y2 = ( $a[0] * ($a[6] * $y - $a[5]) - $a[3] * ($a[6] * $x - $a[2]) ) - / ( $a[4] * $a[0] - $a[1] * $a[3]); - $x2 = int($x2); - $y2 = int($y2); - } - - print STDERR gettime() . " do_pointer $x $y (=> $x2 $y2) $mask $hint.\n" if $debug; - - if (! $btn_touch) { - if ($curr_mask == 0 && $mask == 0) { - do_abs($x2, $y2, 0) if $absalways; - } elsif ($curr_mask == 0 && $mask != 0) { - do_abs($x2, $y2, $pressure); - $down_count = 0; - } elsif ($curr_mask != 0 && $mask == 0) { - do_abs($x2, $y2, 0); - } elsif ($curr_mask != 0 && $mask != 0) { - $down_count++; - if ($dragskip > 0) { - if ($down_count % $dragskip == 0) { - do_abs($x2, $y2, $pressure); - } else { - print STDERR "dragskip $down_count $dragskip\n" if $debug; - } - } else { - do_abs($x2, $y2, $pressure); - } - } - } else { - if ($curr_mask == 0 && $mask == 0) { - do_abs($x2, $y2, 0) if $absalways; - } elsif ($curr_mask == 0 && $mask != 0) { - do_abs($x2, $y2, 0); - do_btn($BTN_TOUCH, 1); - } elsif ($curr_mask != 0 && $mask == 0) { - do_abs($x2, $y2, 0); - do_btn($BTN_TOUCH, 0); - } elsif ($curr_mask != 0 && $mask != 0) { - ; - } - } - - $curr_mask = $mask; - $curr_x = $x2; - $curr_y = $y2; -} - -# struct input_event { -# struct timeval time; -# __u16 type; -# __u16 code; -# __s32 value; -# }; - -sub do_syn { - my $ev = gtod(); - $ev .= pack("S", $EV_SYN); - $ev .= pack("S", $SYN_REPORT); - $ev .= pack("i", 0); - print STDERR "do_syn EV_SYN\n" if $debug; - my $ret = syswrite(FD, $ev, length($ev)); - if (!defined $ret) { - print STDERR "do_syn: $!\n"; - } -} - -sub do_key { - # not supported by qtmoko - my ($key, $down) = @_; - my $ev = gtod(); - $ev .= pack("S", $EV_KEY); - $ev .= pack("S", $key); - $ev .= pack("i", $down); - print STDERR "do_key $key $down\n" if $debug; - my $ret = syswrite(FD, $ev, length($ev)); - if (!defined $ret) { - print STDERR "do_key: $!\n"; - } - do_syn(); -} - -sub do_btn { - # only BTN_TOUCH supported by qtmoko (but it seems to be ignored??) - my ($button, $down) = @_; - my $ev = gtod(); - $ev .= pack("S", $EV_KEY); - $ev .= pack("S", $button); - $ev .= pack("i", $down); - print STDERR "do_btn $button $down\n" if $debug; - my $ret = syswrite(FD, $ev, length($ev)); - if (!defined $ret) { - print STDERR "do_btn: $!\n"; - } - do_syn(); -} - -sub do_abs { - # absolute method is the workhorse for the touchscreen. - my ($x, $y, $p) = @_; - my $ev = gtod(); - $ev .= pack("S", $EV_ABS); - $ev .= pack("S", $ABS_Y); - $ev .= pack("i", $y); - print STDERR "do_abs y=$y\n" if $debug; - my $ret = syswrite(FD, $ev, length($ev)); - if (!defined $ret) { - print STDERR "do_abs: $!\n"; - } - $ev = gtod(); - $ev .= pack("S", $EV_ABS); - $ev .= pack("S", $ABS_X); - $ev .= pack("i", $x); - print STDERR "do_abs x=$x\n" if $debug; - $ret = syswrite(FD, $ev, length($ev)); - if (!defined $ret) { - print STDERR "do_abs: $!\n"; - } - $ev = gtod(); - $ev .= pack("S", $EV_ABS); - $ev .= pack("S", $ABS_PRESSURE); - $ev .= pack("i", $p); - print STDERR "do_abs p=$p\n" if $debug; - $ret = syswrite(FD, $ev, length($ev)); - if (!defined $ret) { - print STDERR "do_abs: $!\n"; - } - do_syn(); -} - -sub do_rel { - # not supported by qtmoko - my ($dx, $dy) = @_; - my $ev = gtod(); - $ev .= pack("S", $EV_REL); - $ev .= pack("S", $REL_Y); - $ev .= pack("i", $dy); - print STDERR "do_rel dy=$dy\n" if $debug; - my $ret = syswrite(FD, $ev, length($ev)); - if (!defined $ret) { - print STDERR "do_rel: $!\n"; - } - $ev = gtod(); - $ev .= pack("S", $EV_REL); - $ev .= pack("S", $REL_X); - $ev .= pack("i", $dx); - print STDERR "do_rel dx=$dx\n"; - $ret = syswrite(FD, $ev, length($ev)); - if (!defined $ret) { - print STDERR "do_rel: $!\n"; - } - do_syn(); -} - -sub gtod { - # 32 bit machines. TBD use perl module Time:HiRes. - $tv = ("\0" x 4) x 2; # assumes long is 4 bytes. should use pack. - $tz = ("\0" x 4) x 2; - syscall($linux_gettimeofday_syscall, $tv, $tz); - return $tv; -} - -sub gettime { - my $tv = gtod(); - my ($tv_sec, $tv_usec) = unpack("L2", $tv); - $tv_usec2 = sprintf("%8.6f", $tv_usec/1000000.0); - if ( $tv_usec2 =~ /^0\./ ) { - $tv_usec2 =~ s/^0\././; - $tv_sec = "$tv_sec$tv_usec2"; - } else { - $tv_sec = $tv_sec + ($tv_usec/1000000.0); - } - return sprintf("%.3f", $tv_sec - $start); -} - -sub fsleep { - my ($time) = @_; - select(undef, undef, undef, $time) if $time; -} - -sub set_constants { - -# from /usr/include/linux/uinput.h /usr/include/linux/input.h and x11vnc. - -# #define ABS_MAX 0x3f = 63 -# -# #define UINPUT_MAX_NAME_SIZE 80 -# -# struct input_id { -# __u16 bustype; -# __u16 vendor; -# __u16 product; -# __u16 version; -# }; -# -# struct uinput_user_dev { -# char name[UINPUT_MAX_NAME_SIZE]; -# struct input_id id; -# int ff_effects_max; -# int absmax[ABS_MAX + 1]; -# int absmin[ABS_MAX + 1]; -# int absfuzz[ABS_MAX + 1]; -# int absflat[ABS_MAX + 1]; -# }; -# #endif /* __UINPUT_H_ */ - -$EV_SYN = 0x00; -$EV_KEY = 0x01; -$EV_REL = 0x02; -$EV_ABS = 0x03; -$EV_MSC = 0x04; -$EV_SW = 0x05; -$EV_LED = 0x11; -$EV_SND = 0x12; -$EV_REP = 0x14; -$EV_FF = 0x15; -$EV_PWR = 0x16; -$EV_FF_STATUS = 0x17; -$EV_MAX = 0x1f; - -$ID_BUS = 0; -$ID_VENDOR = 1; -$ID_PRODUCT = 2; -$ID_VERSION = 3; - -$BUS_PCI = 0x01; -$BUS_ISAPNP = 0x02; -$BUS_USB = 0x03; -$BUS_HIL = 0x04; -$BUS_BLUETOOTH = 0x05; -$BUS_VIRTUAL = 0x06; - -$BUS_ISA = 0x10; -$BUS_I8042 = 0x11; -$BUS_XTKBD = 0x12; -$BUS_RS232 = 0x13; -$BUS_GAMEPORT = 0x14; -$BUS_PARPORT = 0x15; -$BUS_AMIGA = 0x16; -$BUS_ADB = 0x17; -$BUS_I2C = 0x18; -$BUS_HOST = 0x19; -$BUS_GSC = 0x1A; -$BUS_ATARI = 0x1B; - -$REL_X = 0x00; -$REL_Y = 0x01; -$REL_Z = 0x02; -$REL_RX = 0x03; -$REL_RY = 0x04; -$REL_RZ = 0x05; -$REL_HWHEEL = 0x06; -$REL_DIAL = 0x07; -$REL_WHEEL = 0x08; -$REL_MISC = 0x09; - -$ABS_X = 0x00; -$ABS_Y = 0x01; -$ABS_Z = 0x02; -$ABS_RX = 0x03; -$ABS_RY = 0x04; -$ABS_RZ = 0x05; -$ABS_THROTTLE = 0x06; -$ABS_RUDDER = 0x07; -$ABS_WHEEL = 0x08; -$ABS_GAS = 0x09; -$ABS_BRAKE = 0x0a; -$ABS_HAT0X = 0x10; -$ABS_HAT0Y = 0x11; -$ABS_HAT1X = 0x12; -$ABS_HAT1Y = 0x13; -$ABS_HAT2X = 0x14; -$ABS_HAT2Y = 0x15; -$ABS_HAT3X = 0x16; -$ABS_HAT3Y = 0x17; -$ABS_PRESSURE = 0x18; -$ABS_DISTANCE = 0x19; -$ABS_TILT_X = 0x1a; -$ABS_TILT_Y = 0x1b; -$ABS_TOOL_WIDTH = 0x1c; -$ABS_VOLUME = 0x20; -$ABS_MISC = 0x28; -$ABS_MT_TOUCH_MAJOR = 0x30; -$ABS_MT_TOUCH_MINOR = 0x31; -$ABS_MT_WIDTH_MAJOR = 0x32; -$ABS_MT_WIDTH_MINOR = 0x33; -$ABS_MT_ORIENTATION = 0x34; -$ABS_MT_POSITION_X = 0x35; -$ABS_MT_POSITION_Y = 0x36; -$ABS_MT_TOOL_TYPE = 0x37; -$ABS_MT_BLOB_ID = 0x38; -$ABS_MT_TRACKING_ID = 0x39; -#$ABS_MAX = 0x3f; - - -$BTN_MISC = 0x100; -$BTN_0 = 0x100; -$BTN_1 = 0x101; -$BTN_2 = 0x102; -$BTN_3 = 0x103; -$BTN_4 = 0x104; -$BTN_5 = 0x105; -$BTN_6 = 0x106; -$BTN_7 = 0x107; -$BTN_8 = 0x108; -$BTN_9 = 0x109; - -$BTN_MOUSE = 0x110; -$BTN_LEFT = 0x110; -$BTN_RIGHT = 0x111; -$BTN_MIDDLE = 0x112; -$BTN_SIDE = 0x113; -$BTN_EXTRA = 0x114; -$BTN_FORWARD = 0x115; -$BTN_BACK = 0x116; -$BTN_TASK = 0x117; - -$BTN_JOYSTICK = 0x120; -$BTN_TRIGGER = 0x120; -$BTN_THUMB = 0x121; -$BTN_THUMB2 = 0x122; -$BTN_TOP = 0x123; -$BTN_TOP2 = 0x124; -$BTN_PINKIE = 0x125; -$BTN_BASE = 0x126; -$BTN_BASE2 = 0x127; -$BTN_BASE3 = 0x128; -$BTN_BASE4 = 0x129; -$BTN_BASE5 = 0x12a; -$BTN_BASE6 = 0x12b; -$BTN_DEAD = 0x12f; - -$BTN_GAMEPAD = 0x130; -$BTN_A = 0x130; -$BTN_B = 0x131; -$BTN_C = 0x132; -$BTN_X = 0x133; -$BTN_Y = 0x134; -$BTN_Z = 0x135; -$BTN_TL = 0x136; -$BTN_TR = 0x137; -$BTN_TL2 = 0x138; -$BTN_TR2 = 0x139; -$BTN_SELECT = 0x13a; -$BTN_START = 0x13b; -$BTN_MODE = 0x13c; -$BTN_THUMBL = 0x13d; -$BTN_THUMBR = 0x13e; - -$BTN_DIGI = 0x140; -$BTN_TOOL_PEN = 0x140; -$BTN_TOOL_RUBBER = 0x141; -$BTN_TOOL_BRUSH = 0x142; -$BTN_TOOL_PENCIL = 0x143; -$BTN_TOOL_AIRBRUSH = 0x144; -$BTN_TOOL_FINGER = 0x145; -$BTN_TOOL_MOUSE = 0x146; -$BTN_TOOL_LENS = 0x147; -$BTN_TOUCH = 0x14a; -$BTN_STYLUS = 0x14b; -$BTN_STYLUS2 = 0x14c; -$BTN_TOOL_DOUBLETAP = 0x14d; -$BTN_TOOL_TRIPLETAP = 0x14e; - -$BTN_WHEEL = 0x150; -$BTN_GEAR_DOWN = 0x150; -$BTN_GEAR_UP = 0x151; - -$SYN_REPORT = 0; -$SYN_CONFIG = 1; -$SYN_MT_REPORT = 2; - -$KEY_RESERVED = 0; -$KEY_ESC = 1; -$KEY_1 = 2; -$KEY_2 = 3; -$KEY_3 = 4; -$KEY_4 = 5; -$KEY_5 = 6; -$KEY_6 = 7; -$KEY_7 = 8; -$KEY_8 = 9; -$KEY_9 = 10; -$KEY_0 = 11; -$KEY_MINUS = 12; -$KEY_EQUAL = 13; -$KEY_BACKSPACE = 14; -$KEY_TAB = 15; -$KEY_Q = 16; -$KEY_W = 17; -$KEY_E = 18; -$KEY_R = 19; -$KEY_T = 20; -$KEY_Y = 21; -$KEY_U = 22; -$KEY_I = 23; -$KEY_O = 24; -$KEY_P = 25; -$KEY_LEFTBRACE = 26; -$KEY_RIGHTBRACE = 27; -$KEY_ENTER = 28; -$KEY_LEFTCTRL = 29; -$KEY_A = 30; -$KEY_S = 31; -$KEY_D = 32; -$KEY_F = 33; -$KEY_G = 34; -$KEY_H = 35; -$KEY_J = 36; -$KEY_K = 37; -$KEY_L = 38; -$KEY_SEMICOLON = 39; -$KEY_APOSTROPHE = 40; -$KEY_GRAVE = 41; -$KEY_LEFTSHIFT = 42; -$KEY_BACKSLASH = 43; -$KEY_Z = 44; -$KEY_X = 45; -$KEY_C = 46; -$KEY_V = 47; -$KEY_B = 48; -$KEY_N = 49; -$KEY_M = 50; -$KEY_COMMA = 51; -$KEY_DOT = 52; -$KEY_SLASH = 53; -$KEY_RIGHTSHIFT = 54; -$KEY_KPASTERISK = 55; -$KEY_LEFTALT = 56; -$KEY_SPACE = 57; -$KEY_CAPSLOCK = 58; -$KEY_F1 = 59; -$KEY_F2 = 60; -$KEY_F3 = 61; -$KEY_F4 = 62; -$KEY_F5 = 63; -$KEY_F6 = 64; -$KEY_F7 = 65; -$KEY_F8 = 66; -$KEY_F9 = 67; -$KEY_F10 = 68; -$KEY_NUMLOCK = 69; -$KEY_SCROLLLOCK = 70; -$KEY_KP7 = 71; -$KEY_KP8 = 72; -$KEY_KP9 = 73; -$KEY_KPMINUS = 74; -$KEY_KP4 = 75; -$KEY_KP5 = 76; -$KEY_KP6 = 77; -$KEY_KPPLUS = 78; -$KEY_KP1 = 79; -$KEY_KP2 = 80; -$KEY_KP3 = 81; -$KEY_KP0 = 82; -$KEY_KPDOT = 83; -$KEY_103RD = 84; -$KEY_F13 = 85; -$KEY_102ND = 86; -$KEY_F11 = 87; -$KEY_F12 = 88; -$KEY_F14 = 89; -$KEY_F15 = 90; -$KEY_F16 = 91; -$KEY_F17 = 92; -$KEY_F18 = 93; -$KEY_F19 = 94; -$KEY_F20 = 95; -$KEY_KPENTER = 96; -$KEY_RIGHTCTRL = 97; -$KEY_KPSLASH = 98; -$KEY_SYSRQ = 99; -$KEY_RIGHTALT = 100; -$KEY_LINEFEED = 101; -$KEY_HOME = 102; -$KEY_UP = 103; -$KEY_PAGEUP = 104; -$KEY_LEFT = 105; -$KEY_RIGHT = 106; -$KEY_END = 107; -$KEY_DOWN = 108; -$KEY_PAGEDOWN = 109; -$KEY_INSERT = 110; -$KEY_DELETE = 111; -$KEY_MACRO = 112; -$KEY_MUTE = 113; -$KEY_VOLUMEDOWN = 114; -$KEY_VOLUMEUP = 115; -$KEY_POWER = 116; -$KEY_KPEQUAL = 117; -$KEY_KPPLUSMINUS = 118; -$KEY_PAUSE = 119; -$KEY_F21 = 120; -$KEY_F22 = 121; -$KEY_F23 = 122; -$KEY_F24 = 123; -$KEY_KPCOMMA = 124; -$KEY_LEFTMETA = 125; -$KEY_RIGHTMETA = 126; -$KEY_COMPOSE = 127; -$KEY_STOP = 128; -$KEY_AGAIN = 129; -$KEY_PROPS = 130; -$KEY_UNDO = 131; -$KEY_FRONT = 132; -$KEY_COPY = 133; -$KEY_OPEN = 134; -$KEY_PASTE = 135; -$KEY_FIND = 136; -$KEY_CUT = 137; -$KEY_HELP = 138; -$KEY_MENU = 139; -$KEY_CALC = 140; -$KEY_SETUP = 141; -$KEY_SLEEP = 142; -$KEY_WAKEUP = 143; -$KEY_FILE = 144; -$KEY_SENDFILE = 145; -$KEY_DELETEFILE = 146; -$KEY_XFER = 147; -$KEY_PROG1 = 148; -$KEY_PROG2 = 149; -$KEY_WWW = 150; -$KEY_MSDOS = 151; -$KEY_COFFEE = 152; -$KEY_DIRECTION = 153; -$KEY_CYCLEWINDOWS = 154; -$KEY_MAIL = 155; -$KEY_BOOKMARKS = 156; -$KEY_COMPUTER = 157; -$KEY_BACK = 158; -$KEY_FORWARD = 159; -$KEY_CLOSECD = 160; -$KEY_EJECTCD = 161; -$KEY_EJECTCLOSECD = 162; -$KEY_NEXTSONG = 163; -$KEY_PLAYPAUSE = 164; -$KEY_PREVIOUSSONG = 165; -$KEY_STOPCD = 166; -$KEY_RECORD = 167; -$KEY_REWIND = 168; -$KEY_PHONE = 169; -$KEY_ISO = 170; -$KEY_CONFIG = 171; -$KEY_HOMEPAGE = 172; -$KEY_REFRESH = 173; -$KEY_EXIT = 174; -$KEY_MOVE = 175; -$KEY_EDIT = 176; -$KEY_SCROLLUP = 177; -$KEY_SCROLLDOWN = 178; -$KEY_KPLEFTPAREN = 179; -$KEY_KPRIGHTPAREN = 180; -$KEY_INTL1 = 181; -$KEY_INTL2 = 182; -$KEY_INTL3 = 183; -$KEY_INTL4 = 184; -$KEY_INTL5 = 185; -$KEY_INTL6 = 186; -$KEY_INTL7 = 187; -$KEY_INTL8 = 188; -$KEY_INTL9 = 189; -$KEY_LANG1 = 190; -$KEY_LANG2 = 191; -$KEY_LANG3 = 192; -$KEY_LANG4 = 193; -$KEY_LANG5 = 194; -$KEY_LANG6 = 195; -$KEY_LANG7 = 196; -$KEY_LANG8 = 197; -$KEY_LANG9 = 198; -$KEY_PLAYCD = 200; -$KEY_PAUSECD = 201; -$KEY_PROG3 = 202; -$KEY_PROG4 = 203; -$KEY_SUSPEND = 205; -$KEY_CLOSE = 206; -$KEY_PLAY = 207; -$KEY_FASTFORWARD = 208; -$KEY_BASSBOOST = 209; -$KEY_PRINT = 210; -$KEY_HP = 211; -$KEY_CAMERA = 212; -$KEY_SOUND = 213; -$KEY_QUESTION = 214; -$KEY_EMAIL = 215; -$KEY_CHAT = 216; -$KEY_SEARCH = 217; -$KEY_CONNECT = 218; -$KEY_FINANCE = 219; -$KEY_SPORT = 220; -$KEY_SHOP = 221; -$KEY_ALTERASE = 222; -$KEY_CANCEL = 223; -$KEY_BRIGHTNESSDOWN = 224; -$KEY_BRIGHTNESSUP = 225; -$KEY_MEDIA = 226; -$KEY_UNKNOWN = 240; -$KEY_OK = 0x160; -$KEY_SELECT = 0x161; -$KEY_GOTO = 0x162; -$KEY_CLEAR = 0x163; -$KEY_POWER2 = 0x164; -$KEY_OPTION = 0x165; -$KEY_INFO = 0x166; -$KEY_TIME = 0x167; -$KEY_VENDOR = 0x168; -$KEY_ARCHIVE = 0x169; -$KEY_PROGRAM = 0x16a; -$KEY_CHANNEL = 0x16b; -$KEY_FAVORITES = 0x16c; -$KEY_EPG = 0x16d; -$KEY_PVR = 0x16e; -$KEY_MHP = 0x16f; -$KEY_LANGUAGE = 0x170; -$KEY_TITLE = 0x171; -$KEY_SUBTITLE = 0x172; -$KEY_ANGLE = 0x173; -$KEY_ZOOM = 0x174; -$KEY_MODE = 0x175; -$KEY_KEYBOARD = 0x176; -$KEY_SCREEN = 0x177; -$KEY_PC = 0x178; -$KEY_TV = 0x179; -$KEY_TV2 = 0x17a; -$KEY_VCR = 0x17b; -$KEY_VCR2 = 0x17c; -$KEY_SAT = 0x17d; -$KEY_SAT2 = 0x17e; -$KEY_CD = 0x17f; -$KEY_TAPE = 0x180; -$KEY_RADIO = 0x181; -$KEY_TUNER = 0x182; -$KEY_PLAYER = 0x183; -$KEY_TEXT = 0x184; -$KEY_DVD = 0x185; -$KEY_AUX = 0x186; -$KEY_MP3 = 0x187; -$KEY_AUDIO = 0x188; -$KEY_VIDEO = 0x189; -$KEY_DIRECTORY = 0x18a; -$KEY_LIST = 0x18b; -$KEY_MEMO = 0x18c; -$KEY_CALENDAR = 0x18d; -$KEY_RED = 0x18e; -$KEY_GREEN = 0x18f; -$KEY_YELLOW = 0x190; -$KEY_BLUE = 0x191; -$KEY_CHANNELUP = 0x192; -$KEY_CHANNELDOWN = 0x193; -$KEY_FIRST = 0x194; -$KEY_LAST = 0x195; -$KEY_AB = 0x196; -$KEY_NEXT = 0x197; -$KEY_RESTART = 0x198; -$KEY_SLOW = 0x199; -$KEY_SHUFFLE = 0x19a; -$KEY_BREAK = 0x19b; -$KEY_PREVIOUS = 0x19c; -$KEY_DIGITS = 0x19d; -$KEY_TEEN = 0x19e; -$KEY_TWEN = 0x19f; -$KEY_DEL_EOL = 0x1c0; -$KEY_DEL_EOS = 0x1c1; -$KEY_INS_LINE = 0x1c2; -$KEY_DEL_LINE = 0x1c3; -$KEY_MAX = 0x1ff; - - - $key_lookup{XK_Escape} = $KEY_ESC; - $key_lookup{XK_1} = $KEY_1; - $key_lookup{XK_2} = $KEY_2; - $key_lookup{XK_3} = $KEY_3; - $key_lookup{XK_4} = $KEY_4; - $key_lookup{XK_5} = $KEY_5; - $key_lookup{XK_6} = $KEY_6; - $key_lookup{XK_7} = $KEY_7; - $key_lookup{XK_8} = $KEY_8; - $key_lookup{XK_9} = $KEY_9; - $key_lookup{XK_0} = $KEY_0; - $key_lookup{XK_exclam} = $KEY_1; - $key_lookup{XK_at} = $KEY_2; - $key_lookup{XK_numbersign} = $KEY_3; - $key_lookup{XK_dollar} = $KEY_4; - $key_lookup{XK_percent} = $KEY_5; - $key_lookup{XK_asciicircum} = $KEY_6; - $key_lookup{XK_ampersand} = $KEY_7; - $key_lookup{XK_asterisk} = $KEY_8; - $key_lookup{XK_parenleft} = $KEY_9; - $key_lookup{XK_parenright} = $KEY_0; - $key_lookup{XK_minus} = $KEY_MINUS; - $key_lookup{XK_underscore} = $KEY_MINUS; - $key_lookup{XK_equal} = $KEY_EQUAL; - $key_lookup{XK_plus} = $KEY_EQUAL; - $key_lookup{XK_BackSpace} = $KEY_BACKSPACE; - $key_lookup{XK_Tab} = $KEY_TAB; - $key_lookup{XK_q} = $KEY_Q; - $key_lookup{XK_Q} = $KEY_Q; - $key_lookup{XK_w} = $KEY_W; - $key_lookup{XK_W} = $KEY_W; - $key_lookup{XK_e} = $KEY_E; - $key_lookup{XK_E} = $KEY_E; - $key_lookup{XK_r} = $KEY_R; - $key_lookup{XK_R} = $KEY_R; - $key_lookup{XK_t} = $KEY_T; - $key_lookup{XK_T} = $KEY_T; - $key_lookup{XK_y} = $KEY_Y; - $key_lookup{XK_Y} = $KEY_Y; - $key_lookup{XK_u} = $KEY_U; - $key_lookup{XK_U} = $KEY_U; - $key_lookup{XK_i} = $KEY_I; - $key_lookup{XK_I} = $KEY_I; - $key_lookup{XK_o} = $KEY_O; - $key_lookup{XK_O} = $KEY_O; - $key_lookup{XK_p} = $KEY_P; - $key_lookup{XK_P} = $KEY_P; - $key_lookup{XK_braceleft} = $KEY_LEFTBRACE; - $key_lookup{XK_braceright} = $KEY_RIGHTBRACE; - $key_lookup{XK_bracketleft} = $KEY_LEFTBRACE; - $key_lookup{XK_bracketright} = $KEY_RIGHTBRACE; - $key_lookup{XK_Return} = $KEY_ENTER; - $key_lookup{XK_Control_L} = $KEY_LEFTCTRL; - $key_lookup{XK_a} = $KEY_A; - $key_lookup{XK_A} = $KEY_A; - $key_lookup{XK_s} = $KEY_S; - $key_lookup{XK_S} = $KEY_S; - $key_lookup{XK_d} = $KEY_D; - $key_lookup{XK_D} = $KEY_D; - $key_lookup{XK_f} = $KEY_F; - $key_lookup{XK_F} = $KEY_F; - $key_lookup{XK_g} = $KEY_G; - $key_lookup{XK_G} = $KEY_G; - $key_lookup{XK_h} = $KEY_H; - $key_lookup{XK_H} = $KEY_H; - $key_lookup{XK_j} = $KEY_J; - $key_lookup{XK_J} = $KEY_J; - $key_lookup{XK_k} = $KEY_K; - $key_lookup{XK_K} = $KEY_K; - $key_lookup{XK_l} = $KEY_L; - $key_lookup{XK_L} = $KEY_L; - $key_lookup{XK_semicolon} = $KEY_SEMICOLON; - $key_lookup{XK_colon} = $KEY_SEMICOLON; - $key_lookup{XK_apostrophe} = $KEY_APOSTROPHE; - $key_lookup{XK_quotedbl} = $KEY_APOSTROPHE; - $key_lookup{XK_grave} = $KEY_GRAVE; - $key_lookup{XK_asciitilde} = $KEY_GRAVE; - $key_lookup{XK_Shift_L} = $KEY_LEFTSHIFT; - $key_lookup{XK_backslash} = $KEY_BACKSLASH; - $key_lookup{XK_bar} = $KEY_BACKSLASH; - $key_lookup{XK_z} = $KEY_Z; - $key_lookup{XK_Z} = $KEY_Z; - $key_lookup{XK_x} = $KEY_X; - $key_lookup{XK_X} = $KEY_X; - $key_lookup{XK_c} = $KEY_C; - $key_lookup{XK_C} = $KEY_C; - $key_lookup{XK_v} = $KEY_V; - $key_lookup{XK_V} = $KEY_V; - $key_lookup{XK_b} = $KEY_B; - $key_lookup{XK_B} = $KEY_B; - $key_lookup{XK_n} = $KEY_N; - $key_lookup{XK_N} = $KEY_N; - $key_lookup{XK_m} = $KEY_M; - $key_lookup{XK_M} = $KEY_M; - $key_lookup{XK_comma} = $KEY_COMMA; - $key_lookup{XK_less} = $KEY_COMMA; - $key_lookup{XK_period} = $KEY_DOT; - $key_lookup{XK_greater} = $KEY_DOT; - $key_lookup{XK_slash} = $KEY_SLASH; - $key_lookup{XK_question} = $KEY_SLASH; - $key_lookup{XK_Shift_R} = $KEY_RIGHTSHIFT; - $key_lookup{XK_KP_Multiply} = $KEY_KPASTERISK; - $key_lookup{XK_Alt_L} = $KEY_LEFTALT; - $key_lookup{XK_space} = $KEY_SPACE; - $key_lookup{XK_Caps_Lock} = $KEY_CAPSLOCK; - $key_lookup{XK_F1} = $KEY_F1; - $key_lookup{XK_F2} = $KEY_F2; - $key_lookup{XK_F3} = $KEY_F3; - $key_lookup{XK_F4} = $KEY_F4; - $key_lookup{XK_F5} = $KEY_F5; - $key_lookup{XK_F6} = $KEY_F6; - $key_lookup{XK_F7} = $KEY_F7; - $key_lookup{XK_F8} = $KEY_F8; - $key_lookup{XK_F9} = $KEY_F9; - $key_lookup{XK_F10} = $KEY_F10; - $key_lookup{XK_Num_Lock} = $KEY_NUMLOCK; - $key_lookup{XK_Scroll_Lock} = $KEY_SCROLLLOCK; - $key_lookup{XK_KP_7} = $KEY_KP7; - $key_lookup{XK_KP_8} = $KEY_KP8; - $key_lookup{XK_KP_9} = $KEY_KP9; - $key_lookup{XK_KP_Subtract} = $KEY_KPMINUS; - $key_lookup{XK_KP_4} = $KEY_KP4; - $key_lookup{XK_KP_5} = $KEY_KP5; - $key_lookup{XK_KP_6} = $KEY_KP6; - $key_lookup{XK_KP_Add} = $KEY_KPPLUS; - $key_lookup{XK_KP_1} = $KEY_KP1; - $key_lookup{XK_KP_2} = $KEY_KP2; - $key_lookup{XK_KP_3} = $KEY_KP3; - $key_lookup{XK_KP_0} = $KEY_KP0; - $key_lookup{XK_KP_Decimal} = $KEY_KPDOT; - $key_lookup{XK_F13} = $KEY_F13; - $key_lookup{XK_F11} = $KEY_F11; - $key_lookup{XK_F12} = $KEY_F12; - $key_lookup{XK_F14} = $KEY_F14; - $key_lookup{XK_F15} = $KEY_F15; - $key_lookup{XK_F16} = $KEY_F16; - $key_lookup{XK_F17} = $KEY_F17; - $key_lookup{XK_F18} = $KEY_F18; - $key_lookup{XK_F19} = $KEY_F19; - $key_lookup{XK_F20} = $KEY_F20; - $key_lookup{XK_KP_Enter} = $KEY_KPENTER; - $key_lookup{XK_Control_R} = $KEY_RIGHTCTRL; - $key_lookup{XK_KP_Divide} = $KEY_KPSLASH; - $key_lookup{XK_Sys_Req} = $KEY_SYSRQ; - $key_lookup{XK_Alt_R} = $KEY_RIGHTALT; - $key_lookup{XK_Linefeed} = $KEY_LINEFEED; - $key_lookup{XK_Home} = $KEY_HOME; - $key_lookup{XK_Up} = $KEY_UP; - $key_lookup{XK_Page_Up} = $KEY_PAGEUP; - $key_lookup{XK_Left} = $KEY_LEFT; - $key_lookup{XK_Right} = $KEY_RIGHT; - $key_lookup{XK_End} = $KEY_END; - $key_lookup{XK_Down} = $KEY_DOWN; - $key_lookup{XK_Page_Down} = $KEY_PAGEDOWN; - $key_lookup{XK_Insert} = $KEY_INSERT; - $key_lookup{XK_Delete} = $KEY_DELETE; - $key_lookup{XK_KP_Equal} = $KEY_KPEQUAL; - $key_lookup{XK_Pause} = $KEY_PAUSE; - $key_lookup{XK_F21} = $KEY_F21; - $key_lookup{XK_F22} = $KEY_F22; - $key_lookup{XK_F23} = $KEY_F23; - $key_lookup{XK_F24} = $KEY_F24; - $key_lookup{XK_KP_Separator} = $KEY_KPCOMMA; - $key_lookup{XK_Meta_L} = $KEY_LEFTMETA; - $key_lookup{XK_Meta_R} = $KEY_RIGHTMETA; - $key_lookup{XK_Multi_key} = $KEY_COMPOSE; - -$ABS_MAX = 63; - -$UI_DEV_CREATE = 0x5501; -$UI_DEV_DESTROY = 0x5502; -$UI_SET_EVBIT = 0x40045564; -$UI_SET_KEYBIT = 0x40045565; -$UI_SET_RELBIT = 0x40045566; -$UI_SET_ABSBIT = 0x40045567; - -# FIXME: time hires, etc. -$linux_gettimeofday_syscall = 78; - -$O_RDONLY = 00; -$O_WRONLY = 01; -$O_RDWR = 02; -$O_NDELAY = 04000; - -} |