3 #=======================================================================
5 # File ID: 6e32b188-5d37-11df-98d6-90e6ba3022ac
6 # Konverterer fra cp865 til Unicode. Alternativ konverteringsfil
7 # spesifiseres med «-i»-parameteret, ellers brukes default filnavn. -p
8 # skriver ut en enkel HTML-header og -slutt.
9 # Lisens: GNU GPL v2 eller seinere.
10 #=======================================================================
16 my $map_file = "$ENV{HOME}/src/svn/div/trunk/ibm2ent/cp865.txt";
22 defined($main::opt_i
) && ($map_file = $main::opt_i
);
24 for (my $a = 0; $a < 256; $a++) {
25 $Table{$a} = widechar
($a);
28 open(MapFP
, "<$map_file") || die("$map_file: Can’t open map file: $!");
31 (/^#/ || /^\s*$/) && next;
32 if (/^0x(..)\s+0x(....)/) {
33 my ($Cp, $Uni) = (hex($1), hex($2));
35 $Table{$Cp} = widechar
($Uni);
38 print STDERR
"Line $.: Invalid line: \"$_\"\n";
42 $main::opt_P
&& print("<html><head></head><body><pre>\n") ||
43 $main::opt_p
&& print("<pre>\n");
46 s/(.)/$Table{ord($1)}/g;
50 $main::opt_P
&& print("</pre></body></html>\n") ||
51 $main::opt_p
&& print("</pre>\n");
53 # Henta fra h2u,v 1.5 (r386) 2002/11/20 00:09:40
56 my $allow_invalid = 0;
58 return sprintf("%c", $Val);
59 } elsif ($Val < 0x800) {
60 return sprintf("%c%c", 0xC0 | ($Val >> 6),
61 0x80 | ($Val & 0x3F));
62 } elsif ($Val < 0x10000) {
63 unless ($allow_invalid) {
64 if (($Val >= 0xD800 && $Val <= 0xDFFF) || ($Val eq 0xFFFE) || ($Val eq 0xFFFF)) {
68 return sprintf("%c%c%c", 0xE0 | ($Val >> 12),
69 0x80 | (($Val >> 6) & 0x3F),
70 0x80 | ($Val & 0x3F));
71 } elsif ($Val < 0x200000) {
72 return sprintf("%c%c%c%c", 0xF0 | ($Val >> 18),
73 0x80 | (($Val >> 12) & 0x3F),
74 0x80 | (($Val >> 6) & 0x3F),
75 0x80 | ($Val & 0x3F));
76 } elsif ($Val < 0x4000000) {
77 return sprintf("%c%c%c%c%c", 0xF8 | ($Val >> 24),
78 0x80 | (($Val >> 18) & 0x3F),
79 0x80 | (($Val >> 12) & 0x3F),
80 0x80 | (($Val >> 6) & 0x3F),
81 0x80 | ( $Val & 0x3F));
82 } elsif ($Val < 0x80000000) {
83 return sprintf("%c%c%c%c%c%c", 0xFC | ($Val >> 30),
84 0x80 | (($Val >> 24) & 0x3F),
85 0x80 | (($Val >> 18) & 0x3F),
86 0x80 | (($Val >> 12) & 0x3F),
87 0x80 | (($Val >> 6) & 0x3F),
88 0x80 | ( $Val & 0x3F));
90 return widechar
(0xFFFD);
96 #### End of file charconv ####