Added yaz-client command scansize
[yaz-moved-to-github.git] / client / client.c
index 8abd5a2..94c772e 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (C) 1995-2005, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: client.c,v 1.269 2005-01-16 22:12:39 adam Exp $
+ * $Id: client.c,v 1.273 2005-02-02 17:11:05 adam Exp $
  */
 
 #include <stdio.h>
@@ -10,6 +10,9 @@
 #include <assert.h>
 #include <time.h>
 #include <ctype.h>
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
 #if HAVE_LOCALE_H
 #include <locale.h>
 #endif
@@ -22,6 +25,9 @@
 #if HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
 
 #if HAVE_OPENSSL_SSL_H
 #include <openssl/bio.h>
@@ -33,6 +39,7 @@
 #endif
 
 #ifdef WIN32
+#include <sys/stat.h>
 #include <io.h>
 #include <windows.h>
 #define S_ISREG(x) (x & _S_IFREG)
@@ -123,6 +130,7 @@ static Odr_bitmask z3950_options;
 static int z3950_version = 3;
 static int scan_stepSize = 0;
 static int scan_position = 1;
+static int scan_size = 20;
 static char cur_host[200];
 
 typedef enum {
@@ -379,14 +387,18 @@ static int process_initResponse(Z_InitResponse *res)
            render_initUserInfo(uif->u.userInfo1);
        } else {
            printf("UserInformationfield:\n");
-           if (!z_External(print, (Z_External**)&uif, 0, 0)) {
+           if (!z_External(print, (Z_External**)&uif, 0, 0))
+           {
                odr_perror(print, "Printing userinfo\n");
                odr_reset(print);
            }
            if (uif->which == Z_External_octet) {
                printf("Guessing visiblestring:\n");
-               printf("'%s'\n", uif->u. octet_aligned->buf);
-           } else if (uif->which == Z_External_single) {
+               printf("'%.*s'\n", uif->u.octet_aligned->len,
+                      uif->u.octet_aligned->buf);
+           }
+           else if (uif->which == Z_External_single) 
+           {
                Odr_any *sat = uif->u.single_ASN1_type;
                oident *oid = oid_getentbyoid(uif->direct_reference);
                if (oid->value == VAL_OCLCUI) {
@@ -404,7 +416,8 @@ static int process_initResponse(Z_InitResponse *res)
                else
                {
                    /* Peek at any private Init-diagnostic APDUs */
-                   printf("### NAUGHTY: External is '%.*s'\n", sat->len, sat->buf);
+                   printf("### NAUGHTY: External is '%.*s'\n",
+                          sat->len, sat->buf);
                }
            }
            odr_reset (print);
@@ -458,11 +471,20 @@ static void render_initUserInfo(Z_OtherInformation *ui1) {
        Z_OtherInformationUnit *unit = ui1->list[i];
        printf("  %d: otherInfo unit contains ", i+1);
        if (unit->which == Z_OtherInfo_externallyDefinedInfo &&
+           unit->information.externallyDefinedInfo &&
            unit->information.externallyDefinedInfo->which ==
            Z_External_diag1) {
            render_diag(unit->information.externallyDefinedInfo->u.diag1);
-       } else {
-           printf("unsupported otherInfo unit type %d\n", unit->which);
+       } 
+       else if (unit->which != Z_OtherInfo_externallyDefinedInfo)
+       {
+           printf("unsupported otherInfo unit->which = %d\n", unit->which);
+       }
+       else 
+       {
+           printf("unsupported otherInfo unit external %d\n",
+                  unit->information.externallyDefinedInfo ? 
+                  unit->information.externallyDefinedInfo->which : -2);
        }
     }
 }
@@ -580,7 +602,7 @@ int session_connect(const char *arg)
     strncpy(type_and_host, arg, sizeof(type_and_host)-1);
     type_and_host[sizeof(type_and_host)-1] = '\0';
 
-    cmd_open_remember_last_open_command(arg,type_and_host);
+    cmd_open_remember_last_open_command(arg, type_and_host);
 
     if (yazProxy)
         conn = cs_create_host(yazProxy, 1, &add);
@@ -2264,9 +2286,14 @@ static int cmd_explain(const char *arg)
 
 static int cmd_init(const char *arg)
 {
+    if (*arg)
+    {
+        strncpy (cur_host, arg, sizeof(cur_host)-1);
+        cur_host[sizeof(cur_host)-1] = 0;
+    }
     if (!conn || protocol != PROTO_Z3950)
        return 0;
-    send_initRequest(0);
+    send_initRequest(cur_host);
     return 2;
 }
 
@@ -2849,6 +2876,14 @@ int cmd_scanpos(const char *arg)
     return 0;
 }
 
+int cmd_scansize(const char *arg)
+{
+    int r = sscanf(arg, "%d", &scan_size);
+    if (r == 0)
+        scan_size = 20;
+    return 0;
+}
+
 int cmd_scan(const char *arg)
 {
     if (protocol == PROTO_HTTP)
@@ -2860,12 +2895,12 @@ int cmd_scan(const char *arg)
            return 0;
        if (*arg)
        {
-           if (send_SRW_scanRequest(arg, scan_position, 20) < 0)
+           if (send_SRW_scanRequest(arg, scan_position, scan_size) < 0)
                return 0;
        }
        else
        {
-           if (send_SRW_scanRequest(last_scan_line, 1, 20) < 0)
+           if (send_SRW_scanRequest(last_scan_line, 1, scan_size) < 0)
                return 0;
        }
        return 2;
@@ -2892,12 +2927,12 @@ int cmd_scan(const char *arg)
        if (*arg)
        {
            strcpy (last_scan_query, arg);
-           if (send_scanrequest(arg, scan_position, 20, 0) < 0)
+           if (send_scanrequest(arg, scan_position, scan_size, 0) < 0)
                return 0;
        }
        else
        {
-           if (send_scanrequest(last_scan_query, 1, 20, last_scan_line) < 0)
+           if (send_scanrequest(last_scan_query, 1, scan_size, last_scan_line) < 0)
                return 0;
        }
        return 2;
@@ -4031,6 +4066,7 @@ static struct {
     {"scan", cmd_scan, "<term>",NULL,0,NULL},
     {"scanstep", cmd_scanstep, "<size>",NULL,0,NULL},
     {"scanpos", cmd_scanpos, "<size>",NULL,0,NULL},
+    {"scansize", cmd_scansize, "<size>",NULL,0,NULL},
     {"sort", cmd_sort, "<sortkey> <flag> <sortkey> <flag> ...",NULL,0,NULL},
     {"sort+", cmd_sort_newset, "<sortkey> <flag> <sortkey> <flag> ...",NULL,0,NULL},
     {"authentication", cmd_authentication, "<acctstring>",NULL,0,NULL},