Record control management.
[idzebra-moved-to-github.git] / index / kcompare.c
1 /*
2  * Copyright (C) 1994-1995, Index Data I/S 
3  * All rights reserved.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: kcompare.c,v $
7  * Revision 1.6  1995-09-14 07:48:23  adam
8  * Record control management.
9  *
10  * Revision 1.5  1995/09/11  13:09:34  adam
11  * More work on relevance feedback.
12  *
13  * Revision 1.4  1995/09/08  14:52:27  adam
14  * Minor changes. Dictionary is lower case now.
15  *
16  * Revision 1.3  1995/09/07  13:58:36  adam
17  * New parameter: result-set file descriptor (RSFD) to support multiple
18  * positions within the same result-set.
19  * Boolean operators: and, or, not implemented.
20  * Result-set references.
21  *
22  * Revision 1.2  1995/09/06  16:11:17  adam
23  * Option: only one word key per file.
24  *
25  * Revision 1.1  1995/09/04  09:10:36  adam
26  * More work on index add/del/update.
27  * Merge sort implemented.
28  * Initial work on z39 server.
29  *
30  */
31
32 #include <stdlib.h>
33 #include <string.h>
34 #include <stdio.h>
35 #include <ctype.h>
36 #include <assert.h>
37
38 #include "index.h"
39
40 void key_logdump (int logmask, const void *p)
41 {
42     struct it_key key;
43
44     memcpy (&key, p, sizeof(key));
45     logf (logmask, "%7d s=%-4d f=%d,%d", key.sysno, key.seqno,
46              key.attrSet, key.attrUse);
47 }
48
49 int key_compare (const void *p1, const void *p2)
50 {
51     struct it_key i1, i2;
52     memcpy (&i1, p1, sizeof(i1));
53     memcpy (&i2, p2, sizeof(i2));
54     if (i1.sysno != i2.sysno)
55     {
56         if (i1.sysno > i2.sysno)
57             return 2;
58         else
59             return -2;
60     }
61 #if IT_KEY_HAVE_SEQNO
62     if (i1.seqno != i2.seqno)
63     {
64         if (i1.seqno > i2.seqno)
65             return 1;
66         else
67             return -1;
68     }
69 #else
70     if (i1.freq != i2.freq)
71     {
72         if (i1.freq > i2.freq)
73             return 1;
74         else
75             return -1;
76     }
77 #endif
78     if (i1.attrSet != i2.attrSet)
79     {
80         if (i1.attrSet > i2.attrSet)
81             return 1;
82         else
83             return -1;
84     }
85     if (i1.attrUse != i2.attrUse)
86     {
87         if (i1.attrUse > i2.attrUse)
88             return 1;
89         else
90             return -1;
91     }
92     return 0;
93 }
94
95 int index_char_cvt (int c)
96 {
97     return tolower (c);
98 }