X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fzebramap.c;h=96c162337de7c82ffad2e4a8b060ac7317fba154;hb=761702c17906c9c71a0c42e7abaa18e578aec012;hp=3ffb276e0bc1aab8abeb3b60dcd0ec82fe7f0fc6;hpb=cb1402d1cc3fdc321a04a891c04b13cf9747ae0d;p=idzebra-moved-to-github.git diff --git a/util/zebramap.c b/util/zebramap.c index 3ffb276..96c1623 100644 --- a/util/zebramap.c +++ b/util/zebramap.c @@ -1,4 +1,4 @@ -/* $Id: zebramap.c,v 1.51 2006-06-23 11:21:38 adam Exp $ +/* $Id: zebramap.c,v 1.54 2006-12-05 09:24:47 adam Exp $ Copyright (C) 1995-2006 Index Data ApS @@ -28,7 +28,7 @@ #include #include -#include +#include #define ZEBRA_MAP_TYPE_SORT 1 #define ZEBRA_MAP_TYPE_INDEX 2 @@ -40,6 +40,7 @@ struct zebra_map { int completeness; int positioned; int alwaysmatches; + int first_in_field; int type; union { struct { @@ -125,6 +126,7 @@ ZEBRA_RES zebra_maps_read_file(ZebraMaps zms, const char *fname) (*zm)->completeness = 0; (*zm)->positioned = 1; (*zm)->alwaysmatches = 0; + (*zm)->first_in_field = 0; zms->no_maps++; } else if (!yaz_matchstr(argv[0], "sort")) @@ -142,6 +144,7 @@ ZEBRA_RES zebra_maps_read_file(ZebraMaps zms, const char *fname) (*zm)->completeness = 0; (*zm)->positioned = 0; (*zm)->alwaysmatches = 0; + (*zm)->first_in_field = 0; zms->no_maps++; } else if (!zm) @@ -166,6 +169,10 @@ ZEBRA_RES zebra_maps_read_file(ZebraMaps zms, const char *fname) { (*zm)->alwaysmatches = atoi(argv[1]); } + else if (!yaz_matchstr(argv[0], "firstinfield") && argc == 2) + { + (*zm)->first_in_field = atoi(argv[1]); + } else if (!yaz_matchstr(argv[0], "entrysize") && argc == 2) { if ((*zm)->type == ZEBRA_MAP_TYPE_SORT) @@ -198,7 +205,7 @@ ZebraMaps zebra_maps_open(Res res, const char *base_path, zms->nmem = nmem_create(); zms->no_maps = 0; - zms->tabpath = nmem_strdup(zms->nmem, profile_path); + zms->tabpath = profile_path ? nmem_strdup(zms->nmem, profile_path) : 0; zms->tabroot = 0; if (base_path) zms->tabroot = nmem_strdup(zms->nmem, base_path); @@ -346,6 +353,14 @@ int zebra_maps_is_alwaysmatches(ZebraMaps zms, unsigned reg_id) return 0; } +int zebra_maps_is_first_in_field(ZebraMaps zms, unsigned reg_id) +{ + struct zebra_map *zm = zebra_map_get(zms, reg_id); + if (zm) + return zm->first_in_field; + return 0; +} + int zebra_maps_sort(ZebraMaps zms, Z_SortAttributes *sortAttributes, int *numerical) {