diff options
author | edwin <edwin@FreeBSD.org> | 2009-06-14 03:29:14 +0000 |
---|---|---|
committer | edwin <edwin@FreeBSD.org> | 2009-06-14 03:29:14 +0000 |
commit | ced97f72d010f36de15f6c60ce7f628c575f4094 (patch) | |
tree | bd2de7d824238b4626574cbbfcd081fd4093641e | |
parent | d9133a653801b461d0dba5b05857f841bcb69461 (diff) | |
download | FreeBSD-src-ced97f72d010f36de15f6c60ce7f628c575f4094.zip FreeBSD-src-ced97f72d010f36de15f6c60ce7f628c575f4094.tar.gz |
Tool to compare two (roughly similar) termcap entries (like rxvt-mono
and rxvt-unicode) so see which fields should don't need to be copied
if the :tc=xxx: option is used.
-rwxr-xr-x | tools/tools/termcap/compare_termcap.pl | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/tools/tools/termcap/compare_termcap.pl b/tools/tools/termcap/compare_termcap.pl new file mode 100755 index 0000000..f2c1f76 --- /dev/null +++ b/tools/tools/termcap/compare_termcap.pl @@ -0,0 +1,98 @@ +#!/usr/bin/perl -w + +# +# Copyright (C) 2009 Edwin Groothuis. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +use strict; +use Data::Dumper; + +if ($#ARGV != 1) { + print <<EOF; +Usage: $0 <term1> <term2> +Compares the entries in the termcap.src for <term1> and <term2> and +print the keys and definitions on the screen. This can be used to reduce +the size of two similar termcap entries with the "tc" option. +EOF + exit(0); +} + +open(FIN, "termcap.src"); +my @lines = <FIN>; +chomp(@lines); +close(FIN); + +my %tcs = (); + +my $tc = ""; +foreach my $l (@lines) { + next if ($l =~ /^#/); + next if ($l eq ""); + + $tc .= $l; + next if ($l =~ /\\$/); + + my @a = split(/:/, $tc); + next if ($#a < 0); + my @b = split(/\|/, $a[0]); + if ($#b >= 0) { + $tcs{$b[0]} = $tc; + } else { + $tcs{$a[0]} = $tc; + } + $tc = ""; +} + +die "Cannot find definitions for $ARGV[0]" if (!defined $tcs{$ARGV[0]}); +die "Cannot find definitions for $ARGV[1]" if (!defined $tcs{$ARGV[1]}); + +my %tc = (); +my %keys = (); + +for (my $i = 0; $i < 2; $i++) { + foreach my $tc (split(/:/, $tcs{$ARGV[$i]})) { + next if ($tc =~ /^\\/); + $tc{$i}{$tc} = 0 if (!defined $tc{$i}{$tc}); + $tc{$i}{$tc}++; + $keys{$tc} = 0; + } +} + +foreach my $key (sort(keys(%keys))) { + if (length($key) > 15) { + print "$key\n"; + printf("%-15s %-3s %-3s\n", "", + defined $tc{0}{$key} ? "+" : "", + defined $tc{1}{$key} ? "+" : "" + ); + } else { + printf("%-15s %-3s %-3s\n", $key, + defined $tc{0}{$key} ? "+" : "", + defined $tc{1}{$key} ? "+" : "" + ); + } +} + |