summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Williamson <khw@cpan.org>2021-12-14 09:50:37 -0700
committerKarl Williamson <khw@cpan.org>2021-12-14 10:16:30 -0700
commitbf65ee6f2d6d77c8b8e93542f80a2c4492a07f36 (patch)
treecc7f410e9fed5183075aab03415d221dcb4f0563
parentf60fa022fb47eb101a91ffed96704687b9388baa (diff)
downloadperl-bf65ee6f2d6d77c8b8e93542f80a2c4492a07f36.tar.gz
Porting/makerel: Don't reinvent a function
It turns out the functionality here duplicates a pre-existing tool, which this commit converts to use instead.
-rwxr-xr-xPorting/makerel98
1 files changed, 10 insertions, 88 deletions
diff --git a/Porting/makerel b/Porting/makerel
index 0a5d15c84b..083f3bffb6 100755
--- a/Porting/makerel
+++ b/Porting/makerel
@@ -24,45 +24,6 @@ use warnings;
#
# Tim Bunce, June 1997
-# Translation tables, so far only to 1047
-my @a2e = ( # ASCII to EBCDIC CP 1047
-0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
-0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
-0x40,0x5A,0x7F,0x7B,0x5B,0x6C,0x50,0x7D,0x4D,0x5D,0x5C,0x4E,0x6B,0x60,0x4B,0x61,
-0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0x7A,0x5E,0x4C,0x7E,0x6E,0x6F,
-0x7C,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,
-0xD7,0xD8,0xD9,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAD,0xE0,0xBD,0x5F,0x6D,
-0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96,
-0x97,0x98,0x99,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xC0,0x4F,0xD0,0xA1,0x07,
-0x20,0x21,0x22,0x23,0x24,0x25,0x06,0x17,0x28,0x29,0x2A,0x2B,0x2C,0x09,0x0A,0x1B,
-0x30,0x31,0x1A,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3A,0x3B,0x04,0x14,0x3E,0xFF,
-0x41,0xAA,0x4A,0xB1,0x9F,0xB2,0x6A,0xB5,0xBB,0xB4,0x9A,0x8A,0xB0,0xCA,0xAF,0xBC,
-0x90,0x8F,0xEA,0xFA,0xBE,0xA0,0xB6,0xB3,0x9D,0xDA,0x9B,0x8B,0xB7,0xB8,0xB9,0xAB,
-0x64,0x65,0x62,0x66,0x63,0x67,0x9E,0x68,0x74,0x71,0x72,0x73,0x78,0x75,0x76,0x77,
-0xAC,0x69,0xED,0xEE,0xEB,0xEF,0xEC,0xBF,0x80,0xFD,0xFE,0xFB,0xFC,0xBA,0xAE,0x59,
-0x44,0x45,0x42,0x46,0x43,0x47,0x9C,0x48,0x54,0x51,0x52,0x53,0x58,0x55,0x56,0x57,
-0x8C,0x49,0xCD,0xCE,0xCB,0xCF,0xCC,0xE1,0x70,0xDD,0xDE,0xDB,0xDC,0x8D,0x8E,0xDF
-);
-
-my @i8_2_e = ( # UTF-EBCDIC I8 to EBCDIC CP 1047
-0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
-0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
-0x40,0x5A,0x7F,0x7B,0x5B,0x6C,0x50,0x7D,0x4D,0x5D,0x5C,0x4E,0x6B,0x60,0x4B,0x61,
-0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0x7A,0x5E,0x4C,0x7E,0x6E,0x6F,
-0x7C,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,
-0xD7,0xD8,0xD9,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAD,0xE0,0xBD,0x5F,0x6D,
-0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96,
-0x97,0x98,0x99,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xC0,0x4F,0xD0,0xA1,0x07,
-0x20,0x21,0x22,0x23,0x24,0x25,0x06,0x17,0x28,0x29,0x2A,0x2B,0x2C,0x09,0x0A,0x1B,
-0x30,0x31,0x1A,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3A,0x3B,0x04,0x14,0x3E,0xFF,
-0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x51,0x52,0x53,0x54,0x55,0x56,
-0x57,0x58,0x59,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x70,0x71,0x72,0x73,
-0x74,0x75,0x76,0x77,0x78,0x80,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x9A,0x9B,0x9C,
-0x9D,0x9E,0x9F,0xA0,0xAA,0xAB,0xAC,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,
-0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBF,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xDA,0xDB,
-0xDC,0xDD,0xDE,0xDF,0xE1,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xFA,0xFB,0xFC,0xFD,0xFE
-);
-
use ExtUtils::Manifest qw(fullcheck);
$ExtUtils::Manifest::Quiet = 1;
use Getopt::Std;
@@ -171,19 +132,15 @@ my @exe = map { my ($f) = split; glob($f) }
map { split "\n" }
do { local (@ARGV, $/) = 'Porting/exec-bit.txt'; <> };
-my $log2 = log(2);
-sub log2 {
- my $n = shift;
- return log($n)/$log2;
-}
+if ($opts{e}) {
+ require './regen/charset_translations.pl';
-# Fundamental properties of UTF-EBCDIC, from utf8.h
-my $cont_info_bits = 5;
-my $cont_mask = (1 << $cont_info_bits) - 1;
-my $cont_mark = ((0xFF << $cont_info_bits) & 0xB0);
-my $min_cont_byte = $cont_mark;
+ # Translation tables, so far only to 1047
+ my @charset = grep { /1047/ } get_supported_code_pages();
+
+ my $charset = $charset[0];
+ my $a2e = get_a2n($charset);
-if ($opts{e}) {
die "$0 must be run on an ASCII platform" if ord("A") != 65;
print "Translating to EBCDIC...\n";
@@ -229,7 +186,7 @@ if ($opts{e}) {
# Just substitute the translated native value
my $low_byte = substr($cur, $utf16_low, 1);
- $low_byte = chr $a2e[ord $low_byte];
+ $low_byte = chr $a2e->[ord $low_byte];
substr($cur, $utf16_low, 1) = $low_byte;
}
@@ -250,7 +207,7 @@ if ($opts{e}) {
# characters whose EBCDIC representation is the same whether
# UTF-EBCDIC or not. This means we just translate
# byte-by-byte from Latin1 to EBCDIC.
- $xlated = ($text =~ s/(.)/chr $a2e[ord $1]/rsge);
+ $xlated = ($text =~ s/(.)/chr $a2e->[ord $1]/rsge);
}
else {
@@ -259,42 +216,7 @@ if ($opts{e}) {
# not. Also, the decode caused $text to now be viewed as
# UTF-8 characters instead of the input bytes. We convert to
# UTF-EBCDIC.
-
- while ($text =~ m/(.)/gs) {
- my $ord = ord $1;
- if ($ord < $min_cont_byte) { # UTF-EBCDIC invariant
- $xlated .= chr $a2e[$ord];
- next;
- }
-
- # Highest set bit tells us how many bits the number occupies.
- my $msb = int log2($ord);
-
- # Use the fundamental properties of UTF-EBCDIC from utf8.h to
- # determine how many bytes the representation is
- my $bytes = int ( ($msb + $cont_info_bits - 1 - 2)
- / ($cont_info_bits - 1));
- $bytes = 14 if $bytes > 7; # Fundamental property of Perl
- # extended UTF-EBCDIC
-
- # Again, a fundamental property, from utf8.h
- my $start_mark = ~(0xFF >> $bytes) & 0xFF;
-
- # 1 start byte; rest are continuations
- my $conts = $bytes - 1;
-
- # Use the underlying I8 fundamentals to get each byte of the I8
- # representation, then convert that to native with @i8_2_e
- my @i8;
- while ($conts-- > 0) { # First the continuations
- unshift @i8, chr($i8_2_e[$cont_mark | ($ord & $cont_mask)]);
- $ord >>= $cont_info_bits;
- }
-
- # Then the start byte
- unshift @i8, chr($i8_2_e[$start_mark | $ord]);
- $xlated .= join "", @i8;
- } # End of loop through the file
+ $xlated = ($text =~ s/(.)/cp_2_utfbytes(ord $1, $charset)/rsge);
}
}