date and time created 90/06/25 13:56:22 by bostic
[unix-history] / usr / src / usr.bin / f77 / libI77 / wsfe.c
CommitLineData
ec8d4de8 1/*
161423a6
RE
2 * Copyright (c) 1980 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
ec8d4de8 5 *
18ccb6ff 6 * @(#)wsfe.c 5.3 %G%
161423a6
RE
7 */
8
9/*
ec8d4de8
DL
10 * write sequential formatted external
11 */
12
13#include "fio.h"
14
15LOCAL char wsfe[] = "write sfe";
16
17extern int w_ed(),w_ned();
18int x_putc(),pr_put(),x_wend(),x_wnew(),x_tab();
19LOCAL ioflag new;
20
21s_wsfe(a) cilist *a; /*start*/
22{ int n;
23 reading = NO;
089a8031 24 sequential = YES;
ec8d4de8
DL
25 if(n=c_sfe(a,WRITE,SEQ,wsfe)) return(n);
26 if(curunit->url) err(errflag,F_ERNOSIO,wsfe)
27 if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wsfe)
28 curunit->uend = NO;
29 if (curunit->uprnt) putn = pr_put;
30 else putn = x_putc;
31 new = YES;
32 doed= w_ed;
33 doned= w_ned;
34 doend = x_wend;
35 dorevert = donewrec = x_wnew;
36 dotab = x_tab;
37 if(pars_f()) err(errflag,F_ERFMT,wsfe)
38 fmt_bg();
39 return(OK);
40}
41
42LOCAL
43x_putc(c)
44{
45 if(c=='\n') recpos = reclen = cursor = 0;
46 else recpos++;
18ccb6ff 47 putc(c,cf);
ec8d4de8
DL
48 return(OK);
49}
50
51LOCAL
52pr_put(c)
53{
54 if(c=='\n')
55 { new = YES;
56 recpos = reclen = cursor = 0;
57 }
58 else if(new)
59 { new = NO;
60 if(c=='0') c = '\n';
61 else if(c=='1') c = '\f';
62 else return(OK);
63 }
64 else recpos++;
18ccb6ff 65 putc(c,cf);
ec8d4de8
DL
66 return(OK);
67}
68
69LOCAL
70x_wnew()
71{
72 if(reclen>recpos) fseek(cf,(long)(reclen-recpos),1);
73 return((*putn)('\n'));
74}
75
76LOCAL
77x_wend(last) char last;
78{
79 if(reclen>recpos) fseek(cf,(long)(reclen-recpos),1);
18ccb6ff
JB
80 if(last)
81 return((*putn)(last));
82 else
83 return(OK);
ec8d4de8
DL
84}
85
86e_wsfe()
87{ int n;
88 n=en_fio();
89 fmtbuf=NULL;
90 return(n);
91}