+/** \brief Search using PQF Query String
+ \param zh session handle
+ \param pqf_query query
+ \param setname name of resultset
+ \param hits of hits is returned
+*/
+YAZ_EXPORT
+ZEBRA_RES zebra_search_PQF(ZebraHandle zh, const char *pqf_query,
+ const char *setname, zint *hits);
+
+/** \brief Search using RPN Query structure (from ASN.1)
+ \param zh session handle
+ \param o ODR handle
+ \param query RPN query using YAZ structure
+ \param setname name of resultset
+ \param hits number of hits is returned
+ \param estimated_hit_count whether hit count is an estimate
+ \param partial_resultset whether result is only partially evaluated
+*/
+YAZ_EXPORT
+ZEBRA_RES zebra_search_RPN_x(ZebraHandle zh, ODR o, Z_RPNQuery *query,
+ const char *setname, zint *hits,
+ int *estimated_hit_count,
+ int *partial_resultset);
+
+
+/** \brief Search using RPN Query structure (from ASN.1)
+ \param zh session handle
+ \param o ODR handle
+ \param query RPN query using YAZ structure
+ \param setname name of resultset
+ \param hits number of hits is returned
+*/
+YAZ_EXPORT
+ZEBRA_RES zebra_search_RPN(ZebraHandle zh, ODR o, Z_RPNQuery *query,
+ const char *setname, zint *hits);
+
+/** \brief Retrieve records from result set (after search)
+ \param zh session handle
+ \param stream allocate records returned using this ODR
+ \param setname name of result set to retrieve records from
+ \param comp Z39.50 record composition
+ \param input_format transfer syntax (OID)
+ \param num_recs number of records to retrieve
+ \param recs store records in this structure (size is num_recs)
+*/
+YAZ_EXPORT
+ZEBRA_RES zebra_records_retrieve(ZebraHandle zh, ODR stream,
+ const char *setname,
+ Z_RecordComposition *comp,
+ const Odr_oid *input_format,
+ int num_recs,
+ ZebraRetrievalRecord *recs);
+/** \brief Deletes one or more resultsets
+ \param zh session handle
+ \param function Z_DeleteResultSetRequest_{list,all}
+ \param num_setnames number of result sets
+ \param setnames result set names
+ \param statuses status result
+*/
+YAZ_EXPORT
+int zebra_deleteResultSet(ZebraHandle zh, int function,
+ int num_setnames, char **setnames,
+ int *statuses);
+
+
+/** \brief returns number of term info terms assocaited with result set
+ \param zh session handle
+ \param setname result set name
+ \param num_terms number of terms returned in this integer
+
+ This function is used in conjunction with zebra_result_set_term_info.
+ If operation was successful, ZEBRA_OK is returned; otherwise
+ ZEBRA_FAIL is returned (typically non-existing setname)
+*/
+YAZ_EXPORT
+ZEBRA_RES zebra_result_set_term_no(ZebraHandle zh, const char *setname,
+ int *num_terms);
+
+/** \brief returns information about a term assocated with a result set
+ \param zh session handle
+ \param setname result set name
+ \param no the term we want to know about (0=first, 1=second,..)
+ \param count the number of occurrences of this term, aka hits (output)
+ \param approx about hits: 0=exact,1=approx (output)
+ \param termbuf buffer for term string (intput, output)
+ \param termlen size of termbuf (input=max, output=actual length)
+ \param term_ref_id if non-NULL *term_ref_id holds term reference
+
+ Returns information about one search term associated with result set.
+ Use zebra_result_set_term_no to read total number of terms associated
+ with result set. If this function can not return information,
+ due to no out of range or bad result set name, ZEBRA_FAIL is
+ returned.
+ The passed termbuf must be able to hold at least *termlen characters.
+ Upon completion, *termlen holds actual length of search term.
+*/
+YAZ_EXPORT
+ZEBRA_RES zebra_result_set_term_info(ZebraHandle zh, const char *setname,
+ int no, zint *count, int *approx,
+ char *termbuf, size_t *termlen,
+ const char **term_ref_id);
+
+
+/** \brief performs Scan (Z39.50 style)
+ \param zh session handle
+ \param stream ODR handle for result
+ \param zapt Attribute plus Term (start term)
+ \param attributeset Attributeset for Attribute plus Term
+ \param position input/output position
+ \param num_entries number of terms requested / returned
+ \param entries list of resulting terms (ODR allocated)
+ \param is_partial upon return 1=partial, 0=complete
+ \param setname limit scan by this set (NULL means no limit)
+*/
+YAZ_EXPORT ZEBRA_RES zebra_scan(ZebraHandle zh, ODR stream,
+ Z_AttributesPlusTerm *zapt,
+ const Odr_oid *attributeset,
+ int *position, int *num_entries,
+ ZebraScanEntry **entries,
+ int *is_partial,
+ const char *setname);
+
+/** \brief performs Scan (taking PQF string)
+ \param zh session handle
+ \param stream ODR handle for result
+ \param query PQF scan query
+ \param position input/output position
+ \param num_entries number of terms requested / returned
+ \param entries list of resulting terms (ODR allocated)
+ \param is_partial upon return 1=partial, 0=complete
+ \param setname limit scan by this set (NULL means no limit)
+*/
+YAZ_EXPORT
+ZEBRA_RES zebra_scan_PQF(ZebraHandle zh, ODR stream, const char *query,
+ int *position, int *num_entries,
+ ZebraScanEntry **entries,
+ int *is_partial, const char *setname);
+
+/** \brief authenticate user. Returns 0 if OK, != 0 on failure
+ \param zh session handle
+ \param user user name
+ \param pass password
+*/
+YAZ_EXPORT
+ZEBRA_RES zebra_auth(ZebraHandle zh, const char *user, const char *pass);
+
+/** \brief Normalize zebra term for register (subject to change!)
+ \param zh session handle
+ \param reg_id register ID, 'w', 'p',..
+ \param input_str input string buffer
+ \param input_len input string length
+ \param output_str output string buffer
+ \param output_len output string length
+*/
+YAZ_EXPORT
+int zebra_string_norm(ZebraHandle zh, unsigned reg_id, const char *input_str,
+ int input_len, char *output_str, int output_len);