diff options
| author | Alexander Færøy | 2014-05-31 13:10:46 +0200 | 
|---|---|---|
| committer | Alexander Færøy | 2014-05-31 13:10:46 +0200 | 
| commit | 2d0759e6ca5767b48bcc85bf38c2c43d5f0b63b1 (patch) | |
| tree | 1c5e6d817c88e67b46e216a50e0aef5428bf63df /scripts/foo.pl | |
| parent | 2d080422d79d1fd49d6c5528593ccaaff9bfc583 (diff) | |
| download | scripts.irssi.org-2d0759e6ca5767b48bcc85bf38c2c43d5f0b63b1.tar.bz2 | |
Import scripts from scripts.irssi.org
Diffstat (limited to 'scripts/foo.pl')
| -rw-r--r-- | scripts/foo.pl | 75 | 
1 files changed, 75 insertions, 0 deletions
| diff --git a/scripts/foo.pl b/scripts/foo.pl new file mode 100644 index 0000000..b80ecfa --- /dev/null +++ b/scripts/foo.pl @@ -0,0 +1,75 @@ +use strict; +use vars qw($VERSION %IRSSI); + +use Irssi qw(command_bind signal_add signal_emit signal_stop); + +$VERSION = '3.00'; +%IRSSI = ( +    authors	=> 'Juerd, Shiar', +    contact	=> 'juerd@juerd.nl, shiar@shiar.org', +    name	=> 'UeberRot encryption', +    description	=> 'Rot n+i encryption and decryption', +    license	=> 'Public Domain', +    url		=> 'http://juerd.nl/site.plp/irssi', +    changed	=> 'Tue Jan 21 01:40 CET 2003', +); + +my $char1 = "\xC0-\xCF\xD2-\xD6\xD8-\xDD"; +my $char2 = "\xE0-\xF6\xF8-\xFF"; + +sub rot { +    my ($dir, $rotABC, $rot123, $rotshift, $msg) = @_; +    my $i = 0; +    for (0 .. length $msg) { +	my $char = \substr $msg, $_, 1; +	$i += $rotshift; +	$$char =~ tr/a-zA-Z/b-zaB-ZA/ for 1..abs $dir *26 - ($rotABC + $i) % 26; +	$$char =~ tr/0-9/1-90/        for 1..abs $dir *10 - ($rot123 + $i) % 10; +    } +    return $msg; +} + +sub sig_message { +    my $signal = shift; +    my $msg = \$_[1]; +    return unless $$msg =~ s/^\cO(\cB+)\cO(\cB+)\cO(\cO*)//; +    my $orig = $$msg; +    $$msg = "\cB" . rot 1, length $1, length $2, length $3, $$msg; +    $$msg =~ s{\c_\c_\cO([a-zA-Z])}< +	my $char = $1; +	eval qq{ +	    \$char =~ tr/A-Z/$char1/; +	    \$char =~ tr/a-z/$char2/; +	}; +	$char; +    >ego; +    signal_stop; +    signal_emit($signal, $_[0], $orig, @_[2..$#_]); +    signal_emit($signal, @_); +} + +command_bind rot => sub { +    my ($data, $server, $window) = @_; +    $data =~ s/([$char1$char2])/\c_\c_\cO$1/og; +    eval qq{ +        \$data =~ tr/$char1/A-Z/; +        \$data =~ tr/$char2/a-z/; +    }; +    my $rotABC   = 1 +     int rand 13; +    my $rot123   = 1 + 2 * int rand 4; +    my $rotshift = 1 +     int rand 10; +    $window->command( +	sprintf "say \cO%s\cO%s\cO%s%s", +	"\cB" x $rotABC, +	"\cB" x $rot123, +        "\cO" x $rotshift, +	rot 0, $rotABC, $rot123, $rotshift, $data +    ); +}; + +signal_add { +    'message private'     => sub { sig_message 'message private'     => @_ }, +    'message public'      => sub { sig_message 'message public'      => @_ }, +    'message own_private' => sub { sig_message 'message own_private' => @_ }, +    'message own_public'  => sub { sig_message 'message own_public'  => @_ }, +}; | 
