From 8590f113acfb6a4a1c5a4101f604690efdbc2420 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Tue, 22 Oct 2002 10:29:58 +0000 Subject: [PATCH] Added grs1 display utility --- zutil/grs1disp.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 zutil/grs1disp.c diff --git a/zutil/grs1disp.c b/zutil/grs1disp.c new file mode 100644 index 0000000..21221b5 --- /dev/null +++ b/zutil/grs1disp.c @@ -0,0 +1,117 @@ +/* + * 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 +#include +#include +#include + +#include + +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); +} + -- 1.7.10.4