12489Sdlw /* 2*23070Skre * Copyright (c) 1980 Regents of the University of California. 3*23070Skre * All rights reserved. The Berkeley software License Agreement 4*23070Skre * specifies the terms and conditions for redistribution. 52489Sdlw * 6*23070Skre * @(#)douio.c 5.1 06/07/85 7*23070Skre */ 8*23070Skre 9*23070Skre /* 102489Sdlw * unformatted external i/o 112489Sdlw */ 122489Sdlw 132489Sdlw #include "fio.h" 142489Sdlw 1520984Slibs LOCAL char *eor = "eor/uio"; 1620984Slibs LOCAL char *uio = "uio"; 172489Sdlw 1820984Slibs LOCAL 192489Sdlw do_us(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* sequential */ 202489Sdlw { 212489Sdlw if(reading) 222489Sdlw { 232489Sdlw recpos += *number * len; 2419918Slibs if (recpos > reclen) { 2519918Slibs recpos -= *number * len; 2619918Slibs e_rsue(); /* in case tries another read */ 272587Sdlw err(errflag,F_EREREC,eor); 2819918Slibs } 292489Sdlw 302489Sdlw if (fread(ptr,(int)len,(int)(*number),cf) != *number) 312489Sdlw return(due_err(uio)); 322489Sdlw } 332489Sdlw else 342489Sdlw { 352489Sdlw reclen += *number * len; 362489Sdlw fwrite(ptr,(int)len,(int)(*number),cf); 372489Sdlw } 382489Sdlw return(OK); 392489Sdlw } 402489Sdlw 412489Sdlw do_uio(number,ptr,len) ftnint *number; ftnlen len; char *ptr; 422489Sdlw { 432489Sdlw if(sequential) 442489Sdlw return(do_us(number,ptr,len)); 452489Sdlw else 462489Sdlw return(do_ud(number,ptr,len)); 472489Sdlw } 482489Sdlw 4920984Slibs LOCAL 502489Sdlw do_ud(number,ptr,len) ftnint *number; ftnlen len; char *ptr; /* direct */ 512489Sdlw { 522489Sdlw recpos += *number * len; 532489Sdlw if(recpos > curunit->url && curunit->url!=1) 542587Sdlw err(errflag,F_EREREC,eor); 552489Sdlw if(reading) 562489Sdlw { 572489Sdlw if (fread(ptr, (int)len, (int)(*number), cf) != *number) 582489Sdlw return(due_err(uio)); 592489Sdlw } 602489Sdlw else 612489Sdlw fwrite(ptr,(int)len,(int)(*number),cf); 622489Sdlw return(OK); 632489Sdlw } 642489Sdlw 652489Sdlw due_err(s) char *s; 662489Sdlw { 672489Sdlw if(feof(cf)) 682489Sdlw err(endflag,EOF,s) 692489Sdlw else 702489Sdlw { clearerr(cf); 712489Sdlw err(errflag,errno,s) 722489Sdlw } 732489Sdlw } 74