-static Z_RPNStructure *ccl_rpn_structure (ODR o, struct ccl_rpn_node *p);
-
-static Z_AttributesPlusTerm *ccl_rpn_term (ODR o, struct ccl_rpn_node *p)
-{
- struct ccl_rpn_attr *attr;
- int num = 0;
- Z_AttributesPlusTerm *zapt;
- Odr_oct *term_octet;
- Z_Term *term;
- Z_AttributeElement **elements;
-
- zapt = (Z_AttributesPlusTerm *)odr_malloc (o, sizeof(*zapt));
-
- term_octet = (Odr_oct *)odr_malloc (o, sizeof(*term_octet));
-
- term = (Z_Term *)odr_malloc (o, sizeof(*term));
-
- for (attr = p->u.t.attr_list; attr; attr = attr->next)
- num++;
- if (!num)
- elements = (Z_AttributeElement**)odr_nullval();
- else
- {
- int i = 0;
- elements = (Z_AttributeElement **)
- odr_malloc (o, num*sizeof(*elements));
- for (attr = p->u.t.attr_list; attr; attr = attr->next, i++)
- {
- elements[i] = (Z_AttributeElement *)
- odr_malloc (o, sizeof(**elements));
- elements[i]->attributeType =
- (int *)odr_malloc(o, sizeof(int));
- *elements[i]->attributeType = attr->type;
- elements[i]->attributeSet = 0;
- if (attr->set && *attr->set)
- {
- int value = oid_getvalbyname (attr->set);
-
- if (value != VAL_NONE)
- {
- int oid[OID_SIZE];
- struct oident ident;
-
- ident.oclass = CLASS_ATTSET;
- ident.proto = PROTO_Z3950;
- ident.value = (oid_value) value;
- elements[i]->attributeSet =
- odr_oiddup (o, oid_ent_to_oid (&ident, oid));
- }
- }
- elements[i]->which = Z_AttributeValue_numeric;
- elements[i]->value.numeric =
- (int *)odr_malloc (o, sizeof(int));
- *elements[i]->value.numeric = attr->value;
- }
- }
-#ifdef ASN_COMPILED
- zapt->attributes = (Z_AttributeList *)
- odr_malloc (o, sizeof(*zapt->attributes));
- zapt->attributes->num_attributes = num;
- zapt->attributes->attributes = elements;
-#else
- zapt->num_attributes = num;
- zapt->attributeList = elements;
-#endif
- zapt->term = term;
- term->which = Z_Term_general;
- term->u.general = term_octet;
- term_octet->len = term_octet->size = strlen (p->u.t.term);
- term_octet->buf = (unsigned char *)odr_malloc (o, term_octet->len+1);
- strcpy ((char*) term_octet->buf, p->u.t.term);
- return zapt;
-}
-
-static Z_Operand *ccl_rpn_simple (ODR o, struct ccl_rpn_node *p)
-{
- Z_Operand *zo;
-
- zo = (Z_Operand *)odr_malloc (o, sizeof(*zo));
-
- switch (p->kind)
- {
- case CCL_RPN_TERM:
- zo->which = Z_Operand_APT;
- zo->u.attributesPlusTerm = ccl_rpn_term (o, p);
- break;
- case CCL_RPN_SET:
- zo->which = Z_Operand_resultSetId;
- zo->u.resultSetId = odr_strdup (o, p->u.setname);
- break;
- default:
- return 0;
- }
- return zo;
-}
-
-static Z_Complex *ccl_rpn_complex (ODR o, struct ccl_rpn_node *p)