X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fmarcdisp.c;h=7cadfcdf13ccc826cd282cb859a5060a4d44f1d5;hb=366dc7568281c9774cd309b28c24a077604264a0;hp=840c0b1c4f6d52c1c31e6765280a4a1c1235d7cd;hpb=635dd986bff70edc8e8c39067bcc702e59215b56;p=yaz-moved-to-github.git diff --git a/util/marcdisp.c b/util/marcdisp.c index 840c0b1..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.19 2002-03-18 18:11:45 adam Exp $ + * $Id: marcdisp.c,v 1.24 2002-12-03 10:03:27 adam Exp $ */ #if HAVE_CONFIG_H @@ -58,19 +58,46 @@ int yaz_marc_decode (const char *buf, WRBUF wr, int debug, int bsize, int xml) if (xml) { - char str[40]; + char str[80]; int i; - 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; } - wrbuf_puts (wr, ">\n"); } if (debug) { @@ -115,19 +142,6 @@ int yaz_marc_decode (const char *buf, WRBUF wr, int debug, int bsize, int xml) memcpy (tag, buf+entry_p, 3); entry_p += 3; tag[3] = '\0'; - if (xml) - { - wrbuf_puts (wr, ""); - } - else - { - wrbuf_puts (wr, " $"); + 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) @@ -200,7 +262,14 @@ int yaz_marc_decode (const char *buf, WRBUF wr, int debug, int bsize, int xml) } 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++; } } @@ -210,12 +279,42 @@ int yaz_marc_decode (const char *buf, WRBUF wr, int debug, int bsize, int xml) wrbuf_puts (wr, " \n"); if (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS) wrbuf_puts (wr, " \n"); - if (xml) + 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; + } } - if (xml) + switch(xml) + { + case YAZ_MARC_LINE: + wrbuf_puts (wr, ""); + break; + case YAZ_MARC_XML: wrbuf_puts (wr, "\n"); - wrbuf_puts (wr, ""); + break; + case YAZ_MARC_OAIMARC: + wrbuf_puts (wr, "\n"); + break; + case YAZ_MARC_MARCXML: + wrbuf_puts (wr, " \n\n"); + break; + } return record_length; }