- rset_between_parms *between_parms = (rset_between_parms *) parms;
- struct rset_between_info *info;
-
- info = (struct rset_between_info *) xmalloc (sizeof(*info));
- info->key_size = between_parms->key_size;
- info->rset_l = between_parms->rset_l;
- info->rset_m = between_parms->rset_m;
- info->rset_r = between_parms->rset_r;
- info->rset_attr = between_parms->rset_attr;
- if (rset_is_volatile(info->rset_l) ||
- rset_is_volatile(info->rset_m) ||
- rset_is_volatile(info->rset_r))
- ct->flags |= RSET_FLAG_VOLATILE;
- info->cmp = between_parms->cmp;
- info->printer = between_parms->printer;
- info->rfd_list = NULL;
-
- info->term_index_s = info->rset_l->no_rset_terms;
- if (info->rset_m)
- {
- ct->no_rset_terms =
- info->rset_l->no_rset_terms +
- info->rset_m->no_rset_terms +
- info->rset_r->no_rset_terms;
- ct->rset_terms = (RSET_TERM *)
- xmalloc (sizeof (*ct->rset_terms) * ct->no_rset_terms);
- memcpy (ct->rset_terms, info->rset_l->rset_terms,
- info->rset_l->no_rset_terms * sizeof(*ct->rset_terms));
- memcpy (ct->rset_terms + info->rset_l->no_rset_terms,
- info->rset_m->rset_terms,
- info->rset_m->no_rset_terms * sizeof(*ct->rset_terms));
- memcpy (ct->rset_terms + info->rset_l->no_rset_terms +
- info->rset_m->no_rset_terms,
- info->rset_r->rset_terms,
- info->rset_r->no_rset_terms * sizeof(*ct->rset_terms));
- }
- else
- {
- ct->no_rset_terms =
- info->rset_l->no_rset_terms +
- info->rset_r->no_rset_terms;
- ct->rset_terms = (RSET_TERM *)
- xmalloc (sizeof (*ct->rset_terms) * ct->no_rset_terms);
- memcpy (ct->rset_terms, info->rset_l->rset_terms,
- info->rset_l->no_rset_terms * sizeof(*ct->rset_terms));
- memcpy (ct->rset_terms + info->rset_l->no_rset_terms,
- info->rset_r->rset_terms,
- info->rset_r->no_rset_terms * sizeof(*ct->rset_terms));
- }
+ RSET rnew=rset_create_base(&control, nmem, kcontrol, scope,0);
+ struct rset_between_info *info=
+ (struct rset_between_info *) nmem_malloc(rnew->nmem,sizeof(*info));
+ info->rset_l = rset_l;
+ info->rset_m = rset_m;
+ info->rset_r = rset_r;
+ info->rset_attr = rset_attr;
+ rnew->priv=info;
+ return rnew;
+}
+
+
+static void r_delete_between (RSET ct)
+{
+ struct rset_between_info *info = (struct rset_between_info *) ct->priv;