+ yaz_log (loglevel, "%*.0s term (null)", depth, "");
+ break;
+ default:
+ yaz_log (loglevel, "%*.0s term (not general)", depth, "");
+ }
+ zlog_attributes (zapt, depth+2, ast, loglevel);
+ }
+ else if (zs->u.simple->which == Z_Operand_resultSetId)
+ {
+ yaz_log (loglevel, "%*.0s set '%s'", depth, "",
+ zs->u.simple->u.resultSetId);
+ }
+ else
+ yaz_log (loglevel, "%*.0s unknown simple structure", depth, "");
+ }
+ else
+ yaz_log (loglevel, "%*.0s unknown structure", depth, "");
+}
+
+static void wrbuf_apt(WRBUF b, Z_AttributesPlusTerm *zapt)
+{
+ int num_attributes = zapt->attributes->num_attributes;
+ int i;
+ for (i = 0; i<num_attributes; i++)
+ wrbuf_attr(b,zapt->attributes->attributes[i]);
+
+ switch (zapt->term->which)
+ {
+ case Z_Term_general:
+ wrbuf_term(b, (const char *)zapt->term->u.general->buf,
+ zapt->term->u.general->len);
+ break;
+ case Z_Term_characterString:
+ wrbuf_printf(b, "@term string ");
+ wrbuf_term (b, zapt->term->u.characterString,
+ strlen(zapt->term->u.characterString));
+ break;
+ case Z_Term_numeric:
+ wrbuf_printf(b, "@term numeric %d ", *zapt->term->u.numeric);
+ break;
+ case Z_Term_null:
+ wrbuf_printf(b, "@term null x");
+ break;
+ default:
+ wrbuf_printf(b, "@term null unknown%d ", zapt->term->which);
+ }
+}
+
+static void wrbuf_structure (WRBUF b, Z_RPNStructure *zs, enum oid_value ast)
+{
+ if (zs->which == Z_RPNStructure_complex)
+ {
+ Z_Operator *op = zs->u.complex->roperator;
+ wrbuf_printf(b, "@%s ", complex_op_name(op) );
+ if (op->which== Z_Operator_prox)
+ {
+ if (!op->u.prox->exclusion)
+ wrbuf_putc(b, 'n');
+ else if (*op->u.prox->exclusion)
+ wrbuf_putc(b, '1');
+ else
+ wrbuf_putc(b, '0');
+
+ wrbuf_printf(b, " %d %d %d ", *op->u.prox->distance,
+ *op->u.prox->ordered,
+ *op->u.prox->relationType);
+
+ switch(op->u.prox->which)
+ {
+ case Z_ProximityOperator_known:
+ wrbuf_putc(b, 'k');
+ break;
+ case Z_ProximityOperator_private:
+ wrbuf_putc(b, 'p');