/*
- * Copyright (c) 1995, Index Data.
+ * Copyright (c) 1995-1997, Index Data.
* See the file LICENSE for details.
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: d1_grs.c,v $
- * Revision 1.9 1997-05-14 06:54:03 adam
+ * Revision 1.12 1997-11-24 11:33:56 adam
+ * Using function odr_nullval() instead of global ODR_NULLVAL when
+ * appropriate.
+ *
+ * Revision 1.11 1997/11/18 09:51:09 adam
+ * Removed element num_children from data1_node. Minor changes in
+ * data1 to Explain.
+ *
+ * Revision 1.10 1997/09/17 12:10:36 adam
+ * YAZ version 1.4.
+ *
+ * Revision 1.9 1997/05/14 06:54:03 adam
* C++ support.
*
* Revision 1.8 1996/12/05 13:17:49 quinn
#define D1_VARIANTARRAY 20 /* fixed max length on sup'd variant-list. Lazy me */
-Z_GenericRecord *data1_nodetogr(data1_node *n, int select, ODR o, int *len);
-
static Z_ElementMetaData *get_ElementMetaData(ODR o)
{
Z_ElementMetaData *r = odr_malloc(o, sizeof(*r));
return 0;
}
-static Z_ElementData *nodetoelementdata(data1_node *n, int select, int leaf,
- ODR o, int *len)
+static Z_ElementData *nodetoelementdata(data1_handle dh, data1_node *n,
+ int select, int leaf,
+ ODR o, int *len)
{
Z_ElementData *res = odr_malloc(o, sizeof(*res));
if (!n)
{
res->which = Z_ElementData_elementNotThere;
- res->u.elementNotThere = ODR_NULLVAL;
+ res->u.elementNotThere = odr_nullval();
}
- else if (n->which == DATA1N_data && (leaf || n->parent->num_children == 1))
+ else if (n->which == DATA1N_data && (leaf || n->next == NULL))
{
char str[512];
int toget;
else
{
res->which = Z_ElementData_subtree;
- if (!(res->u.subtree = data1_nodetogr(n->parent, select, o, len)))
+ if (!(res->u.subtree = data1_nodetogr (dh, n->parent, select, o, len)))
return 0;
}
return res;
}
-static Z_TaggedElement *nodetotaggedelement(data1_node *n, int select, ODR o,
- int *len)
+static Z_TaggedElement *nodetotaggedelement(data1_handle dh, data1_node *n,
+ int select, ODR o,
+ int *len)
{
Z_TaggedElement *res = odr_malloc(o, sizeof(*res));
data1_tag *tag = 0;
*/
else if (n->which == DATA1N_data || n->which == DATA1N_variant)
{
- if (!(tag = data1_gettagbyname(n->root->u.root.absyn->tagset,
- "wellKnown")))
+ if (!(tag = data1_gettagbyname (dh, n->root->u.root.absyn->tagset,
+ "wellKnown")))
{
logf(LOG_WARN, "Unable to locate tag for 'wellKnown'");
return 0;
res->appliedVariant = 0;
res->metaData = 0;
if (n->which == DATA1N_variant || (data && data->which ==
- DATA1N_variant && data->parent->num_children == 1))
+ DATA1N_variant && data->next == NULL))
{
int nvars = 0;
{
res->content = odr_malloc(o, sizeof(*res->content));
res->content->which = Z_ElementData_noDataRequested;
- res->content->u.noDataRequested = ODR_NULLVAL;
+ res->content->u.noDataRequested = odr_nullval();
}
- else if (!(res->content = nodetoelementdata(data, select, leaf, o, len)))
+ else if (!(res->content = nodetoelementdata (dh, data, select, leaf,
+ o, len)))
return 0;
*len += 10;
return res;
}
-Z_GenericRecord *data1_nodetogr(data1_node *n, int select, ODR o, int *len)
+Z_GenericRecord *data1_nodetogr(data1_handle dh, data1_node *n,
+ int select, ODR o, int *len)
{
Z_GenericRecord *res = odr_malloc(o, sizeof(*res));
data1_node *c;
+ int num_children = 0;
+
+ for (c = n->child; c; c = c->next)
+ num_children++;
- res->elements = odr_malloc(o, sizeof(Z_TaggedElement *) * n->num_children);
+ res->elements = odr_malloc(o, sizeof(Z_TaggedElement *) * num_children);
res->num_elements = 0;
for (c = n->child; c; c = c->next)
{
if (c->which == DATA1N_tag && select && !c->u.tag.node_selected)
continue;
if (!(res->elements[res->num_elements++] =
- nodetotaggedelement(c, select, o, len)))
+ nodetotaggedelement (dh, c, select, o, len)))
return 0;
}
return res;