BSD 4_4 release
[unix-history] / usr / src / usr.bin / f77 / libI77 / wdfe.c
/*-
* Copyright (c) 1980 The Regents of the University of California.
* All rights reserved.
*
* This module is believed to contain source code proprietary to AT&T.
* Use and redistribution is subject to the Berkeley Software License
* Agreement and your Software Agreement with AT&T (Western Electric).
*/
#ifndef lint
static char sccsid[] = "@(#)wdfe.c 5.2 (Berkeley) 4/12/91";
#endif /* not lint */
/*
* write direct formatted external i/o
*/
#include "fio.h"
extern int w_ed(),w_ned();
int y_putc(),y_wnew(),y_tab();
LOCAL char wdfe[] = "write dfe";
s_wdfe(a) cilist *a;
{
int n;
reading = NO;
if(n=c_dfe(a,WRITE,wdfe)) return(n);
curunit->uend = NO;
if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wdfe)
putn = y_putc;
doed = w_ed;
doned = w_ned;
dotab = y_tab;
dorevert = doend = donewrec = y_wnew;
if(pars_f()) err(errflag,F_ERFMT,wdfe)
fmt_bg();
return(OK);
}
e_wdfe()
{
en_fio();
return(OK);
}
LOCAL
y_putc(c)
{
if(curunit->url!=1 && recpos++ >= curunit->url) err(errflag,F_EREREC,wdfe)
putc(c,cf);
return(OK);
}
LOCAL
y_wnew()
{ if(curunit->url != 1)
{ if(reclen > recpos)
{ fseek(cf,(long)(reclen-recpos),1);
recpos = reclen;
}
while(recpos < curunit->url) (*putn)(' ');
recnum++;
recpos = reclen = cursor = 0;
}
return(OK);
}