X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fmarcdisp.c;h=235f0405fe474ca36a722aacdad05a3898685665;hb=58b2fdadbb7b8a8845ff67501520fe1660dedeee;hp=f728d12a699ac2754929a71365ac07c661fc648e;hpb=08e514143cd7d16db15c1c3d4d15d687f561c047;p=yaz-moved-to-github.git diff --git a/util/marcdisp.c b/util/marcdisp.c index f728d12..235f040 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.18 2002-02-28 13:21:16 adam Exp $ + * $Id: marcdisp.c,v 1.23 2002-10-04 19:11:17 adam Exp $ */ #if HAVE_CONFIG_H @@ -56,9 +56,47 @@ int yaz_marc_decode (const char *buf, WRBUF wr, int debug, int bsize, int xml) length_starting = atoi_n (buf+21, 1); length_implementation = atoi_n (buf+22, 1); + if (xml) + { + char str[80]; + int i; + if (xml > 1) + { + wrbuf_puts( + wr, + "\n", + buf[5], buf[6], buf[7]); + wrbuf_puts (wr, str); + } + else + { + wrbuf_puts (wr, "\n"); + } + } 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; @@ -93,19 +134,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, " 1) + { + if (identifier_flag) + wrbuf_puts (wr, " 1) + sprintf (nostr, " i%d=\"%c\"", j+1, buf[i]); + else + sprintf (nostr, " Indicator%d=\"%c\"", j+1, buf[i]); wrbuf_puts (wr, nostr); } else @@ -145,7 +203,7 @@ int yaz_marc_decode (const char *buf, WRBUF wr, int debug, int bsize, int xml) } else { - if (debug) + if (debug && !xml) wrbuf_puts (wr, " Fields: "); } while (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS && i < end_offset) @@ -155,7 +213,10 @@ int yaz_marc_decode (const char *buf, WRBUF wr, int debug, int bsize, int xml) i++; if (xml) { - wrbuf_puts (wr, " 1) + wrbuf_puts (wr, " "); @@ -170,15 +231,27 @@ int yaz_marc_decode (const char *buf, WRBUF wr, int debug, int bsize, int xml) 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"); + 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++; } } @@ -189,7 +262,24 @@ int yaz_marc_decode (const char *buf, WRBUF wr, int debug, int bsize, int xml) if (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS) wrbuf_puts (wr, " \n"); if (xml) - wrbuf_puts (wr, "\n"); + { + if (xml > 1) + { + if (identifier_flag) + wrbuf_puts (wr, "\n"); + else + wrbuf_puts (wr, "\n"); + } + else + wrbuf_puts (wr, "\n"); + } + } + if (xml) + { + if (xml > 1) + wrbuf_puts (wr, "\n"); + else + wrbuf_puts (wr, "\n"); } wrbuf_puts (wr, ""); return record_length;