-use Encode qw(decode resolve_alias);
-# generate character table(s)
-# (~16x faster than decoding in loop;
-# substr strings is twice as fast as splitting to an array)
-my %ALIAS = (
-# default => [qw(unicode utf-8 iso-8859-1 cp437 -cp1252- --iso-8859-15- -koi8-f)],
- default => [qw(unicode- utf-8 iso-8859-1 -cp1252- --iso-8859-15- cp437 -cp850)],
- 0 => [qw(cp437 cp863)],
- 1 => [qw(iso-8859-1 cp1252 MacRoman cp850)],
- 2 => [qw(iso-8859-2 cp1250 cp852 MacCentralEurRoman MacCroatian MacRumanian)],
- 5 => [qw(koi8-f iso-8859-5 cp1251 MacCyrillic cp855 cp866)],
- 7 => [qw(iso-8859-7 cp1253 MacGreek cp737 cp869)],
- 8 => [qw(iso-8859-8 cp1255 MacHebrew cp862)],
-);
-my @request = map {
- if (my $input = $_) {
- my %row = (offset => 0);
- my $endpoint = 255;
- if ($input =~ s/^--//) {
- $row{offset} = $endpoint > 160 ? 160 : 48;
- }
- elsif ($input =~ s/^-//) {
- $row{offset} = $endpoint > 128 ? 128 : 32;
- }
- if ($input =~ s/-$//) {
- $endpoint = $row{offset} ? $row{offset} < 160 ? 159 : 191 : 127;
- }
+sub tabinput {
+ # generate character table(s)
+ my $input = shift or return;
+
+ state $ALIAS = {
+ default => [qw(unicode- utf-8 iso-8859-1 -cp1252- --iso-8859-15- cp437 -cp850)],
+ us => [qw(cp437 -cp863)],
+ westeur => [qw(iso-8859-1 -cp1252 -MacRoman -cp850)],
+ centeur => [qw(iso-8859-2 -cp1250 -cp852 -MacCentralEurRoman -MacCroatian -MacRumanian)],
+ cyrillic => [qw(koi8-f -iso-8859-5 -cp1251 -MacCyrillic -cp855 -cp866)],
+ greek => [qw(iso-8859-7 -cp1253 -MacGreek -cp737 -cp869)],
+ hebrew => [qw(iso-8859-8 -cp1255 -MacHebrew -cp862)],
+ # iso-code shorthand
+ 1 => 'westeur',
+ 2 => 'centeur',
+ 5 => 'cyrillic',
+ 7 => 'greek',
+ 8 => 'hebrew',
+ };
+ if (my $follow = $ALIAS->{$input}) {
+ return map { tabinput($_) } ref $follow ? @{$follow} : $follow;
+ }
+
+ my %row = (offset => 0, cols => 16);
+ my $endpoint = 255;
+ if ($input =~ s/^--//) {
+ $row{offset} = $endpoint > 160 ? 160 : 48;
+ }
+ elsif ($input =~ s/^-//) {
+ $row{offset} = $endpoint > 128 ? 128 : 32;
+ }
+ if ($input =~ s/-$//) {
+ $endpoint = $row{offset} ? $row{offset} < 160 ? 159 : 191 : 127;
+ }
+ if ($row{offset}) {
+ $row{setnote} = 'over cp437' if $input eq 'cp850';
+ $row{setnote} = 'over iso-8859-1' if $input =~ /^iso-8859-|^cp125/;
+ }