2 * Copyright (c) 1995-2004, Index Data
3 * See the file LICENSE for details.
5 * $Id: marcdump.c,v 1.24 2004-08-04 09:30:30 adam Exp $
24 #include <yaz/marcdisp.h>
25 #include <yaz/yaz-util.h>
26 #include <yaz/xmalloc.h>
27 #include <yaz/options.h>
36 static void usage(const char *prog)
38 fprintf (stderr, "Usage: %s [-c cfile] [-f from] [-t to] [-x] [-O] [-X] [-I] [-v] file...\n",
42 int main (int argc, char **argv)
53 char *from = 0, *to = 0;
57 setlocale(LC_CTYPE, "");
61 to = nl_langinfo(CODESET);
65 while ((r = options("vc:xOXIf:t:", argv, argc, &arg)) != -2)
80 cfile = fopen (arg, "w");
83 xml = YAZ_MARC_SIMPLEXML;
86 xml = YAZ_MARC_OAIMARC;
89 xml = YAZ_MARC_MARCXML;
92 xml = YAZ_MARC_ISO2709;
95 inf = fopen (arg, "rb");
99 fprintf (stderr, "%s: cannot open %s:%s\n",
100 prog, arg, strerror (errno));
104 fprintf (cfile, "char *marc_records[] = {\n");
107 yaz_marc_t mt = yaz_marc_create();
112 cd = yaz_iconv_open(to, from);
115 fprintf(stderr, "conversion from %s to %s "
116 "unsupported\n", from, to);
119 yaz_marc_iconv(mt, cd);
121 yaz_marc_xml(mt, xml);
122 yaz_marc_debug(mt, verbose);
129 r = fread (buf, 1, 5, inf);
132 len = atoi_n(buf, 5);
133 if (len < 25 || len > 100000)
136 r = fread (buf + 5, 1, len, inf);
139 r = yaz_marc_decode_buf (mt, buf, -1, &result, &rlen);
142 fwrite (result, rlen, 1, stdout);
148 fprintf (cfile, ",");
149 fprintf (cfile, "\n");
150 for (i = 0; i < r; i++)
153 fprintf (cfile, " \"");
154 fprintf (cfile, "\\x%02X", p[i] & 255);
156 if (i < r - 1 && (i & 15) == 15)
157 fprintf (cfile, "\"\n");
160 fprintf (cfile, "\"\n");
166 yaz_marc_destroy(mt);
169 fprintf (cfile, "};\n");