xref: /csrg-svn/usr.bin/f77/libI77/wdfe.c (revision 23092)
120991Slibs /*
2*23092Skre  * Copyright (c) 1980 Regents of the University of California.
3*23092Skre  * All rights reserved.  The Berkeley software License Agreement
4*23092Skre  * specifies the terms and conditions for redistribution.
520991Slibs  *
6*23092Skre  *	@(#)wdfe.c	5.1	06/07/85
7*23092Skre  */
8*23092Skre 
9*23092Skre /*
1020991Slibs  * write direct formatted external i/o
1120991Slibs  */
1220991Slibs 
1320991Slibs #include "fio.h"
1420991Slibs 
1520991Slibs extern int w_ed(),w_ned();
1620991Slibs int y_putc(),y_wnew(),y_tab();
1720991Slibs 
1820991Slibs LOCAL char wdfe[] = "write dfe";
1920991Slibs 
2020991Slibs s_wdfe(a) cilist *a;
2120991Slibs {
2220991Slibs 	int n;
2320991Slibs 	reading = NO;
2420991Slibs 	if(n=c_dfe(a,WRITE,wdfe)) return(n);
2520991Slibs 	curunit->uend = NO;
2620991Slibs 	if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wdfe)
2720991Slibs 	putn = y_putc;
2820991Slibs 	doed = w_ed;
2920991Slibs 	doned = w_ned;
3020991Slibs 	dotab = y_tab;
3120991Slibs 	dorevert = doend = donewrec = y_wnew;
3220991Slibs 	if(pars_f()) err(errflag,F_ERFMT,wdfe)
3320991Slibs 	fmt_bg();
3420991Slibs 	return(OK);
3520991Slibs }
3620991Slibs 
3720991Slibs e_wdfe()
3820991Slibs {
3920991Slibs 	en_fio();
4020991Slibs 	return(OK);
4120991Slibs }
4220991Slibs 
4320991Slibs LOCAL
4420991Slibs y_putc(c)
4520991Slibs {
4620991Slibs 	if(curunit->url!=1 && recpos++ >= curunit->url) err(errflag,F_EREREC,wdfe)
4720991Slibs 	putc(c,cf);
4820991Slibs 	return(OK);
4920991Slibs }
5020991Slibs 
5120991Slibs LOCAL
5220991Slibs y_wnew()
5320991Slibs {	if(curunit->url != 1)
5420991Slibs 	{	if(reclen > recpos)
5520991Slibs 		{	fseek(cf,(long)(reclen-recpos),1);
5620991Slibs 			recpos = reclen;
5720991Slibs 		}
5820991Slibs 		while(recpos < curunit->url) (*putn)(' ');
5920991Slibs 		recnum++;
6020991Slibs 		recpos = reclen = cursor = 0;
6120991Slibs 	}
6220991Slibs 	return(OK);
6320991Slibs }
64