copied from isamc.h, simplifying
[idzebra-moved-to-github.git] / util / zebramap.c
index d3dc2ed..3d75a41 100644 (file)
@@ -1,10 +1,22 @@
 /*
- * Copyright (C) 1994-1998, Index Data 
+ * Copyright (C) 1994-1999, Index Data 
  * All rights reserved.
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: zebramap.c,v $
- * Revision 1.11  1998-10-13 20:09:19  adam
+ * Revision 1.15  1999-05-26 07:49:14  adam
+ * C++ compilation.
+ *
+ * Revision 1.14  1999/02/19 10:37:40  adam
+ * Minor fix.
+ *
+ * Revision 1.13  1999/02/18 15:01:04  adam
+ * Structure=key uses register type 0.
+ *
+ * Revision 1.12  1999/02/12 13:29:25  adam
+ * Implemented position-flag for registers.
+ *
+ * Revision 1.11  1998/10/13 20:09:19  adam
  * Changed call to readconf_line.
  *
  * Revision 1.10  1998/06/23 15:33:37  adam
@@ -58,6 +70,7 @@
 struct zebra_map {
     unsigned reg_id;
     int completeness;
+    int positioned;
     int type;
     union {
         struct {
@@ -116,12 +129,13 @@ static void zebra_map_read (ZebraMaps zms, const char *name)
                zm = &zms->map_list;
            else
                zm = &(*zm)->next;
-           *zm = nmem_malloc (zms->nmem, sizeof(**zm));
+           *zm = (struct zebra_map *) nmem_malloc (zms->nmem, sizeof(**zm));
            (*zm)->reg_id = argv[1][0];
            (*zm)->maptab_name = NULL;
            (*zm)->maptab = NULL;
            (*zm)->type = ZEBRA_MAP_TYPE_INDEX;
            (*zm)->completeness = 0;
+           (*zm)->positioned = 1;
        }
        else if (!yaz_matchstr (argv[0], "sort") && argc == 2)
        {
@@ -129,13 +143,14 @@ static void zebra_map_read (ZebraMaps zms, const char *name)
                zm = &zms->map_list;
            else
                zm = &(*zm)->next;
-           *zm = nmem_malloc (zms->nmem, sizeof(**zm));
+           *zm = (struct zebra_map *) nmem_malloc (zms->nmem, sizeof(**zm));
            (*zm)->reg_id = argv[1][0];
            (*zm)->maptab_name = NULL;
            (*zm)->type = ZEBRA_MAP_TYPE_SORT;
             (*zm)->u.sort.entry_size = 80;
            (*zm)->maptab = NULL;
            (*zm)->completeness = 0;
+           (*zm)->positioned = 0;
        }
        else if (zm && !yaz_matchstr (argv[0], "charmap") && argc == 2)
        {
@@ -145,6 +160,10 @@ static void zebra_map_read (ZebraMaps zms, const char *name)
        {
            (*zm)->completeness = atoi (argv[1]);
        }
+       else if (zm && !yaz_matchstr (argv[0], "position") && argc == 2)
+       {
+           (*zm)->positioned = atoi (argv[1]);
+       }
         else if (zm && !yaz_matchstr (argv[0], "entrysize") && argc == 2)
         {
             if ((*zm)->type == ZEBRA_MAP_TYPE_SORT)
@@ -161,18 +180,18 @@ static void zebra_map_read (ZebraMaps zms, const char *name)
 
 static void zms_map_handle (void *p, const char *name, const char *value)
 {
-    ZebraMaps zms = p;
+    ZebraMaps zms = (ZebraMaps) p;
     
     zebra_map_read (zms, value);
 }
 
 ZebraMaps zebra_maps_open (Res res)
 {
-    ZebraMaps zms = xmalloc (sizeof(*zms));
+    ZebraMaps zms = (ZebraMaps) xmalloc (sizeof(*zms));
     int i;
 
     zms->nmem = nmem_create ();
-    zms->tabpath = nmem_strdup (zms->nmem, res_get (res, "profilePath"));
+    zms->tabpath = nmem_strdup (zms->nmem, res_get_def (res, "profilePath", "."));
     zms->map_list = NULL;
 
     zms->temp_map_str[0] = '\0';
@@ -181,7 +200,7 @@ ZebraMaps zebra_maps_open (Res res)
     zms->temp_map_ptr[0] = zms->temp_map_str;
     zms->temp_map_ptr[1] = NULL;
 
-    zms->lookup_array =
+    zms->lookup_array = (struct zebra_map**)
        nmem_malloc (zms->nmem, sizeof(*zms->lookup_array)*256);
     for (i = 0; i<256; i++)
        zms->lookup_array[i] = 0;
@@ -200,7 +219,7 @@ chrmaptab zebra_charmap_get (ZebraMaps zms, unsigned reg_id)
     struct zebra_map *zm = zebra_map_get (zms, reg_id);
     if (!zm)
     {
-       zm = nmem_malloc (zms->nmem, sizeof(*zm));
+       zm = (struct zebra_map *) nmem_malloc (zms->nmem, sizeof(*zm));
        logf (LOG_WARN, "Unknown register type: %c", reg_id);
 
        zm->reg_id = reg_id;
@@ -346,6 +365,14 @@ int zebra_maps_is_complete (ZebraMaps zms, unsigned reg_id)
     return 0;
 }
 
+int zebra_maps_is_positioned (ZebraMaps zms, unsigned reg_id)
+{
+    struct zebra_map *zm = zebra_map_get (zms, reg_id);
+    if (zm)
+       return zm->positioned;
+    return 0;
+}
+    
 int zebra_maps_is_sort (ZebraMaps zms, unsigned reg_id)
 {
     struct zebra_map *zm = zebra_map_get (zms, reg_id);
@@ -415,7 +442,6 @@ int zebra_maps_attr (ZebraMaps zms, Z_AttributesPlusTerm *zapt,
     case -1:
     case 1:   /* phrase */
     case 2:   /* word */
-    case 3:   /* key */
     case 108: /* string */ 
        *search_type = "phrase";
        break;
@@ -431,6 +457,10 @@ int zebra_maps_attr (ZebraMaps zms, Z_AttributesPlusTerm *zapt,
        *reg_id = 'u';
        *search_type = "phrase";
        break;
+    case 3:   /* key */
+        *reg_id = '0';
+        *search_type = "phrase";
+        break;
     default:
        return -1;
     }