/*
- * Copyright (c) 1995-1998, Index Data.
+ * Copyright (c) 1995-1999, Index Data.
* See the file LICENSE for details.
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: d1_prtree.c,v $
- * Revision 1.4 1998-05-18 13:07:06 adam
+ * Revision 1.5 1999-01-25 13:49:47 adam
+ * Made data1_pr_tree make better printing of data1 buffers.
+ *
+ * Revision 1.4 1998/05/18 13:07:06 adam
* Changed the way attribute sets are handled by the retriaval module.
* Extended Explain conversion / schema.
* Modified server and client to work with ASN.1 compiled protocol handlers.
#include <log.h>
#include <data1.h>
+static void pr_string (FILE *out, const char *str, int len)
+{
+ int i;
+ for (i = 0; i<len; i++)
+ {
+ int c = str[i];
+ if (c < 32 || c >126)
+ fprintf (out, "\\x%02x", c);
+ else
+ fputc (c, out);
+ }
+}
+
static void pr_tree (data1_handle dh, data1_node *n, FILE *out, int level)
{
- fprintf (out, "%*s", level, "");
- switch (n->which)
- {
+ fprintf (out, "%*s", level, "");
+ switch (n->which)
+ {
case DATA1N_root:
fprintf (out, "root abstract syntax=%s\n", n->u.root.type);
break;
- case DATA1N_tag:
- fprintf (out, "tag type=%s\n", n->u.tag.tag);
- break;
- case DATA1N_data:
- fprintf (out, "data type=");
- switch (n->u.data.what)
- {
- case DATA1I_inctxt:
- fprintf (out, "inctxt\n");
- break;
- case DATA1I_incbin:
- fprintf (out, "incbin\n");
- break;
- case DATA1I_text:
- fprintf (out, "text '%.*s'\n", n->u.data.len, n->u.data.data);
- break;
- case DATA1I_num:
- fprintf (out, "num %.*s\n", n->u.data.len, n->u.data.data);
- break;
- case DATA1I_oid:
- fprintf (out, "oid %.*s\n", n->u.data.len, n->u.data.data);
- break;
- default:
- fprintf (out, "unknown(%d)\n", n->u.data.what);
- break;
- }
- break;
- case DATA1N_variant:
- fprintf (out, "variant\n");
+ case DATA1N_tag:
+ fprintf (out, "tag type=%s\n", n->u.tag.tag);
+ break;
+ case DATA1N_data:
+ fprintf (out, "data type=");
+ switch (n->u.data.what)
+ {
+ case DATA1I_inctxt:
+ fprintf (out, "inctxt\n");
+ break;
+ case DATA1I_incbin:
+ fprintf (out, "incbin\n");
+ break;
+ case DATA1I_text:
+ fprintf (out, "text '");
+ pr_string (out, n->u.data.data, n->u.data.len);
+ fprintf (out, "'\n");
+ break;
+ case DATA1I_num:
+ fprintf (out, "num '");
+ pr_string (out, n->u.data.data, n->u.data.len);
+ fprintf (out, "'\n");
+ break;
+ case DATA1I_oid:
+ fprintf (out, "oid '");
+ pr_string (out, n->u.data.data, n->u.data.len);
+ fprintf (out, "'\n");
+ break;
+ default:
+ fprintf (out, "unknown(%d)\n", n->u.data.what);
+ break;
+ }
+ break;
+ case DATA1N_variant:
+ fprintf (out, "variant\n");
#if 0
- if (n->u.variant.type->name)
- fprintf (out, " class=%s type=%d value=%s\n",
- n->u.variant.type->name, n->u.variant.type->type,
- n->u.variant.value);
+ if (n->u.variant.type->name)
+ fprintf (out, " class=%s type=%d value=%s\n",
+ n->u.variant.type->name, n->u.variant.type->type,
+ n->u.variant.value);
#endif
- break;
- default:
- fprintf (out, "unknown(%d)\n", n->which);
- }
- if (n->child)
- pr_tree (dh, n->child, out, level+4);
- if (n->next)
- pr_tree (dh, n->next, out, level);
+ break;
+ default:
+ fprintf (out, "unknown(%d)\n", n->which);
+ }
+ if (n->child)
+ pr_tree (dh, n->child, out, level+4);
+ if (n->next)
+ pr_tree (dh, n->next, out, level);
}
void data1_pr_tree (data1_handle dh, data1_node *n, FILE *out)
{
- pr_tree (dh, n, out, 0);
+ pr_tree (dh, n, out, 0);
}