12489Sdlw /* 2*19918Slibs char id_douio[] = "@(#)douio.c 1.3"; 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; 17*19918Slibs if (recpos > reclen) { 18*19918Slibs recpos -= *number * len; 19*19918Slibs e_rsue(); /* in case tries another read */ 202587Sdlw err(errflag,F_EREREC,eor); 21*19918Slibs } 222489Sdlw 232489Sdlw if (fread(ptr,(int)len,(int)(*number),cf) != *number) 242489Sdlw return(due_err(uio)); 252489Sdlw } 262489Sdlw else 272489Sdlw { 282489Sdlw reclen += *number * len; 292489Sdlw fwrite(ptr,(int)len,(int)(*number),cf); 302489Sdlw } 312489Sdlw return(OK); 322489Sdlw } 332489Sdlw 342489Sdlw do_uio(number,ptr,len) ftnint *number; ftnlen len; char *ptr; 352489Sdlw { 362489Sdlw if(sequential) 372489Sdlw return(do_us(number,ptr,len)); 382489Sdlw else 392489Sdlw return(do_ud(number,ptr,len)); 402489Sdlw } 412489Sdlw 422489Sdlw do_ud(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* direct */ 432489Sdlw { 442489Sdlw recpos += *number * len; 452489Sdlw if(recpos > curunit->url && curunit->url!=1) 462587Sdlw err(errflag,F_EREREC,eor); 472489Sdlw if(reading) 482489Sdlw { 492489Sdlw if (fread(ptr, (int)len, (int)(*number), cf) != *number) 502489Sdlw return(due_err(uio)); 512489Sdlw } 522489Sdlw else 532489Sdlw fwrite(ptr,(int)len,(int)(*number),cf); 542489Sdlw return(OK); 552489Sdlw } 562489Sdlw 572489Sdlw due_err(s) char *s; 582489Sdlw { 592489Sdlw if(feof(cf)) 602489Sdlw err(endflag,EOF,s) 612489Sdlw else 622489Sdlw { clearerr(cf); 632489Sdlw err(errflag,errno,s) 642489Sdlw } 652489Sdlw } 66