Commit | Line | Data |
---|---|---|
26c8d007 | 1 | /* |
43666f58 | 2 | char id_douio[] = "@(#)douio.c 1.2"; |
26c8d007 DW |
3 | * |
4 | * unformatted external i/o | |
5 | */ | |
6 | ||
7 | #include "fio.h" | |
8 | ||
9 | char *eor = "eor/uio"; | |
10 | char *uio = "uio"; | |
11 | ||
12 | do_us(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* sequential */ | |
13 | { | |
14 | if(reading) | |
15 | { | |
16 | recpos += *number * len; | |
17 | if (recpos > reclen) | |
43666f58 | 18 | err(errflag,F_EREREC,eor); |
26c8d007 DW |
19 | |
20 | if (fread(ptr,(int)len,(int)(*number),cf) != *number) | |
21 | return(due_err(uio)); | |
22 | } | |
23 | else | |
24 | { | |
25 | reclen += *number * len; | |
26 | fwrite(ptr,(int)len,(int)(*number),cf); | |
27 | } | |
28 | return(OK); | |
29 | } | |
30 | ||
31 | do_uio(number,ptr,len) ftnint *number; ftnlen len; char *ptr; | |
32 | { | |
33 | if(sequential) | |
34 | return(do_us(number,ptr,len)); | |
35 | else | |
36 | return(do_ud(number,ptr,len)); | |
37 | } | |
38 | ||
39 | do_ud(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* direct */ | |
40 | { | |
41 | recpos += *number * len; | |
42 | if(recpos > curunit->url && curunit->url!=1) | |
43666f58 | 43 | err(errflag,F_EREREC,eor); |
26c8d007 DW |
44 | if(reading) |
45 | { | |
46 | if (fread(ptr, (int)len, (int)(*number), cf) != *number) | |
47 | return(due_err(uio)); | |
48 | } | |
49 | else | |
50 | fwrite(ptr,(int)len,(int)(*number),cf); | |
51 | return(OK); | |
52 | } | |
53 | ||
54 | due_err(s) char *s; | |
55 | { | |
56 | if(feof(cf)) | |
57 | err(endflag,EOF,s) | |
58 | else | |
59 | { clearerr(cf); | |
60 | err(errflag,errno,s) | |
61 | } | |
62 | } |