string.h is ANSI C include file
[unix-history] / usr / src / usr.bin / f77 / libI77 / c_iio.c
CommitLineData
ee26f47f 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.
ee26f47f 5 *
089a8031 6 * @(#)c_iio.c 5.2 %G%
161423a6
RE
7 */
8
9/*
ee26f47f
DL
10 * internal (character array) i/o: common portions
11 */
12
13#include "fio.h"
14#include "lio.h"
15
16LOCAL icilist *svic; /* active internal io list */
ae5bf0af 17LOCAL lio_nl;
ee26f47f
DL
18
19int z_wnew();
20
21z_getc()
22{
ae5bf0af
DL
23 if(formatted == LISTDIRECTED )
24 {
25 if( lio_nl == YES )
26 {
27 recnum++;
28 recpos = 0;
29 }
30 else if (recpos == svic->icirlen)
31 {
32 lio_nl = YES;
33 return('\n');
34 }
35 lio_nl = NO;
36 }
37
ee26f47f
DL
38 if(icptr >= icend && !recpos) /* new rec beyond eof */
39 { leof = EOF;
40 return(EOF);
41 }
42 if(recpos++ < svic->icirlen) return(*icptr++);
ee26f47f
DL
43 return(' ');
44}
45
46z_putc(c) char c;
47{
48 if(icptr < icend)
49 { if(c=='\n') return(z_wnew());
50 if(recpos++ < svic->icirlen)
51 { *icptr++ = c;
52 return(OK);
53 }
54 else err(errflag,F_EREREC,"iio")
55 }
56 leof = EOF;
57#ifndef KOSHER
58 err(endflag,EOF,"iio") /* NOT STANDARD, end-of-file on writes */
59#endif
60#ifdef KOSHER
61 err(errflag,F_EREREC,"iio")
62#endif
63}
64
65z_ungetc(ch,cf) char ch;
ae5bf0af
DL
66{
67 if( lio_nl == YES )
68 {
69 lio_nl = NO;
70 return(OK);
71 }
72 if(ch==EOF || --recpos >= svic->icirlen) return(OK);
ee26f47f
DL
73 if(--icptr < svic->iciunit || recpos < 0) err(errflag,F_ERBREC,"ilio")
74 *icptr = ch;
75 return(OK);
76}
77
78LOCAL
79c_fi(a) icilist *a;
80{
81 fmtbuf=a->icifmt;
82 formatted = FORMATTED;
83 external = NO;
84 cblank=cplus=NO;
85 scale=cursor=0;
86 radix = 10;
87 signit = YES;
88 elist = YES;
89 svic = a;
90 recpos=reclen=0;
91 icend = a->iciunit + a->icirnum*a->icirlen;
92 errflag = a->icierr;
93 endflag = a->iciend;
94 return(OK);
95}
96
97c_si(a) icilist *a;
98{
99 sequential = YES;
100 recnum = 0;
101 icptr = a->iciunit;
102 return(c_fi(a));
103}
104
105c_di(a) icilist *a;
106{
107 sequential = NO;
108 recnum = a->icirec - 1;
109 icptr = a->iciunit + recnum*a->icirlen;
110 return(c_fi(a));
111}
112
113z_rnew()
114{
115 icptr = svic->iciunit + (++recnum)*svic->icirlen;
116 recpos = reclen = cursor = 0;
117 return(OK);
118}
119
120z_wnew()
121{
122 if(reclen > recpos)
123 { icptr += (reclen - recpos);
124 recpos = reclen;
125 }
126 while(recpos < svic->icirlen) (*putn)(' ');
127 recpos = reclen = cursor = 0;
128 recnum++;
129 return(OK);
130}
131
132z_tab()
133{ int n;
134 if(reclen < recpos) reclen = recpos;
135 if((recpos + cursor) < 0) cursor = -recpos; /* to BOR */
136 n = reclen - recpos;
137 if(!reading && (cursor-n) > 0)
138 { icptr += n;
139 recpos = reclen;
140 cursor -= n;
141 while(cursor--) if(n=(*putn)(' ')) return(n);
142 }
143 else
144 { icptr += cursor;
145 recpos += cursor;
146 }
147 return(cursor=0);
148}
149
150c_li(a) icilist *a;
151{
152 fmtbuf="int list io";
089a8031
JB
153 sequential = YES;
154 formatted = LISTDIRECTED;
ee26f47f
DL
155 external = NO;
156 elist = YES;
157 svic = a;
158 recnum = recpos = 0;
159 cplus = cblank = NO;
ae5bf0af 160 lio_nl = NO;
ee26f47f
DL
161 icptr = a->iciunit;
162 icend = icptr + a->icirlen * a->icirnum;
163 errflag = a->icierr;
164 endflag = a->iciend;
165 leof = NO;
166 return(OK);
167}