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