--- /dev/null
+/*
+ * Copyright (c) 2002, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: grs1disp.c,v 1.1 2002-10-22 10:29:58 adam Exp $
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <yaz/proto.h>
+
+static void display_variant(WRBUF w, Z_Variant *v, int level)
+{
+ int i;
+
+ for (i = 0; i < v->num_triples; i++)
+ {
+ printf("%*sclass=%d,type=%d", level * 4, "", *v->triples[i]->zclass,
+ *v->triples[i]->type);
+ if (v->triples[i]->which == Z_Triple_internationalString)
+ printf(",value=%s\n", v->triples[i]->value.internationalString);
+ else
+ printf("\n");
+ }
+}
+
+static void display_grs1(WRBUF w, Z_GenericRecord *r, int level)
+{
+ int i;
+
+ if (!r)
+ {
+ return;
+ }
+ for (i = 0; i < r->num_elements; i++)
+ {
+ Z_TaggedElement *t;
+
+ wrbuf_printf(w, "%*s", level * 4, "");
+ t = r->elements[i];
+ wrbuf_printf(w, "(");
+ if (t->tagType)
+ wrbuf_printf(w, "%d,", *t->tagType);
+ else
+ wrbuf_printf(w, "?,");
+ if (t->tagValue->which == Z_StringOrNumeric_numeric)
+ wrbuf_printf(w, "%d) ", *t->tagValue->u.numeric);
+ else
+ wrbuf_printf(w, "%s) ", t->tagValue->u.string);
+ if (t->content->which == Z_ElementData_subtree)
+ {
+ if (!t->content->u.subtree)
+ printf (" (no subtree)\n");
+ else
+ {
+ wrbuf_printf(w, "\n");
+ display_grs1(w, t->content->u.subtree, level+1);
+ }
+ }
+ else if (t->content->which == Z_ElementData_string)
+ wrbuf_printf(w, "%s\n", t->content->u.string);
+ else if (t->content->which == Z_ElementData_numeric)
+ wrbuf_printf(w, "%d\n", *t->content->u.numeric);
+ else if (t->content->which == Z_ElementData_oid)
+ {
+ int *ip = t->content->u.oid;
+ oident *oent;
+
+ if ((oent = oid_getentbyoid(t->content->u.oid)))
+ wrbuf_printf(w, "OID: %s\n", oent->desc);
+ else
+ {
+ wrbuf_printf(w, "{");
+ while (ip && *ip >= 0)
+ wrbuf_printf(w, " %d", *(ip++));
+ wrbuf_printf(w, " }\n");
+ }
+ }
+ else if (t->content->which == Z_ElementData_noDataRequested)
+ wrbuf_printf(w, "[No data requested]\n");
+ else if (t->content->which == Z_ElementData_elementEmpty)
+ wrbuf_printf(w, "[Element empty]\n");
+ else if (t->content->which == Z_ElementData_elementNotThere)
+ wrbuf_printf(w, "[Element not there]\n");
+ else if (t->content->which == Z_ElementData_date)
+ wrbuf_printf(w, "Date: %s\n", t->content->u.date);
+ else if (t->content->which == Z_ElementData_ext)
+ {
+ printf ("External\n");
+ /* we cannot print externals here. Srry */
+ }
+ else
+ wrbuf_printf(w, "? type = %d\n",t->content->which);
+ if (t->appliedVariant)
+ display_variant(w, t->appliedVariant, level+1);
+ if (t->metaData && t->metaData->supportedVariants)
+ {
+ int c;
+
+ wrbuf_printf(w, "%*s---- variant list\n", (level+1)*4, "");
+ for (c = 0; c < t->metaData->num_supportedVariants; c++)
+ {
+ wrbuf_printf(w, "%*svariant #%d\n", (level+1)*4, "", c);
+ display_variant(w, t->metaData->supportedVariants[c], level+2);
+ }
+ }
+ }
+}
+
+void yaz_display_grs1(WRBUF wrbuf, Z_GenericRecord *r, int flags)
+{
+ display_grs1 (wrbuf, r, 0);
+}
+