Changed include/yaz/diagbib1.h and added include/yaz/diagsrw.h with
[yaz-moved-to-github.git] / src / opacdisp.c
index 157e58f..1cef0d3 100644 (file)
@@ -1,8 +1,12 @@
 /*
- * Copyright (c) 2003, Index Data.
+ * Copyright (C) 1995-2005, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: opacdisp.c,v 1.1 2003-10-27 12:21:34 adam Exp $
+ * $Id: opacdisp.c,v 1.6 2005-03-02 23:59:22 adam Exp $
+ */
+/**
+ * \file opacdisp.c
+ * \brief Implements OPAC record display
  */
 
 #include <stdio.h>
@@ -11,6 +15,7 @@
 #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)
@@ -45,9 +50,21 @@ 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, "<opacRecord>\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");
+    }
     wrbuf_puts(wrbuf, "<holdings>\n");
 
     for (i = 0; i < r->num_holdingsData; i++)
@@ -57,8 +74,13 @@ void yaz_display_OPAC(WRBUF wrbuf, Z_OPACRecord *r, int flags)
 
        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)
        {
@@ -77,6 +99,8 @@ void yaz_display_OPAC(WRBUF wrbuf, Z_OPACRecord *r, int flags)
            opac_element_str (wrbuf, 2, "localLocation", d->localLocation);
            opac_element_str (wrbuf, 2, "shelvingLocation", d->shelvingLocation);
            opac_element_str (wrbuf, 2, "callNumber", d->callNumber);
+           opac_element_str (wrbuf, 2, "shelvingData", d->shelvingData);
+           
            opac_element_str (wrbuf, 2, "copyNumber", d->copyNumber);
            opac_element_str (wrbuf, 2, "publicNote", d->publicNote);
            opac_element_str (wrbuf, 2, "reproductionNote", d->reproductionNote);
@@ -132,4 +156,15 @@ void yaz_display_OPAC(WRBUF wrbuf, Z_OPACRecord *r, int flags)
        wrbuf_puts(wrbuf, " </holding>\n");
     }
     wrbuf_puts(wrbuf, "</holdings>\n");
+    wrbuf_puts(wrbuf, "</opacRecord>\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);
 }
+