1 /*-
2 * Copyright (c) 1980 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * %sccs.include.proprietary.c%
6 */
7
8 #ifndef lint
9 static char sccsid[] = "@(#)wdfe.c 5.2 (Berkeley) 04/12/91";
10 #endif /* not lint */
11
12 /*
13 * write direct formatted external i/o
14 */
15
16 #include "fio.h"
17
18 extern int w_ed(),w_ned();
19 int y_putc(),y_wnew(),y_tab();
20
21 LOCAL char wdfe[] = "write dfe";
22
s_wdfe(a)23 s_wdfe(a) cilist *a;
24 {
25 int n;
26 reading = NO;
27 if(n=c_dfe(a,WRITE,wdfe)) return(n);
28 curunit->uend = NO;
29 if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wdfe)
30 putn = y_putc;
31 doed = w_ed;
32 doned = w_ned;
33 dotab = y_tab;
34 dorevert = doend = donewrec = y_wnew;
35 if(pars_f()) err(errflag,F_ERFMT,wdfe)
36 fmt_bg();
37 return(OK);
38 }
39
e_wdfe()40 e_wdfe()
41 {
42 en_fio();
43 return(OK);
44 }
45
46 LOCAL
y_putc(c)47 y_putc(c)
48 {
49 if(curunit->url!=1 && recpos++ >= curunit->url) err(errflag,F_EREREC,wdfe)
50 putc(c,cf);
51 return(OK);
52 }
53
54 LOCAL
y_wnew()55 y_wnew()
56 { if(curunit->url != 1)
57 { if(reclen > recpos)
58 { fseek(cf,(long)(reclen-recpos),1);
59 recpos = reclen;
60 }
61 while(recpos < curunit->url) (*putn)(' ');
62 recnum++;
63 recpos = reclen = cursor = 0;
64 }
65 return(OK);
66 }
67