| 1 | #include "fio.h" |
| 2 | extern int reclen; |
| 3 | long recloc; |
| 4 | s_rsue(a) cilist *a; |
| 5 | { |
| 6 | int n; |
| 7 | if(!init) f_init(); |
| 8 | if(n=c_sue(a,READ)) return(n); |
| 9 | reading=1; |
| 10 | recpos=0; |
| 11 | if(curunit->uwrt) nowreading(curunit); |
| 12 | if(fread(&reclen,sizeof(int),1,cf) |
| 13 | != 1) |
| 14 | { if(feof(cf)) |
| 15 | { curunit->uend = 1; |
| 16 | err(a->ciend, EOF, "start"); |
| 17 | } |
| 18 | clearerr(cf); |
| 19 | err(a->cierr, errno, "start"); |
| 20 | } |
| 21 | return(0); |
| 22 | } |
| 23 | s_wsue(a) cilist *a; |
| 24 | { |
| 25 | int n; |
| 26 | if(!init) f_init(); |
| 27 | if(n=c_sue(a,WRITE)) return(n); |
| 28 | reading=0; |
| 29 | reclen=0; |
| 30 | if(!curunit->uwrt) nowwriting(curunit); |
| 31 | recloc=ftell(cf); |
| 32 | fseek(cf,(long)sizeof(int),1); |
| 33 | return(0); |
| 34 | } |
| 35 | c_sue(a,flag) cilist *a; |
| 36 | { |
| 37 | if(a->ciunit >= MXUNIT || a->ciunit < 0) |
| 38 | err(a->cierr,101,"startio"); |
| 39 | external=sequential=1; |
| 40 | formatted=0; |
| 41 | curunit = &units[a->ciunit]; |
| 42 | elist=a; |
| 43 | if(curunit->ufd==NULL && fk_open(flag,SEQ,UNF,a->ciunit)) |
| 44 | err(a->cierr,114,"sue"); |
| 45 | cf=curunit->ufd; |
| 46 | if(curunit->ufmt) err(a->cierr,103,"sue") |
| 47 | if(!curunit->useek) err(a->cierr,103,"sue") |
| 48 | return(0); |
| 49 | } |
| 50 | e_wsue() |
| 51 | { long loc; |
| 52 | fwrite(&reclen,sizeof(int),1,cf); |
| 53 | loc=ftell(cf); |
| 54 | fseek(cf,recloc,0); |
| 55 | fwrite(&reclen,sizeof(int),1,cf); |
| 56 | fseek(cf,loc,0); |
| 57 | return(0); |
| 58 | } |
| 59 | e_rsue() |
| 60 | { |
| 61 | fseek(cf,(long)(reclen-recpos+sizeof(int)),1); |
| 62 | return(0); |
| 63 | } |