xref: /csrg-svn/usr.bin/f77/libI77/wdfe.c (revision 20991)
1*20991Slibs /*
2*20991Slibs char id_wdfe[] = "@(#)wdfe.c	1.1";
3*20991Slibs  *
4*20991Slibs  * write direct formatted external i/o
5*20991Slibs  */
6*20991Slibs 
7*20991Slibs #include "fio.h"
8*20991Slibs 
9*20991Slibs extern int w_ed(),w_ned();
10*20991Slibs int y_putc(),y_wnew(),y_tab();
11*20991Slibs 
12*20991Slibs LOCAL char wdfe[] = "write dfe";
13*20991Slibs 
14*20991Slibs s_wdfe(a) cilist *a;
15*20991Slibs {
16*20991Slibs 	int n;
17*20991Slibs 	reading = NO;
18*20991Slibs 	if(n=c_dfe(a,WRITE,wdfe)) return(n);
19*20991Slibs 	curunit->uend = NO;
20*20991Slibs 	if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wdfe)
21*20991Slibs 	putn = y_putc;
22*20991Slibs 	doed = w_ed;
23*20991Slibs 	doned = w_ned;
24*20991Slibs 	dotab = y_tab;
25*20991Slibs 	dorevert = doend = donewrec = y_wnew;
26*20991Slibs 	if(pars_f()) err(errflag,F_ERFMT,wdfe)
27*20991Slibs 	fmt_bg();
28*20991Slibs 	return(OK);
29*20991Slibs }
30*20991Slibs 
31*20991Slibs e_wdfe()
32*20991Slibs {
33*20991Slibs 	en_fio();
34*20991Slibs 	return(OK);
35*20991Slibs }
36*20991Slibs 
37*20991Slibs LOCAL
38*20991Slibs y_putc(c)
39*20991Slibs {
40*20991Slibs 	if(curunit->url!=1 && recpos++ >= curunit->url) err(errflag,F_EREREC,wdfe)
41*20991Slibs 	putc(c,cf);
42*20991Slibs 	return(OK);
43*20991Slibs }
44*20991Slibs 
45*20991Slibs LOCAL
46*20991Slibs y_wnew()
47*20991Slibs {	if(curunit->url != 1)
48*20991Slibs 	{	if(reclen > recpos)
49*20991Slibs 		{	fseek(cf,(long)(reclen-recpos),1);
50*20991Slibs 			recpos = reclen;
51*20991Slibs 		}
52*20991Slibs 		while(recpos < curunit->url) (*putn)(' ');
53*20991Slibs 		recnum++;
54*20991Slibs 		recpos = reclen = cursor = 0;
55*20991Slibs 	}
56*20991Slibs 	return(OK);
57*20991Slibs }
58