120988Slibs /* 223095Skre * Copyright (c) 1980 Regents of the University of California. 323095Skre * All rights reserved. The Berkeley software License Agreement 423095Skre * specifies the terms and conditions for redistribution. 520988Slibs * 6*24097Sjerry * @(#)wsfe.c 5.2 07/30/85 723095Skre */ 823095Skre 923095Skre /* 1020988Slibs * write sequential formatted external 1120988Slibs */ 1220988Slibs 1320988Slibs #include "fio.h" 1420988Slibs 1520988Slibs LOCAL char wsfe[] = "write sfe"; 1620988Slibs 1720988Slibs extern int w_ed(),w_ned(); 1820988Slibs int x_putc(),pr_put(),x_wend(),x_wnew(),x_tab(); 1920988Slibs LOCAL ioflag new; 2020988Slibs 2120988Slibs s_wsfe(a) cilist *a; /*start*/ 2220988Slibs { int n; 2320988Slibs reading = NO; 24*24097Sjerry sequential = YES; 2520988Slibs if(n=c_sfe(a,WRITE,SEQ,wsfe)) return(n); 2620988Slibs if(curunit->url) err(errflag,F_ERNOSIO,wsfe) 2720988Slibs if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wsfe) 2820988Slibs curunit->uend = NO; 2920988Slibs if (curunit->uprnt) putn = pr_put; 3020988Slibs else putn = x_putc; 3120988Slibs new = YES; 3220988Slibs doed= w_ed; 3320988Slibs doned= w_ned; 3420988Slibs doend = x_wend; 3520988Slibs dorevert = donewrec = x_wnew; 3620988Slibs dotab = x_tab; 3720988Slibs if(pars_f()) err(errflag,F_ERFMT,wsfe) 3820988Slibs fmt_bg(); 3920988Slibs return(OK); 4020988Slibs } 4120988Slibs 4220988Slibs LOCAL 4320988Slibs x_putc(c) 4420988Slibs { 4520988Slibs if(c=='\n') recpos = reclen = cursor = 0; 4620988Slibs else recpos++; 4720988Slibs if (c) putc(c,cf); 4820988Slibs return(OK); 4920988Slibs } 5020988Slibs 5120988Slibs LOCAL 5220988Slibs pr_put(c) 5320988Slibs { 5420988Slibs if(c=='\n') 5520988Slibs { new = YES; 5620988Slibs recpos = reclen = cursor = 0; 5720988Slibs } 5820988Slibs else if(new) 5920988Slibs { new = NO; 6020988Slibs if(c=='0') c = '\n'; 6120988Slibs else if(c=='1') c = '\f'; 6220988Slibs else return(OK); 6320988Slibs } 6420988Slibs else recpos++; 6520988Slibs if (c) putc(c,cf); 6620988Slibs return(OK); 6720988Slibs } 6820988Slibs 6920988Slibs LOCAL 7020988Slibs x_wnew() 7120988Slibs { 7220988Slibs if(reclen>recpos) fseek(cf,(long)(reclen-recpos),1); 7320988Slibs return((*putn)('\n')); 7420988Slibs } 7520988Slibs 7620988Slibs LOCAL 7720988Slibs x_wend(last) char last; 7820988Slibs { 7920988Slibs if(reclen>recpos) fseek(cf,(long)(reclen-recpos),1); 8020988Slibs return((*putn)(last)); 8120988Slibs } 8220988Slibs 8320988Slibs e_wsfe() 8420988Slibs { int n; 8520988Slibs n=en_fio(); 8620988Slibs fmtbuf=NULL; 8720988Slibs return(n); 8820988Slibs } 89