More work on relevance feedback.
[idzebra-moved-to-github.git] / index / kdump.c
1 /*
2  * Copyright (C) 1994-1995, Index Data I/S 
3  * All rights reserved.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: kdump.c,v $
7  * Revision 1.5  1995-09-11 13:09:35  adam
8  * More work on relevance feedback.
9  *
10  * Revision 1.4  1995/09/08  14:52:27  adam
11  * Minor changes. Dictionary is lower case now.
12  *
13  * Revision 1.3  1995/09/06  16:11:17  adam
14  * Option: only one word key per file.
15  *
16  * Revision 1.2  1995/09/04  12:33:42  adam
17  * Various cleanup. YAZ util used instead.
18  *
19  * Revision 1.1  1995/09/04  09:10:36  adam
20  * More work on index add/del/update.
21  * Merge sort implemented.
22  * Initial work on z39 server.
23  *
24  */
25 #include <stdio.h>
26 #include <assert.h>
27 #include <unistd.h>
28
29 #include <alexutil.h>
30 #include "index.h"
31
32 char *prog;
33
34 static int read_one (FILE *inf, char *name, char *key)
35 {
36     int c;
37     int i = 0;
38     name[0] = 0;
39     do
40     {
41         if ((c=getc(inf)) == EOF)
42             return 0;
43         name[i++] = c;
44     } while (c);
45     for (i = 0; i<sizeof(struct it_key)+1; i++)
46         ((char *)key)[i] = getc (inf);
47     return 1;
48 }
49
50 int main (int argc, char **argv)
51 {
52     int ret;
53     char *arg;
54     char *key_fname = NULL;
55     char key_string[IT_MAX_WORD];
56     char key_info[256];
57     FILE *inf;
58
59     prog = *argv;
60     while ((ret = options ("v:", argv, argc, &arg)) != -2)
61     {
62         if (ret == 0)
63         {
64             key_fname = arg;
65         }
66         else if (ret == 'v')
67         {
68             log_init (log_mask_str(arg), prog, NULL);
69         }
70         else
71         {
72             logf (LOG_FATAL, "Unknown option '-%s'", arg);
73             exit (1);
74         }
75     }
76     if (!key_fname)
77     {
78         fprintf (stderr, "kdump [-v log] file\n");
79         exit (1);
80     }
81     if (!(inf = fopen (key_fname, "r")))
82     {
83         logf (LOG_FATAL|LOG_ERRNO, "fopen %s", key_fname);
84         exit (1);
85     }
86     while (read_one (inf, key_string, key_info))
87     {
88         struct it_key k;
89
90         memcpy (&k, key_info+1, sizeof(k));
91 #if IT_KEY_HAVE_SEQNO
92         printf ("%7d op=%d s=%-5d %s\n", k.sysno, *key_info, k.seqno,
93                 key_string);
94 #else
95         printf ("%7d op=%d f=%-3d %s\n", k.sysno, *key_info, k.freq,
96                 key_string);
97
98 #endif
99     }
100     if (fclose (inf))
101     {
102         logf (LOG_FATAL|LOG_ERRNO, "fclose %s", key_fname);
103         exit (1);
104     }
105     
106     exit (0);
107 }