1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: *
6: * @(#)backspace.c 5.2 7/30/85
7: */
8:
9: /*
10: * Backspace records
11: */
12:
13: #include "fio.h"
14:
15: static char bksp[] = "backspace";
16: char last_char();
17:
18: f_back(a)
19: alist *a;
20: { unit *b;
21: int n,i;
22: long x,y;
23:
24: lfname = NULL;
25: elist = NO;
26: external = YES;
27: errflag = a->aerr;
28: lunit = a->aunit;
29: if (not_legal(lunit))
30: err(errflag, F_ERUNIT, bksp)
31: b= &units[lunit];
32: if(!b->ufd) return(OK);
33: lfname = b->ufnm;
34: if(b->uend)
35: { b->uend = NO;
36: clearerr(b->ufd);
37: return(OK);
38: }
39: if((x = ftell(b->ufd)) == 0)
40: return(OK);
41: if(!b->useek)
42: err(errflag, F_ERNOBKSP, bksp)
43: if(b->uwrt && (n = t_runc(b, errflag, bksp))) /* sets 'reading' */
44: return(n);
45: if(b->url) /* direct access, purely academic */
46: { y = x%(long)b->url;
47: x -= y?y:b->url;
48: fseek(b->ufd,x,0);
49: return(OK);
50: }
51: if(!b->ufmt) /* unformatted sequential */
52: { fseek(b->ufd,-(long)sizeof(int),1);
53: fread((char *)&n,sizeof(int),1,b->ufd);
54: fseek(b->ufd,-(long)n-2*sizeof(int),1);
55: return(OK);
56: }
57: if(x == 1) /* formatted sequential */
58: { rewind(b->ufd);
59: return(OK);
60: }
61: while (last_char(b->ufd) != '\n') /* slow but simple */
62: ;
63: return(OK);
64: }
Defined functions
Defined variables
bksp
defined in line
15; used 3 times