changed output to be non-cascarding when using -n switch
[yaz-moved-to-github.git] / zoom / zoomsh.c
index fb25837..0d14c02 100644 (file)
@@ -1,11 +1,13 @@
 /*
- * Copyright (C) 1995-2005, Index Data ApS
+ * Copyright (C) 1995-2007, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: zoomsh.c,v 1.39 2005-11-02 21:41:27 adam Exp $
+ * $Id: zoomsh.c,v 1.43 2007-01-03 08:42:17 adam Exp $
  */
 
-/* ZOOM-C Shell */
+/** \file zoomsh.c
+    \brief ZOOM C command line tool (shell)
+*/
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -182,22 +184,36 @@ static void display_records (ZOOM_connection c,
         int pos = i + start;
         ZOOM_record rec = ZOOM_resultset_record (r, pos);
         const char *db = ZOOM_record_get (rec, "database", 0);
-        int len, opac_len;
-        const char *render = ZOOM_record_get (rec, "render", &len);
-        const char *opac_render = ZOOM_record_get (rec, "opac", &opac_len);
-        const char *syntax = ZOOM_record_get (rec, "syntax", 0);
-        /* if rec is non-null, we got a record for display */
-        if (rec)
+        
+        if (ZOOM_record_error(rec, 0, 0, 0))
+        {
+            const char *msg;
+            const char *addinfo;
+            const char *diagset;
+            int error = ZOOM_record_error(rec, &msg, &addinfo, &diagset);
+            
+            printf("%d %s: %s (%s:%d) %s\n", pos, (db ? db : "unknown"),
+                   msg, diagset, error, addinfo);
+        }
+        else
         {
-            char oidbuf[100];
-            (void) oid_name_to_dotstring(CLASS_RECSYN, syntax, oidbuf);
-            printf ("%d %s %s (%s)\n",
-                    pos+1, (db ? db : "unknown"), syntax, oidbuf);
-            if (render)
-                fwrite (render, 1, len, stdout);
-            printf ("\n");
-            if (opac_render)
-                fwrite (opac_render, 1, opac_len, stdout);
+            int len, opac_len;
+            const char *render = ZOOM_record_get (rec, "render", &len);
+            const char *opac_render = ZOOM_record_get (rec, "opac", &opac_len);
+            const char *syntax = ZOOM_record_get (rec, "syntax", 0);
+            /* if rec is non-null, we got a record for display */
+            if (rec)
+            {
+                char oidbuf[100];
+                (void) oid_name_to_dotstring(CLASS_RECSYN, syntax, oidbuf);
+                printf ("%d %s %s (%s)\n",
+                        pos, (db ? db : "unknown"), syntax, oidbuf);
+                if (render)
+                    fwrite (render, 1, len, stdout);
+                printf ("\n");
+                if (opac_render)
+                    fwrite (opac_render, 1, opac_len, stdout);
+            }
         }
             
     }
@@ -354,8 +370,8 @@ static void cmd_search (ZOOM_connection *c, ZOOM_resultset *r,
             int start = ZOOM_options_get_int (options, "start", 0);
             int count = ZOOM_options_get_int (options, "count", 0);
 
-            printf ("%s: %d hits\n", ZOOM_connection_option_get(c[i], "host"),
-                    ZOOM_resultset_size(r[i]));
+            printf ("%s: %ld hits\n", ZOOM_connection_option_get(c[i], "host"),
+                    (long) ZOOM_resultset_size(r[i]));
             /* and display */
             display_records (c[i], r[i], start, count);
         }