Merged 0.7.99 irssi.
[runtime.git] / apps / irssi / src / perl / irssi-core.pl
1 # NOTE: this is printed through printf()-like function,
2 # so no extra percent characters.
3
4 # %%d : must be first - 1 if perl libraries are to be linked 
5 #       statically with irssi binary, 0 if not
6 # %%s : must be second - use Irssi; use Irssi::Irc; etc..
7 package Irssi::Core;
8
9 use Symbol qw(delete_package);
10
11 sub is_static {
12   return %d;
13 }
14
15 sub destroy {
16   delete_package($_[0]);
17 }
18
19 sub eval_data {
20   my ($data, $id) = @_;
21   destroy("Irssi::Script::$id");
22
23   my $package = "Irssi::Script::$id";
24   my $eval = qq{package $package; %s sub handler { $data; }};
25   {
26       # hide our variables within this block
27       my ($filename, $package, $data);
28       eval $eval;
29   }
30   die $@ if $@;
31
32   eval {$package->handler;};
33   die $@ if $@;
34 }
35
36 sub eval_file {
37   my ($filename, $id) = @_;
38
39   local *FH;
40   open FH, $filename or die "File not found: $filename";
41   local($/) = undef;
42   my $data = <FH>;
43   close FH;
44   local($/) = "\n";
45
46   eval_data($data, $id);
47 }