Commit | Line | Data |
---|---|---|
26c8d007 | 1 | /* |
161423a6 RE |
2 | * Copyright (c) 1980 Regents of the University of California. |
3 | * All rights reserved. The Berkeley software License Agreement | |
4 | * specifies the terms and conditions for redistribution. | |
26c8d007 | 5 | * |
161423a6 RE |
6 | * @(#)douio.c 5.1 %G% |
7 | */ | |
8 | ||
9 | /* | |
26c8d007 DW |
10 | * unformatted external i/o |
11 | */ | |
12 | ||
13 | #include "fio.h" | |
14 | ||
5e52dbf7 DL |
15 | LOCAL char *eor = "eor/uio"; |
16 | LOCAL char *uio = "uio"; | |
26c8d007 | 17 | |
5e52dbf7 | 18 | LOCAL |
26c8d007 DW |
19 | do_us(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* sequential */ |
20 | { | |
21 | if(reading) | |
22 | { | |
23 | recpos += *number * len; | |
a7aa6d87 DL |
24 | if (recpos > reclen) { |
25 | recpos -= *number * len; | |
26 | e_rsue(); /* in case tries another read */ | |
43666f58 | 27 | err(errflag,F_EREREC,eor); |
a7aa6d87 | 28 | } |
26c8d007 DW |
29 | |
30 | if (fread(ptr,(int)len,(int)(*number),cf) != *number) | |
31 | return(due_err(uio)); | |
32 | } | |
33 | else | |
34 | { | |
35 | reclen += *number * len; | |
36 | fwrite(ptr,(int)len,(int)(*number),cf); | |
37 | } | |
38 | return(OK); | |
39 | } | |
40 | ||
41 | do_uio(number,ptr,len) ftnint *number; ftnlen len; char *ptr; | |
42 | { | |
43 | if(sequential) | |
44 | return(do_us(number,ptr,len)); | |
45 | else | |
46 | return(do_ud(number,ptr,len)); | |
47 | } | |
48 | ||
5e52dbf7 | 49 | LOCAL |
26c8d007 DW |
50 | do_ud(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* direct */ |
51 | { | |
52 | recpos += *number * len; | |
53 | if(recpos > curunit->url && curunit->url!=1) | |
43666f58 | 54 | err(errflag,F_EREREC,eor); |
26c8d007 DW |
55 | if(reading) |
56 | { | |
57 | if (fread(ptr, (int)len, (int)(*number), cf) != *number) | |
58 | return(due_err(uio)); | |
59 | } | |
60 | else | |
61 | fwrite(ptr,(int)len,(int)(*number),cf); | |
62 | return(OK); | |
63 | } | |
64 | ||
65 | due_err(s) char *s; | |
66 | { | |
67 | if(feof(cf)) | |
68 | err(endflag,EOF,s) | |
69 | else | |
70 | { clearerr(cf); | |
71 | err(errflag,errno,s) | |
72 | } | |
73 | } |