12484Sdlw /* 2*2582Sdlw char id_backspace[] = "@(#)backspace.c 1.2"; 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; 162484Sdlw lfname = NULL; 172484Sdlw elist = NO; 182484Sdlw external = YES; 192484Sdlw errflag = a->aerr; 202484Sdlw lunit = a->aunit; 21*2582Sdlw if (not_legal(lunit)) err(errflag,F_ERUNIT,bksp) 222484Sdlw b= &units[lunit]; 232484Sdlw if(!b->ufd && (n=fk_open(READ,SEQ,FMT,(ftnint)lunit)) ) 242484Sdlw err(errflag,n,bksp) 252484Sdlw lfname = b->ufnm; 262484Sdlw if(b->uend) 272484Sdlw { b->uend = NO; 282484Sdlw return(OK); 292484Sdlw } 302484Sdlw if((x=ftell(b->ufd))==0) return(OK); 31*2582Sdlw if(!b->useek) err(errflag,F_ERNOBKSP,bksp) 322484Sdlw if(b->uwrt) t_runc(b,errflag); 332484Sdlw if(b->url) /* direct access, purely academic */ 342484Sdlw { y = x%(long)b->url; 352484Sdlw x -= y?y:b->url; 362484Sdlw fseek(b->ufd,x,0); 372484Sdlw return(OK); 382484Sdlw } 392484Sdlw if(!b->ufmt) /* unformatted sequential */ 402484Sdlw { fseek(b->ufd,-(long)sizeof(int),1); 412484Sdlw fread((char *)&n,sizeof(int),1,b->ufd); 422484Sdlw fseek(b->ufd,-(long)n-2*sizeof(int),1); 432484Sdlw return(OK); 442484Sdlw } 452484Sdlw if(x==1) /* formatted sequential */ 462484Sdlw { rewind(b->ufd); 472484Sdlw return(OK); 482484Sdlw } 492484Sdlw while(last_char(b->ufd)!='\n'); /* slow but simple */ 502484Sdlw return(OK); 512484Sdlw } 52