* 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
#include <yaz/zgdu.h>
#include <yaz/z-oclcui.h>
+#include <yaz/marcdisp.h>
YAZ_BEGIN_CDECL
#if 1
/** \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);
* 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
#include <ctype.h>
#include <yaz/proto.h>
+#include <yaz/marcdisp.h>
static void opac_element_str(WRBUF wrbuf, int l, const char *elem,
const char *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, "<holdings>\n");
+ if (r->bibliographicRecord)
+ {
+ Z_External *ext = r->bibliographicRecord;
+
+ wrbuf_puts (wrbuf, " <bibliographicRecord>\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, " </bibliographicRecord>\n");
+ }
for (i = 0; i < r->num_holdingsData; i++)
{
Z_HoldingsRecord *h = r->holdingsData[i];
if (h->which == Z_HoldingsRecord_marcHoldingsRecord)
{
- wrbuf_puts (wrbuf, " <marc/>\n");
- /* h->u.marcHoldingsRecord) */
+ Z_External *ext = h->u.marcHoldingsRecord;
+
+ wrbuf_puts (wrbuf, " <marcHoldingsRecord>\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, " </marcHoldingsRecord>\n");
}
else if (h->which == Z_HoldingsRecord_holdingsAndCirc)
{
}
wrbuf_puts(wrbuf, "</holdings>\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);
+}
+