12484Sdlw /* 2*6600Sdlw char id_backspace[] = "@(#)backspace.c 1.4"; 32484Sdlw * 42484Sdlw * Backspace records 52484Sdlw */ 62484Sdlw 72484Sdlw #include "fio.h" 82484Sdlw 92484Sdlw char *bksp = "backspace"; 102484Sdlw char last_char(); 112484Sdlw 122484Sdlw f_back(a) alist *a; 132484Sdlw { unit *b; 142484Sdlw int n,i; 152484Sdlw long x,y; 164728Sdlw 172484Sdlw lfname = NULL; 182484Sdlw elist = NO; 192484Sdlw external = YES; 202484Sdlw errflag = a->aerr; 212484Sdlw lunit = a->aunit; 222582Sdlw if (not_legal(lunit)) err(errflag,F_ERUNIT,bksp) 232484Sdlw b= &units[lunit]; 242484Sdlw if(!b->ufd && (n=fk_open(READ,SEQ,FMT,(ftnint)lunit)) ) 252484Sdlw err(errflag,n,bksp) 262484Sdlw lfname = b->ufnm; 272484Sdlw if(b->uend) 282484Sdlw { b->uend = NO; 29*6600Sdlw clearerr(b->ufd); 302484Sdlw return(OK); 312484Sdlw } 322484Sdlw if((x=ftell(b->ufd))==0) return(OK); 332582Sdlw if(!b->useek) err(errflag,F_ERNOBKSP,bksp) 344728Sdlw if(b->uwrt && (n=t_runc(b,errflag))) return(n); 352484Sdlw if(b->url) /* direct access, purely academic */ 362484Sdlw { y = x%(long)b->url; 372484Sdlw x -= y?y:b->url; 382484Sdlw fseek(b->ufd,x,0); 392484Sdlw return(OK); 402484Sdlw } 412484Sdlw if(!b->ufmt) /* unformatted sequential */ 422484Sdlw { fseek(b->ufd,-(long)sizeof(int),1); 432484Sdlw fread((char *)&n,sizeof(int),1,b->ufd); 442484Sdlw fseek(b->ufd,-(long)n-2*sizeof(int),1); 452484Sdlw return(OK); 462484Sdlw } 472484Sdlw if(x==1) /* formatted sequential */ 482484Sdlw { rewind(b->ufd); 492484Sdlw return(OK); 502484Sdlw } 512484Sdlw while(last_char(b->ufd)!='\n'); /* slow but simple */ 522484Sdlw return(OK); 532484Sdlw } 54