|
|
1.1 ! root 1: /* @(#)wsfe.c 1.2 */ ! 2: /* 3.0 SID # 1.2 */ ! 3: /*write sequential formatted external*/ ! 4: #include "fio.h" ! 5: #include "fmt.h" ! 6: extern int x_putc(),w_ed(),w_ned(); ! 7: extern int xw_end(),xw_rev(),x_wSL(); ! 8: extern int hiwater; ! 9: s_wsfe(a) cilist *a; /*start*/ ! 10: { int n; ! 11: if(!init) f_init(); ! 12: if(n=c_sfe(a)) return(n); ! 13: reading=0; ! 14: sequential=1; ! 15: formatted=1; ! 16: external=1; ! 17: elist=a; ! 18: hiwater = cursor=recpos=0; ! 19: nonl = 0; ! 20: scale=0; ! 21: fmtbuf=a->cifmt; ! 22: curunit = &units[a->ciunit]; ! 23: cf=curunit->ufd; ! 24: if(pars_f(fmtbuf)<0) err(a->cierr,100,"startio"); ! 25: putn= x_putc; ! 26: doed= w_ed; ! 27: doned= w_ned; ! 28: doend=xw_end; ! 29: dorevert=xw_rev; ! 30: donewrec=x_wSL; ! 31: fmt_bg(); ! 32: cplus=0; ! 33: cblank=curunit->ublnk; ! 34: if(!curunit->uwrt) (void) nowwriting(curunit); ! 35: return(0); ! 36: } ! 37: x_putc(c) ! 38: { ! 39: /* this uses \n as an indicator of record-end */ ! 40: if(c == '\n' && recpos < hiwater) { /* fseek calls fflush, a loss */ ! 41: if(cf->_ptr + hiwater - recpos < _bufend(cf)) ! 42: cf->_ptr += hiwater - recpos; ! 43: else ! 44: (void) fseek(cf, hiwater - recpos, 1); ! 45: } ! 46: putc(c,cf); ! 47: recpos++; ! 48: } ! 49: pr_put(c) ! 50: { static flag new = 1; ! 51: recpos++; ! 52: if(c=='\n') ! 53: { new=1; ! 54: putc(c,cf); ! 55: } ! 56: else if(new==1) ! 57: { new=0; ! 58: if(c=='0') putc('\n',cf); ! 59: else if(c=='1') putc('\f',cf); ! 60: } ! 61: else putc(c,cf); ! 62: } ! 63: x_wSL() ! 64: { ! 65: (*putn)('\n'); ! 66: recpos=0; ! 67: cursor = 0; ! 68: hiwater = 0; ! 69: return(1); ! 70: } ! 71: xw_end() ! 72: { ! 73: if(nonl == 0) ! 74: (*putn)('\n'); ! 75: hiwater = recpos = cursor = 0; ! 76: return(0); ! 77: } ! 78: xw_rev() ! 79: { ! 80: if(workdone) (*putn)('\n'); ! 81: hiwater = recpos = cursor = 0; ! 82: return(workdone=0); ! 83: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.