-/*
- * Copyright (C) 1994-1995, Index Data I/S
- * All rights reserved.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: kdump.c,v $
- * Revision 1.5 1995-09-11 13:09:35 adam
- * More work on relevance feedback.
- *
- * Revision 1.4 1995/09/08 14:52:27 adam
- * Minor changes. Dictionary is lower case now.
- *
- * Revision 1.3 1995/09/06 16:11:17 adam
- * Option: only one word key per file.
- *
- * Revision 1.2 1995/09/04 12:33:42 adam
- * Various cleanup. YAZ util used instead.
- *
- * Revision 1.1 1995/09/04 09:10:36 adam
- * More work on index add/del/update.
- * Merge sort implemented.
- * Initial work on z39 server.
- *
- */
+/* $Id: kdump.c,v 1.33 2007-01-15 15:10:16 adam Exp $
+ Copyright (C) 1995-2007
+ Index Data ApS
+
+This file is part of the Zebra server.
+
+Zebra is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
#include <stdio.h>
+#include <string.h>
#include <assert.h>
+#include <stdlib.h>
+#ifdef WIN32
+#include <io.h>
+#endif
+#if HAVE_UNISTD_H
#include <unistd.h>
+#endif
+#include <assert.h>
-#include <alexutil.h>
+#include <charmap.h>
#include "index.h"
char *prog;
-static int read_one (FILE *inf, char *name, char *key)
+int main(int argc, char **argv)
+{
+ exit(0);
+}
+
+#if 0
+/* old kdumper.. must be updated to use new codec .. */
+int key_file_decode (FILE *f)
+{
+ int c, d;
+
+ c = getc (f);
+ switch (c & 192)
+ {
+ case 0:
+ d = c;
+ break;
+ case 64:
+ d = ((c&63) << 8) + (getc (f) & 0xff);
+ break;
+ case 128:
+ d = ((c&63) << 8) + (getc (f) & 0xff);
+ d = (d << 8) + (getc (f) & 0xff);
+ break;
+ case 192:
+ d = ((c&63) << 8) + (getc (f) & 0xff);
+ d = (d << 8) + (getc (f) & 0xff);
+ d = (d << 8) + (getc (f) & 0xff);
+ break;
+ default:
+ d = 0;
+ assert (0);
+ }
+ return d;
+}
+
+
+static int read_one (FILE *inf, char *name, char *key, struct it_key *prevk)
{
int c;
int i = 0;
- name[0] = 0;
+ struct it_key itkey;
do
{
if ((c=getc(inf)) == EOF)
return 0;
name[i++] = c;
} while (c);
- for (i = 0; i<sizeof(struct it_key)+1; i++)
- ((char *)key)[i] = getc (inf);
+ if (i > 1)
+ prevk->sysno = 0;
+ c = key_file_decode (inf);
+ key[0] = c & 1;
+ c = c >> 1;
+ itkey.sysno = c + prevk->sysno;
+ if (c)
+ {
+ prevk->sysno = itkey.sysno;
+ prevk->seqno = 0;
+ }
+ c = key_file_decode (inf);
+ itkey.seqno = c + prevk->seqno;
+ prevk->seqno = itkey.seqno;
+
+ memcpy (key+1, &itkey, sizeof(itkey));
return 1;
}
+
int main (int argc, char **argv)
{
int ret;
char *key_fname = NULL;
char key_string[IT_MAX_WORD];
char key_info[256];
+ ZebraMaps zm;
FILE *inf;
+ Res res = NULL;
+ struct it_key prevk;
+
+ prevk.sysno = 0;
+ prevk.seqno = 0;
prog = *argv;
- while ((ret = options ("v:", argv, argc, &arg)) != -2)
+ while ((ret = options ("c:v:", argv, argc, &arg)) != -2)
{
if (ret == 0)
{
}
else if (ret == 'v')
{
- log_init (log_mask_str(arg), prog, NULL);
+ yaz_log_init (yaz_log_mask_str(arg), prog, NULL);
}
+ else if (ret == 'c')
+ {
+ if (!(res = res_open (arg, 0, 0)))
+ {
+ yaz_log(YLOG_FATAL, "Failed to open resource file %s", arg);
+ exit (1);
+ }
+ }
else
{
- logf (LOG_FATAL, "Unknown option '-%s'", arg);
+ yaz_log (YLOG_FATAL, "Unknown option '-%s'", arg);
exit (1);
}
}
if (!key_fname)
{
- fprintf (stderr, "kdump [-v log] file\n");
+ fprintf (stderr, "kdump [-c config] [-v log] file\n");
exit (1);
}
+ if (!res)
+ res = res_open ("zebra.cfg", 0, 0);
+ zm = zebra_maps_open (res, 0);
if (!(inf = fopen (key_fname, "r")))
{
- logf (LOG_FATAL|LOG_ERRNO, "fopen %s", key_fname);
+ yaz_log (YLOG_FATAL|YLOG_ERRNO, "fopen %s", key_fname);
exit (1);
}
- while (read_one (inf, key_string, key_info))
+ printf ("t rg op sysno seqno txt\n");
+ while (read_one (inf, key_string, key_info, &prevk))
{
struct it_key k;
+ int op;
+ char keybuf[IT_MAX_WORD+1];
+ char *to = keybuf;
+ const char *from = key_string;
+ int usedb_type = from[0];
+ int reg_type = from[1];
- memcpy (&k, key_info+1, sizeof(k));
-#if IT_KEY_HAVE_SEQNO
- printf ("%7d op=%d s=%-5d %s\n", k.sysno, *key_info, k.seqno,
- key_string);
-#else
- printf ("%7d op=%d f=%-3d %s\n", k.sysno, *key_info, k.freq,
- key_string);
+ op = key_info[0];
+ memcpy (&k, 1+key_info, sizeof(k));
-#endif
+ from += 2;
+ while (*from)
+ {
+ const char *res = zebra_maps_output (zm, reg_type, &from);
+ if (!res)
+ *to++ = *from++;
+ else
+ while (*res)
+ *to++ = *res++;
+ }
+ *to = '\0';
+ printf ("%c %3d %c %7d %5d %s\n", reg_type, usedb_type, op ? 'i':'d',
+ k.sysno, k.seqno, keybuf);
}
+ zebra_maps_close (zm);
if (fclose (inf))
{
- logf (LOG_FATAL|LOG_ERRNO, "fclose %s", key_fname);
+ yaz_log (YLOG_FATAL|YLOG_ERRNO, "fclose %s", key_fname);
exit (1);
}
-
exit (0);
}
+#endif
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+