X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fmarcdisp.c;h=7cadfcdf13ccc826cd282cb859a5060a4d44f1d5;hb=366dc7568281c9774cd309b28c24a077604264a0;hp=03bb37c1ff60b94d31124541135e7c737b4f794e;hpb=8e8cb340836e3ffd48d464755903f6795754a226;p=yaz-moved-to-github.git diff --git a/util/marcdisp.c b/util/marcdisp.c index 03bb37c..7cadfcd 100644 --- a/util/marcdisp.c +++ b/util/marcdisp.c @@ -2,7 +2,7 @@ * Copyright (c) 1995-2002, Index Data * See the file LICENSE for details. * - * $Id: marcdisp.c,v 1.17 2002-02-01 14:50:29 adam Exp $ + * $Id: marcdisp.c,v 1.24 2002-12-03 10:03:27 adam Exp $ */ #if HAVE_CONFIG_H @@ -16,8 +16,7 @@ #include #include -int marc_display_wrbuf (const char *buf, WRBUF wr, int debug, - int bsize) +int yaz_marc_decode (const char *buf, WRBUF wr, int debug, int bsize, int xml) { int entry_p; int record_length; @@ -57,9 +56,55 @@ int marc_display_wrbuf (const char *buf, WRBUF wr, int debug, length_starting = atoi_n (buf+21, 1); length_implementation = atoi_n (buf+22, 1); + if (xml) + { + char str[80]; + int i; + switch(xml) + { + case YAZ_MARC_XML: + wrbuf_puts (wr, "\n"); + break; + case YAZ_MARC_OAIMARC: + wrbuf_puts( + wr, + "\n", + buf[5], buf[6], buf[7]); + wrbuf_puts (wr, str); + break; + case YAZ_MARC_MARCXML: + wrbuf_printf( + wr, + "\n" + " \n" + " %.24s\n", buf); + break; + } + } if (debug) { char str[40]; + + if (xml) + wrbuf_puts (wr, "\n"); } + for (entry_p = 24; buf[entry_p] != ISO2709_FS; ) { entry_p += 3+length_data_entry+length_starting; @@ -94,10 +142,6 @@ int marc_display_wrbuf (const char *buf, WRBUF wr, int debug, memcpy (tag, buf+entry_p, 3); entry_p += 3; tag[3] = '\0'; - if (debug) - wrbuf_puts (wr, "Tag: "); - wrbuf_puts (wr, tag); - wrbuf_puts (wr, " "); data_length = atoi_n (buf+entry_p, length_data_entry); entry_p += length_data_entry; data_offset = atoi_n (buf+entry_p, length_starting); @@ -113,47 +157,173 @@ int marc_display_wrbuf (const char *buf, WRBUF wr, int debug, else if (!memcmp (tag, "00", 2)) identifier_flag = 0; + switch(xml) + { + case YAZ_MARC_LINE: + if (debug) + wrbuf_puts (wr, "Tag: "); + wrbuf_puts (wr, tag); + wrbuf_puts (wr, " "); + break; + case YAZ_MARC_XML: + wrbuf_printf (wr, ""); + if (identifier_flag) + wrbuf_puts (wr, "\n"); + } + else + { + if (debug && !xml) + wrbuf_puts (wr, " Fields: "); + } while (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS && i < end_offset) { if (identifier_flag) { i++; - wrbuf_puts (wr, " $"); - for (j = 1; j"); + break; + case YAZ_MARC_OAIMARC: + wrbuf_puts (wr, " "); + break; + case YAZ_MARC_MARCXML: + wrbuf_puts (wr, " "); + break; + } while (buf[i] != ISO2709_RS && buf[i] != ISO2709_IDFS && buf[i] != ISO2709_FS && i < end_offset) { - wrbuf_putc (wr, buf[i]); + if (xml && buf[i] == '<') + wrbuf_puts(wr, "<"); + else if (xml && buf[i] == '&') + wrbuf_puts(wr, "&"); + else + wrbuf_putc (wr, buf[i]); i++; } + if (xml) + wrbuf_puts (wr, "\n"); } else { - wrbuf_putc (wr, buf[i]); + if (xml && buf[i] == '<') + wrbuf_puts(wr, "<"); + else if (xml && buf[i] == '&') + wrbuf_puts(wr, "&"); + else if (xml && buf[i] == '"') + wrbuf_puts(wr, """); + else + wrbuf_putc (wr, buf[i]); i++; } } - wrbuf_putc (wr, '\n'); + if (!xml) + wrbuf_putc (wr, '\n'); if (i < end_offset) - wrbuf_puts (wr, "-- separator but not at end of field\n"); + wrbuf_puts (wr, " \n"); if (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS) - wrbuf_puts (wr, "-- no separator at end of field\n"); + wrbuf_puts (wr, " \n"); + switch(xml) + { + case YAZ_MARC_LINE: + break; + case YAZ_MARC_XML: + wrbuf_puts (wr, "\n"); + break; + case YAZ_MARC_OAIMARC: + if (identifier_flag) + wrbuf_puts (wr, " \n"); + else + wrbuf_puts (wr, " \n"); + break; + case YAZ_MARC_MARCXML: + if (identifier_flag) + wrbuf_puts (wr, " \n"); + else + wrbuf_puts (wr, " \n"); + break; + } + } + switch(xml) + { + case YAZ_MARC_LINE: + wrbuf_puts (wr, ""); + break; + case YAZ_MARC_XML: + wrbuf_puts (wr, "\n"); + break; + case YAZ_MARC_OAIMARC: + wrbuf_puts (wr, "\n"); + break; + case YAZ_MARC_MARCXML: + wrbuf_puts (wr, " \n\n"); + break; } - wrbuf_puts (wr, ""); return record_length; } +int marc_display_wrbuf (const char *buf, WRBUF wr, int debug, + int bsize) +{ + return yaz_marc_decode (buf, wr, debug, bsize, 0); +} + int marc_display_exl (const char *buf, FILE *outf, int debug, int length) { int record_length; @@ -168,7 +338,6 @@ int marc_display_exl (const char *buf, FILE *outf, int debug, int length) return record_length; } - int marc_display_ex (const char *buf, FILE *outf, int debug) { return marc_display_exl (buf, outf, debug, -1);