From owner-svn-src-all@FreeBSD.ORG Sun Jun 14 13:46:33 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 00595106564A; Sun, 14 Jun 2009 13:46:32 +0000 (UTC) (envelope-from edwin@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E20E88FC13; Sun, 14 Jun 2009 13:46:32 +0000 (UTC) (envelope-from edwin@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5EDkWgA050932; Sun, 14 Jun 2009 13:46:32 GMT (envelope-from edwin@svn.freebsd.org) Received: (from edwin@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5EDkWSC050931; Sun, 14 Jun 2009 13:46:32 GMT (envelope-from edwin@svn.freebsd.org) Message-Id: <200906141346.n5EDkWSC050931@svn.freebsd.org> From: Edwin Groothuis Date: Sun, 14 Jun 2009 13:46:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r194192 - head/tools/tools/termcap X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2009 13:46:33 -0000 Author: edwin Date: Sun Jun 14 13:46:32 2009 New Revision: 194192 URL: http://svn.freebsd.org/changeset/base/194192 Log: Instead of only being able to compare two terminal definitions, now also be able to print information about... - length of the terminal capabilties - dump of one terminal definition - relationship overview for a terminal definition Modified: head/tools/tools/termcap/termcap.pl Modified: head/tools/tools/termcap/termcap.pl ============================================================================== --- head/tools/tools/termcap/termcap.pl Sun Jun 14 13:43:07 2009 (r194191) +++ head/tools/tools/termcap/termcap.pl Sun Jun 14 13:46:32 2009 (r194192) @@ -30,16 +30,29 @@ use strict; use Data::Dumper; -if ($#ARGV != 1) { +if ($#ARGV < 0) { print < +Usage: $0 -c Compares the entries in the termcap.src for and 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. + +Usage: $0 -l [term] +Show all lengths or the ones for terminals matching [term] + +Usage: $0 -p +Print all information about + +Usage: $0 -r +Print all relations from and to EOF exit(0); } +my $command = $ARGV[0]; +my $tca = $ARGV[1]; +my $tcb = $ARGV[2]; + open(FIN, "termcap.src"); my @lines = ; chomp(@lines); @@ -55,6 +68,8 @@ foreach my $l (@lines) { $tc .= $l; next if ($l =~ /\\$/); + $tc =~ s/:\\\s+:/:/g; + my @a = split(/:/, $tc); next if ($#a < 0); my @b = split(/\|/, $a[0]); @@ -63,36 +78,88 @@ foreach my $l (@lines) { } else { $tcs{$a[0]} = $tc; } + if (length($tc) - length($a[0]) > 1023) { + print "$a[0] has a length of ", length($tc) - length($a[0]), "\n"; + exit(0); + } $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 = (); +my %len = (); +my %refs = (); -for (my $i = 0; $i < 2; $i++) { - foreach my $tc (split(/:/, $tcs{$ARGV[$i]})) { +for my $tcs (keys(%tcs)) { + $len{$tcs} = 0; + my $first = 0; + foreach my $tc (split(/:/, $tcs{$tcs})) { + if ($first++ == 0) { + foreach my $ref (split(/\|/, $tc)) { + $refs{$ref} = $tcs; + } + next; + } next if ($tc =~ /^\\/); - $tc{$i}{$tc} = 0 if (!defined $tc{$i}{$tc}); - $tc{$i}{$tc}++; + $tc{$tcs}{$tc} = 0 if (!defined $tc{$tcs}{$tc}); + $tc{$tcs}{$tc}++; + $len{$tcs} += length($tc) + 1; $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} ? "+" : "" - ); +$tca = $refs{$tca} if (defined $tca && defined $refs{$tca}); +$tcb = $refs{$tcb} if (defined $tcb && defined $refs{$tca}); + +die "Cannot find definitions for $tca" if (defined $tca && !defined $tcs{$tca}); +die "Cannot find definitions for $tcb" if (defined $tcb && !defined $tcs{$tcb}); + +if ($command eq "-c") { + foreach my $key (sort(keys(%keys))) { + next if (!defined $tc{$tca}{$key} && !defined $tc{$tcb}{$key}); + printf("%-3s %-3s %s\n", + defined $tc{$tca}{$key} ? "+" : "", + defined $tc{$tcb}{$key} ? "+" : "", + $key, + ); + } + + print "$len{$tca} - $len{$tcb}\n"; +} + +if ($command eq "-l") { + foreach my $tcs (sort(keys(%tcs))) { + next if (defined $tca && $tcs !~ /$tca/); + printf("%4d %s\n", $len{$tcs}, $tcs); + } +} + +if ($command eq "-p") { + printf("%s (%d bytes)\n", $tca, $len{$tca}); + foreach my $key (sort(keys(%keys))) { + next if (!defined $tc{$tca}{$key}); + printf("%s\n", $key); } } +if ($command eq "-r") { + foreach my $key (keys(%{$tc{$tca}})) { + next if ($key !~ /^tc=/); + $key =~ s/tc=//; + print "Links to:\t$key\n"; + } + my $first = 0; + foreach my $ref (sort(keys(%refs))) { + next if ($refs{$ref} ne $tca); + foreach my $tc (sort(keys(%tcs))) { + if (defined $tc{$tc}{"tc=$ref"}) { + if ($first++ == 0) { + print "Links from:\t"; + } else { + print "\t\t"; + } + print "$ref -> $tc\n"; + } + } + } +}