Implemented position-flag for registers.
[idzebra-moved-to-github.git] / index / extract.c
index c031719..d9c619b 100644 (file)
@@ -1,10 +1,16 @@
 /*
- * Copyright (C) 1994-1998, Index Data 
+ * Copyright (C) 1994-1999, Index Data 
  * All rights reserved.
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: extract.c,v $
- * Revision 1.89  1998-10-28 10:54:38  adam
+ * Revision 1.91  1999-02-12 13:29:22  adam
+ * Implemented position-flag for registers.
+ *
+ * Revision 1.90  1999/02/02 14:50:52  adam
+ * Updated WIN32 code specific sections. Changed header.
+ *
+ * Revision 1.89  1998/10/28 10:54:38  adam
  * SDRKit integration.
  *
  * Revision 1.88  1998/10/16 08:14:29  adam
  */
 #include <stdio.h>
 #include <assert.h>
-#ifdef WINDOWS
+#ifdef WIN32
 #include <io.h>
 #else
 #include <unistd.h>
@@ -423,6 +429,7 @@ int key_open (struct recordGroup *rGroup, int mem)
 struct encode_info {
     int  sysno;
     int  seqno;
+    int  cmd;
     char buf[768];
 };
 
@@ -430,6 +437,7 @@ void encode_key_init (struct encode_info *i)
 {
     i->sysno = 0;
     i->seqno = 0;
+    i->cmd = -1;
 }
 
 char *encode_key_int (int d, char *bp)
@@ -471,8 +479,11 @@ void encode_key_write (char *k, struct encode_info *i, FILE *outf)
         i->sysno = key.sysno;
         i->seqno = 0;
     }
+    else if (!i->seqno && !key.seqno && i->cmd == *k)
+       return;
     bp = encode_key_int (key.seqno - i->seqno, bp);
     i->seqno = key.seqno;
+    i->cmd = *k;
     if (fwrite (i->buf, bp - i->buf, 1, outf) != 1)
     {
         logf (LOG_FATAL|LOG_ERRNO, "fwrite");
@@ -693,7 +704,8 @@ static void addIndexString (RecWord *p, const char *string, int length)
         dst += sizeof(*pseqno);
     }
     reckeys.buf_used = dst - reckeys.buf;
-    (*pseqno)++;
+    if (*pseqno)
+       (*pseqno)++;
 }
 
 static void addSortString (RecWord *p, const char *string, int length)
@@ -1255,7 +1267,12 @@ static int recordExtract (SYSNO *sysno, const char *fname,
        extractCtrl.addSchema = addSchema;
        extractCtrl.dh = rGroup->dh;
        for (i = 0; i<256; i++)
-           extractCtrl.seqno[i] = 0;
+       {
+           if (zebra_maps_is_positioned(rGroup->zebra_maps, i))
+               extractCtrl.seqno[i] = 1;
+           else
+               extractCtrl.seqno[i] = 0;
+       }
        extractCtrl.zebra_maps = rGroup->zebra_maps;
        extractCtrl.flagShowRecords = !rGroup->flagRw;