12489Sdlw /* 2*2587Sdlw char id_douio[] = "@(#)douio.c 1.2"; 32489Sdlw * 42489Sdlw * unformatted external i/o 52489Sdlw */ 62489Sdlw 72489Sdlw #include "fio.h" 82489Sdlw 92489Sdlw char *eor = "eor/uio"; 102489Sdlw char *uio = "uio"; 112489Sdlw 122489Sdlw do_us(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* sequential */ 132489Sdlw { 142489Sdlw if(reading) 152489Sdlw { 162489Sdlw recpos += *number * len; 172489Sdlw if (recpos > reclen) 18*2587Sdlw err(errflag,F_EREREC,eor); 192489Sdlw 202489Sdlw if (fread(ptr,(int)len,(int)(*number),cf) != *number) 212489Sdlw return(due_err(uio)); 222489Sdlw } 232489Sdlw else 242489Sdlw { 252489Sdlw reclen += *number * len; 262489Sdlw fwrite(ptr,(int)len,(int)(*number),cf); 272489Sdlw } 282489Sdlw return(OK); 292489Sdlw } 302489Sdlw 312489Sdlw do_uio(number,ptr,len) ftnint *number; ftnlen len; char *ptr; 322489Sdlw { 332489Sdlw if(sequential) 342489Sdlw return(do_us(number,ptr,len)); 352489Sdlw else 362489Sdlw return(do_ud(number,ptr,len)); 372489Sdlw } 382489Sdlw 392489Sdlw do_ud(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* direct */ 402489Sdlw { 412489Sdlw recpos += *number * len; 422489Sdlw if(recpos > curunit->url && curunit->url!=1) 43*2587Sdlw err(errflag,F_EREREC,eor); 442489Sdlw if(reading) 452489Sdlw { 462489Sdlw if (fread(ptr, (int)len, (int)(*number), cf) != *number) 472489Sdlw return(due_err(uio)); 482489Sdlw } 492489Sdlw else 502489Sdlw fwrite(ptr,(int)len,(int)(*number),cf); 512489Sdlw return(OK); 522489Sdlw } 532489Sdlw 542489Sdlw due_err(s) char *s; 552489Sdlw { 562489Sdlw if(feof(cf)) 572489Sdlw err(endflag,EOF,s) 582489Sdlw else 592489Sdlw { clearerr(cf); 602489Sdlw err(errflag,errno,s) 612489Sdlw } 622489Sdlw } 63