+RSET rset_create(const struct rset_control *sel, void *parms)
+{
+ RSET rnew;
+ int i;
+
+ logf (LOG_DEBUG, "rs_create(%s)", sel->desc);
+ rnew = (RSET) xmalloc(sizeof(*rnew));
+ rnew->control = sel;
+ rnew->flags = 0;
+ rnew->count = 1;
+ rnew->rset_terms = NULL;
+ rnew->no_rset_terms = 0;
+ rnew->buf = (*sel->f_create)(rnew, sel, parms);
+ logf (LOG_DEBUG, "no_rset_terms: %d", rnew->no_rset_terms);
+ for (i = 0; i<rnew->no_rset_terms; i++)
+ logf (LOG_DEBUG, " %s", rnew->rset_terms[i]->name);
+ return rnew;
+}
+
+void rset_delete (RSET rs)
+{
+ (rs->count)--;
+ if (!rs->count)
+ {
+ (*rs->control->f_delete)(rs);
+ xfree(rs);
+ }
+}
+
+RSET rset_dup (RSET rs)
+{
+ (rs->count)++;
+ return rs;
+}
+
+RSET_TERM *rset_terms(RSET rs, int *no)