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