1 /* 2 char id_sue[] = "@(#)sue.c 1.4"; 3 * 4 * sequential unformatted external read/write routines 5 */ 6 7 #include "fio.h" 8 9 extern int reclen; 10 LOCAL long recloc; 11 LOCAL char rsue[] = "read sue"; 12 LOCAL char wsue[] = "write sue"; 13 14 s_rsue(a) cilist *a; 15 { 16 int n; 17 reading = YES; 18 if(n=c_sue(a,READ)) return(n); 19 if(curunit->uwrt && ! nowreading(curunit)) err(errflag, errno, rsue) 20 recpos = 0; 21 if(fread(&reclen,sizeof(int),1,cf) == 1) return(OK); 22 if(feof(cf)) 23 { curunit->uend = YES; 24 err(endflag, EOF, rsue) 25 } 26 clearerr(cf); 27 err(errflag, errno, rsue) 28 } 29 30 s_wsue(a) cilist *a; 31 { 32 int n; 33 reading = NO; 34 if(n=c_sue(a,WRITE)) return(n); 35 if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wsue) 36 reclen = 0; 37 recloc=ftell(cf); 38 fseek(cf,(long)sizeof(int),1); 39 curunit->uend = NO; 40 return(OK); 41 } 42 43 LOCAL 44 c_sue(a,flag) cilist *a; 45 { int n; 46 external = sequential = YES; 47 formatted = NO; 48 lfname = NULL; 49 elist = NO; 50 errflag = a->cierr; 51 endflag = a->ciend; 52 lunit = a->ciunit; 53 if(not_legal(lunit)) err(errflag,F_ERUNIT,rsue+5) 54 curunit = &units[lunit]; 55 if(!curunit->ufd && (n=fk_open(flag,SEQ,UNF,(ftnint)lunit))) 56 err(errflag,n,rsue+5) 57 cf = curunit->ufd; 58 elist = YES; 59 lfname = curunit->ufnm; 60 if(curunit->ufmt) err(errflag,F_ERNOUIO,rsue+5) 61 if(curunit->url) err(errflag,F_ERNOSIO,rsue+5) 62 if(!curunit->useek) err(errflag,F_ERSEEK,rsue+5) 63 return(OK); 64 } 65 66 e_wsue() 67 { long loc; 68 fwrite(&reclen,sizeof(int),1,cf); 69 loc=ftell(cf); 70 fseek(cf,recloc,0); 71 fwrite(&reclen,sizeof(int),1,cf); 72 fseek(cf,loc,0); 73 return(OK); 74 } 75 76 e_rsue() 77 { 78 fseek(cf,(long)(reclen-recpos+sizeof(int)),1); 79 return(OK); 80 } 81