From: Jochen Eisinger Date: Thu, 1 Jan 2004 19:18:13 +0000 (+0000) Subject: Thu Jan 01 20:11:32 CET 2004 Jochen Eisinger X-Git-Tag: silc.server.0.9.16~6 X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=commitdiff_plain;h=0d97bdfcfb848137642068ea504b6b3d3bee6d20 Thu Jan 01 20:11:32 CET 2004 Jochen Eisinger * Add basic support for SILC protocol specific variables in perl. Affected files irssi/src/perl/silc/*, irssi/configure.in, irssi/src/perl/Makefile.am --- diff --git a/apps/irssi/configure.in b/apps/irssi/configure.in index 0f77c0cd..4e36a6ad 100644 --- a/apps/irssi/configure.in +++ b/apps/irssi/configure.in @@ -794,6 +794,7 @@ src/perl/Makefile 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 diff --git a/apps/irssi/src/perl/Makefile.am b/apps/irssi/src/perl/Makefile.am index 0aec5931..08552bd7 100644 --- a/apps/irssi/src/perl/Makefile.am +++ b/apps/irssi/src/perl/Makefile.am @@ -4,7 +4,7 @@ include $(top_srcdir)/Makefile.defines.in 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) @@ -113,6 +113,15 @@ textui_sources = \ 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 \ @@ -120,7 +129,8 @@ EXTRA_DIST = \ irssi-core.pl \ $(common_sources) \ $(ui_sources) \ - $(textui_sources) + $(textui_sources) \ + $(silc_sources) all-local: for dir in $(perl_dirs); do \ diff --git a/apps/irssi/src/perl/silc/Channel.xs b/apps/irssi/src/perl/silc/Channel.xs new file mode 100644 index 00000000..5191454a --- /dev/null +++ b/apps/irssi/src/perl/silc/Channel.xs @@ -0,0 +1,5 @@ +#include "module.h" + +MODULE = Irssi::Silc::Channel PACKAGE = Irssi::Silc PREFIX = silc_ +PROTOTYPES: ENABLE + diff --git a/apps/irssi/src/perl/silc/Makefile.PL.in b/apps/irssi/src/perl/silc/Makefile.PL.in new file mode 100644 index 00000000..71298944 --- /dev/null +++ b/apps/irssi/src/perl/silc/Makefile.PL.in @@ -0,0 +1,12 @@ +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'); diff --git a/apps/irssi/src/perl/silc/Query.xs b/apps/irssi/src/perl/silc/Query.xs new file mode 100644 index 00000000..93d30b43 --- /dev/null +++ b/apps/irssi/src/perl/silc/Query.xs @@ -0,0 +1,10 @@ +#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 diff --git a/apps/irssi/src/perl/silc/Server.xs b/apps/irssi/src/perl/silc/Server.xs new file mode 100644 index 00000000..e26bb45c --- /dev/null +++ b/apps/irssi/src/perl/silc/Server.xs @@ -0,0 +1,14 @@ +#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); diff --git a/apps/irssi/src/perl/silc/Silc.pm b/apps/irssi/src/perl/silc/Silc.pm new file mode 100644 index 00000000..3f6dea67 --- /dev/null +++ b/apps/irssi/src/perl/silc/Silc.pm @@ -0,0 +1,25 @@ +# +# 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; diff --git a/apps/irssi/src/perl/silc/Silc.xs b/apps/irssi/src/perl/silc/Silc.xs new file mode 100644 index 00000000..9dd3d123 --- /dev/null +++ b/apps/irssi/src/perl/silc/Silc.xs @@ -0,0 +1,37 @@ +#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); diff --git a/apps/irssi/src/perl/silc/module.h b/apps/irssi/src/perl/silc/module.h new file mode 100644 index 00000000..9061ea09 --- /dev/null +++ b/apps/irssi/src/perl/silc/module.h @@ -0,0 +1,16 @@ +#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; diff --git a/apps/irssi/src/perl/silc/typemap b/apps/irssi/src/perl/silc/typemap new file mode 100644 index 00000000..2d660e66 --- /dev/null +++ b/apps/irssi/src/perl/silc/typemap @@ -0,0 +1,15 @@ +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);