1*20988Slibs /* 2*20988Slibs char id_wsfe[] = "@(#)wsfe.c 1.1"; 3*20988Slibs * 4*20988Slibs * write sequential formatted external 5*20988Slibs */ 6*20988Slibs 7*20988Slibs #include "fio.h" 8*20988Slibs 9*20988Slibs LOCAL char wsfe[] = "write sfe"; 10*20988Slibs 11*20988Slibs extern int w_ed(),w_ned(); 12*20988Slibs int x_putc(),pr_put(),x_wend(),x_wnew(),x_tab(); 13*20988Slibs LOCAL ioflag new; 14*20988Slibs 15*20988Slibs s_wsfe(a) cilist *a; /*start*/ 16*20988Slibs { int n; 17*20988Slibs reading = NO; 18*20988Slibs sequential=FORMATTED; 19*20988Slibs if(n=c_sfe(a,WRITE,SEQ,wsfe)) return(n); 20*20988Slibs if(curunit->url) err(errflag,F_ERNOSIO,wsfe) 21*20988Slibs if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wsfe) 22*20988Slibs curunit->uend = NO; 23*20988Slibs if (curunit->uprnt) putn = pr_put; 24*20988Slibs else putn = x_putc; 25*20988Slibs new = YES; 26*20988Slibs doed= w_ed; 27*20988Slibs doned= w_ned; 28*20988Slibs doend = x_wend; 29*20988Slibs dorevert = donewrec = x_wnew; 30*20988Slibs dotab = x_tab; 31*20988Slibs if(pars_f()) err(errflag,F_ERFMT,wsfe) 32*20988Slibs fmt_bg(); 33*20988Slibs return(OK); 34*20988Slibs } 35*20988Slibs 36*20988Slibs LOCAL 37*20988Slibs x_putc(c) 38*20988Slibs { 39*20988Slibs if(c=='\n') recpos = reclen = cursor = 0; 40*20988Slibs else recpos++; 41*20988Slibs if (c) putc(c,cf); 42*20988Slibs return(OK); 43*20988Slibs } 44*20988Slibs 45*20988Slibs LOCAL 46*20988Slibs pr_put(c) 47*20988Slibs { 48*20988Slibs if(c=='\n') 49*20988Slibs { new = YES; 50*20988Slibs recpos = reclen = cursor = 0; 51*20988Slibs } 52*20988Slibs else if(new) 53*20988Slibs { new = NO; 54*20988Slibs if(c=='0') c = '\n'; 55*20988Slibs else if(c=='1') c = '\f'; 56*20988Slibs else return(OK); 57*20988Slibs } 58*20988Slibs else recpos++; 59*20988Slibs if (c) putc(c,cf); 60*20988Slibs return(OK); 61*20988Slibs } 62*20988Slibs 63*20988Slibs LOCAL 64*20988Slibs x_wnew() 65*20988Slibs { 66*20988Slibs if(reclen>recpos) fseek(cf,(long)(reclen-recpos),1); 67*20988Slibs return((*putn)('\n')); 68*20988Slibs } 69*20988Slibs 70*20988Slibs LOCAL 71*20988Slibs x_wend(last) char last; 72*20988Slibs { 73*20988Slibs if(reclen>recpos) fseek(cf,(long)(reclen-recpos),1); 74*20988Slibs return((*putn)(last)); 75*20988Slibs } 76*20988Slibs 77*20988Slibs e_wsfe() 78*20988Slibs { int n; 79*20988Slibs n=en_fio(); 80*20988Slibs fmtbuf=NULL; 81*20988Slibs return(n); 82*20988Slibs } 83