Fixed bug 227 and bug 228
[yaz-moved-to-github.git] / client / client.c
index 0f174b5..9378faf 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 1995-2004, Index Data
  * See the file LICENSE for details.
  *
- * $Id: client.c,v 1.250 2004-09-21 16:28:17 adam Exp $
+ * $Id: client.c,v 1.257 2004-12-02 13:55:35 ja7 Exp $
  */
 
 #include <stdio.h>
@@ -51,6 +51,7 @@
 #include <yaz/srw.h>
 #include <yaz/yaz-ccl.h>
 #include <yaz/cql.h>
+#include <yaz/ylog.h>
 
 #if HAVE_READLINE_READLINE_H
 #include <readline/readline.h>
@@ -115,7 +116,8 @@ static char *last_open_command = NULL;
 static int auto_reconnect = 0;
 static Odr_bitmask z3950_options;
 static int z3950_version = 3;
-
+static int scan_stepSize = 0;
+static int scan_position = 1;
 static char cur_host[200];
 
 typedef enum {
@@ -2638,6 +2640,7 @@ int send_scanrequest(const char *query, int pp, int num, const char *term)
     req->databaseNames = databaseNames;
     req->numberOfTermsRequested = &num;
     req->preferredPositionInResponse = &pp;
+    req->stepSize = odr_intdup(out, scan_stepSize);
     send_apdu(apdu);
     return 2;
 }
@@ -2800,6 +2803,20 @@ int cmd_sort_newset (const char *arg)
     return cmd_sort_generic (arg, 1);
 }
 
+int cmd_scanstep(const char *arg)
+{
+    scan_stepSize = atoi(arg);
+    return 0;
+}
+
+int cmd_scanpos(const char *arg)
+{
+    int r = sscanf(arg, "%d", &scan_position);
+    if (r == 0)
+        scan_position = 1;
+    return 0;
+}
+
 int cmd_scan(const char *arg)
 {
     if (only_z3950())
@@ -2821,7 +2838,7 @@ int cmd_scan(const char *arg)
     if (*arg)
     {
         strcpy (last_scan_query, arg);
-        if (send_scanrequest(arg, 1, 20, 0) < 0)
+        if (send_scanrequest(arg, scan_position, 20, 0) < 0)
             return 0;
     }
     else
@@ -3038,7 +3055,7 @@ int cmd_lang(const char* arg)
     return 1;
 }
 
-int cmd_source(const char* arg) 
+int cmd_source(const char* arg, int echo ) 
 {
     /* first should open the file and read one line at a time.. */
     FILE* includeFile;
@@ -3065,7 +3082,10 @@ int cmd_source(const char* arg)
         
         if ((cp = strrchr (line, '\n')))
             *cp = '\0';
-        
+       
+       if( echo ) {
+           printf( "processing line: %s\n",line );
+       };
         process_cmd_line(line);
     }
     
@@ -3076,6 +3096,15 @@ int cmd_source(const char* arg)
     return 1;
 }
 
+int cmd_source_echo(const char* arg) { 
+    cmd_source( arg, 1);
+}
+
+int cmd_source_noecho(const char* arg) {
+    cmd_source( arg, 0 );
+}
+
+
 int cmd_subshell(const char* args)
 {
     if(strlen(args)) 
@@ -3289,17 +3318,19 @@ void source_rcfile()
     struct stat statbuf;
     char buffer[1000];
     char* homedir=getenv("HOME");
-    
-    if(!homedir) return;
-    
-    sprintf(buffer,"%s/.yazclientrc",homedir);
-    
-    if(stat(buffer,&statbuf)==0) {
-        cmd_source(buffer);
-    }
+
+    if( homedir ) {
+       
+       sprintf(buffer,"%s/.yazclientrc",homedir);
+
+       if(stat(buffer,&statbuf)==0) {
+           cmd_source(buffer, 0 );
+       }
+       
+    };
     
     if(stat(".yazclientrc",&statbuf)==0) {
-        cmd_source(".yazclientrc");
+        cmd_source(".yazclientrc", 0 );
     }
 }
 
@@ -3694,6 +3725,20 @@ int cmd_set_otherinfo(const char* args)
     return 0;
 }
 
+int cmd_sleep(const char* args ) 
+{
+    int sec=atoi(args);
+    if( sec > 0 ) {
+#ifdef WIN32
+       Sleep(sec*1000);
+#else
+       sleep(sec);
+#endif
+       printf("Done sleeping %d seconds\n", sec);      
+    }
+    return 1;    
+}
+
 int cmd_list_otherinfo(const char* args)
 {
     int i;        
@@ -3845,6 +3890,8 @@ static struct {
     {"base", cmd_base, "<base-name>",NULL,0,NULL},
     {"show", cmd_show, "<rec#>['+'<#recs>['+'<setname>]]",NULL,0,NULL},
     {"scan", cmd_scan, "<term>",NULL,0,NULL},
+    {"scanstep", cmd_scanstep, "<size>",NULL,0,NULL},
+    {"scanpos", cmd_scanpos, "<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},
@@ -3870,7 +3917,7 @@ static struct {
     {"charset", cmd_charset, "<nego_charset> <output_charset>",NULL,0,NULL},
     {"marccharset", cmd_marccharset, "<charset_name>",NULL,0,NULL},
     {"lang", cmd_lang, "<language_code>",NULL,0,NULL},
-    {".", cmd_source, "<filename>",NULL,1,NULL},
+    {".", cmd_source_echo, "<filename>",NULL,1,NULL},
     {"!", cmd_subshell, "Subshell command",NULL,1,NULL},
     {"set_apdufile", cmd_set_apdufile, "<filename>",NULL,1,NULL},
     {"set_berfile", cmd_set_berfile, "<filename>",NULL,1,NULL},
@@ -3878,7 +3925,8 @@ static struct {
     {"set_cclfile", cmd_set_cclfile," <filename>",NULL,1,NULL},
     {"set_cqlfile", cmd_set_cqlfile," <filename>",NULL,1,NULL},
     {"set_auto_reconnect", cmd_set_auto_reconnect," on|off",complete_auto_reconnect,1,NULL},
-       {"set_otherinfo", cmd_set_otherinfo,"<otherinfoinddex> <oid> <string>",NULL,0,NULL},
+    {"set_otherinfo", cmd_set_otherinfo,"<otherinfoinddex> <oid> <string>",NULL,0,NULL},
+    {"sleep", cmd_sleep,"<seconds>",NULL,0,NULL},
     {"register_oid", cmd_register_oid,"<name> <class> <oid>",NULL,0,NULL},
     {"push_command", cmd_push_command,"<command>",command_generator,0,NULL},
     {"register_tab", cmd_register_tab,"<commandname> <tab>",command_generator,0,NULL},