diff options
author | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2019-02-24 11:41:44 +0000 |
---|---|---|
committer | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2019-02-24 11:41:44 +0000 |
commit | 2e9e3612e8406c463a9d21adf22399dce17f3b1d (patch) | |
tree | 350d1dec346ec9abf0fa0b0f08ba71bb264f6597 /app/xterm/vttests/mouse-codes | |
parent | 375ab130e495e7442b44a55ec317e190f335dabf (diff) |
Update to xterm version 344. ok jsg@
Diffstat (limited to 'app/xterm/vttests/mouse-codes')
-rw-r--r-- | app/xterm/vttests/mouse-codes | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/app/xterm/vttests/mouse-codes b/app/xterm/vttests/mouse-codes new file mode 100644 index 000000000..2a8dcb36d --- /dev/null +++ b/app/xterm/vttests/mouse-codes @@ -0,0 +1,160 @@ +#!/usr/bin/env perl +# $XTermId: mouse-codes,v 1.6 2019/01/04 00:49:41 tom Exp $ +# ----------------------------------------------------------------------------- +# this file is part of xterm +# +# Copyright 2018,2019 by Thomas E. Dickey +# +# All Rights Reserved +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name(s) of the above copyright +# holders shall not be used in advertising or otherwise to promote the +# sale, use or other dealings in this Software without prior written +# authorization. +# ----------------------------------------------------------------------------- +# Imitate xterm's BtnCode() function, to enumerate the possible inputs (button, +# event state) versus output (xterm mouse-code). +use strict; +use warnings; +use diagnostics; + +use Getopt::Std; + +our ( $opt_b, $opt_i, $opt_x ); + +# Typically, +# - Buttons 1, 2, and 3 are left-to-right assignments on a 3-button mouse. +# - Buttons 4 and 5 are (by convention) assigned to a wheel mouse's +# up/down events. +# - Buttons 6 and 7 may happen to work, e.g., as left/right events from a +# tiltable wheel mouse. There is no explicit support for these (there +# are no related symbols in Xt), so it is not possible to use them in the +# translations resource. +our $maxbutton = 7; + +# xterm uses code 3 internally for release-events. +sub ButtonName($) { + my $code = shift; + my $result = ""; + if ( $code < 0 ) { + $result = "release"; + } + else { + $result = sprintf "Button%d", ( $code > 3 ) ? $code : ( $code + 1 ); + } + return $result; +} + +# Combine the modifier state as bits: +# shift key -> 1 +# meta key -> 2 (Mod1 came from X11R1, but was adapted from X10) +# control key -> 4 +our $maxstates = 7; + +sub KeyState($) { + my $mask = shift; + my $result = ""; + $result .= " + shift" if ( ( $mask & 1 ) != 0 ); + $result .= " + meta" if ( ( $mask & 2 ) != 0 ); + $result .= " + control" if ( ( $mask & 4 ) != 0 ); + return $result; +} + +sub Motion($) { + my $code = shift; + my $result = ""; + $result = " + motion" if ( $code != 0 ); + return $result; +} + +sub report() { + my $button; + my $states; + my $motion; + my %encoded; + my %reports; + for $states ( 0 .. $maxstates ) { + for $motion ( 0 .. 1 ) { + for $button ( -1 .. $maxbutton ) { + next if ( $button == 3 ); + my $result = ( 32 + ( $states << 2 ) ); + $result += 32 if ( $motion != 0 ); + if ( $button < 0 ) { + $result += 3; + } + else { + $result += $button & 3; + if ( $button & 4 ) { + $result += 64; + } + if ( $button & 8 ) { + $result += 128; + } + } + my $code = sprintf "%3d", $result; + my $report = sprintf "%s%s%s", &ButtonName($button), + &KeyState($states), &Motion($motion); + if ( defined $encoded{$code} ) { + printf "OOPS %s ->%s versus %s\n", $code, $report, + $encoded{$code}; + } + elsif ( $result > 255 and not defined $opt_x ) { + printf "OOPS %s ->%s\n", $code, $report; + } + $encoded{$code} = $report; + $reports{$report} = $result; + } + } + } + if ($opt_i) { + foreach my $report ( sort keys %reports ) { + printf "%s = %s\n", $report, $reports{$report}; + } + } + else { + foreach my $code ( sort keys %encoded ) { + printf "%s = %s\n", $code, $encoded{$code}; + } + } +} + +sub main::HELP_MESSAGE() { + printf STDERR <<EOF +Usage: $0 [options] + +Options: + -b NUM set the number of buttons (default: 7) + -i invert the report to show code for each combination + -x eliminate 1-byte limit for codes +EOF + ; + exit 1; +} +$Getopt::Std::STANDARD_HELP_VERSION = 1; +&getopts('b:ix') || &main::HELP_MESSAGE; +$maxbutton = $opt_b if ( defined $opt_b ); +&main::HELP_MESSAGE if ( $maxbutton !~ /^\d+$/ ); +$#ARGV < 0 || &main::HELP_MESSAGE; + +&report; + +1; |