Obsoleted by new material in IDSoftwareRelease2010
[ZOOM-Perl-moved-to-github.git] / ZOOM.xs
diff --git a/ZOOM.xs b/ZOOM.xs
index 96e0548..4e5de76 100644 (file)
--- a/ZOOM.xs
+++ b/ZOOM.xs
@@ -1,11 +1,12 @@
-/* $Id: ZOOM.xs,v 1.44 2006-11-28 16:47:19 mike Exp $ */
-
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
 
 #include <yaz/zoom.h>
+#include <yaz/diagsrw.h>
 #include <yaz/xmalloc.h>
+#include <yaz/log.h>
+#include <yaz/yaz-version.h>
 
 /* Used by the *_setl() functions */
 typedef char opaquechar;
@@ -204,6 +205,14 @@ const char *
 ZOOM_diag_str(error)
        int error
 
+const char *
+ZOOM_diag_srw_str(error)
+       int error
+       CODE:
+               RETVAL = yaz_diag_srw_str(error);
+       OUTPUT:
+               RETVAL
+
 ZOOM_resultset
 ZOOM_connection_search(arg0, q)
        ZOOM_connection arg0
@@ -297,7 +306,7 @@ ZOOM_record_error(rec, cp, addinfo, diagset)
        const char* &diagset
        CODE:
                {
-               const char *ccp, *caddinfo, *cdset;
+               const char *ccp = "", *caddinfo = "", *cdset = "";
                RETVAL = ZOOM_record_error(rec, &ccp, &caddinfo, &cdset);
                cp = (char*) ccp;
                addinfo = (char*) caddinfo;
@@ -310,16 +319,25 @@ ZOOM_record_error(rec, cp, addinfo, diagset)
                diagset
 
 # See "typemap" for discussion of the "const char *" return-type.
-#
-### but should use datachunk for in some (not all!) cases.
 const char *
-ZOOM_record_get(rec, type, len)
+ZOOM_record_get_string(rec, type)
        ZOOM_record rec
        const char* type
-       int &len
+       INIT:
+               int len;
+       CODE:
+               RETVAL = ZOOM_record_get(rec, type, &len);
+       OUTPUT:
+               RETVAL
+
+struct datachunk
+ZOOM_record_get_binary(rec, type)
+       ZOOM_record rec
+       const char* type
+       CODE:
+               RETVAL.data = (char*) ZOOM_record_get(rec, type, &RETVAL.len);
        OUTPUT:
                RETVAL
-               len
 
 void
 ZOOM_record_destroy(rec)
@@ -385,8 +403,8 @@ const char *
 ZOOM_scanset_term(scan, pos, occ, len)
        ZOOM_scanset scan
        size_t pos
-       int& occ
-       int& len
+       size_t& occ
+       size_t& len
        OUTPUT:
                RETVAL
                occ
@@ -396,8 +414,8 @@ const char *
 ZOOM_scanset_display_term(scan, pos, occ, len)
        ZOOM_scanset scan
        size_t pos
-       int& occ
-       int& len
+       size_t& occ
+       size_t& len
        OUTPUT:
                RETVAL
                occ
@@ -553,8 +571,7 @@ ZOOM_event(conns)
        INIT:
                SV *realconns;
                I32 n, i;
-               int res;
-               ZOOM_connection cs[100];
+               ZOOM_connection *cs;
        CODE:
                /*printf("* in ZOOM_event(%p)\n", conns);*/
                if (!SvROK(conns)) {
@@ -572,12 +589,14 @@ ZOOM_event(conns)
                if (n == 0) {
                        /*printf("* No connections in referenced array\n");*/
                        XSRETURN_IV(-3);
-               } else if (n >= sizeof(cs)/sizeof(cs[0])) {
+               }
+
+               /*printf("* n = %d\n", n);*/
+               if ((cs = (ZOOM_connection*) malloc(n * sizeof *cs)) == 0) {
                        /*printf("* Too many connections (%d)\n", (int) n);*/
                        XSRETURN_IV(-4);
                }
 
-               /*printf("* n = %d\n", n);*/
                for (i = 0; i < n; i++) {
                    SV **connp = av_fetch((AV*) realconns, i, (I32) 0);
                    SV *conn, *sv;
@@ -603,6 +622,7 @@ ZOOM_event(conns)
                    /*printf("got cs[%d] of %d = %p\n", (int) i, (int) n, cs[i]);*/
                }
                RETVAL = ZOOM_event((int) n, cs);
+               free(cs);
        OUTPUT:
                RETVAL
 
@@ -614,6 +634,10 @@ int
 ZOOM_connection_is_idle(cs)
        ZOOM_connection cs
 
+int
+ZOOM_connection_peek_event(cs)
+       ZOOM_connection cs
+
 
 # ----------------------------------------------------------------------------
 # What follows is the YAZ logging API.  This is not strictly part of