12502Sdlw /* 2*4116Sdlw char id_sue[] = "@(#)sue.c 1.3"; 32502Sdlw * 42502Sdlw * sequential unformatted external read/write routines 52502Sdlw */ 62502Sdlw 72502Sdlw #include "fio.h" 82502Sdlw 92502Sdlw extern int reclen; 102502Sdlw long recloc; 11*4116Sdlw char rsue[] = "read sue"; 12*4116Sdlw char wsue[] = "write sue"; 132502Sdlw 142502Sdlw s_rsue(a) cilist *a; 152502Sdlw { 162502Sdlw int n; 172502Sdlw reading = YES; 182502Sdlw if(n=c_sue(a,READ)) return(n); 19*4116Sdlw if(curunit->uwrt && ! nowreading(curunit)) err(errflag, errno, rsue) 202502Sdlw recpos = 0; 212502Sdlw if(fread(&reclen,sizeof(int),1,cf) == 1) return(OK); 222502Sdlw if(feof(cf)) 232502Sdlw { curunit->uend = YES; 242502Sdlw err(endflag, EOF, rsue) 252502Sdlw } 262502Sdlw clearerr(cf); 272502Sdlw err(errflag, errno, rsue) 282502Sdlw } 292502Sdlw 302502Sdlw s_wsue(a) cilist *a; 312502Sdlw { 322502Sdlw int n; 332502Sdlw reading = NO; 342502Sdlw if(n=c_sue(a,WRITE)) return(n); 35*4116Sdlw if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wsue) 362502Sdlw reclen = 0; 372502Sdlw recloc=ftell(cf); 382502Sdlw fseek(cf,(long)sizeof(int),1); 392502Sdlw curunit->uend = NO; 402502Sdlw return(OK); 412502Sdlw } 422502Sdlw 432502Sdlw c_sue(a,flag) cilist *a; 442502Sdlw { int n; 452502Sdlw external = sequential = YES; 462502Sdlw formatted = NO; 472502Sdlw lfname = NULL; 482502Sdlw elist = NO; 492502Sdlw errflag = a->cierr; 502502Sdlw endflag = a->ciend; 512502Sdlw lunit = a->ciunit; 52*4116Sdlw if(not_legal(lunit)) err(errflag,F_ERUNIT,rsue+5) 532502Sdlw curunit = &units[lunit]; 542502Sdlw if(!curunit->ufd && (n=fk_open(flag,SEQ,UNF,(ftnint)lunit))) 55*4116Sdlw err(errflag,n,rsue+5) 562502Sdlw cf = curunit->ufd; 572502Sdlw elist = YES; 582502Sdlw lfname = curunit->ufnm; 59*4116Sdlw if(curunit->ufmt) err(errflag,F_ERNOUIO,rsue+5) 60*4116Sdlw if(curunit->url) err(errflag,F_ERNOSIO,rsue+5) 61*4116Sdlw if(!curunit->useek) err(errflag,F_ERSEEK,rsue+5) 622502Sdlw return(OK); 632502Sdlw } 642502Sdlw 652502Sdlw e_wsue() 662502Sdlw { long loc; 672502Sdlw fwrite(&reclen,sizeof(int),1,cf); 682502Sdlw loc=ftell(cf); 692502Sdlw fseek(cf,recloc,0); 702502Sdlw fwrite(&reclen,sizeof(int),1,cf); 712502Sdlw fseek(cf,loc,0); 722502Sdlw return(OK); 732502Sdlw } 742502Sdlw 752502Sdlw e_rsue() 762502Sdlw { 772502Sdlw fseek(cf,(long)(reclen-recpos+sizeof(int)),1); 782502Sdlw return(OK); 792502Sdlw } 80