html/foo.pl


   1 use strict;
   2 use vars qw($VERSION %IRSSI);
   3 
   4 use Irssi qw(command_bind signal_add signal_emit signal_stop);
   5 
   6 $VERSION = '3.00';
   7 %IRSSI = (
   8     authors	=> 'Juerd, Shiar',
   9     contact	=> 'juerd@juerd.nl, shiar@shiar.org',
  10     name	=> 'UeberRot encryption',
  11     description	=> 'Rot n+i encryption and decryption',
  12     license	=> 'Public Domain',
  13     url		=> 'http://juerd.nl/site.plp/irssi',
  14     changed	=> 'Tue Jan 21 01:40 CET 2003',
  15 );
  16 
  17 my $char1 = "\xC0-\xCF\xD2-\xD6\xD8-\xDD";
  18 my $char2 = "\xE0-\xF6\xF8-\xFF";
  19 
  20 sub rot {
  21     my ($dir, $rotABC, $rot123, $rotshift, $msg) = @_;
  22     my $i = 0;
  23     for (0 .. length $msg) {
  24 	my $char = \substr $msg, $_, 1;
  25 	$i += $rotshift;
  26 	$$char =~ tr/a-zA-Z/b-zaB-ZA/ for 1..abs $dir *26 - ($rotABC + $i) % 26;
  27 	$$char =~ tr/0-9/1-90/        for 1..abs $dir *10 - ($rot123 + $i) % 10;
  28     }
  29     return $msg;
  30 }
  31 
  32 sub sig_message {
  33     my $signal = shift;
  34     my $msg = \$_[1];
  35     return unless $$msg =~ s/^\cO(\cB+)\cO(\cB+)\cO(\cO*)//;
  36     my $orig = $$msg;
  37     $$msg = "\cB" . rot 1, length $1, length $2, length $3, $$msg;
  38     $$msg =~ s{\c_\c_\cO([a-zA-Z])}<
  39 		my $char = $1;
  40 		eval qq{
  41 	    	    \$char =~ tr/A-Z/$char1/;
  42 	    	    \$char =~ tr/a-z/$char2/;
  43 		};
  44 		$char;
  45         >ego;
  46     signal_stop;
  47     signal_emit($signal, $_[0], $orig, @_[2..$#_]);
  48     signal_emit($signal, @_);
  49 }
  50 
  51 command_bind rot => sub {
  52     my ($data, $server, $window) = @_;
  53     $data =~ s/([$char1$char2])/\c_\c_\cO$1/og;
  54     eval qq{
  55                 \$data =~ tr/$char1/A-Z/;
  56                 \$data =~ tr/$char2/a-z/;
  57         };
  58     my $rotABC   = 1 +     int rand 13;
  59     my $rot123   = 1 + 2 * int rand 4;
  60     my $rotshift = 1 +     int rand 10;
  61     $window->command(
  62 	sprintf "say \cO%s\cO%s\cO%s%s",
  63 	"\cB" x $rotABC,
  64 	"\cB" x $rot123,
  65         "\cO" x $rotshift,
  66 	rot 0, $rotABC, $rot123, $rotshift, $data
  67     );
  68 };
  69 
  70 signal_add {
  71     'message private'     => sub { sig_message 'message private'     => @_ },
  72     'message public'      => sub { sig_message 'message public'      => @_ },
  73     'message own_private' => sub { sig_message 'message own_private' => @_ },
  74     'message own_public'  => sub { sig_message 'message own_public'  => @_ },
  75 };