IDZEBRA 2.2.8
kdump.c
Go to the documentation of this file.
1/* This file is part of the Zebra server.
2 Copyright (C) Index Data
3
4Zebra is free software; you can redistribute it and/or modify it under
5the terms of the GNU General Public License as published by the Free
6Software Foundation; either version 2, or (at your option) any later
7version.
8
9Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
10WARRANTY; without even the implied warranty of MERCHANTABILITY or
11FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program; if not, write to the Free Software
16Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
18*/
19
20#if HAVE_CONFIG_H
21#include <config.h>
22#endif
23#include <stdio.h>
24#include <string.h>
25#include <assert.h>
26#include <stdlib.h>
27#ifdef WIN32
28#include <io.h>
29#endif
30#if HAVE_UNISTD_H
31#include <unistd.h>
32#endif
33#include <assert.h>
34
35#include <charmap.h>
36#include "index.h"
37
38char *prog;
39
40int main(int argc, char **argv)
41{
42 exit(0);
43}
44
45#if 0
46/* old kdumper.. must be updated to use new codec .. */
47int key_file_decode (FILE *f)
48{
49 int c, d;
50
51 c = getc (f);
52 switch (c & 192)
53 {
54 case 0:
55 d = c;
56 break;
57 case 64:
58 d = ((c&63) << 8) + (getc (f) & 0xff);
59 break;
60 case 128:
61 d = ((c&63) << 8) + (getc (f) & 0xff);
62 d = (d << 8) + (getc (f) & 0xff);
63 break;
64 case 192:
65 d = ((c&63) << 8) + (getc (f) & 0xff);
66 d = (d << 8) + (getc (f) & 0xff);
67 d = (d << 8) + (getc (f) & 0xff);
68 break;
69 default:
70 d = 0;
71 assert (0);
72 }
73 return d;
74}
75
76
77static int read_one (FILE *inf, char *name, char *key, struct it_key *prevk)
78{
79 int c;
80 int i = 0;
81 struct it_key itkey;
82 do
83 {
84 if ((c=getc(inf)) == EOF)
85 return 0;
86 name[i++] = c;
87 } while (c);
88 if (i > 1)
89 prevk->sysno = 0;
90 c = key_file_decode (inf);
91 key[0] = c & 1;
92 c = c >> 1;
93 itkey.sysno = c + prevk->sysno;
94 if (c)
95 {
96 prevk->sysno = itkey.sysno;
97 prevk->seqno = 0;
98 }
99 c = key_file_decode (inf);
100 itkey.seqno = c + prevk->seqno;
101 prevk->seqno = itkey.seqno;
102
103 memcpy (key+1, &itkey, sizeof(itkey));
104 return 1;
105}
106
107
108int main (int argc, char **argv)
109{
110 int ret;
111 char *arg;
112 char *key_fname = NULL;
113 char key_string[IT_MAX_WORD];
114 char key_info[256];
115 ZebraMaps zm;
116 FILE *inf;
117 Res res = NULL;
118 struct it_key prevk;
119
120 prevk.sysno = 0;
121 prevk.seqno = 0;
122
123 prog = *argv;
124 while ((ret = options ("c:v:", argv, argc, &arg)) != -2)
125 {
126 if (ret == 0)
127 {
128 key_fname = arg;
129 }
130 else if (ret == 'v')
131 {
132 yaz_log_init (yaz_log_mask_str(arg), prog, NULL);
133 }
134 else if (ret == 'c')
135 {
136 if (!(res = res_open (arg, 0, 0)))
137 {
138 yaz_log(YLOG_FATAL, "Failed to open resource file %s", arg);
139 exit (1);
140 }
141 }
142 else
143 {
144 yaz_log (YLOG_FATAL, "Unknown option '-%s'", arg);
145 exit (1);
146 }
147 }
148 if (!key_fname)
149 {
150 fprintf (stderr, "kdump [-c config] [-v log] file\n");
151 exit (1);
152 }
153 if (!res)
154 res = res_open ("zebra.cfg", 0, 0);
155 zm = zebra_maps_open (res, 0);
156 if (!(inf = fopen (key_fname, "r")))
157 {
158 yaz_log (YLOG_FATAL|YLOG_ERRNO, "fopen %s", key_fname);
159 exit (1);
160 }
161 printf ("t rg op sysno seqno txt\n");
162 while (read_one (inf, key_string, key_info, &prevk))
163 {
164 struct it_key k;
165 int op;
166 char keybuf[IT_MAX_WORD+1];
167 char *to = keybuf;
168 const char *from = key_string;
169 int usedb_type = from[0];
170 int reg_type = from[1];
171
172 op = key_info[0];
173 memcpy (&k, 1+key_info, sizeof(k));
174
175 from += 2;
176 while (*from)
177 {
178 const char *res = zebra_maps_output (zm, reg_type, &from);
179 if (!res)
180 *to++ = *from++;
181 else
182 while (*res)
183 *to++ = *res++;
184 }
185 *to = '\0';
186 printf ("%c %3d %c %7d %5d %s\n", reg_type, usedb_type, op ? 'i':'d',
187 k.sysno, k.seqno, keybuf);
188 }
189 zebra_maps_close (zm);
190 if (fclose (inf))
191 {
192 yaz_log (YLOG_FATAL|YLOG_ERRNO, "fclose %s", key_fname);
193 exit (1);
194 }
195 exit (0);
196}
197#endif
198/*
199 * Local variables:
200 * c-basic-offset: 4
201 * c-file-style: "Stroustrup"
202 * indent-tabs-mode: nil
203 * End:
204 * vim: shiftwidth=4 tabstop=8 expandtab
205 */
206
#define IT_MAX_WORD
Definition it_key.h:27
int main(int argc, char **argv)
Definition kdump.c:40
char * prog
Definition kdump.c:38
static FILE * inf
Definition readfile.c:37
Res res_open(Res res_def, Res over_res)
Definition res.c:234
void zebra_maps_close(zebra_maps_t zm)
Definition zebramap.c:84
const char * zebra_maps_output(zebra_map_t zm, const char **from)
Definition zebramap.c:438
zebra_maps_t zebra_maps_open(Res res, const char *base_path, const char *profile_path)
Definition zebramap.c:324