From de94855f95b2b691d32f0cfcd9fa0a63df839812 Mon Sep 17 00:00:00 2001 From: dbs Date: Thu, 10 Jul 2008 04:04:44 +0000 Subject: [PATCH] So long, marcdumper; you served us well, but you have outlived your usefulness. git-svn-id: svn://svn.open-ils.org/ILS/trunk@10008 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/extras/marcdumper/Makefile | 21 -- Open-ILS/src/extras/marcdumper/marcdumper.c | 345 -------------------- 2 files changed, 366 deletions(-) delete mode 100644 Open-ILS/src/extras/marcdumper/Makefile delete mode 100644 Open-ILS/src/extras/marcdumper/marcdumper.c diff --git a/Open-ILS/src/extras/marcdumper/Makefile b/Open-ILS/src/extras/marcdumper/Makefile deleted file mode 100644 index 9bf2426064..0000000000 --- a/Open-ILS/src/extras/marcdumper/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# -# This utility code requires libxml2 and yaz version 2.0.34 or greater. -# - -CC = gcc -LD = -lxml2 -lyaz -COMP = -O2 -I /usr/include/libxml2/ -I /usr/include/yaz - -all: marcdumper - -marcdumper: marcdumper.c - $(CC) marcdumper.c $(COMP) $(LD) -o $@ - -install: - mkdir -p $(BINDIR) - cp marcdumper $(BINDIR) - -clean: - /bin/rm -f *.o marcdumper - - diff --git a/Open-ILS/src/extras/marcdumper/marcdumper.c b/Open-ILS/src/extras/marcdumper/marcdumper.c deleted file mode 100644 index beb5ed8a24..0000000000 --- a/Open-ILS/src/extras/marcdumper/marcdumper.c +++ /dev/null @@ -1,345 +0,0 @@ -/* -* Copyright (C) 1995-2005, Index Data ApS -* See the file LICENSE for details. -* -* $Id$ -*/ - -#if HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include -#include - -#include -#include -#include -#include -#include - -#if HAVE_LOCALE_H -#include -#endif -#if HAVE_LANGINFO_H -#include -#endif - -#include -#include -#include -#include - -#ifndef SEEK_SET -#define SEEK_SET 0 -#endif -#ifndef SEEK_END -#define SEEK_END 2 -#endif - -#include - -char* clean_marc_xpath = "//*[@tag=\"999\"]"; -char* holdings_xpath = "/*/*[(local-name()='datafield' and " - "(@tag!='035' and @tag!='999')) or local-name()!='datafield']"; - -void prune_doc( xmlDocPtr doc, char* xpath ); -char* _xml_to_string( xmlDocPtr doc ); - -static void usage(const char *prog) { - fprintf (stderr, "Usage: %s -r [xpath] -c [cfile] [-f from] [-t to] [-x] [-O] [-X] [-I] [-v] file...\n", prog); -} - -int main (int argc, char **argv) { - int counter = 0; - - int r; - int libxml_dom_test = 0; - int print_offset = 0; - char *arg; - int verbose = 0; - FILE *inf; - char buf[100001]; - char *prog = *argv; - int no = 0; - int xml = 0; - FILE *cfile = 0; - char *from = 0, *to = 0; - int num = 1; - - #if HAVE_LOCALE_H - setlocale(LC_CTYPE, ""); - #endif - #if HAVE_LANGINFO_H - #ifdef CODESET - to = nl_langinfo(CODESET); - #endif - #endif - - char* prune = NULL; - while ((r = options("pvcr:xOeXIf:t:2", argv, argc, &arg)) != -2) { - - int count; - no++; - - switch (r) { - case 'r': - prune = arg; - xmlKeepBlanksDefault(0); - break; - case 'f': - from = arg; - break; - case 't': - to = arg; - break; - case 'c': - if (cfile) - fclose (cfile); - cfile = fopen (arg, "w"); - break; - case 'x': - xml = YAZ_MARC_SIMPLEXML; - break; - case 'O': - xml = YAZ_MARC_OAIMARC; - break; - //case 'e': /* not supported on older versions of yaz */ - // xml = YAZ_MARC_XCHANGE; - // break; - case 'X': - xml = YAZ_MARC_MARCXML; - break; - case 'I': - xml = YAZ_MARC_ISO2709; - break; - case 'p': - print_offset = 1; - break; - case '2': - libxml_dom_test = 1; - break; - case 0: - - inf = fopen (arg, "rb"); - count = 0; - if (!inf) { - fprintf (stderr, "%s: cannot open %s:%s\n", - prog, arg, strerror (errno)); - exit(1); - } - if (cfile) - fprintf (cfile, "char *marc_records[] = {\n"); - - if (1) { - yaz_marc_t mt = yaz_marc_create(); - yaz_iconv_t cd = 0; - - if (from && to) { - cd = yaz_iconv_open(to, from); - if (!cd) { - fprintf(stderr, "conversion from %s to %s " "unsupported\n", from, to); - exit(2); - } - yaz_marc_iconv(mt, cd); - } - yaz_marc_xml(mt, xml); - yaz_marc_debug(mt, verbose); - - while (1) { - int len; - char *result; - int rlen; - - r = fread (buf, 1, 5, inf); - - if (r < 5) { - if (r && print_offset) - printf ("Extra %d bytes", r); - break; - } - - if (print_offset) { - long off = ftell(inf); - printf ("Record %d offset %ld\n", num, (long) off); - } - - len = atoi_n(buf, 5); - - if (len < 25 || len > 100000) break; - - len = len - 5; - r = fread (buf + 5, 1, len, inf); - - if (r < len) break; - - r = yaz_marc_decode_buf (mt, buf, -1, &result, &rlen); - - if (r <= 0) break; - - - - counter++; - if(!prune) { - - fwrite (result, rlen, 1, stdout); - - } else { - - - xmlDocPtr doc = xmlParseMemory(result, rlen); - - if (doc) { - prune_doc( doc, prune ); - char* marc = _xml_to_string(doc); - fprintf(stdout, "%s", marc); - - free(marc); - xmlFreeDoc(doc); - - } else { - - fprintf(stderr, "xmLParseMemory failed for record %d\n", counter); - } - - } - - - if (cfile) { - - char *p = buf; - int i; - if (count) - fprintf (cfile, ","); - fprintf (cfile, "\n"); - for (i = 0; i < r; i++) { - if ((i & 15) == 0) - fprintf (cfile, " \""); - fprintf (cfile, "\\x%02X", p[i] & 255); - - if (i < r - 1 && (i & 15) == 15) - fprintf (cfile, "\"\n"); - - } - fprintf (cfile, "\"\n"); - } - num++; - } - - count++; - - if (cd) - yaz_iconv_close(cd); - yaz_marc_destroy(mt); - } - - - if (cfile) - fprintf (cfile, "};\n"); - fclose(inf); - break; - case 'v': - verbose++; - break; - default: - usage(prog); - exit (1); - } - } - - if (cfile) - fclose (cfile); - if (!no) { - usage(prog); - exit (1); - } - - fprintf(stderr, "\nProcessed %d Records\n", counter ); - exit (0); -} - - -void prune_doc( xmlDocPtr doc, char* xpath ) { - - xmlXPathContextPtr xpathctx; - xmlXPathObjectPtr object; - - xpathctx = xmlXPathNewContext(doc); - if(xpathctx == NULL) { - fprintf(stderr, "XPATH FAILED"); - return; - } - - object = xmlXPathEvalExpression( BAD_CAST xpath, xpathctx); - if(object == NULL) return; - - int i; - int size = object->nodesetval->nodeNr; - for(i=0; i!= size; i++ ) { - xmlNodePtr cur_node = (xmlNodePtr) object->nodesetval->nodeTab[i]; - xmlUnlinkNode( cur_node ); - xmlFreeNode( cur_node ); - object->nodesetval->nodeTab[i] = NULL; - } - - xmlXPathFreeObject(object); - xmlXPathFreeContext(xpathctx); - - /* remove all comments and PI nodes */ - xmlNodePtr cur = doc->children; - while(cur) { - if( cur->type == XML_COMMENT_NODE || cur->type == XML_PI_NODE ) { - xmlUnlinkNode( cur ); - xmlFreeNode( cur ); - } - cur = cur->next; - } - - -} - -char* _xml_to_string( xmlDocPtr doc ) { - - int bufsize; - xmlChar* xmlbuf; - xmlDocDumpFormatMemory( doc, &xmlbuf, &bufsize, 0 ); - - char* xml = strdup(xmlbuf); - xmlFree(xmlbuf); - - /*** remove the XML declaration */ - int len = strlen(xml); - char tmp[len]; - memset( tmp, 0, len ); - int i; - int found_at = 0; - - /* when we reach the first >, take everything after it */ - for( i = 0; i!= len; i++ ) { - if( xml[i] == 62) { /* ascii > */ - - /* found_at holds the starting index of the rest of the doc*/ - found_at = i + 1; - break; - } - } - - if( found_at ) { - - /* move the shortened doc into the tmp buffer */ - strncpy( tmp, xml + found_at, len - found_at ); - /* move the tmp buffer back into the allocated space */ - memset( xml, 0, len ); - strcpy( xml, tmp ); - } - - int l = strlen(xml)-1; - if( xml[l] == 10 || xml[l] == 13 ) - xml[l] = '\0'; - - return xml; - -} -- 2.43.2