#! /usr/local/bin/perl # character code conversion from and to ISO 8859-1 code # Parameters: # input code # output code # carriage return (y(es), n(o), u(nmodified)) # line width (number or c(oncatenate) or u(nmodified)) # # Warning: There is no parameter checking in this program; it is assumed # that appropriate parameter checking is done in the calling script. sub WriteCR { if ($CrPar eq 'y') { $Program = $Program . 'print "\r\n";' . "\n"; } else { $Program = $Program . 'print "\n";' . "\n"; }; } $iCode = '\200-\253\256\260-\377\254\255\257'; $bCode = '\000-\037 !c??Y|?"ca????AAAAAAACEEEEIIIIDNOOOOOxOUUUUYTsaaaaaaaceeeeiiiidnooooo:ouuuuyty-'; $ICode = '\367\356\372\325\264\271-\274\277-\305\310-\316\331-\334\337\346\362\376\237\377\255\275\234\317\276\335\365\371\270\246\256\251\370\361\375\374\357\260\364\261\263\373\247\257\254\253\363\250\267\265-\266\307\216-\217\222\200\324\220\322-\323\336\326-\330\321\245\343\340\342\345\231\236\235\353\351-\352\232\355\347\341\205\240\203\306\204\206\221\207\212\202\210-\211\215\241\214\213\320\244\225\242\223\344\224\366\233\227\243\226\201\354\350\230\252\360\262'; $MCode = '\376\320\372\365\266-\270\272\303\305-\306\311\316-\317\322-\325\331-\332\334\337-\340\342-\344\366-\367\371\373\377\304\312\301\242-\243\333\264\245\244\254\251\273\307\250\241\261-\263\253\265\246\341\374\271\274\310\240\275\252\300\313\347\345\314\200-\201\256\202\351\203\346\350\355\352-\354\321\204\361\356-\357\315\205\327\257\364\362-\363\206\335-\336\247\210\207\211\213\212\214\276\215\217\216\220-\221\223\222\224-\225\360\226\230\227\231\233\232\326\277\235\234\236-\237\375\260\330\302\255\370'; $DINlow = '\100\133\134\135\173\174\175\176'; $DINhigh = '\247\304\326\334\344\366\374\337'; if ($ARGV[0] =~ /^(.)(.)$/) { $FromPar = $1; $FromPar2 = ord($2); } else { $FromPar = $ARGV[0]; }; if ($ARGV[1] =~ /^(.)(.)$/) { $ToPar = $1; $ToPar2 = ord($2); } else { $ToPar = $ARGV[1]; }; $CrPar = $ARGV[2]; $LwPar = $ARGV[3]; die "wrong parameters ($FromPar, $ToPar, $CrPar)" if ! ($FromPar && $ToPar && $CrPar); if ($FromPar eq 'b') { $FromPar = 'i'; }; $Program = "while(){\nchop;\n"; if ($CrPar ne 'u') { $Program = $Program . "if (/\\r\$/) {\nchop;\n};\n"; }; if ($LwPar eq 'c') { $Program = $Program . "if (\$newline) {\nif (/^\\s*\$|^\\s*[-=]|\\t|\\S+ (\\S+ | )/) {\n"; &WriteCR; $Program = $Program . "\$newline = 2;\n} elsif (\$newline == 2) {\n"; &WriteCR; $Program = $Program . "\$newline = 1;\n} else {\nprint \' \';\n\$newline = 1;\n/^\\s*(.*)\$/;\n\$_ = \$1;\n};\n} else {\n\$newline = 1;\n};\n"; }; if ($ToPar =~ /^[ibIM]$/) { if ($ToPar eq 'i') { $outcode = $iCode; $incode = 1; } elsif ($ToPar eq 'b') { $outcode = $bCode; } elsif ($ToPar eq 'I') { $outcode = $ICode; } else { $outcode = $MCode; }; }; if ($FromPar eq 'a') { $aIn{"groess"} = "gr\366\337"; $aIn{"Groess"} = "Gr\366\337"; $aIn{"ausse"} = "au\337e"; $aIn{"Ausse"} = "Au\337e"; $aIn{"Gross"} = "Gro\337"; $aIn{"gross"} = "gro\337"; $aIn{"maess"} = "m\344\337"; $aIn{"eiss"} = "ei\337"; $aIn{"euss"} = "eu\337"; $aIn{"iess"} = "ie\337"; $aIn{"ss"} = "\337"; $aIn{"Fuell"} = "F\374ll"; $aIn{"Huell"} = "H\374ll"; $aIn{"fuell"} = "f\374ll"; $aIn{"huell"} = "h\374ll"; $aIn{"Ae"} = "\304"; $aIn{"Oe"} = "\326"; $aIn{"Ue"} = "\334"; $aIn{"ae"} = "\344"; $aIn{"oe"} = "\366"; $aIn{"ue"} = "\374"; $Program = $Program . 's/([-%.A-Za-z0-9]*@[-%.A-Za-z0-9]*|(Micha|Rapha|Raffa|[Ii]sra|Samu)el|aussetz|[Gg]roess|[Aa]uss.|[Gg]ross|maess|[Qq]ueue|e[iu]ss|iess|sstr|ss[aceiouy]|[^aeiouy]ss|ss|[FHfh]uell|uerst|ue[iu]|uell|[AEQaeq]ue|[AOUaou]e)/$aIn{$1}?$aIn{$1}:$1/ge;' . "\n"; } elsif ($FromPar eq 'd') { $Program = $Program . "tr/$DINlow/$DINhigh/;\n"; } elsif ($FromPar eq 't') { $tIn{'""'} = '"'; $tIn{'"`'} = '"'; $tIn{"\042\047"} = '"'; $tIn{'"A'} = "\304"; $tIn{'"O'} = "\326"; $tIn{'"U'} = "\334"; $tIn{'"a'} = "\344"; $tIn{'"o'} = "\366"; $tIn{'"u'} = "\374"; $tIn{'"s'} = "\337"; $Program = $Program . 's/(\042["`\047AOUaous])/$tIn{$1}/ge;' . "\n"; } elsif ($FromPar eq 'o') { if (! $FromPar2) { $FromPar2 = 0134; }; $Program = $Program . 's/\\' . sprintf("%03o", $FromPar2) . '([0-7]{3})/sprintf("%c",oct($1))/ge;' . "\n"; } elsif (($FromPar eq 'x') || ($FromPar eq 'X')) { if (! $FromPar2) { $FromPar2 = 075; }; $Program = $Program . 's/\\' . sprintf("%03o", $FromPar2) . '([0-9A-Fa-f]{2})/sprintf("%c",hex($1))/ge;' . "\n"; } elsif ($FromPar eq 'u') { } elsif ($FromPar eq 'I') { if ($outcode) { $Program = $Program . "tr/$ICode/$outcode/;\n"; }; $incode = 1; } elsif ($FromPar eq 'M') { if ($outcode) { $Program = $Program . "tr/$MCode/$outcode/;\n"; }; $incode = 1; }; if ($outcode && ! $incode) { $Program = $Program . "tr/$iCode/$outcode/;\n"; }; if ($ToPar eq 'd') { $Program = $Program . "tr/$DINhigh/$DINlow/;\n"; $ToPar = 'a'; }; if ($ToPar eq 'a') { $aOut{"\251"} = "(c)"; $aOut{"\253"} = "<<"; $aOut{"\256"} = "(R)"; $aOut{"\261"} = "+/-"; $aOut{"\273"} = ">>"; $aOut{"\274"} = "1/4"; $aOut{"\275"} = "1/2"; $aOut{"\276"} = "3/4"; $aOut{"\304"} = "Ae"; $aOut{"\305"} = "Aa"; $aOut{"\306"} = "AE"; $aOut{"\326"} = "Oe"; $aOut{"\334"} = "Ue"; $aOut{"\336"} = "Th"; $aOut{"\337"} = "ss"; $aOut{"\344"} = "ae"; $aOut{"\345"} = "aa"; $aOut{"\346"} = "ae"; $aOut{"\366"} = "oe"; $aOut{"\374"} = "ue"; $aOut{"\376"} = "th"; $aOut{"\377"} = "ij"; $Program = $Program . 'if(/[\274-\276]/){s/(\d)([\274-\276])/$1 $2/g;s/([\274-\276])(\d)/$1 $2/g;};' . "\n" . 's/([\251\253\256\261\273-\276\304-\306\326\334\336\337\344-\346\366\374\376\377])/$aOut{$1}/ge;' . "\n" . "tr/$iCode/$bCode/;\n"; } elsif ($ToPar eq 't') { if ($ToPar2) { $Program = $Program . 'if(/"/){s/(^|[\009 (])"/$1\253/g;s/"($|[\009 )])/\273$1/g;s/"/\047\047/g;};' . "\n"; }; $tOut{"\042"} = '""'; $tOut{"\253"} = '"`'; $tOut{"\273"} = "\042\047"; $tOut{"\304"} = '"A'; $tOut{"\326"} = '"O'; $tOut{"\334"} = '"U'; $tOut{"\337"} = '"s'; $tOut{"\344"} = '"a'; $tOut{"\366"} = '"o'; $tOut{"\374"} = '"u'; $Program = $Program . 's/([\042\253\273\304\326\334\337\344\366\374])/$tOut{$1}/ge;' . "\n" . "tr/$iCode/$bCode/;\n"; } elsif ($ToPar eq 'o') { if (! $ToPar2) { $ToPar2 = 0134; }; $Program = $Program . 's/([\000-\037\\' . sprintf("%03o", $ToPar2) . '\177-\377])/sprintf("%c%03o",' . sprintf("%d", $ToPar2) . ',ord($1))/ge;' . "\n"; } elsif (($ToPar eq 'x') || ($ToPar eq 'X')) { if (! $ToPar2) { $ToPar2 = 075; }; $Program = $Program . 's/([\000-\037\\' . sprintf("%03o", $ToPar2) . '\177-\377])/sprintf("%c%02' . sprintf("%s\",%d", $ToPar, $ToPar2) . ',ord($1))/ge;' . "\n"; } elsif ($ToPar eq 'h') { $Program = $Program . 'tr/\011/ /; s/([\046\074\177-\377])/' . "'&#'.ord(\$1).';'/ge;\n"; } elsif ($ToPar eq 'u') { }; if ($CrPar eq 'y') { $cr = "\r"; } else { $cr = ''; }; if ($LwPar eq 'u') { $Program = $Program . 'print "$_"; '; &WriteCR; } elsif ($LwPar eq 'c') { $Program = $Program . 'print "$_";' . "\n};\nif (\$newline) {\n"; &WriteCR; } else { $Program = $Program . "while (length > $LwPar) {\n\$offs = rindex (\$_, \' \', $LwPar);\n" . "if (\$offs > 0) {\nprint substr (\$_, 0, \$offs); "; &WriteCR; $Program = $Program . "\$_ = substr (\$_, \$offs+1);\n} else {\nlast;\n};\n};\n" . 'print "$_";' . "\n"; &WriteCR; }; $Program = $Program . "};\n"; if ($ARGV[4]) { print $Program; } else { eval $Program; };