Must distinguish between "ambiguous" and "unknown" commands.
[unix-history] / usr / src / usr.bin / f77 / libI77 / douio.c
CommitLineData
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
15LOCAL char *eor = "eor/uio";
16LOCAL char *uio = "uio";
26c8d007 17
5e52dbf7 18LOCAL
26c8d007
DW
19do_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
41do_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 49LOCAL
26c8d007
DW
50do_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
65due_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}