Added SILC Thread Queue API
[crypto.git] / apps / irssi / src / perl / common / Core.xs
index 129b208118289eaf0691138354b0cc179cc295b4..451a07e2d735b8a78a20b6e125be9b81a409c9ca 100644 (file)
@@ -1,5 +1,9 @@
 #include "module.h"
 #include "irssi-version.h"
+#include "core.h"
+
+#include "pidwait.h"
+#include "session.h"
 
 #define DEFAULT_COMMAND_CATEGORY "Perl scripts' commands"
 
@@ -71,6 +75,8 @@ CODE:
                        p[n-1] = irssi_ref_object(ST(n));
                else if (SvROK(ST(n)))
                        p[n-1] = (void *) SvIV((SV*)SvRV(ST(n)));
+               else if (SvIOK(ST(n)))
+                       p[n-1] = (void *)SvIV(ST(n));
                else
                        p[n-1] = NULL;
        }
@@ -90,6 +96,8 @@ CODE:
                        p[n] = irssi_ref_object(ST(n));
                else if (SvROK(ST(n)))
                        p[n] = (void *) SvIV((SV*)SvRV(ST(n)));
+               else if (SvIOK(ST(n)))
+                       p[n] = (void *) SvIV(ST(n));
                else
                        p[n] = NULL;
        }
@@ -138,6 +146,39 @@ CODE:
        else
                perl_signal_add_hash(SvIV(ST(0)), ST(1));
 
+void
+signal_register(...)
+PREINIT:
+       HV *hv;
+        HE *he;
+       I32 len, pos;
+       const char *arr[7];
+CODE:
+       if (items != 1 || !is_hvref(ST(0)))
+               croak("Usage: Irssi::signal_register(hash)");
+
+        hv = hvref(ST(0));
+       hv_iterinit(hv);
+       while ((he = hv_iternext(hv)) != NULL) {
+               const char *key = hv_iterkey(he, &len);
+               SV *val = HeVAL(he);
+               AV *av;
+
+               if (!SvROK(val) || SvTYPE(SvRV(val)) != SVt_PVAV)
+                       croak("not array reference");
+
+               av = (AV *) SvRV(val);
+               len = av_len(av)+1;
+               if (len > 6) len = 6;
+               for (pos = 0; pos < len; pos++) {
+                       SV **val = av_fetch(av, pos, 0);
+                       arr[pos] = SvPV(*val, PL_na);
+               }
+               arr[pos] = NULL;
+               perl_signal_register(key, arr);
+       }
+
+
 int
 SIGNAL_PRIORITY_LOW()
 CODE:
@@ -241,7 +282,7 @@ input_add(source, condition, func, data)
        SV *func
        SV *data
 CODE:
-       RETVAL = perl_input_add(source, condition, func, data);
+       RETVAL = perl_input_add(source, condition, func, data, FALSE);
 OUTPUT:
        RETVAL
 
@@ -545,6 +586,13 @@ CODE:
 OUTPUT:
        RETVAL
 
+char *
+get_irssi_binary()
+CODE:
+       RETVAL = irssi_binary;
+OUTPUT:
+       RETVAL
+
 char *
 version()
 PREINIT:
@@ -556,6 +604,55 @@ CODE:
 OUTPUT:
         RETVAL
 
+int
+get_gui()
+CODE:
+       RETVAL = irssi_gui;
+OUTPUT:
+       RETVAL
+
+int
+IRSSI_GUI_NONE()
+CODE:
+       RETVAL = IRSSI_GUI_NONE;
+OUTPUT:
+       RETVAL
+
+int
+IRSSI_GUI_TEXT()
+CODE:
+       RETVAL = IRSSI_GUI_TEXT;
+OUTPUT:
+       RETVAL
+
+int
+IRSSI_GUI_GTK()
+CODE:
+       RETVAL = IRSSI_GUI_GTK;
+OUTPUT:
+       RETVAL
+
+int
+IRSSI_GUI_GNOME()
+CODE:
+       RETVAL = IRSSI_GUI_GNOME;
+OUTPUT:
+       RETVAL
+
+int
+IRSSI_GUI_QT()
+CODE:
+       RETVAL = IRSSI_GUI_QT;
+OUTPUT:
+       RETVAL
+
+int
+IRSSI_GUI_KDE()
+CODE:
+       RETVAL = IRSSI_GUI_KDE;
+OUTPUT:
+       RETVAL
+
 #*******************************
 MODULE = Irssi::Core   PACKAGE = Irssi::Server
 #*******************************