Implement ZOOM_scanset_display_term
authorAdam Dickmeiss <adam@indexdata.dk>
Wed, 19 Nov 2003 19:07:26 +0000 (19:07 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Wed, 19 Nov 2003 19:07:26 +0000 (19:07 +0000)
CHANGELOG
doc/frontend.xml
doc/zoom.xml
include/yaz/zoom.h
src/zoom-c.c

index 534ce72..d5199db 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,10 @@ Possible compatibility problems with earlier versions marked with '*'.
 
 --- (IN PROGRESS)
 
+Add function ZOOM_scanset_display_term.
+
+For Scan yaz-client shows displayTerm if present.
+
 Utility yaz-iconv is now installed by default along with the man page 
 yaz-iconv.1.
 
index a455153..01d1933 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $Id: frontend.xml,v 1.18 2003-11-03 10:46:52 adam Exp $ -->
+<!-- $Id: frontend.xml,v 1.19 2003-11-19 19:07:26 adam Exp $ -->
  <chapter id="server"><title>Generic server</title>
   <sect1><title>Introduction</title>
    
@@ -817,7 +817,7 @@ typedef struct bend_scan_rr {
      The above for the Apache 1.3 series.
     </para>
    </example>
-   <example><title>Running a aerver with local access only</title>
+   <example><title>Running a server with local access only</title>
     <para>
      Servers that is only being accessed from the local host should listen
      on UNIX file socket rather than a Internet socket. To listen on
index 816eb13..36201ae 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $Id: zoom.xml,v 1.33 2003-11-17 15:00:41 mike Exp $ -->
+<!-- $Id: zoom.xml,v 1.34 2003-11-19 19:07:26 adam Exp $ -->
  <chapter id="zoom"><title>ZOOM</title>
   <para>
     &zoom; is an acronym for 'Z39.50 Object-Orientation Model' and is
     const char * ZOOM_scanset_term(ZOOM_scanset scan, size_t pos,
                                    int *occ, size_t *len);
 
+    const char * ZOOM_scanset_display_term(ZOOM_scanset scan, size_t pos,
+                                           int *occ, size_t *len);
 
     void ZOOM_scanset_destroy (ZOOM_scanset scan);
 
    <para>
     The scan set is created by function
     <function>ZOOM_connection_scan</function> which performs a scan
-    operation on the connection and start term given.
+    operation on the connection using the specified startterm.
     If the operation was successful, the size of the scan set can be
     retrieved by a call to <function>ZOOM_scanset_size</function>.
     Like result sets, the items are numbered 0,..size-1.
     To obtain information about a particular scan term, call function
     <function>ZOOM_scanset_term</function>. This function takes
     a scan set offset <literal>pos</literal> and returns a pointer
-    to an actual term or <literal>NULL</literal> if non-present.
+    to a <emphasis>raw term</emphasis> or <literal>NULL</literal> if
+    non-present.
     If present, the <literal>occ</literal> and <literal>len</literal> 
     are set to the number of occurrences and the length
     of the actual term respectively.
+    <function>ZOOM_scanset_display_term</function> is similar to
+    <function>ZOOM_scanset_term</function> except that it returns
+    the <emphasis>display term</emphasis> rather than the raw term.
+    In a few cases, the term is different from display term. Always
+    use the display term for display and the raw term for subsequent
+    scan operations (to get more terms, next scan result, etc).
+   </para>
+   <para>
     A scan set may be freed by a call to function
     <function>ZOOM_scanset_destroy</function>.
     Functions <function>ZOOM_scanset_option_get</function> and
index f9329c1..301e1c3 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Public header for ZOOM C.
- * $Id: zoom.h,v 1.18 2003-04-28 11:04:52 adam Exp $
+ * $Id: zoom.h,v 1.19 2003-11-19 19:07:26 adam Exp $
  */
 
 #include <yaz/yconfig.h>
@@ -189,6 +189,10 @@ ZOOM_API(const char *)
 ZOOM_scanset_term(ZOOM_scanset scan, size_t pos,
                   int *occ, int *len);
 
+ZOOM_API(const char *)
+ZOOM_scanset_display_term(ZOOM_scanset scan, size_t pos,
+                         int *occ, int *len);
+
 ZOOM_API(size_t)
 ZOOM_scanset_size(ZOOM_scanset scan);
 
index 188ddf7..492c190 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 2000-2003, Index Data
  * See the file LICENSE for details.
  *
- * $Id: zoom-c.c,v 1.3 2003-11-17 16:01:12 mike Exp $
+ * $Id: zoom-c.c,v 1.4 2003-11-19 19:07:26 adam Exp $
  *
  * ZOOM layer for C, connections, result sets, queries.
  */
@@ -928,7 +928,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c)
     
     impver = ZOOM_options_get (c->options, "implementationVersion");
     ireq->implementationVersion =
-       (char *) odr_malloc (c->odr_out, strlen("$Revision: 1.3 $") + 2 +
+       (char *) odr_malloc (c->odr_out, strlen("$Revision: 1.4 $") + 2 +
                             (impver ? strlen(impver) : 0));
     strcpy (ireq->implementationVersion, "");
     if (impver)
@@ -936,7 +936,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c)
        strcat (ireq->implementationVersion, impver);
        strcat (ireq->implementationVersion, "/");
     }                                         
-    strcat (ireq->implementationVersion, "$Revision: 1.3 $");
+    strcat (ireq->implementationVersion, "$Revision: 1.4 $");
 
     *ireq->maximumRecordSize =
        ZOOM_options_get_int (c->options, "maximumRecordSize", 1024*1024);
@@ -2150,7 +2150,7 @@ ZOOM_scanset_size (ZOOM_scanset scan)
 
 ZOOM_API(const char *)
 ZOOM_scanset_term (ZOOM_scanset scan, size_t pos,
-                               int *occ, int *len)
+                  int *occ, int *len)
 {
     const char *term = 0;
     size_t noent = ZOOM_scanset_size (scan);
@@ -2175,6 +2175,37 @@ ZOOM_scanset_term (ZOOM_scanset scan, size_t pos,
 }
 
 ZOOM_API(const char *)
+ZOOM_scanset_display_term (ZOOM_scanset scan, size_t pos,
+                          int *occ, int *len)
+{
+    const char *term = 0;
+    size_t noent = ZOOM_scanset_size (scan);
+    Z_ScanResponse *res = scan->scan_response;
+    
+    *len = 0;
+    *occ = 0;
+    if (pos >= noent)
+        return 0;
+    if (res->entries->entries[pos]->which == Z_Entry_termInfo)
+    {
+        Z_TermInfo *t = res->entries->entries[pos]->u.termInfo;
+
+        if (t->displayTerm)
+       {
+           term = (const char *) t->term->u.general->buf;
+           *len = strlen(term);
+       }
+       else if (t->term->which == Z_Term_general)
+        {
+            term = (const char *) t->term->u.general->buf;
+            *len = t->term->u.general->len;
+        }
+        *occ = t->globalOccurrences ? *t->globalOccurrences : 0;
+    }
+    return term;
+}
+
+ZOOM_API(const char *)
 ZOOM_scanset_option_get (ZOOM_scanset scan, const char *key)
 {
     return ZOOM_options_get (scan->options, key);