1 /* 2 char id_douio[] = "@(#)douio.c 1.2"; 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) 18 err(errflag,F_EREREC,eor); 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) 43 err(errflag,F_EREREC,eor); 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 } 63