Changed functions isc_getmethod, isams_getmethod.
[idzebra-moved-to-github.git] / index / kcompare.c
index 8f17a7b..ec85430 100644 (file)
@@ -4,7 +4,14 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: kcompare.c,v $
- * Revision 1.31  1999-07-06 09:37:04  heikki
+ * Revision 1.33  1999-07-14 10:59:26  adam
+ * Changed functions isc_getmethod, isams_getmethod.
+ * Improved fatal error handling (such as missing EXPLAIN schema).
+ *
+ * Revision 1.32  1999/07/13 13:21:15  heikki
+ * Managing negative deltas
+ *
+ * Revision 1.31  1999/07/06 09:37:04  heikki
  * Working on isamh - not ready yet.
  *
  * Revision 1.30  1999/06/30 15:07:23  heikki
@@ -222,18 +229,18 @@ void iscz1_encode_int (unsigned d, char **dst)
         *bp++ = d;
     else if (d <= 16383)
     {
-        *bp++ = 64 + (d>>8);
+        *bp++ = 64 | (d>>8);
        *bp++ = d & 255;
     }
     else if (d <= 4194303)
     {
-        *bp++ = 128 + (d>>16);
+        *bp++ = 128 | (d>>16);
         *bp++ = (d>>8) & 255;
         *bp++ = d & 255;
     }
     else
     {
-        *bp++ = 192 + (d>>24);
+        *bp++ = 192 | (d>>24);
         *bp++ = (d>>16) & 255;
         *bp++ = (d>>8) & 255;
         *bp++ = d & 255;
@@ -255,9 +262,13 @@ int iscz1_decode_int (unsigned char **src)
         c = (c << 8) + *(*src)++;
         return c;
     }
-    c = ((c & 63) << 8) + *(*src)++;
+    if (c&32) /* expand sign bit to high bits */
+       c = ((c | 63) << 8) + *(*src)++;
+    else
+       c = ((c & 63) << 8) + *(*src)++;
     c = (c << 8) + *(*src)++;
     c = (c << 8) + *(*src)++;
+    
     return c;
 }
 
@@ -300,14 +311,9 @@ static void iscz1_code_item (int mode, void *vp, char **dst, char **src)
     }
 }
 
-ISAMC_M key_isamc_m (Res res)
+ISAMC_M key_isamc_m (Res res, ISAMC_M me)
 {
-    static ISAMC_M me = NULL;
-
-    if (me)
-        return me;
-
-    me = isc_getmethod ();
+    isc_getmethod (me);
 
     me->compare_item = key_compare;
 
@@ -321,14 +327,9 @@ ISAMC_M key_isamc_m (Res res)
     return me;
 }
 
-ISAMS_M key_isams_m (Res res)
+ISAMS_M key_isams_m (Res res, ISAMS_M me)
 {
-    static ISAMS_M me = NULL;
-
-    if (me)
-        return me;
-
-    me = isams_getmethod ();
+    isams_getmethod (me);
 
     me->compare_item = key_compare;