+int rset_default_forward(RSFD rfd, void *buf, TERMID *term,
+ const void *untilbuf)
+{
+ int more=1;
+ int cmp=rfd->rset->scope;
+ if (log_level)
+ {
+ yaz_log (log_level, "rset_default_forward starting '%s' (ct=%p rfd=%p)",
+ rfd->rset->control->desc, rfd->rset, rfd);
+ /* key_logdump(log_level, untilbuf); */
+ }
+ while ( (cmp>=rfd->rset->scope) && (more))
+ {
+ if (log_level) /* time-critical, check first */
+ yaz_log(log_level,"rset_default_forward looping m=%d c=%d",more,cmp);
+ more=rset_read(rfd, buf, term);
+ if (more)
+ cmp=(rfd->rset->keycontrol->cmp)(untilbuf,buf);
+/* if (more)
+ key_logdump(log_level,buf); */
+ }
+ if (log_level)
+ yaz_log (log_level, "rset_default_forward exiting m=%d c=%d",more,cmp);
+
+ return more;
+}
+
+/**
+ * rset_count uses rset_pos to get the total and returns that.
+ * This is ok for rsisamb/c/s, and for some other rsets, but in case of
+ * booleans etc it will give bad estimate, as nothing has been read
+ * from that rset
+ */
+zint rset_count(RSET rs)
+{
+ double cur,tot;
+ RSFD rfd=rset_open(rs,0);
+ rset_pos(rfd,&cur,&tot);
+ rset_close(rfd);
+ return (zint)(tot);
+}
+
+
+/** rset_get_no_terms is a getterms function for those that don't have any */
+void rset_get_no_terms(RSET ct, TERMID *terms, int maxterms, int *curterm)
+{
+ return;
+}
+
+/* rset_get_one_term gets that one term from an rset. Used by rsisamX */
+void rset_get_one_term(RSET ct,TERMID *terms,int maxterms,int *curterm)