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