BSD 4 development
[unix-history] / usr / src / lib / libI77uc / due.c
CommitLineData
55162a5a
BJ
1/*
2 * direct unformatted external i/o
3 */
4
5#include "fio.h"
6
7char *due = "due";
8
9s_rdue(a) cilist *a;
10{
11 int n;
12 reading = YES;
13 if(n=c_due(a,READ)) return(n);
14 if(curunit->uwrt) nowreading(curunit);
15 return(OK);
16}
17
18s_wdue(a) cilist *a;
19{
20 int n;
21 reading = NO;
22 if(n=c_due(a,WRITE)) return(n);
23 curunit->uend = NO;
24 if(!curunit->uwrt) nowwriting(curunit);
25 return(OK);
26}
27
28c_due(a,flag) cilist *a;
29{ int n;
30 lfname = NULL;
31 elist = NO;
32 sequential=formatted=NO;
33 recpos = reclen = 0;
34 external = YES;
35 errflag = a->cierr;
36 endflag = a->ciend;
37 lunit = a->ciunit;
38 if(not_legal(lunit)) err(errflag,101,due);
39 curunit = &units[lunit];
40 if (!curunit->ufd && (n=fk_open(flag,DIR,UNF,(ftnint)lunit)) )
41 err(errflag,n,due)
42 cf = curunit->ufd;
43 elist = YES;
44 lfname = curunit->ufnm;
45 if (curunit->ufmt) err(errflag,103,due)
46 if (!curunit->useek || !curunit->url) err(errflag,104,due)
47 if (fseek(cf, (long)((a->cirec-1)*curunit->url), 0) < 0)
48 return(due_err(due));
49 else
50 return(OK);
51}
52
53e_rdue()
54{
55 return(OK);
56}
57
58e_wdue()
59{/* This is to ensure full records. It is really necessary. */
60 int n = 0;
61 if (curunit->url!=1 && recpos!=curunit->url &&
62 (fseek(cf, (long)(curunit->url-recpos-1), 1) < 0
63 || fwrite(&n, 1, 1, cf) != 1))
64 return(due_err(due));
65 return(OK);
66}