1*47943Sbostic /*-
2*47943Sbostic * Copyright (c) 1980 The Regents of the University of California.
3*47943Sbostic * All rights reserved.
420988Slibs *
5*47943Sbostic * %sccs.include.proprietary.c%
623095Skre */
723095Skre
8*47943Sbostic #ifndef lint
9*47943Sbostic static char sccsid[] = "@(#)wsfe.c 5.4 (Berkeley) 04/12/91";
10*47943Sbostic #endif /* not lint */
11*47943Sbostic
1223095Skre /*
1320988Slibs * write sequential formatted external
1420988Slibs */
1520988Slibs
1620988Slibs #include "fio.h"
1720988Slibs
1820988Slibs LOCAL char wsfe[] = "write sfe";
1920988Slibs
2020988Slibs extern int w_ed(),w_ned();
2120988Slibs int x_putc(),pr_put(),x_wend(),x_wnew(),x_tab();
2220988Slibs LOCAL ioflag new;
2320988Slibs
s_wsfe(a)2420988Slibs s_wsfe(a) cilist *a; /*start*/
2520988Slibs { int n;
2620988Slibs reading = NO;
2724097Sjerry sequential = YES;
2820988Slibs if(n=c_sfe(a,WRITE,SEQ,wsfe)) return(n);
2920988Slibs if(curunit->url) err(errflag,F_ERNOSIO,wsfe)
3020988Slibs if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wsfe)
3120988Slibs curunit->uend = NO;
3220988Slibs if (curunit->uprnt) putn = pr_put;
3320988Slibs else putn = x_putc;
3420988Slibs new = YES;
3520988Slibs doed= w_ed;
3620988Slibs doned= w_ned;
3720988Slibs doend = x_wend;
3820988Slibs dorevert = donewrec = x_wnew;
3920988Slibs dotab = x_tab;
4020988Slibs if(pars_f()) err(errflag,F_ERFMT,wsfe)
4120988Slibs fmt_bg();
4220988Slibs return(OK);
4320988Slibs }
4420988Slibs
4520988Slibs LOCAL
x_putc(c)4620988Slibs x_putc(c)
4720988Slibs {
4820988Slibs if(c=='\n') recpos = reclen = cursor = 0;
4920988Slibs else recpos++;
5029409Sjerry putc(c,cf);
5120988Slibs return(OK);
5220988Slibs }
5320988Slibs
5420988Slibs LOCAL
pr_put(c)5520988Slibs pr_put(c)
5620988Slibs {
5720988Slibs if(c=='\n')
5820988Slibs { new = YES;
5920988Slibs recpos = reclen = cursor = 0;
6020988Slibs }
6120988Slibs else if(new)
6220988Slibs { new = NO;
6320988Slibs if(c=='0') c = '\n';
6420988Slibs else if(c=='1') c = '\f';
6520988Slibs else return(OK);
6620988Slibs }
6720988Slibs else recpos++;
6829409Sjerry putc(c,cf);
6920988Slibs return(OK);
7020988Slibs }
7120988Slibs
7220988Slibs LOCAL
x_wnew()7320988Slibs x_wnew()
7420988Slibs {
7520988Slibs if(reclen>recpos) fseek(cf,(long)(reclen-recpos),1);
7620988Slibs return((*putn)('\n'));
7720988Slibs }
7820988Slibs
7920988Slibs LOCAL
x_wend(last)8020988Slibs x_wend(last) char last;
8120988Slibs {
8220988Slibs if(reclen>recpos) fseek(cf,(long)(reclen-recpos),1);
8329409Sjerry if(last)
8429409Sjerry return((*putn)(last));
8529409Sjerry else
8629409Sjerry return(OK);
8720988Slibs }
8820988Slibs
e_wsfe()8920988Slibs e_wsfe()
9020988Slibs { int n;
9120988Slibs n=en_fio();
9220988Slibs fmtbuf=NULL;
9320988Slibs return(n);
9420988Slibs }
95