|
|
1.1 ! root 1: /* ! 2: char id_due[] = "@(#)due.c 1.3"; ! 3: * ! 4: * direct unformatted external i/o ! 5: */ ! 6: ! 7: #include "fio.h" ! 8: ! 9: char rdue[] = "read due"; ! 10: char wdue[] = "write due"; ! 11: ! 12: s_rdue(a) cilist *a; ! 13: { ! 14: int n; ! 15: reading = YES; ! 16: if(n=c_due(a,READ)) return(n); ! 17: if(curunit->uwrt && ! nowreading(curunit)) err(errflag, errno, rdue); ! 18: return(OK); ! 19: } ! 20: ! 21: s_wdue(a) cilist *a; ! 22: { ! 23: int n; ! 24: reading = NO; ! 25: if(n=c_due(a,WRITE)) return(n); ! 26: curunit->uend = NO; ! 27: if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wdue) ! 28: return(OK); ! 29: } ! 30: ! 31: c_due(a,flag) cilist *a; ! 32: { int n; ! 33: lfname = NULL; ! 34: elist = NO; ! 35: sequential=formatted=NO; ! 36: recpos = reclen = 0; ! 37: external = YES; ! 38: errflag = a->cierr; ! 39: endflag = a->ciend; ! 40: lunit = a->ciunit; ! 41: if(not_legal(lunit)) err(errflag,F_ERUNIT,rdue+5); ! 42: curunit = &units[lunit]; ! 43: if (!curunit->ufd && (n=fk_open(flag,DIR,UNF,(ftnint)lunit)) ) ! 44: err(errflag,n,rdue+5) ! 45: cf = curunit->ufd; ! 46: elist = YES; ! 47: lfname = curunit->ufnm; ! 48: if (curunit->ufmt) err(errflag,F_ERNOUIO,rdue+5) ! 49: if (!curunit->useek || !curunit->url) err(errflag,F_ERNODIO,rdue+5) ! 50: if (fseek(cf, (long)((a->cirec-1)*curunit->url), 0) < 0) ! 51: return(due_err(rdue+5)); ! 52: else ! 53: return(OK); ! 54: } ! 55: ! 56: e_rdue() ! 57: { ! 58: return(OK); ! 59: } ! 60: ! 61: e_wdue() ! 62: {/* This is to ensure full records. It is really necessary. */ ! 63: int n = 0; ! 64: if (curunit->url!=1 && recpos!=curunit->url && ! 65: (fseek(cf, (long)(curunit->url-recpos-1), 1) < 0 ! 66: || fwrite(&n, 1, 1, cf) != 1)) ! 67: return(due_err(rdue+5)); ! 68: return(OK); ! 69: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.