|
|
1.1 ! root 1: /* ! 2: char id_backspace[] = "@(#)backspace.c 1.2"; ! 3: * ! 4: * Backspace records ! 5: */ ! 6: ! 7: #include "fio.h" ! 8: ! 9: char *bksp = "backspace"; ! 10: char last_char(); ! 11: ! 12: f_back(a) alist *a; ! 13: { unit *b; ! 14: int n,i; ! 15: long x,y; ! 16: lfname = NULL; ! 17: elist = NO; ! 18: external = YES; ! 19: errflag = a->aerr; ! 20: lunit = a->aunit; ! 21: if (not_legal(lunit)) err(errflag,F_ERUNIT,bksp) ! 22: b= &units[lunit]; ! 23: if(!b->ufd && (n=fk_open(READ,SEQ,FMT,(ftnint)lunit)) ) ! 24: err(errflag,n,bksp) ! 25: lfname = b->ufnm; ! 26: if(b->uend) ! 27: { b->uend = NO; ! 28: return(OK); ! 29: } ! 30: if((x=ftell(b->ufd))==0) return(OK); ! 31: if(!b->useek) err(errflag,F_ERNOBKSP,bksp) ! 32: if(b->uwrt) t_runc(b,errflag); ! 33: if(b->url) /* direct access, purely academic */ ! 34: { y = x%(long)b->url; ! 35: x -= y?y:b->url; ! 36: fseek(b->ufd,x,0); ! 37: return(OK); ! 38: } ! 39: if(!b->ufmt) /* unformatted sequential */ ! 40: { fseek(b->ufd,-(long)sizeof(int),1); ! 41: fread((char *)&n,sizeof(int),1,b->ufd); ! 42: fseek(b->ufd,-(long)n-2*sizeof(int),1); ! 43: return(OK); ! 44: } ! 45: if(x==1) /* formatted sequential */ ! 46: { rewind(b->ufd); ! 47: return(OK); ! 48: } ! 49: while(last_char(b->ufd)!='\n'); /* slow but simple */ ! 50: return(OK); ! 51: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.