Added SILC Thread Queue API
[crypto.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;
10
11 sub is_static {
12   return %d;
13 }
14
15 sub destroy {
16   eval { $_[0]->UNLOAD() if $_[0]->can('UNLOAD'); };
17   Symbol::delete_package($_[0]);
18 }
19
20 sub eval_data {
21   my ($data, $id) = @_;
22   destroy("Irssi::Script::$id");
23
24   my $package = "Irssi::Script::$id";
25   my $eval = qq{package $package; %s sub handler { $data; }};
26   {
27       # hide our variables within this block
28       my ($filename, $package, $data);
29       eval $eval;
30   }
31   die $@ if $@;
32
33   my $ret;
34   eval { $ret = $package->handler; };
35   die $@ if $@;
36   return $ret;
37 }
38
39 sub eval_file {
40   my ($filename, $id) = @_;
41
42   local *FH;
43   open FH, $filename or die "File not found: $filename";
44   local($/) = undef;
45   my $data = <FH>;
46   close FH;
47   local($/) = "\n";
48
49   eval_data($data, $id);
50 }