#!/usr/bin/perl -w # akyuu0.pl - Don Yang (uguu.org) # # base90 -> binary decoder # # 09/07/08 use strict; use constant BASE => 90; binmode STDOUT; # Decode leading blocks my $buffer = ""; my $output; while(my $line = <>) { # 'z' = chr(33 + BASE - 1) chomp $line; $line =~ s/[^!-z]//gs; $buffer .= $line; $output = ""; my $limit = length($buffer) - (length($buffer) % 5); my $i = 0; for(; $i < $limit; $i += 5) { my ($e, $d, $c, $b, $a) = unpack 'C*', substr($buffer, $i, 5); my $x = (((($a - 33) * BASE + $b - 33) * BASE + $c - 33) * BASE + $d - 33) * BASE + $e - 33; $output .= pack 'V', $x; } $buffer = substr($buffer, $i); print $output; } # Decode last block if( $buffer ne "" ) { my $remainder = length($buffer); my ($e, $d, $c, $b, $a) = unpack 'C5', $buffer . "!!!!"; my $x = (((($a - 33) * BASE + $b - 33) * BASE + $c - 33) * BASE + $d - 33) * BASE + $e - 33; $output = pack 'V', $x; for(; $remainder < 5; $remainder++) { chop $output; } print $output; }