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