#!/usr/bin/perl
# Time-stamp: "1998-09-21 21:00:49 MDT sburke@alf8.speech.cs.cmu.edu"
#
require 5;
$html = 1;
$dvorak = lc($ARGV[0]) eq 'dvorak' ? 1 : 0;
#--------------------------------------------------------------------------
if ($dvorak) {
$type = 'Dvorak';
$l1 = 'py'; $r1 = 'fgcrl';
$l2 = 'aoeui'; $r2 = 'dhtns';
$l3 = 'qjkx'; $r3 = 'bmwvz';
} else {
$type = 'QWERTY';
$l1 = 'qwert'; $r1 = 'yuiop';
$l2 = 'asdfg'; $r2 = 'hjkl';
$l3 = 'zxcvb'; $r3 = 'nm';
}
$l = $l1 . $l2 . $l3;
$r = $r1 . $r2 . $r3;
print $html ? "
For The $type Keyboard
\n"
: "For The $type Keyboard:\n";
# get down to biz
open(IN, '< /usr/dict/words') or die "no /usr/dict/words found\n";
filter_for('Top Row', sub { /^[$r1$l1]+$/io } );
filter_for('Middle Row', sub { /^[$r2$l2]+$/io } );
filter_for('Bottom Row', sub { /^[$r3$l3]+$/io } );
filter_for('Top Row Left', sub { /^[$l1]+$/io } );
filter_for('Top Row Right', sub { /^[$r1]+$/io } );
filter_for('Middle Row Left', sub { /^[$l2]+$/io } );
filter_for('Middle Row Right', sub { /^[$r2]+$/io } );
filter_for('Bottom Row Left', sub { /^[$l3]+$/io } );
filter_for('Bottom Row Right', sub { /^[$r3]+$/io } );
filter_for('Left Side', sub { /^[$l]+$/io } );
filter_for('Right Side', sub { /^[$r]+$/io } );
filter_for('Alternating Left-Right-Left',
sub { /^([$r][$l])+[$r]?$/io || /^([$l][$r])+[$l]?$/io } );
exit;
sub filter_for {
my($heading, $criterion) = @_[0,1];
my $match_count = 0;
printf $html ? "\n%s
\n" : "\n%s\n", $heading;
seek(IN, 0, 0);
while() {
if(/[aeiouy]/i and not /^[A-Z][A-Z]/ # ignore acronyms and abbrevs
and &$criterion) { print; ++$match_count; }
}
printf
$html ? "
total: %d words\n" : "total: %d words\n",
$match_count;
}
__END__