xref: /csrg-svn/usr.bin/f77/libI77/wsfe.c (revision 47943)
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