Use HAVE_UNISTD_H when including unistd.h.
[idzebra-moved-to-github.git] / index / extract.c
index b00178f..de6aa9e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: extract.c,v 1.181 2005-04-28 12:13:04 adam Exp $
+/* $Id: extract.c,v 1.186 2005-06-14 20:28:54 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -25,7 +25,8 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include <ctype.h>
 #ifdef WIN32
 #include <io.h>
-#else
+#endif
+#if HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 #include <fcntl.h>
@@ -116,7 +117,7 @@ static const char **searchRecordKey (ZebraHandle zh,
        int attrSet, attrUse;
 
        iscz1_decode(decode_handle, &dst, &src);
-       assert(key.len < 4 && key.len > 2);
+       assert(key.len <= 4 && key.len > 2);
 
        attrSet = (int) key.mem[0] >> 16;
        attrUse = (int) key.mem[0] & 65535;
@@ -202,14 +203,9 @@ static void file_end (void *handle, off_t offset)
 
     if (offset != p->file_moffset)
     {
-       yaz_log(YLOG_LOG, "file_end OK");
        p->file_moffset = offset;
        p->file_more = 1;
     }
-    else
-    {
-       yaz_log(YLOG_LOG, "file_end REJECTED");
-    }
 }
 
 static char *fileMatchStr (ZebraHandle zh,
@@ -809,7 +805,6 @@ int fileExtract (ZebraHandle zh, SYSNO *sysno, const char *fname,
        fi->file_more = 0;  /* file_end not called (yet) */
         r = file_extract_record (zh, sysno, fname, deleteFlag, fi, 1,
                                 recType, recTypeClientData);
-       yaz_log(YLOG_LOG, "file_extract_record returned %d", r);
        if (fi->file_more)
        {   /* file_end has been called so reset offset .. */
            fi->file_offset = fi->file_moffset;
@@ -1479,6 +1474,81 @@ void extract_add_it_key (ZebraHandle zh,
     keys->buf_used = dst - keys->buf;
 }
 
+ZEBRA_RES zebra_snippets_rec_keys(ZebraHandle zh, struct recKeys *reckeys,
+                                 zebra_snippets *snippets)
+{
+   void *decode_handle = iscz1_start();
+    int off = 0;
+    int seqno = 0;
+    NMEM nmem = nmem_create();
+
+    yaz_log(YLOG_LOG, "zebra_rec_keys_snippets buf=%p sz=%d", reckeys->buf,
+           reckeys->buf_used);
+    assert(reckeys->buf);
+    while (off < reckeys->buf_used)
+    {
+        const char *src = reckeys->buf + off;
+        struct it_key key;
+       char *dst = (char*) &key;
+       char dst_buf[IT_MAX_WORD];
+       char *dst_term = dst_buf;
+
+       iscz1_decode(decode_handle, &dst, &src);
+       assert(key.len <= 4 && key.len > 2);
+
+       seqno = (int) key.mem[key.len-1];
+
+       zebra_term_untrans_iconv(zh, nmem, src[0], &dst_term, src+1);
+       zebra_snippets_append(snippets, seqno, src[0], key.mem[0], dst_term);
+        while (*src++)
+           ;
+        off = src - reckeys->buf;
+       nmem_reset(nmem);
+    }
+    nmem_destroy(nmem);
+    iscz1_stop(decode_handle);
+    return ZEBRA_OK;
+}
+
+void print_rec_keys(ZebraHandle zh, struct recKeys *reckeys)
+{
+    void *decode_handle = iscz1_start();
+    int off = 0;
+    int seqno = 0;
+    NMEM nmem = nmem_create();
+
+    yaz_log(YLOG_LOG, "print_rec_keys buf=%p sz=%d", reckeys->buf,
+           reckeys->buf_used);
+    assert(reckeys->buf);
+    while (off < reckeys->buf_used)
+    {
+        const char *src = reckeys->buf + off;
+        struct it_key key;
+       char *dst = (char*) &key;
+       int attrSet, attrUse;
+       char dst_buf[IT_MAX_WORD];
+       char *dst_term = dst_buf;
+
+       iscz1_decode(decode_handle, &dst, &src);
+       assert(key.len <= 4 && key.len > 2);
+
+       attrSet = (int) key.mem[0] >> 16;
+       attrUse = (int) key.mem[0] & 65535;
+       seqno = (int) key.mem[key.len-1];
+
+       zebra_term_untrans_iconv(zh, nmem, src[0], &dst_term, src+1);
+       
+       yaz_log(YLOG_LOG, "ord=" ZINT_FORMAT " seqno=%d term=%s",
+               key.mem[0], seqno, dst_term); 
+        while (*src++)
+           ;
+        off = src - reckeys->buf;
+       nmem_reset(nmem);
+    }
+    nmem_destroy(nmem);
+    iscz1_stop(decode_handle);
+}
+
 void extract_add_index_string (RecWord *p, const char *str, int length)
 {
     struct it_key key;