summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoredwin <edwin@FreeBSD.org>2009-06-14 03:29:14 +0000
committeredwin <edwin@FreeBSD.org>2009-06-14 03:29:14 +0000
commitced97f72d010f36de15f6c60ce7f628c575f4094 (patch)
treebd2de7d824238b4626574cbbfcd081fd4093641e
parentd9133a653801b461d0dba5b05857f841bcb69461 (diff)
downloadFreeBSD-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-xtools/tools/termcap/compare_termcap.pl98
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} ? "+" : ""
+ );
+ }
+}
+
OpenPOWER on IntegriCloud