12490Sdlw /* 2*20984Slibs char id_due[] = "@(#)due.c 1.4"; 32490Sdlw * 42490Sdlw * direct unformatted external i/o 52490Sdlw */ 62490Sdlw 72490Sdlw #include "fio.h" 82490Sdlw 9*20984Slibs LOCAL char rdue[] = "read due"; 10*20984Slibs LOCAL char wdue[] = "write due"; 112490Sdlw 122490Sdlw s_rdue(a) cilist *a; 132490Sdlw { 142490Sdlw int n; 152490Sdlw reading = YES; 162490Sdlw if(n=c_due(a,READ)) return(n); 174114Sdlw if(curunit->uwrt && ! nowreading(curunit)) err(errflag, errno, rdue); 182490Sdlw return(OK); 192490Sdlw } 202490Sdlw 212490Sdlw s_wdue(a) cilist *a; 222490Sdlw { 232490Sdlw int n; 242490Sdlw reading = NO; 252490Sdlw if(n=c_due(a,WRITE)) return(n); 262490Sdlw curunit->uend = NO; 274114Sdlw if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wdue) 282490Sdlw return(OK); 292490Sdlw } 302490Sdlw 31*20984Slibs LOCAL 322490Sdlw c_due(a,flag) cilist *a; 332490Sdlw { int n; 342490Sdlw lfname = NULL; 352490Sdlw elist = NO; 362490Sdlw sequential=formatted=NO; 372490Sdlw recpos = reclen = 0; 382490Sdlw external = YES; 392490Sdlw errflag = a->cierr; 402490Sdlw endflag = a->ciend; 412490Sdlw lunit = a->ciunit; 424114Sdlw if(not_legal(lunit)) err(errflag,F_ERUNIT,rdue+5); 432490Sdlw curunit = &units[lunit]; 442490Sdlw if (!curunit->ufd && (n=fk_open(flag,DIR,UNF,(ftnint)lunit)) ) 454114Sdlw err(errflag,n,rdue+5) 462490Sdlw cf = curunit->ufd; 472490Sdlw elist = YES; 482490Sdlw lfname = curunit->ufnm; 494114Sdlw if (curunit->ufmt) err(errflag,F_ERNOUIO,rdue+5) 504114Sdlw if (!curunit->useek || !curunit->url) err(errflag,F_ERNODIO,rdue+5) 512490Sdlw if (fseek(cf, (long)((a->cirec-1)*curunit->url), 0) < 0) 524114Sdlw return(due_err(rdue+5)); 532490Sdlw else 542490Sdlw return(OK); 552490Sdlw } 562490Sdlw 572490Sdlw e_rdue() 582490Sdlw { 592490Sdlw return(OK); 602490Sdlw } 612490Sdlw 622490Sdlw e_wdue() 632490Sdlw {/* This is to ensure full records. It is really necessary. */ 642490Sdlw int n = 0; 652490Sdlw if (curunit->url!=1 && recpos!=curunit->url && 662490Sdlw (fseek(cf, (long)(curunit->url-recpos-1), 1) < 0 672490Sdlw || fwrite(&n, 1, 1, cf) != 1)) 684114Sdlw return(due_err(rdue+5)); 692490Sdlw return(OK); 702490Sdlw } 71