Research V7 development
[unix-history] / usr / src / libI77 / rsfe.c
CommitLineData
8662e665
PW
1/* read sequential formatted external */
2#include "fio.h"
3#include "fmt.h"
4extern int x_getc(),rd_ed(),rd_ned();
5extern int x_endp(),x_rev(),xrd_SL();
6s_rsfe(a) cilist *a; /* start */
7{ int n;
8 if(!init) f_init();
9 if(n=c_sfe(a,READ)) return(n);
10 reading=1;
11 sequential=1;
12 formatted=1;
13 external=1;
14 elist=a;
15 cursor=recpos=0;
16 scale=0;
17 fmtbuf=a->cifmt;
18 if(pars_f(fmtbuf)<0) err(a->cierr,100,"startio");
19 curunit= &units[a->ciunit];
20 cf=curunit->ufd;
21 getn= x_getc;
22 doed= rd_ed;
23 doned= rd_ned;
24 fmt_bg();
25 doend=x_endp;
26 donewrec=xrd_SL;
27 dorevert=x_rev;
28 cblank=curunit->ublnk;
29 cplus=0;
30 if(curunit->uwrt) nowreading(curunit);
31 return(0);
32}
33xrd_SL()
34{ int ch;
35 if(!curunit->uend)
36 while((ch=getc(cf))!='\n' && ch!=EOF);
37 cursor=recpos=0;
38 return(1);
39}
40x_getc()
41{ int ch;
42 if(curunit->uend) return(EOF);
43 if((ch=getc(cf))!=EOF && ch!='\n')
44 { recpos++;
45 return(ch);
46 }
47 if(ch=='\n')
48 { ungetc(ch,cf);
49 return(ch);
50 }
51 if(feof(cf))
52 { errno=0;
53 curunit->uend=1;
54 return(-1);
55 }
56 return(-1);
57}
58x_endp()
59{
60 xrd_SL();
61 return(0);
62}
63x_rev()
64{
65 xrd_SL();
66 return(0);
67}