Scan for ZOOM.
[yaz-moved-to-github.git] / zoom / zoomtst8.c
diff --git a/zoom/zoomtst8.c b/zoom/zoomtst8.c
new file mode 100644 (file)
index 0000000..81c1173
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * $Id: zoomtst8.c,v 1.1 2001-12-30 22:21:11 adam Exp $
+ *
+ * Asynchronous multi-target client doing scan
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <yaz/nmem.h>
+#include <yaz/xmalloc.h>
+#include <yaz/zoom.h>
+
+int main(int argc, char **argv)
+{
+    int i;
+    int no = argc-2;
+    ZOOM_connection z[500]; /* allow at most 500 connections */
+    ZOOM_scanset s[500];  /* and scan sets .. */
+    ZOOM_options o = ZOOM_options_create ();
+
+    if (argc < 3)
+    {
+       fprintf (stderr, "usage:\n%s target1 target2 ... targetN scan\n",
+                *argv);
+       exit (1);
+    }
+    if (no > 500)
+        no = 500;
+
+    /* async mode */
+    ZOOM_options_set (o, "async", "1");
+
+    /* connect to all */
+    for (i = 0; i<no; i++)
+    {
+       /* create connection - pass options (they are the same for all) */
+       z[i] = ZOOM_connection_create (o);
+
+       /* connect and init */
+       ZOOM_connection_connect (z[i], argv[1+i], 0);
+    }
+    /* search all */
+    for (i = 0; i<no; i++)
+        s[i] = ZOOM_connection_scan (z[i], argv[argc-1]);
+
+    /* network I/O. pass number of connections and array of connections */
+    while (ZOOM_event (no, z))
+        ;
+
+    for (i = 0; i<no; i++)
+    {
+       int error;
+       const char *errmsg, *addinfo;
+       if ((error = ZOOM_connection_error(z[i], &errmsg, &addinfo)))
+           fprintf (stderr, "%s error: %s (%d) %s\n",
+                    ZOOM_connection_option_get(z[i], "host"),
+                     errmsg, error, addinfo);
+        else
+        {
+            int j;
+            printf ("%s\n", ZOOM_connection_option_get(z[i], "host"));
+            for (j = 0; j<ZOOM_scanset_size (s[i]); j++)
+            {
+                int occur, len;
+                const char *term;
+                term = ZOOM_scanset_term (s[i], j, &occur, &len);
+                if (term)
+                    printf ("%d %.*s %d\n", j, len, term, occur);
+                
+            }
+        }
+    }
+
+    /* destroy and exit */
+    for (i = 0; i<no; i++)
+    {
+        ZOOM_scanset_destroy (s[i]);
+        ZOOM_connection_destroy (z[i]);
+    }
+    ZOOM_options_destroy(o);
+    exit (0);
+}