Thu Jan 01 20:11:32 CET 2004 Jochen Eisinger <jochen@penguin-breeder.org>
authorJochen Eisinger <coffee@silcnet.org>
Thu, 1 Jan 2004 19:18:13 +0000 (19:18 +0000)
committerJochen Eisinger <coffee@silcnet.org>
Thu, 1 Jan 2004 19:18:13 +0000 (19:18 +0000)
* Add basic support for SILC protocol specific variables in perl.
  Affected files irssi/src/perl/silc/*, irssi/configure.in,
  irssi/src/perl/Makefile.am

apps/irssi/configure.in
apps/irssi/src/perl/Makefile.am
apps/irssi/src/perl/silc/Channel.xs [new file with mode: 0644]
apps/irssi/src/perl/silc/Makefile.PL.in [new file with mode: 0644]
apps/irssi/src/perl/silc/Query.xs [new file with mode: 0644]
apps/irssi/src/perl/silc/Server.xs [new file with mode: 0644]
apps/irssi/src/perl/silc/Silc.pm [new file with mode: 0644]
apps/irssi/src/perl/silc/Silc.xs [new file with mode: 0644]
apps/irssi/src/perl/silc/module.h [new file with mode: 0644]
apps/irssi/src/perl/silc/typemap [new file with mode: 0644]

index 0f77c0cd79e51586a05c520ba00edd5dfcc0f13d..4e36a6ad61bb5e470f841dd5e0ba4cac38cb79b0 100644 (file)
@@ -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
index 0aec59311ce6dd19ecd60582ffc570b5d69a59a5..08552bd770ffbca3aa081082e5968af8d0d7ccd0 100644 (file)
@@ -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 (file)
index 0000000..5191454
--- /dev/null
@@ -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 (file)
index 0000000..7129894
--- /dev/null
@@ -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 (file)
index 0000000..93d30b4
--- /dev/null
@@ -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 (file)
index 0000000..e26bb45
--- /dev/null
@@ -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 (file)
index 0000000..3f6dea6
--- /dev/null
@@ -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 (file)
index 0000000..9dd3d12
--- /dev/null
@@ -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 (file)
index 0000000..9061ea0
--- /dev/null
@@ -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 (file)
index 0000000..2d660e6
--- /dev/null
@@ -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);