+#include "fio.h"
+s_rdue(a) cilist *a;
+{
+ int n;
+ if(n=c_due(a,READ)) return(n);
+ reading=1;
+ if(curunit->uwrt) nowreading(curunit);
+ return(0);
+}
+s_wdue(a) cilist *a;
+{
+ int n;
+ if(n=c_due(a,WRITE)) return(n);
+ reading=0;
+ if(!curunit->uwrt) nowwriting(curunit);
+ return(0);
+}
+c_due(a,flag) cilist *a;
+{
+ if(!init) f_init();
+ if(a->ciunit>=MXUNIT || a->ciunit<0)
+ err(a->cierr,101,"startio");
+ recpos=sequential=formatted=0;
+ external=1;
+ curunit = &units[a->ciunit];
+ elist=a;
+ if(curunit->ufd==NULL && fk_open(flag,DIR,UNF,a->ciunit) ) err(a->cierr,104,"due");
+ cf=curunit->ufd;
+ if(curunit->ufmt) err(a->cierr,102,"cdue")
+ if(!curunit->useek) err(a->cierr,104,"cdue")
+ if(curunit->ufd==NULL) err(a->cierr,114,"cdue")
+ fseek(cf,(long)(a->cirec-1)*curunit->url,0);
+ curunit->uend = 0;
+ return(0);
+}
+e_rdue()
+{
+ if(curunit->url==1 || recpos==curunit->url)
+ return(0);
+ fseek(cf,(long)(curunit->url-recpos),1);
+ if(ftell(cf)%curunit->url)
+ err(elist->cierr,200,"syserr");
+ return(0);
+}
+e_wdue()
+{
+ return(e_rdue());
+}