* Add basic support for SILC protocol specific variables in perl.
Affected files irssi/src/perl/silc/*, irssi/configure.in,
irssi/src/perl/Makefile.am
src/perl/common/Makefile.PL
src/perl/ui/Makefile.PL
src/perl/textui/Makefile.PL
+src/perl/silc/Makefile.PL
scripts/Makefile
docs/Makefile
docs/help/Makefile
moduledir = $(silc_modulesdir)
-perl_dirs = common ui textui
+perl_dirs = common ui textui silc
module_LTLIBRARIES = $(perl_module_lib) $(perl_module_fe_lib)
noinst_LTLIBRARIES = $(perl_static_lib) $(perl_static_fe_lib)
textui/typemap \
textui/module.h
+silc_sources = \
+ silc/Silc.xs \
+ silc/Silc.pm \
+ silc/Channel.xs \
+ silc/Server.xs \
+ silc/Query.xs \
+ silc/typemap \
+ silc/module.h
+
EXTRA_DIST = \
libperl_dynaloader.la \
libperl_orig.la \
irssi-core.pl \
$(common_sources) \
$(ui_sources) \
- $(textui_sources)
+ $(textui_sources) \
+ $(silc_sources)
all-local:
for dir in $(perl_dirs); do \
--- /dev/null
+#include "module.h"
+
+MODULE = Irssi::Silc::Channel PACKAGE = Irssi::Silc PREFIX = silc_
+PROTOTYPES: ENABLE
+
--- /dev/null
+use ExtUtils::MakeMaker;
+
+sub MY::post_constants {
+ 'include @top_srcdir@/Makefile.defines_int';
+}
+
+WriteMakefile('NAME' => 'Irssi::Silc',
+ 'LIBS' => '',
+ 'OBJECT' => '$(O_FILES)',
+ 'TYPEMAPS' => ['../common/typemap'],
+ 'INC' => '-I../../.. -I@top_srcdir@/src -I@top_srcdir@/src/core -I@top_srcdir@/src/silc/core -I@top_srcdir@/src/silc -I$(silc_top_srcdir) -I$(silc_top_srcdir)/lib/silccore -I$(silc_top_srcdir)/lib/silccrypt -I$(silc_top_srcdir)/lib/silcmath -I$(silc_top_srcdir)/lib/silcmath/mpi -I$(silc_top_srcdir)/lib/silcske -I$(silc_top_srcdir)/lib/silcsim -I$(silc_top_srcdir)/lib/silcutil -I$(silc_top_srcdir)/lib/silcsftp -I$(silc_top_srcdir)/lib/silcclient -I$(silc_top_srcdir)/lib/contrib -I$(silc_top_srcdir)/includes -I$(silc_top_srcdir)/doc @GLIB_CFLAGS@',
+ 'VERSION_FROM' => '@srcdir@/Silc.pm');
--- /dev/null
+#include "module.h"
+
+MODULE = Irssi::Silc::Query PACKAGE = Irssi::Silc::Server PREFIX = silc_
+PROTOTYPES: ENABLE
+
+Irssi::Silc::Query
+silc_query_create(server_tag, nick, automatic)
+ char *server_tag
+ char *nick
+ int automatic
--- /dev/null
+#include "module.h"
+
+MODULE = Irssi::Silc::Server PACKAGE = Irssi::Silc::Server PREFIX = silc_server_
+PROTOTYPES: ENABLE
+
+void
+silc_server_get_channels(server)
+ Irssi::Silc::Server server
+PREINIT:
+ char *ret;
+PPCODE:
+ ret = silc_server_get_channels(server);
+ XPUSHs(sv2_mortal(new_pv(ret)));
+ g_free(ret);
--- /dev/null
+#
+# Perl interface to irssi functions.
+#
+
+package Irssi::Silc;
+
+use strict;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
+
+$VERSION = "0.9";
+
+require Exporter;
+require DynaLoader;
+
+@ISA = qw(Exporter DynaLoader);
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+bootstrap Irssi::Silc $VERSION if (!Irssi::Core::is_static());
+
+Irssi::Silc::init();
+
+Irssi::EXPORT_ALL();
+
+1;
--- /dev/null
+#include "module.h"
+
+static void perl_silc_server_fill_hash(HV *hv, SILC_SERVER_REC *server)
+{
+ perl_server_fill_hash(hv, (SERVER_REC *) server);
+
+ hv_store(hv, "umode", 6, newSViv(server->umode), 0);
+}
+
+MODULE = Irssi::Silc PACKAGE = Irssi::Silc
+
+PROTOTYPES: ENABLE
+
+void
+init()
+PREINIT:
+ static int initialized = FALSE;
+ int chat_type;
+CODE:
+ if (initialized) return;
+ perl_api_version_check("Irssi::Silc");
+ initialized = TRUE;
+
+ chat_type = chat_protocol_lookup("SILC");
+
+ irssi_add_object(module_get_uniq_id("SERVER", 0),
+ chat_type, "Irssi::Silc::Server",
+ (PERL_OBJECT_FUNC) perl_silc_server_fill_hash);
+
+void
+deinit()
+CODE:
+
+BOOT:
+ irssi_boot(Silc__Channel);
+ irssi_boot(Silc__Query);
+ irssi_boot(Silc__Server);
--- /dev/null
+#include "../common/module.h"
+
+#include "silcincludes.h"
+#include "silcclient.h"
+#include "client_ops.h"
+#include "silc-core.h"
+
+#include "silc-channels.h"
+#include "silc-commands.h"
+#include "silc-queries.h"
+#include "silc-servers.h"
+
+typedef SILC_SERVER_REC *Irssi__Silc__Server;
+typedef SILC_CHANNEL_REC *Irssi__Silc__Channel;
+typedef QUERY_REC *Irssi__Silc__Query;
+typedef NICK_REC *Irssi__Silc__Nick;
--- /dev/null
+TYPEMAP
+Irssi::Silc::Server T_IrssiObj
+Irssi::Silc::Channel T_IrssiObj
+Irssi::Silc::Query T_IrssiObj
+Irssi::Silc::Nick T_IrssiObj
+
+INPUT
+
+T_IrssiObj
+ $var = irssi_ref_object($arg)
+
+OUTPUT
+
+T_IrssiObj
+ $arg = iobject_bless((SERVER_REC *)$var);