Commit | Line | Data |
---|---|---|
8662e665 PW |
1 | /* read sequential formatted external */ |
2 | #include "fio.h" | |
3 | #include "fmt.h" | |
4 | extern int x_getc(),rd_ed(),rd_ned(); | |
5 | extern int x_endp(),x_rev(),xrd_SL(); | |
6 | s_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 | } | |
33 | xrd_SL() | |
34 | { int ch; | |
35 | if(!curunit->uend) | |
36 | while((ch=getc(cf))!='\n' && ch!=EOF); | |
37 | cursor=recpos=0; | |
38 | return(1); | |
39 | } | |
40 | x_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 | } | |
58 | x_endp() | |
59 | { | |
60 | xrd_SL(); | |
61 | return(0); | |
62 | } | |
63 | x_rev() | |
64 | { | |
65 | xrd_SL(); | |
66 | return(0); | |
67 | } |