2 # infobot copyright (C) kevin lenzo 1997-98
33 my($locMsg) = $message;
35 if ($message =~ /^\s*$/) {
39 foreach (keys %digits) {
40 $locMsg =~ s/$_/$digits{$_}/g;
43 while ($locMsg =~ /(exp ([\w\d]+))/) {
44 my($exp, $val) = ($1, exp $2);
45 $locMsg =~ s/$exp/+$val/g;
48 while ($locMsg =~ /(hex2dec\s*([0-9A-Fa-f]+))/) {
49 my($exp, $val) = ($1, hex $2);
50 $locMsg =~ s/$exp/+$val/g;
53 if ($locMsg =~ /^\s*(dec2hex\s*(\d+))\s*\?*/) {
54 my ($exp, $val) = ($1, sprintf("%x", "$2"));
55 $locMsg =~ s/$exp/+$val/g;
59 $locMsg =~ s/\be\b/$e/;
61 while ($locMsg =~ /(log\s*((\d+\.?\d*)|\d*\.?\d+))\s*/) {
62 my ($exp, $res) = ($1, $2);
63 my $val = ($res) ? log($res) : "Infinity";
64 $locMsg =~ s/$exp/+$val/g;
67 while ($locMsg =~ /(bin2dec ([01]+))/) {
69 my $val = join ("", unpack("B*",$2)) ;
70 $locMsg =~ s/$exp/+$val/g;
73 while ($locMsg =~ /(dec2bin (\d+))/) {
75 my $val = join('', unpack('B*', pack('N',$2)));
77 $locMsg =~ s/$exp/+$val/g;
81 s/\bpi\b/3.14159265/g;
85 s/\bdiv(ided by)? /\/ /g;
89 s/\bto\s+(\d+)(r?st|nd|rd|th)?( power)?/\*\*$1 /ig;
90 s/\bpercent of/*0.01*/ig;
94 s/\bsquare root of (\d+)/$1 ** 0.5 /ig;
95 s/\bcubed? root of (\d+)/$1 **(1.0\/3.0) /ig;
97 s/(bit(-| )?)?xor(\'?e?d( with))?/\^/g;
98 s/(bit(-| )?)?or(\'?e?d( with))?/\|/g;
99 s/bit(-| )?and(\'?e?d( with))?/\& /g;
103 # what the hell is this shit?
104 if (($locMsg =~ /^\s*[-\d*+\s()\/^\.\|\&\*\!]+\s*$/)
105 && ($locMsg !~ /^\s*\(?\d+\.?\d*\)?\s*$/)
106 && ($locMsg !~ /^\s*$/)
107 && ($locMsg !~ /^\s*[( )]+\s*$/)
108 && ($locMsg =~ /\d+/)
110 $locMsg =~ s/([0-9]+\.[0-9]+(\.[0-9]+)+)/"$1"/g;
111 $locMsg = eval($locMsg);
113 if (defined $locMsg and $locMsg =~ /^[-+\de\.]+$/) {
114 $locMsg = sprintf("%1.12f", $locMsg);
115 $locMsg =~ s/\.?0+$//;
117 if (length $locMsg > 30) {
118 $locMsg = "a number with quite a few digits...";
121 if (defined $locMsg) {
122 &DEBUG("math: locMsg => '$locMsg'... FIXME");
124 &status("math: could not really compute.");
132 if (defined $locMsg and $locMsg ne $message) {