|
|
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.