12502Sdlw /* 2*20984Slibs char id_sue[] = "@(#)sue.c 1.4"; 32502Sdlw * 42502Sdlw * sequential unformatted external read/write routines 52502Sdlw */ 62502Sdlw 72502Sdlw #include "fio.h" 82502Sdlw 92502Sdlw extern int reclen; 10*20984Slibs LOCAL long recloc; 11*20984Slibs LOCAL char rsue[] = "read sue"; 12*20984Slibs LOCAL 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); 194116Sdlw 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); 354116Sdlw 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 43*20984Slibs LOCAL 442502Sdlw c_sue(a,flag) cilist *a; 452502Sdlw { int n; 462502Sdlw external = sequential = YES; 472502Sdlw formatted = NO; 482502Sdlw lfname = NULL; 492502Sdlw elist = NO; 502502Sdlw errflag = a->cierr; 512502Sdlw endflag = a->ciend; 522502Sdlw lunit = a->ciunit; 534116Sdlw if(not_legal(lunit)) err(errflag,F_ERUNIT,rsue+5) 542502Sdlw curunit = &units[lunit]; 552502Sdlw if(!curunit->ufd && (n=fk_open(flag,SEQ,UNF,(ftnint)lunit))) 564116Sdlw err(errflag,n,rsue+5) 572502Sdlw cf = curunit->ufd; 582502Sdlw elist = YES; 592502Sdlw lfname = curunit->ufnm; 604116Sdlw if(curunit->ufmt) err(errflag,F_ERNOUIO,rsue+5) 614116Sdlw if(curunit->url) err(errflag,F_ERNOSIO,rsue+5) 624116Sdlw if(!curunit->useek) err(errflag,F_ERSEEK,rsue+5) 632502Sdlw return(OK); 642502Sdlw } 652502Sdlw 662502Sdlw e_wsue() 672502Sdlw { long loc; 682502Sdlw fwrite(&reclen,sizeof(int),1,cf); 692502Sdlw loc=ftell(cf); 702502Sdlw fseek(cf,recloc,0); 712502Sdlw fwrite(&reclen,sizeof(int),1,cf); 722502Sdlw fseek(cf,loc,0); 732502Sdlw return(OK); 742502Sdlw } 752502Sdlw 762502Sdlw e_rsue() 772502Sdlw { 782502Sdlw fseek(cf,(long)(reclen-recpos+sizeof(int)),1); 792502Sdlw return(OK); 802502Sdlw } 81