Research V7 development
[unix-history] / usr / src / libI77 / due.c
CommitLineData
8662e665
PW
1#include "fio.h"
2s_rdue(a) cilist *a;
3{
4 int n;
5 if(n=c_due(a,READ)) return(n);
6 reading=1;
7 if(curunit->uwrt) nowreading(curunit);
8 return(0);
9}
10s_wdue(a) cilist *a;
11{
12 int n;
13 if(n=c_due(a,WRITE)) return(n);
14 reading=0;
15 if(!curunit->uwrt) nowwriting(curunit);
16 return(0);
17}
18c_due(a,flag) cilist *a;
19{
20 if(!init) f_init();
21 if(a->ciunit>=MXUNIT || a->ciunit<0)
22 err(a->cierr,101,"startio");
23 recpos=sequential=formatted=0;
24 external=1;
25 curunit = &units[a->ciunit];
26 elist=a;
27 if(curunit->ufd==NULL && fk_open(flag,DIR,UNF,a->ciunit) ) err(a->cierr,104,"due");
28 cf=curunit->ufd;
29 if(curunit->ufmt) err(a->cierr,102,"cdue")
30 if(!curunit->useek) err(a->cierr,104,"cdue")
31 if(curunit->ufd==NULL) err(a->cierr,114,"cdue")
32 fseek(cf,(long)(a->cirec-1)*curunit->url,0);
33 curunit->uend = 0;
34 return(0);
35}
36e_rdue()
37{
38 if(curunit->url==1 || recpos==curunit->url)
39 return(0);
40 fseek(cf,(long)(curunit->url-recpos),1);
41 if(ftell(cf)%curunit->url)
42 err(elist->cierr,200,"syserr");
43 return(0);
44}
45e_wdue()
46{
47 return(e_rdue());
48}