From 77d6853aec94df6c69da9cd35d8ba982b9b12299 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 25 Feb 2005 17:05:09 +0000 Subject: [PATCH] Extended OPAC display utility. OPAC display utility renders bibliographic (MARC) record as well. Added yaz_opac_decode_wrbuf to supplement yaz_marc_decode_wrbuf. --- NEWS | 4 ++++ include/yaz/proto.h | 6 +++++- src/opacdisp.c | 35 +++++++++++++++++++++++++++++++---- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index 74cf109..c5d1141 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,9 @@ Possible compatibility problems with earlier versions marked with '*'. +Extended OPAC display utility. OPAC display utility renders +bibliographic (MARC) record as well. Added yaz_opac_decode_wrbuf +to supplement yaz_marc_decode_wrbuf. + --- 2.0.34 2005/02/08 Fixes for UNIX domain sockets. Bug #261. diff --git a/include/yaz/proto.h b/include/yaz/proto.h index 243ac0a..2ba1770 100644 --- a/include/yaz/proto.h +++ b/include/yaz/proto.h @@ -2,7 +2,7 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: proto.h,v 1.19 2005-01-27 09:06:51 adam Exp $ + * $Id: proto.h,v 1.20 2005-02-25 17:05:09 adam Exp $ */ /** * \file proto.h @@ -48,6 +48,7 @@ #include #include +#include YAZ_BEGIN_CDECL #if 1 @@ -121,6 +122,9 @@ YAZ_EXPORT void yaz_display_grs1(WRBUF wrbuf, Z_GenericRecord *r, int flags); /** \brief Performs "pretty" display of OPAC record to WRBUF */ YAZ_EXPORT void yaz_display_OPAC(WRBUF wrbuf, Z_OPACRecord *r, int flags); +/** \brief Performs "pretty" display of OPAC record to WRBUF using marc_t */ +void yaz_opac_decode_wrbuf(yaz_marc_t mt, Z_OPACRecord *r, WRBUF wrbuf); + /** \brief Encodes Z39.50 Init OPtions based on string mnemonics */ YAZ_EXPORT int yaz_init_opt_encode(Z_Options *opt, const char *opt_str, int *error_pos); diff --git a/src/opacdisp.c b/src/opacdisp.c index 3ee7ff6..79c1dde 100644 --- a/src/opacdisp.c +++ b/src/opacdisp.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: opacdisp.c,v 1.4 2005-01-15 19:47:14 adam Exp $ + * $Id: opacdisp.c,v 1.5 2005-02-25 17:05:09 adam Exp $ */ /** * \file opacdisp.c @@ -15,6 +15,7 @@ #include #include +#include static void opac_element_str(WRBUF wrbuf, int l, const char *elem, const char *data) @@ -49,11 +50,22 @@ static void opac_element_bool(WRBUF wrbuf, int l, const char *elem, int *data) } } -void yaz_display_OPAC(WRBUF wrbuf, Z_OPACRecord *r, int flags) +void yaz_opac_decode_wrbuf(yaz_marc_t mt, Z_OPACRecord *r, WRBUF wrbuf) { int i; + wrbuf_puts(wrbuf, "\n"); + if (r->bibliographicRecord) + { + Z_External *ext = r->bibliographicRecord; + + wrbuf_puts (wrbuf, " \n"); + if (ext->which == Z_External_octet) + yaz_marc_decode_wrbuf(mt, ext->u.octet_aligned->buf, + ext->u.octet_aligned->len, wrbuf); + wrbuf_puts (wrbuf, " \n"); + } for (i = 0; i < r->num_holdingsData; i++) { Z_HoldingsRecord *h = r->holdingsData[i]; @@ -61,8 +73,13 @@ void yaz_display_OPAC(WRBUF wrbuf, Z_OPACRecord *r, int flags) if (h->which == Z_HoldingsRecord_marcHoldingsRecord) { - wrbuf_puts (wrbuf, " \n"); - /* h->u.marcHoldingsRecord) */ + Z_External *ext = h->u.marcHoldingsRecord; + + wrbuf_puts (wrbuf, " \n"); + if (ext->which == Z_External_octet) + yaz_marc_decode_wrbuf(mt, ext->u.octet_aligned->buf, + ext->u.octet_aligned->len, wrbuf); + wrbuf_puts (wrbuf, " \n"); } else if (h->which == Z_HoldingsRecord_holdingsAndCirc) { @@ -139,3 +156,13 @@ void yaz_display_OPAC(WRBUF wrbuf, Z_OPACRecord *r, int flags) } wrbuf_puts(wrbuf, "\n"); } + +void yaz_display_OPAC(WRBUF wrbuf, Z_OPACRecord *opac_rec, int flags) +{ + yaz_marc_t mt = yaz_marc_create(); + + yaz_marc_xml(mt, YAZ_MARC_MARCXML); + yaz_opac_decode_wrbuf(mt, opac_rec, wrbuf); + yaz_marc_destroy(mt); +} + -- 1.7.10.4