-void rset_rewind(RSET rs);
-int rset_count(RSET rs); /* more parameters? */
-int rset_read(RSET rs, void *buf); /* change parameters */
-int rset_write(RSET rs, void *buf); /* change parameters */
+
+RSET rset_dup (RSET rs);
+
+/* void rset_rewind(RSET rs); */
+#define rset_rewind(rs, rfd) (*(rs)->control->f_rewind)((rfd))
+
+/* int rset_forward(RSET rs, void *buf, void *untilbuf); */
+#define rset_forward(rs, fd, buf, cmpfunc, untilbuf) \
+ (*(rs)->control->f_forward)((rs), (fd), (buf), (cmpfunc), (untilbuf))
+
+/* int rset_pos(RSET rs, RSFD fd, double *current, double *total); */
+#define rset_pos(rs,fd,cur,tot) \
+ (*(rs)->control->f_pos)( (fd),(cur),(tot))
+
+/* int rset_read(RSET rs, void *buf); */
+#define rset_read(rs, fd, buf) (*(rs)->control->f_read)((fd), (buf))
+
+/* int rset_write(RSET rs, const void *buf); */
+#define rset_write(rs, fd, buf) (*(rs)->control->f_write)((fd), (buf))
+
+/* int rset_type (RSET) */
+#define rset_type(rs) ((rs)->control->desc)
+
+
+#ifdef __cplusplus
+}
+#endif