xref: /csrg-svn/usr.bin/f77/libI77/wdfe.c (revision 47943)
1*47943Sbostic /*-
2*47943Sbostic  * Copyright (c) 1980 The Regents of the University of California.
3*47943Sbostic  * All rights reserved.
420991Slibs  *
5*47943Sbostic  * %sccs.include.proprietary.c%
623092Skre  */
723092Skre 
8*47943Sbostic #ifndef lint
9*47943Sbostic static char sccsid[] = "@(#)wdfe.c	5.2 (Berkeley) 04/12/91";
10*47943Sbostic #endif /* not lint */
11*47943Sbostic 
1223092Skre /*
1320991Slibs  * write direct formatted external i/o
1420991Slibs  */
1520991Slibs 
1620991Slibs #include "fio.h"
1720991Slibs 
1820991Slibs extern int w_ed(),w_ned();
1920991Slibs int y_putc(),y_wnew(),y_tab();
2020991Slibs 
2120991Slibs LOCAL char wdfe[] = "write dfe";
2220991Slibs 
s_wdfe(a)2320991Slibs s_wdfe(a) cilist *a;
2420991Slibs {
2520991Slibs 	int n;
2620991Slibs 	reading = NO;
2720991Slibs 	if(n=c_dfe(a,WRITE,wdfe)) return(n);
2820991Slibs 	curunit->uend = NO;
2920991Slibs 	if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wdfe)
3020991Slibs 	putn = y_putc;
3120991Slibs 	doed = w_ed;
3220991Slibs 	doned = w_ned;
3320991Slibs 	dotab = y_tab;
3420991Slibs 	dorevert = doend = donewrec = y_wnew;
3520991Slibs 	if(pars_f()) err(errflag,F_ERFMT,wdfe)
3620991Slibs 	fmt_bg();
3720991Slibs 	return(OK);
3820991Slibs }
3920991Slibs 
e_wdfe()4020991Slibs e_wdfe()
4120991Slibs {
4220991Slibs 	en_fio();
4320991Slibs 	return(OK);
4420991Slibs }
4520991Slibs 
4620991Slibs LOCAL
y_putc(c)4720991Slibs y_putc(c)
4820991Slibs {
4920991Slibs 	if(curunit->url!=1 && recpos++ >= curunit->url) err(errflag,F_EREREC,wdfe)
5020991Slibs 	putc(c,cf);
5120991Slibs 	return(OK);
5220991Slibs }
5320991Slibs 
5420991Slibs LOCAL
y_wnew()5520991Slibs y_wnew()
5620991Slibs {	if(curunit->url != 1)
5720991Slibs 	{	if(reclen > recpos)
5820991Slibs 		{	fseek(cf,(long)(reclen-recpos),1);
5920991Slibs 			recpos = reclen;
6020991Slibs 		}
6120991Slibs 		while(recpos < curunit->url) (*putn)(' ');
6220991Slibs 		recnum++;
6320991Slibs 		recpos = reclen = cursor = 0;
6420991Slibs 	}
6520991Slibs 	return(OK);
6620991Slibs }
67