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