Minor fix.
[idzebra-moved-to-github.git] / util / zebramap.c
index 8188c0c..18869b9 100644 (file)
@@ -1,10 +1,22 @@
 /*
- * Copyright (C) 1994-1998, Index Data I/S 
+ * Copyright (C) 1994-1999, Index Data 
  * All rights reserved.
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: zebramap.c,v $
- * Revision 1.10  1998-06-23 15:33:37  adam
+ * 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
  * Added feature to specify sort criteria in query (type 7 specifies
  * sort flags).
  *
@@ -55,6 +67,7 @@
 struct zebra_map {
     unsigned reg_id;
     int completeness;
+    int positioned;
     int type;
     union {
         struct {
@@ -97,6 +110,7 @@ static void zebra_map_read (ZebraMaps zms, const char *name)
     char line[512];
     char *argv[10];
     int argc;
+    int lineno = 0;
     struct zebra_map **zm = 0, *zp;
 
     if (!(f = yaz_path_fopen(zms->tabpath, name, "r")))
@@ -104,7 +118,7 @@ static void zebra_map_read (ZebraMaps zms, const char *name)
        logf(LOG_WARN|LOG_ERRNO, "%s", name);
        return ;
     }
-    while ((argc = readconf_line(f, line, 512, argv, 10)))
+    while ((argc = readconf_line(f, &lineno, line, 512, argv, 10)))
     {
        if (!yaz_matchstr (argv[0], "index") && argc == 2)
        {
@@ -118,6 +132,7 @@ static void zebra_map_read (ZebraMaps zms, const char *name)
            (*zm)->maptab = NULL;
            (*zm)->type = ZEBRA_MAP_TYPE_INDEX;
            (*zm)->completeness = 0;
+           (*zm)->positioned = 1;
        }
        else if (!yaz_matchstr (argv[0], "sort") && argc == 2)
        {
@@ -132,6 +147,7 @@ static void zebra_map_read (ZebraMaps zms, const char *name)
             (*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)
        {
@@ -141,6 +157,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)
@@ -168,7 +188,7 @@ ZebraMaps zebra_maps_open (Res res)
     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';
@@ -342,6 +362,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);
@@ -411,7 +439,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;
@@ -427,6 +454,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;
     }