/*
- * $Id: zoomtst3.c,v 1.3 2001-11-15 08:58:29 adam Exp $
+ * $Id: zoomtst3.c,v 1.8 2002-06-05 21:09:04 adam Exp $
*
* Asynchronous multi-target client doing search and piggyback retrieval
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <ctype.h>
#include <yaz/xmalloc.h>
int main(int argc, char **argv)
{
int i;
+ int same_target = 0;
int no = argc-2;
- Z3950_connection z[500]; /* allow at most 500 connections */
- Z3950_resultset r[500]; /* and result sets .. */
- Z3950_options o = Z3950_options_create ();
+ ZOOM_connection z[500]; /* allow at most 500 connections */
+ ZOOM_resultset r[500]; /* and result sets .. */
+ ZOOM_options o = ZOOM_options_create ();
if (argc < 3)
{
*argv);
exit (1);
}
+ if (argc == 4 && isdigit(argv[1][0]) && !strchr(argv[1],'.'))
+ {
+ no = atoi(argv[1]);
+ same_target = 1;
+ }
+
if (no > 500)
no = 500;
/* async mode */
- Z3950_options_set (o, "async", "1");
+ ZOOM_options_set (o, "async", "1");
/* get first 10 records of result set (using piggyback) */
- Z3950_options_set (o, "count", "10");
+ ZOOM_options_set (o, "count", "10");
/* preferred record syntax */
- Z3950_options_set (o, "preferredRecordSyntax", "usmarc");
- Z3950_options_set (o, "elementSetName", "F");
+ ZOOM_options_set (o, "preferredRecordSyntax", "usmarc");
+ ZOOM_options_set (o, "elementSetName", "F");
/* connect to all */
for (i = 0; i<no; i++)
{
/* create connection - pass options (they are the same for all) */
- z[i] = Z3950_connection_create (o);
+ z[i] = ZOOM_connection_create (o);
/* connect and init */
- Z3950_connection_connect (z[i], argv[1+i], 0);
+ if (same_target)
+ ZOOM_connection_connect (z[i], argv[2], 0);
+ else
+ ZOOM_connection_connect (z[i], argv[1+i], 0);
}
/* search all */
for (i = 0; i<no; i++)
- r[i] = Z3950_connection_search_pqf (z[i], argv[argc-1]);
+ r[i] = ZOOM_connection_search_pqf (z[i], argv[argc-1]);
/* network I/O. pass number of connections and array of connections */
- while (Z3950_event (no, z))
- ;
+ while ((i = ZOOM_event (no, z)))
+ {
+ printf ("no = %d event = %d\n", i-1,
+ ZOOM_connection_last_event(z[i-1]));
+ }
/* no more to be done. Inspect results */
for (i = 0; i<no; i++)
{
int error;
const char *errmsg, *addinfo;
+ const char *tname = (same_target ? argv[2] : argv[1+i]);
/* display errors if any */
- if ((error = Z3950_connection_error(z[i], &errmsg, &addinfo)))
- fprintf (stderr, "%s error: %s (%d) %s\n", argv[i+1], errmsg,
+ if ((error = ZOOM_connection_error(z[i], &errmsg, &addinfo)))
+ fprintf (stderr, "%s error: %s (%d) %s\n", tname, errmsg,
error, addinfo);
else
{
/* OK, no major errors. Look at the result count */
int pos;
- printf ("%s: %d hits\n", argv[i+1], Z3950_resultset_size(r[i]));
+ printf ("%s: %d hits\n", tname, ZOOM_resultset_size(r[i]));
/* go through all records at target */
for (pos = 0; pos < 10; pos++)
{
int len; /* length of buffer rec */
const char *rec =
- Z3950_record_get (
- Z3950_resultset_record (r[i], pos), "render", &len);
+ ZOOM_record_get (
+ ZOOM_resultset_record (r[i], pos), "render", &len);
/* if rec is non-null, we got a record for display */
if (rec)
{
printf ("%d\n", pos+1);
if (rec)
fwrite (rec, 1, len, stdout);
- putchar ('\n');
+ printf ("\n");
}
}
}
/* destroy and exit */
for (i = 0; i<no; i++)
{
- Z3950_resultset_destroy (r[i]);
- Z3950_connection_destroy (z[i]);
+ ZOOM_resultset_destroy (r[i]);
+ ZOOM_connection_destroy (z[i]);
}
- Z3950_options_destroy(o);
+ ZOOM_options_destroy(o);
exit (0);
}