1*2489Sdlw /* 2*2489Sdlw char id_douio[] = "@(#)douio.c 1.1"; 3*2489Sdlw * 4*2489Sdlw * unformatted external i/o 5*2489Sdlw */ 6*2489Sdlw 7*2489Sdlw #include "fio.h" 8*2489Sdlw 9*2489Sdlw char *eor = "eor/uio"; 10*2489Sdlw char *uio = "uio"; 11*2489Sdlw 12*2489Sdlw do_us(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* sequential */ 13*2489Sdlw { 14*2489Sdlw if(reading) 15*2489Sdlw { 16*2489Sdlw recpos += *number * len; 17*2489Sdlw if (recpos > reclen) 18*2489Sdlw err(errflag,110,eor); 19*2489Sdlw 20*2489Sdlw if (fread(ptr,(int)len,(int)(*number),cf) != *number) 21*2489Sdlw return(due_err(uio)); 22*2489Sdlw } 23*2489Sdlw else 24*2489Sdlw { 25*2489Sdlw reclen += *number * len; 26*2489Sdlw fwrite(ptr,(int)len,(int)(*number),cf); 27*2489Sdlw } 28*2489Sdlw return(OK); 29*2489Sdlw } 30*2489Sdlw 31*2489Sdlw do_uio(number,ptr,len) ftnint *number; ftnlen len; char *ptr; 32*2489Sdlw { 33*2489Sdlw if(sequential) 34*2489Sdlw return(do_us(number,ptr,len)); 35*2489Sdlw else 36*2489Sdlw return(do_ud(number,ptr,len)); 37*2489Sdlw } 38*2489Sdlw 39*2489Sdlw do_ud(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* direct */ 40*2489Sdlw { 41*2489Sdlw recpos += *number * len; 42*2489Sdlw if(recpos > curunit->url && curunit->url!=1) 43*2489Sdlw err(errflag,110,eor); 44*2489Sdlw if(reading) 45*2489Sdlw { 46*2489Sdlw if (fread(ptr, (int)len, (int)(*number), cf) != *number) 47*2489Sdlw return(due_err(uio)); 48*2489Sdlw } 49*2489Sdlw else 50*2489Sdlw fwrite(ptr,(int)len,(int)(*number),cf); 51*2489Sdlw return(OK); 52*2489Sdlw } 53*2489Sdlw 54*2489Sdlw due_err(s) char *s; 55*2489Sdlw { 56*2489Sdlw if(feof(cf)) 57*2489Sdlw err(endflag,EOF,s) 58*2489Sdlw else 59*2489Sdlw { clearerr(cf); 60*2489Sdlw err(errflag,errno,s) 61*2489Sdlw } 62*2489Sdlw } 63